def prepareBand(self): tl.mkcd('band') # run vasp tl.cp('../minimize/POSCAR', '.') self.m.ismear = -1 self.getVaspRun_vasp() tl.cd('..')
def getvasprun(self, files): m = self.m maindir = pwd() if m.engine == "vasp": calculator = self.getVaspRun_vasp elif m.engine == "lammps": calculator = self.getVaspRun_lammps self.jm = jobManager() for file in files: print(file) dir = "dirs/dir_" + file mkdir(dir) mv(file, dir + '/POSCAR') cd(dir) calculator() cd(maindir) self.jm.run() if m.th: mkdir(m.pbsname) self.thcode(files, m.pbsname) cp("dirs", m.pbsname) passthru("tar zcf %s.tar.gz %s" % (m.pbsname, m.pbsname)) print('start check') self.jm.check() if m.engine == "lammps1": from multiprocessing.dummy import Pool pool = Pool() pool.map_async(lammpsvasprun, files) pool.close() pool.join()
def minimizePOSCAR(self): m = self.m if m.engine == "lammps": m.dump2POSCAR(m.home + '/minimize/range', rotate=True) elif m.engine == "vasp": cp(m.home + '/minimize/CONTCAR', 'POSCAR')
def generate(self): m = self.m coordination = self.phontsAtoms() content0 = "species %d\n" % (len(m.elements)) + m.phontsmasses + """ D3_cutoff %f kpoints %s 1 delta 0.005 numerical_2der T numerical_3der T iter_steps 3 pdos 0. 70. 200 10. temp 60. 400. 10 AbInitio T F FP_interface LAMMPS #phonons_only T Lattice 1.0 %s end """ % (m.shengcut, m.toString(m.kpoints), coordination) tl.write(content0, 'phonons_input.dat') tl.passthru(config.phonts) # generate many displacement files tl.mkdir('lammps') tl.cd('lammps') content = "units %s\n" % m.units content += """atom_style charge dimension 3 boundary p p p read_data GENERIC %s %s neighbor 1.1 bin neigh_modify every 1 delay 1 check yes dump 1 all custom 1 *.dump id fx fy fz dump_modify 1 format "%%d %%30.20f %%30.20f %%30.20f" dump_modify 1 sort id run 0 """ % (m.masses, m.potential) tl.shell_exec("mv ../*.str .") strs = tl.shell_exec("ls *.str").split("\n") for str in strs: dir = str.replace("str", "dir") tl.mkdir(dir) tl.write(content.replace("GENERIC", str), dir + "/in") tl.mv(str, "%s/%s" % (dir, str)) tl.cd(dir) tl.passthru(config.lammps + " <in >out.dat") tl.cd('..') dirs = tl.shell_exec("ls |grep dir").split("\n") for dir in dirs: print(dir) tl.cp(dir + "/0.dump", "../" + dir.replace("dir", "out")) tl.cp("1.0000.dir/out.dat", "../1.0000.out") tl.cd('..') content0 = content0.replace('AbInitio T F', 'AbInitio F T') tl.write(content0, 'phonons_input.dat') tl.passthru(config.phonts)
def prepareBand(self): tl.mkcd('band') # run vasp tl.cp('../POSCAR', '.') self.getVaspRun_vasp() # cp('/home1/xggong/zhouy/tcscripts/sis/ # sis1.1/0/secondorder/dirs/dir_POSCAR-002/EIGENVAL','.') # cp('/home1/xggong/zhouy/tcscripts/ # sis/sis1.1/0/secondorder/dirs/dir_POSCAR-002/OUTCAR','.') tl.cd('..')
def optimize(self): mkcd('optimize') cp('../minimize/POSCAR', '.') atoms = io.read('POSCAR') for i in range(100): dir = "%i" % i mkcd(dir) writevasp(atoms) forces, stress, energy = self.energyForce() pos = atoms.get_scaled_positions() pos += forces * 0.01
def run(self): m = self.m dir0 = 'minimize' atoms = m.dump2POSCAR('%s/range' % dir0) tl.cp("POSCAR", "POSCAR_minimize") cell = atoms.get_cell() r = np.arange(1.0, 0.5, -0.01) * cell[2][2] for i, lz in enumerate(r): dir = 'minimize%d' % i self.run_next(dir0, dir, lz) dir0 = dir
def minimize(self): if (self.m.copyN == -1): copymini = False else: copymini = True if copymini: while not tl.exists('../%d/minimize/done' % self.m.copyN): tl.sleep(30) print('copymini') tl.cp('../%d/minimize' % self.m.copyN, '.') else: self.creatmini()
def runSPOSCAR(self): m = self.m maindir = pwd() file = "SPOSCAR" dir = "dir_" + file mkdir(dir) cp(file, dir + '/POSCAR') cd(dir) if m.engine == "vasp": self.getVaspRun_vasp() if m.engine == "lammps": self.getVaspRun_lammps() cd(maindir)
def sheng(self): self.writeFC() m = self.m from aces.runners.shengbte import runner as shengbte a = shengbte(m) tl.mkcd('SHENG') tl.cp('../FORCE_CONSTANTS_2ND', '.') tl.cp('../FORCE_CONSTANTS_3RD', '.') a.getControl() # Thermal conductivity calculation print("START SHENGBTE...") # passthru(config.mpirun+" %s "%m.cores+config.shengbte) tl.passthru(config.shengbte)
def generate(self): m = self.m self.minimizePOSCAR() a = time.time() self.generate_supercells() tl.debug('generate_supercells:%f s' % (time.time() - a)) tl.shell_exec("rm *-*") tl.cp("SPOSCAR", "POSCAR001") a = time.time() files = ['POSCAR001'] self.getvasprun(files) tl.debug('getvasprun:%f s' % (time.time() - a)) a = time.time() self.force_constant() tl.debug('force_constant:%f s' % (time.time() - a)) if m.phofc: return self self.postp()
def getVaspRun_vasp(self): self.writeINCAR() m = self.m writePOTCAR(m, m.elements) if (m.kpointspath): cp(m.kpointspath, "KPOINTS") else: from aces.io.vasp import writeKPOINTS writeKPOINTS(m.ekpoints) if 'jm' in self.__dict__: if not m.th: path = pwd() if m.queue == "q3.4": pb = pbs( queue=m.queue, nodes=12, procs=1, disp=m.pbsname, path=path, content=config.mpirun + " 12 " + config.vasp + ' >log.out') else: pb = pbs( queue=m.queue, nodes=1, procs=12, disp=m.pbsname, path=path, content=config.mpirun + " 12 " + config.vasp + ' >log.out') else: path = pwd() pb = th(disp=m.pbsname, path=path) self.jm.reg(pb) else: shell_exec(config.mpirun + " %s " % m.cores + config.vasp + ' >log.out')
def prepareet(self): fermi = self.get_fermi() nelect = self.get_nelect() tl.mkcd('et') tl.cp('../band/SYMMETRY', '.') tl.cp('../band/EIGENVAL', '.') tl.cp('../band/POSCAR', '.') lpfac = 5 if(self.m.soc): lpfac = 20 s = """VASP 0 1 0 0.0 %f 0.0005 0.40 %f CALC %d BOLTZ .15 800. 50. 0. """ % (fermi, nelect, lpfac) # Format of DOS # iskip (not presently used) idebug setgap shiftgap # Fermilevel (eV, please note), energygrid (Ry),\ # energy span around Fermilevel (Ry), No of electrons # CALC (calculate expansion coeff), NOCALC read from file # lpfac, number of latt-points per k-point # run mode (only BOLTZ is supported) # (efcut) energy range of chemical potential (Ry) # Tmax, temperature grid # energyrange of bands given individual \ # DOS output sig_xxx and dos_xxx (xxx is band number) tl.write(s, "et.intrans") tl.cd('..')
def getVaspRun_vasp(self): self.writeINCAR() m = self.m writePOTCAR(m, m.elements) if (m.kpointspath): cp(m.kpointspath, "KPOINTS") else: from aces.io.vasp import writeKPOINTS writeKPOINTS(m.ekpoints) if 'jm' in self.__dict__: if not m.th: path = pwd() if m.queue == "q3.4": pb = pbs(queue=m.queue, nodes=12, procs=1, disp=m.pbsname, path=path, content=config.mpirun + " 12 " + config.vasp + ' >log.out') else: pb = pbs(queue=m.queue, nodes=1, procs=12, disp=m.pbsname, path=path, content=config.mpirun + " 12 " + config.vasp + ' >log.out') else: path = pwd() pb = th(disp=m.pbsname, path=path) self.jm.reg(pb) else: shell_exec(config.mpirun + " %s " % m.cores + config.vasp + ' >log.out')
def getV(self): if not exists('groupv'): mkdir('groupv') cd('groupv') cp('../FORCE_CONSTANTS', '.') cp('../POSCAR', '.') cp('../disp.yaml', '.') self.generate_vconf() passthru(config.phonopy + "--tolerance=1e-4 v.conf") self.drawV() cd('..')
def vfc(self): c = self.m.correlation_supercell q = [] u = [int(x / 2) * 2 + 1 for x in c] for i in range(u[0]): for j in range(u[1]): for k in range(u[2]): b = np.array([ float(i - c[0] / 2) / c[0], float(j - c[1] / 2) / c[1], float(k - c[2] / 2) / c[2] ]) q.append(b) m = self.m tl.mkcd('vqpoints') tl.cp('../FORCE_CONSTANTS', '.') tl.cp('../disp.yaml', '.') tl.cp('../POSCAR', '.') Prun(m).getvqpoints(q) tl.cd('..')
def pSecond(self): cp('../POSCAR', '.') self.generate_supercells() files = shell_exec("ls *-*").split('\n') assert len(files) > 0 self.getvasprun(files)
def generate(self): tl.cp('minimize/POSCAR', '.') self.getVaspRun_vasp()
def generate(self): tl.cp('minimize/CONTCAR', 'POSCAR') self.prepareBand() self.prepareet() self.runet()
def pSheng(self): mkdir('SHENG') cd('SHENG') cp('../secondorder/FORCE_CONSTANTS', 'FORCE_CONSTANTS_2ND') cp('../thirdorder/FORCE_CONSTANTS_3RD', '.') self.getControl()
def third(self): mkdir('thirdorder') cd('thirdorder') cp('../POSCAR', '.') self.generate_supercells3()
def minimize_vasp(m): npar = 1 for i in range(1, int(np.sqrt(m.cores)) + 1): if m.cores % i == 0: npar = i if m.ispin: ispin = "ISPIN=2" else: ispin = "" if m.soc: soc = "LSORBIT=T" else: soc = "" if m.isym: sym = "ISYM = 1" else: sym = "ISYM = 0" s = """SYSTEM = - local optimisation PREC = high ENCUT=%f EDIFF = 1e-8 IBRION = 2 NSW=100 ISIF = 3 ISMEAR = 0 ; SIGMA = 0.1 POTIM=0.01 ISTART = 0 LWAVE = FALSE LCHARG = FALSE EDIFFG = -0.01 LREAL=FALSE NPAR = %d %s %s %s """ % (m.ecut, npar, sym, ispin, soc) if m.vdw: s += """\nIVDW = 1 VDW_RADIUS = 50 VDW_S6 = 0.75 VDW_SR = 1.00 VDW_SCALING = 0.75 VDW_D = 20.0 VDW_C6 = 63.540 31.50 VDW_R0 = 1.898 1.892 """ tl.write(s, 'INCAR') m.structure() from aces.io.vasp import writePOTCAR writePOTCAR(m, m.elements) s = """A 0 Monkhorst-Pack %s 0 0 0 """ % ' '.join(map(str, m.mekpoints)) tl.write(s, 'KPOINTS') vasp = [config.vasp, config.vasp_2d][m.d2] if m.useMini: tl.shell_exec(config.mpirun + " %s " % m.cores + vasp + ' >log.out') else: tl.cp('POSCAR', 'CONTCAR')