Changeset 5083


Ignore:
Timestamp:
Nov 14, 2021 10:35:51 AM (6 months ago)
Author:
toby
Message:

fix scaling of ISODISTORT displacement modes so esds are correct; minor formatting

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/imports/G2phase_CIF.py

    r5070 r5083  
    785785                raise Exception("Rank of _iso_displacivemode != _iso_deltacoordinate")
    786786
     787            # normalization constants
     788            normlist = []
     789            idlist = []
     790            for id,exp in zip(
     791                blk.get('_iso_displacivemodenorm_ID'),
     792                blk.get('_iso_displacivemodenorm_value'),
     793                ):
     794                idlist.append(int(id))
     795                normlist.append(float(exp))
     796            normlist = [i for i,j in sorted(zip(normlist,idlist),key=lambda k:k[1])]
    787797            # get mapping of modes to atomic coordinate displacements
    788798            displacivemodematrix = np.zeros((len(G2varObj),len(G2varObj)))
     
    797807            modeVarList = []
    798808            modeDispl = []
    799             for i,row in enumerate(Var2ModeMatrix):
     809            for i,(row,norm) in enumerate(zip(Var2ModeMatrix,normlist)):
    800810                constraint = []
    801811                for j,(lbl,k) in enumerate(zip(coordVarLbl,row)):
    802812                    if k == 0: continue
    803                     constraint.append([k,G2varObj[j]])
     813                    constraint.append([k/norm,G2varObj[j]])
    804814                modeVar = G2obj.G2VarObj(
    805815                    (self.Phase['ranId'],None,shortmodelist[i],None))
     
    808818                self.Constraints.append(constraint)
    809819                modeDispl.append(0.0)
    810             # normalization constants
    811             normlist = []
    812             idlist = []
    813             for id,exp in zip(
    814                 blk.get('_iso_displacivemodenorm_ID'),
    815                 blk.get('_iso_displacivemodenorm_value'),
    816                 ):
    817                 idlist.append(int(id))
    818                 normlist.append(float(exp))
    819             normlist = [i for i,j in sorted(zip(normlist,idlist),key=lambda k:k[1])]
    820820            #----------------------------------------------------------------------
    821821            # save the ISODISTORT info for "mode analysis"
     
    10051005            print('ISO modes from Iso coordinate vars (using Var2ModeMatrix, IsoVarList, G2VarList & G2ModeList)' )
    10061006            for i,row in enumerate(self.Phase['ISODISTORT']['Var2ModeMatrix']):
    1007                 head = '  ' + str(self.Phase['ISODISTORT']['G2ModeList'][i]) + ' = '
     1007                norm = self.Phase['ISODISTORT']['NormList'][i]
     1008                head = '  ' + str(self.Phase['ISODISTORT']['G2ModeList'][i]) + ' = ('
    10081009                line = ''
    10091010                for j,(lbl,k) in enumerate(zip(coordVarLbl,row)):
    10101011                    var = self.Phase['ISODISTORT']['IsoVarList'][j]
    10111012                    head,line = fmtEqn(j,head,line,var,k)
     1013                print(head+line+') / {:.3g}'.format(norm))
     1014                head = '              = '
     1015                line = ''
     1016                for j,(lbl,k) in enumerate(zip(coordVarLbl,row)):
     1017                    var = self.Phase['ISODISTORT']['IsoVarList'][j]
     1018                    head,line = fmtEqn(j,head,line,var,k/norm)
    10121019                print(head+line)
    10131020            print('\nConstraints')
     
    10401047                                           self.Phase['ISODISTORT']['NormList'])):
    10411048                line = ''
    1042                 head = str(self.Phase['ISODISTORT']['G2ModeList'][i])+' = ('
     1049                print(str(self.Phase['ISODISTORT']['IsoModeList'][i])+' = ')
     1050                head = '  = ('
    10431051                for j,(lbl,k) in enumerate(zip(coordVarLbl,row)):
    10441052                    head,line = fmtEqn(j,head,line,lbl,k)
    10451053                print(head+line+') / '+('%.3f'%n))
    10461054                line = ''
    1047                 head = str(self.Phase['ISODISTORT']['G2ModeList'][i])+' = ('
     1055                head = ' = ('
    10481056                vsum = 0.
    10491057                for j,(lbl,k) in enumerate(zip(coordVarLbl,row)):
     
    10541062                fileval = modeVarDelta[self.Phase['ISODISTORT']['IsoModeList'][i]]
    10551063                print("{} = {:4g} (value read from CIF = {:4g})\n".format(
    1056                     self.Phase['ISODISTORT']['G2ModeList'][i], vsum, fileval))
     1064                    self.Phase['ISODISTORT']['IsoModeList'][i], vsum, fileval))
    10571065
    10581066            print( 70*'=')
     
    10791087                        l1 += ' + '
    10801088                    l += '{:} {:3g} * {:4g} * {:}'.format(
    1081                         l1, k1, n, self.Phase['ISODISTORT']['G2ModeList'][j])
     1089                        l1, k1, n, self.Phase['ISODISTORT']['IsoModeList'][j])
    10821090                   
    10831091                    s += n * modeVarDelta[self.Phase['ISODISTORT']['IsoModeList'][j]] * k
     
    11241132            for mode,G2mode in zip(self.Phase['ISODISTORT']['IsoModeList'],
    11251133                                   self.Phase['ISODISTORT']['G2ModeList']):
    1126                 print("  "+str(G2mode),' ==>', mode)
     1134                print('{} ==> {}'.format(str(G2mode), mode))
    11271135            print('\nConstraint help dict info')
    11281136            for i in self.Constraints:
Note: See TracChangeset for help on using the changeset viewer.