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']
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)
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)
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')
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
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')]),
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',
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(
def __init_QoiDatabase_from_None(self): self.qoidb = QoiDatabase()
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')]),
# 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')]),
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.)
#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',
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',
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
def __init_QoiDatabase_from_OrderedDict(self, qoi_database_OrderedDict): assert isinstance(qoi_database_OrderedDict, OrderedDict) self.qoidb = QoiDatabase(qoi_database_OrderedDict)
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)
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 * '-')
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')]),
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',
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'
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')]),
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')]),
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')]),