def test(tmpdir, path): from numpy import abs from pylada.crystal import Structure from pylada.vasp import Vasp from pylada.vasp.relax import epitaxial from pylada import default_comm structure = Structure([[0, 0.5, 0.5], [0.5, 0, 0.5], [0.5, 0.5, 0]], scale=5.55, name='has a name')\ .add_atom(0, 0, 0, "Si")\ .add_atom(0.25, 0.25, 0.25, "Si") vasp = Vasp() vasp.kpoints = "Automatic generation\n0\nMonkhorst\n2 2 2\n0 0 0" vasp.prec = "accurate" vasp.ediff = 1e-5 vasp.encut = 1.4 vasp.ismear = "fermi" vasp.sigma = 0.01 vasp.relaxation = "volume" vasp.add_specie = "Si", "{0}/pseudos/Si".format(path) result = epitaxial(vasp, structure, outdir=str(tmpdir), epiconv=1e-5, comm=default_comm) assert result.success assert abs(result.stress[2, 2]) < 1.0
def test(tmpdir, path): from numpy import abs from pylada.crystal import Structure from pylada.vasp import Vasp from pylada.vasp.emass import effective_mass, EMass from pylada import default_comm structure = Structure([[0, 0.5, 0.5], [0.5, 0, 0.5], [0.5, 0.5, 0]], scale=5.55, name='has a name')\ .add_atom(0, 0, 0, "Si")\ .add_atom(0.25, 0.25, 0.25, "Si") vasp = Vasp() vasp.kpoints = "Automatic generation\n0\nMonkhorst\n2 2 2\n0 0 0" vasp.prec = "accurate" vasp.ediff = 25e-5 vasp.encut = 1.4 vasp.ismear = "fermi" vasp.sigma = 0.01 vasp.relaxation = "volume" vasp.add_specie = "Si", "{0}/pseudos/Si".format(path) emass = EMass(copy=vasp) assert abs(emass.encut - 1.4) < 1e-8 assert abs(emass.ediff - 25e-5) < 1e-10 result = effective_mass(vasp, structure, outdir=str(tmpdir), comm=default_comm, emassparams={'ediff': 1e-8}) result.emass assert result.success result = emass(structure, outdir=str(tmpdir), comm=default_comm, emassparams={'ediff': 1e-8}) assert result.success
def test(path): from shutil import rmtree from tempfile import mkdtemp from pylada.crystal import Structure from pylada.vasp import Vasp from epirelax import epitaxial from pylada import default_comm structure = Structure([[0, 0.5, 0.5],[0.5, 0, 0.5], [0.5, 0.5, 0]], scale=5.55, name='has a name')\ .add_atom(0,0,0, "Si")\ .add_atom(0.25,0.25,0.25, "Si") vasp = Vasp() vasp.kpoints = "Automatic generation\n0\nMonkhorst\n2 2 2\n0 0 0" vasp.prec = "accurate" vasp.ediff = 1e-5 vasp.encut = 1.4 vasp.ismear = "fermi" vasp.sigma = 0.01 vasp.relaxation = "volume" vasp.add_specie = "Si", "{0}/pseudos/Si".format(path) directory = mkdtemp() try: result = epitaxial(vasp, structure, outdir=directory, epiconv=1e-4, comm=default_comm) assert result.success finally: rmtree(directory) pass
def test(path): from os import makedirs from os.path import exists from shutil import rmtree from tempfile import mkdtemp from pylada.crystal import Structure from pylada.vasp import Vasp from pylada import default_comm structure = Structure([[0, 0.5, 0.5],[0.5, 0, 0.5], [0.5, 0.5, 0]], scale=5.43, name='has a name')\ .add_atom(0,0,0, "Si")\ .add_atom(0.25,0.25,0.25, "Si") vasp = Vasp() vasp.kpoints = "Automatic generation\n0\nMonkhorst\n2 2 2\n0 0 0" vasp.prec = "accurate" vasp.ediff = 1e-5 vasp.encut = 1 vasp.ismear = "fermi" vasp.sigma = 0.01 vasp.relaxation = "volume" vasp.add_specie = "Si", "{0}/pseudos/Si".format(path) directory = mkdtemp() if directory == '/tmp/test' or directory == '/tmp/test/': if exists(directory): rmtree(directory) makedirs(directory) try: result = vasp(structure, outdir=directory, comm=default_comm) assert result.success finally: if directory != '/tmp/test' and directory != '/tmp/test/': rmtree(directory)
def test(tmpdir, path): from numpy import all, abs from quantities import kbar, eV, angstrom from pylada.crystal import Structure from pylada.vasp import Vasp from pylada.vasp.relax import Relax from pylada import default_comm structure = Structure([[0, 0.5, 0.5], [0.5, 0, 0.5], [0.5, 0.5, 0]], scale=5.43, name='has a name')\ .add_atom(0, 0, 0, "Si")\ .add_atom(0.25, 0.25, 0.25, "Si") vasp = Vasp() vasp.kpoints = "Automatic generation\n0\nMonkhorst\n2 2 2\n0 0 0" vasp.prec = "accurate" vasp.ediff = 1e-5 vasp.encut = 1 vasp.ismear = "fermi" vasp.sigma = 0.01 vasp.relaxation = "volume" vasp.add_specie = "Si", "{0}/pseudos/Si".format(path) functional = Relax(copy=vasp) assert abs(functional.ediff - 1e-5) < 1e-8 assert functional.prec == 'Accurate' result = functional(structure, outdir=str(tmpdir), comm=default_comm, relaxation="volume ionic cellshape") assert result.success assert result.stress.units == kbar and all(abs(result.stress) < 1e0) assert result.forces.units == eV / angstrom and all(abs(result.forces) < 1e-1) assert result.total_energy.units == eV and all( abs(result.total_energy + 10.668652 * eV) < 1e-2)
def test_incar(): from shutil import rmtree from tempfile import mkdtemp from os.path import join, dirname from quantities import eV from pylada.vasp import Vasp, read_incar from pylada.crystal import Structure structure = Structure([[0, 0.5, 0.5],[0.5, 0, 0.5], [0.5, 0.5, 0]], scale=5.43, name='has a name')\ .add_atom(0,0,0, "Si")\ .add_atom(0.25,0.25,0.25, "Si") vasp = Vasp() vasp.kpoints = "Automatic generation\n0\nMonkhorst\n2 2 2\n0 0 0" vasp.precision = "accurate" vasp.ediff = 1e-5 vasp.encut = 1 vasp.ismear = "metal" vasp.sigma = 0.06 vasp.relaxation = "volume" vasp.add_specie = "Si", join(dirname(__file__), 'pseudos', 'Si') directory = mkdtemp() try: vasp.write_incar(path=join(directory, 'INCAR'), structure=structure) other = read_incar(join(directory, 'INCAR')) assert abs(other.ediff - 1e-5) < 1e-8 assert abs(other.encut - 245.345) < 1e-8 assert abs(other.sigma - 0.06 * eV) < 1e-8 assert other.ibrion == 2 assert other.icharg == 'atomic' assert other.isif == 7 assert other.ismear == 'metal' assert other.istart == 'scratch' assert other.lcharg == False assert other.nsw == 50 assert other.relaxation == 'volume' assert other.system == 'has a name' with open(join(directory, 'INCAR'), 'a') as file: file.write('\nSOMETHing = 0.5\n') other = read_incar(join(directory, 'INCAR')) assert abs(other.ediff - 1e-5) < 1e-8 assert abs(other.encut - 245.345) < 1e-8 assert abs(other.sigma - 0.06 * eV) < 1e-8 assert other.ibrion == 2 assert other.icharg == 'atomic' assert other.isif == 7 assert other.ismear == 'metal' assert other.istart == 'scratch' assert other.lcharg == False assert other.nsw == 50 assert other.relaxation == 'volume' assert other.system == 'has a name' assert 'something' in other._input assert isinstance(other.something, float) assert abs(other.something - 0.5) < 1e-8 finally: rmtree(directory) pass
def test(path): from shutil import rmtree from tempfile import mkdtemp from os.path import join from quantities import eV from pylada.vasp import Vasp, read_incar from pylada.crystal import Structure structure = Structure([[0, 0.5, 0.5],[0.5, 0, 0.5], [0.5, 0.5, 0]], scale=5.43, name='has a name')\ .add_atom(0,0,0, "Si")\ .add_atom(0.25,0.25,0.25, "Si") vasp = Vasp() vasp.kpoints = "Automatic generation\n0\nMonkhorst\n2 2 2\n0 0 0" vasp.precision = "accurate" vasp.ediff = 1e-5 vasp.encut = 1 vasp.ismear = "metal" vasp.sigma = 0.06 vasp.relaxation = "volume" vasp.add_specie = "Si", "{0}/pseudos/Si".format(path) directory = mkdtemp() try: vasp.write_incar(path=join(directory, 'INCAR'), structure=structure) other = read_incar(join(directory, 'INCAR')) assert abs(other.ediff - 1e-5) < 1e-8 assert abs(other.encut - 245.345) < 1e-8 assert abs(other.sigma - 0.06 * eV) < 1e-8 assert other.ibrion == 2 assert other.icharg == 'atomic' assert other.isif == 7 assert other.ismear == 'metal' assert other.istart == 'scratch' assert other.lcharg == False assert other.nsw == 50 assert other.relaxation == 'volume' assert other.system == 'has a name' with open(join(directory, 'INCAR'), 'a') as file: file.write('\nSOMETHing = 0.5\n') other = read_incar(join(directory, 'INCAR')) assert abs(other.ediff - 1e-5) < 1e-8 assert abs(other.encut - 245.345) < 1e-8 assert abs(other.sigma - 0.06 * eV) < 1e-8 assert other.ibrion == 2 assert other.icharg == 'atomic' assert other.isif == 7 assert other.ismear == 'metal' assert other.istart == 'scratch' assert other.lcharg == False assert other.nsw == 50 assert other.relaxation == 'volume' assert other.system == 'has a name' assert 'something' in other._input assert isinstance(other.something, float) assert abs(other.something - 0.5) < 1e-8 finally: rmtree(directory) pass
def vasp(): from os.path import join, dirname from pylada.vasp import Vasp vasp = Vasp() vasp.kpoints = "Automatic generation\n0\nMonkhorst\n2 2 2\n0 0 0" vasp.precision = "accurate" vasp.ediff = 1e-5 vasp.encut = 1 vasp.ismear = "metal" vasp.sigma = 0.06 vasp.relaxation = "volume" vasp.add_specie = "Si", join(dirname(__file__), 'pseudos', 'Si') return vasp
def test(path): from shutil import rmtree from os.path import exists from os import makedirs from tempfile import mkdtemp from numpy import abs from pylada.crystal import Structure from pylada.vasp import Vasp from pylada.vasp.emass import effective_mass, EMass from pylada import default_comm structure = Structure([[0, 0.5, 0.5],[0.5, 0, 0.5], [0.5, 0.5, 0]], scale=5.55, name='has a name')\ .add_atom(0,0,0, "Si")\ .add_atom(0.25,0.25,0.25, "Si") vasp = Vasp() vasp.kpoints = "Automatic generation\n0\nMonkhorst\n2 2 2\n0 0 0" vasp.prec = "accurate" vasp.ediff = 25e-5 vasp.encut = 1.4 vasp.ismear = "fermi" vasp.sigma = 0.01 vasp.relaxation = "volume" vasp.add_specie = "Si", "{0}/pseudos/Si".format(path) emass = EMass(copy=vasp) assert abs(emass.encut - 1.4) < 1e-8 assert abs(emass.ediff - 25e-5) < 1e-10 directory = "/tmp/test" #mkdtemp() if exists(directory) and directory == '/tmp/test': rmtree(directory) if not exists(directory): makedirs(directory) try: result = effective_mass(vasp, structure, outdir=directory, comm=default_comm, emassparams={'ediff': 1e-8}) result.emass assert result.success result = emass(structure, outdir=directory, comm=default_comm, emassparams={'ediff': 1e-8}) assert result.success finally: if directory != '/tmp/test': rmtree(directory) pass
def test(path): from glob import glob from os.path import join from shutil import rmtree from tempfile import mkdtemp from numpy import all, abs from quantities import kbar, eV, angstrom from pylada.crystal import Structure from pylada.vasp import Vasp from pylada.vasp.relax import Relax from pylada import default_comm structure = Structure([[0, 0.5, 0.5],[0.5, 0, 0.5], [0.5, 0.5, 0]], scale=5.43, name='has a name')\ .add_atom(0,0,0, "Si")\ .add_atom(0.25,0.25,0.25, "Si") vasp = Vasp() vasp.kpoints = "Automatic generation\n0\nMonkhorst\n2 2 2\n0 0 0" vasp.prec = "accurate" vasp.ediff = 1e-5 vasp.encut = 1 vasp.ismear = "fermi" vasp.sigma = 0.01 vasp.relaxation = "volume" vasp.add_specie = "Si", "{0}/pseudos/Si".format(path) directory = mkdtemp() try: functional = Relax(copy=vasp) assert abs(functional.ediff - 1e-5) < 1e-8 assert functional.prec == 'Accurate' result = functional(structure, outdir=directory, comm=default_comm, relaxation="volume ionic cellshape") assert result.success def sortme(a): return int(a.split('/')[-1]) dirs = sorted(glob(join(join(directory, '*'), '[0-9]')), key=sortme) # for previous, current in zip(dirs, dirs[1:]): # assert len(check_output(['diff', join(previous, 'CONTCAR'), join(current, 'POSCAR')])) == 0 # assert len(check_output(['diff', join(current, 'CONTCAR'), join(directory, 'POSCAR')])) == 0 assert result.stress.units == kbar and all(abs(result.stress) < 1e0) assert result.forces.units == eV/angstrom and all(abs(result.forces) < 1e-1) assert result.total_energy.units == eV and all(abs(result.total_energy + 10.668652*eV) < 1e-2) finally: if directory != '/tmp/test/relax': rmtree(directory) pass
def test(tmpdir, path): from pylada.crystal import Structure from pylada.vasp import Vasp from pylada import default_comm structure = Structure([[0, 0.5, 0.5], [0.5, 0, 0.5], [0.5, 0.5, 0]], scale=5.43, name='has a name')\ .add_atom(0, 0, 0, "Si")\ .add_atom(0.25, 0.25, 0.25, "Si") vasp = Vasp() vasp.kpoints = "Automatic generation\n0\nMonkhorst\n2 2 2\n0 0 0" vasp.prec = "accurate" vasp.ediff = 1e-5 vasp.encut = 1 vasp.ismear = "fermi" vasp.sigma = 0.01 vasp.relaxation = "volume" vasp.add_specie = "Si", "{0}/pseudos/Si".format(path) result = vasp(structure, outdir=str(tmpdir), comm=default_comm) assert result.success
def test(tmpdir, path): from numpy import all, abs from quantities import kbar, eV, angstrom from pylada.crystal import Structure from pylada.vasp import Vasp from pylada.vasp.relax import Relax from pylada import default_comm structure = Structure([[0, 0.5, 0.5], [0.5, 0, 0.5], [0.5, 0.5, 0]], scale=5.43, name='has a name')\ .add_atom(0, 0, 0, "Si")\ .add_atom(0.25, 0.25, 0.25, "Si") vasp = Vasp() vasp.kpoints = "Automatic generation\n0\nMonkhorst\n2 2 2\n0 0 0" vasp.prec = "accurate" vasp.ediff = 1e-5 vasp.encut = 1 vasp.ismear = "fermi" vasp.sigma = 0.01 vasp.relaxation = "volume" vasp.add_specie = "Si", "{0}/pseudos/Si".format(path) functional = Relax(copy=vasp) assert abs(functional.ediff - 1e-5) < 1e-8 assert functional.prec == 'Accurate' result = functional(structure, outdir=str(tmpdir), comm=default_comm, relaxation="volume ionic cellshape") assert result.success assert result.stress.units == kbar and all(abs(result.stress) < 1e0) assert result.forces.units == eV / angstrom and all( abs(result.forces) < 1e-1) assert result.total_energy.units == eV and all( abs(result.total_energy + 10.668652 * eV) < 1e-2)
def test_ediff(): from pickle import loads, dumps from pylada.vasp import Vasp from pylada.crystal import Structure a = Vasp() u = 0.25 x, y = u, 0.25-u structure = Structure([[0,0.5,0.5],[0.5,0,0.5],[0.5,0.5,0]]) \ .add_atom(5.000000e-01, 5.000000e-01, 5.000000e-01, "Mg") \ .add_atom(5.000000e-01, 2.500000e-01, 2.500000e-01, "Mg") \ .add_atom(2.500000e-01, 5.000000e-01, 2.500000e-01, "Mg") \ .add_atom(2.500000e-01, 2.500000e-01, 5.000000e-01, "Mg") \ .add_atom(8.750000e-01, 8.750000e-01, 8.750000e-01, "Al") \ .add_atom(1.250000e-01, 1.250000e-01, 1.250000e-01, "Al") \ .add_atom( x, x, x, "O") \ .add_atom( x, y, y, "O") \ .add_atom( y, x, y, "O") \ .add_atom( y, y, x, "O") \ .add_atom( -x, -x, -x, "O") \ .add_atom( -x, -y, -y, "O") \ .add_atom( -y, -x, -y, "O") \ .add_atom( -y, -y, -x, "O") N = float(len(structure)) o = a._input['ediff'] d = {'Ediff': o.__class__} assert a.ediff is None assert a.ediff_per_atom is None assert o.output_map() is None assert eval(repr(o), d).output_map() is None assert eval(repr(o), d).keyword == 'ediff' assert loads(dumps(o)).output_map() is None a.ediff_per_atom = 1e-5 a.ediff = 2e-4 assert abs(a.ediff - 2e-4) < 1e-8 assert a.ediff_per_atom is None assert abs(float(o.output_map(structure=structure)['ediff']) - a.ediff) < a.ediff * 1e-2 assert abs(float(eval(repr(o), d).output_map(structure=structure)['ediff']) - a.ediff) < a.ediff * 1e-2 assert abs(float(loads(dumps(o)).output_map(structure=structure)['ediff']) - a.ediff) < a.ediff * 1e-2 a.ediff = -1 assert abs(a.ediff) < 1e-8 assert abs(float(o.output_map(structure=structure)['ediff'])) < 1e-8 a = Vasp() o = a._input['ediff_per_atom'] d = {'EdiffPerAtom': o.__class__} assert a.ediff_per_atom is None assert a.ediff is None assert o.output_map() is None assert eval(repr(o), d).output_map() is None assert eval(repr(o), d).keyword == 'ediff' assert loads(dumps(o)).output_map() is None a.ediff = 1e-5 a.ediff_per_atom = 2e-4 assert abs(a.ediff_per_atom - 2e-4) < 1e-8 assert a.ediff is None assert abs(float(o.output_map(structure=structure)['ediff']) - 2e-4 * N) < 2e-4 * 1e-2 assert abs(float(eval(repr(o), d).output_map(structure=structure)['ediff']) - 2e-4 * N) < 2e-4 * 1e-2 assert abs(float(loads(dumps(o)).output_map(structure=structure)['ediff']) - 2e-4 * N) < 2e-4 * 1e-2 a.ediff = 1e-4 a.ediff_per_atom = None assert abs(a.ediff-1e-4) < 1e-8 assert a.ediff_per_atom is None a.ediff_per_atom = 1e-4 a.ediff = None assert abs(a.ediff_per_atom-1e-4) < 1e-8 assert a.ediff is None
return "\n0\nGamma\n%2i %2i %2i\n 0. 0. 0.\n" %(n1,n2,n3) ############### setting up the functional vasp=Vasp() vasp.program = '/home/vstevano/bin/vasp' pseudoDir = '/home/vstevano/software/pseudos' vasp.add_specie = "In", pseudoDir + "/In" vasp.add_specie = "O", pseudoDir + "/O" vasp.prec = "accurate" vasp.encut = 340. vasp.ismear = 0 vasp.sigma = 0.05 vasp.ediff = 1.0e-6 vasp.ediffg = -0.01 vasp.convergence= 1.0e-6 vasp.nsw = 1 vasp.lwave = True vasp.lorbit = 10 vasp.lplane = True vasp.addgrid = True vasp.npar = 8 vasp.isym = 0 vasp.lcharg = True vasp.lwave = True vasp.lmaxmix = 4 vasp.loptics = False vasp.lpead = False vasp.algo = "Normal"
def test(path): from shutil import rmtree from tempfile import mkdtemp from os.path import join from quantities import eV from pylada.vasp import Vasp, read_incar from pylada.crystal import Structure structure = ( Structure([[0, 0.5, 0.5], [0.5, 0, 0.5], [0.5, 0.5, 0]], scale=5.43, name="has a name") .add_atom(0, 0, 0, "Si") .add_atom(0.25, 0.25, 0.25, "Si") ) vasp = Vasp() vasp.kpoints = "Automatic generation\n0\nMonkhorst\n2 2 2\n0 0 0" vasp.precision = "accurate" vasp.ediff = 1e-5 vasp.encut = 1 vasp.ismear = "metal" vasp.sigma = 0.06 vasp.relaxation = "volume" vasp.add_specie = "Si", "{0}/pseudos/Si".format(path) directory = mkdtemp() try: vasp.write_incar(path=join(directory, "INCAR"), structure=structure) other = read_incar(join(directory, "INCAR")) assert abs(other.ediff - 1e-5) < 1e-8 assert abs(other.encut - 245.345) < 1e-8 assert abs(other.sigma - 0.06 * eV) < 1e-8 assert other.ibrion == 2 assert other.icharg == "atomic" assert other.isif == 7 assert other.ismear == "metal" assert other.istart == "scratch" assert other.lcharg == False assert other.nsw == 50 assert other.relaxation == "volume" assert other.system == "has a name" with open(join(directory, "INCAR"), "a") as file: file.write("\nSOMETHing = 0.5\n") other = read_incar(join(directory, "INCAR")) assert abs(other.ediff - 1e-5) < 1e-8 assert abs(other.encut - 245.345) < 1e-8 assert abs(other.sigma - 0.06 * eV) < 1e-8 assert other.ibrion == 2 assert other.icharg == "atomic" assert other.isif == 7 assert other.ismear == "metal" assert other.istart == "scratch" assert other.lcharg == False assert other.nsw == 50 assert other.relaxation == "volume" assert other.system == "has a name" assert "something" in other._input assert isinstance(other.something, float) assert abs(other.something - 0.5) < 1e-8 finally: rmtree(directory) pass