def test__get_required_tasks(qoi):
    _qoidb_filename_in = "pypospack.qoi.yaml"

    from pypospack.qoi import QoiDatabase
    from pypospack.qoi import QoiManager

    _qoi_type = qoi
    _qoi_structure = 'MgO_NaCl'
    _qoi_name = "{}.{}".format(_qoi_structure, _qoi_type)
    _qoi_structures = OrderedDict()
    _qoi_structures['ideal'] = 'MgO_NaCl'
    _qoidb_QoiDatabase = QoiDatabase()
    _qoidb_QoiDatabase.add_qoi(qoi_name=_qoi_name,
                               qoi_type=_qoi_type,
                               structures=_qoi_structures,
                               target=4.5)

    qoimanager = QoiManager(qoi_database=_qoidb_QoiDatabase, fullauto=False)
    qoimanager.configure()
    qoimanager.determine_tasks()

    _task_type = 'lmps_min_all'
    _qoi_task_name = "{}.{}".format(_qoi_structures['ideal'], _task_type)
    assert isinstance(qoimanager.tasks, OrderedDict)
    assert _qoi_task_name in qoimanager.tasks
    assert qoimanager.tasks[_qoi_task_name]['task_type'] == _task_type
    assert qoimanager.tasks[_qoi_task_name]['task_structure'] \
            == _qoi_structures['ideal']
예제 #2
0
def test__read():
    _yaml_filename_in = 'pypospack.qoi.yaml'

    from pypospack.qoi import QoiDatabase
    qoidb = QoiDatabase()
    qoidb.read(filename=_yaml_filename_in)

    assert isinstance(qoidb.qois, dict)
    assert isinstance(qoidb.qois, OrderedDict)
예제 #3
0
    def test__init__with_QoiDatabase():
        _qoidb_filename_in = "pypospack.qoi.yaml"

        from pypospack.qoi import QoiDatabase
        qoidb = QoiDatabase()
        qoidb.read(filename=_qoidb_filename_in)

        from pypospack.qoi import QoiManager
        qoimanager = QoiManager(qoi_database=qoidb, fullauto=False)

        assert isinstance(qoimanager.qoidb, QoiDatabase)
        assert isinstance(qoimanager.qoidb.qoi_names, list)
        assert isinstance(qoimanager.qoi_names, list)
예제 #4
0
def test__write():
    _yaml_filename_in = 'pypospack.qoi.yaml'
    _yaml_filename_out = 'pypospack.qoi.yaml.out'

    from pypospack.qoi import QoiDatabase
    qoidb = QoiDatabase()
    qoidb.read(filename=_yaml_filename_in)
    qoidb.write(filename=_yaml_filename_out)
    qoidb.read(filename=_yaml_filename_out)
def write_configuration_file(qoi_name,qoi_type,structures,target):
    qoidb = QoiDatabase()
    qoidb.add_qoi(
            qoi_name=qoi_name,
            qoi_type=qoi_type,
            structures=structures,
            target=target
        )
    
    potential = OrderedDict()
    potential['potential_type'] = 'buckingham'
    potential['symbols'] = ['Mg','O']
    potential['cutoff_global'] = 10.0
    
    structures = OrderedDict()
    structures['structure_directory'] = 'test_PypospackEngine'
    structures['structures'] = OrderedDict()
    structures['structures']['MgO_NaCl'] = 'MgO_NaCl_unit.gga.relax.vasp'
    
    configuration = PyposmatConfigurationFile()
    configuration.qois = qoidb.qois
    configuration.potential = potential
    configuration.structures = structures
    configuration.write(filename='pyposmat.config.in')
예제 #6
0
def get_testing_set_Si():
    testing_set = OrderedDict()
    # Stillinger and Weber,  Phys. Rev. B, v. 31, p. 5262, (1985)
    testing_set['parameters'] = OrderedDict([('SiSiSi_epsilon', 2.1686),
                                             ('SiSiSi_sigma', 2.0951),
                                             ('SiSiSi_a', 1.80),
                                             ('SiSiSi_lambda', 21.0),
                                             ('SiSiSi_gamma', 1.20),
                                             ('SiSiSi_costheta0', -1 / 3),
                                             ('SiSiSi_A', 7.049556277),
                                             ('SiSiSi_B', 0.6022245584),
                                             ('SiSiSi_p', 4.0),
                                             ('SiSiSi_q', 0.0),
                                             ('SiSiSi_tol', 0.0)])
    testing_set['structure_db'] = OrderedDict()
    testing_set['structure_db']['structure_directory'] = os.path.join(
        pypospack.utils.get_pypospack_root_directory(), 'data',
        'Si__structure_db')
    testing_set['structure_db']['structures'] = OrderedDict()
    testing_set['structure_db']['structures']['Si_dia'] = 'Si_dia_unit.vasp'
    testing_set['structure_db']['structures']['Si_vac'] = 'Si_dia_333_vac.vasp'
    testing_set['qoi_db'] = QoiDatabase()
    testing_set['qoi_db'].add_qoi(qoi_name='Si_dia.vac',
                                  qoi_type='E_formation',
                                  structures=OrderedDict([('defect', 'Si_vac'),
                                                          ('ideal', 'Si_dia')
                                                          ]),
                                  target=3.6)
    testing_set['tasks'] = OrderedDict()
    testing_set['tasks']['Si_dia.lmps_min_all'] = OrderedDict([
        ('task_type', 'lmps_min_all'), ('task_structure', 'Si_dia')
    ])
    testing_set['tasks']['Si_vac.lmps_min_pos'] = OrderedDict([
        ('task_type', 'lmps_min_pos'), ('task_structure', 'Si_vac'),
        ('bulk_structure', 'Si_dia')
    ])
    return testing_set
예제 #7
0
import pytest
from collections import OrderedDict
from pypospack.pyposmat import PyposmatConfigurationFile
from pypospack.qoi import QoiDatabase

import MgO

MgO_qoi_db = QoiDatabase()
MgO_qoi_db.add_qoi(qoi_name='MgO_NaCl.fr_a',
                   qoi_type='point_defect',
                   structures=OrderedDict([('defect', 'MgO_NaCl_fr_a'),
                                           ('ideal', 'MgO_NaCl')]),
                   target=10.978)

