Source code for pyiron_contrib.atomistics.dft.parametermaster

# 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.

from __future__ import print_function

import pandas
from pyiron.atomistics.master.parallel import AtomisticParallelMaster
from pyiron_base import JobGenerator

__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__ = "production"
__date__ = "Sep 1, 2017"


[docs]class ParameterJobGenerator(JobGenerator): """ Job Generator for the ParameterMaster """ @property def parameter_list(self): """ List of parameters - a combination of energy cut off and kpoint mesh pairs Returns: list: of pairs of energy cut off and kpoint mesh """ return [[encut, kpoint_mesh] for encut, kpoint_mesh in zip( self._job.iteration_frame.ENCUT, self._job.iteration_frame.KPOINT_MESH )]
[docs] @staticmethod def job_name(parameter): """ Generate job name for a given job based on energy cut off and kpoint mesh Args: parameter (list): pair of energy cut off and kpoint mesh Returns: str: job name """ return "job_encut_" + str(parameter[0]).replace('.', '_') + \ '_kpoints_' + str(parameter[1][0]) + '_' + str(parameter[1][1]) + '_' + str(parameter[1][2])
[docs] def modify_job(self, job, parameter): """ Modify a given job by setting the energy cut off and the kpoint mesh Args: job (pyiron.dft.job.generic.GenericDFTJob): DFT quantum engine parameter (list): pair of energy cut off and kpoint mesh Returns: pyiron.dft.job.generic.GenericDFTJob: updated job object """ job.set_encut(parameter[0]) job.set_kpoints(parameter[1]) return job
[docs]class ParameterMaster(AtomisticParallelMaster): def __init__(self, project, job_name): """ Parameter master to calculate energies and forces for a given list of energy cut off and kpoint mesh pairs. The parameter master is typically used to validate the convergence of a DFT calculation Args: project (ProjectHDFio): ProjectHDFio instance which points to the HDF5 file the job is stored in job_name (str): name of the job, which has to be unique within the project """ super(ParameterMaster, self).__init__(project, job_name) self.__name__ = 'ParameterMaster' self.__version__ = '0.0.1' self._job_generator = ParameterJobGenerator(self) self.iteration_frame = pandas.DataFrame({'ENCUT': [], 'KPOINT_MESH': []})
[docs] def to_hdf(self, hdf=None, group_name=None): """ Store the ParameterMaster in an HDF5 file Args: hdf (ProjectHDFio): HDF5 group object - optional group_name (str): HDF5 subgroup name - optional """ super(ParameterMaster, self).to_hdf(hdf=hdf, group_name=group_name) with self.project_hdf5.open('input') as hdf5_input: hdf5_input['dataframe'] = self.iteration_frame.to_dict(orient='list')
[docs] def from_hdf(self, hdf=None, group_name=None): """ Restore the ParameterMaster from an HDF5 file Args: hdf (ProjectHDFio): HDF5 group object - optional group_name (str): HDF5 subgroup name - optional """ super(ParameterMaster, self).from_hdf(hdf=hdf, group_name=group_name) with self.project_hdf5.open('input') as hdf5_input: self.iteration_frame = pandas.DataFrame(hdf5_input['dataframe'])
[docs] def collect_output(self): """ The ParameterMaster does not store any specitic output, it is recommended to use a pyiron table instead. """ pass