https://mooseframework.inl.gov
IdealGasFluidProperties.C
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 
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>("e_ref", 0, "Reference specific internal energy [J/kg]");
26  params.addParam<Real>("mu", 18.23e-6, "Dynamic viscosity, Pa.s");
27  params.addParam<Real>("k", 25.68e-3, "Thermal conductivity, W/(m-K)");
28  params.addParam<Real>("T_c", 0, "Critical temperature, K");
29  params.addParam<Real>("rho_c", 0, "Critical density, kg/m3");
30  params.addParam<Real>("e_c", 0, "Internal energy at the critical point, J/kg");
31 
32  params.addClassDescription("Fluid properties for an ideal gas");
33 
34  return params;
35 }
36 
38  : SinglePhaseFluidProperties(parameters),
39  NaNInterface(this),
40 
41  _gamma(getParam<Real>("gamma")),
42  _molar_mass(getParam<Real>("molar_mass")),
43  _e_ref(getParam<Real>("e_ref")),
44 
45  _R_specific(_R / _molar_mass),
46  _cp(_gamma * _R_specific / (_gamma - 1.0)),
47  _cv(_cp / _gamma),
48 
49  _mu(getParam<Real>("mu")),
50  _k(getParam<Real>("k")),
51 
52  _T_c(getParam<Real>("T_c")),
53  _rho_c(getParam<Real>("rho_c")),
54  _e_c(getParam<Real>("e_c"))
55 {
56 }
57 
59 
60 std::string
62 {
63  return "ideal_gas";
64 }
65 
66 Real
68 {
69  if (v == 0.0)
70  return getNaN("Invalid value of specific volume detected (v = " + Moose::stringify(v) + ").");
71 
72  return (_gamma - 1.0) * (e - _e_ref) / v;
73 }
74 
75 ADReal
77 {
78  if (v.value() == 0.0)
79  return getNaN("Invalid value of specific volume detected (v = " + Moose::stringify(v.value()) +
80  ").");
81 
82  return (_gamma - 1.0) * (e - _e_ref) / v;
83 }
84 
85 void
86 IdealGasFluidProperties::p_from_v_e(Real v, Real e, Real & p, Real & dp_dv, Real & dp_de) const
87 {
88  p = p_from_v_e(v, e);
89  dp_dv = -(_gamma - 1.0) * (e - _e_ref) / v / v;
90  dp_de = (_gamma - 1.0) / v;
91 }
92 
93 void
95  const ADReal & v, const ADReal & e, ADReal & p, ADReal & dp_dv, ADReal & dp_de) const
96 {
97  p = p_from_v_e(v, e);
98  dp_dv = -(_gamma - 1.0) * (e - _e_ref) / v / v;
99  dp_de = (_gamma - 1.0) / v;
100 }
101 
102 Real
103 IdealGasFluidProperties::T_from_v_e(Real /*v*/, Real e) const
104 {
105  return (e - _e_ref) / _cv;
106 }
107 
108 ADReal
109 IdealGasFluidProperties::T_from_v_e(const ADReal & /*v*/, const ADReal & e) const
110 {
111  return (e - _e_ref) / _cv;
112 }
113 
114 void
115 IdealGasFluidProperties::T_from_v_e(Real v, Real e, Real & T, Real & dT_dv, Real & dT_de) const
116 {
117  T = T_from_v_e(v, e);
118  dT_dv = 0.0;
119  dT_de = 1.0 / _cv;
120 }
121 
122 void
124  const ADReal & v, const ADReal & e, ADReal & T, ADReal & dT_dv, ADReal & dT_de) const
125 {
126  T = T_from_v_e(v, e);
127  dT_dv = 0.0;
128  dT_de = 1.0 / _cv;
129 }
130 
131 Real
133 {
134  Real T = T_from_v_e(v, e);
135 
136  Real c2 = _gamma * _R_specific * T;
137  if (c2 < 0)
138  {
139  c2 = 0;
140  flagInvalidSolution(
141  "Sound speed squared (gamma * R * T) is negative: c2 = " + Moose::stringify(c2) + ".");
142  }
143 
144  return std::sqrt(c2);
145 }
146 
147 ADReal
149 {
150  using std::sqrt;
151  const auto T = T_from_v_e(v, e);
152 
153  auto c2 = _gamma * _R_specific * T;
154  if (MetaPhysicL::raw_value(c2) < 0)
155  {
156  c2 = 0;
157  flagInvalidSolution(
158  "Sound speed squared (gamma * R * T) is negative: c2 = " + Moose::stringify(c2) + ".");
159  }
160 
161  return sqrt(c2);
162 }
163 
164 void
165 IdealGasFluidProperties::c_from_v_e(Real v, Real e, Real & c, Real & dc_dv, Real & dc_de) const
166 {
167  Real T, dT_dv, dT_de;
168  T_from_v_e(v, e, T, dT_dv, dT_de);
169 
170  c = std::sqrt(_gamma * _R_specific * T);
171 
172  const Real dc_dT = 0.5 / c * _gamma * _R_specific;
173  dc_dv = dc_dT * dT_dv;
174  dc_de = dc_dT * dT_de;
175 }
176 
177 Real
178 IdealGasFluidProperties::c_from_p_T(Real /*p*/, Real T) const
179 {
180  return std::sqrt(_cp * _R * T / (_cv * _molar_mass));
181 }
182 
183 ADReal
184 IdealGasFluidProperties::c_from_p_T(const ADReal & /*p*/, const ADReal & T) const
185 {
186  using std::sqrt;
187  return sqrt(_cp * _R * T / (_cv * _molar_mass));
188 }
189 
190 void
192  const Real /*p*/, const Real T, Real & c, Real & dc_dp, Real & dc_dT) const
193 {
194  c = std::sqrt(_cp * _R * T / (_cv * _molar_mass));
195  dc_dp = 0;
196  dc_dT = 0.5 / c * _cp * _R / (_cv * _molar_mass);
197 }
198 
199 Real
201 {
202  return 1.0 / T;
203 }
204 
205 ADReal
207 {
208  return 1.0 / T;
209 }
210 
211 void
213  const Real /*p*/, const Real T, Real & beta, Real & dbeta_dp, Real & dbeta_dT) const
214 {
215  beta = 1.0 / T;
216  dbeta_dp = 0;
217  dbeta_dT = -1.0 / Utility::pow<2>(T);
218 }
219 
220 Real
222 {
223  return _cp;
224 }
225 
226 void
227 IdealGasFluidProperties::cp_from_v_e(Real v, Real e, Real & cp, Real & dcp_dv, Real & dcp_de) const
228 {
229  cp = cp_from_v_e(v, e);
230  dcp_dv = 0.0;
231  dcp_de = 0.0;
232 }
233 
234 Real
236 {
237  return _cv;
238 }
239 
240 void
241 IdealGasFluidProperties::cv_from_v_e(Real v, Real e, Real & cv, Real & dcv_dv, Real & dcv_de) const
242 {
243  cv = cv_from_v_e(v, e);
244  dcv_dv = 0.0;
245  dcv_de = 0.0;
246 }
247 
248 Real
250 {
251  return _gamma;
252 }
253 
254 Real
256 {
257  return _gamma;
258 }
259 
260 Real
262 {
263  return _mu;
264 }
265 
266 void
267 IdealGasFluidProperties::mu_from_v_e(Real v, Real e, Real & mu, Real & dmu_dv, Real & dmu_de) const
268 {
269  mu = this->mu_from_v_e(v, e);
270  dmu_dv = 0.0;
271  dmu_de = 0.0;
272 }
273 
274 Real
276 {
277  return _k;
278 }
279 
280 void
282  Real /*v*/, Real /*e*/, Real & k, Real & dk_dv, Real & dk_de) const
283 {
284  k = _k;
285  dk_dv = 0;
286  dk_de = 0;
287 }
288 
289 Real
291 {
292  const Real T = T_from_v_e(v, e);
293  const Real p = p_from_v_e(v, e);
294  const Real n = std::pow(T, _gamma) / std::pow(p, _gamma - 1.0);
295  if (n <= 0.0)
296  return getNaN("Negative argument in the ln() function.");
297  return _cv * std::log(n);
298 }
299 
300 void
301 IdealGasFluidProperties::s_from_v_e(Real v, Real e, Real & s, Real & ds_dv, Real & ds_de) const
302 {
303  Real T, dT_dv, dT_de;
304  T_from_v_e(v, e, T, dT_dv, dT_de);
305 
306  Real p, dp_dv, dp_de;
307  p_from_v_e(v, e, p, dp_dv, dp_de);
308 
309  const Real n = std::pow(T, _gamma) / std::pow(p, _gamma - 1.0);
310  if (n <= 0.0)
311  {
312  s = getNaN("Negative argument in the ln() function.");
313  ds_dv = getNaN();
314  ds_de = getNaN();
315  }
316  else
317  {
318  s = _cv * std::log(n);
319 
320  const Real dn_dT = _gamma * std::pow(T, _gamma - 1.0) / std::pow(p, _gamma - 1.0);
321  const Real dn_dp = std::pow(T, _gamma) * (1.0 - _gamma) * std::pow(p, -_gamma);
322 
323  const Real dn_dv = dn_dT * dT_dv + dn_dp * dp_dv;
324  const Real dn_de = dn_dT * dT_de + dn_dp * dp_de;
325 
326  ds_dv = _cv / n * dn_dv;
327  ds_de = _cv / n * dn_de;
328  }
329 }
330 
331 Real
333 {
334  const Real n = std::pow(T, _gamma) / std::pow(p, _gamma - 1.0);
335  if (n <= 0.0)
336  return getNaN("Negative argument in the ln() function.");
337  return _cv * std::log(n);
338 }
339 
340 void
341 IdealGasFluidProperties::s_from_p_T(Real p, Real T, Real & s, Real & ds_dp, Real & ds_dT) const
342 {
343  const Real n = std::pow(T, _gamma) / std::pow(p, _gamma - 1.0);
344  if (n <= 0.0)
345  {
346  s = getNaN("Negative argument in the ln() function.");
347  ds_dp = getNaN();
348  ds_dT = getNaN();
349  }
350  else
351  {
352  s = _cv * std::log(n);
353 
354  const Real dn_dT = _gamma * std::pow(T, _gamma - 1.0) / std::pow(p, _gamma - 1.0);
355  const Real dn_dp = std::pow(T, _gamma) * (1.0 - _gamma) * std::pow(p, -_gamma);
356 
357  ds_dp = _cv / n * dn_dp;
358  ds_dT = _cv / n * dn_dT;
359  }
360 }
361 
362 Real
364 {
365  const Real aux = p * std::pow((h - _e_ref) / (_gamma * _cv), -_gamma / (_gamma - 1));
366  if (aux <= 0.0)
367  return getNaN("Non-positive argument in the ln() function.");
368  return -(_gamma - 1) * _cv * std::log(aux);
369 }
370 
371 void
372 IdealGasFluidProperties::s_from_h_p(Real h, Real p, Real & s, Real & ds_dh, Real & ds_dp) const
373 {
374  s = s_from_h_p(h, p);
375 
376  const Real aux = p * std::pow((h - _e_ref) / (_gamma * _cv), -_gamma / (_gamma - 1));
377  const Real daux_dh = p * std::pow((h - _e_ref) / (_gamma * _cv), -_gamma / (_gamma - 1) - 1) *
378  (-_gamma / (_gamma - 1)) / (_gamma * _cv);
379  const Real daux_dp = std::pow((h - _e_ref) / (_gamma * _cv), -_gamma / (_gamma - 1));
380  ds_dh = -(_gamma - 1) * _cv / aux * daux_dh;
381  ds_dp = -(_gamma - 1) * _cv / aux * daux_dp;
382 }
383 
384 Real
386 {
387  const Real aux = (s + _cv * std::log(std::pow(p, _gamma - 1.0))) / _cv;
388  const Real T = std::pow(std::exp(aux), 1.0 / _gamma);
389  return rho_from_p_T(p, T);
390 }
391 
392 void
394  Real p, Real s, Real & rho, Real & drho_dp, Real & drho_ds) const
395 {
396  // T(p,s)
397  const Real aux = (s + _cv * std::log(std::pow(p, _gamma - 1.0))) / _cv;
398  const Real T = std::pow(std::exp(aux), 1 / _gamma);
399 
400  // dT/dp
401  const Real dT_dp = 1.0 / _gamma * std::pow(std::exp(aux), 1.0 / _gamma - 1.0) * std::exp(aux) /
402  std::pow(p, _gamma - 1.0) * (_gamma - 1.0) * std::pow(p, _gamma - 2.0);
403 
404  // dT/ds
405  const Real dT_ds =
406  1.0 / _gamma * std::pow(std::exp(aux), 1.0 / _gamma - 1.0) * std::exp(aux) / _cv;
407 
408  // Drho/Dp = d/dp[rho(p, T(p,s))] = drho/dp + drho/dT * dT/dp
409  Real drho_dp_partial, drho_dT;
410  rho_from_p_T(p, T, rho, drho_dp_partial, drho_dT);
411  drho_dp = drho_dp_partial + drho_dT * dT_dp;
412 
413  // Drho/Ds = d/ds[rho(p, T(p,s))] = drho/dT * dT/ds
414  drho_ds = drho_dT * dT_ds;
415 }
416 
417 Real
418 IdealGasFluidProperties::e_from_v_h(Real /*v*/, Real h) const
419 {
420  return (h + (_gamma - 1.0) * _e_ref) / _gamma;
421 }
422 
423 void
424 IdealGasFluidProperties::e_from_v_h(Real v, Real h, Real & e, Real & de_dv, Real & de_dh) const
425 {
426  e = e_from_v_h(v, h);
427  de_dv = 0.0;
428  de_dh = 1.0 / _gamma;
429 }
430 
431 Real
433 {
434  return p * _molar_mass / (_R * T);
435 }
436 
437 ADReal
439 {
440  return p * _molar_mass / (_R * T);
441 }
442 
443 void
445  const ADReal & p, const ADReal & T, ADReal & rho, ADReal & drho_dp, ADReal & drho_dT) const
446 {
447  rho = rho_from_p_T(p, T);
448  drho_dp = _molar_mass / (_R * T);
449  drho_dT = -p * _molar_mass / (_R * T * T);
450 }
451 
452 void
454  Real p, Real T, Real & rho, Real & drho_dp, Real & drho_dT) const
455 {
456  rho = rho_from_p_T(p, T);
457  drho_dp = _molar_mass / (_R * T);
458  drho_dT = -p * _molar_mass / (_R * T * T);
459 }
460 
461 Real
463 {
464  return p / (_gamma - 1.0) / rho + _e_ref;
465 }
466 
467 ADReal
469 {
470  return p / (_gamma - 1.0) / rho + _e_ref;
471 }
472 
473 void
475  Real p, Real rho, Real & e, Real & de_dp, Real & de_drho) const
476 {
477  e = e_from_p_rho(p, rho);
478  de_dp = 1.0 / (_gamma - 1.0) / rho;
479  de_drho = -p / (_gamma - 1.0) / rho / rho;
480 }
481 
482 void
484  const ADReal & p, const ADReal & rho, ADReal & e, ADReal & de_dp, ADReal & de_drho) const
485 {
486  e = e_from_p_rho(p, rho);
487  de_dp = 1.0 / (_gamma - 1.0) / rho;
488  de_drho = -p / (_gamma - 1.0) / rho / rho;
489 }
490 
491 Real
492 IdealGasFluidProperties::e_from_T_v(Real T, Real /*v*/) const
493 {
494  return _cv * T + _e_ref;
495 }
496 
497 void
498 IdealGasFluidProperties::e_from_T_v(Real T, Real /*v*/, Real & e, Real & de_dT, Real & de_dv) const
499 {
500  e = _cv * T + _e_ref;
501  de_dT = _cv;
502  de_dv = 0.0;
503 }
504 
505 ADReal
506 IdealGasFluidProperties::e_from_T_v(const ADReal & T, const ADReal & /*v*/) const
507 {
508  return _cv * T + _e_ref;
509 }
510 
511 void
513  const ADReal & T, const ADReal & /*v*/, ADReal & e, ADReal & de_dT, ADReal & de_dv) const
514 {
515  e = _cv * T + _e_ref;
516  de_dT = _cv;
517  de_dv = 0.0;
518 }
519 
520 Real
522 {
523  return (_gamma - 1.0) * _cv * T / v;
524 }
525 
526 void
527 IdealGasFluidProperties::p_from_T_v(Real T, Real v, Real & p, Real & dp_dT, Real & dp_dv) const
528 {
529  p = (_gamma - 1.0) * _cv * T / v;
530  dp_dT = (_gamma - 1.0) * _cv / v;
531  dp_dv = -(_gamma - 1.0) * _cv * T / (v * v);
532 }
533 
534 Real
535 IdealGasFluidProperties::h_from_T_v(Real T, Real /*v*/) const
536 {
537  return _gamma * _cv * T + _e_ref;
538 }
539 
540 void
541 IdealGasFluidProperties::h_from_T_v(Real T, Real /*v*/, Real & h, Real & dh_dT, Real & dh_dv) const
542 {
543  h = _gamma * _cv * T + _e_ref;
544  dh_dT = _gamma * _cv;
545  dh_dv = 0.0;
546 }
547 
548 Real
550 {
551  Real p = p_from_T_v(T, v);
552  return s_from_p_T(p, T);
553 }
554 
555 void
556 IdealGasFluidProperties::s_from_T_v(Real T, Real v, Real & s, Real & ds_dT, Real & ds_dv) const
557 {
558  Real p, dp_dT_v, dp_dv_T;
559  Real ds_dp_T, ds_dT_p;
560  p_from_T_v(T, v, p, dp_dT_v, dp_dv_T);
561  s_from_p_T(p, T, s, ds_dp_T, ds_dT_p);
562  ds_dT = ds_dT_p + ds_dp_T * dp_dT_v;
563  ds_dv = ds_dp_T * dp_dv_T;
564 }
565 
566 Real
567 IdealGasFluidProperties::cv_from_T_v(Real /*T*/, Real /*v*/) const
568 {
569  return _cv;
570 }
571 
572 Real
574 {
575  return _e_c;
576 }
577 
578 void
579 IdealGasFluidProperties::v_e_spndl_from_T(Real /*T*/, Real & v, Real & e) const
580 {
581  v = 1. / _rho_c;
582  e = _e_c;
583 }
584 
585 Real
586 IdealGasFluidProperties::h_from_p_T(Real /*p*/, Real T) const
587 {
588  return _cp * T + _e_ref;
589 }
590 
591 void
592 IdealGasFluidProperties::h_from_p_T(Real p, Real T, Real & h, Real & dh_dp, Real & dh_dT) const
593 {
594  h = h_from_p_T(p, T);
595  dh_dp = 0.0;
596  dh_dT = _cp;
597 }
598 
599 Real
600 IdealGasFluidProperties::e_from_p_T(Real /*p*/, Real T) const
601 {
602  return _cv * T + _e_ref;
603 }
604 
605 void
606 IdealGasFluidProperties::e_from_p_T(Real p, Real T, Real & e, Real & de_dp, Real & de_dT) const
607 {
608  e = e_from_p_T(p, T);
609  de_dp = 0.0;
610  de_dT = _cv;
611 }
612 
613 Real
615 {
616  return std::pow((h - _e_ref) / (_gamma * _cv), _gamma / (_gamma - 1.0)) *
617  std::exp(-s / ((_gamma - 1.0) * _cv));
618 }
619 
620 void
621 IdealGasFluidProperties::p_from_h_s(Real h, Real s, Real & p, Real & dp_dh, Real & dp_ds) const
622 {
623  p = p_from_h_s(h, s);
624  dp_dh = _gamma / (_gamma - 1.0) / (_gamma * _cv) *
625  std::pow((h - _e_ref) / (_gamma * _cv), 1.0 / (_gamma - 1.0)) *
626  std::exp(-s / ((_gamma - 1.0) * _cv));
627  dp_ds = std::pow((h - _e_ref) / (_gamma * _cv), _gamma / (_gamma - 1)) *
628  std::exp(-s / ((_gamma - 1) * _cv)) / ((1 - _gamma) * _cv);
629 }
630 
631 Real
633 {
634  // g(p,T) for SGEOS is given by Equation (37) in the following reference:
635  //
636  // Ray A. Berry, Richard Saurel, Olivier LeMetayer
637  // The discrete equation method (DEM) for fully compressible, two-phase flows in
638  // ducts of spatially varying cross-section
639  // Nuclear Engineering and Design 240 (2010) p. 3797-3818
640  //
641  const Real p = p_from_v_e(v, e);
642  const Real T = T_from_v_e(v, e);
643 
644  return _gamma * _cv * T - _cv * T * std::log(std::pow(T, _gamma) / std::pow(p, _gamma - 1.0));
645 }
646 
647 Real
649 {
650  return _molar_mass;
651 }
652 
653 Real
655 {
656  return _T_c;
657 }
658 
659 Real
661 {
662  return _rho_c;
663 }
664 
665 Real
667 {
668  return _e_c;
669 }
670 
671 Real
673 {
674  return (h - _e_ref) / _gamma / _cv;
675 }
676 
677 void
678 IdealGasFluidProperties::T_from_p_h(Real /*p*/, Real h, Real & T, Real & dT_dp, Real & dT_dh) const
679 {
680  T = (h - _e_ref) / (_gamma * _cv);
681  dT_dp = 0;
682  dT_dh = 1.0 / (_gamma * _cv);
683 }
684 
685 Real
686 IdealGasFluidProperties::cv_from_p_T(Real /* pressure */, Real /* temperature */) const
687 {
688  return _cv;
689 }
690 
691 void
692 IdealGasFluidProperties::cv_from_p_T(Real p, Real T, Real & cv, Real & dcv_dp, Real & dcv_dT) const
693 {
694  cv = cv_from_p_T(p, T);
695  dcv_dp = 0.0;
696  dcv_dT = 0.0;
697 }
698 
699 Real
700 IdealGasFluidProperties::cp_from_p_T(Real /* pressure */, Real /* temperature */) const
701 {
702  return _cp;
703 }
704 
705 void
706 IdealGasFluidProperties::cp_from_p_T(Real p, Real T, Real & cp, Real & dcp_dp, Real & dcp_dT) const
707 {
708  cp = cp_from_p_T(p, T);
709  dcp_dp = 0.0;
710  dcp_dT = 0.0;
711 }
712 
713 Real
714 IdealGasFluidProperties::mu_from_p_T(Real /* pressure */, Real /* temperature */) const
715 {
716  return _mu;
717 }
718 
719 void
720 IdealGasFluidProperties::mu_from_p_T(Real p, Real T, Real & mu, Real & dmu_dp, Real & dmu_dT) const
721 {
722  mu = this->mu_from_p_T(p, T);
723  dmu_dp = 0.0;
724  dmu_dT = 0.0;
725 }
726 
727 Real
728 IdealGasFluidProperties::k_from_p_T(Real /* pressure */, Real /* temperature */) const
729 {
730  return _k;
731 }
732 
733 void
734 IdealGasFluidProperties::k_from_p_T(Real p, Real T, Real & k, Real & dk_dp, Real & dk_dT) const
735 {
736  k = k_from_p_T(p, T);
737  dk_dp = 0.0;
738  dk_dT = 0.0;
739 }
740 
741 Real
742 IdealGasFluidProperties::pp_sat_from_p_T(Real /*p*/, Real /*T*/) const
743 {
744  mooseError(__PRETTY_FUNCTION__, " not implemented. Use a real fluid property class!");
745 }
virtual Real criticalInternalEnergy() const override
Critical specific internal energy.
static const std::string cv
Definition: NS.h:126
virtual Real cv_from_p_T(Real p, Real T) const override
const Real _cv
Specific heat at constant volume.
const double T
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)
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
const double v
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:46
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
virtual Real pp_sat_from_p_T(Real, Real) const override
virtual Real molarMass() const override
Molar mass [kg/mol].
virtual Real e_from_T_v(Real T, Real v) const override
DualNumber< Real, DNDerivativeType, false > ADReal
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:125
virtual Real s_from_T_v(Real T, Real v) const override
virtual Real e_from_p_rho(Real p, Real rho) const override
e e e e s T T T T T rho v v T e h
virtual Real s_from_h_p(Real h, Real p) const override
const double rho
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
static InputParameters validParams()
std::string stringify(const T &t)
virtual std::string fluidName() const override
Fluid name.
virtual Real beta_from_p_T(Real p, Real T) 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
CTSub CT_OPERATOR_BINARY CTMul CTCompareLess CTCompareGreater CTCompareEqual _arg template * sqrt(_arg)) *_arg.template D< dtag >()) CT_SIMPLE_UNARY_FUNCTION(tanh
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 p
const Real _R_specific
Specific gas constant (R / molar mass)
virtual Real p_from_h_s(Real h, Real s) const override
void mooseError(Args &&... args) const
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 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.
const double mu
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:134
virtual Real s_from_p_T(Real p, Real T) const override
const Real _mu
Dynamic viscosity.
const Real & _e_ref
Reference specific internal energy.