def make_zincblend(latconst=1.0, specorder=None): """ Make a cell of diamond structure. """ if specorder is None: specorder = ['Ga', 'N'] if len(specorder) < 2: specorder = ['Ga', 'N'] print('Since len(specorder) < 2, specorder is reset to ', specorder) s = NAPSystem(specorder=specorder) #...lattice a1 = np.array([1.0, 0.0, 0.0]) a2 = np.array([0.0, 1.0, 0.0]) a3 = np.array([0.0, 0.0, 1.0]) s.set_lattice(latconst, a1, a2, a3) poss = [[0.00, 0.00, 0.00], [0.50, 0.50, 0.00], [0.50, 0.00, 0.50], [0.00, 0.50, 0.50], [0.25, 0.25, 0.25], [0.75, 0.75, 0.25], [0.75, 0.25, 0.75], [0.25, 0.75, 0.75]] symbols = [ specorder[0] if i < 4 else specorder[1] for i in range(len(poss)) ] vels = [[0., 0., 0.] for i in range(len(poss))] frcs = [[0., 0., 0.] for i in range(len(poss))] s.add_atoms(symbols, poss, vels, frcs) return s
def make_nacl(latconst=1.0): specorder = ['Na', 'Cl'] s = NAPSystem(specorder=specorder) #...lattice a1 = np.array([1.0, 0.0, 0.0]) a2 = np.array([0.0, 1.0, 0.0]) a3 = np.array([0.0, 0.0, 1.0]) s.set_lattice(latconst, a1, a2, a3) positions = [ (0.00, 0.00, 0.00), (0.50, 0.00, 0.00), (0.00, 0.50, 0.00), (0.00, 0.00, 0.50), (0.50, 0.50, 0.00), (0.50, 0.00, 0.50), (0.00, 0.50, 0.50), (0.50, 0.50, 0.50), ] species = ['Na', 'Cl', 'Cl', 'Cl', 'Na', 'Na', 'Na', 'Cl'] for i, p in enumerate(positions): atom = Atom() atom.set_pos(p[0], p[1], p[2]) atom.set_symbol(species[i]) s.add_atom(atom) return s
def make_nacl(latconst=1.0, specorder=None): if specorder is None: specorder = ['Na', 'Cl'] if len(specorder) < 2: specorder = ['Na', 'Cl'] print('Since len(specorder) < 2, specorder is reset to ', specorder) s = NAPSystem(specorder=specorder) #...lattice a1 = np.array([1.0, 0.0, 0.0]) a2 = np.array([0.0, 1.0, 0.0]) a3 = np.array([0.0, 0.0, 1.0]) s.set_lattice(latconst, a1, a2, a3) poss = [ [0.00, 0.00, 0.00], [0.50, 0.00, 0.00], [0.00, 0.50, 0.00], [0.00, 0.00, 0.50], [0.50, 0.50, 0.00], [0.50, 0.00, 0.50], [0.00, 0.50, 0.50], [0.50, 0.50, 0.50], ] symbols = ['Na', 'Cl', 'Cl', 'Cl', 'Na', 'Na', 'Na', 'Cl'] vels = [[0., 0., 0.] for i in range(len(poss))] frcs = [[0., 0., 0.] for i in range(len(poss))] s.add_atoms(symbols, poss, vels, frcs) return s
def structure2aSys(structure,idoffset=1): """ Converts Structure object of pymatgen to NAPSystem object in nap. Args: structure (Structure): pymatgen Structure object to be converted to NAPSystem object.. Returns: aSys (NAPSystem): """ lattice= structure.lattice alc= 1.0 a1= np.array(lattice.matrix[0]) a2= np.array(lattice.matrix[1]) a3= np.array(lattice.matrix[2]) #... rescale a? vectors a1= a1/alc a2= a2/alc a3= a3/alc aSys= NAPSystem() aSys.set_lattice(alc,a1,a2,a3) for ia in range(structure.num_sites): ai= Atom() si= structure[ia] crd= si.frac_coords ai.set_pos(crd[0],crd[1],crd[2]) sid= structure.symbol_set.index(si.species_string)+idoffset ai.set_sid(sid) ai.set_id(ia+1) aSys.add_atom(ai) return aSys
def main(args): infname = args['FILE'] aSys = NAPSystem(fname=infname) natm = len(aSys.atoms) outfname = infname + ".voro" f = open(outfname, 'w') alc = aSys.alc ax = aSys.a1[0] ay = aSys.a2[1] az = aSys.a3[2] for ia in range(natm): pos = aSys.atoms[ia].pos f.write(' {0:4d}'.format(ia + 1)) f.write(' {0:10.3f}'.format(alc * ax * pos[0])) f.write(' {0:10.3f}'.format(alc * ay * pos[1])) f.write(' {0:10.3f}'.format(alc * az * pos[2])) f.write('\n') f.close() print('Use voro++ as follows:') cmd= 'voro++ -p -c " %i %q %v %s %A"' \ +' 0.0 {0:5.1f}'.format(alc*ax) \ +' 0.0 {0:5.1f}'.format(alc*ay) \ +' 0.0 {0:5.1f}'.format(alc*az) \ +' {0:s}'.format(outfname) print('$ ' + cmd) os.system(cmd)
def main(args): files = args['FILES'] files.sort(key=get_key, reverse=True) nskip = int(args['--skip']) del files[:nskip] prefix = args['--prefix'] out4fp = args['--out4fp'] nsum = 0 volsum = 0.0 asum= bsum= csum= 0.0 alpsum= betsum= gmmsum= 0.0 for i,fi in enumerate(files): try: nsys = NAPSystem(fname=fi) volsum += nsys.volume() a,b,c,alpha,beta,gamma = nsys2lat(nsys) asum += a bsum += b csum += c alpsum += alpha betsum += beta gmmsum += gamma nsum += 1 except Exception as e: print('Failed {0:s} '.format(fi)) pass if nsum < 1: raise ValueError('Something went wrong! nsum<1') vol = volsum /nsum a = asum/nsum b = bsum/nsum c = csum/nsum alpha = alpsum/nsum beta = betsum/nsum gamma = gmmsum/nsum if out4fp: with open(prefix+'.vol','w') as f: f.write('# Volume\n') f.write(' 1 1.0\n') f.write('{0:15.3f}\n'.format(vol)) with open(prefix+'.lat','w') as f: f.write('# Lattice parameters\n') f.write(' 6 1.0\n') f.write(' {0:10.3f} {1:10.3f} {2:10.3f}'.format(a,b,c) +' {0:10.3f} {1:10.3f} {2:10.3f}\n'.format(alpha,beta,gamma)) else: with open(prefix+'.vol','w') as f: f.write('{0:15.3f}\n'.format(vol)) with open(prefix+'.lat','w') as f: f.write(' {0:10.3f} {1:10.3f} {2:10.3f}'.format(a,b,c) +' {0:10.3f} {1:10.3f} {2:10.3f}\n'.format(alpha,beta,gamma)) print(' Wrote {0:s}.vol {0:s}.lat'.format(prefix))
def convert(fname,specorder,index): """ Convert data in fname to fitpot format. """ ry2ev = 13.605698066 au2ang = 0.529177249 ryau2evang = ry2ev/au2ang if not os.path.exists(fname): raise RuntimeError(fname+' not found.') #atoms= read('POSCAR',index=0,format='vasp') try: natm,nspcs,spcs,cell,pos,elems,erg,frcs,pos_unit,strs \ = read_espresso_out(fname) except IOError as e: print('IOError({0:s}): {1:s}'.format(e.errno,e.strerror)) raise erg = erg *Ry_to_eV psys = NAPSystem(specorder=specorder) psys.set_hmat(cell) hi = unitvec_to_hi(cell[0,:],cell[1,:],cell[2,:]) # converting force here, not when reading the file frcs[:,:] *= ryau2evang for ia in range(natm): ai = Atom() pi = pos[ia,:] if pos_unit != "crystal": sx,sy,sz = cartesian_to_scaled(hi,pi[0],pi[1],pi[2]) else: sx,sy,sz = pi[:] ai.set_pos(sx,sy,sz) ai.set_frc(frcs[ia,0],frcs[ia,1],frcs[ia,2]) ai.set_symbol(elems[ia]) psys.add_atom(ai) psys.assign_pbc() if os.path.exists('POSCAR'): print(' cp original POSCAR to POSCAR.orig') os.system('cp POSCAR POSCAR.orig') psys.write_POSCAR() psys.write_pmd(fname='pos') write_ergref(fname='erg.ref',erg=erg) write_frcref(fname='frc.ref',frcs=frcs) #...write stress with open('strs.ref','w') as f: for s in strs: f.write(' {0:8.2f}'.format(s)) f.write('\n')
def xdatcar2poscars(fname='XDATCAR', nskip=1): f = open(fname, 'r') isys = 0 while True: #....."Direct configuration= #" try: line = f.readline() #...Check configuration if not "Direct configuration=" in line: alc, a1, a2, a3, species, num_atoms = read_header(f) # print(species) # print(num_atoms) natm = 0 for n in num_atoms: natm += n continue elif len(line.split()) == 0: break except: break #...Skip reading this configuration if requested if not isys % nskip == 0: for i in range(natm): f.readline() isys += 1 continue #...Following lines: atom positions #...Make a NAPSystem from these information and write to POSCAR_##### nsys = NAPSystem(specorder=species) nsys.set_lattice(alc, a1, a2, a3) inc = 0 for inum, ni in enumerate(num_atoms): for j in range(ni): inc += 1 ai = Atom() ai.set_id(inc) ai.set_symbol(species[inum]) data = f.readline().split() # print(data) if not is_number(data[0]): raise ValueError('Wrong format?') x1, x2, x3 = [float(x) for x in data[0:3]] ai.set_pos(x1, x2, x3) ai.set_vel(0.0, 0.0, 0.0) nsys.add_atom(ai) foutname = 'POSCAR_{0:05d}'.format(isys) print(' >>> ' + foutname) nsys.write_POSCAR(fname=foutname) isys += 1 f.close() return None
def make_wurtzite(latconst=1.0, specorder=None, celltype='conventional'): """ Make a cell of wurtzite structure. - celltype: conventional or primitive """ if specorder is None: specorder = ['Ga', 'N'] if len(specorder) < 2: specorder = ['Ga', 'N'] print('Since len(specorder) < 2, specorder is reset to ', specorder) s = NAPSystem(specorder=specorder) if celltype[0] == 'c': #...conventional cell a1 = np.array([1.00, 0.00, 0.00]) a2 = np.array([0.00, np.sqrt(3.0), 0.00]) a3 = np.array([0.00, 0.00, 1.633]) s.set_lattice(latconst, a1, a2, a3) poss = [ [0.00, 0.00, 0.00], [0.50, 0.50, 0.00], [0.50, 0.5 / 3, 0.50], [0.00, 0.5 / 3 + 0.5, 0.50], [0.50, 0.5 / 3, 0.125], [0.00, 0.5 / 3 + 0.5, 0.125], [0.00, 0.00, 0.625], [0.50, 0.50, 0.625], ] symbols = [ specorder[0] if i < 4 else specorder[1] for i in range(len(poss)) ] elif cenlltype[0] == 'p': #...primitive cell a1 = np.array([1.0, 0.0, 0.0]) a2 = np.array([-0.5, np.sqrt(3.0) / 2, 0.0]) a3 = np.array([0.0, 0.0, 1.633]) s.set_lattice(latconst, a1, a2, a3) poss = [ [0.00, 0.00, 0.00], [2.0 / 3, 1.0 / 3, 0.125], [2.0 / 3, 1.0 / 3, 0.50], [0.00, 0.00, 0.625], ] symbols = [ specorder[0] if i < 2 else specorder[1] for i in range(len(poss)) ] vels = [[0., 0., 0.] for i in range(len(poss))] frcs = [[0., 0., 0.] for i in range(len(poss))] s.add_atoms(symbols, poss, vels, frcs) return s
def rdf_average(infiles,nr,specorder,dr=0.1,rmax=3.0,pairwise=False): nspcs = len(specorder) agr= np.zeros((nspcs+1,nspcs+1,nr),dtype=float) nsum= 0 for infname in infiles: if not os.path.exists(infname): print("[Error] File, {0}, does not exist !!!".format(infname)) sys.exit() nsys= NAPSystem(fname=infname,specorder=specorder) print(' File =',infname) rd,gr= rdf(nsys,nspcs,dr,rmax,pairwise=pairwise) agr += gr nsum += 1 agr /= nsum return rd,agr
def make_sc(latconst=1.0): """ Make a cell of simple cubic structure. """ s = NAPSystem(specorder=_default_specorder) #...lattice a1 = np.array([1.0, 0.0, 0.0]) a2 = np.array([0.0, 1.0, 0.0]) a3 = np.array([0.0, 0.0, 1.0]) s.set_lattice(latconst, a1, a2, a3) p = [0.00, 0.00, 0.00] atom = Atom() atom.set_pos(p[0], p[1], p[2]) atom.set_symbol(_default_specorder[0]) s.add_atom(atom) return s
def read_sample(dirname): """ Read system, energy, forces and stress information of given DIRNAME. """ #...The directory must have erg.ref, frc.ref, strs.ref, and pos files. files = ('pos', 'erg.ref', 'frc.ref', 'strs.ref') for f in files: if not os.path.exists(dirname + '/' + f): raise RuntimeError('The file ' + f + ' does not exist in ' + dirname) #...Read pos first nsys = NAPSystem(fname=dirname + '/pos', ffmt='pmd') erg = read_erg(fname=dirname + '/erg.ref') frcs = read_frc(fname=dirname + '/frc.ref') strs = read_strs(fname=dirname + '/strs.ref') return nsys, erg, frcs, strs
def make_hcp(latconst=1.0): """ Make a cell of hcp structure. """ s = NAPSystem(specorder=_default_specorder) #...lattice a1 = np.array([1.0, 0.0, 0.0]) a2 = np.array([-0.5, np.sqrt(3.0) / 2, 0.0]) a3 = np.array([0.0, 0.0, 1.633]) s.set_lattice(latconst, a1, a2, a3) poss = [[0.00, 0.00, 0.00], [1.0 / 3, 2.0 / 3, 0.50]] symbol = _default_specorder[0] symbols = [symbol for i in range(len(poss))] vels = [[0., 0., 0.] for i in range(len(poss))] frcs = [[0., 0., 0.] for i in range(len(poss))] s.add_atoms(symbols, poss, vels, frcs) return s
def make_bcc(latconst=1.0, specorder=_default_specorder): """ Make a cell of bcc structure with z along [001]. """ s = NAPSystem(specorder=specorder) #...lattice a1 = np.array([1.0, 0.0, 0.0]) a2 = np.array([0.0, 1.0, 0.0]) a3 = np.array([0.0, 0.0, 1.0]) s.set_lattice(latconst, a1, a2, a3) positions = [(0.00, 0.00, 0.00), (0.50, 0.50, 0.50)] for p in positions: atom = Atom() atom.set_pos(p[0], p[1], p[2]) atom.set_symbol(specorder[0]) s.add_atom(atom) return s
def make_hcp(latconst=1.0): """ Make a cell of hcp structure. """ s = NAPSystem(specorder=_default_specorder) #...lattice a1 = np.array([1.0, 0.0, 0.0]) a2 = np.array([-0.5, np.sqrt(3.0) / 2, 0.0]) a3 = np.array([0.0, 0.0, 1.633]) s.set_lattice(latconst, a1, a2, a3) positions = [(0.00, 0.00, 0.00), (1.0 / 3, 2.0 / 3, 0.50)] for p in positions: atom = Atom() atom.set_pos(p[0], p[1], p[2]) atom.set_symbol(_default_specorder[0]) s.add_atom(atom) return s
def make_sc(latconst=1.0): """ Make a cell of simple cubic structure. """ s = NAPSystem(specorder=_default_specorder) #...lattice a1 = np.array([1.0, 0.0, 0.0]) a2 = np.array([0.0, 1.0, 0.0]) a3 = np.array([0.0, 0.0, 1.0]) s.set_lattice(latconst, a1, a2, a3) symbol = _default_specorder[0] symbols = [symbol] poss = [[0.00, 0.00, 0.00]] vels = [[0., 0., 0.]] frcs = [[0., 0., 0.]] s.add_atoms(symbols, poss, vels, frcs) return s
def make_bcc110(latconst=1.0): """ Make a cell of bcc structure with z along [110]. """ s = NAPSystem(specorder=_default_specorder) #...lattice a1 = np.array([1.0, 0.0, 0.0]) a2 = np.array([0.0, 1.414, 0.0]) a3 = np.array([0.0, 0.0, 1.414]) s.set_lattice(latconst, a1, a2, a3) symbol = _default_specorder[0] symbols = [symbol, symbol, symbol, symbol] poss = [[0.00, 0.00, 0.00], [0.00, 0.50, 0.50], [0.50, 0.50, 0.00], [0.50, 0.00, 0.50]] vels = [[0., 0., 0.] for i in range(4)] frcs = [[0., 0., 0.] for i in range(4)] s.add_atoms(symbols, poss, vels, frcs) return s
def make_sc(latconst=1.0, specorder=None): """ Make a cell of simple cubic structure. """ if specorder is None: raise ValueError('specorder must be given.') s = NAPSystem(specorder=specorder) #...lattice a1 = np.array([1.0, 0.0, 0.0]) a2 = np.array([0.0, 1.0, 0.0]) a3 = np.array([0.0, 0.0, 1.0]) s.set_lattice(latconst, a1, a2, a3) symbols = [specorder[0]] poss = [[0.00, 0.00, 0.00]] vels = [[0., 0., 0.]] frcs = [[0., 0., 0.]] s.add_atoms(symbols, poss, vels, frcs) return s
def make_honeycomb(latconst=1.0): """ Make a cell of 2D honeycomb structure. """ s = NAPSystem(specorder=_default_specorder) #...lattice a1 = np.array([1.0, 0.0, 0.0]) a2 = np.array([0.0, 1.5, 0.0]) a3 = np.array([0.0, 0.0, np.sqrt(3.0)]) s.set_lattice(latconst, a1, a2, a3) positions = [(0.00, 0.50, 0.00), (0.50, 0.50, 1. / 6), (0.50, 0.50, 0.50), (0.00, 0.50, 0.5 + 1.0 / 6)] for p in positions: atom = Atom() atom.set_pos(p[0], p[1], p[2]) atom.set_symbol(_default_specorder[0]) s.add_atom(atom) return s
def from_ase(atoms, specorder=None): """ Convert ASE Atoms object to NAPSystem object. """ spcorder = [] if specorder is not None: spcorder = specorder symbols = atoms.get_chemical_symbols() spos = atoms.get_scaled_positions() vels = atoms.get_velocities() cell = atoms.get_cell() celli = np.linalg.inv(cell) if spos is None: raise ValueError('ASE atoms object has no atom in it.') #...Initialize and remake self.specorder for s in symbols: if s not in spcorder: spcorder.append(s) nsys = NAPSystem(specorder=spcorder) # nsys = cls(specorder=spcorder) nsys.alc = 1.0 nsys.a1[:] = atoms.cell[0] nsys.a2[:] = atoms.cell[1] nsys.a3[:] = atoms.cell[2] #...First, initialize arrays natm = len(atoms) sids = [0 for i in range(natm)] poss = np.array(spos) if vels is None: vels = np.zeros((natm, 3)) else: vels = np.array(vels) frcs = np.zeros((natm, 3)) #...Create arrays to be installed into nsys.atoms sids = [nsys.specorder.index(si) + 1 for si in symbols] nsys.atoms.sid = sids nsys.atoms[['x', 'y', 'z']] = poss for i in range(len(vels)): vels[i] = np.dot(celli, vels[i]) nsys.atoms[['vx', 'vy', 'vz']] = vels nsys.atoms[['fx', 'fy', 'fz']] = frcs return nsys
def get_list_high_energy(gsmpls,threshold): emin = 1e+30 highsmpls = [] ergs = [] for i,s in enumerate(gsmpls): smpldir = s[0] erg = s[1] #atoms = read(smpldir+'/POSCAR',format='vasp') atoms = NAPSystem(fname=smpldir+"/pos",format='pmd') natm = atoms.num_atoms() erg /= natm ergs.append(erg) emin = min(erg,emin) for i,s in enumerate(gsmpls): smpldir = s[0] erg = ergs[i] if erg-emin > threshold: highsmpls.append(smpldir) return highsmpls
def make_diamond(latconst=1.0): """ Make a cell of diamond structure. """ s = NAPSystem(specorder=_default_specorder) #...lattice a1 = np.array([1.0, 0.0, 0.0]) a2 = np.array([0.0, 1.0, 0.0]) a3 = np.array([0.0, 0.0, 1.0]) s.set_lattice(latconst, a1, a2, a3) poss = [[0.00, 0.00, 0.00], [0.50, 0.50, 0.00], [0.50, 0.00, 0.50], [0.00, 0.50, 0.50], [0.25, 0.25, 0.25], [0.75, 0.75, 0.25], [0.75, 0.25, 0.75], [0.25, 0.75, 0.75]] symbol = _default_specorder[0] symbols = [symbol for i in range(len(poss))] vels = [[0., 0., 0.] for i in range(len(poss))] frcs = [[0., 0., 0.] for i in range(len(poss))] s.add_atoms(symbols, poss, vels, frcs) return s
def make_bcc(latconst=1.0, specorder=None): """ Make a cell of bcc structure with z along [001]. """ if specorder is None: specorder = ['Fe'] s = NAPSystem(specorder=specorder) #...lattice a1 = np.array([1.0, 0.0, 0.0]) a2 = np.array([0.0, 1.0, 0.0]) a3 = np.array([0.0, 0.0, 1.0]) s.set_lattice(latconst, a1, a2, a3) poss = [[0.00, 0.00, 0.00], [0.50, 0.50, 0.50]] symbol = _default_specorder[0] symbols = [symbol for i in range(len(poss))] vels = [[0., 0., 0.] for i in range(len(poss))] frcs = [[0., 0., 0.] for i in range(len(poss))] s.add_atoms(symbols, poss, vels, frcs) return s
def make_diamond(latconst=1.0): """ Make a cell of diamond structure. """ s = NAPSystem(specorder=_default_specorder) #...lattice a1 = np.array([1.0, 0.0, 0.0]) a2 = np.array([0.0, 1.0, 0.0]) a3 = np.array([0.0, 0.0, 1.0]) s.set_lattice(latconst, a1, a2, a3) positions = [(0.00, 0.00, 0.00), (0.50, 0.50, 0.00), (0.50, 0.00, 0.50), (0.00, 0.50, 0.50), (0.25, 0.25, 0.25), (0.75, 0.75, 0.25), (0.75, 0.25, 0.75), (0.25, 0.75, 0.75)] for p in positions: atom = Atom() atom.set_pos(p[0], p[1], p[2]) atom.set_symbol(_default_specorder[0]) s.add_atom(atom) return s
def make_bcc111(latconst=1.0): """ Make a cell of bcc structure with z along [111]. """ s = NAPSystem(specorder=_default_specorder) #...lattice a1 = np.array([1.414, 0.0, 0.0]) a2 = np.array([0.0, 2.449, 0.0]) a3 = np.array([0.0, 0.0, 1.732]) s.set_lattice(latconst, a1, a2, a3) symbol = _default_specorder[0] poss = [[0.00, 0.00, 0.00], [0.00, 0.00, 0.50], [0.00, 0.333, 0.167], [0.00, 0.333, 0.667], [0.00, 0.667, 0.333], [0.00, 0.667, 0.833], [0.50, 0.167, 0.333], [0.50, 0.167, 0.833], [0.50, 0.50, 0.00], [0.50, 0.50, 0.50], [0.50, 0.833, 0.167], [0.50, 0.833, 0.667]] symbols = [symbol for i in range(len(poss))] vels = [[0., 0., 0.] for i in range(len(poss))] frcs = [[0., 0., 0.] for i in range(len(poss))] s.add_atoms(symbols, poss, vels, frcs) return s
def make_bcc111(latconst=1.0): """ Make a cell of bcc structure with z along [111]. """ s = NAPSystem(specorder=_default_specorder) #...lattice a1 = np.array([1.414, 0.0, 0.0]) a2 = np.array([0.0, 2.449, 0.0]) a3 = np.array([0.0, 0.0, 1.732]) s.set_lattice(latconst, a1, a2, a3) positions = [(0.00, 0.00, 0.00), (0.00, 0.00, 0.50), (0.00, 0.333, 0.167), (0.00, 0.333, 0.667), (0.00, 0.667, 0.333), (0.00, 0.667, 0.833), (0.50, 0.167, 0.333), (0.50, 0.167, 0.833), (0.50, 0.50, 0.00), (0.50, 0.50, 0.50), (0.50, 0.833, 0.167), (0.50, 0.833, 0.667)] for p in positions: atom = Atom() atom.set_pos(p[0], p[1], p[2]) atom.set_symbol(_default_specorder[0]) s.add_atom(atom) return s
def doc_to_pos(doc, conf): """ Make a pos file, which has pmd format, from a document in MongoDB. """ psys = NAPSystem() matrix = doc['calculations'][-1]['output']['crystal']['lattice']['matrix'] a1 = matrix[0] a2 = matrix[1] a3 = matrix[2] psys.set_lattice(1.0, a1, a2, a3) species_ids = conf['species_ids'] sites = doc['calculations'][-1]['output']['crystal']['sites'] for site in sites: ra = site['abc'] ai = Atom() ai.set_pos(ra[0], ra[1], ra[2]) ai.set_sid(species_ids[site['species'][0]['element']]) psys.add_atom(ai) return psys
def adf_average(infiles, dang=1.0, rcut=3.0, triplets=[], no_average=False, specorder=None): na = int(180.0 / dang) + 1 aadf = np.zeros((len(triplets), na), dtype=float) nsum = 0 for infname in infiles: if not os.path.exists(infname): print("[Error] File, {0}, does not exist !!!".format(infname)) sys.exit() nsys = NAPSystem(fname=infname, specorder=specorder) print(' File = ', infname) angd, df, n = adf(nsys, dang, rcut, triplets) aadf += df nsum += n if not no_average: aadf /= nsum return angd, aadf
def make_2D_triangle(latconst=3.8, size=(1, 1, 1)): """ Make 2D triangle lattice on x-z plane. Note that it is not x-y plane. """ specorder = ['Ar'] s = NAPSystem(specorder=specorder) #...lattice a1 = np.array([1.0, 0.0, 0.0]) a2 = np.array([0.0, 10.0, 0.0]) a3 = np.array([0.0, 0.0, np.sqrt(3.0)]) s.set_lattice(latconst, a1, a2, a3) poss = [[0.00, 0.50, 0.00], [0.50, 0.50, 0.50]] symbol = _default_specorder[0] symbols = [symbol for i in range(len(poss))] vels = [[0., 0., 0.] for i in range(len(poss))] frcs = [[0., 0., 0.] for i in range(len(poss))] s.add_atoms(symbols, poss, vels, frcs) s.repeat(*size) s.add_vacuum(2. * latconst, 0.0, 10. * latconst * np.sqrt(3)) return s
def make_2D_triangle(latconst=3.8, size=(1, 1, 1)): """ Make 2D triangle lattice on x-z plane. Note that it is not x-y plane. """ specorder = ['Ar'] s = NAPSystem(specorder=specorder) #...lattice a1 = np.array([1.0, 0.0, 0.0]) a2 = np.array([0.0, 10.0, 0.0]) a3 = np.array([0.0, 0.0, np.sqrt(3.0)]) s.set_lattice(latconst, a1, a2, a3) positions = [(0.00, 0.50, 0.00), (0.50, 0.50, 0.50)] for p in positions: atom = Atom() atom.set_pos(p[0], p[1], p[2]) atom.set_symbol(specorder[0]) s.add_atom(atom) s.repeat(*size) s.add_vacuum(2. * latconst, 0.0, 10. * latconst * np.sqrt(3)) return s