Source code for pyrk.density_model

from utilities.ur import units


[docs]class DensityModel(object): """ This class has a public api supporting just one function, rho(temp). If the temperature is irrelevant to the model, so be it. TODO: It would be great to implement a model that handles dpa. """ def __init__(self, a=0*units.kg/units.meter**3, b=0*units.kg/units.kelvin/units.meter**3, model="linear"): """ Initializes the DensityModel object. :param model: The keyword for a model type. :type model: string :param a: first coefficient of the model :type a: float. :param b: second coefficient of the model. :type b: float """ self.a = a self.b = b self.implemented = {'constant': self.constant, 'linear': self.linear} if model in self.implemented.keys(): self.model = model else: self.model = NotImplemented msg = "Density model type " msg += model msg += " is not an implemented density model. Options are:" for m in self.implemented.keys(): msg += m raise ValueError(msg)
[docs] def rho(self, temp=0*units.kelvin): """ Returns the density based on the temperature and the irradiation. :param temp: the temperature :type temp: float. """ return self.implemented[self.model](temp)
[docs] def constant(self, temp=0*units.kelvin): """ Returns a constant density, a. :param temp: The temperature of the object :type temp: float. """ return self.a.to(units.kg/pow(units.meter, 3))
[docs] def linear(self, temp=0.0*units.kelvin): """ Returns a linear dependence on temperature ($ a + b*temp$) . :param temp: The temperature of the object :type temp: float. units of kelvin """ ret = self.a + self.b*temp return ret.to(units.kg/pow(units.meter, 3))