Ejemplo n.º 1
0
 def calculate(self, name, atoms):
     data = MoleculeTask.calculate(self, name, atoms)
     exx = HybridXC('EXX', alpha=5.0)
     dexx = atoms.calc.get_xc_difference(exx)
     data['EXX'] = dexx
     data['EXXvc'] = exx.evc
     return data
Ejemplo n.º 2
0
 def calculate(self, name, atoms):
     data = MoleculeTask.calculate(self, name, atoms)
     try:
         steps = atoms.get_calculator().get_number_of_iterations()
     except (AttributeError, NotImplemented):
         steps = None
     data['calculator steps'] = steps
     return data
Ejemplo n.º 3
0
 def calculate(self, name, atoms):
     data = MoleculeTask.calculate(self, name, atoms)
     try:
         steps = atoms.get_calculator().get_number_of_iterations()
     except (AttributeError, NotImplemented):
         steps = None
     data['calculator steps'] = steps
     return data
Ejemplo n.º 4
0
def run(args=sys.argv[1:], calcname='emt', task=None):

    if isinstance(args, str):
        args = args.split(' ')

    argsoriginal = args[:]

    if len(args) > 0 and args[0] in calcnames:
        calcname = args.pop(0)

    if task is None:
        taskname = 'molecule'
        if (len(args) > 0 and
            (args[0] in ['molecule', 'bulk'] or args[0].endswith('.py'))):
            taskname = args.pop(0)

        if taskname.endswith('.py'):
            locals = {}
            execfile(taskname, locals, locals)
            tasks = [task for task in locals.values() if isinstance(task, Task)]
            assert len(tasks) == 1
            task = tasks[0]
        elif taskname == 'bulk':
            task = BulkTask()
        else:
            task = MoleculeTask()

    if len(args) == 0 and task.collection is None:
        sys.stderr.write(
            usage % textwrap.fill(', '.join(calcnames[:-1]) +
                                  ' or ' + calcnames[-1] +
                                  '.  Default value is emt.',
                                  initial_indent='calculator: ',
                                  subsequent_indent=' ' * 12))
        return
    
    task.set_calculator_factory(calcname)

    args = task.parse_args(args)

    if task.interactive_python_session:
        if '-i' in argsoriginal:
            argsoriginal.remove('-i')
        if '--interactive-python-session' in argsoriginal:
            argsoriginal.remove('--interactive-python-session')
        file = tempfile.NamedTemporaryFile()
        file.write('import os\n')
        file.write('if "PYTHONSTARTUP" in os.environ:\n')
        file.write('    execfile(os.environ["PYTHONSTARTUP"])\n')
        file.write('from ase.tasks.main import run\n')
        file.write('atoms, task = run(%r, %r)\n' % (argsoriginal, calcname))
        file.flush()
        os.system('python -i %s' % file.name)
        return

    atoms = task.run(args)

    return atoms, task
Ejemplo n.º 5
0
 def build_system(self, name):
     if name in extra:
         mol = Atoms(*extra[name])
         mol.cell = self.unit_cell
         mol.center()
     else:
         self.bond_length = bondlengths.get(name, None)
         mol = MoleculeTask.build_system(self, name)
     return mol
Ejemplo n.º 6
0
 def calculate(self, name, atoms):
     data = MoleculeTask.calculate(self, name, atoms)
     data['relaxed fmax'] = np.sqrt((atoms.get_forces()**2).sum(axis=1)).max()
     data['fmax'] = self.fmax
     if 'energy' in data and 'relaxed energy' not in data:
         # no optimization performed
         data['relaxed energy'] = data['energy']
         data['steps'] = 0
     elif 'relaxed energy' in data:
         # optimization
         data['steps'] = self.steps
     if data['relaxed fmax'] > data['fmax']:
         raise RuntimeError('Optimization failed to converge')
     return data
Ejemplo n.º 7
0
 def calculate(self, name, atoms):
     data = MoleculeTask.calculate(self, name, atoms)
     data['relaxed fmax'] = np.sqrt(
         (atoms.get_forces()**2).sum(axis=1)).max()
     data['fmax'] = self.fmax
     if 'energy' in data and 'relaxed energy' not in data:
         # no optimization performed
         data['relaxed energy'] = data['energy']
         data['steps'] = 0
     elif 'relaxed energy' in data:
         # optimization
         data['steps'] = self.steps
     if data['relaxed fmax'] > data['fmax']:
         raise RuntimeError('Optimization failed to converge')
     return data
Ejemplo n.º 8
0
 def __init__(self, **kwargs):
     MoleculeTask.__init__(self, **kwargs)
Ejemplo n.º 9
0
 def run(self):
     return MoleculeTask.run(self, ex_atomization.keys())
Ejemplo n.º 10
0
import sys

from ase.tasks.molecule import MoleculeTask

from gpaw import PW
from gpaw.factory import GPAWFactory


setups = sys.argv[1]

for ecut in [400, 500, 600]:
    task = MoleculeTask(
            calcfactory=GPAWFactory(xc='PBE',
                                    setups=setups,
                                    mode=PW(ecut)),
            tag='%s-%d' % (setups, ecut),
            cell=(11, 12, 13),
            use_lock_files=True)
    task.run(['C', 'Si', 'Ge', 'Al', 'N', 'P', 'As', 'Ga', 'In', 'Sb', 'Mg', 'O',
              'Li', 'F', 'Na', 'Cl', 'Cu', 'Rh', 'Pd', 'Ag'])
Ejemplo n.º 11
0
 def __init__(self, **kwargs):
     MoleculeTask.__init__(self, **kwargs)