Changeset 2004
- Timestamp:
- Oct 13, 2015 4:20:29 PM (7 years ago)
- Location:
- trunk
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/GSASIImath.py
r1996 r2004 979 979 D = H[:,:,3][:,:,nxs]*glTau[nxs,nxs,:] #m*tau;refBlk x ops X 32 980 980 HdotX = np.inner(H[:,:,:3],np.swapaxes(Xmod,1,2))+D[:,:,nxs,:] #refBlk X ops x atoms X 32 981 sinHA = np.sum(Fmod*HbH*np.sin(twopi*HdotX)*glWt,axis=-1) #refBlk X ops x atoms; sum for G-L integration982 cosHA = np.sum(Fmod*HbH*np.cos(twopi*HdotX)*glWt,axis=-1) #ditto981 cosHA = np.sum(Fmod*HbH*np.cos(twopi*HdotX)*glWt,axis=-1) #real part; refBlk X ops x atoms; sum for G-L integration 982 sinHA = np.sum(Fmod*HbH*np.sin(twopi*HdotX)*glWt,axis=-1) #imag part; ditto 983 983 # GSASIIpath.IPyBreak() 984 984 return np.array([cosHA,sinHA]) # 2 x refBlk x SGops x atoms 985 985 986 def ModulationDerv(waveTypes,H, FSSdata,XSSdata,USSdata,Mast):986 def ModulationDerv(waveTypes,H,Hij,FSSdata,XSSdata,USSdata,Mast): 987 987 ''' 988 988 H: array ops X hklt … … 1043 1043 #XmodZ = 0 replace 1044 1044 tauX = np.arange(1.,Ax.shape[1]+1-nx)[:,nxs]*glTau #Xwaves x 32 1045 StauX = np.ones_like(Ax)[:,nx:,:,nxs]*np.sin(twopi*tauX)[nxs,:,nxs,:] #a lso dXmod/dAx1046 CtauX = np.ones_like(Bx)[:,nx:,:,nxs]*np.cos(twopi*tauX)[nxs,:,nxs,:] # also dXmod/dBx1045 StauX = np.ones_like(Ax)[:,nx:,:,nxs]*np.sin(twopi*tauX)[nxs,:,nxs,:] #atoms X waves X pos X 32 1046 CtauX = np.ones_like(Bx)[:,nx:,:,nxs]*np.cos(twopi*tauX)[nxs,:,nxs,:] #ditto 1047 1047 XmodA = Ax[:,nx:,:,nxs]*StauX #atoms X waves X pos X 32 1048 1048 XmodB = Bx[:,nx:,:,nxs]*CtauX #ditto … … 1067 1067 Umod = np.swapaxes(np.sum(UmodA+UmodB,axis=1),1,3) #atoms x 3x3 x 32; sum waves 1068 1068 HbH = np.exp(-np.sum(H[:,nxs,nxs,:3]*np.inner(H[:,:3],Umod),axis=-1)) # ops x atoms x 32 add Overhauser corr.? 1069 1069 1070 else: 1070 1071 HbH = np.ones_like(HdotX) 1071 HdotXA = H[:,nxs,nxs,nxs,:3]*np.swapaxes(XmodA,-1,-2)[nxs,:,:,:,:] #ops x atoms x waves x 32 x xyz 1072 HdotXB = H[:,nxs,nxs,nxs,:3]*np.swapaxes(XmodB,-1,-2)[nxs,:,:,:,:] 1073 sinHA = np.sum(Fmod*HbH*np.sin(twopi*HdotX)*glWt,axis=-1) #ops x atoms x waves x xyz; sum for G-L integration 1074 cosHA = np.sum(Fmod*HbH*np.cos(twopi*HdotX)*glWt,axis=-1) #ditto 1075 # GSASIIpath.IPyBreak() 1076 # dHdXA = H[:,nxs,nxs,nxs,:3]*np.swapaxes(StauX,-1,-2)[nxs,:,:,:,:] #ops x atoms x waves x 32 x xyz 1077 # dHdXB = H[:,nxs,nxs,nxs,:3]*np.swapaxes(CtauX,-1,-2)[nxs,:,:,:,:] #ditto 1078 # dGdAx = np.sum((Fmod*HbH)[:,:,nxs,:,nxs]*(twopi*dHdXA*np.sin(twopi*HdotXA)+np.cos(twopi*HdotXA))*glWt[nxs,nxs,nxs,:,nxs],axis=-2) 1079 ## ops x atoms x waves x xyz - imaginary part 1080 # dGdBx = np.sum((Fmod*HbH)[:,:,nxs,:,nxs]*(twopi*dHdXB*np.cos(twopi*HdotXB)-np.sin(twopi*HdotXB))*glWt[nxs,nxs,nxs,:,nxs],axis=-2) 1081 ## ops x atoms x waves x xyz - real part 1072 HdotXA = H[:,nxs,nxs,nxs,:3]*np.swapaxes(XmodA,-1,-2)[nxs,:,:,:,:]+D[:,nxs,nxs,:,nxs] #ops x atoms x waves x 32 x xyz 1073 HdotXB = H[:,nxs,nxs,nxs,:3]*np.swapaxes(XmodB,-1,-2)[nxs,:,:,:,:]+D[:,nxs,nxs,:,nxs] 1074 dHdXA = H[:,nxs,nxs,nxs,:3]*np.swapaxes(StauX,-1,-2)[nxs,:,:,:,:] #ops x atoms x waves x 32 x xyz 1075 dHdXB = H[:,nxs,nxs,nxs,:3]*np.swapaxes(CtauX,-1,-2)[nxs,:,:,:,:] #ditto 1076 dGdMxCa = np.sum((Fmod*HbH)[:,:,nxs,:,nxs]*(-twopi*dHdXA*np.sin(twopi*HdotXA))*glWt[nxs,nxs,nxs,:,nxs],axis=-2) 1077 dGdMxCb = np.sum((Fmod*HbH)[:,:,nxs,:,nxs]*(-twopi*dHdXB*np.sin(twopi*HdotXB))*glWt[nxs,nxs,nxs,:,nxs],axis=-2) 1078 dGdMxC = np.concatenate((dGdMxCa,dGdMxCb),axis=-1) 1079 # ops x atoms x waves x xyz - real part 1080 dGdMxSa = np.sum((Fmod*HbH)[:,:,nxs,:,nxs]*(twopi*dHdXA*np.cos(twopi*HdotXA))*glWt[nxs,nxs,nxs,:,nxs],axis=-2) 1081 dGdMxSb = np.sum((Fmod*HbH)[:,:,nxs,:,nxs]*(twopi*dHdXB*np.cos(twopi*HdotXB))*glWt[nxs,nxs,nxs,:,nxs],axis=-2) 1082 dGdMxS = np.concatenate((dGdMxSa,dGdMxSb),axis=-1) 1083 # ops x atoms x waves x xyz - imaginary part 1084 GSASIIpath.IPyBreak() 1082 1085 return np.array([cosHA,sinHA]),[dGdMfC,dGdMfS],[dGdMxC,dGdMxS],[dGdMuC,dGdMuS] 1083 1086 -
trunk/GSASIIstrMath.py
r2000 r2004 990 990 Tdata,Mdata,Fdata,Xdata,dXdata,IAdata,Uisodata,Uijdata = GetAtomFXU(pfx,calcControls,parmDict) 991 991 waveTypes,FSSdata,XSSdata,USSdata,MSSdata = GetAtomSSFXU(pfx,calcControls,parmDict) 992 Smult,TauT = GetSSTauM(SGData['SGOps'],SSGData['SSGOps'],pfx,calcControls,Xdata) 993 if SGInv: 994 TauT = np.hstack((TauT,-TauT)) 992 995 modQ = np.array([parmDict[pfx+'mV0'],parmDict[pfx+'mV1'],parmDict[pfx+'mV2']]) 993 996 FF = np.zeros(len(Tdata)) … … 1108 1111 mSize = len(Mdata) #no. atoms 1109 1112 waveTypes,FSSdata,XSSdata,USSdata,MSSdata = GetAtomSSFXU(pfx,calcControls,parmDict) 1113 Smult,TauT = GetSSTauM(SGData['SGOps'],SSGData['SSGOps'],pfx,calcControls,Xdata) 1114 if SGInv: 1115 TauT = np.hstack((TauT,-TauT)) 1110 1116 FF = np.zeros(len(Tdata)) 1111 1117 if 'NC' in calcControls[hfx+'histType']: … … 1190 1196 fot = (FF+FP-Bab)*Tcorr #ops x atoms 1191 1197 fotp = FPP*Tcorr #ops x atoms 1192 GfpuA,dGdf,dGdx,dGdu = G2mth.ModulationDerv(waveTypes,Uniq, FSSdata,XSSdata,USSdata,Mast)1198 GfpuA,dGdf,dGdx,dGdu = G2mth.ModulationDerv(waveTypes,Uniq,Hij,FSSdata,XSSdata,USSdata,Mast) 1193 1199 # derivs are: ops x atoms x waves x 1,3,or 6 parms as [real,imag] parts 1194 1200 fa = np.array([((FF+FP).T-Bab).T*cosp*Tcorr,-Flack*FPP*sinp*Tcorr]) # array(2,nTwin,nEqv,nAtoms)
Note: See TracChangeset
for help on using the changeset viewer.