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
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
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)
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))
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],