Ignore:
Timestamp:
Dec 11, 2015 1:34:43 PM (9 years ago)
Author:
vondreele
Message:

fix mod vector derivs
work on ZigZag/Block? derivs - seem ok on value & powder data, not pos or single xtal.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • TabularUnified trunk/GSASIIstrMath.py

    r2078 r2089  
    888888            dfbdfl = 0.0
    889889        #NB: the above have been checked against PA(1:10,1:2) in strfctr.for for Al2O3!   
     890        SA = fas[0]+fas[1]
     891        SB = fbs[0]+fbs[1]
    890892        if 'P' in calcControls[hfx+'histType']: #checked perfect for centro & noncentro
    891893            dFdfr[iref] = 2.*(fas[0]*dfadfr[0]+fas[1]*dfadfr[1])*Mdata/len(Uniq)+   \
     
    898900                2.*(fbs[0]*dfbdua[0]+fbs[1]*dfbdua[1])
    899901        else:
    900             SA = fas[0]+fas[1]
    901             SB = fbs[0]+fbs[1]
    902902            if nTwin > 1:
    903903                dFdfr[iref] = [2.*TwMask[it]*(SA[it]*dfadfr[0][it]+SA[it]*dfadfr[1][it]+SB[it]*dfbdfr[0][it]+SB[it]*dfbdfr[1][it])*Mdata/len(Uniq[it]) for it in range(nTwin)]
     
    12581258            dfadGu = np.sum(fa[:,:,:,nxs,nxs]*dGdu[0][nxs,:,:,:,:]-fb[:,:,:,nxs,nxs]*dGdu[1][nxs,:,:,:,:],axis=1)
    12591259            dfbdGu = np.sum(fb[:,:,:,nxs,nxs]*dGdu[0][nxs,:,:,:,:]+fa[:,:,:,nxs,nxs]*dGdu[1][nxs,:,:,:,:],axis=1)   
     1260#        GSASIIpath.IPyBreak()
    12601261        if not SGData['SGInv'] and len(TwinLaw) == 1:   #Flack derivative
    12611262            dfadfl = np.sum(-FPP*Tcorr*sinp)
     
    12681269        SB = fbs[0]+fbs[1]      #float = B+B' (might be array[nTwin])
    12691270        if 'P' in calcControls[hfx+'histType']: #checked perfect for centro & noncentro
    1270             dFdfr[iref] = 2.*(SA*dfadfr[0]+SA*dfadfr[1]+SB*dfbdfr[0]+SB*dfbdfr[1])*Mdata/len(Uniq) #array(nRef,nAtom)
    1271             dFdx[iref] = 2.*(SA*dfadx[0]+SA*dfadx[1]+SB*dfbdx[0]+SB*dfbdx[1])    #array(nRef,nAtom,3)
    1272             dFdui[iref] = 2.*(SA*dfadui[0]+SA*dfadui[1]+SB*dfbdui[0]+SB*dfbdui[1])   #array(nRef,nAtom)
    1273             dFdua[iref] = 2.*(SA*dfadua[0]+SA*dfadua[1]+SB*dfbdua[0]+SB*dfbdua[1])    #array(nRef,nAtom,6)
    12741271            dFdfl[iref] = -SA*dfadfl-SB*dfbdfl                  #array(nRef,)
    1275                            
    1276             dFdGf[iref] = 2.*(SA*dfadGf[0]+SB*dfbdGf[1])      #array(nRef,natom,nwave,2)
    1277             dFdGx[iref] = 2.*(SA*dfadGx[0]+SB*dfbdGx[1])      #array(nRef,natom,nwave,6)
    1278             dFdGz[iref] = 2.*(SA*dfadGz[0]+SB*dfbdGz[1])      #array(nRef,natom,5)
    1279             dFdGu[iref] = 2.*(SA*dfadGu[0]+SB*dfbdGu[1])      #array(nRef,natom,nwave,12)
    1280 #            dFdfr[iref] = 2.*(fas[0]*dfadfr[0]+fas[1]*dfadfr[1])*Mdata/len(Uniq)+   \
    1281 #                2.*(fbs[0]*dfbdfr[0]-fbs[1]*dfbdfr[1])*Mdata/len(Uniq)
    1282 #            dFdx[iref] = 2.*(fas[0]*dfadx[0]+fas[1]*dfadx[1])+  \
    1283 #                2.*(fbs[0]*dfbdx[0]+fbs[1]*dfbdx[1])
    1284 #            dFdui[iref] = 2.*(fas[0]*dfadui[0]+fas[1]*dfadui[1])+   \
    1285 #                2.*(fbs[0]*dfbdui[0]-fbs[1]*dfbdui[1])
    1286 #            dFdua[iref] = 2.*(fas[0]*dfadua[0]+fas[1]*dfadua[1])+   \
    1287 #                2.*(fbs[0]*dfbdua[0]+fbs[1]*dfbdua[1])
    1288 #            dFdGf[iref] = 2.*(fas[0]*dfadGf[0]+fas[1]*dfadGf[1])+  \
    1289 #                2.*(fbs[0]*dfbdGf[0]+fbs[1]*dfbdGf[1])
    1290 #            dFdGx[iref] = 2.*(fas[0]*dfadGx[0]+fas[1]*dfadGx[1])+  \
    1291 #                2.*(fbs[0]*dfbdGx[0]+fbs[1]*dfbdGx[1])
    1292 #            dFdGu[iref] = 2.*(fas[0]*dfadGu[0]+fas[1]*dfadGu[1])+  \
    1293 #                2.*(fbs[0]*dfbdGu[0]+fbs[1]*dfbdGu[1])
     1272            dFdfr[iref] = 2.*(fas[0]*dfadfr[0]+fas[1]*dfadfr[1])*Mdata/len(Uniq)+   \
     1273                2.*(fbs[0]*dfbdfr[0]-fbs[1]*dfbdfr[1])*Mdata/len(Uniq)
     1274            dFdx[iref] = 2.*(fas[0]*dfadx[0]+fas[1]*dfadx[1])+  \
     1275                2.*(fbs[0]*dfbdx[0]+fbs[1]*dfbdx[1])
     1276            dFdui[iref] = 2.*(fas[0]*dfadui[0]+fas[1]*dfadui[1])+   \
     1277                2.*(fbs[0]*dfbdui[0]-fbs[1]*dfbdui[1])
     1278            dFdua[iref] = 2.*(fas[0]*dfadua[0]+fas[1]*dfadua[1])+   \
     1279                2.*(fbs[0]*dfbdua[0]+fbs[1]*dfbdua[1])
     1280            dFdGf[iref] = 2.*(fas[0]*dfadGf[0]+fas[1]*dfadGf[1])+  \
     1281                2.*(fbs[0]*dfbdGf[0]+fbs[1]*dfbdGf[1])
     1282            dFdGx[iref] = 2.*(fas[0]*dfadGx[0]+fas[1]*dfadGx[1])+  \
     1283                2.*(fbs[0]*dfbdGx[0]-fbs[1]*dfbdGx[1])
     1284            dFdGz[iref] = 2.*(fas[0]*dfadGz[0]+fas[1]*dfadGz[1])+  \
     1285                2.*(fbs[0]*dfbdGz[0]+fbs[1]*dfbdGz[1])
     1286            dFdGu[iref] = 2.*(fas[0]*dfadGu[0]+fas[1]*dfadGu[1])+  \
     1287                2.*(fbs[0]*dfbdGu[0]+fbs[1]*dfbdGu[1])
    12941288        else:
    12951289            if nTwin > 1:
     
    13151309                dFdGz[iref] = 2.*(SA*dfadGz[0]+SB*dfbdGz[1])      #array(nRef,natom,5)
    13161310                dFdGu[iref] = 2.*(SA*dfadGu[0]+SB*dfbdGu[1])      #array(nRef,natom,nwave,12)
     1311#            GSASIIpath.IPyBreak()
    13171312        dFdbab[iref] = 2.*fas[0]*np.array([np.sum(dfadba*dBabdA),np.sum(-dfadba*parmDict[phfx+'BabA']*SQfactor*dBabdA)]).T+ \
    13181313            2.*fbs[0]*np.array([np.sum(dfbdba*dBabdA),np.sum(-dfbdba*parmDict[phfx+'BabA']*SQfactor*dBabdA)]).T
     
    13641359            dFdvDict[pfx+'U23cos:'+str(i)+':'+str(j)] = 2.*dFdGu.T[11][j][i]
    13651360           
    1366 #    GSASIIpath.IPyBreak()
     1361#        GSASIIpath.IPyBreak()
    13671362    dFdvDict[phfx+'BabA'] = dFdbab.T[0]
    13681363    dFdvDict[phfx+'BabU'] = dFdbab.T[1]
     
    19931988        vec = np.array([parmDict[pfx+'mV0'],parmDict[pfx+'mV1'],parmDict[pfx+'mV2']])
    19941989        dstsq = G2lat.calc_rDsqSS(np.array([h,k,l,m]),A,vec)
     1990        h,k,l = [h+m*vec[0],k+m*vec[1],l+m*vec[2]]          #do proj of hklm to hkl so dPdA & dPdV come out right
    19951991    else:
    19961992        m = 0
     
    20232019        dpdDB = 1./dsp
    20242020        dpdV = np.array([2.*h*A[0]+k*A[3]+l*A[4],2*k*A[1]+h*A[3]+l*A[5],
    2025             2*l*A[2]+h*A[4]+k*A[5]])*m**parmDict[hfx+'difC']*dsp**3/2.
     2021            2*l*A[2]+h*A[4]+k*A[5]])*m*parmDict[hfx+'difC']*dsp**3/2.
    20262022        return dpdA,dpdZ,dpdDC,dpdDA,dpdDB,dpdV
    20272023           
Note: See TracChangeset for help on using the changeset viewer.