Changeset 1923


Ignore:
Timestamp:
Jul 8, 2015 3:21:58 PM (7 years ago)
Author:
vondreele
Message:

further twin work

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/GSASIIstrIO.py

    r1918 r1923  
    22652265                sumTwFr = 0.
    22662266                controlDict[pfx+'TwinLaw'] = []
    2267                 controlDict[pfx+'TwinInv'] = []               
     2267                controlDict[pfx+'TwinInv'] = []
     2268                NTL = 0           
    22682269                for it,twin in enumerate(Twins):
    22692270                    if 'bool' in str(type(twin[0])):
     
    22712272                        controlDict[pfx+'TwinLaw'].append(np.zeros((3,3)))
    22722273                    else:
     2274                        NTL += 1
    22732275                        controlDict[pfx+'TwinInv'].append(False)
    22742276                        controlDict[pfx+'TwinLaw'].append(twin[0])
     
    22772279                        sumTwFr += twin[1]
    22782280                    else:
    2279                         hapDict[pfx+'TwinFr:'+str(it)] = twin[1][0]
     2281                        hapDict[pfx+'TwinFr:0'] = twin[1][0]
     2282                        controlDict[pfx+'TwinNMN'] = twin[1][2]
    22802283                    if Twins[0][1][1]:
    22812284                        hapVary.append(pfx+'TwinFr:'+str(it))
     2285                controlDict[pfx+'NTL'] = NTL
    22822286                #need to make constraint on TwinFr
    22832287                controlDict[pfx+'TwinLaw'] = np.array(controlDict[pfx+'TwinLaw'])
  • trunk/GSASIIstrMath.py

    r1922 r1923  
    745745    TwDict = refDict.get('TwDict',{})           
    746746    if 'S' in calcControls[hfx+'histType']:
     747        NTL = calcControls[phfx+'NTL']
     748        NM = calcControls[phfx+'TwinNMN']+1
    747749        TwinLaw = calcControls[phfx+'TwinLaw']
    748750        TwinFr = np.array([parmDict[phfx+'TwinFr:'+str(i)] for i in range(len(TwinLaw))])
     
    785787                if iref in TwDict:
    786788                    for i in TwDict[iref]:
    787                         H[ir][i] = np.array(TwDict[iref][i])*TwinInv[i]
     789                        for n in range(NTL):
     790                            H[ir][i+n*NM] = np.inner(TwinLaw[n*NM],np.array(TwDict[iref][i])*TwinInv[i+n*NM])
    788791            TwMask = np.any(H,axis=-1)
    789792        SQ = 1./(2.*refl.T[4])**2               #array(blkSize)
     
    847850    TwDict = refDict.get('TwDict',{})           
    848851    if 'S' in calcControls[hfx+'histType']:
     852        NTL = calcControls[phfx+'NTL']
     853        NM = calcControls[phfx+'TwinNMN']+1
    849854        TwinLaw = calcControls[phfx+'TwinLaw']
    850855        TwinFr = np.array([parmDict[phfx+'TwinFr:'+str(i)] for i in range(len(TwinLaw))])
     
    891896            if iref in TwDict:
    892897                for i in TwDict[iref]:
    893                     H[i] = np.array(TwDict[iref][i])*TwinInv[i]
     898                    for n in range(NTL):
     899                        H[i+n*NM] = np.inner(TwinLaw[n*NM],np.array(TwDict[iref][i])*TwinInv[i+n*NM])
    894900            TwMask = np.any(H,axis=-1)
    895901        SQ = 1./(2.*refl[4])**2             # or (sin(theta)/lambda)**2
     
    971977                dFdui[iref] = [2.*TwMask[it]*SA[it]*(dfadui[0][it]+dfbdui[1][it])+2.*TwMask[it]*SB[it]*(dfbdui[0][it]+dfadui[1][it]) for it in range(nTwin)]
    972978                dFdua[iref] = [2.*TwMask[it]*SA[it]*(dfadua[it][0]+dfbdua[it][1])+2.*TwMask[it]*SB[it]*(dfbdua[it][0]+dfadua[it][1]) for it in range(nTwin)]
    973                 dFdtw[iref] = TwMask*np.sum(fas,axis=0)**2+TwMask*np.sum(fbs,axis=0)**2
     979                dFdtw[iref] = np.sum(TwMask*fas,axis=0)**2+np.sum(TwMask*fbs,axis=0)**2
     980               
    974981            else:   #these are good for no twin single crystals
    975982                dFdfr[iref] = 2.*SA*(dfadfr[0]+dfbdfr[1])*Mdata/len(Uniq)+ \
     
    24562463    G,g = G2lat.A2Gmat(A)       #recip & real metric tensors
    24572464    refDict = Histogram['Data']
     2465    if parmDict[phfx+'Scale'] < 0.:
     2466        parmDict[phfx+'Scale'] = .001
    24582467    if im:
    24592468        dFdvDict = SStructureFactorDerv(refDict,im,G,hfx,pfx,SGData,SSGData,calcControls,parmDict)
     
    24812490                            depDerivDict[var][iref] = w*dFdvDict[var][iref]*parmDict[phfx+'Scale']*ref[11+im]
    24822491                    if phfx+'Scale' in varylist:
    2483                         dMdvh[varylist.index(phfx+'Scale')][iref] = w*ref[9+im]*ref[11+im]  #OK
     2492                        dMdvh[varylist.index(phfx+'Scale')][iref] = w*ref[7+im]*ref[11+im]/parmDict[phfx+'Scale']  #OK
    24842493                    elif phfx+'Scale' in dependentVars:
    2485                         depDerivDict[phfx+'Scale'][iref] = w*ref[9+im]*ref[11+im]   #OK
     2494                        depDerivDict[phfx+'Scale'][iref] = w*ref[7+im]*ref[11+im]/parmDict[phfx+'Scale']   #OK
    24862495                    for item in ['Ep','Es','Eg']:
    24872496                        if phfx+item in varylist and phfx+item in dervDict:
     
    25102519                            depDerivDict[var][iref] = w*dFdvDict[var][iref]*parmDict[phfx+'Scale']*ref[11+im]
    25112520                    if phfx+'Scale' in varylist:
    2512                         dMdvh[varylist.index(phfx+'Scale')][iref] = w*ref[9+im]*ref[11+im]  #OK
     2521                        dMdvh[varylist.index(phfx+'Scale')][iref] = w*ref[7+im]*ref[11+im]/parmDict[phfx+'Scale']  #OK
    25132522                    elif phfx+'Scale' in dependentVars:
    2514                         depDerivDict[phfx+'Scale'][iref] = w*ref[9+im]*ref[11+im]   #OK                   
     2523                        depDerivDict[phfx+'Scale'][iref] = w*ref[7+im]*ref[11+im]/parmDict[phfx+'Scale']   #OK                   
    25152524                    for item in ['Ep','Es','Eg']:   #OK!
    25162525                        if phfx+item in varylist and phfx+item in dervDict:
     
    27282737            SGData = Phase['General']['SGData']
    27292738            im = 0
     2739            if parmDict[phfx+'Scale'] < 0.:
     2740                parmDict[phfx+'Scale'] = .001               
    27302741            if Phase['General']['Type'] in ['modulated','magnetic']:
    27312742                SSGData = Phase['General']['SSGData']
Note: See TracChangeset for help on using the changeset viewer.