www.mooseframework.org
IdealGasFluidProperties.C
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 
11 #include "Conversion.h"
12 
13 #include "metaphysicl/raw_type.h"
14 
15 registerMooseObject("FluidPropertiesApp", IdealGasFluidProperties);
16 
19 {
21  params += NaNInterface::validParams();
22 
23  params.addRangeCheckedParam<Real>("gamma", 1.4, "gamma > 1", "gamma value (cp/cv)");
24  params.addParam<Real>("molar_mass", 29.0e-3, "Constant molar mass of the fluid (kg/mol)");
25  params.addParam<Real>("mu", 18.23e-6, "Dynamic viscosity, Pa.s");
26  params.addParam<Real>("k", 25.68e-3, "Thermal conductivity, W/(m-K)");
27  params.addParam<Real>("T_c", 0, "Critical temperature, K");
28  params.addParam<Real>("rho_c", 0, "Critical density, kg/m3");
29  params.addParam<Real>("e_c", 0, "Internal energy at the critical point, J/kg");
30 
31  params.addClassDescription("Fluid properties for an ideal gas");
32 
33  return params;
34 }
35 
37  : SinglePhaseFluidProperties(parameters),
38  NaNInterface(this),
39 
40  _gamma(getParam<Real>("gamma")),
41  _molar_mass(getParam<Real>("molar_mass")),
42 
43  _R_specific(_R / _molar_mass),
44  _cp(_gamma * _R_specific / (_gamma - 1.0)),
45  _cv(_cp / _gamma),
46 
47  _mu(getParam<Real>("mu")),
48  _k(getParam<Real>("k")),
49 
50  _T_c(getParam<Real>("T_c")),
51  _rho_c(getParam<Real>("rho_c")),
52  _e_c(getParam<Real>("e_c"))
53 {
54 }
55 
57 
58 std::string
60 {
61  return "ideal_gas";
62 }
63 
64 Real
66 {
67  if (v == 0.0)
68  return getNaN("Invalid value of specific volume detected (v = " + Moose::stringify(v) + ").");
69 
70  return (_gamma - 1.0) * e / v;
71 }
72 
73 ADReal
75 {
76  if (v.value() == 0.0)
77  return getNaN("Invalid value of specific volume detected (v = " + Moose::stringify(v.value()) +
78  ").");
79 
80  return (_gamma - 1.0) * e / v;
81 }
82 
83 void
84 IdealGasFluidProperties::p_from_v_e(Real v, Real e, Real & p, Real & dp_dv, Real & dp_de) const
85 {
86  p = p_from_v_e(v, e);
87  dp_dv = -(_gamma - 1.0) * e / v / v;
88  dp_de = (_gamma - 1.0) / v;
89 }
90 
91 void
93  const DualReal & v, const DualReal & e, DualReal & p, DualReal & dp_dv, DualReal & dp_de) const
94 {
95  p = p_from_v_e(v, e);
96  dp_dv = -(_gamma - 1.0) * e / v / v;
97  dp_de = (_gamma - 1.0) / v;
98 }
99 
100 Real
101 IdealGasFluidProperties::T_from_v_e(Real /*v*/, Real e) const
102 {
103  return e / _cv;
104 }
105 
106 ADReal
107 IdealGasFluidProperties::T_from_v_e(const ADReal & /*v*/, const ADReal & e) const
108 {
109  return e / _cv;
110 }
111 
112 void
113 IdealGasFluidProperties::T_from_v_e(Real v, Real e, Real & T, Real & dT_dv, Real & dT_de) const
114 {
115  T = T_from_v_e(v, e);
116  dT_dv = 0.0;
117  dT_de = 1.0 / _cv;
118 }
119 
120 void
122  const DualReal & v, const DualReal & e, DualReal & T, DualReal & dT_dv, DualReal & dT_de) const
123 {
124  T = T_from_v_e(v, e);
125  dT_dv = 0.0;
126  dT_de = 1.0 / _cv;
127 }
128 
129 Real
131 {
132  Real T = T_from_v_e(v, e);
133 
134  Real c2 = _gamma * _R_specific * T;
135  if (c2 < 0)
136  {
137  c2 = 0;
138  flagInvalidSolution(
139  "Sound speed squared (gamma * R * T) is negative: c2 = " + Moose::stringify(c2) + ".");
140  }
141 
142  return std::sqrt(c2);
143 }
144 
145 ADReal
147 {
148  const auto T = T_from_v_e(v, e);
149 
150  auto c2 = _gamma * _R_specific * T;
151  if (MetaPhysicL::raw_value(c2) < 0)
152  {
153  c2 = 0;
154  flagInvalidSolution(
155  "Sound speed squared (gamma * R * T) is negative: c2 = " + Moose::stringify(c2) + ".");
156  }
157 
158  return std::sqrt(c2);
159 }
160 
161 void
162 IdealGasFluidProperties::c_from_v_e(Real v, Real e, Real & c, Real & dc_dv, Real & dc_de) const
163 {
164  Real T, dT_dv, dT_de;
165  T_from_v_e(v, e, T, dT_dv, dT_de);
166 
167  c = std::sqrt(_gamma * _R_specific * T);
168 
169  const Real dc_dT = 0.5 / c * _gamma * _R_specific;
170  dc_dv = dc_dT * dT_dv;
171  dc_de = dc_dT * dT_de;
172 }
173 
174 Real
175 IdealGasFluidProperties::c_from_p_T(Real /*p*/, Real T) const
176 {
177  return std::sqrt(_cp * _R * T / (_cv * _molar_mass));
178 }
179 
180 ADReal
181 IdealGasFluidProperties::c_from_p_T(const ADReal & /*p*/, const ADReal & T) const
182 {
183  return std::sqrt(_cp * _R * T / (_cv * _molar_mass));
184 }
185 
186 void
188  const Real /*p*/, const Real T, Real & c, Real & dc_dp, Real & dc_dT) const
189 {
190  c = std::sqrt(_cp * _R * T / (_cv * _molar_mass));
191  dc_dp = 0;
192  dc_dT = 0.5 / c * _cp * _R / (_cv * _molar_mass);
193 }
194 
195 Real IdealGasFluidProperties::cp_from_v_e(Real, Real) const { return _cp; }
196 
197 void
198 IdealGasFluidProperties::cp_from_v_e(Real v, Real e, Real & cp, Real & dcp_dv, Real & dcp_de) const
199 {
200  cp = cp_from_v_e(v, e);
201  dcp_dv = 0.0;
202  dcp_de = 0.0;
203 }
204 
205 Real IdealGasFluidProperties::cv_from_v_e(Real, Real) const { return _cv; }
206 
207 void
208 IdealGasFluidProperties::cv_from_v_e(Real v, Real e, Real & cv, Real & dcv_dv, Real & dcv_de) const
209 {
210  cv = cv_from_v_e(v, e);
211  dcv_dv = 0.0;
212  dcv_de = 0.0;
213 }
214 
216 
218 
219 Real IdealGasFluidProperties::mu_from_v_e(Real, Real) const { return _mu; }
220 
221 void
222 IdealGasFluidProperties::mu_from_v_e(Real v, Real e, Real & mu, Real & dmu_dv, Real & dmu_de) const
223 {
224  mu = this->mu_from_v_e(v, e);
225  dmu_dv = 0.0;
226  dmu_de = 0.0;
227 }
228 
229 Real IdealGasFluidProperties::k_from_v_e(Real, Real) const { return _k; }
230 
231 void
233  Real /*v*/, Real /*e*/, Real & k, Real & dk_dv, Real & dk_de) const
234 {
235  k = _k;
236  dk_dv = 0;
237  dk_de = 0;
238 }
239 
240 Real
242 {
243  const Real T = T_from_v_e(v, e);
244  const Real p = p_from_v_e(v, e);
245  const Real n = std::pow(T, _gamma) / std::pow(p, _gamma - 1.0);
246  if (n <= 0.0)
247  return getNaN("Negative argument in the ln() function.");
248  return _cv * std::log(n);
249 }
250 
251 void
252 IdealGasFluidProperties::s_from_v_e(Real v, Real e, Real & s, Real & ds_dv, Real & ds_de) const
253 {
254  Real T, dT_dv, dT_de;
255  T_from_v_e(v, e, T, dT_dv, dT_de);
256 
257  Real p, dp_dv, dp_de;
258  p_from_v_e(v, e, p, dp_dv, dp_de);
259 
260  const Real n = std::pow(T, _gamma) / std::pow(p, _gamma - 1.0);
261  if (n <= 0.0)
262  {
263  s = getNaN("Negative argument in the ln() function.");
264  ds_dv = getNaN();
265  ds_de = getNaN();
266  }
267  else
268  {
269  s = _cv * std::log(n);
270 
271  const Real dn_dT = _gamma * std::pow(T, _gamma - 1.0) / std::pow(p, _gamma - 1.0);
272  const Real dn_dp = std::pow(T, _gamma) * (1.0 - _gamma) * std::pow(p, -_gamma);
273 
274  const Real dn_dv = dn_dT * dT_dv + dn_dp * dp_dv;
275  const Real dn_de = dn_dT * dT_de + dn_dp * dp_de;
276 
277  ds_dv = _cv / n * dn_dv;
278  ds_de = _cv / n * dn_de;
279  }
280 }
281 
282 Real
284 {
285  const Real n = std::pow(T, _gamma) / std::pow(p, _gamma - 1.0);
286  if (n <= 0.0)
287  return getNaN("Negative argument in the ln() function.");
288  return _cv * std::log(n);
289 }
290 
291 void
292 IdealGasFluidProperties::s_from_p_T(Real p, Real T, Real & s, Real & ds_dp, Real & ds_dT) const
293 {
294  const Real n = std::pow(T, _gamma) / std::pow(p, _gamma - 1.0);
295  if (n <= 0.0)
296  {
297  s = getNaN("Negative argument in the ln() function.");
298  ds_dp = getNaN();
299  ds_dT = getNaN();
300  }
301  else
302  {
303  s = _cv * std::log(n);
304 
305  const Real dn_dT = _gamma * std::pow(T, _gamma - 1.0) / std::pow(p, _gamma - 1.0);
306  const Real dn_dp = std::pow(T, _gamma) * (1.0 - _gamma) * std::pow(p, -_gamma);
307 
308  ds_dp = _cv / n * dn_dp;
309  ds_dT = _cv / n * dn_dT;
310  }
311 }
312 
313 Real
315 {
316  const Real aux = p * std::pow(h / (_gamma * _cv), -_gamma / (_gamma - 1));
317  if (aux <= 0.0)
318  return getNaN("Non-positive argument in the ln() function.");
319  return -(_gamma - 1) * _cv * std::log(aux);
320 }
321 
322 void
323 IdealGasFluidProperties::s_from_h_p(Real h, Real p, Real & s, Real & ds_dh, Real & ds_dp) const
324 {
325  s = s_from_h_p(h, p);
326 
327  const Real aux = p * std::pow(h / (_gamma * _cv), -_gamma / (_gamma - 1));
328  const Real daux_dh = p * std::pow(h / (_gamma * _cv), -_gamma / (_gamma - 1) - 1) *
329  (-_gamma / (_gamma - 1)) / (_gamma * _cv);
330  const Real daux_dp = std::pow(h / (_gamma * _cv), -_gamma / (_gamma - 1));
331  ds_dh = -(_gamma - 1) * _cv / aux * daux_dh;
332  ds_dp = -(_gamma - 1) * _cv / aux * daux_dp;
333 }
334 
335 Real
337 {
338  const Real aux = (s + _cv * std::log(std::pow(p, _gamma - 1.0))) / _cv;
339  const Real T = std::pow(std::exp(aux), 1.0 / _gamma);
340  return rho_from_p_T(p, T);
341 }
342 
343 void
345  Real p, Real s, Real & rho, Real & drho_dp, Real & drho_ds) const
346 {
347  // T(p,s)
348  const Real aux = (s + _cv * std::log(std::pow(p, _gamma - 1.0))) / _cv;
349  const Real T = std::pow(std::exp(aux), 1 / _gamma);
350 
351  // dT/dp
352  const Real dT_dp = 1.0 / _gamma * std::pow(std::exp(aux), 1.0 / _gamma - 1.0) * std::exp(aux) /
353  std::pow(p, _gamma - 1.0) * (_gamma - 1.0) * std::pow(p, _gamma - 2.0);
354 
355  // dT/ds
356  const Real dT_ds =
357  1.0 / _gamma * std::pow(std::exp(aux), 1.0 / _gamma - 1.0) * std::exp(aux) / _cv;
358 
359  // Drho/Dp = d/dp[rho(p, T(p,s))] = drho/dp + drho/dT * dT/dp
360  Real drho_dp_partial, drho_dT;
361  rho_from_p_T(p, T, rho, drho_dp_partial, drho_dT);
362  drho_dp = drho_dp_partial + drho_dT * dT_dp;
363 
364  // Drho/Ds = d/ds[rho(p, T(p,s))] = drho/dT * dT/ds
365  drho_ds = drho_dT * dT_ds;
366 }
367 
368 Real
369 IdealGasFluidProperties::e_from_v_h(Real /*v*/, Real h) const
370 {
371  return h / _gamma;
372 }
373 
374 void
375 IdealGasFluidProperties::e_from_v_h(Real v, Real h, Real & e, Real & de_dv, Real & de_dh) const
376 {
377  e = e_from_v_h(v, h);
378  de_dv = 0.0;
379  de_dh = 1.0 / _gamma;
380 }
381 
382 Real
384 {
385  return p * _molar_mass / (_R * T);
386 }
387 
388 ADReal
390 {
391  return p * _molar_mass / (_R * T);
392 }
393 
394 void
396  const DualReal & T,
397  DualReal & rho,
398  DualReal & drho_dp,
399  DualReal & drho_dT) const
400 {
401  rho = rho_from_p_T(p, T);
402  drho_dp = _molar_mass / (_R * T);
403  drho_dT = -p * _molar_mass / (_R * T * T);
404 }
405 
406 void
408  Real p, Real T, Real & rho, Real & drho_dp, Real & drho_dT) const
409 {
410  rho = rho_from_p_T(p, T);
411  drho_dp = _molar_mass / (_R * T);
412  drho_dT = -p * _molar_mass / (_R * T * T);
413 }
414 
415 Real
417 {
418  return p / (_gamma - 1.0) / rho;
419 }
420 
421 ADReal
423 {
424  return p / (_gamma - 1.0) / rho;
425 }
426 
427 void
429  Real p, Real rho, Real & e, Real & de_dp, Real & de_drho) const
430 {
431  e = e_from_p_rho(p, rho);
432  de_dp = 1.0 / (_gamma - 1.0) / rho;
433  de_drho = -p / (_gamma - 1.0) / rho / rho;
434 }
435 
436 void
438  const ADReal & p, const ADReal & rho, ADReal & e, ADReal & de_dp, ADReal & de_drho) const
439 {
440  e = e_from_p_rho(p, rho);
441  de_dp = 1.0 / (_gamma - 1.0) / rho;
442  de_drho = -p / (_gamma - 1.0) / rho / rho;
443 }
444 
445 Real
446 IdealGasFluidProperties::e_from_T_v(Real T, Real /*v*/) const
447 {
448  return _cv * T;
449 }
450 
451 void
452 IdealGasFluidProperties::e_from_T_v(Real T, Real /*v*/, Real & e, Real & de_dT, Real & de_dv) const
453 {
454  e = _cv * T;
455  de_dT = _cv;
456  de_dv = 0.0;
457 }
458 
459 ADReal
460 IdealGasFluidProperties::e_from_T_v(const ADReal & T, const ADReal & /*v*/) const
461 {
462  return _cv * T;
463 }
464 
465 void
467  const ADReal & T, const ADReal & /*v*/, ADReal & e, ADReal & de_dT, ADReal & de_dv) const
468 {
469  e = _cv * T;
470  de_dT = _cv;
471  de_dv = 0.0;
472 }
473 
474 Real
476 {
477  return (_gamma - 1.0) * _cv * T / v;
478 }
479 
480 void
481 IdealGasFluidProperties::p_from_T_v(Real T, Real v, Real & p, Real & dp_dT, Real & dp_dv) const
482 {
483  p = (_gamma - 1.0) * _cv * T / v;
484  dp_dT = (_gamma - 1.0) * _cv / v;
485  dp_dv = -(_gamma - 1.0) * _cv * T / (v * v);
486 }
487 
488 Real
489 IdealGasFluidProperties::h_from_T_v(Real T, Real /*v*/) const
490 {
491  return _gamma * _cv * T;
492 }
493 
494 void
495 IdealGasFluidProperties::h_from_T_v(Real T, Real /*v*/, Real & h, Real & dh_dT, Real & dh_dv) const
496 {
497  h = _gamma * _cv * T;
498  dh_dT = _gamma * _cv;
499  dh_dv = 0.0;
500 }
501 
502 Real
504 {
505  Real p = p_from_T_v(T, v);
506  return s_from_p_T(p, T);
507 }
508 
509 void
510 IdealGasFluidProperties::s_from_T_v(Real T, Real v, Real & s, Real & ds_dT, Real & ds_dv) const
511 {
512  Real p, dp_dT_v, dp_dv_T;
513  Real ds_dp_T, ds_dT_p;
514  p_from_T_v(T, v, p, dp_dT_v, dp_dv_T);
515  s_from_p_T(p, T, s, ds_dp_T, ds_dT_p);
516  ds_dT = ds_dT_p + ds_dp_T * dp_dT_v;
517  ds_dv = ds_dp_T * dp_dv_T;
518 }
519 
520 Real IdealGasFluidProperties::cv_from_T_v(Real /*T*/, Real /*v*/) const { return _cv; }
521 
522 Real IdealGasFluidProperties::e_spndl_from_v(Real /*v*/) const { return _e_c; }
523 
524 void
525 IdealGasFluidProperties::v_e_spndl_from_T(Real /*T*/, Real & v, Real & e) const
526 {
527  v = 1. / _rho_c;
528  e = _e_c;
529 }
530 
531 Real
532 IdealGasFluidProperties::h_from_p_T(Real /*p*/, Real T) const
533 {
534  return _cp * T;
535 }
536 
537 void
538 IdealGasFluidProperties::h_from_p_T(Real p, Real T, Real & h, Real & dh_dp, Real & dh_dT) const
539 {
540  h = h_from_p_T(p, T);
541  dh_dp = 0.0;
542  dh_dT = _cp;
543 }
544 
545 Real
546 IdealGasFluidProperties::e_from_p_T(Real /*p*/, Real T) const
547 {
548  return _cv * T;
549 }
550 
551 void
552 IdealGasFluidProperties::e_from_p_T(Real p, Real T, Real & e, Real & de_dp, Real & de_dT) const
553 {
554  e = e_from_p_T(p, T);
555  de_dp = 0.0;
556  de_dT = _cv;
557 }
558 
559 Real
561 {
562  return std::pow(h / (_gamma * _cv), _gamma / (_gamma - 1.0)) *
563  std::exp(-s / ((_gamma - 1.0) * _cv));
564 }
565 
566 void
567 IdealGasFluidProperties::p_from_h_s(Real h, Real s, Real & p, Real & dp_dh, Real & dp_ds) const
568 {
569  p = p_from_h_s(h, s);
570  dp_dh = _gamma / (_gamma - 1.0) / (_gamma * _cv) *
571  std::pow(h / (_gamma * _cv), 1.0 / (_gamma - 1.0)) *
572  std::exp(-s / ((_gamma - 1.0) * _cv));
573  dp_ds = std::pow(h / (_gamma * _cv), _gamma / (_gamma - 1)) *
574  std::exp(-s / ((_gamma - 1) * _cv)) / ((1 - _gamma) * _cv);
575 }
576 
577 Real
579 {
580  // g(p,T) for SGEOS is given by Equation (37) in the following reference:
581  //
582  // Ray A. Berry, Richard Saurel, Olivier LeMetayer
583  // The discrete equation method (DEM) for fully compressible, two-phase flows in
584  // ducts of spatially varying cross-section
585  // Nuclear Engineering and Design 240 (2010) p. 3797-3818
586  //
587  const Real p = p_from_v_e(v, e);
588  const Real T = T_from_v_e(v, e);
589 
590  return _gamma * _cv * T - _cv * T * std::log(std::pow(T, _gamma) / std::pow(p, _gamma - 1.0));
591 }
592 
593 Real
595 {
596  return _molar_mass;
597 }
598 
599 Real
601 {
602  return _T_c;
603 }
604 
605 Real
607 {
608  return _rho_c;
609 }
610 
611 Real
613 {
614  return _e_c;
615 }
616 
617 Real
619 {
620  return h / _gamma / _cv;
621 }
622 
623 void
624 IdealGasFluidProperties::T_from_p_h(Real /*p*/, Real h, Real & T, Real & dT_dp, Real & dT_dh) const
625 {
626  T = h / (_gamma * _cv);
627  dT_dp = 0;
628  dT_dh = 1.0 / (_gamma * _cv);
629 }
630 
631 Real IdealGasFluidProperties::cv_from_p_T(Real /* pressure */, Real /* temperature */) const
632 {
633  return _cv;
634 }
635 
636 void
637 IdealGasFluidProperties::cv_from_p_T(Real p, Real T, Real & cv, Real & dcv_dp, Real & dcv_dT) const
638 {
639  cv = cv_from_p_T(p, T);
640  dcv_dp = 0.0;
641  dcv_dT = 0.0;
642 }
643 
644 Real IdealGasFluidProperties::cp_from_p_T(Real /* pressure */, Real /* temperature */) const
645 {
646  return _cp;
647 }
648 
649 void
650 IdealGasFluidProperties::cp_from_p_T(Real p, Real T, Real & cp, Real & dcp_dp, Real & dcp_dT) const
651 {
652  cp = cp_from_p_T(p, T);
653  dcp_dp = 0.0;
654  dcp_dT = 0.0;
655 }
656 
657 Real IdealGasFluidProperties::mu_from_p_T(Real /* pressure */, Real /* temperature */) const
658 {
659  return _mu;
660 }
661 
662 void
663 IdealGasFluidProperties::mu_from_p_T(Real p, Real T, Real & mu, Real & dmu_dp, Real & dmu_dT) const
664 {
665  mu = this->mu_from_p_T(p, T);
666  dmu_dp = 0.0;
667  dmu_dT = 0.0;
668 }
669 
670 Real IdealGasFluidProperties::k_from_p_T(Real /* pressure */, Real /* temperature */) const
671 {
672  return _k;
673 }
674 
675 void
676 IdealGasFluidProperties::k_from_p_T(Real p, Real T, Real & k, Real & dk_dp, Real & dk_dT) const
677 {
678  k = k_from_p_T(p, T);
679  dk_dp = 0.0;
680  dk_dT = 0.0;
681 }
682 
683 Real IdealGasFluidProperties::pp_sat_from_p_T(Real /*p*/, Real /*T*/) const
684 {
685  mooseError(__PRETTY_FUNCTION__, " not implemented. Use a real fluid property class!");
686 }
virtual Real criticalInternalEnergy() const override
Critical specific internal energy.
static const std::string cv
Definition: NS.h:121
virtual Real cv_from_p_T(Real p, Real T) const override
const Real _cv
Specific heat at constant volume.
void addParam(const std::string &name, const std::initializer_list< typename T::value_type > &value, const std::string &doc_string)
virtual Real rho_from_p_T(Real p, Real T) const override
virtual Real criticalTemperature() const override
Critical temperature.
static InputParameters validParams()
const Real _k
Thermal conductivity.
virtual Real cv_from_v_e(Real v, Real e) const override
const Real & _gamma
Adiabatic index (ratio of specific heats cp/cv)
DualNumber< Real, DNDerivativeType, true > DualReal
virtual Real criticalDensity() const override
Critical density.
auto raw_value(const Eigen::Map< T > &in)
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 mu_from_v_e(Real v, Real e) const override
virtual Real k_from_p_T(Real pressure, Real temperature) const override
Real getNaN() const
Throws an error or returns a NaN with or without a warning, with a default message.
Definition: NaNInterface.h:45
static const Real _R
Universal gas constant (J/mol/K)
virtual Real T_from_v_e(Real v, Real e) const override
virtual Real k_from_v_e(Real v, Real e) const override
ADRealEigenVector< T, D, asd > sqrt(const ADRealEigenVector< T, D, asd > &)
virtual Real pp_sat_from_p_T(Real, Real) const override
virtual Real molarMass() const override
Fluid name.
virtual Real e_from_T_v(Real T, Real v) const override
virtual Real h_from_T_v(Real T, Real v) const override
registerMooseObject("FluidPropertiesApp", IdealGasFluidProperties)
virtual Real rho_from_p_s(Real p, Real s) const override
IdealGasFluidProperties(const InputParameters &parameters)
static const std::string cp
Definition: NS.h:120
virtual Real s_from_T_v(Real T, Real v) const override
virtual Real e_from_p_rho(Real p, Real rho) const override
virtual Real s_from_h_p(Real h, Real p) const override
static const std::string mu
Definition: NS.h:122
virtual Real p_from_T_v(Real T, Real v) const override
virtual Real gamma_from_v_e(Real v, Real e) const override
virtual Real c_from_p_T(Real p, Real T) const override
const Real & _molar_mass
molar mass
Common class for single phase fluid properties.
virtual Real T_from_p_h(Real p, Real h) const override
DualReal ADReal
e e e e s T T T T T rho v v T h
static InputParameters validParams()
std::string stringify(const T &t)
virtual std::string fluidName() const override
virtual Real g_from_v_e(Real v, Real e) const override
const Real _cp
Specific heat at constant pressure.
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const std::string v
Definition: NS.h:82
virtual Real mu_from_p_T(Real p, Real T) const override
virtual Real e_from_p_T(Real p, Real T) const override
const Real _R_specific
Specific gas constant (R / molar mass)
virtual Real p_from_h_s(Real h, Real s) const override
virtual Real cp_from_v_e(Real v, Real e) const override
virtual Real cp_from_p_T(Real p, Real T) const override
void mooseError(Args &&... args) const
virtual Real c_from_v_e(Real v, Real e) const override
void addClassDescription(const std::string &doc_string)
virtual Real s_from_v_e(Real v, Real e) const override
static InputParameters validParams()
Definition: NaNInterface.C:15
void addRangeCheckedParam(const std::string &name, const T &value, const std::string &parsed_function, const std::string &doc_string)
virtual Real h_from_p_T(Real p, Real T) const override
virtual Real e_spndl_from_v(Real v) const override
Specific internal energy from temperature and specific volume.
virtual Real cv_from_T_v(Real T, Real v) const override
Ideal gas fluid properties Default parameters are for air at atmospheric pressure and temperature...
Interface class for producing errors, warnings, or just quiet NaNs.
Definition: NaNInterface.h:22
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 gamma_from_p_T(Real p, Real T) const override
MooseUnits pow(const MooseUnits &, int)
static const std::string k
Definition: NS.h:124
virtual Real s_from_p_T(Real p, Real T) const override
const Real _mu
Dynamic viscosity.