www.mooseframework.org
StiffenedGasFluidProperties.h
Go to the documentation of this file.
1 //* This file is part of the MOOSE framework
2 //* https://www.mooseframework.org
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;
50  virtual Real e_from_T_v(Real T, Real v) const override;
51  virtual void e_from_T_v(Real T, Real v, Real & e, Real & de_dT, Real & de_dv) const override;
52  virtual Real p_from_T_v(Real T, Real v) const override;
53  virtual void p_from_T_v(Real T, Real v, Real & p, Real & dp_dT, Real & dp_dv) const override;
54  virtual Real h_from_T_v(Real T, Real v) const override;
55  virtual void h_from_T_v(Real T, Real v, Real & h, Real & dh_dT, Real & dh_dv) const override;
56  virtual Real s_from_T_v(Real T, Real v) const override;
57  virtual void s_from_T_v(Real T, Real v, Real & s, Real & ds_dT, Real & ds_dv) const override;
58  virtual Real cv_from_T_v(Real T, Real v) const override;
59  virtual Real e_spndl_from_v(Real v) const override;
60  virtual void v_e_spndl_from_T(Real T, Real & v, Real & e) const override;
61  virtual Real e_from_v_h(Real v, Real h) const override;
62  virtual void e_from_v_h(Real v, Real h, Real & e, Real & de_dv, Real & de_dh) const override;
63  virtual Real h_from_p_T(Real p, Real T) const override;
64  virtual void h_from_p_T(Real p, Real T, Real & h, Real & dh_dp, Real & dh_dT) const override;
65  virtual Real e_from_p_T(Real p, Real T) const override;
66  virtual void e_from_p_T(Real p, Real T, Real & e, Real & de_dp, Real & de_dT) const override;
67  virtual Real p_from_h_s(Real h, Real s) const override;
68  virtual void p_from_h_s(Real h, Real s, Real & p, Real & dp_dh, Real & dp_ds) const override;
69  virtual Real g_from_v_e(Real v, Real e) const override;
70  virtual Real molarMass() const override;
71  virtual Real criticalTemperature() const override;
72  virtual Real criticalDensity() const override;
73  virtual Real criticalInternalEnergy() const override;
74  virtual Real cv_from_p_T(Real p, Real T) const override;
75  virtual void cv_from_p_T(Real p, Real T, Real & cv, Real & dcv_dp, Real & dcv_dT) const override;
76  virtual Real cp_from_p_T(Real p, Real T) const override;
77  virtual void cp_from_p_T(Real p, Real T, Real & cp, Real & dcp_dp, Real & dcp_dT) const override;
78  virtual Real mu_from_p_T(Real p, Real T) const override;
79  virtual void mu_from_p_T(Real p, Real T, Real & mu, Real & dmu_dp, Real & dmu_dT) const override;
80  virtual Real k_from_p_T(Real p, Real T) const override;
81  virtual void k_from_p_T(Real p, Real T, Real & k, Real & dk_dp, Real & dk_dT) const override;
82  virtual Real beta_from_p_T(Real p, Real T) const override;
83  virtual void
84  beta_from_p_T(Real p, Real T, Real & beta, Real & dbeta_dp, Real & dbeta_dT) const override;
85 
86  virtual Real c2_from_p_rho(Real pressure, Real rho) const;
87 
88  virtual Real pp_sat_from_p_T(Real /*p*/, Real /*T*/) const override;
89 
90 protected:
92 
99 
103  // properties at critical point
107 };
108 
109 #pragma GCC diagnostic pop
110 
111 template <typename CppType>
112 CppType
113 StiffenedGasFluidProperties::rho_from_p_T_template(const CppType & p, const CppType & T) const
114 {
115  mooseAssert(((_gamma - 1.0) * _cv * T) != 0.0, "Invalid gamma or cv or temperature detected!");
116  CppType rho = (p + _p_inf) / ((_gamma - 1.0) * _cv * T);
117  if (!_allow_nonphysical_states && rho <= 0.)
118  return getNaN();
119  else
120  return rho;
121 }
122 
123 template <typename CppType>
124 void
125 StiffenedGasFluidProperties::rho_from_p_T_template(
126  const CppType & p, const CppType & T, CppType & rho, CppType & drho_dp, CppType & drho_dT) const
127 {
128  mooseAssert(((_gamma - 1.0) * _cv * T) != 0.0, "Invalid gamma or cv or temperature detected!");
129  rho = (p + _p_inf) / ((_gamma - 1.0) * _cv * T);
130  if (!_allow_nonphysical_states && rho <= 0.)
131  {
132  drho_dp = getNaN();
133  drho_dT = getNaN();
134  }
135  else
136  {
137  drho_dp = 1. / ((_gamma - 1.0) * _cv * T);
138  drho_dT = -(p + _p_inf) / ((_gamma - 1.0) * _cv * T * T);
139  }
140 }
141 
142 template <typename CppType>
143 CppType
144 StiffenedGasFluidProperties::e_from_p_rho_template(const CppType & p, const CppType & rho) const
145 {
146  mooseAssert((_gamma - 1.0) * rho != 0., "Invalid gamma or density detected!");
147  return (p + _gamma * _p_inf) / ((_gamma - 1.0) * rho) + _q;
148 }
149 
150 template <typename CppType>
151 void
152 StiffenedGasFluidProperties::e_from_p_rho_template(
153  const CppType & p, const CppType & rho, CppType & e, CppType & de_dp, CppType & de_drho) const
154 {
155  e = e_from_p_rho_template(p, rho);
156  de_dp = 1.0 / ((_gamma - 1.0) * rho);
157  de_drho = -(p + _gamma * _p_inf) / ((_gamma - 1.0) * rho * rho);
158 }
159 
160 template <typename CppType>
161 CppType
162 StiffenedGasFluidProperties::T_from_v_e_template(const CppType & v, const CppType & e) const
163 {
164  return (1.0 / _cv) * (e - _q - _p_inf * v);
165 }
166 
167 template <typename CppType>
168 void
169 StiffenedGasFluidProperties::T_from_v_e_template(
170  const CppType & v, const CppType & e, CppType & T, CppType & dT_dv, CppType & dT_de) const
171 {
172  T = T_from_v_e_template(v, e);
173  dT_dv = -_p_inf / _cv;
174  dT_de = 1.0 / _cv;
175 }
176 
177 template <typename CppType>
178 CppType
179 StiffenedGasFluidProperties::p_from_v_e_template(const CppType & v, const CppType & e) const
180 {
181  return (_gamma - 1.0) * (e - _q) / v - _gamma * _p_inf;
182 }
183 
184 template <typename CppType>
185 void
186 StiffenedGasFluidProperties::p_from_v_e_template(
187  const CppType & v, const CppType & e, CppType & p, CppType & dp_dv, CppType & dp_de) const
188 {
189  p = p_from_v_e_template(v, e);
190  dp_dv = -(_gamma - 1.0) * (e - _q) / v / v;
191  dp_de = (_gamma - 1.0) / v;
192 }
193 
194 template <typename CppType>
195 CppType
196 StiffenedGasFluidProperties::s_from_v_e_template(const CppType & v, const CppType & e) const
197 {
198  CppType T = T_from_v_e_template(v, e);
199  CppType p = p_from_v_e_template(v, e);
200  CppType n = std::pow(T, _gamma) / std::pow(p + _p_inf, _gamma - 1.0);
201  if (n <= 0.0)
202  return getNaN();
203  else
204  return _cv * std::log(n) + _q_prime;
205 }
206 
207 template <typename CppType>
208 void
209 StiffenedGasFluidProperties::s_from_v_e_template(
210  const CppType & v, const CppType & e, CppType & s, CppType & ds_dv, CppType & ds_de) const
211 {
212  CppType T, dT_dv, dT_de;
213  T_from_v_e_template(v, e, T, dT_dv, dT_de);
214 
215  CppType p, dp_dv, dp_de;
216  p_from_v_e_template(v, e, p, dp_dv, dp_de);
217 
218  const CppType n = std::pow(T, _gamma) / std::pow(p + _p_inf, _gamma - 1.0);
219  if (n <= 0.0)
220  {
221  s = getNaN();
222  ds_dv = getNaN();
223  ds_de = getNaN();
224  }
225  else
226  {
227  s = _cv * std::log(n) + _q_prime;
228 
229  const CppType dn_dT = _gamma * std::pow(T, _gamma - 1.0) / std::pow(p + _p_inf, _gamma - 1.0);
230  const CppType dn_dp = std::pow(T, _gamma) * (1.0 - _gamma) * std::pow(p + _p_inf, -_gamma);
231 
232  const CppType dn_dv = dn_dT * dT_dv + dn_dp * dp_dv;
233  const CppType dn_de = dn_dT * dT_de + dn_dp * dp_de;
234 
235  ds_dv = _cv / n * dn_dv;
236  ds_de = _cv / n * dn_de;
237  }
238 }
239 
240 template <typename CppType>
241 CppType
242 StiffenedGasFluidProperties::s_from_p_T_template(const CppType & p, const CppType & T) const
243 {
244  CppType n = std::pow(T, _gamma) / std::pow(p + _p_inf, _gamma - 1.0);
245  if (n <= 0.0)
246  return getNaN();
247  else
248  return _cv * std::log(n) + _q_prime;
249 }
250 
251 template <typename CppType>
252 void
253 StiffenedGasFluidProperties::s_from_p_T_template(
254  const CppType & p, const CppType & T, CppType & s, CppType & ds_dp, CppType & ds_dT) const
255 {
256  const CppType n = std::pow(T, _gamma) / std::pow(p + _p_inf, _gamma - 1.0);
257  if (n <= 0.0)
258  {
259  s = getNaN();
260  ds_dp = getNaN();
261  ds_dT = getNaN();
262  }
263  else
264  {
265  s = _cv * std::log(n) + _q_prime;
266 
267  const CppType dn_dT = _gamma * std::pow(T, _gamma - 1.0) / std::pow(p + _p_inf, _gamma - 1.0);
268  const CppType dn_dp = std::pow(T, _gamma) * (1.0 - _gamma) * std::pow(p + _p_inf, -_gamma);
269 
270  ds_dp = _cv / n * dn_dp;
271  ds_dT = _cv / n * dn_dT;
272  }
273 }
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:121
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:45
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:120
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:122
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.
e e e e s T T T T T rho v v T h
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:82
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
Fluid name.
MooseUnits pow(const MooseUnits &, int)
static const std::string k
Definition: NS.h:124
virtual Real p_from_T_v(Real T, Real v) const override