Changeset 4533 for trunk/GSASIImath.py
- Timestamp:
- Jul 23, 2020 12:28:51 PM (3 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/GSASIImath.py
r4526 r4533 1437 1437 fxn of gTau points; NB: this allows only 1 mag. wave fxn. 1438 1438 ''' 1439 Am = np.array(MSSdata[3:]).T #atoms x waves x cos pos mods 1440 Bm = np.array(MSSdata[:3]).T #...sin pos mods 1441 nWaves = Am.shape[1] 1439 Am = np.array(MSSdata[3:]).T[:,0,:] #atoms x cos pos mods; only 1 wave used 1440 Bm = np.array(MSSdata[:3]).T[:,0,:] #...sin pos mods 1442 1441 SGMT = np.array([ops[0] for ops in SGData['SGOps']]) #not .T!! 1443 1442 Sinv = np.array([nl.inv(ops[0]) for ops in SSGData['SSGOps']]) … … 1453 1452 SGMT = np.vstack((SGMT,SGMT)) 1454 1453 Sinv = np.vstack((Sinv,Sinv)) 1455 SGT = np.vstack((SGT,SGT+ .5))%1.1454 SGT = np.vstack((SGT,SGT+np.array([0.,0.,0.,.5])))%1. 1456 1455 mst = Sinv[:,3,:3] 1457 1456 epsinv = Sinv[:,3,3] 1458 1457 phi = np.inner(XYZ,modQ).T 1459 1458 TA = np.sum(mst[nxs,:,:]*(XYZ-SGT[:,:3][nxs,:,:]),axis=-1).T 1460 tauT = TA[nxs,:,:] + epsinv[nxs,:,nxs]*(glTau[:,nxs,nxs]-SGT[:,3][nxs,:,nxs]+phi[nxs,:,:]) 1461 modind = np.arange(nWaves)+1. 1462 phase = modind[:,nxs,nxs]*tauT #Nops,Natm,Nwave 1463 psin = np.sin(twopi*phase) 1464 pcos = np.cos(twopi*phase) 1465 MmodA = np.sum(Am[nxs,nxs,:,:,:]*pcos[:,:,:,nxs,nxs],axis=3)/2. #cos term 1466 MmodB = np.sum(Bm[nxs,nxs,:,:,:]*psin[:,:,:,nxs,nxs],axis=3)/2. #sin term 1467 MmodA = np.sum(SGMT[nxs,:,nxs,:,:]*MmodA[:,:,:,nxs,:],axis=-1)*SGData['SpnFlp'][nxs,:,nxs,nxs] 1468 MmodB = np.sum(SGMT[nxs,:,nxs,:,:]*MmodB[:,:,:,nxs,:],axis=-1)*SGData['SpnFlp'][nxs,:,nxs,nxs] 1469 return MmodA,MmodB #Ntau,Nops,Natm,Mxyz; cos & sin parts; sum matches drawn atom moments 1470 1471 def MagMod2(m,XYZ,modQ,MSSdata,SGData,SSGData): 1472 ''' 1473 this needs to make magnetic moment modulations & magnitudes as 1474 fxn of gTau points; NB: this allows only 1 mag. wave fxn. 1475 ''' 1476 Am = np.array(MSSdata[3:]).T[:,0,:] #atoms x cos pos mods; only 1 wave 1477 Bm = np.array(MSSdata[:3]).T[:,0,:] #...sin pos mods 1478 SGMT = np.array([ops[0] for ops in SGData['SGOps']]) #not .T!! 1479 SSGMT = np.array([ops[0] for ops in SSGData['SSGOps']]) #not .T!! 1480 Sinv = np.array([nl.inv(ops[0]) for ops in SSGData['SSGOps']]) 1481 SGT = np.array([ops[1] for ops in SSGData['SSGOps']]) 1482 if SGData['SGInv']: 1483 SGMT = np.vstack((SGMT,-SGMT)) 1484 SSGMT = np.vstack((SSGMT,-SSGMT)) 1485 Sinv = np.vstack((Sinv,-Sinv)) 1486 SGT = np.vstack((SGT,-SGT)) 1487 SGMT = np.vstack([SGMT for cen in SGData['SGCen']]) 1488 SSGMT = np.vstack([SSGMT for cen in SGData['SGCen']]) 1489 Sinv = np.vstack([Sinv for cen in SGData['SGCen']]) 1490 SGT = np.vstack([SGT+cen for cen in SSGData['SSGCen']])%1. 1491 if SGData['SGGray']: 1492 SGMT = np.vstack((SGMT,SGMT)) 1493 SSGMT = np.vstack((SSGMT,SSGMT)) 1494 Sinv = np.vstack((Sinv,Sinv)) 1495 SGT = np.vstack((SGT,SGT+.5))%1. 1496 epsinv = Sinv[:,3,3] 1497 phi = np.inner(XYZ,modQ).T 1498 TA = phi+(epsinv*(np.inner(modQ,SGT[:,:3])-SGT[:,3]))[:,nxs] #Nops,Natm 1499 phase = phi+(np.inner(modQ,SGT[:,:3])-SGT[:,3])[:,nxs] 1500 1501 pcos = np.cos(-twopi*m[:,nxs,nxs]*phase[nxs,:,:]) #Nref,Nops,Natm 1502 psin = np.sin(-twopi*m[:,nxs,nxs]*phase[nxs,:,:]) 1503 MmodA = TA[nxs,:,:,nxs]*(Am[nxs,nxs,:,:]*pcos[:,:,:,nxs]-Bm[nxs,nxs,:,:]*psin[:,:,:,nxs])/2. #Nref,Nops,Natm,Mxyz 1504 MmodB = TA[nxs,:,:,nxs]*(Am[nxs,nxs,:,:]*psin[:,:,:,nxs]+Bm[nxs,nxs,:,:]*pcos[:,:,:,nxs])/2. #Nref,Nops,Natm,Mxyz 1505 MmodA = np.sum(SGMT[nxs,:,nxs,:,:]*MmodA[:,:,:,nxs,:],axis=-1)*SGData['SpnFlp'][nxs,:,nxs,nxs] 1506 MmodB = np.sum(SGMT[nxs,:,nxs,:,:]*MmodB[:,:,:,nxs,:],axis=-1)*SGData['SpnFlp'][nxs,:,nxs,nxs] 1507 return MmodA,MmodB #Nref,Nops,Natm,Mxyz; cos & sin parts 1508 1459 phase = TA[nxs,:,:] + epsinv[nxs,:,nxs]*(glTau[:,nxs,nxs]-SGT[:,3][nxs,:,nxs]+phi[nxs,:,:]) 1460 pcos = np.cos(twopi*phase*epsinv[nxs,:,nxs]) #Ntau,Nops,Natm 1461 psin = np.sin(twopi*phase*epsinv[nxs,:,nxs]) 1462 1463 MmodAp = (Am[nxs,nxs,:,:]*pcos[:,:,:,nxs]+epsinv[nxs,:,nxs,nxs]*Bm[nxs,nxs,:,:]*psin[:,:,:,nxs])/2. #Ntau,Nops,Natm,Mxyz 1464 MmodBp = (Am[nxs,nxs,:,:]*psin[:,:,:,nxs]+epsinv[nxs,:,nxs,nxs]*Bm[nxs,nxs,:,:]*pcos[:,:,:,nxs])/2. 1465 MmodAm = (Am[nxs,nxs,:,:]*pcos[:,:,:,nxs]+epsinv[nxs,:,nxs,nxs]*Bm[nxs,nxs,:,:]*psin[:,:,:,nxs])/2. 1466 MmodBm = (Am[nxs,nxs,:,:]*psin[:,:,:,nxs]+epsinv[nxs,:,nxs,nxs]*Bm[nxs,nxs,:,:]*pcos[:,:,:,nxs])/2. 1467 MmodAp = np.sum(SGMT[nxs,:,nxs,:,:]*MmodAp[:,:,:,nxs,:],axis=-1)*SGData['MagMom'][nxs,:,nxs,nxs] 1468 MmodBp = np.sum(SGMT[nxs,:,nxs,:,:]*MmodBp[:,:,:,nxs,:],axis=-1)*SGData['MagMom'][nxs,:,nxs,nxs] 1469 MmodAm = np.sum(SGMT[nxs,:,nxs,:,:]*MmodAm[:,:,:,nxs,:],axis=-1)*SGData['MagMom'][nxs,:,nxs,nxs] 1470 MmodBm = np.sum(SGMT[nxs,:,nxs,:,:]*MmodBm[:,:,:,nxs,:],axis=-1)*SGData['MagMom'][nxs,:,nxs,nxs] 1471 return MmodAp,MmodBp,MmodAm,MmodBm #Ntau,Nops,Natm,Mxyz; cos & sin parts 1472 1509 1473 def Modulation(H,HP,nWaves,Fmod,Xmod,Umod,glTau,glWt): 1510 1474 '''
Note: See TracChangeset
for help on using the changeset viewer.