Source code for materials.property

"""classes for representing and querying properties of a material."""
import numpy as np

import materials.variation_with_state as vstate


[docs]class Property: """A property of a material.""" def __init__(self, name, yaml_dict): self.name = name self.default_value = yaml_dict['default_value'] self.units = yaml_dict['units'] self.reference = yaml_dict['reference']
[docs] def query_value(self): """Query the value of the property.""" return self.default_value
def __str__(self): return '{:s} = {:.4g} {:s} [Data from {:s}]'.format( self.name, self.query_value(), self.units, self.reference)
[docs]class StateDependentProperty(Property): """A property of a material which depends on state (e.g. temperature).""" def __init__(self, name, yaml_dict): Property.__init__(self, name, yaml_dict) self.variations_with_state = {} for vs_name, vs_subdict in yaml_dict['variations_with_state'].items(): self.variations_with_state[vs_name] = vstate.build_from_yaml(vs_subdict) self.default_state_model = list(self.variations_with_state.keys())[0]
[docs] def query_value(self, state, state_model=None, model_args_dict=None): """Query the value of the property at a particular state.""" if state_model is None: state_model = self.default_state_model if model_args_dict is None: model_args_dict = {} values = self.variations_with_state[state_model].query_value(state, **model_args_dict) if self.variations_with_state[state_model].value_type == 'multiplier': values = self.default_value * values return values
def __getitem__(self, key): """Shorthand for self.variations_with_state[key].""" if key not in self.variations_with_state: raise KeyError( 'This Property does not have a {:s} variations with state model'.format(key) + '\nThe valid keys are {}'.format(self.variations_with_state.keys()) ) return self.variations_with_state[key] def __str__(self): string = '{:s}, a state-dependent property with a default value of {:.4g} {:s}'.format( self.name, self.default_value, self.units) string += '\n\tand with the following variation-with-state models:' for state_model_name in self.variations_with_state: string += '\n - {:s}: {:s}'.format(state_model_name, str(self[state_model_name])) return string