https://mooseframework.inl.gov
Loading...
Searching...
No Matches
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{
28public:
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
121protected:
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
145 const Real _R_specific;
146
147 // properties at critical point (used by IdealRealGasMixtureFluidProperties (primary component))
148 Real _T_c;
149 Real _rho_c;
150 Real _e_c;
151
156
159
162
163 // tolerance for checking monotonicity of T for h(T) & e(T)
164 Real _tol;
165
167 const Function * _e_T;
171 const Function * _k_T;
172
174 Real _min_e;
175 Real _max_e;
176 Real _min_h;
177 Real _max_h;
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
196template <typename CppType>
197CppType
198CaloricallyImperfectGas::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
204template <typename CppType>
205void
206CaloricallyImperfectGas::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
216template <typename CppType>
217Real
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}
DualNumber< Real, DNDerivativeType, true > ADReal
const double mu
const Real p
const double rho
const double T
A calorically imperfect gas fluid property class This fluid property assumes that internal energy is ...
Real _min_temperature
temperature limits when creating lookup tables
const Function * _k_T
Thermal conductivity.
virtual Real e_from_v_h(Real v, Real h) const override
virtual Real p_from_v_e(Real v, Real e) const override
virtual Real s_from_v_e(Real v, Real e) const override
virtual Real c_from_p_T(Real p, Real T) const override
virtual Real cv_from_v_e(Real v, Real e) const override
virtual Real gamma_from_p_T(Real p, Real T) const override
virtual Real rho_from_p_s(Real p, Real s) const override
const bool _out_of_bound_error
Flag to error if out of bounds.
virtual void initialSetup() override
virtual Real mu_from_p_T(Real p, Real T) const override
virtual Real criticalDensity() const override
Critical density.
virtual Real criticalInternalEnergy() const override
Critical specific internal energy.
virtual Real cv_from_T_v(Real T, Real v) const override
virtual void v_e_spndl_from_T(Real T, Real &v, Real &e) const override
Specific internal energy from temperature and specific volume.
virtual Real cp_from_v_e(Real v, Real e) const override
virtual Real e_spndl_from_v(Real v) const override
Specific internal energy from temperature and specific volume.
virtual Real k_from_p_T(Real pressure, Real temperature) const override
virtual Real e_from_p_T(Real p, Real T) const override
const Function * _mu_T
Dynamic viscosity.
Real e_from_T(Real T) const
helper functions for e(T) and h(T), T(e), T(h), cv(T), cp(T)
std::vector< Real > _T_h_lookup
inverse lookup table data
Real _delta_T
temperature interval in lookup tables
virtual Real s_from_T_v(Real T, Real v) const override
virtual Real h_from_p_T(Real p, Real T) const override
propfuncWithDefinitionOverride(e, p, rho)
virtual Real e_from_T_v(Real T, Real v) const override
virtual Real h_from_T_v(Real T, Real v) const override
virtual Real T_from_v_e(Real v, Real e) const override
Real cv_from_T(const CppType &T) const
virtual Real g_from_v_e(Real v, Real e) const override
virtual Real s_from_h_p(Real h, Real p) const override
const Real & _molar_mass
molar mass
static InputParameters validParams()
Real _min_e
internal energy and enthalpy limits when creating lookup tables
virtual Real cv_from_p_T(Real p, Real T) const override
virtual std::string fluidName() const override
Fluid name.
virtual Real T_from_p_h(Real p, Real h) const override
Real _delta_e
step size in internal energy and enthalpy
virtual Real c_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 Real k_from_v_e(Real v, Real e) const override
virtual Real p_from_T_v(Real T, Real v) const override
virtual Real cp_from_p_T(Real p, Real T) const override
virtual Real criticalTemperature() const override
Critical temperature.
void setupLookupTables()
sets up the T(e) reverse lookup table
virtual Real rho_from_p_T(Real p, Real T) const override
virtual Real gamma_from_v_e(Real v, Real e) const override
const Function * _e_T
Internal energy as a function of temperature.
virtual Real molarMass() const override
Molar mass [kg/mol].
virtual Real s_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 mu_from_v_e(Real v, Real e) const override
virtual Real p_from_h_s(Real h, Real s) const override
const Real _R_specific
Specific gas constant (R / molar mass)
virtual Real timeDerivative(Real t, const Point &p) const
const InputParameters & parameters() const
Interface class for producing errors, warnings, or just quiet NaNs.
Common class for single phase fluid properties.
e e e e s T T T T T rho v v T e h
auto raw_value(const Eigen::Map< T > &in)
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real