https://mooseframework.inl.gov
Loading...
Searching...
No Matches
StiffenedGasFluidProperties.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
15#pragma GCC diagnostic push
16#pragma GCC diagnostic ignored "-Woverloaded-virtual"
17
22{
23public:
25
28
29 virtual Real c_from_v_e(Real v, Real e) const override;
30 virtual void c_from_v_e(Real v, Real e, Real & c, Real & dc_dv, Real & dc_de) const override;
31 virtual Real cp_from_v_e(Real v, Real e) const override;
32 virtual void cp_from_v_e(Real v, Real e, Real & cp, Real & dcp_dv, Real & dcp_de) const override;
33 virtual Real cv_from_v_e(Real v, Real e) const override;
34 virtual void cv_from_v_e(Real v, Real e, Real & cv, Real & dcv_dv, Real & dcv_de) const override;
35 virtual Real mu_from_v_e(Real v, Real e) const override;
36 virtual void mu_from_v_e(Real v, Real e, Real & mu, Real & dmu_dv, Real & dmu_de) const override;
37 virtual Real k_from_v_e(Real v, Real e) const override;
38 virtual void k_from_v_e(Real v, Real e, Real & k, Real & dk_dv, Real & dk_de) const override;
39 virtual Real s_from_h_p(Real h, Real p) const override;
40 virtual void s_from_h_p(Real h, Real p, Real & s, Real & ds_dh, Real & ds_dp) const override;
41 virtual Real rho_from_p_s(Real p, Real s) const override;
42 virtual void
43 rho_from_p_s(Real p, Real s, Real & rho, Real & drho_dp, Real & drho_ds) const override;
51 virtual Real e_from_T_v(Real T, Real v) const override;
52 virtual void e_from_T_v(Real T, Real v, Real & e, Real & de_dT, Real & de_dv) const override;
53 virtual Real p_from_T_v(Real T, Real v) const override;
54 virtual void p_from_T_v(Real T, Real v, Real & p, Real & dp_dT, Real & dp_dv) const override;
55 virtual Real h_from_T_v(Real T, Real v) const override;
56 virtual void h_from_T_v(Real T, Real v, Real & h, Real & dh_dT, Real & dh_dv) const override;
57 virtual Real s_from_T_v(Real T, Real v) const override;
58 virtual void s_from_T_v(Real T, Real v, Real & s, Real & ds_dT, Real & ds_dv) const override;
59 virtual Real cv_from_T_v(Real T, Real v) const override;
60 virtual Real e_spndl_from_v(Real v) const override;
61 virtual void v_e_spndl_from_T(Real T, Real & v, Real & e) const override;
62 virtual Real e_from_v_h(Real v, Real h) const override;
63 virtual void e_from_v_h(Real v, Real h, Real & e, Real & de_dv, Real & de_dh) const override;
64 virtual Real h_from_p_T(Real p, Real T) const override;
65 virtual void h_from_p_T(Real p, Real T, Real & h, Real & dh_dp, Real & dh_dT) const override;
66 virtual Real e_from_p_T(Real p, Real T) const override;
67 virtual void e_from_p_T(Real p, Real T, Real & e, Real & de_dp, Real & de_dT) const override;
68 virtual Real p_from_h_s(Real h, Real s) const override;
69 virtual void p_from_h_s(Real h, Real s, Real & p, Real & dp_dh, Real & dp_ds) const override;
70 virtual Real g_from_v_e(Real v, Real e) const override;
71 virtual Real molarMass() const override;
72 virtual Real criticalTemperature() const override;
73 virtual Real criticalDensity() const override;
74 virtual Real criticalInternalEnergy() const override;
75 virtual Real cv_from_p_T(Real p, Real T) const override;
76 virtual void cv_from_p_T(Real p, Real T, Real & cv, Real & dcv_dp, Real & dcv_dT) const override;
77 virtual Real cp_from_p_T(Real p, Real T) const override;
78 virtual void cp_from_p_T(Real p, Real T, Real & cp, Real & dcp_dp, Real & dcp_dT) const override;
79 virtual Real mu_from_p_T(Real p, Real T) const override;
80 virtual void mu_from_p_T(Real p, Real T, Real & mu, Real & dmu_dp, Real & dmu_dT) const override;
81 virtual Real k_from_p_T(Real p, Real T) const override;
82 virtual void k_from_p_T(Real p, Real T, Real & k, Real & dk_dp, Real & dk_dT) const override;
83 virtual Real beta_from_p_T(Real p, Real T) const override;
84 virtual void
85 beta_from_p_T(Real p, Real T, Real & beta, Real & dbeta_dp, Real & dbeta_dT) const override;
86
87 virtual Real c2_from_p_rho(Real pressure, Real rho) const;
88
89 virtual Real pp_sat_from_p_T(Real /*p*/, Real /*T*/) const override;
90
91protected:
93
94 Real _gamma;
95 Real _cv;
96 Real _q;
98 Real _p_inf;
99 Real _cp;
100
101 Real _mu;
102 Real _k;
104 // properties at critical point
105 Real _T_c;
106 Real _rho_c;
107 Real _e_c;
108};
109
110#pragma GCC diagnostic pop
111
112template <typename CppType>
113CppType
114StiffenedGasFluidProperties::rho_from_p_T_template(const CppType & p, const CppType & T) const
115{
116 mooseAssert(((_gamma - 1.0) * _cv * T) != 0.0, "Invalid gamma or cv or temperature detected!");
117 CppType rho = (p + _p_inf) / ((_gamma - 1.0) * _cv * T);
118 if (!_allow_nonphysical_states && rho <= 0.)
119 return getNaN();
120 else
121 return rho;
122}
123
124template <typename CppType>
125void
126StiffenedGasFluidProperties::rho_from_p_T_template(
127 const CppType & p, const CppType & T, CppType & rho, CppType & drho_dp, CppType & drho_dT) const
128{
129 mooseAssert(((_gamma - 1.0) * _cv * T) != 0.0, "Invalid gamma or cv or temperature detected!");
130 rho = (p + _p_inf) / ((_gamma - 1.0) * _cv * T);
131 if (!_allow_nonphysical_states && rho <= 0.)
132 {
133 drho_dp = getNaN();
134 drho_dT = getNaN();
135 }
136 else
137 {
138 drho_dp = 1. / ((_gamma - 1.0) * _cv * T);
139 drho_dT = -(p + _p_inf) / ((_gamma - 1.0) * _cv * T * T);
140 }
141}
142
143template <typename CppType>
144CppType
145StiffenedGasFluidProperties::e_from_p_rho_template(const CppType & p, const CppType & rho) const
146{
147 mooseAssert((_gamma - 1.0) * rho != 0., "Invalid gamma or density detected!");
148 return (p + _gamma * _p_inf) / ((_gamma - 1.0) * rho) + _q;
149}
150
151template <typename CppType>
152void
153StiffenedGasFluidProperties::e_from_p_rho_template(
154 const CppType & p, const CppType & rho, CppType & e, CppType & de_dp, CppType & de_drho) const
155{
156 e = e_from_p_rho_template(p, rho);
157 de_dp = 1.0 / ((_gamma - 1.0) * rho);
158 de_drho = -(p + _gamma * _p_inf) / ((_gamma - 1.0) * rho * rho);
159}
160
161template <typename CppType>
162CppType
163StiffenedGasFluidProperties::T_from_v_e_template(const CppType & v, const CppType & e) const
164{
165 return (1.0 / _cv) * (e - _q - _p_inf * v);
166}
167
168template <typename CppType>
169void
170StiffenedGasFluidProperties::T_from_v_e_template(
171 const CppType & v, const CppType & e, CppType & T, CppType & dT_dv, CppType & dT_de) const
172{
173 T = T_from_v_e_template(v, e);
174 dT_dv = -_p_inf / _cv;
175 dT_de = 1.0 / _cv;
176}
177
178template <typename CppType>
179CppType
180StiffenedGasFluidProperties::T_from_p_h_template(const CppType & /*p*/, const CppType & h) const
181{
182 return (1.0 / _cv) * (h - _q) / _gamma;
183}
184
185template <typename CppType>
186void
187StiffenedGasFluidProperties::T_from_p_h_template(
188 const CppType & p, const CppType & h, CppType & T, CppType & dT_dp, CppType & dT_dh) const
189{
190 T = T_from_p_h_template(p, h);
191 dT_dp = 0;
192 dT_dh = 1.0 / _cv / _gamma;
193}
194
195template <typename CppType>
196CppType
197StiffenedGasFluidProperties::p_from_v_e_template(const CppType & v, const CppType & e) const
198{
199 return (_gamma - 1.0) * (e - _q) / v - _gamma * _p_inf;
200}
201
202template <typename CppType>
203void
204StiffenedGasFluidProperties::p_from_v_e_template(
205 const CppType & v, const CppType & e, CppType & p, CppType & dp_dv, CppType & dp_de) const
206{
207 p = p_from_v_e_template(v, e);
208 dp_dv = -(_gamma - 1.0) * (e - _q) / v / v;
209 dp_de = (_gamma - 1.0) / v;
210}
211
212template <typename CppType>
213CppType
214StiffenedGasFluidProperties::s_from_v_e_template(const CppType & v, const CppType & e) const
215{
216 using std::pow, std::log;
217
218 CppType T = T_from_v_e_template(v, e);
219 CppType p = p_from_v_e_template(v, e);
220 CppType n = pow(T, _gamma) / pow(p + _p_inf, _gamma - 1.0);
221 if (n <= 0.0)
222 return getNaN();
223 else
224 return _cv * log(n) + _q_prime;
225}
226
227template <typename CppType>
228void
229StiffenedGasFluidProperties::s_from_v_e_template(
230 const CppType & v, const CppType & e, CppType & s, CppType & ds_dv, CppType & ds_de) const
231{
232 using std::pow, std::log;
233
234 CppType T, dT_dv, dT_de;
235 T_from_v_e_template(v, e, T, dT_dv, dT_de);
236
237 CppType p, dp_dv, dp_de;
238 p_from_v_e_template(v, e, p, dp_dv, dp_de);
239
240 const CppType n = pow(T, _gamma) / pow(p + _p_inf, _gamma - 1.0);
241 if (n <= 0.0)
242 {
243 s = getNaN();
244 ds_dv = getNaN();
245 ds_de = getNaN();
246 }
247 else
248 {
249 s = _cv * log(n) + _q_prime;
250
251 const CppType dn_dT = _gamma * pow(T, _gamma - 1.0) / pow(p + _p_inf, _gamma - 1.0);
252 const CppType dn_dp = pow(T, _gamma) * (1.0 - _gamma) * pow(p + _p_inf, -_gamma);
253
254 const CppType dn_dv = dn_dT * dT_dv + dn_dp * dp_dv;
255 const CppType dn_de = dn_dT * dT_de + dn_dp * dp_de;
256
257 ds_dv = _cv / n * dn_dv;
258 ds_de = _cv / n * dn_de;
259 }
260}
261
262template <typename CppType>
263CppType
264StiffenedGasFluidProperties::s_from_p_T_template(const CppType & p, const CppType & T) const
265{
266 using std::pow, std::log;
267
268 CppType n = pow(T, _gamma) / pow(p + _p_inf, _gamma - 1.0);
269 if (n <= 0.0)
270 return getNaN();
271 else
272 return _cv * log(n) + _q_prime;
273}
274
275template <typename CppType>
276void
277StiffenedGasFluidProperties::s_from_p_T_template(
278 const CppType & p, const CppType & T, CppType & s, CppType & ds_dp, CppType & ds_dT) const
279{
280 using std::pow, std::log;
281
282 const CppType n = pow(T, _gamma) / pow(p + _p_inf, _gamma - 1.0);
283 if (n <= 0.0)
284 {
285 s = getNaN();
286 ds_dp = getNaN();
287 ds_dT = getNaN();
288 }
289 else
290 {
291 s = _cv * log(n) + _q_prime;
292
293 const CppType dn_dT = _gamma * pow(T, _gamma - 1.0) / pow(p + _p_inf, _gamma - 1.0);
294 const CppType dn_dp = pow(T, _gamma) * (1.0 - _gamma) * pow(p + _p_inf, -_gamma);
295
296 ds_dp = _cv / n * dn_dp;
297 ds_dT = _cv / n * dn_dT;
298 }
299}
ExpressionBuilder::EBTerm pow(const ExpressionBuilder::EBTerm &left, T exponent)
const double mu
const Real p
const double rho
const double T
const double v
const InputParameters & parameters() const
Interface class for producing errors, warnings, or just quiet NaNs.
Real getNaN() const
Throws an error or returns a NaN with or without a warning, with a default message.
Common class for single phase fluid properties.
e e e e s T T T T T rho v v T e h
Stiffened gas fluid properties.
virtual Real p_from_T_v(Real T, Real v) const override
virtual Real mu_from_p_T(Real p, Real T) const override
virtual Real cv_from_T_v(Real T, Real v) const override
virtual Real cv_from_p_T(Real p, Real T) const override
virtual Real criticalDensity() const override
Critical density.
virtual Real k_from_v_e(Real v, Real e) const override
virtual Real mu_from_v_e(Real v, Real e) const override
virtual Real s_from_T_v(Real T, Real v) const override
virtual Real e_from_p_T(Real p, Real T) const override
virtual Real rho_from_p_s(Real p, Real s) const override
virtual Real c2_from_p_rho(Real pressure, Real rho) const
virtual Real e_from_v_h(Real v, Real h) const override
virtual Real cv_from_v_e(Real v, Real e) 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 e_spndl_from_v(Real v) const override
Specific internal energy from temperature and specific volume.
virtual Real p_from_h_s(Real h, Real s) const override
virtual Real cp_from_p_T(Real p, Real T) const override
virtual Real h_from_T_v(Real T, Real v) const override
virtual Real e_from_T_v(Real T, Real v) const override
virtual Real g_from_v_e(Real v, Real e) const override
propfuncWithDefinitionOverride(e, p, rho)
virtual Real pp_sat_from_p_T(Real, Real) const override
virtual Real beta_from_p_T(Real p, Real T) const override
virtual Real h_from_p_T(Real p, Real T) const override
virtual Real cp_from_v_e(Real v, Real e) const override
propfuncWithDefinitionOverride(rho, p, T)
virtual Real criticalTemperature() const override
Critical temperature.
virtual Real criticalInternalEnergy() const override
Critical specific internal energy.
virtual Real molarMass() const override
Molar mass [kg/mol].
virtual Real k_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_h_p(Real h, Real p) const override
auto log(const T &)