# coding: utf-8
# Copyright (c) Max-Planck-Institut für Eisenforschung GmbH - Computational Materials Design (CM) Department
# Distributed under the terms of "New BSD License", see the LICENSE file.
import os
import shutil
from pyiron_atomistics.atomistics.job.atomistic import AtomisticGenericJob
from pyiron_contrib.atomistics.mlip.mlip import write_cfg, read_cgfs
from pyiron_base import GenericParameters
__author__ = "Jan Janssen"
__copyright__ = "Copyright 2020, Max-Planck-Institut für Eisenforschung GmbH - " \
"Computational Materials Design (CM) Department"
__version__ = "1.0"
__maintainer__ = "Jan Janssen"
__email__ = "janssen@mpie.de"
__status__ = "development"
__date__ = "Sep 1, 2018"
[docs]class MlipJob(AtomisticGenericJob):
def __init__(self, project, job_name):
super(MlipJob, self).__init__(project, job_name)
self.__name__ = "MlipJob"
self.__version__ = None
self._executable_activate()
self.input = MlipParameter()
@property
def potential(self):
return self.input['mlip:load-from']
@potential.setter
def potential(self, potential_filename):
self.input['mlip:load-from'] = potential_filename
[docs] def to_hdf(self, hdf=None, group_name=None):
super(MlipJob, self).to_hdf(hdf=hdf, group_name=group_name)
with self.project_hdf5.open("input") as hdf5_input:
self.input.to_hdf(hdf5_input)
[docs] def from_hdf(self, hdf=None, group_name=None):
super(MlipJob, self).from_hdf(hdf=hdf, group_name=group_name)
with self.project_hdf5.open("input") as hdf5_input:
self.input.from_hdf(hdf5_input)
[docs] def collect_output(self):
file_name = os.path.join(self.working_directory, 'structurebyMTP.cfg')
cell, positions, forces, stress, energy, indicies, grades, jobids, timesteps = read_cgfs(file_name=file_name)
with self.project_hdf5.open('output') as hdf5_output:
hdf5_output['forces'] = forces
hdf5_output['energy_tot'] = energy
hdf5_output['pressures'] = stress
hdf5_output['cells'] = cell
hdf5_output['positions'] = positions
hdf5_output['indicies'] = indicies
[docs]class MlipParameter(GenericParameters):
def __init__(self, separator_char=' ', comment_char='#', table_name="mlip_inp"):
super(MlipParameter, self).__init__(separator_char=separator_char, comment_char=comment_char,
table_name=table_name)
self._bool_dict = {True: "TRUE", False: "FALSE"}
[docs] def load_default(self, file_content=None):
if file_content is None:
file_content = '''\
abinitio void
mlip mtpr
mlip:load-from auto
calculate-efs TRUE
write-cfgs structurebyMTP.cfg
'''
self.load_string(file_content)