Source code for mechmat.properties.specific_volume.twodomaintaitpvt

from mechcite import cite
from mechmat import ureg
from mechmat.core.chainable import Chainable, Guarded
from mechmat.principal import twodomaintaitpvt

[docs]class TwoDomainTaitpvT(Chainable): r""" The modified 2-domain Tait pvT model is used to determine the density of the material as a function of the temperature and pressure. This variation impacts on many aspects of the flow simulation. The 2-domain Tait pvT model is given by the following equations: .. math:: v(T, p)=v_{0}(T)\left[1-C \ln \left(1+\frac{p}{B(T)}\right)\right]+v_{t}(T, p) where: * :math:`v(T, p)` is the specific geometry at temperature and pressure * :math:`v_0` is the specific geometry at zero gauge pressure * :math:`T` is the temperature * :math:`p` is the pressure * :math:`C` is a constant * :math:`B` accounts for the pressure sensitivity of the material The input for fully specified state: * b_1s * b_1m * b_2s * b_2m * b_3s * b_3m * b_4s * b_4m * b_5 * b_6 * b_7 * b_8 * b_9 * temperature * pressure """ @cite('osswald_polymer_2006') def __init__(self, **kwargs): super(TwoDomainTaitpvT, self).__init__(**kwargs) self.temperature_transition = self.temperature_transition # need for initialization of material state self.set_guard('_B', ureg.Pa) self.link_attr('_B', twodomaintaitpvt.get_B, T='temperature', b_3='_b_3', b_4='_b_4', b_5='b_5') self.set_guard('b_1s', ureg.m ** 3 / ureg.kg) self.set_guard('b_1m', ureg.m ** 3 / ureg.kg) self.set_guard('_b_1', ureg.m ** 3 / ureg.kg) self.link_attr('_b_1', twodomaintaitpvt.switch_m_s, T='temperature', T_t='temperature_transition', s='b_1s', m='b_1m') self.set_guard('b_2s', ureg.m ** 3 / (ureg.kg * ureg.K)) self.set_guard('b_2m', ureg.m ** 3 / (ureg.kg * ureg.K)) self.set_guard('_b_2', ureg.m ** 3 / (ureg.kg * ureg.K)) self.link_attr('_b_2', twodomaintaitpvt.switch_m_s, T='temperature', T_t='temperature_transition', s='b_2s', m='b_2m') self.set_guard('b_3s', ureg.Pa) self.set_guard('b_3m', ureg.Pa) self.set_guard('_b_3', ureg.Pa) self.link_attr('_b_3', twodomaintaitpvt.switch_m_s, T='temperature', T_t='temperature_transition', s='b_3s', m='b_3m') self.set_guard('b_4s', ureg.K ** -1) self.set_guard('b_4m', ureg.K ** -1) self.set_guard('_b_4', ureg.K ** -1) self.link_attr('_b_4', twodomaintaitpvt.switch_m_s, T='temperature', T_t='temperature_transition', s='b_4s', m='b_4m') self.set_guard('b_5', ureg.K) self.set_guard('b_6', ureg.K / ureg.Pa) self.set_guard('b_7', ureg.m ** 3 / ureg.kg) self.set_guard('b_8', ureg.K ** -1) self.set_guard('b_9', ureg.Pa ** -1) self.set_guard('specific_volume_zero_gauge_pressure', ureg.m ** 3 / ureg.kg) self.link_attr('specific_volume_zero_gauge_pressure', twodomaintaitpvt.get_v_0, T='temperature', b_1='_b_1', b_2='_b_2', b_5='b_5') self.set_guard('specific_volume_transition_temperature', ureg.m ** 3 / ureg.kg) self.link_attr('specific_volume_transition_temperature', twodomaintaitpvt.get_v_t, p='pressure', T='temperature', T_t='temperature_transition', b_5='b_5', b_7='b_7', b_8='b_8', b_9='b_9') self.link_attr('specific_volume', twodomaintaitpvt.get_specific_volume, p='pressure', v_0='specific_volume_zero_gauge_pressure', v_t='specific_volume_transition_temperature', B='_B') self.set_guard('temperature_transition', ureg.degC) self.link_attr('temperature_transition', twodomaintaitpvt.get_T_t, p='pressure', b_5='b_5', b_6='b_6') _B = Guarded() b_1s = Guarded() b_1m = Guarded() _b_1 = Guarded() b_2s = Guarded() b_2m = Guarded() _b_2 = Guarded() b_3m = Guarded() b_3s = Guarded() _b_3 = Guarded() b_4m = Guarded() b_4s = Guarded() _b_4 = Guarded() b_5 = Guarded() b_6 = Guarded() b_7 = Guarded() b_8 = Guarded() b_9 = Guarded() specific_volume_zero_gauge_pressure = Guarded() specific_volume_transition_temperature = Guarded() temperature_transition = Guarded()