def load_model(self, model, name=None): """ Loads record contents from a given model. Parameters ---------- model : str or DataModelDict The model contents of the record to load. name : str, optional The name to assign to the record. Often inferred from other attributes if not given. """ # Load universal and subset content super().load_model(model, name=name) calc = self.model[self.modelroot] # Load calculation-specific content run_params = calc['calculation']['run-parameter'] self.thermosteps = run_params['thermosteps'] self.dumpsteps = run_params['dumpsteps'] self.runsteps = run_params['runsteps'] self.equilsteps = run_params['equilsteps'] self.randomseed = run_params['randomseed'] # Load phase-state info self.temperature = uc.value_unit(calc['phase-state']['temperature']) # Load results if self.status == 'finished': self.__nsamples = calc['number-of-measurements'] self.__natoms = calc['number-of-atoms'] mps = calc['measured-phase-state'] self.__measured_temperature = uc.value_unit(mps['temperature']) self.__measured_temperature_std = uc.error_unit(mps['temperature']) self.__measured_pressure_xx = uc.value_unit(mps['pressure-xx']) self.__measured_pressure_xx_std = uc.error_unit(mps['pressure-xx']) self.__measured_pressure_yy = uc.value_unit(mps['pressure-yy']) self.__measured_pressure_yy_std = uc.error_unit(mps['pressure-yy']) self.__measured_pressure_zz = uc.value_unit(mps['pressure-zz']) self.__measured_pressure_zz_std = uc.error_unit(mps['pressure-zz']) self.__potential_energy = uc.value_unit(mps['potential-energy']) self.__potential_energy_std = uc.error_unit( mps['potential-energy']) self.__total_energy = uc.value_unit(mps['total-energy']) self.__total_energy_std = uc.error_unit(mps['total-energy']) dr = calc['diffusion-rate'] self.__d = uc.value_unit(dr['total']) self.__dx = uc.value_unit(dr['x-direction']) self.__dy = uc.value_unit(dr['y-direction']) self.__dz = uc.value_unit(dr['z-direction'])
def todict(self, full=True, flat=False): """ Converts the structured content to a simpler dictionary. Parameters ---------- full : bool, optional Flag used by the calculation records. A True value will include terms for both the calculation's input and results, while a value of False will only include input terms (Default is True). flat : bool, optional Flag affecting the format of the dictionary terms. If True, the dictionary terms are limited to having only str, int, and float values, which is useful for comparisons. If False, the term values can be of any data type, which is convenient for analysis. (Default is False). Returns ------- dict A dictionary representation of the record's content. """ calc = self.content[self.contentroot] params = {} params['key'] = calc['key'] params['script'] = calc['calculation']['script'] params['iprPy_version'] = calc['calculation']['iprPy-version'] params['LAMMPS_version'] = calc['calculation']['LAMMPS-version'] params['thermosteps'] = calc['calculation']['run-parameter'][ 'thermosteps'] params['runsteps'] = calc['calculation']['run-parameter']['runsteps'] params['randomseed'] = calc['calculation']['run-parameter'][ 'randomseed'] sizemults = calc['calculation']['run-parameter']['size-multipliers'] params['potential_LAMMPS_key'] = calc['potential-LAMMPS']['key'] params['potential_LAMMPS_id'] = calc['potential-LAMMPS']['id'] params['potential_key'] = calc['potential-LAMMPS']['potential']['key'] params['potential_id'] = calc['potential-LAMMPS']['potential']['id'] params['load_file'] = calc['system-info']['artifact']['file'] params['load_style'] = calc['system-info']['artifact']['format'] params['load_options'] = calc['system-info']['artifact'][ 'load_options'] params['family'] = calc['system-info']['family'] symbols = aslist(calc['system-info']['symbol']) params['pointdefect_key'] = calc['point-defect']['key'] params['pointdefect_id'] = calc['point-defect']['id'] params['temperature'] = uc.value_unit( calc['phase-state']['temperature']) if flat is True: params['a_mult1'] = sizemults['a'][0] params['a_mult2'] = sizemults['a'][1] params['b_mult1'] = sizemults['b'][0] params['b_mult2'] = sizemults['b'][1] params['c_mult1'] = sizemults['c'][0] params['c_mult2'] = sizemults['c'][1] params['symbols'] = ' '.join(symbols) else: params['sizemults'] = np.array( [sizemults['a'], sizemults['b'], sizemults['c']]) params['symbols'] = symbols params['status'] = calc.get('status', 'finished') params['error'] = calc.get('error', np.nan) if full is True and params['status'] == 'finished': params['measured_temperature'] = uc.value_unit( calc['measured-phase-state']['temperature']) params['measured_pressure_xx'] = uc.value_unit( calc['measured-phase-state']['pressure-xx']) params['measured_pressure_xx_std'] = uc.error_unit( calc['measured-phase-state']['pressure-xx']) params['measured_pressure_yy'] = uc.value_unit( calc['measured-phase-state']['pressure-yy']) params['measured_pressure_yy_std'] = uc.error_unit( calc['measured-phase-state']['pressure-yy']) params['measured_pressure_zz'] = uc.value_unit( calc['measured-phase-state']['pressure-zz']) params['measured_pressure_zz_std'] = uc.error_unit( calc['measured-phase-state']['pressure-zz']) params['measured_potential_energy'] = uc.value_unit( calc['measured-phase-state']['potential-energy']) params['measured_potential_energy_std'] = uc.error_unit( calc['measured-phase-state']['potential-energy']) params['d'] = uc.value_unit(calc['diffusion-rate']['total']) params['dx'] = uc.value_unit(calc['diffusion-rate']['x-direction']) params['dy'] = uc.value_unit(calc['diffusion-rate']['y-direction']) params['dz'] = uc.value_unit(calc['diffusion-rate']['z-direction']) params['natoms'] = calc['number-of-atoms'] return params
def todict(self, full=True, flat=False): """ Converts the structured content to a simpler dictionary. Parameters ---------- full : bool, optional Flag used by the calculation records. A True value will include terms for both the calculation's input and results, while a value of False will only include input terms (Default is True). flat : bool, optional Flag affecting the format of the dictionary terms. If True, the dictionary terms are limited to having only str, int, and float values, which is useful for comparisons. If False, the term values can be of any data type, which is convenient for analysis. (Default is False). Returns ------- dict A dictionary representation of the record's content. """ # Extract universal content params = super().todict(full=full, flat=flat) calc = self.content[self.contentroot] # Extract potential info subset('lammps_potential').todict(calc, params, full=full, flat=flat) # Extract system info subset('atomman_systemload').todict(calc, params, full=full, flat=flat) subset('atomman_systemmanipulate').todict(calc, params, full=full, flat=flat) params['temperature'] = uc.value_unit(calc['phase-state']['temperature']) params['pressure_xx'] = uc.value_unit(calc['phase-state']['pressure-xx']) params['pressure_yy'] = uc.value_unit(calc['phase-state']['pressure-yy']) params['pressure_zz'] = uc.value_unit(calc['phase-state']['pressure-zz']) params['pressure_xy'] = uc.value_unit(calc['phase-state']['pressure-xy']) params['pressure_xz'] = uc.value_unit(calc['phase-state']['pressure-xz']) params['pressure_yz'] = uc.value_unit(calc['phase-state']['pressure-yz']) if full is True and params['status'] == 'finished': params['lx'] = uc.value_unit(calc['measured-box-parameter']['lx']) params['lx_std'] = uc.error_unit(calc['measured-box-parameter']['lx']) params['ly'] = uc.value_unit(calc['measured-box-parameter']['ly']) params['ly_std'] = uc.error_unit(calc['measured-box-parameter']['ly']) params['lz'] = uc.value_unit(calc['measured-box-parameter']['lz']) params['lz_std'] = uc.error_unit(calc['measured-box-parameter']['lz']) params['xy'] = uc.value_unit(calc['measured-box-parameter']['xy']) params['xy_std'] = uc.error_unit(calc['measured-box-parameter']['xy']) params['xz'] = uc.value_unit(calc['measured-box-parameter']['xz']) params['xz_std'] = uc.error_unit(calc['measured-box-parameter']['xz']) params['yz'] = uc.value_unit(calc['measured-box-parameter']['yz']) params['yz_std'] = uc.error_unit(calc['measured-box-parameter']['yz']) params['E_cohesive'] = uc.value_unit(calc['cohesive-energy']) params['E_cohesive_std'] = uc.error_unit(calc['cohesive-energy']) params['measured_temperature'] = uc.value_unit(calc['measured-phase-state']['temperature']) params['measured_pressure_xx'] = uc.value_unit(calc['measured-phase-state']['pressure-xx']) params['measured_pressure_xx_std'] = uc.error_unit(calc['measured-phase-state']['pressure-xx']) params['measured_pressure_yy'] = uc.value_unit(calc['measured-phase-state']['pressure-yy']) params['measured_pressure_yy_std'] = uc.error_unit(calc['measured-phase-state']['pressure-yy']) params['measured_pressure_zz'] = uc.value_unit(calc['measured-phase-state']['pressure-zz']) params['measured_pressure_zz_std'] = uc.error_unit(calc['measured-phase-state']['pressure-zz']) params['measured_pressure_xy'] = uc.value_unit(calc['measured-phase-state']['pressure-xy']) params['measured_pressure_xy_std'] = uc.error_unit(calc['measured-phase-state']['pressure-xy']) params['measured_pressure_xz'] = uc.value_unit(calc['measured-phase-state']['pressure-xz']) params['measured_pressure_xz_std'] = uc.error_unit(calc['measured-phase-state']['pressure-xz']) params['measured_pressure_yz'] = uc.value_unit(calc['measured-phase-state']['pressure-yz']) params['measured_pressure_xyz_std'] = uc.error_unit(calc['measured-phase-state']['pressure-yz']) return params
def todict(self, full=True, flat=False): """ Converts the structured content to a simpler dictionary. Parameters ---------- full : bool, optional Flag used by the calculation records. A True value will include terms for both the calculation's input and results, while a value of False will only include input terms (Default is True). flat : bool, optional Flag affecting the format of the dictionary terms. If True, the dictionary terms are limited to having only str, int, and float values, which is useful for comparisons. If False, the term values can be of any data type, which is convenient for analysis. (Default is False). Returns ------- dict A dictionary representation of the record's content. """ calc = self.content[self.contentroot] params = {} params['key'] = calc['key'] params['script'] = calc['calculation']['script'] params['iprPy_version'] = calc['calculation']['iprPy-version'] params['LAMMPS_version'] = calc['calculation']['LAMMPS-version'] params['thermosteps']= calc['calculation']['run-parameter']['thermosteps'] params['runsteps'] = calc['calculation']['run-parameter']['runsteps'] params['randomseed'] = calc['calculation']['run-parameter']['randomseed'] sizemults = calc['calculation']['run-parameter']['size-multipliers'] params['potential_LAMMPS_key'] = calc['potential-LAMMPS']['key'] params['potential_LAMMPS_id'] = calc['potential-LAMMPS']['id'] params['potential_key'] = calc['potential-LAMMPS']['potential']['key'] params['potential_id'] = calc['potential-LAMMPS']['potential']['id'] params['load_file'] = calc['system-info']['artifact']['file'] params['load_style'] = calc['system-info']['artifact']['format'] params['load_options'] = calc['system-info']['artifact']['load_options'] params['family'] = calc['system-info']['family'] symbols = aslist(calc['system-info']['symbol']) params['pointdefect_key'] = calc['point-defect']['key'] params['pointdefect_id'] = calc['point-defect']['id'] params['temperature'] = uc.value_unit(calc['phase-state']['temperature']) if flat is True: params['a_mult1'] = sizemults['a'][0] params['a_mult2'] = sizemults['a'][1] params['b_mult1'] = sizemults['b'][0] params['b_mult2'] = sizemults['b'][1] params['c_mult1'] = sizemults['c'][0] params['c_mult2'] = sizemults['c'][1] params['symbols'] = ' '.join(symbols) else: params['sizemults'] = np.array([sizemults['a'], sizemults['b'], sizemults['c']]) params['symbols'] = symbols params['status'] = calc.get('status', 'finished') params['error'] = calc.get('error', np.nan) if full is True and params['status'] == 'finished': params['measured_temperature'] = uc.value_unit(calc['measured-phase-state']['temperature']) params['measured_pressure_xx'] = uc.value_unit(calc['measured-phase-state']['pressure-xx']) params['measured_pressure_xx_std'] = uc.error_unit(calc['measured-phase-state']['pressure-xx']) params['measured_pressure_yy'] = uc.value_unit(calc['measured-phase-state']['pressure-yy']) params['measured_pressure_yy_std'] = uc.error_unit(calc['measured-phase-state']['pressure-yy']) params['measured_pressure_zz'] = uc.value_unit(calc['measured-phase-state']['pressure-zz']) params['measured_pressure_zz_std'] = uc.error_unit(calc['measured-phase-state']['pressure-zz']) params['measured_potential_energy'] = uc.value_unit(calc['measured-phase-state']['potential-energy']) params['measured_potential_energy_std'] = uc.error_unit(calc['measured-phase-state']['potential-energy']) params['d'] = uc.value_unit(calc['diffusion-rate']['total']) params['dx'] = uc.value_unit(calc['diffusion-rate']['x-direction']) params['dy'] = uc.value_unit(calc['diffusion-rate']['y-direction']) params['dz'] = uc.value_unit(calc['diffusion-rate']['z-direction']) params['natoms'] = calc['number-of-atoms'] return params