https://mooseframework.inl.gov
CaloricallyImperfectGas.h
Go to the documentation of this file.
1 //* This file is part of the MOOSE framework
2 //* https://mooseframework.inl.gov
3 //*
4 //* All rights reserved, see COPYRIGHT for full restrictions
5 //* https://github.com/idaholab/moose/blob/master/COPYRIGHT
6 //*
7 //* Licensed under LGPL 2.1, please see LICENSE for details
8 //* https://www.gnu.org/licenses/lgpl-2.1.html
9 
10 #pragma once
11 
13 #include "NaNInterface.h"
14 #include "Function.h"
15 
16 #pragma GCC diagnostic push
17 #pragma GCC diagnostic ignored "-Woverloaded-virtual"
18 
27 {
28 public:
30 
32 
33  virtual void initialSetup() override;
34 
35  virtual Real p_from_v_e(Real v, Real e) const override;
36  virtual ADReal p_from_v_e(const ADReal & v, const ADReal & e) const override;
37  virtual void p_from_v_e(Real v, Real e, Real & p, Real & dp_dv, Real & dp_de) const override;
38  virtual Real T_from_v_e(Real v, Real e) const override;
39  virtual ADReal T_from_v_e(const ADReal & v, const ADReal & e) const override;
40  virtual void T_from_v_e(Real v, Real e, Real & T, Real & dT_dv, Real & dT_de) const override;
41 
42  virtual Real cp_from_v_e(Real v, Real e) const override;
43  virtual void cp_from_v_e(Real v, Real e, Real & cp, Real & dcp_dv, Real & dcp_de) const override;
44  virtual Real cv_from_v_e(Real v, Real e) const override;
45  virtual ADReal cv_from_v_e(ADReal v, ADReal e) const;
46  virtual void cv_from_v_e(Real v, Real e, Real & cv, Real & dcv_dv, Real & dcv_de) const override;
47  virtual Real mu_from_v_e(Real v, Real e) const override;
48  virtual void mu_from_v_e(Real v, Real e, Real & mu, Real & dmu_dv, Real & dmu_de) const override;
49  virtual Real k_from_v_e(Real v, Real e) const override;
50  virtual void k_from_v_e(Real v, Real e, Real & k, Real & dk_dv, Real & dk_de) const override;
51  virtual Real s_from_v_e(Real v, Real e) const override;
52  virtual void s_from_v_e(Real v, Real e, Real & s, Real & ds_dv, Real & ds_de) const override;
53  virtual Real s_from_p_T(Real p, Real T) const override;
54  virtual void s_from_p_T(Real p, Real T, Real & s, Real & ds_dp, Real & ds_dT) const override;
55  virtual Real s_from_h_p(Real h, Real p) const override;
56  virtual void s_from_h_p(Real h, Real p, Real & s, Real & ds_dh, Real & ds_dp) const override;
57  virtual Real rho_from_p_s(Real p, Real s) const override;
58  virtual Real e_from_v_h(Real v, Real h) const override;
59  virtual void e_from_v_h(Real v, Real h, Real & e, Real & de_dv, Real & de_dh) const override;
60  virtual Real rho_from_p_T(Real p, Real T) const override;
61  virtual ADReal rho_from_p_T(const ADReal & p, const ADReal & T) const override;
62  virtual void
63  rho_from_p_T(Real p, Real T, Real & rho, Real & drho_dp, Real & drho_dT) const override;
64  virtual void rho_from_p_T(const ADReal & p,
65  const ADReal & T,
66  ADReal & rho,
67  ADReal & drho_dp,
68  ADReal & drho_dT) const override;
70  virtual Real e_from_T_v(Real T, Real v) const override;
71  virtual void e_from_T_v(Real T, Real v, Real & e, Real & de_dT, Real & de_dv) const override;
72  virtual ADReal e_from_T_v(const ADReal & T, const ADReal & v) const override;
73  virtual Real p_from_T_v(Real T, Real v) const override;
74  virtual void p_from_T_v(Real T, Real v, Real & p, Real & dp_dT, Real & dp_dv) const override;
75  virtual Real h_from_T_v(Real T, Real v) const override;
76  virtual void h_from_T_v(Real T, Real v, Real & h, Real & dh_dT, Real & dh_dv) const override;
77  virtual Real s_from_T_v(Real T, Real v) const override;
78  virtual void s_from_T_v(Real T, Real v, Real & s, Real & ds_dT, Real & ds_dv) const override;
79  virtual Real cv_from_T_v(Real T, Real v) const override;
80  virtual Real e_spndl_from_v(Real v) const override;
81  virtual void v_e_spndl_from_T(Real T, Real & v, Real & e) const override;
82  virtual Real h_from_p_T(Real p, Real T) const override;
83  virtual void h_from_p_T(Real p, Real T, Real & h, Real & dh_dp, Real & dh_dT) const override;
84  virtual Real e_from_p_T(Real p, Real T) const override;
85  virtual ADReal e_from_p_T(ADReal p, ADReal T) const;
86  virtual void e_from_p_T(Real p, Real T, Real & e, Real & de_dp, Real & de_dT) const override;
87  virtual Real T_from_p_h(Real p, Real h) const override;
88  virtual void T_from_p_h(Real p, Real h, Real & T, Real & dT_dp, Real & dT_dh) const override;
89  virtual Real cv_from_p_T(Real p, Real T) const override;
90  virtual void cv_from_p_T(Real p, Real T, Real & cv, Real & dcv_dp, Real & dcv_dT) const override;
91  virtual Real cp_from_p_T(Real p, Real T) const override;
92  virtual void cp_from_p_T(Real p, Real T, Real & cp, Real & dcp_dp, Real & dcp_dT) const override;
93  virtual Real mu_from_p_T(Real p, Real T) const override;
94  virtual void mu_from_p_T(Real p, Real T, Real & mu, Real & dmu_dp, Real & dmu_dT) const override;
95  virtual Real k_from_p_T(Real pressure, Real temperature) const override;
96  virtual void
97  k_from_p_T(Real pressure, Real temperature, Real & k, Real & dk_dp, Real & dk_dT) const override;
98  virtual std::string fluidName() const override;
99  virtual Real molarMass() const override;
100  virtual Real criticalTemperature() const override;
101  virtual Real criticalDensity() const override;
102  virtual Real criticalInternalEnergy() const override;
103  virtual Real gamma_from_v_e(Real v, Real e) const override;
104  virtual ADReal gamma_from_v_e(ADReal v, ADReal e) const;
105  virtual void
106  gamma_from_v_e(Real v, Real e, Real & gamma, Real & dgamma_dv, Real & dgamma_de) const override;
107  virtual Real gamma_from_p_T(Real p, Real T) const override;
108  virtual ADReal gamma_from_p_T(ADReal p, ADReal T) const;
109  virtual void
110  gamma_from_p_T(Real p, Real T, Real & gamma, Real & dgamma_dp, Real & dgamma_dT) const override;
111  virtual Real g_from_v_e(Real v, Real e) const override;
112  virtual Real p_from_h_s(Real h, Real s) const override;
113  virtual void p_from_h_s(Real h, Real s, Real & p, Real & dp_dh, Real & dp_ds) const override;
114  virtual Real c_from_v_e(Real v, Real e) const override;
115  virtual ADReal c_from_v_e(const ADReal & v, const ADReal & e) const override;
116  virtual void c_from_v_e(Real v, Real e, Real & c, Real & dc_dv, Real & dc_de) const override;
117  virtual Real c_from_p_T(Real p, Real T) const override;
118  virtual ADReal c_from_p_T(const ADReal & p, const ADReal & T) const override;
119  virtual void c_from_p_T(Real /*p*/, Real T, Real & c, Real & dc_dp, Real & dc_dT) const override;
120 
121 protected:
123  void setupLookupTables();
124 
126  void outOfBounds(const std::string & function, Real value, Real min, Real max) const;
127 
129  Real e_from_T(Real T) const;
130  Real h_from_T(Real T) const;
131  Real T_from_e(Real e) const;
132  Real T_from_h(Real h) const;
133  template <typename CppType>
134  Real cv_from_T(const CppType & T) const;
135  Real cp_from_T(Real T) const;
136  void cv_from_T(Real T, Real & cv, Real & dcv_dT) const;
137  void cp_from_T(Real T, Real & cp, Real & dcp_dT) const;
138  Real Z_from_T(Real T) const;
140 
142  const Real & _molar_mass;
143 
146 
147  // properties at critical point (used by IdealRealGasMixtureFluidProperties (primary component))
151 
156 
159 
162 
163  // tolerance for checking monotonicity of T for h(T) & e(T)
165 
167  const Function * _e_T;
169  const Function * _mu_T;
171  const Function * _k_T;
172 
179 
184 
186  std::vector<Real> _T_h_lookup;
187  std::vector<Real> _T_e_lookup;
189 
191  std::vector<Real> _Z_T_lookup;
192 };
193 
194 #pragma GCC diagnostic pop
195 
196 template <typename CppType>
197 CppType
198 CaloricallyImperfectGas::e_from_p_rho_template(const CppType & p, const CppType & rho) const
199 {
200  CppType T = p / (rho * _R_specific);
201  return e_from_p_T(p, T);
202 }
203 
204 template <typename CppType>
205 void
206 CaloricallyImperfectGas::e_from_p_rho_template(
207  const CppType & p, const CppType & rho, CppType & e, CppType & de_dp, CppType & de_drho) const
208 {
209  CppType T = p / (rho * _R_specific);
210  e = e_from_p_rho_template(p, rho);
211  CppType cv = cv_from_T(T);
212  de_dp = cv / (rho * _R_specific);
213  de_drho = -cv * p / (rho * rho * _R_specific);
214 }
215 
216 template <typename CppType>
217 Real
218 CaloricallyImperfectGas::cv_from_T(const CppType & T) const
219 {
220  const auto raw_T = MetaPhysicL::raw_value(T);
221  if (raw_T < _min_temperature || raw_T > _max_temperature)
222  outOfBounds("cv_from_T", raw_T, _min_temperature, _max_temperature);
223 
224  return _e_T->timeDerivative(raw_T, Point());
225 }
virtual void initialSetup() override
static const std::string cv
Definition: NS.h:122
virtual Real mu_from_p_T(Real p, Real T) const override
A calorically imperfect gas fluid property class This fluid property assumes that internal energy is ...
CaloricallyImperfectGas(const InputParameters &parameters)
virtual Real cv_from_T_v(Real T, Real v) const override
virtual Real criticalInternalEnergy() const override
Critical specific internal energy.
virtual Real p_from_h_s(Real h, Real s) const override
virtual Real e_from_v_h(Real v, Real h) const override
virtual Real timeDerivative(Real t, const Point &p) const
virtual Real cp_from_p_T(Real p, Real T) const override
Real _min_e
internal energy and enthalpy limits when creating lookup tables
const bool _out_of_bound_error
Flag to error if out of bounds.
Real _delta_e
step size in internal energy and enthalpy
virtual Real h_from_T_v(Real T, Real v) const override
virtual Real gamma_from_v_e(Real v, Real e) const override
void outOfBounds(const std::string &function, Real value, Real min, Real max) const
function that handles exceeding parameter limits
virtual void v_e_spndl_from_T(Real T, Real &v, Real &e) const override
Specific internal energy from temperature and specific volume.
auto raw_value(const Eigen::Map< T > &in)
virtual Real molarMass() const override
Molar mass [kg/mol].
virtual Real T_from_p_h(Real p, Real h) const override
virtual Real criticalDensity() const override
Critical density.
virtual Real rho_from_p_s(Real p, Real s) const override
static const std::string temperature
Definition: NS.h:59
virtual Real mu_from_v_e(Real v, Real e) const override
virtual Real g_from_v_e(Real v, Real e) const override
DualNumber< Real, DNDerivativeType, true > ADReal
virtual Real k_from_v_e(Real v, Real e) const override
auto max(const L &left, const R &right)
virtual Real cv_from_v_e(Real v, Real e) const override
static InputParameters validParams()
Real e_from_T(Real T) const
helper functions for e(T) and h(T), T(e), T(h), cv(T), cp(T)
virtual Real k_from_p_T(Real pressure, Real temperature) const override
virtual Real criticalTemperature() const override
Critical temperature.
static const std::string cp
Definition: NS.h:121
e e e e s T T T T T rho v v T e h
virtual Real T_from_v_e(Real v, Real e) const override
virtual std::string fluidName() const override
Fluid name.
Real value(unsigned n, unsigned alpha, unsigned beta, Real x)
const Function * _k_T
Thermal conductivity.
virtual Real s_from_p_T(Real p, Real T) const override
static const std::string mu
Definition: NS.h:123
Real cv_from_T(const CppType &T) const
virtual Real e_spndl_from_v(Real v) const override
Specific internal energy from temperature and specific volume.
void setupLookupTables()
sets up the T(e) reverse lookup table
std::vector< Real > _T_h_lookup
inverse lookup table data
virtual Real e_from_p_T(Real p, Real T) const override
virtual Real e_from_T_v(Real T, Real v) const override
Common class for single phase fluid properties.
const Function * _mu_T
Dynamic viscosity.
virtual Real cp_from_v_e(Real v, Real e) const override
virtual Real rho_from_p_T(Real p, Real T) const override
virtual Real c_from_v_e(Real v, Real e) const override
virtual Real s_from_v_e(Real v, Real e) const override
const Function * _e_T
Internal energy as a function of temperature.
virtual Real h_from_p_T(Real p, Real T) const override
virtual Real p_from_T_v(Real T, Real v) const override
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
Real _delta_T
temperature interval in lookup tables
virtual Real p_from_v_e(Real v, Real e) const override
static const std::string pressure
Definition: NS.h:56
const InputParameters & parameters() const
virtual Real gamma_from_p_T(Real p, Real T) const override
virtual Real s_from_h_p(Real h, Real p) const override
propfuncWithDefinitionOverride(e, p, rho)
const Real & _molar_mass
molar mass
Interface class for producing errors, warnings, or just quiet NaNs.
Definition: NaNInterface.h:22
Real _min_temperature
temperature limits when creating lookup tables
auto min(const L &left, const R &right)
const Real _R_specific
Specific gas constant (R / molar mass)
static const std::string k
Definition: NS.h:130
virtual Real s_from_T_v(Real T, Real v) const override
virtual Real cv_from_p_T(Real p, Real T) const override
std::vector< Real > _Z_T_lookup
Z(T) lookup table on uniform grid between _min_temperature and _max_temperature.
virtual Real c_from_p_T(Real p, Real T) const override