print(80 * '-')
print('{:^80}'.format('QUANTITIES OF INTEREST'))
print(80 * '-')
print(MgO_qoi_db.qois)

MgO_structure_db = OrderedDict()
MgO_structure_db['structure_directory'] = 'test__DefectFormationEnergy'
MgO_structure_db['structures'] = OrderedDict()
MgO_structure_db['structures']['MgO_NaCl'] = 'MgO_NaCl_unit.gga.relax.vasp'
MgO_structure_db['structures']['MgO_NaCl_fr_a'] = 'MgO_NaCl_fr_a.vasp'

print(80 * '-')
print('{:^80}'.format('STRUCTURE DATABASE'))
print(80 * '-')
print('Structure directory:{}'.format(MgO_structure_db['structure_directory']))
print(20 * '-' + ' ' + 59 * '-')
print('{:^20} {:^59}'.format('structure_name', 'structure_filename'))
#------------------------------------------------------------------------------
# STRUCTURE DATABASE DEFINITION
#------------------------------------------------------------------------------
structure_db = OrderedDict()
structure_db['structure_directory'] = 'structure_db'
structure_db['structures'] = OrderedDict()
structure_db['structures']['MgO_NaCl'] = 'MgO_NaCl_unit.gga.relax.vasp'
structure_db['structures']['MgO_NaCl_prim'] = 'MgO_NaCl_prim.gga.relax.vasp'
structure_db['structures']['MgO_NaCl_fr_a'] = 'MgO_NaCl_333_fr_a.vasp'
structure_db['structures']['MgO_NaCl_fr_c'] = 'MgO_NaCl_333_fr_c.vasp'
structure_db['structures']['MgO_NaCl_sch'] = 'MgO_NaCl_333_sch.vasp'
structure_db['structures']['MgO_NaCl_001s'] = 'MgO_NaCl_001s.vasp'
#------------------------------------------------------------------------------
# FITTING DATABASE
#------------------------------------------------------------------------------
qoi_db = QoiDatabase()
qoi_db.add_qoi(qoi_name='MgO_NaCl.a0',
               qoi_type='a11_min_all',
               structures=OrderedDict([('ideal', 'MgO_NaCl')]),
               target=4.246)
qoi_db.add_qoi(qoi_name='MgO_NaCl.c11',
               qoi_type='c11',
               structures=OrderedDict([('ideal', 'MgO_NaCl')]),
               target=277.00)
qoi_db.add_qoi(qoi_name='MgO_NaCl.c12',
               qoi_type='c12',
               structures=OrderedDict([('ideal', 'MgO_NaCl')]),
               target=91.67)
