Ejemplo n.º 1
0
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()
Ejemplo n.º 2
0
    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')
Ejemplo n.º 3
0
    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")
Ejemplo n.º 4
0
    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")
Ejemplo n.º 5
0
    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)
Ejemplo n.º 6
0
    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)
Ejemplo n.º 7
0
    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)
Ejemplo n.º 8
0
    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")
Ejemplo n.º 9
0
    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)
Ejemplo n.º 10
0
    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")
Ejemplo n.º 11
0
 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()
Ejemplo n.º 12
0
    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()
Ejemplo n.º 13
0
 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()
Ejemplo n.º 14
0
 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')
Ejemplo n.º 15
0
    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()
Ejemplo n.º 16
0
 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*')
Ejemplo n.º 17
0
 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')
Ejemplo n.º 18
0
 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*')
Ejemplo n.º 19
0
    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()
Ejemplo n.º 20
0
 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
Ejemplo n.º 21
0
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
Ejemplo n.º 22
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
Ejemplo n.º 23
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))
Ejemplo n.º 24
0
 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
Ejemplo n.º 25
0
 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
Ejemplo n.º 26
0
 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)
Ejemplo n.º 27
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))
Ejemplo n.º 28
0
 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])
Ejemplo n.º 29
0
 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)
Ejemplo n.º 30
0
    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()
Ejemplo n.º 31
0
    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()
Ejemplo n.º 32
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
Ejemplo n.º 33
0
	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')
Ejemplo n.º 34
0
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
Ejemplo n.º 35
0
def run(name):
	path=home(name)
	if not exists(path):
		workdir=shell_exec('pwd')
		cd(dirname(path))
		passthru("make")
		cd(workdir)
	passthru(path)
Ejemplo n.º 36
0
    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()
Ejemplo n.º 37
0
    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()
Ejemplo n.º 38
0
 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')
Ejemplo n.º 39
0
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()
Ejemplo n.º 40
0
    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")
Ejemplo n.º 41
0
 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()
Ejemplo n.º 42
0
    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')
Ejemplo n.º 43
0
    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")
Ejemplo n.º 44
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))
Ejemplo n.º 45
0
    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')
Ejemplo n.º 46
0
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
Ejemplo n.º 47
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))
Ejemplo n.º 48
0
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
Ejemplo n.º 49
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)
Ejemplo n.º 50
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)
Ejemplo n.º 51
0
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)
Ejemplo n.º 52
0
 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")
Ejemplo n.º 53
0
 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")
Ejemplo n.º 54
0
    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()
Ejemplo n.º 55
0
    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()