コード例 #1
0
    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'])
コード例 #2
0
    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
コード例 #3
0
 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
コード例 #4
0
    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