Changeset 3415 for trunk/GSASIIstrMath.py
- Timestamp:
- May 31, 2018 3:47:44 PM (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/GSASIIstrMath.py
r3414 r3415 860 860 else: 861 861 fotp = FPP*Tcorr 862 # GSASIIpath.IPyBreak()863 862 if 'T' in calcControls[hfx+'histType']: 864 863 fa = np.array([fot*cosp,-np.reshape(Flack*FPP,sinp.shape)*sinp*Tcorr]) … … 910 909 dFdbab[iBeg:iFin] = 2.*(fas[0,nxs]*np.array([np.sum(dfadba.T*dBabdA,axis=0),np.sum(-dfadba.T*parmDict[phfx+'BabA']*SQfactor*dBabdA,axis=0)])+ \ 911 910 fbs[0,nxs]*np.array([np.sum(dfbdba.T*dBabdA,axis=0),np.sum(-dfbdba.T*parmDict[phfx+'BabA']*SQfactor*dBabdA,axis=0)])).T 912 # GSASIIpath.IPyBreak()913 911 iBeg += blkSize 914 912 # print 'derv time %.4f, nref %d, blkSize %d'%(time.time()-time0,nRef,blkSize) … … 982 980 Gdata = SGData['MagMom'][nxs,:,nxs]*Gdata #flip vectors according to spin flip * det(opM) 983 981 Mag = np.tile(Mag[:,nxs],Nops).T #make Mag same length as Gdata 984 Kdata = np.inner(Gdata.T,uAmat).T*np.sqrt(nl.det(Ginv))/Mag #Cartesian unit vectors 982 VGi = np.sqrt(nl.det(Ginv)) 983 Kdata = np.inner(Gdata.T,uAmat).T*VGi/Mag #Cartesian unit vectors 985 984 Uij = np.array(G2lat.U6toUij(Uijdata)) 986 985 bij = Mast*Uij.T … … 1075 1074 :returns: dict dFdvDict: dictionary of derivatives 1076 1075 ''' 1076 1077 1077 g = nl.inv(G) 1078 1078 ast = np.sqrt(np.diag(G)) … … 1097 1097 Mag = np.array([np.sqrt(np.inner(mag,np.inner(mag,Ginv))) for mag in Gdata.T]) 1098 1098 dMdm = np.inner(Gdata.T,Ginv).T/Mag 1099 Gones = np.ones_like(Gdata) 1099 1100 Gdata = np.inner(Gdata.T,SGMT).T #apply sym. ops. 1101 Gones = np.inner(Gones.T,SGMT).T 1100 1102 if SGData['SGInv'] and not SGData['SGFixed']: 1101 1103 Gdata = np.hstack((Gdata,-Gdata)) #inversion if any 1104 Gones = np.hstack((Gones,-Gones)) #inversion if any 1102 1105 Gdata = np.hstack([Gdata for icen in range(Ncen)]) #dup over cell centering 1106 Gones = np.hstack([Gones for icen in range(Ncen)]) #dup over cell centering 1103 1107 Gdata = SGData['MagMom'][nxs,:,nxs]*Gdata #flip vectors according to spin flip 1108 Gones = SGData['MagMom'][nxs,:,nxs]*Gones #flip vectors according to spin flip 1104 1109 Mag = np.tile(Mag[:,nxs],Nops).T #make Mag same length as Gdata 1105 1110 VGi = np.sqrt(nl.det(Ginv)) 1106 1111 Kdata = np.inner(Gdata.T,uAmat).T*VGi/Mag #make unit vectors in Cartesian space 1107 dkdG = (np.inner(np.ones(3),uAmat)*VGi)[:,nxs,nxs]/Mag[nxs,:,:] 1112 # Gones = np.ones_like(Gdata) 1113 dkdG = (np.inner(Gones.T,uAmat).T*VGi)/Mag 1108 1114 dkdm = dkdG-Kdata*dMdm[:,nxs,:]/Mag[nxs,:,:] 1109 1115 dFdMx = np.zeros((nRef,mSize,3)) … … 1159 1165 Q = HM[:,:,nxs,nxs]*eDotK[nxs,:,:,:]-Kdata[:,nxs,:,:] #Mxyz,Nref,Nop,Natm = BPM in magstrfc.for OK 1160 1166 dqdk = np.array([np.outer(hm,hm)-np.eye(3) for hm in HM.T]).T #Mxyz**2,Nref 1161 # NQ = np.where(np.abs(Q)>0.,1./np.abs(Q),0.) #this sort of works esp for 1 axis moments1162 1167 NQ = np.sqrt(np.sum(Q*Q,axis=0)) 1163 1168 NQ = np.where(NQ > 0.,1./NQ,0.) 1164 1169 dqdm = dqdk[:,:,:,nxs,nxs]*dkdm[:,nxs,nxs,:,:] #Mxyz**2,Nref,Nops,Natms 1165 dmx = NQ*Q*dMdm[:,nxs,nxs,:]1170 dmx = Q*dMdm[:,nxs,nxs,:]/2. 1166 1171 dmx = dmx[nxs,:,:,:,:]+dqdm*Mag[nxs,nxs,nxs,:,:] 1167 1172 … … 1177 1182 dfadmx = np.sum(dmx*TMcorr[nxs,nxs,:,nxs,:]*cosm[nxs,nxs,:,:,:],axis=3) 1178 1183 dfadui = np.sum(-SQfactor[:,nxs,nxs]*fam,axis=2) #array(Ops,refBlk,nAtoms) deriv OK 1179 dfadua = np.sum(-Hij[nxs,:,:,nxs,:]*fam[:,:,:,:,nxs],axis=2) #deriv OK? not U12 & U23 in sarc1184 dfadua = np.sum(-Hij[nxs,:,:,nxs,:]*fam[:,:,:,:,nxs],axis=2) #deriv OK 1180 1185 # imaginary part; array(3,refBlk,nAtom,3) & array(3,refBlk,nAtom,6) 1181 1186 dfbdfr = np.sum(fbm/occ,axis=2) #array(mxyz,refBlk,nAtom) Fdata != 0 avoids /0. problem … … 1187 1192 dFdfr[iBeg:iFin] = 2.*np.sum((fams[:,:,nxs]*dfadfr+fbms[:,:,nxs]*dfbdfr)*Mdata/Nops,axis=0) #ok 1188 1193 dFdx[iBeg:iFin] = 2.*np.sum(fams[:,:,nxs,nxs]*dfadx+fbms[:,:,nxs,nxs]*dfbdx,axis=0) #ok 1189 dFdMx[:,iBeg:iFin,:] = 2.*np.sum(fams[:,:,nxs]*dfadmx+fbms[:,:,nxs]*dfbdmx,axis=0) /len(SGT)#problems1194 dFdMx[:,iBeg:iFin,:] = 2.*np.sum(fams[:,:,nxs]*dfadmx+fbms[:,:,nxs]*dfbdmx,axis=0) #problems 1190 1195 dFdui[iBeg:iFin] = 2.*np.sum(fams[:,:,nxs]*dfadui+fbms[:,:,nxs]*dfbdui,axis=0) #ok 1191 1196 dFdua[iBeg:iFin] = 2.*np.sum(fams[:,:,nxs,nxs]*dfadua+fbms[:,:,nxs,nxs]*dfbdua,axis=0) #ok
Note: See TracChangeset
for help on using the changeset viewer.