https://mooseframework.inl.gov
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 {
23 public:
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 
91 protected:
93 
100 
104  // properties at critical point
108 };
109 
110 #pragma GCC diagnostic pop
111 
112 template <typename CppType>
113 CppType
114 StiffenedGasFluidProperties::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 
124 template <typename CppType>
125 void
126 StiffenedGasFluidProperties::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 
143 template <typename CppType>
144 CppType
145 StiffenedGasFluidProperties::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 
151 template <typename CppType>
152 void
153 StiffenedGasFluidProperties::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 
161 template <typename CppType>
162 CppType
163 StiffenedGasFluidProperties::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 
168 template <typename CppType>
169 void
170 StiffenedGasFluidProperties::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 
178 template <typename CppType>
179 CppType
180 StiffenedGasFluidProperties::T_from_p_h_template(const CppType & /*p*/, const CppType & h) const
181 {
182  return (1.0 / _cv) * (h - _q) / _gamma;
183 }
184 
185 template <typename CppType>
186 void
187 StiffenedGasFluidProperties::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 
195 template <typename CppType>
196 CppType
197 StiffenedGasFluidProperties::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 
202 template <typename CppType>
203 void
204 StiffenedGasFluidProperties::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 
212 template <typename CppType>
213 CppType
214 StiffenedGasFluidProperties::s_from_v_e_template(const CppType & v, const CppType & e) const
215 {
216  CppType T = T_from_v_e_template(v, e);
217  CppType p = p_from_v_e_template(v, e);
218  CppType n = std::pow(T, _gamma) / std::pow(p + _p_inf, _gamma - 1.0);
219  if (n <= 0.0)
220  return getNaN();
221  else
222  return _cv * std::log(n) + _q_prime;
223 }
224 
225 template <typename CppType>
226 void
227 StiffenedGasFluidProperties::s_from_v_e_template(
228  const CppType & v, const CppType & e, CppType & s, CppType & ds_dv, CppType & ds_de) const
229 {
230  CppType T, dT_dv, dT_de;
231  T_from_v_e_template(v, e, T, dT_dv, dT_de);
232 
233  CppType p, dp_dv, dp_de;
234  p_from_v_e_template(v, e, p, dp_dv, dp_de);
235 
236  const CppType n = std::pow(T, _gamma) / std::pow(p + _p_inf, _gamma - 1.0);
237  if (n <= 0.0)
238  {
239  s = getNaN();
240  ds_dv = getNaN();
241  ds_de = getNaN();
242  }
243  else
244  {
245  s = _cv * std::log(n) + _q_prime;
246 
247  const CppType dn_dT = _gamma * std::pow(T, _gamma - 1.0) / std::pow(p + _p_inf, _gamma - 1.0);
248  const CppType dn_dp = std::pow(T, _gamma) * (1.0 - _gamma) * std::pow(p + _p_inf, -_gamma);
249 
250  const CppType dn_dv = dn_dT * dT_dv + dn_dp * dp_dv;
251  const CppType dn_de = dn_dT * dT_de + dn_dp * dp_de;
252 
253  ds_dv = _cv / n * dn_dv;
254  ds_de = _cv / n * dn_de;
255  }
256 }
257 
258 template <typename CppType>
259 CppType
260 StiffenedGasFluidProperties::s_from_p_T_template(const CppType & p, const CppType & T) const
261 {
262  CppType n = std::pow(T, _gamma) / std::pow(p + _p_inf, _gamma - 1.0);
263  if (n <= 0.0)
264  return getNaN();
265  else
266  return _cv * std::log(n) + _q_prime;
267 }
268 
269 template <typename CppType>
270 void
271 StiffenedGasFluidProperties::s_from_p_T_template(
272  const CppType & p, const CppType & T, CppType & s, CppType & ds_dp, CppType & ds_dT) const
273 {
274  const CppType n = std::pow(T, _gamma) / std::pow(p + _p_inf, _gamma - 1.0);
275  if (n <= 0.0)
276  {
277  s = getNaN();
278  ds_dp = getNaN();
279  ds_dT = getNaN();
280  }
281  else
282  {
283  s = _cv * std::log(n) + _q_prime;
284 
285  const CppType dn_dT = _gamma * std::pow(T, _gamma - 1.0) / std::pow(p + _p_inf, _gamma - 1.0);
286  const CppType dn_dp = std::pow(T, _gamma) * (1.0 - _gamma) * std::pow(p + _p_inf, -_gamma);
287 
288  ds_dp = _cv / n * dn_dp;
289  ds_dT = _cv / n * dn_dT;
290  }
291 }
virtual Real s_from_T_v(Real T, Real v) const override
virtual Real e_from_T_v(Real T, Real v) const override
static const std::string cv
Definition: NS.h:122
virtual Real criticalTemperature() const override
Critical temperature.
virtual Real rho_from_p_s(Real p, Real s) const override
virtual Real mu_from_p_T(Real p, Real T) const override
static InputParameters validParams()
virtual Real g_from_v_e(Real v, Real e) const override
virtual Real s_from_h_p(Real h, Real p) const override
virtual Real beta_from_p_T(Real p, Real T) 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 criticalInternalEnergy() const override
Critical specific internal energy.
propfuncWithDefinitionOverride(rho, p, T)
Real getNaN() const
Throws an error or returns a NaN with or without a warning, with a default message.
Definition: NaNInterface.h:46
virtual Real cv_from_p_T(Real p, Real T) const override
virtual Real k_from_v_e(Real v, Real e) const override
virtual Real p_from_h_s(Real h, Real s) const override
virtual Real k_from_p_T(Real p, Real T) const override
virtual Real e_from_v_h(Real v, Real h) const override
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 cp_from_v_e(Real v, Real e) const override
virtual Real cp_from_p_T(Real p, Real T) const override
virtual Real h_from_p_T(Real p, Real T) const override
virtual Real cv_from_T_v(Real T, Real v) const override
static const std::string mu
Definition: NS.h:123
virtual Real e_from_p_T(Real p, Real T) const override
virtual Real criticalDensity() const override
Critical density.
Common class for single phase fluid properties.
virtual Real c2_from_p_rho(Real pressure, Real rho) const
virtual Real c_from_v_e(Real v, Real e) const override
Stiffened gas fluid properties.
virtual Real h_from_T_v(Real T, Real v) const override
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const std::string v
Definition: NS.h:84
static const std::string pressure
Definition: NS.h:56
virtual Real pp_sat_from_p_T(Real, Real) const override
StiffenedGasFluidProperties(const InputParameters &parameters)
const InputParameters & parameters() const
virtual Real cv_from_v_e(Real v, Real e) const override
virtual Real mu_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.
Interface class for producing errors, warnings, or just quiet NaNs.
Definition: NaNInterface.h:22
virtual Real molarMass() const override
Molar mass [kg/mol].
MooseUnits pow(const MooseUnits &, int)
static const std::string k
Definition: NS.h:130
virtual Real p_from_T_v(Real T, Real v) const override