Changeset 4435


Ignore:
Timestamp:
May 25, 2020 8:57:49 PM (3 years ago)
Author:
vondreele
Message:

fix MakeRMC6f for fractional atom fracs

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/GSASIIpwd.py

    r4432 r4435  
    22302230    Dups,Fracs = findDup(Phase['Atoms'])
    22312231    Sfracs = [np.cumsum(fracs) for fracs in Fracs]
     2232    ifSfracs = np.any(np.array(Sfracs)-1.)
    22322233    Sample = PWDdata['Sample Parameters']
    22332234    Meta['temperature'] = Sample['Temperature']
     
    22402241    GB = G2lat.cell2Gmat( newPhase['General']['Cell'][1:7])[0]
    22412242    RMCPdict['Rmax'] = np.min(np.sqrt(np.array([1./G2lat.calc_rDsq2(H,GB) for H in [[1,0,0],[0,1,0],[0,0,1]]])))/2.
    2242     newPhase,Atcodes = G2lat.TransformPhase(Phase,newPhase,Trans,np.zeros(3),np.zeros(3),ifMag=False)
     2243    newPhase,Atcodes = G2lat.TransformPhase(Phase,newPhase,Trans,np.zeros(3),np.zeros(3),ifMag=False,Force=False)
    22432244    Natm = np.core.defchararray.count(np.array(Atcodes),'+')    #no. atoms in original unit cell
    22442245    Natm = np.count_nonzero(Natm-1)
    22452246    Atoms = newPhase['Atoms']
    2246     Satoms = G2mth.sortArray(G2mth.sortArray(G2mth.sortArray(Atoms,5),4),3)
    2247     Datoms = [[atom for atom in Satoms if atom[0] in dup] for dup in Dups]
    2248     Natoms = []
    22492247    reset = False
    2250     for idup,dup in enumerate(Dups):
    2251         ldup = len(dup)
    2252         datoms = Datoms[idup]
    2253         natm = len(datoms)
    2254         i = 0
    2255         while i < natm:
    2256             atoms = datoms[i:i+ldup]
    2257             try:
    2258                 atom = atoms[np.searchsorted(Sfracs[idup],rand.random())]
    2259                 Natoms.append(atom)
    2260             except IndexError:      #what about vacancies?
    2261                 if 'Va' not in Atseq:
    2262                     reset = True
    2263                     Atseq.append('Va')
    2264                     RMCPdict['aTypes']['Va'] = 0.0
    2265                 atom = atoms[0]
    2266                 atom[1] = 'Va'
    2267                 Natoms.append(atom)
    2268             i += ldup
     2248   
     2249    if ifSfracs:
     2250        Natm = np.core.defchararray.count(np.array(Atcodes),'+')    #no. atoms in original unit cell
     2251        Natm = np.count_nonzero(Natm-1)
     2252        Satoms = []
     2253        for i in range(len(Atoms)//Natm):
     2254            ind = i*Natm
     2255            Satoms.append(G2mth.sortArray(G2mth.sortArray(G2mth.sortArray(Atoms[ind:ind+Natm],5),4),3))
     2256        Natoms = []
     2257        for satoms in Satoms:
     2258            for idup,dup in enumerate(Dups):
     2259                ldup = len(dup)
     2260                natm = len(satoms)
     2261                i = 0
     2262                while i < natm:
     2263                    if satoms[i][0] in dup:
     2264                        atoms = satoms[i:i+ldup]
     2265                        try:
     2266                            atom = atoms[np.searchsorted(Sfracs[idup],rand.random())]
     2267                            Natoms.append(atom)
     2268                        except IndexError:      #what about vacancies?
     2269                            if 'Va' not in Atseq:
     2270                                reset = True
     2271                                Atseq.append('Va')
     2272                                RMCPdict['aTypes']['Va'] = 0.0
     2273                            atom = atoms[0]
     2274                            atom[1] = 'Va'
     2275                            Natoms.append(atom)
     2276                        i += ldup
     2277                    else:
     2278                       i += 1
     2279    else:
     2280        Natoms = Atoms
     2281   
    22692282    NAtype = np.zeros(len(Atseq))
    22702283    for atom in Natoms:
Note: See TracChangeset for help on using the changeset viewer.