예제 #1
0
def calculator_factory(name, **kwargs):
    """Create an ASE calculator factory."""

    if name == 'abinit':
        from ase.calculators.abinit import Abinit
        return CalculatorFactory(Abinit, 'Abinit', 'label', **kwargs)

    if name == 'aims':
        from ase.calculators.aims import Aims
        return CalculatorFactory(Aims, 'aims', 'label', **kwargs)

    if name == 'nwchem':
        from ase.calculators.nwchem import NWChem
        return CalculatorFactory(NWChem, 'NWChem', 'label', 'no k-points',
                                 **kwargs)

    if name == 'asap':
        from asap3 import EMT
        return CalculatorFactory(EMT, 'Asap', None, 'no k-points', **kwargs)

    if name == 'elk':
        from ase.calculators.elk import ELK
        return CalculatorFactory(ELK, 'ELK', 'label', **kwargs)

    if name == 'fleur':
        from ase.calculators.fleur import FLEUR
        return CalculatorFactory(FLEUR, 'FLEUR', 'workdir', **kwargs)

    if name == 'gpaw':
        from gpaw.factory import GPAWFactory
        return GPAWFactory(**kwargs)

    if name == 'hotbit':
        from hotbit import Calculator
        return CalculatorFactory(Calculator, 'Hotbit', 'txt', 'no k-points',
                                 **kwargs)

    if name == 'jacapo':
        from ase.calculators.jacapo import Jacapo
        return CalculatorFactory(Jacapo, 'Jacapo', 'nc', **kwargs)

    if name == 'vasp':
        from ase.calculators.vasp import Vasp
        return CalculatorFactory(Vasp, 'Vasp', None, **kwargs)

    classname = classnames.get(name, name.title())
    module = __import__('ase.calculators.' + name, {}, None, [classname])
    Class = getattr(module, classname)

    if name in ['emt', 'gaussian', 'lammpsrun', 'lj', 'mopac', 'morse']:
        kpts = 'no k-points'
    else:
        kpts = None

    if name in ['emt', 'lj', 'morse']:
        label = None
    else:
        label = 'label'

    return CalculatorFactory(Class, classname, label, kpts, **kwargs)
예제 #2
0
        calcopts.update({'nbands': -int(nbands)})
if run.startswith('szpdzp'):
    calcopts.update({'basis': 'szp(dzp)'})
if run.startswith('szdzp'):
    calcopts.update({'basis': 'sz(dzp)'})
if run.startswith('dzp'):
    calcopts.update({'basis': 'dzp'})
if 'cg' in run:
    calcopts.update({'eigensolver': 'cg'})
else:
    calcopts.update({'eigensolver': 'rmm-diis'})
if run.startswith('cgdzp'):
    calcopts.update({'basis': 'dzp'})
calcopts.update({'mixer': eval(rundefs[run])})

calcfactory = GPAWFactory(**calcopts)

collection = Collection(data, atom_names + molecule_names, cell)

task = Task(
    calcfactory=calcfactory,
    tag=tag,
    use_lock_files=True,
    collection=collection,
    cell=cell,
)
keys = collection.keys()
for m in ['Na2', 'NaCl']:  # those seem to need cg
    keys.remove(m)
task.run(keys)
예제 #3
0
if optimizer is not None:
    tag += '_%s' % optimizer

calcopts_default = {
    'mode': 'lcao',
    'basis': 'dzp',
    'xc': 'PBE',
    'width': 0.0,
    'fixmom': True,
    'nbands': -2,
    # make systems converge
    'mixer': Mixer(0.05, 2),
    'maxiter': 300,
}
calcfactory_default = GPAWFactory(**calcopts_default)

calcopts_d16 = calcopts_default.copy()
calcopts_d16.update({'convergence': {'density': 1.e-6}})
calcfactory_d16 = GPAWFactory(**calcopts_d16)

calcfactory = calcfactory_default

collection = Collection(data, names, cell)

taskopts = {'fmax': 0.05, 'steps': 100}
if optimizer is not None:
    if 'D16' not in optimizer:
        taskopts.update({'optimizer': optimizer})
        calcfactory = calcfactory_default
    else:
예제 #4
0
if len(sys.argv) == 1:
    optimizer = None
else:
    optimizer = sys.argv[1]

tag = 'htb_pw'

if optimizer is not None:
    tag += '_%s' % optimizer

calcfactory = GPAWFactory(
    mode=PW(),
    xc='PBE',
    width=0.1,
    maxiter=400,
    mixer=Mixer(0.10, 2),
    eigensolver='cg',
    # avoid problems with band parallelization
    communicator=serial_comm,
)

taskopts = {'sfmax': 0.01, 'ssteps': 50}
if optimizer is not None:
    taskopts.update({'soptimizer': optimizer})

task = Task(xc='LDA',
            calcfactory=calcfactory,
            tag=tag,
            use_lock_files=True,
            **taskopts)