qoi_db.add_qoi(qoi_name='MgO_NaCl.c44',
               qoi_type='c44',
               structures=OrderedDict([('ideal', 'MgO_NaCl')]),
예제 #9
0
structure_db['structures'][
    'Ni_fcc_110_unit'] = 'Ni_fcc_110_unit.gga.relaxed.vasp'
structure_db['structures'][
    'Ni_fcc_111_unit'] = 'Ni_fcc_111_unit.gga.relaxed.vasp'
structure_db['structures']['Ni_fcc_100_s'] = 'Ni_fcc_100_surf.vasp'
structure_db['structures']['Ni_fcc_110_s'] = 'Ni_fcc_110_surf.vasp'
structure_db['structures']['Ni_fcc_111_s'] = 'Ni_fcc_111_surf.vasp'
structure_db['structures']['Ni_fcc_isf'] = 'Ni_fcc_isf.vasp'
structure_db['structures']['Ni_fcc_esf'] = 'Ni_fcc_esf.vasp'
structure_db['structures']['Ni_fcc_vac'] = 'Ni_fcc_sc_333_vac.vasp'
structure_db['structures']['Ni_fcc_o_int'] = 'Ni_fcc_sc_333_o_int.vasp'
structure_db['structures']['Ni_fcc_i_int'] = 'Ni_fcc_sc_333_t_int.vasp'
#------------------------------------------------------------------------------
# FITTING DATABASE
#------------------------------------------------------------------------------
qoi_db = QoiDatabase()
qoi_db.add_qoi(qoi_name='Ni_fcc.E_coh',
               qoi_type='Ecoh_min_all',
               structures=OrderedDict([('ideal', 'Ni_fcc')]),
               target=-4.45)
qoi_db.add_qoi(qoi_name='Ni_fcc.a0',
               qoi_type='a11_min_all',
               structures=OrderedDict([('ideal', 'Ni_fcc')]),
               target=3.52)
#qoi_db.add_qoi(
#        qoi_name='Ni_fcc.c11',
#        qoi_type='c11',
#        structures=OrderedDict([('ideal','Ni_fcc')]),
#        target=261.)
#qoi_db.add_qoi(
#        qoi_name='Ni_fcc.c12',
예제 #10
0
    return '\n'.join([','.join(v) for v in table_rows])

if __name__ == '__main__':
    potential_definition = OrderedDict()
    potential_definition['potential_type'] = 'eam'
    potential_definition['symbols'] = ['Ni']
    potential_definition['setfl_filename'] = os.path.join(
            'potential_db',
            'Mishin-Ni-Al-2009.eam.alloy'
        )
    #potential_definition['setfl_filename'] = os.path.join(
    #        'potential_db',
    #        'Ni99.eam.alloy'
    #    )

    qoi_db = QoiDatabase()
    qoi_db.add_qoi(
            qoi_name='Ni_fcc.esf',
            qoi_type='E_stacking_fault',
            structures=OrderedDict([
                    ('defect','Ni_fcc_esf'),
                    ('ideal','Ni_fcc_111_unit')]),
            target=7.80e-3)
    qoi_db.add_qoi(
            qoi_name='Ni_fcc.isf',
            qoi_type='E_stacking_fault',
            structures=OrderedDict([
                    ('defect','Ni_fcc_isf'),
                    ('ideal','Ni_fcc_111_unit')]),
            target=1.45e-02)
    qoi_db.add_qoi(
예제 #11
0
 def __init_QoiDatabase_from_None(self):
     self.qoidb = QoiDatabase()
예제 #12
0
structure_db['structures'][
    'Ni_fcc_110_unit'] = 'Ni_fcc_110_unit.gga.relaxed.vasp'
structure_db['structures'][
    'Ni_fcc_111_unit'] = 'Ni_fcc_111_unit.gga.relaxed.vasp'
structure_db['structures']['Ni_fcc_100_s'] = 'Ni_fcc_100_surf.vasp'
structure_db['structures']['Ni_fcc_110_s'] = 'Ni_fcc_110_surf.vasp'
structure_db['structures']['Ni_fcc_111_s'] = 'Ni_fcc_111_surf.vasp'
structure_db['structures']['Ni_fcc_isf'] = 'Ni_fcc_isf.vasp'
structure_db['structures']['Ni_fcc_esf'] = 'Ni_fcc_esf.vasp'
structure_db['structures']['Ni_fcc_vac'] = 'Ni_fcc_sc_333_vac.vasp'
structure_db['structures']['Ni_fcc_o_int'] = 'Ni_fcc_sc_333_o_int.vasp'
structure_db['structures']['Ni_fcc_i_int'] = 'Ni_fcc_sc_333_t_int.vasp'
#------------------------------------------------------------------------------
# FITTING DATABASE
#------------------------------------------------------------------------------
qoi_db = QoiDatabase()
qoi_db.add_qoi(qoi_name='Ni_fcc.E_coh',
               qoi_type='Ecoh_min_all',
               structures=OrderedDict([('ideal', 'Ni_fcc')]),
               target=-4.45)
qoi_db.add_qoi(qoi_name='Ni_fcc.a0',
               qoi_type='a11_min_all',
               structures=OrderedDict([('ideal', 'Ni_fcc')]),
               target=3.52)
qoi_db.add_qoi(qoi_name='Ni_fcc.c11',
               qoi_type='c11',
               structures=OrderedDict([('ideal', 'Ni_fcc')]),
               target=261.)
qoi_db.add_qoi(qoi_name='Ni_fcc.c12',
               qoi_type='c12',
               structures=OrderedDict([('ideal', 'Ni_fcc')]),
예제 #13
0
#  in this case 'Si_dia' is the short name which the rest of the file
#  refers to the structure file which is contained in
#  Si_structures/Si_dia_unit.vasp
#-----------------------------------------------------------------------------
# DEFINE POTENTIAL FORMALISM
#-----------------------------------------------------------------------------
potential_formalism = OrderedDict()
potential_formalism['potential_type'] = 'stillingerweber'
potential_formalism['symbols'] = ['Si']
#potential_formalism['cutoff_global'] = 10.0

#-----------------------------------------------------------------------------
# QOI DEFINITIONS
#-----------------------------------------------------------------------------
qoi_db = QoiDatabase()
qoi_db.add_qoi(qoi_name='Si_dia.a0',
               qoi_type='a11_min_all',
               structures=OrderedDict([('ideal', 'Si_dia')]),
               target=5.431)
qoi_db.add_qoi(qoi_name='Si_dia.c12',
               qoi_type='c12',
               structures=OrderedDict([('ideal', 'Si_dia')]),
               target=75.00)
qoi_db.add_qoi(qoi_name='Si_dia.c44',
               qoi_type='c44',
               structures=OrderedDict([('ideal', 'Si_dia')]),
               target=56.00)
qoi_db.add_qoi(qoi_name='Si_dia.B',
               qoi_type='bulk_modulus',
               structures=OrderedDict([('ideal', 'Si_dia')]),
예제 #14
0
        pypospack_root_dir,'data','Si__structure_db'
)
structure_db['structures'] = OrderedDict()
structure_db['structures']['Si_dia'] = 'Si_dia_unit.vasp'
structure_db['structures']['Si_vac'] = 'Si_dia_333_vac.vasp'
#  in this case 'Si_dia' is the short name which the rest of the file
#  refers to the structure file which is contained in
#  Si_structures/Si_dia_unit.vasp

#-----------------------------------------------------------------------------
# QOI DEFINITIONS
#-----------------------------------------------------------------------------
# L. Pizzagalli et al, J. J. Phys.: Condens. Matter 25 (2013) 055801
# doi:10.1088/0953-8984/25/5/055801
# reference values from Table 2 and Table 3
qoi_db = QoiDatabase()
qoi_db.add_qoi(
        qoi_name='Si_dia.E_coh',
        qoi_type='Ecoh_min_all',
        structures=OrderedDict([('ideal','Si_dia')]),
        target=-4.63)
qoi_db.add_qoi(
        qoi_name='Si_dia.a0',
        qoi_type='a11_min_all',
        structures=OrderedDict([('ideal','Si_dia')]),
        target=5.43)
qoi_db.add_qoi(
        qoi_name="Si_dia.c11",
        qoi_type='c11',
        structures=OrderedDict([('ideal','Si_dia')]),
        target=166.)
예제 #15
0
#MgO_parameter_constraints['OO_rho_gt_0']  = ['OO_rho > 0']
#MgO_parameter_constraints['OO_C_gt_0']  = ['OO_C > 0']

# <---------------- STRUCTURE DATABASE
Si_sw_structures = OrderedDict()
Si_sw_structures['structure_directory'] = 'test__PyposmatMonteCarloSampler'
Si_sw_structures['structures'] = OrderedDict()
Si_sw_structures['structures']['Si_dia'] = 'Si_dia_unit.vasp'

#<00--------------- QOI DATABASE
#Si reference database
# LDA-DFT reference data, originally from:
# Pizzagalli et al.  Phil. Mag A (2008) A 83 1191
# Taken from table
# Pizzagalli et al.  J Phys. Condens. Matter (2013) 055801
Si_sw_qoi_db = QoiDatabase()
# <----------------- STRUCTURAL PROPERTIES
Si_sw_qoi_db.add_qoi(qoi_name='Si_dia.Ecoh',
                     qoi_type='Ecoh_min_all',
                     structures=OrderedDict([('ideal', 'Si_dia')]),
                     target=-4.63)
Si_sw_qoi_db.add_qoi(qoi_name='Si_dia.a0',
                     qoi_type='a11_min_all',
                     structures=OrderedDict([('ideal', 'Si_dia')]),
                     target=5.43)
# <----------------- ELASTIC PROPERTIES
Si_sw_qoi_db.add_qoi(qoi_name='Si_dia.c11',
                     qoi_type='c11',
                     structures=OrderedDict([('ideal', 'Si_dia')]),
                     target=166.0)
Si_sw_qoi_db.add_qoi(qoi_name='Si_dia.c12',
예제 #16
0
structure_db['structures'][
    'Al_fcc_110_unit'] = 'Al_fcc_110_unit.gga.relaxed.vasp'
structure_db['structures'][
    'Al_fcc_111_unit'] = 'Al_fcc_111_unit.gga.relaxed.vasp'
structure_db['structures']['Al_fcc_100_s'] = 'Al_fcc_100_surf.vasp'
structure_db['structures']['Al_fcc_110_s'] = 'Al_fcc_110_surf.vasp'
structure_db['structures']['Al_fcc_111_s'] = 'Al_fcc_111_surf.vasp'
structure_db['structures']['Al_fcc_isf'] = 'Al_fcc_isf.vasp'
structure_db['structures']['Al_fcc_esf'] = 'Al_fcc_esf.vasp'
structure_db['structures']['Al_fcc_vac'] = 'Al_fcc_sc_333_vac.vasp'
structure_db['structures']['Al_fcc_o_int'] = 'Al_fcc_sc_333_o_int.vasp'
structure_db['structures']['Al_fcc_i_int'] = 'Al_fcc_sc_333_t_int.vasp'
#------------------------------------------------------------------------------
# FITTING DATABASE
#------------------------------------------------------------------------------
qoi_db = QoiDatabase()
qoi_db.add_qoi(qoi_name='Al_fcc.E_coh',
               qoi_type='Ecoh_min_all',
               structures=OrderedDict([('ideal', 'Al_fcc')]),
               target=-3.36)
qoi_db.add_qoi(qoi_name='Al_fcc.a0',
               qoi_type='a11_min_all',
               structures=OrderedDict([('ideal', 'Al_fcc')]),
               target=4.05)
#qoi_db.add_qoi(
#        qoi_name='Al_fcc.c11',
#        qoi_type='c11',
#        structures=OrderedDict([('ideal','Al_fcc')]),
#        target=114.)
#qoi_db.add_qoi(
#        qoi_name='Al_fcc.c12',
예제 #17
0
class QoiManager(object):
    """ Manager of Quantities of Interest

    This class manages quantities of interest the simulation of multiple
    quantities of interest will often require the results from the same
    simulation.  The purpose of this class is to identify the values required
    from different simulations, and then identify which simulations need to
    be done first.

    Args:
        qoi_database(OrderedDict):this is a dictionary of key-value pairs, where
            the key value is unique qoi_id for this set of simulations, the value
            contains the necessary configuration information necessary for
            configuration of object instantiated with Qoi base class.
            Normally, this object is passed from the PyposmatConfigurationFile
            object using the `qois` attribute.
        fullauto(bool,optional): Set to True by default; this class will be
            initialized using the information in the `qoi_database` argument.
            The purpose of setting this to False is for development purposes
            so that helper methods can be individually tests.
    Attributes:
        qois(OrderedDict):this is a dictionary of key-value pairs, where the key
            value is unique qoi_id for this set of simulations, the value
            contains the necessary configuration information necessary for
            configuration of object instantiated with Qoi base class.
        qoi_info(pypospack.qoi.QoiDatabase)
        qoi_names (list): list of qoi_names
        qoi_targets (dict): key is the qoi_name, value is the reference value
        qoi_errors (dict): key is the qoi_name, value is the error
        qoi_dict (dict):
    """
    def __init__(self, qoi_database=None, fullauto=True):
        assert any([
            isinstance(qoi_database, QoiDatabase),
            type(qoi_database) is type(None),
            type(qoi_database) is OrderedDict,
            type(qoi_database) is str,
        ])

        #<--------- initialize attributes
        self.qoidb = None
        self.obj_Qoi = None
        self.obj_QoiMap = None
        self.tasks = None

        self.__init_QoiDatabase(qoi_database=qoi_database)

        if fullauto:
            self.configure()
            self.determine_tasks()

    @property
    def qoi_names(self):
        return self.qoidb.qoi_names

    def configure(self):
        self.configure__get_QoiMap()
        self.configure__obj_Qoi()

    def configure__get_QoiMap(self):
        self.obj_QoiMap = get_qoi_map()

    def get_qoi_name(self, qoi_simulation_type, structures):

        if qoi_simulation_type in ['lmps_phase_order']:
            s1 = structures['low']
            s2 = structures['high']
            qoiname = '{}__{}.{}'.format(s1, s2, qoi_simulation_type)

        elif qoi_simulation_type in [
                'lmps_min_all', 'lmps_min_none', 'lmps_elastic',
                'lmps_thermal_expansion', 'gulp_gamma_phonons'
        ]:
            s = structures['ideal']
            qoiname = '{}.{}'.format(s, qoi_simulation_type)

        elif qoi_simulation_type in ['lmps_defect', 'lmps_stacking_fault']:
            s = structures['defect']
            qoiname = '{}.{}'.format(s, qoi_simulation_type)

        elif qoi_simulation_type in ['lmps_surface_energy']:
            s = structures['slab']
            qoiname = '{}.{}'.format(s, qoi_simulation_type)

        else:
            msg_err = 'Unknown qoi_simulation_type: {}'.format(
                qoi_simulation_type)
            raise ValueError(msg_err)

        return qoiname

    def configure__obj_Qoi(self):
        self.obj_qoi = OrderedDict()
        self.qois = OrderedDict()
        for qoik, qoiv in self.qoidb.qois.items():
            self.qois[qoik] = OrderedDict()
            self.qois[qoik]['qoi_name'] = None
            self.qois[qoik]['qoi_type'] = qoiv['qoi_type']
            self.qois[qoik]['qoi_structures'] = qoiv['structures']
            self.qois[qoik]['qoi_ref'] = qoiv['target']
            try:
                self.qois[qoik]['qoi_options'] = qoiv['qoi_options']
            except KeyError as e:
                pass

            for qoimapk, qoimapv in self.obj_QoiMap.items():
                if qoiv['qoi_type'] in qoimapv['qoi']:
                    _structures = None
                    _qoi_simulation_type = qoimapk
                    _qoiname = self.get_qoi_name(
                        qoi_simulation_type=_qoi_simulation_type,
                        structures=qoiv['structures'])

                    _qoitype = qoiv['qoi_type']
                    _module = qoimapv['module']
                    _class = qoimapv['class']
                    _structures = qoiv['structures']

                    try:
                        _qoi_options = qoiv['qoi_options']
                    except KeyError as e:
                        _qoi_options = None

                    self._add_obj_Qoi(qoi_name=_qoiname,
                                      module_name=_module,
                                      class_name=_class,
                                      structures=_structures,
                                      qoi_options=_qoi_options)
                    self.qois[qoik]['qoi_name'] = '{}.{}'.format(
                        _qoiname, _qoitype)

    def __init_QoiDatabase(self, qoi_database=None):

        if isinstance(qoi_database, QoiDatabase):
            self.__init_QoiDatabase_from_QoiDatabase(
                obj_QoiDatabase=qoi_database)
        elif isinstance(qoi_database, str):
            self.__init_QoiDatabase_from_file(
                qoi_database_filename=qoi_database)
        elif isinstance(qoi_database, OrderedDict):
            self.__init_QoiDatabase_from_OrderedDict(
                qoi_database_OrderedDict=qoi_database)
        elif qoi_database is None:
            self.__init_QoiDatabase_from_None()
        else:
            msg_err = (
                "qoi_database argument must be None,QoiDatabase, or str")
            raise ValueError(msg_err)

    def __init_QoiDatabase_from_None(self):
        self.qoidb = QoiDatabase()

    def __init_QoiDatabase_from_file(self, qoi_database_filename):
        assert isinstance(qoi_database_filename, str)
        self.qoidb = QoiDatabase()
        self.qoidb.read(filename=qoi_database_filename)

    def __init_QoiDatabase_from_QoiDatabase(self, obj_QoiDatabase):
        assert isinstance(obj_QoiDatabase, QoiDatabase)
        self.qoidb = copy.deepcopy(obj_QoiDatabase)

    def __init_QoiDatabase_from_OrderedDict(self, qoi_database_OrderedDict):
        assert isinstance(qoi_database_OrderedDict, OrderedDict)
        self.qoidb = QoiDatabase(qoi_database_OrderedDict)

    def _add_obj_Qoi(self,
                     qoi_name,
                     module_name,
                     class_name,
                     structures,
                     qoi_options=None):
        """

        Args:
            qoi_name(str):
            module_name(str):
            class_name(str):
            structures(:obj:`list` of :obj:`str):

        """

        if self.obj_Qoi is None:
            self.obj_Qoi = OrderedDict()

        if qoi_name not in self.obj_Qoi.keys():
            try:
                module = importlib.import_module(module_name)
                cls = getattr(module, class_name)

                if qoi_options is None:
                    self.obj_Qoi[qoi_name] = cls(qoi_name=qoi_name,
                                                 structures=structures)
                else:
                    kwargs = qoi_options
                    self.obj_Qoi[qoi_name] = cls(qoi_name=qoi_name,
                                                 structures=structures,
                                                 **kwargs)
            except:
                print('qoi_name(', type(qoi_name), '):', qoi_name)
                print('module_name(', type(module_name), '):', module_name)
                print('class_name(', type(class_name), '):', class_name)
                print('structures(', type(structures), '):', structures)
                raise

    def determine_tasks(self):
        self.tasks = OrderedDict()

        for k_qoi, v_qoi in self.obj_Qoi.items():
            v_qoi.determine_tasks()

        for k_qoi, v_qoi in self.obj_Qoi.items():
            for k_task, v_task in v_qoi.tasks.items():
                self.add_task(task_name=k_task, task_dict=v_task)

        return copy.deepcopy(self.tasks)

    def add_task(self, task_name, task_dict):
        assert isinstance(task_name, str)
        assert isinstance(task_dict, dict)

        if task_name not in self.tasks:
            self.tasks[task_name] = copy.deepcopy(task_dict)

    def calculate_qois(self, task_results):
        """

        Args:
            task_results(OrderedDict):
        """

        # calculate the QOIs from the QOI objects
        for n_qoi, o_qoi in self.obj_Qoi.items():
            try:
                o_qoi.calculate_qois(task_results=task_results)
            except TypeError as e:
                msg_err = "Cannot calculate qoi for \'{}\'.".format(n_qoi)
                raise ValueError(msg_err + str(e))

        for k_qoi, v_qoi in self.qois.items():
            try:
                qoi_id = self.qois[k_qoi]['qoi_name']
                obj_qoi_id = qoi_id[:qoi_id.rindex('.')]
                qoi_val = self.obj_Qoi[obj_qoi_id].qois[qoi_id]
            except:
                print('k_qoi:{}'.format(k_qoi))
                print('qoi_id:{}'.format(qoi_id))
                print('qoi_keys:')
                for k, v in self.qois.items():
                    print("\t{:15}{}".format(k, self.qois[k]['qoi_name']))
                print('all_k_qois:')
                for k, v in self.qois.items():
                    print(k, v)
                print('k_qoi:{}'.format(k_qoi))
                print('v_qoi:{}'.format(self.qois[k_qoi]))
                print('obj_qoi_id:{}'.format(obj_qoi_id))
                print(self.obj_Qoi)
                raise

            qoi_ref = self.qois[k_qoi]['qoi_ref']
            self.qois[k_qoi]['qoi_val'] = qoi_val
            self.qois[k_qoi]['qoi_err'] = qoi_val - qoi_ref
예제 #18
0
 def __init_QoiDatabase_from_OrderedDict(self, qoi_database_OrderedDict):
     assert isinstance(qoi_database_OrderedDict, OrderedDict)
     self.qoidb = QoiDatabase(qoi_database_OrderedDict)
예제 #19
0
 def __init_QoiDatabase_from_file(self, qoi_database_filename):
     assert isinstance(qoi_database_filename, str)
     self.qoidb = QoiDatabase()
     self.qoidb.read(filename=qoi_database_filename)
예제 #20
0
import pytest
from collections import OrderedDict
from pypospack.pyposmat.data import PyposmatConfigurationFile
from pypospack.qoi import QoiDatabase
from pypospack.qoi import ThermalExpansion

MgO_qoi_db = QoiDatabase()
MgO_qoi_db.add_qoi(qoi_name='MgO_NaCl.th_exp',
                   qoi_type='thermal_expansion_coefficient',
                   structures=OrderedDict([('ideal', 'MgO_NaCl')]),
                   target=0.,
                   qoi_options={
                       'temperature_min': 0,
                       'temperature_max': 1000,
                       'temperature_step': 100
                   })
print(MgO_qoi_db.to_string())

MgO_structure_db = OrderedDict()
MgO_structure_db[
    'structure_directory'] = '../../../structure_db/MgO_structure_db'
MgO_structure_db['structures'] = OrderedDict()
MgO_structure_db['structures']['MgO_NaCl'] = 'MgO_NaCl_unit.gga.relax.vasp'

print(80 * '-')
print('{:^80}'.format('STRUCTURE DATABASE'))
print(80 * '-')
print('Structure directory:{}'.format(MgO_structure_db['structure_directory']))
print(20 * '-' + ' ' + 59 * '-')
print('{:^20} {:^59}'.format('structure_name', 'structure_filename'))
print(20 * '-' + ' ' + 59 * '-')
예제 #21
0
MgO_LewisCatlow['potential']['potential_type'] = 'buckingham'
MgO_LewisCatlow['potential']['symbols'] = ['Mg', 'O']
MgO_LewisCatlow['parameters'] = OrderedDict()
MgO_LewisCatlow['parameters']['chrg_Mg'] = +2.0
MgO_LewisCatlow['parameters']['chrg_O'] = -2.0
MgO_LewisCatlow['parameters']['MgMg_A'] = 0.0
MgO_LewisCatlow['parameters']['MgMg_rho'] = 0.5
MgO_LewisCatlow['parameters']['MgMg_C'] = 0.0
MgO_LewisCatlow['parameters']['MgO_A'] = 821.6
MgO_LewisCatlow['parameters']['MgO_rho'] = 0.3242
MgO_LewisCatlow['parameters']['MgO_C'] = 0.0
MgO_LewisCatlow['parameters']['OO_A'] = 2274.00
MgO_LewisCatlow['parameters']['OO_rho'] = 0.1490
MgO_LewisCatlow['parameters']['OO_C'] = 27.88

MgO_qoi_db_gga = QoiDatabase()
MgO_qoi_db_gga.add_qoi(qoi_name='MgO_NaCl.a0',
                       qoi_type='a11_min_all',
                       structures=OrderedDict([('ideal', 'MgO_NaCl')]),
                       target=4.246)
MgO_qoi_db_gga.add_qoi(qoi_name='MgO_NaCl.c11',
                       qoi_type='c11',
                       structures=OrderedDict([('ideal', 'MgO_NaCl')]),
                       target=277.00)
MgO_qoi_db_gga.add_qoi(qoi_name='MgO_NaCl.c12',
                       qoi_type='c12',
                       structures=OrderedDict([('ideal', 'MgO_NaCl')]),
                       target=91.67)
MgO_qoi_db_gga.add_qoi(qoi_name='MgO_NaCl.c44',
                       qoi_type='c44',
                       structures=OrderedDict([('ideal', 'MgO_NaCl')]),
예제 #22
0
Ni_structure_db['structures']['Ni_fcc'] = 'Ni_fcc.vasp'
Ni_structure_db['structures']['Ni_fcc_111'] = 'Ni_fcc_111.vasp'
Ni_structure_db['structures']['Ni_fcc_110'] = 'Ni_fcc_110.vasp'
Ni_structure_db['structures']['Ni_bcc'] = 'Ni_bcc.vasp'
Ni_structure_db['structures']['Ni_hcp'] = 'Ni_hcp.vasp'
Ni_structure_db['structures']['Ni_sc'] = 'Ni_sc.vasp'
Ni_structure_db['structures']['Ni_fcc_100_s'] = 'Ni_fcc_100_s.vasp'
Ni_structure_db['structures']['Ni_fcc_110_s'] = 'Ni_fcc_110_s.vasp'
Ni_structure_db['structures']['Ni_fcc_111_s'] = 'Ni_fcc_111_s.vasp'
Ni_structure_db['structures']['Ni_fcc_usf'] = 'Ni_fcc_usf.vasp'
Ni_structure_db['structures']['Ni_fcc_ssf'] = 'Ni_fcc_ssf.vasp'

#------------------------------------------------------------------------------
# FITTING DATABASE
#------------------------------------------------------------------------------
Ni_qoi_db = QoiDatabase()
Ni_qoi_db.add_qoi(qoi_name='Ni_fcc.E_coh',
                  qoi_type='Ecoh_min_all',
                  structures=OrderedDict([('ideal', 'Ni_fcc')]),
                  target=-5.7771)
Ni_qoi_db.add_qoi(qoi_name='Ni_fcc.a0',
                  qoi_type='a11_min_all',
                  structures=OrderedDict([('ideal', 'Ni_fcc')]),
                  target=3.508)
Ni_qoi_db.add_qoi(qoi_name='Ni_fcc.c11',
                  qoi_type='c11',
                  structures=OrderedDict([('ideal', 'Ni_fcc')]),
                  target=276.)
Ni_qoi_db.add_qoi(qoi_name='Ni_fcc.c12',
                  qoi_type='c12',
                  structures=OrderedDict([('ideal', 'Ni_fcc')]),
import copy,yaml
from collections import OrderedDict
from pypospack.pyposmat import PyposmatMonteCarloSampler
from pypospack.pyposmat import PyposmatDataFile
from pypospack.pyposmat import PyposmatEngine
from pypospack.pyposmat import PyposmatConfigurationFile
#from pypospack.pyposmat import QoiDatabase
from pypospack.qoi import QoiDatabase
from pypospack.io.filesystem import OrderedDictYAMLLoader  

import MgO

calc_elastic_properties = False
calc_point_defects = True
# <---------------- making a configuration file
MgO_qoi_db = QoiDatabase()
MgO_qoi_db.add_qoi(
        qoi_name='MgO_NaCl.a0',
        qoi_type='a11_min_all',
        structures=OrderedDict([('ideal','MgO_NaCl')]),
        target=4.246)

# <----------------- ELASTIC PROPERTIES
if calc_elastic_properties:
    MgO_qoi_db.add_qoi(
            qoi_name='MgO_NaCl.c11',
            qoi_type='c11',
            structures=OrderedDict([('ideal','MgO_NaCl')]),
            target=277.00)
    MgO_qoi_db.add_qoi(
            qoi_name='MgO_NaCl.c12',
structure_db['structures'][
    'Ni_fcc_110_unit'] = 'Ni_fcc_110_unit.gga.relaxed.vasp'
structure_db['structures'][
    'Ni_fcc_111_unit'] = 'Ni_fcc_111_unit.gga.relaxed.vasp'
structure_db['structures']['Ni_fcc_100_s'] = 'Ni_fcc_100_surf.vasp'
structure_db['structures']['Ni_fcc_110_s'] = 'Ni_fcc_110_surf.vasp'
structure_db['structures']['Ni_fcc_111_s'] = 'Ni_fcc_111_surf.vasp'
structure_db['structures']['Ni_fcc_isf'] = 'Ni_fcc_isf.vasp'
structure_db['structures']['Ni_fcc_esf'] = 'Ni_fcc_esf.vasp'
structure_db['structures']['Ni_fcc_vac'] = 'Ni_fcc_sc_333_vac.vasp'
structure_db['structures']['Ni_fcc_o_int'] = 'Ni_fcc_sc_333_o_int.vasp'
structure_db['structures']['Ni_fcc_i_int'] = 'Ni_fcc_sc_333_t_int.vasp'
#------------------------------------------------------------------------------
# FITTING DATABASE
#------------------------------------------------------------------------------
qoi_db = QoiDatabase()
qoi_db.add_qoi(
    qoi_name='Ni_fcc.E_coh',
    qoi_type='Ecoh_min_all',
    structures=OrderedDict([('ideal', 'Ni_fcc')]),
    target=-4.45  # eV/atom
)
qoi_db.add_qoi(
    qoi_name='Ni_fcc.a0',
    qoi_type='a11_min_all',
    structures=OrderedDict([('ideal', 'Ni_fcc')]),
    target=3.52  # Angs
)
qoi_db.add_qoi(
    qoi_name='Ni_fcc.c11',
    qoi_type='c11',
예제 #25
0
parameter_constraints['OO_C > 0'] = 'OO_C > 0.'
#------------------------------------------------------------------------------
# STRUCTURE DATABASE DEFINITION
#------------------------------------------------------------------------------
structure_db = OrderedDict()
structure_db['structure_directory'] = 'structure_db'
structure_db['structures'] = OrderedDict()
structure_db['structures']['MgO_NaCl'] = 'MgO_NaCl_unit.gga.relax.vasp'
structure_db['structures']['MgO_NaCl_fr_a'] = 'MgO_NaCl_333_fr_a.vasp'
structure_db['structures']['MgO_NaCl_fr_c'] = 'MgO_NaCl_333_fr_c.vasp'
structure_db['structures']['MgO_NaCl_sch'] = 'MgO_NaCl_333_sch.vasp'
structure_db['structures']['MgO_NaCl_001s'] = 'MgO_NaCl_001s.vasp'
#------------------------------------------------------------------------------
# FITTING DATABASE
#------------------------------------------------------------------------------
qoi_db = QoiDatabase()
qoi_db.add_qoi(qoi_name='MgO_NaCl.p11',
               qoi_type='p_11_min_none',
               structures=OrderedDict([('ideal', 'MgO_NaCl')]),
               target=4.246)
#------------------------------------------------------------------------------
# QOI CONSTRAINTS
# QOI constraints are performed in the order they are iterated through in
# in the dictionary.
#
# If you want to implement new constraints, they should be implemented in
# pypospack.pyposmat.data.DataAnalyzer
#     filter_by_qoi_err:
#          key - the qoi_name as in the qoi_db
#          value - the maximum allowable absolute error
#     filter_by_pareto:
from pypospack.task import TaskManager
from pypospack.qoi import QoiDatabase,QoiManager
from pypospack.qoi import StackingFaultEnergyCalculation

NiAl_eam__Mishin2009 = OrderedDict()
NiAl_eam__Mishin2009['potential_type'] = 'eam'
NiAl_eam__Mishin2009['symbols'] = ['Ni,Al']
NiAl_eam__Mishin2009['setfl_filename'] = os.path.join('potential_db','Mishin-Ni-Al-2009.eam.alloy')
NiAl_eam__Mishin2009['reference'] = 'Purja Pun and Y. Mishin (2009).  Phil. Mag., 89(34-36)'

Ni_fcc_isf = OrderedDict()
Ni_fcc_isf['qoi_name'] = 'Ni_fcc.isf'
Ni_fcc_isf['qoi_type'] = 'E_stacking_fault'
Ni_fcc_isf['structures'] = OrderedDict([('defect','Ni_fcc_isf'),('ideal','Ni_fcc_111_unit')])
Ni_fcc_isf['target'] = 100.
Ni_qoi_db = QoiDatabase()
Ni_qoi_db.add_qoi(
        qoi_name=Ni_fcc_isf['qoi_name'],
        qoi_type=Ni_fcc_isf['qoi_type'],
        structures=Ni_fcc_isf['structures'],
        target=Ni_fcc_isf['target'])

Ni_structure_db = OrderedDict()
Ni_structure_db['structure_directory'] = 'structure_db'
Ni_structure_db['structures'] = OrderedDict()
Ni_structure_db['structures']['Ni_fcc_111_unit'] = 'Ni_fcc_111_unit.gga.relaxed.vasp'
Ni_structure_db['structures']['Ni_fcc_isf'] = 'Ni_fcc_isf.vasp'
Ni_structure_db['structures']['Ni_fcc_esf'] = 'Ni_fcc_esf.vasp'
Ni_structure_db['structures']['Ni_fcc_usf'] = 'Ni_fcc_usf.vasp'

예제 #27
0
structure_db = OrderedDict()
structure_db['structure_directory'] = 'structure_db'
structure_db['structures'] = OrderedDict()
structure_db['structures']['Si_dia'] = 'Si_dia_unit.vasp'
structure_db['structures']['Si_vac'] = 'Si_dia_333_vac.vasp'
#  in this case 'Si_dia' is the short name which the rest of the file
#  refers to the structure file which is contained in
#  Si_structures/Si_dia_unit.vasp

#-----------------------------------------------------------------------------
# QOI DEFINITIONS
#-----------------------------------------------------------------------------
# L. Pizzagalli et al, J. J. Phys.: Condens. Matter 25 (2013) 055801
# doi:10.1088/0953-8984/25/5/055801
# reference values from Table 2 and Table 3
qoi_db = QoiDatabase()
qoi_db.add_qoi(qoi_name='Si_dia.a0',
               qoi_type='a11_min_all',
               structures=OrderedDict([('ideal', 'Si_dia')]),
               target=5.43)
qoi_db.add_qoi(qoi_name="Si_dia.c11",
               qoi_type='c11',
               structures=OrderedDict([('ideal', 'Si_dia')]),
               target=166.)
qoi_db.add_qoi(qoi_name='Si_dia.c12',
               qoi_type='c12',
               structures=OrderedDict([('ideal', 'Si_dia')]),
               target=64.00)
qoi_db.add_qoi(qoi_name='Si_dia.c44',
               qoi_type='c44',
               structures=OrderedDict([('ideal', 'Si_dia')]),
예제 #28
0
structure_db['structures'][
    'Ni_fcc_110_unit'] = 'Ni_fcc_110_unit.gga.relaxed.vasp'
structure_db['structures'][
    'Ni_fcc_111_unit'] = 'Ni_fcc_111_unit.gga.relaxed.vasp'
structure_db['structures']['Ni_fcc_100_s'] = 'Ni_fcc_100_surf.vasp'
structure_db['structures']['Ni_fcc_110_s'] = 'Ni_fcc_110_surf.vasp'
structure_db['structures']['Ni_fcc_111_s'] = 'Ni_fcc_111_surf.vasp'
structure_db['structures']['Ni_fcc_isf'] = 'Ni_fcc_isf.vasp'
structure_db['structures']['Ni_fcc_esf'] = 'Ni_fcc_esf.vasp'
structure_db['structures']['Ni_fcc_vac'] = 'Ni_fcc_sc_333_vac.vasp'
structure_db['structures']['Ni_fcc_o_int'] = 'Ni_fcc_sc_333_o_int.vasp'
structure_db['structures']['Ni_fcc_i_int'] = 'Ni_fcc_sc_333_t_int.vasp'
#------------------------------------------------------------------------------
# FITTING DATABASE
#------------------------------------------------------------------------------
qoi_db = QoiDatabase()
qoi_db.add_qoi(qoi_name='Ni_fcc.E_coh',
               qoi_type='Ecoh_min_all',
               structures=OrderedDict([('ideal', 'Ni_fcc')]),
               target=-5.7771)
qoi_db.add_qoi(qoi_name='Ni_fcc.a0',
               qoi_type='a11_min_all',
               structures=OrderedDict([('ideal', 'Ni_fcc')]),
               target=3.508)
qoi_db.add_qoi(qoi_name='Ni_fcc.c11',
               qoi_type='c11',
               structures=OrderedDict([('ideal', 'Ni_fcc')]),
               target=276.)
qoi_db.add_qoi(qoi_name='Ni_fcc.c12',
               qoi_type='c12',
               structures=OrderedDict([('ideal', 'Ni_fcc')]),
예제 #29
0
parameter_constraints['OO_C > 0'] = 'OO_C > 0.'
#------------------------------------------------------------------------------
# STRUCTURE DATABASE DEFINITION
#------------------------------------------------------------------------------
structure_db = OrderedDict()
structure_db['structure_directory'] = _pyposmat_structure_directory
structure_db['structures'] = OrderedDict()
structure_db['structures']['MgO_NaCl'] = 'MgO_NaCl_unit.vasp'
structure_db['structures']['MgO_NaCl_001s'] = 'MgO_NaCl_001s.vasp'
structure_db['structures']['MgO_NaCl_fr_a'] = 'MgO_NaCl_333_fr_a.vasp'
structure_db['structures']['MgO_NaCl_fr_c'] = 'MgO_NaCl_333_fr_c.vasp'
structure_db['structures']['MgO_NaCl_sch'] = 'MgO_NaCl_333_sch.vasp'
#------------------------------------------------------------------------------
# FITTING DATABASE
#------------------------------------------------------------------------------
qoi_db = QoiDatabase()
qoi_db.add_qoi(qoi_name="MgO_NaCl.a0",
               qoi_type="a11_min_all",
               structures=OrderedDict([('ideal', 'MgO_NaCl')]),
               target=4.246)
qoi_db.add_qoi(qoi_name="MgO_NaCl.c11",
               qoi_type="c11",
               structures=OrderedDict([('ideal', 'MgO_NaCl')]),
               target=277.0)
qoi_db.add_qoi(qoi_name="MgO_NaCl.c12",
               qoi_type="c12",
               structures=OrderedDict([('ideal', 'MgO_NaCl')]),
               target=91.67)
qoi_db.add_qoi(qoi_name="MgO_NaCl.c44",
               qoi_type="c44",
               structures=OrderedDict([('ideal', 'MgO_NaCl')]),
import copy, yaml
from collections import OrderedDict
from pypospack.pyposmat import PyposmatMonteCarloSampler
from pypospack.pyposmat import PyposmatDataFile
from pypospack.pyposmat import PyposmatEngine
from pypospack.pyposmat import PyposmatConfigurationFile
#from pypospack.pyposmat import QoiDatabase
from pypospack.qoi import QoiDatabase
from pypospack.io.filesystem import OrderedDictYAMLLoader

import MgO

calc_elastic_properties = False
calc_point_defects = True
# <---------------- making a configuration file
MgO_qoi_db = QoiDatabase()
#MgO_qoi_db.add_qoi(
#        qoi_name='MgO_NaCl.a0',
#        qoi_type='a11_min_all',
#        structures=OrderedDict([('ideal','MgO_NaCl')]),
#        target=4.246)

# <----------------- ELASTIC PROPERTIES
if calc_elastic_properties:
    MgO_qoi_db.add_qoi(qoi_name='MgO_NaCl.c11',
                       qoi_type='c11',
                       structures=OrderedDict([('ideal', 'MgO_NaCl')]),
                       target=277.00)
    MgO_qoi_db.add_qoi(qoi_name='MgO_NaCl.c12',
                       qoi_type='c12',
                       structures=OrderedDict([('ideal', 'MgO_NaCl')]),