Skip to content

Commit 04b9363

Browse files
committed
defo derivatives closely correct; both odd & even terms & k, k'.
1 parent ef4bc0b commit 04b9363

1 file changed

Lines changed: 11 additions & 10 deletions

File tree

GSASII/GSASIIstrMath.py

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1368,6 +1368,7 @@ def StructureFactorDerv2(refDict,G,hfx,pfx,SGData,calcControls,parmDict):
13681368
dffdSHI.update(dFFdSI)
13691369
Bab = np.repeat(parmDict[phfx+'BabA']*np.exp(-parmDict[phfx+'BabU']*SQfactor),nOps)
13701370
dBabdA = np.exp(-parmDict[phfx+'BabU']*SQfactor)
1371+
13711372
fotr = np.reshape(((FFR+FP).T-Bab).T,cosp.shape)*Tcorr
13721373
foti = np.reshape(Flack*(FFI+FPP),sinp.shape)*Tcorr
13731374
fa = np.array([fotr*cosp,-foti*sinp])
@@ -1378,19 +1379,19 @@ def StructureFactorDerv2(refDict,G,hfx,pfx,SGData,calcControls,parmDict):
13781379
fbx = np.array([fotr*cosp,-foti*sinp])
13791380
#sum below is over Uniq
13801381
dfadfr = np.sum(fa/occ,axis=-2) #array(2,refBlk,nAtom) Fdata != 0 avoids /0. problem
1382+
dfbdfr = np.sum(fb/occ,axis=-2) #Fdata != 0 avoids /0. problem
13811383
dfadff = np.array([cosp*Tcorr*atFlg,-Flack*sinp*Tcorr*atFlg]) # no sum on Uniq; array(2,refBlk,nEqv,nAtom)
1384+
dfbdff = np.array([sinp*Tcorr*atFlg,Flack*cosp*Tcorr*atFlg])
13821385
dfadba = np.sum(-cosp*Tcorr,axis=-2) #array(refBlk,nAtom)
1386+
dfbdba = np.sum(-sinp*Tcorr,axis=-2)
13831387
dfadx = np.sum(twopi*Uniq[nxs,:,nxs,:,:]*np.swapaxes(fax,-2,-1)[:,:,:,:,nxs],axis=-2)
1388+
dfbdx = np.sum(twopi*Uniq[nxs,:,nxs,:,:]*np.swapaxes(fbx,-2,-1)[:,:,:,:,nxs],axis=-2)
13841389
dfadui = np.sum(-SQfactor[nxs,:,nxs,nxs]*fa,axis=-2) #array(Ops,refBlk,nAtoms)
1390+
dfbdui = np.sum(-SQfactor[nxs,:,nxs,nxs]*fb,axis=-2)
13851391
dfadua = np.sum(-Hij[nxs,:,nxs,:,:]*np.swapaxes(fa,-2,-1)[:,:,:,:,nxs],axis=-2)
1386-
dfbdfr = np.sum(fb/occ,axis=-2) #Fdata != 0 avoids /0. problem
1387-
dfbdff = np.array([sinp*Tcorr*atFlg,Flack*cosp*Tcorr*atFlg])
1388-
dfbdba = np.sum(-sinp*Tcorr,axis=-2)
1392+
dfbdua = np.sum(-Hij[nxs,:,nxs,:,:]*np.swapaxes(fb,-2,-1)[:,:,:,:,nxs],axis=-2)
13891393
dfadfl = np.sum(np.sum(-foti*sinp,axis=-1),axis=-1)
13901394
dfbdfl = np.sum(np.sum(foti*cosp,axis=-1),axis=-1)
1391-
dfbdx = np.sum(twopi*Uniq[nxs,:,nxs,:,:]*np.swapaxes(fbx,-2,-1)[:,:,:,:,nxs],axis=-2)
1392-
dfbdui = np.sum(-SQfactor[nxs,:,nxs,nxs]*fb,axis=-2)
1393-
dfbdua = np.sum(-Hij[nxs,:,nxs,:,:]*np.swapaxes(fb,-2,-1)[:,:,:,:,nxs],axis=-2)
13941395
#NB: the above have been checked against PA(1:10,1:2) in strfctr.for for Al2O3!
13951396
SA = fas[0]+fas[1]
13961397
SB = fbs[0]+fbs[1]
@@ -1402,8 +1403,8 @@ def StructureFactorDerv2(refDict,G,hfx,pfx,SGData,calcControls,parmDict):
14021403
dFdua[iBeg:iFin] = pMul*np.sum(fas[:,:,nxs,nxs]*dfadua+fbs[:,:,nxs,nxs]*dfbdua,axis=0)
14031404
else:
14041405
dFdfr[iBeg:iFin] = (2.*SA[:,nxs]*(dfadfr[0]+dfadfr[1])+2.*SB[:,nxs]*(dfbdfr[0]+dfbdfr[1]))*Mdata/nOps
1405-
dFdff[:,iBeg:iFin] = [2.*(fas[0,:,nxs,nxs]*dfadff[0]+fbs[0,:,nxs,nxs]*dfbdff[0]),
1406-
2.*(fas[1,:,nxs,nxs]*dfadff[1]+fbs[1,:,nxs,nxs]*dfbdff[1])] #not summed on Uniq yet array(Nref,nEqv,nAtom)
1406+
dFdff[:,iBeg:iFin] = [2.*(fas[0,:,nxs,nxs]*dfadff[0]+fbs[1,:,nxs,nxs]*dfbdff[0]),
1407+
2.*(fas[0,:,nxs,nxs]*dfadff[1]+fbs[1,:,nxs,nxs]*dfbdff[1])] #not summed on Uniq yet array(Nref,nEqv,nAtom)
14071408
dFdx[iBeg:iFin] = 2.*SA[:,nxs,nxs]*(dfadx[0]+dfadx[1])+2.*SB[:,nxs,nxs]*(dfbdx[0]+dfbdx[1])
14081409
dFdui[iBeg:iFin] = 2.*SA[:,nxs]*(dfadui[0]+dfadui[1])+2.*SB[:,nxs]*(dfbdui[0]+dfbdui[1])
14091410
dFdua[iBeg:iFin] = 2.*SA[:,nxs,nxs]*(dfadua[0]+dfadua[1])+2.*SB[:,nxs,nxs]*(dfbdua[0]+dfbdua[1])
@@ -1422,7 +1423,7 @@ def StructureFactorDerv2(refDict,G,hfx,pfx,SGData,calcControls,parmDict):
14221423
dFdvDict[pfx+'AU11:'+str(i)] = dFdua.T[0][i]
14231424
dFdvDict[pfx+'AU22:'+str(i)] = dFdua.T[1][i]
14241425
dFdvDict[pfx+'AU33:'+str(i)] = dFdua.T[2][i]
1425-
dFdvDict[pfx+'AU12:'+str(i)] = dFdua.T[3][i] #"should" be *2.0 but not true
1426+
dFdvDict[pfx+'AU12:'+str(i)] = dFdua.T[3][i] #should not be *2.0!
14261427
dFdvDict[pfx+'AU13:'+str(i)] = dFdua.T[4][i]
14271428
dFdvDict[pfx+'AU23:'+str(i)] = dFdua.T[5][i]
14281429
for item in dffdSHR:
@@ -1432,7 +1433,7 @@ def StructureFactorDerv2(refDict,G,hfx,pfx,SGData,calcControls,parmDict):
14321433
else:
14331434
if i == int(item.split(':')[1]):
14341435
dFdvDict[pfx+item] = np.sum(dFdff[0,:,:,i]*np.reshape(dffdSHR[item],(nRef,-1)),axis=1)+ \
1435-
np.sum(dFdff[1,:,:,i]*np.reshape(dffdSHI[item],(nRef,-1)),axis=1)
1436+
np.sum(dFdff[1,:,:,i]*np.reshape(dffdSHI[item],(nRef,-1)),axis=1)
14361437
dFdvDict[phfx+'Flack'] = 4.*dFdfl.T
14371438
dFdvDict[phfx+'BabA'] = dFdbab.T[0]
14381439
dFdvDict[phfx+'BabU'] = dFdbab.T[1]

0 commit comments

Comments
 (0)