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 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 make_bcc(latconst=1.0): """ Make a cell of bcc 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.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 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 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 rdf_average(infiles,nspcs,nr,ffmt=None,dr=0.1,rmax=3.0,average=True, normalize=True): 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() asys= NAPSystem(fname=infname,ffmt=ffmt) print(' File =',infname) rd,gr,n= rdf(asys,nspcs,dr,rmax,normalize=normalize) nsum += n agr += gr # agr /= len(infiles) if average: agr /= nsum return rd,agr
def adf_average(infiles, ffmt='akr', dang=1.0, rcut=3.0, id0=0, id1=0, id2=0): na = int(180.0 / dang) + 1 df = np.zeros(na, dtype=float) aadf = np.zeros(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() asys = NAPSystem(fname=infname, ffmt=ffmt) print ' infname=', infname angd, df, n = adf(asys, dang, rcut, id0, id1, id2) aadf += df nsum += n #aadf /= len(infiles) aadf /= nsum return angd, aadf
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
#!/bin/env python import sys,os from napsys import NAPSystem infname= sys.argv[1] print 'input file: ',infname aSys= NAPSystem() aSys.read_akr(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) \
write_banner() nsmpl = options.nsmpl print ' num of points = ', nsmpl rcut = options.rcut print ' rcut = ', rcut, ' Ang.' rmin = options.rmin print ' rmin = ', rmin, ' Ang.' sid1 = options.sid1 print ' sid1 = ', sid1 sid2 = options.sid2 print ' sid2 = ', sid2 pmdexec = options.pmdexec asys = NAPSystem() # system size is bigger than 2*rcut a1 = np.array([2.0, 0.0, 0.0]) a2 = np.array([0.0, 1.0, 0.0]) a3 = np.array([0.0, 0.0, 1.0]) alc = rcut asys.set_lattice(alc, a1, a2, a3) atom1 = Atom() atom2 = Atom() atom1.set_pos(0.0, 0.0, 0.0) atom1.set_id(1) atom1.set_sid(sid1) asys.add_atom(atom1) atom2.set_pos(0.5, 0.0, 0.0) atom2.set_id(2)
print(' [Error] ntwindow <= 0 !!!') print(' Chech the parameters nmeasure and nshift, and input files.') sys.exit() #...make output data files outfname = 'dat.msd-{0}'.format(id) outfile = open(outfname, 'w') p0 = np.zeros((nmeasure, 3)) pp = np.zeros(3) msd = np.zeros((len(infiles), nmeasure, 3)) npbc = np.zeros((3, ), dtype=int) hmat = np.zeros((3, 3)) for ifile in range(len(infiles)): file = infiles[ifile] system = NAPSystem() system.read_akr(file) hmat[0] = system.a1 * system.alc hmat[1] = system.a2 * system.alc hmat[2] = system.a3 * system.alc #...human-readable ID to computer-oriented ID i = id - 1 ai = system.atoms[i] pi = ai.pos if ifile == 0: pp = pi else: #...correct periodic motion dev = pi - pp if dev[0] > 0.5: npbc[0] += -1
for file in args: infiles.append(file) infiles.sort() #...compute sampling time-window from nmeasure and nshift ntwindow= len(infiles) -(nmeasure-1)*nshift print ' ntwindow=',ntwindow if ntwindow <= 0: print ' [Error] ntwindow <= 0 !!!' print ' Chech the parameters nmeasure and nshift, and input files.' sys.exit() #...set global values infile= infiles[0] system=NAPSystem() system.read_akr(infile) natm= len(system.atoms) psid= np.zeros((natm,),dtype=np.int8) nas= 0 for ia in range(natm): if sid == 0: psid[ia] = 1 nas += 1 elif system.atoms[ia].sid == sid: psid[ia] = 1 nas += 1 print ' num of all atoms = ',natm print ' num of atoms to be considered = ',nas print ' accumurating data',
help="cutoff radius of the potential.") parser.add_option("--pmdexec", dest="pmdexec", type="string", default='../pmd/pmd', help="path to the pmd executable.") (options, args) = parser.parse_args() displace = options.displace print ' displacement = ', displace, ' Ang.' rcut = options.rcut print ' rcut = ', rcut, ' Ang.' pmdexec = options.pmdexec infname = args[0] sys0 = NAPSystem() sys0.read_pmd(infname) sys0.write_POSCAR() print ' POSCAR was written.' natm0 = sys0.num_atoms() h0 = np.zeros((3, 3)) h0[0] = sys0.a1 * sys0.alc h0[1] = sys0.a2 * sys0.alc h0[2] = sys0.a3 * sys0.alc n1, n2, n3 = calc_extention_ratio(h0, rcut) r1 = 2 * n1 + 1 r2 = 2 * n2 + 1 r3 = 2 * n3 + 1
if __name__ == "__main__": args = docopt(__doc__) infmt = args['--in-format'] outfmt = args['--out-format'] infname = args['INFILE'] outfname = args['OUTFILE'] specorder = args['--specorder'].split(',') strain = float(args['--strain']) print('args:') print(args) psys0 = NAPSystem(fname=infname, ffmt=infmt, specorder=specorder) if not outfmt == None: outfmt = parse_filename(outfname) if args['isotropic']: psys = isotropic(psys0, strain) elif args['uniaxial']: psys = uniaxial(psys0, strain)[0] elif args['shear']: psys = shear(psys0, strain)[0] if outfmt == 'pmd': psys.write_pmd(outfname) elif outfmt == 'smd': psys.write_pmd(outfname)
import numpy as np sys.path.append(__file__) from atom import Atom from napsys import NAPSystem __author__ = 'Ryo KOBAYASHI' __version__ = '160510' if __name__ == '__main__': args = docopt(__doc__,version=__version__) infile = args['INFILE'] specorder = args['--specorder'].split(',') psys = NAPSystem(fname=infile,specorder=specorder) psys.assign_pbc() psys.a1 = psys.a1 *psys.alc psys.a2 = psys.a2 *psys.alc psys.a3 = psys.a3 *psys.alc psys.alc = 1.0 print('a1 = ',psys.a1) print('a2 = ',psys.a2) print('a3 = ',psys.a3) pos = psys.get_real_positions() spos = psys.get_scaled_positions() for i in range(min(len(psys.atoms),100)): a = psys.atoms[i] print('{0:5d} {1:s}'.format(a.id,a.symbol) +' {0:12.5f} {1:12.5f} {2:12.5f}'.format(spos[i,0],
n3= int(2.0*rcut/vol*area12)+1 return n1,n2,n3 ################################################ Main routine ########## if __name__ == "__main__": args= docopt(__doc__) rcut= float(args['--cutoff']) pmddir= args['--pmddir'] execname= args['--exec'] infname= args['PMDFILE'] plot= args['--plot'] #print(args) sys0= NAPSystem() sys0.read_pmd(infname) sys0.write_POSCAR() print(' POSCAR was written.') natm0= sys0.num_atoms() h0=np.zeros((3,3)) h0[0]= sys0.a1 *sys0.alc h0[1]= sys0.a2 *sys0.alc h0[2]= sys0.a3 *sys0.alc n1,n2,n3= calc_extention_ratio(h0,rcut) print("n1,n2,n3 = {0:d} {1:d} {2:d}".format(n1,n2,n3)) # Make displaced POSCARS via phonopy os.system("phonopy -d --dim=\"{0:d} {1:d} {2:d}\"".format(n1,n2,n3))
write_banner() nsmpl = options.nsmpl print " num of points = ", nsmpl rcut = options.rcut print " rcut = ", rcut, " Ang." rmin = options.rmin print " rmin = ", rmin, " Ang." sid1 = options.sid1 print " sid1 = ", sid1 sid2 = options.sid2 print " sid2 = ", sid2 pmdexec = options.pmdexec asys = NAPSystem() # system size is bigger than 2*rcut a1 = np.array([2.0, 0.0, 0.0]) a2 = np.array([0.0, 1.0, 0.0]) a3 = np.array([0.0, 0.0, 1.0]) alc = rcut asys.set_lattice(alc, a1, a2, a3) atom1 = Atom() atom2 = Atom() atom1.set_pos(0.0, 0.0, 0.0) atom1.set_id(1) atom1.set_sid(sid1) asys.add_atom(atom1) atom2.set_pos(0.5, 0.0, 0.0) atom2.set_id(2)
parser.add_option("-r",dest="rcut",type="float", default=3.772, help="cutoff radius of the potential.") parser.add_option("--pmdexec",dest="pmdexec",type="string", default='../pmd/pmd', help="path to the pmd executable.") (options,args)= parser.parse_args() displace= options.displace print ' displacement = ',displace,' Ang.' rcut= options.rcut print ' rcut = ',rcut,' Ang.' pmdexec= options.pmdexec infname= args[0] sys0= NAPSystem() sys0.read_pmd(infname) sys0.write_POSCAR() print ' POSCAR was written.' natm0= sys0.num_atoms() h0=np.zeros((3,3)) h0[0]= sys0.a1 *sys0.alc h0[1]= sys0.a2 *sys0.alc h0[2]= sys0.a3 *sys0.alc n1,n2,n3= calc_extention_ratio(h0,rcut) r1= 2*n1+1 r2= 2*n2+1 r3= 2*n3+1
print ' Chech the parameters nmeasure and nshift, and input files.' sys.exit() #...make output data files outfname='dat.msd-{0}'.format(id) outfile= open(outfname,'w') p0= np.zeros((nmeasure,3)) pp= np.zeros(3) msd= np.zeros((len(infiles),nmeasure,3)) npbc= np.zeros((3,),dtype=int) hmat= np.zeros((3,3)) for ifile in range(len(infiles)): file= infiles[ifile] system= NAPSystem() system.read_akr(file) hmat[0]= system.a1 *system.alc hmat[1]= system.a2 *system.alc hmat[2]= system.a3 *system.alc #...human-readable ID to computer-oriented ID i= id-1 ai= system.atoms[i] pi= ai.pos if ifile == 0: pp= pi else: #...correct periodic motion dev= pi -pp if dev[0] > 0.5: npbc[0] += -1
write_banner() nsmpl= options.nsmpl print(' num of points = ',nsmpl) rcut= options.rcut print(' rcut = ',rcut,' Ang.') amin= options.amin print(' amin = ',amin) amax= options.amax print(' amax = ',amax) distance= options.distance print(' distance = ',distance,' Ang.') pmdexec= options.pmdexec asys= NAPSystem() a1= np.array([2.0, 0.0, 0.0]) a2= np.array([0.0, 2.0, 0.0]) a3= np.array([0.0, 0.0, 1.0]) alc= rcut asys.set_lattice(alc,a1,a2,a3) atom1= Atom() atom1.set_pos(0.0,0.0,0.0) atom1.set_id(1) asys.add_atom(atom1) hd= distance/(alc*2) atom2= Atom() atom2.set_pos(hd,0.0,0.0) atom2.set_id(2)
#!/bin/env python from __future__ import print_function import sys, os from napsys import NAPSystem infname = sys.argv[1] print('input file: ', infname) aSys = NAPSystem() aSys.read_akr(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) \