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
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
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
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
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
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
def __init__(self, **kwargs): MoleculeTask.__init__(self, **kwargs)
def run(self): return MoleculeTask.run(self, ex_atomization.keys())
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'])