예제 #1
0
파일: factories.py 프로젝트: YanJordan/ase
 def calc(self, **kwargs):
     from ase.calculators.elk import ELK
     command = f'{self.executable} > elk.out'
     return ELK(command=command, species_dir=self.species_dir, **kwargs)
예제 #2
0
def test_Al_rmt():
    import os

    from ase.test import require
    from ase.build import bulk
    from ase.calculators.calculator import kpts2mp
    from ase.calculators.elk import ELK

    require('elk')

    atoms = bulk('Al', 'bcc', a=4.0)

    # save ELK_SPECIES_PATH
    ELK_SPECIES_PATH = os.environ.get('ELK_SPECIES_PATH', None)
    assert ELK_SPECIES_PATH is not None

    # find rmt of the default species
    sfile = os.path.join(os.environ['ELK_SPECIES_PATH'], 'elk.in')
    assert os.path.exists(sfile)
    slines = open(sfile, 'r').readlines()
    rmt_orig = {}
    for name in ['Al']:
        found = False
        for n, line in enumerate(slines):
            if line.find("'" + name + "'") > -1:
                begline = n - 1
        for n, line in enumerate(slines[begline:]):
            if not line.strip():  # first empty line
                found = True
                break
        assert found
        # split needed because H is defined with comments
        rmt_orig[name] = float(slines[begline + 3].split()[0].strip())

    assert rmt_orig['Al'] == 2.2  # 2.2 Bohr default

    # test1

    # generate species with custom rmt 2.1
    rmt = {'Al': 2.1}
    label = 'rmt2.1'

    atomsrmt = atoms.copy()
    os.environ['ELK_SPECIES_PATH'] = ELK_SPECIES_PATH
    atomsrmt.calc = ELK(tasks=0, label=label, rmt=rmt)  # minimal calc
    atomsrmt.get_potential_energy()
    del atomsrmt.calc
    del atomsrmt

    # hack ELK_SPECIES_PATH to use custom species
    os.environ['ELK_SPECIES_PATH'] = os.path.abspath(label) + '/'
    # run calculation
    calc = ELK(tasks=0,
               label=label,
               rgkmax=4.0,
               kpts=tuple(kpts2mp(atoms, 2.0, even=True)))
    atoms.calc = calc
    e1 = atoms.get_potential_energy()

    # test2

    # generate species with custom rmt 2.1
    rmt = {'Al': -0.1}
    label = 'rmt0.1m'

    atomsrmt = atoms.copy()
    os.environ['ELK_SPECIES_PATH'] = ELK_SPECIES_PATH
    atomsrmt.calc = ELK(tasks=0, label=label, rmt=rmt)  # minimal calc
    atomsrmt.get_potential_energy()
    del atomsrmt.calc
    del atomsrmt

    # hack ELK_SPECIES_PATH to use custom species
    os.environ['ELK_SPECIES_PATH'] = os.path.abspath(label) + '/'
    # run calculation
    calc = ELK(tasks=0,
               label=label,
               rgkmax=4.0,
               kpts=tuple(kpts2mp(atoms, 2.0, even=True)))
    atoms.calc = calc
    e2 = atoms.get_potential_energy()

    # restore ELK_SPECIES_PATH
    os.environ['ELK_SPECIES_PATH'] = ELK_SPECIES_PATH

    assert abs(e1 - e2) < 1.0e-4
예제 #3
0
            break
    assert found
    # split needed because H is defined with comments
    rmt_orig[name] = float(slines[begline + 3].split()[0].strip())

assert rmt_orig['Al'] == 2.2  # 2.2 Bohr default

# test1

# generate species with custom rmt 2.1
rmt = {'Al': 2.1}
label = 'rmt2.1'

atomsrmt = atoms.copy()
os.environ['ELK_SPECIES_PATH'] = ELK_SPECIES_PATH
atomsrmt.calc = ELK(tasks=0, label=label, rmt=rmt)  # minimal calc
atomsrmt.get_potential_energy()
del atomsrmt.calc
del atomsrmt

# hack ELK_SPECIES_PATH to use custom species
os.environ['ELK_SPECIES_PATH'] = os.path.abspath(label) + '/'
# run calculation
calc = ELK(tasks=0,
           label=label,
           rgkmax=4.0,
           kpts=tuple(kpts2mp(atoms, 2.0, even=True)))
atoms.set_calculator(calc)
e1 = atoms.get_potential_energy()

# test2