def getVaspRun_lammps(m): # generate structure rot = m.POSCAR2data() # generate in content = get_lammps_script(m) tl.write(content, "in") # generate dump.force tl.shell_exec(config.lammps + " < in >log.out") d, p, d1, p1 = rot # generate vasprun.xml f = open('dump.force') for i in range(9): f.next() forces = "" poses = "" for line in f: line = line.split() force = np.array(map(float, line[1:4])) pos = np.array(map(float, line[4:8])) force = RotateVector(force, d1, -p1) force = RotateVector(force, d, -p) forces += "<v> %f %f %f </v>\n" % tuple(force) poses += "<v> %f %f %f </v>\n" % tuple(pos) vasprun = '<root><calculation><varray name="forces" >\n' vasprun += forces vasprun += '</varray>\n<structure><varray name="positions">\n' + poses vasprun += '</varray></structure></calculation></root>\n' tl.write(vasprun, 'vasprun.xml') f.close()
def getVaspRun_vasp(self): m = self.m if m.isym: sym = "ISYM = 1" else: sym = "ISYM = 0" if m.ispin: spin = "ISPIN =2" else: spin = "" s = """SYSTEM=calculate energy PREC = High IBRION = 8 ENCUT = %f EDIFF = 1.0e-8 ISMEAR = %d; SIGMA = 0.01 IALGO = 38 LREAL = .FALSE. ADDGRID = .TRUE. LWAVE = .FALSE. LCHARG = .FALSE. %s %s """ % (self.m.ecut, m.ismear, sym, spin) s = s.replace(r'^\s+', '') tl.write(s, 'INCAR') m = self.m m.writePOTCAR() s = """A 0 Monkhorst-Pack %s 0 0 0 """ % ' '.join(map(str, m.ekpoints)) s = s.replace(r'^\s+', '') tl.write(s, 'KPOINTS') if 'jm' in self.__dict__: from aces.jobManager import pbs path = tl.pwd() if m.queue == "q3.4": pb = pbs(queue=m.queue, nodes=12, procs=4, disp=m.pbsname, path=path, content=config.mpirun + " 48 " + config.vasp + ' >log.out') else: pb = pbs(queue=m.queue, nodes=4, procs=12, disp=m.pbsname, path=path, content=config.mpirun + " 48 " + config.vasp + ' >log.out') self.jm.reg(pb) else: tl.shell_exec(config.mpirun + " %s " % m.cores + config.vasp + ' >log.out')
def get_bandplot(self): tl.write("""diam.freq 0 600 band.plot band.ps 0.0 50.0 0.0""", "plotband.in") tl.shell_exec(config.espresso + "bin/plotband.x < plotband.in >plotband.out")
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 run(self): __console__ = sys.stdout f = open('input', 'w', 0) sys.stdout = f self.generate() sys.stdout = __console__ f.close() cmd = self.runcmd() shell_exec(cmd)
def getpedos(self): tl.write("""&projwfc outdir='./' prefix='diam' filpdos='diam.pedos', Emin=-10.0, Emax=10.0, DeltaE=0.1,degauss=0.0025,ngauss=-99 / """, "pedos.in") projwfc = self.getx('projwfc') tl.shell_exec(projwfc + " < pedos.in >pedos.out")
def run0(self): __console__ = sys.stdout f = open('input', 'w', 0) sys.stdout = f self.generate() sys.stdout = __console__ f.close() cmd = self.runcmd() shell_exec(cmd)
def getpedos(self): tl.write( """&projwfc outdir='./' prefix='diam' filpdos='diam.pedos', Emin=-10.0, Emax=10.0, DeltaE=0.1,degauss=0.0025,ngauss=-99 / """, "pedos.in") projwfc = self.getx('projwfc') tl.shell_exec(projwfc + " < pedos.in >pedos.out")
def generate(self): # self.minimizePOSCAR() tl.shell_exec('cp minimize/POSCAR .') self.get_almin() self.displacements() files, self.NDATA = self.getfiles() self.getvasprun(files) self.getdispforce(files) self.get_fitin() self.getfcs() self.get_anphonin() self.run_anphonin()
def getedos(self): fermi = self.getfermi() tl.write("""&DOS outdir='./' prefix='diam' fildos='diam.edos', Emin=%f, Emax=%f, DeltaE=0.01,degauss=0.005,ngauss=1 / """ % (-4.0 + fermi, 4.0 + fermi), "edos.in") dos = self.getx("dos") tl.shell_exec(dos + " < edos.in >edos.out") self.drawedos()
def getVaspRun_lammps(self): m = self.m if 'jm' in self.__dict__: path = pwd() pb = pbs(queue=m.queue, nodes=1, procs=4, disp=m.pbsname, path=path, content=config.python + vasprun.__file__ + ' >log.out') self.jm.reg(pb) else: shell_exec(config.python + vasprun.__file__ + ' >log.out')
def getedos(self): fermi = self.getfermi() tl.write( """&DOS outdir='./' prefix='diam' fildos='diam.edos', Emin=%f, Emax=%f, DeltaE=0.01,degauss=0.005,ngauss=1 / """ % (-4.0 + fermi, 4.0 + fermi), "edos.in") dos = self.getx("dos") tl.shell_exec(dos + " < edos.in >edos.out") self.drawedos()
def collect(self): tl.mkdir('save') nqpt = len(tl.ls("diam.dyn*")) - 1 for iqpt in np.arange(1, nqpt + 1): label = str(iqpt) tl.shell_exec('cp diam.dyn' + str(iqpt) + ' save/diam.dyn_q' + label) if (iqpt == 1): tl.shell_exec('cp _ph0/diam.dvscf1 save/diam.dvscf_q' + label) tl.shell_exec('cp -r _ph0/diam.phsave save/') else: tl.shell_exec('cp _ph0/diam.q_' + str(iqpt) + '/diam.dvscf1 save/diam.dvscf_q' + label) tl.shell_exec('rm _ph0/diam.q_' + str(iqpt) + '/*wfc*')
def getVaspRun_lammps(self): m = self.m if 'jm' in self.__dict__: path = pwd() pb = pbs( queue=m.queue, nodes=1, procs=4, disp=m.pbsname, path=path, content=config.python + vasprun.__file__ + ' >log.out') self.jm.reg(pb) else: shell_exec(config.python + vasprun.__file__ + ' >log.out')
def get_dos(self): m = self.m amass = self.get_amass() nks = "nk1=%d,nk2= %d,nk3= %d" % tuple(m.nqf) tl.write("""&input asr='simple', dos=.true. %s flfrc='diam.fc', fldos='diam.dos', %s /""" % (amass, nks), "phdos.in") matdyn = self.getx("matdyn", pa=False) tl.shell_exec(matdyn + "< phdos.in >phdos.out") self.drawDos()
def energyForce(self): self.getVaspRun_vasp() forces = parseVasprun('forces') stress = parseVasprun('stress') c = shell_exec("grep TOTEN OUTCAR|tail -1") energy = sscanf(c, "free energy TOTEN = %f eV")[0] return forces, stress, energy
def nAtom(): # atom number */ Natomline = tl.shell_exec("cd minimize;grep atoms log.out ;") Natom = Natomline.split()[0] if (Natom.isdigit() and Natom > 0): return Natom return 0
def kappa(): kappaline = tl.shell_exec("tail -1 result.txt 2>err;") kappa = kappaline.split('=') if len(kappa) > 1: kappa = kappa[1] return kappa return 0.0
def check(self, filename='FORCE_CONSTANTS'): ref = io.read('SPOSCAR') files = shell_exec("ls dirs").split('\n') fc2 = readfc2(filename) np.set_printoptions(precision=2, suppress=True) vasprunxml = "dir_SPOSCAR/vasprun.xml" if exists(vasprunxml): vasprun = etree.iterparse(vasprunxml, tag='varray') forces0 = parseVasprun(vasprun, 'forces') print(forces0.max()) else: forces0 = 0.0 for file in files: print(file) POSCAR = 'dirs/%s/POSCAR' % file vasprunxml = "dirs/%s/vasprun.xml" % file atoms = io.read(POSCAR) u = atoms.positions - ref.positions f = -np.einsum('ijkl,jl', fc2, u) vasprun = etree.iterparse(vasprunxml, tag='varray') forces = parseVasprun(vasprun, 'forces') - forces0 print(np.abs(f).max(), "\n") print(np.abs(forces - f).max()) print(np.allclose(f, forces, atol=1e-2))
def get_outfermi(self): file = tl.ls("*.outputtrans")[0] a = tl.shell_exec("grep FermiE %s|tail -1" % file) from aces.scanf import sscanf a = sscanf(a, "FermiE: %f.")[0] print("E-fermi=" + str(a) + "Ry") return a
def fc2(self): files = shell_exec("ls dirs").split('\n') files = map(lambda x: x.replace('dir_', ''), files) # when the number of files >1000, the order is wrong ,POSCAR-001, # POSCAR-1500 ,POSCAR-159 files.sort(lambda x, y: int(x.split('-')[1]) - int(y.split('-')[1])) self.force_constant(files)
def drawdos(self): from aces.ElectronicDOS.electronicdos import ElectronicDOS doscar = ElectronicDOS() # orbital_dos = doscar.sum_ms_dos() # Create a list of each atom type to sum over. # type_list = [] # n = 0 # for i in range(len(doscar.unit_cell.atom_types)): # type_list.append([]) # for j in range(doscar.unit_cell.atom_types[i]): # type_list[i].append(n) # n += 1 # Sum dos over sets of atoms. # partial_dos = doscar.sum_site_dos(type_list,orbital_dos) dos = doscar.write_dos([doscar.tot_dos]) tl.write(dos, 'dos.txt') dos = np.loadtxt('dos.txt') f = tl.shell_exec("grep fermi OUTCAR|tail -1") from aces.scanf import sscanf f = sscanf(f, "E-fermi : %f XC(G=0):") with fig("dos.png"): pl.xlabel("Energy-Ef (eV)") pl.ylabel("DOS") pl.plot(dos[:, 0] - f, dos[:, 1], lw=2) pl.xlim([-4, 4])
def run(self): atoms = self.getsatoms() symmetry = self.getSupercell(atoms) files = tl.shell_exec( 'find dirs/dir_* -name vasprun.xml |sort -n').split('\n') if len(files) > 100: files = files[:100] pos = atoms.positions f, u = self.getForce(pos, files) F, A = self.getCsMat(f, u, symmetry) print("start compressive sensing ") B = cs(mu=self.mu, split=self.split, lam=self.lam).run(F, A) print("rebuilding IFCs ") phi = self.rebuild(B) print("writing IFCs ") v = norm(u, axis=2) u0 = v.flatten().max() fc2 = np.einsum(phi[1], [1, 0, 3, 2]) / u0 writefc2(fc2, 'csfc2') if self.NAH >= 3: a = h5py.File('fc3p.hdf5') if 'fc3' in a: del a['fc3'] a['fc3'] = phi[2] / u0 / u0 a.close() self.fc3()
def get_dos(self): m = self.m amass = self.get_amass() nks = "nk1=%d,nk2= %d,nk3= %d" % tuple(m.nqf) tl.write( """&input asr='simple', dos=.true. %s flfrc='diam.fc', fldos='diam.dos', %s /""" % (amass, nks), "phdos.in") matdyn = self.getx("matdyn", pa=False) tl.shell_exec(matdyn + "< phdos.in >phdos.out") self.drawDos()
def testwritedata(self): a=Atoms('C2',[[1,0,1],[0,1,1]]) a.set_cell([[1,0,1],[0,1,1],[0,0,1]]) d=lammpsdata(a,['C','N']) d.writedata() b=data('structure') self.assertEqual(b.headers["atoms"],2) self.assertEqual(b.headers["atom types"],2) self.assertEqual(b.title ,'C2\n') self.assertTrue(cc(b.headers["xlo xhi"],[0,sqrt(2)])) self.assertTrue(cc(b.headers["ylo yhi"],[0,sqrt(2)*sqrt(3)/2])) self.assertTrue(cc(b.headers["xy xz yz"][0:1],[sqrt(2)/2])) b.map(1,'id',2,'type',3,'x',4,'y',5,'z') atoms=b.viz(0)[2] self.assertTrue(cc(atoms,[[1,1,sqrt(2),0,0],[2,1,sqrt(2)/2,sqrt(2)*sqrt(3)/2,0]])) shell_exec('rm structure')
def nAtom(): # atom number */ Natomline = tl.shell_exec("cd minimize;grep atoms log.out ;") Natom = Natomline.split()[0] if(Natom.isdigit() and Natom > 0): return Natom return 0
def run(name): path=home(name) if not exists(path): workdir=shell_exec('pwd') cd(dirname(path)) passthru("make") cd(workdir) passthru(path)
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 testwritedata(self): a = Atoms('C2', [[1, 0, 1], [0, 1, 1]]) a.set_cell([[1, 0, 1], [0, 1, 1], [0, 0, 1]]) d = lammpsdata(a, ['C', 'N']) d.writedata() b = data('structure') self.assertEqual(b.headers["atoms"], 2) self.assertEqual(b.headers["atom types"], 2) self.assertEqual(b.title, 'C2\n') self.assertTrue(cc(b.headers["xlo xhi"], [0, sqrt(2)])) self.assertTrue(cc(b.headers["ylo yhi"], [0, sqrt(2) * sqrt(3) / 2])) self.assertTrue(cc(b.headers["xy xz yz"][0:1], [sqrt(2) / 2])) b.map(1, 'id', 2, 'type', 3, 'x', 4, 'y', 5, 'z') atoms = b.viz(0)[2] self.assertTrue( cc(atoms, [[1, 1, sqrt(2), 0, 0], [2, 1, sqrt(2) / 2, sqrt(2) * sqrt(3) / 2, 0]])) shell_exec('rm structure')
def minimize_lammps(m): f = open('input', 'w') print >> f, "units %s" % m.units print >> f, m.getatomicstyle() print >> f, "boundary p p p" print >> f, "dimension 3" m.structure() print >> f, 'read_data structure' print >> f, m.potential print >> f, "timestep %f" % m.timestep print >> f, m.masses print >> f, "thermo_style custom step pe etotal" print >> f, "thermo %d" % m.dumpRate if m.write_structure: print >> f, "write_data structure" print >> f, "dump dumpc all xyz 1CN.xyz" print >> f, "run 0" if m.metropolis: print >> f, "min_style metropolis" print >> f, "minimize 1e-12 1e-12 1000000 1000000" if m.useMini: if m.boxOpt: if m.enforceThick: print >> f, "fix 1 all box/relax x 0.0 y 0.0 nreset 1" else: print >> f, "fix 1 all box/relax iso 0.0 nreset 1" print >> f, "min_style cg" print >> f, "minimize 1e-12 1e-12 1000000 1000000" print >> f, "write_restart restart.minimize" print >> f, "dump dump1 all xyz 1 minimize.xyz" print >> f, m.dump print >> f, "dump kaka all atom 1 range" print >> f, "dump_modify kaka sort id" print >> f, "dump 1 all custom 1 dump.force id fx fy fz xs ys zs" print >> f, "dump_modify 1 format \"%d %f %f %f %f %f %f\"" print >> f, "dump_modify 1 sort id" print >> f, "run 0" f.close() tl.shell_exec(config.mpirun + " %s " % m.cores + config.lammps + " <input >log.out") m.postMini()
def get_band(self): amass = self.get_amass() m = self.m rcell = m.atoms.get_reciprocal_cell().T bp = m.bandpoints kp = [rcell.dot(bp[x]) for x in m.bandpath] bpath = [m.toString(x) for x in kp] bs = '\t101\n'.join(bpath) tl.write( """&input asr='simple', %s flfrc='diam.fc', flfrq='diam.freq', q_in_band_form=.true., / %d %s 1""" % (amass, len(m.bandpath), bs), "band.in") tl.shell_exec(config.espresso + "bin/matdyn.x < band.in >band.out") self.get_bandplot() a = np.loadtxt("band.plot") c = np.unique(a[:, 0]) c = c[0:-1] nqpoint = len(c) s = "nqpoint: %d\n" % (nqpoint) s += """npath: %d\n""" % (len(self.m.bandpath) - 1) s += "phonon: \n" for x in c: filter = (a[:, 0] == x) ys = a[filter, 1] s += "- q-position: [ 0, 0.0000000, 0.0000000 ]\n" s += " distance: %f\n" % x s += " band:\n" for i, y in enumerate(ys): s += """ - # %d frequency: %f\n""" % (i + 1, y / 33.367) s += "\n" tl.write(s, "band.yaml")
def generate(self): m = self.m self.minimizePOSCAR() self.generate_supercells() files = tl.shell_exec("ls *-*").split('\n') self.getvasprun(files) self.force_constant(files) if m.pho3bte: self.sheng() else: self.caltc() self.dumpkappa()
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 get_band(self): amass = self.get_amass() m = self.m rcell = m.atoms.get_reciprocal_cell().T bp = m.bandpoints kp = [rcell.dot(bp[x]) for x in m.bandpath] bpath = [m.toString(x) for x in kp] bs = '\t101\n'.join(bpath) tl.write("""&input asr='simple', %s flfrc='diam.fc', flfrq='diam.freq', q_in_band_form=.true., / %d %s 1""" % (amass, len(m.bandpath), bs), "band.in") tl.shell_exec(config.espresso + "bin/matdyn.x < band.in >band.out") self.get_bandplot() a = np.loadtxt("band.plot") c = np.unique(a[:, 0]) c = c[0:-1] nqpoint = len(c) s = "nqpoint: %d\n" % (nqpoint) s += """npath: %d\n""" % (len(self.m.bandpath) - 1) s += "phonon: \n" for x in c: filter = (a[:, 0] == x) ys = a[filter, 1] s += "- q-position: [ 0, 0.0000000, 0.0000000 ]\n" s += " distance: %f\n" % x s += " band:\n" for i, y in enumerate(ys): s += """ - # %d frequency: %f\n""" % (i + 1, y / 33.367) s += "\n" tl.write(s, "band.yaml")
def clean(single): if PROJHOME == '': print("error PROJHOME") # /*删除原始代码以外的文件*/ files = tl.shell_exec("cd %s;ls " % PROJHOME) deleteFiles = [] files = files.split('\n') for ls in files: if (ls in ["sub.php", "post.php", "data", "", "sub.py"]): continue # print "deleting:%s"%ls; deleteFiles.append(ls) if len(deleteFiles) > 0: print("All the files in " + str(deleteFiles) + " will be deleted.") print("Comfirm ?[y/n]", end="") sys.stdout.flush() s = tl.input() if (s != "y"): tl.exit("exit with no change.") comfirmStop(single) for ls in deleteFiles: tl.shell_exec("cd %s;rm -r %s" % (PROJHOME, ls))
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 tEnerty(): """total energy [description] Returns: [type] -- [description] """ totalEline = tl.shell_exec("cd minimize;tail -22 log.out| head -1;") a = totalEline.split() if(len(a) > 1): totalE = [1] return float(totalE) return 0.0
def clean(single): if PROJHOME == '': print("error PROJHOME") # /*删除原始代码以外的文件*/ files = tl.shell_exec("cd %s;ls " % PROJHOME) deleteFiles = [] files = files.split('\n') for ls in files: if(ls in ["sub.php", "post.php", "data", "", "sub.py"]): continue # print "deleting:%s"%ls; deleteFiles.append(ls) if len(deleteFiles) > 0: print("All the files in " + str(deleteFiles) + " will be deleted.") print("Comfirm ?[y/n]", end="") sys.stdout.flush() s = tl.input() if(s != "y"): tl.exit("exit with no change.") comfirmStop(single) for ls in deleteFiles: tl.shell_exec("cd %s;rm -r %s" % (PROJHOME, ls))
def tEnerty(): """total energy [description] Returns: [type] -- [description] """ totalEline = tl.shell_exec("cd minimize;tail -22 log.out| head -1;") a = totalEline.split() if (len(a) > 1): totalE = [1] return float(totalE) return 0.0
def getQueryInfo(workPath, pid, runTime): pid = filter(str.isdigit, str(pid)) lastline = tl.shell_exec("tail -3 %s/log.out" % workPath) qstat = tl.shell_exec("qstat %s 2>&1|tail -1 " % pid) step = lastline.split()[0] if step.isdigit(): percent = "%.1f%%" % (float(step) / runTime * 100) else: percent = "0" if(qstat.find("Unknown Job Id") >= 0): # 该任务已从任务队列中去除*/ time = "complete" if(lastline.find("builds") >= 0): status = "C" percent = "100%" else: # 异常退出*/ status = "E" else: # 正在运行或等待R&Q&C*/ time, status, queue = qstat.split()[3:6] info = tl.shell_exec("qstat -f %s 2>&1|grep nodes" % pid) info = info.split()[2] return (percent, status)
def getQueryInfo(workPath, pid, runTime): pid = filter(str.isdigit, str(pid)) lastline = tl.shell_exec("tail -3 %s/log.out" % workPath) qstat = tl.shell_exec("qstat %s 2>&1|tail -1 " % pid) step = lastline.split()[0] if step.isdigit(): percent = "%.1f%%" % (float(step) / runTime * 100) else: percent = "0" if (qstat.find("Unknown Job Id") >= 0): # 该任务已从任务队列中去除*/ time = "complete" if (lastline.find("builds") >= 0): status = "C" percent = "100%" else: # 异常退出*/ status = "E" else: # 正在运行或等待R&Q&C*/ time, status, queue = qstat.split()[3:6] info = tl.shell_exec("qstat -f %s 2>&1|grep nodes" % pid) info = info.split()[2] return (percent, status)
def tDisorder(): # disorder degree*/ now = tl.pwd() tl.cd('minimize') tl.mkcd('disorder') disorderLine = tl.shell_exec( "cp %s" % SRCHOME + "/in.disorder .;" + config.lammps + " <in.disorder 2>err 1>log;tail -1 disorder.txt 2>err;") k = disorderLine.split()[1:3] if len(k) == 1: k.append("") disorder, rd = k tl.cd(now) return (disorder, rd)
def stub(self): files = shell_exec("ls dirs").split('\n') files = map(lambda x: x.replace('dir_', ''), files) fc2 = readfc2('fc2') for file in files: ref = io.read('SPOSCAR') a = 'dirs/dir_' + str(file) atoms = io.read(a + "/POSCAR") u = atoms.positions - ref.positions f = -np.einsum('ijkl,jl', fc2, u) forces = "" for force in f: forces += "<v> %f %f %f </v>\n" % tuple(force) vasprun = '<root><calculation><varray name="forces" >\n' vasprun += forces vasprun += '</varray></calculation></root>\n' write(vasprun, a + "/vasprun.xml")
def run(self): m = self.m a = time.time() self.generate_supercells() debug('generate_supercells:%f s' % (time.time() - a)) files = shell_exec("ls *-*").split('\n') assert len(files) > 0 and not files[0] == "" # self.runSPOSCAR() a = time.time() self.getvasprun(files) debug('getvasprun:%f s' % (time.time() - a)) a = time.time() self.fc2() debug('force_constant:%f s' % (time.time() - a)) if m.phofc: return self self.postp()