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  const auto T = T_from_v_e(v, e);
151 
152  auto c2 = _gamma * _R_specific * T;
153  if (MetaPhysicL::raw_value(c2) < 0)
154  {
155  c2 = 0;
156  flagInvalidSolution(
157  "Sound speed squared (gamma * R * T) is negative: c2 = " + Moose::stringify(c2) + ".");
158  }
159 
160  return std::sqrt(c2);
161 }
162 
163 void
164 IdealGasFluidProperties::c_from_v_e(Real v, Real e, Real & c, Real & dc_dv, Real & dc_de) const
165 {
166  Real T, dT_dv, dT_de;
167  T_from_v_e(v, e, T, dT_dv, dT_de);
168 
169  c = std::sqrt(_gamma * _R_specific * T);
170 
171  const Real dc_dT = 0.5 / c * _gamma * _R_specific;
172  dc_dv = dc_dT * dT_dv;
173  dc_de = dc_dT * dT_de;
174 }
175 
176 Real
177 IdealGasFluidProperties::c_from_p_T(Real /*p*/, Real T) const
178 {
179  return std::sqrt(_cp * _R * T / (_cv * _molar_mass));
180 }
181 
182 ADReal
183 IdealGasFluidProperties::c_from_p_T(const ADReal & /*p*/, const ADReal & T) const
184 {
185  return std::sqrt(_cp * _R * T / (_cv * _molar_mass));
186 }
187 
188 void
190  const Real /*p*/, const Real T, Real & c, Real & dc_dp, Real & dc_dT) const
191 {
192  c = std::sqrt(_cp * _R * T / (_cv * _molar_mass));
193  dc_dp = 0;
194  dc_dT = 0.5 / c * _cp * _R / (_cv * _molar_mass);
195 }
196 
197 Real
198 IdealGasFluidProperties::beta_from_p_T(Real /*p*/, Real T) const
199 {
200  return 1.0 / T;
201 }
202 
203 ADReal
204 IdealGasFluidProperties::beta_from_p_T(const ADReal & /*p*/, const ADReal & T) const
205 {
206  return 1.0 / T;
207 }
208 
209 void
211  const Real /*p*/, const Real T, Real & beta, Real & dbeta_dp, Real & dbeta_dT) const
212 {
213  beta = 1.0 / T;
214  dbeta_dp = 0;
215  dbeta_dT = -1.0 / Utility::pow<2>(T);
216 }
217 
218 Real IdealGasFluidProperties::cp_from_v_e(Real, Real) const { return _cp; }
219 
220 void
221 IdealGasFluidProperties::cp_from_v_e(Real v, Real e, Real & cp, Real & dcp_dv, Real & dcp_de) const
222 {
223  cp = cp_from_v_e(v, e);
224  dcp_dv = 0.0;
225  dcp_de = 0.0;
226 }
227 
228 Real IdealGasFluidProperties::cv_from_v_e(Real, Real) const { return _cv; }
229 
230 void
231 IdealGasFluidProperties::cv_from_v_e(Real v, Real e, Real & cv, Real & dcv_dv, Real & dcv_de) const
232 {
233  cv = cv_from_v_e(v, e);
234  dcv_dv = 0.0;
235  dcv_de = 0.0;
236 }
237 
239 
241 
242 Real IdealGasFluidProperties::mu_from_v_e(Real, Real) const { return _mu; }
243 
244 void
245 IdealGasFluidProperties::mu_from_v_e(Real v, Real e, Real & mu, Real & dmu_dv, Real & dmu_de) const
246 {
247  mu = this->mu_from_v_e(v, e);
248  dmu_dv = 0.0;
249  dmu_de = 0.0;
250 }
251 
252 Real IdealGasFluidProperties::k_from_v_e(Real, Real) const { return _k; }
253 
254 void
256  Real /*v*/, Real /*e*/, Real & k, Real & dk_dv, Real & dk_de) const
257 {
258  k = _k;
259  dk_dv = 0;
260  dk_de = 0;
261 }
262 
263 Real
265 {
266  const Real T = T_from_v_e(v, e);
267  const Real p = p_from_v_e(v, e);
268  const Real n = std::pow(T, _gamma) / std::pow(p, _gamma - 1.0);
269  if (n <= 0.0)
270  return getNaN("Negative argument in the ln() function.");
271  return _cv * std::log(n);
272 }
273 
274 void
275 IdealGasFluidProperties::s_from_v_e(Real v, Real e, Real & s, Real & ds_dv, Real & ds_de) const
276 {
277  Real T, dT_dv, dT_de;
278  T_from_v_e(v, e, T, dT_dv, dT_de);
279 
280  Real p, dp_dv, dp_de;
281  p_from_v_e(v, e, p, dp_dv, dp_de);
282 
283  const Real n = std::pow(T, _gamma) / std::pow(p, _gamma - 1.0);
284  if (n <= 0.0)
285  {
286  s = getNaN("Negative argument in the ln() function.");
287  ds_dv = getNaN();
288  ds_de = getNaN();
289  }
290  else
291  {
292  s = _cv * std::log(n);
293 
294  const Real dn_dT = _gamma * std::pow(T, _gamma - 1.0) / std::pow(p, _gamma - 1.0);
295  const Real dn_dp = std::pow(T, _gamma) * (1.0 - _gamma) * std::pow(p, -_gamma);
296 
297  const Real dn_dv = dn_dT * dT_dv + dn_dp * dp_dv;
298  const Real dn_de = dn_dT * dT_de + dn_dp * dp_de;
299 
300  ds_dv = _cv / n * dn_dv;
301  ds_de = _cv / n * dn_de;
302  }
303 }
304 
305 Real
307 {
308  const Real n = std::pow(T, _gamma) / std::pow(p, _gamma - 1.0);
309  if (n <= 0.0)
310  return getNaN("Negative argument in the ln() function.");
311  return _cv * std::log(n);
312 }
313 
314 void
315 IdealGasFluidProperties::s_from_p_T(Real p, Real T, Real & s, Real & ds_dp, Real & ds_dT) const
316 {
317  const Real n = std::pow(T, _gamma) / std::pow(p, _gamma - 1.0);
318  if (n <= 0.0)
319  {
320  s = getNaN("Negative argument in the ln() function.");
321  ds_dp = getNaN();
322  ds_dT = getNaN();
323  }
324  else
325  {
326  s = _cv * std::log(n);
327 
328  const Real dn_dT = _gamma * std::pow(T, _gamma - 1.0) / std::pow(p, _gamma - 1.0);
329  const Real dn_dp = std::pow(T, _gamma) * (1.0 - _gamma) * std::pow(p, -_gamma);
330 
331  ds_dp = _cv / n * dn_dp;
332  ds_dT = _cv / n * dn_dT;
333  }
334 }
335 
336 Real
338 {
339  const Real aux = p * std::pow((h - _e_ref) / (_gamma * _cv), -_gamma / (_gamma - 1));
340  if (aux <= 0.0)
341  return getNaN("Non-positive argument in the ln() function.");
342  return -(_gamma - 1) * _cv * std::log(aux);
343 }
344 
345 void
346 IdealGasFluidProperties::s_from_h_p(Real h, Real p, Real & s, Real & ds_dh, Real & ds_dp) const
347 {
348  s = s_from_h_p(h, p);
349 
350  const Real aux = p * std::pow((h - _e_ref) / (_gamma * _cv), -_gamma / (_gamma - 1));
351  const Real daux_dh = p * std::pow((h - _e_ref) / (_gamma * _cv), -_gamma / (_gamma - 1) - 1) *
352  (-_gamma / (_gamma - 1)) / (_gamma * _cv);
353  const Real daux_dp = std::pow((h - _e_ref) / (_gamma * _cv), -_gamma / (_gamma - 1));
354  ds_dh = -(_gamma - 1) * _cv / aux * daux_dh;
355  ds_dp = -(_gamma - 1) * _cv / aux * daux_dp;
356 }
357 
358 Real
360 {
361  const Real aux = (s + _cv * std::log(std::pow(p, _gamma - 1.0))) / _cv;
362  const Real T = std::pow(std::exp(aux), 1.0 / _gamma);
363  return rho_from_p_T(p, T);
364 }
365 
366 void
368  Real p, Real s, Real & rho, Real & drho_dp, Real & drho_ds) const
369 {
370  // T(p,s)
371  const Real aux = (s + _cv * std::log(std::pow(p, _gamma - 1.0))) / _cv;
372  const Real T = std::pow(std::exp(aux), 1 / _gamma);
373 
374  // dT/dp
375  const Real dT_dp = 1.0 / _gamma * std::pow(std::exp(aux), 1.0 / _gamma - 1.0) * std::exp(aux) /
376  std::pow(p, _gamma - 1.0) * (_gamma - 1.0) * std::pow(p, _gamma - 2.0);
377 
378  // dT/ds
379  const Real dT_ds =
380  1.0 / _gamma * std::pow(std::exp(aux), 1.0 / _gamma - 1.0) * std::exp(aux) / _cv;
381 
382  // Drho/Dp = d/dp[rho(p, T(p,s))] = drho/dp + drho/dT * dT/dp
383  Real drho_dp_partial, drho_dT;
384  rho_from_p_T(p, T, rho, drho_dp_partial, drho_dT);
385  drho_dp = drho_dp_partial + drho_dT * dT_dp;
386 
387  // Drho/Ds = d/ds[rho(p, T(p,s))] = drho/dT * dT/ds
388  drho_ds = drho_dT * dT_ds;
389 }
390 
391 Real
392 IdealGasFluidProperties::e_from_v_h(Real /*v*/, Real h) const
393 {
394  return (h + (_gamma - 1.0) * _e_ref) / _gamma;
395 }
396 
397 void
398 IdealGasFluidProperties::e_from_v_h(Real v, Real h, Real & e, Real & de_dv, Real & de_dh) const
399 {
400  e = e_from_v_h(v, h);
401  de_dv = 0.0;
402  de_dh = 1.0 / _gamma;
403 }
404 
405 Real
407 {
408  return p * _molar_mass / (_R * T);
409 }
410 
411 ADReal
413 {
414  return p * _molar_mass / (_R * T);
415 }
416 
417 void
419  const ADReal & p, const ADReal & T, ADReal & rho, ADReal & drho_dp, ADReal & drho_dT) const
420 {
421  rho = rho_from_p_T(p, T);
422  drho_dp = _molar_mass / (_R * T);
423  drho_dT = -p * _molar_mass / (_R * T * T);
424 }
425 
426 void
428  Real p, Real T, Real & rho, Real & drho_dp, Real & drho_dT) const
429 {
430  rho = rho_from_p_T(p, T);
431  drho_dp = _molar_mass / (_R * T);
432  drho_dT = -p * _molar_mass / (_R * T * T);
433 }
434 
435 Real
437 {
438  return p / (_gamma - 1.0) / rho + _e_ref;
439 }
440 
441 ADReal
443 {
444  return p / (_gamma - 1.0) / rho + _e_ref;
445 }
446 
447 void
449  Real p, Real rho, Real & e, Real & de_dp, Real & de_drho) const
450 {
451  e = e_from_p_rho(p, rho);
452  de_dp = 1.0 / (_gamma - 1.0) / rho;
453  de_drho = -p / (_gamma - 1.0) / rho / rho;
454 }
455 
456 void
458  const ADReal & p, const ADReal & rho, ADReal & e, ADReal & de_dp, ADReal & de_drho) const
459 {
460  e = e_from_p_rho(p, rho);
461  de_dp = 1.0 / (_gamma - 1.0) / rho;
462  de_drho = -p / (_gamma - 1.0) / rho / rho;
463 }
464 
465 Real
466 IdealGasFluidProperties::e_from_T_v(Real T, Real /*v*/) const
467 {
468  return _cv * T + _e_ref;
469 }
470 
471 void
472 IdealGasFluidProperties::e_from_T_v(Real T, Real /*v*/, Real & e, Real & de_dT, Real & de_dv) const
473 {
474  e = _cv * T + _e_ref;
475  de_dT = _cv;
476  de_dv = 0.0;
477 }
478 
479 ADReal
480 IdealGasFluidProperties::e_from_T_v(const ADReal & T, const ADReal & /*v*/) const
481 {
482  return _cv * T + _e_ref;
483 }
484 
485 void
487  const ADReal & T, const ADReal & /*v*/, ADReal & e, ADReal & de_dT, ADReal & de_dv) const
488 {
489  e = _cv * T + _e_ref;
490  de_dT = _cv;
491  de_dv = 0.0;
492 }
493 
494 Real
496 {
497  return (_gamma - 1.0) * _cv * T / v;
498 }
499 
500 void
501 IdealGasFluidProperties::p_from_T_v(Real T, Real v, Real & p, Real & dp_dT, Real & dp_dv) const
502 {
503  p = (_gamma - 1.0) * _cv * T / v;
504  dp_dT = (_gamma - 1.0) * _cv / v;
505  dp_dv = -(_gamma - 1.0) * _cv * T / (v * v);
506 }
507 
508 Real
509 IdealGasFluidProperties::h_from_T_v(Real T, Real /*v*/) const
510 {
511  return _gamma * _cv * T + _e_ref;
512 }
513 
514 void
515 IdealGasFluidProperties::h_from_T_v(Real T, Real /*v*/, Real & h, Real & dh_dT, Real & dh_dv) const
516 {
517  h = _gamma * _cv * T + _e_ref;
518  dh_dT = _gamma * _cv;
519  dh_dv = 0.0;
520 }
521 
522 Real
524 {
525  Real p = p_from_T_v(T, v);
526  return s_from_p_T(p, T);
527 }
528 
529 void
530 IdealGasFluidProperties::s_from_T_v(Real T, Real v, Real & s, Real & ds_dT, Real & ds_dv) const
531 {
532  Real p, dp_dT_v, dp_dv_T;
533  Real ds_dp_T, ds_dT_p;
534  p_from_T_v(T, v, p, dp_dT_v, dp_dv_T);
535  s_from_p_T(p, T, s, ds_dp_T, ds_dT_p);
536  ds_dT = ds_dT_p + ds_dp_T * dp_dT_v;
537  ds_dv = ds_dp_T * dp_dv_T;
538 }
539 
540 Real IdealGasFluidProperties::cv_from_T_v(Real /*T*/, Real /*v*/) const { return _cv; }
541 
542 Real IdealGasFluidProperties::e_spndl_from_v(Real /*v*/) const { return _e_c; }
543 
544 void
545 IdealGasFluidProperties::v_e_spndl_from_T(Real /*T*/, Real & v, Real & e) const
546 {
547  v = 1. / _rho_c;
548  e = _e_c;
549 }
550 
551 Real
552 IdealGasFluidProperties::h_from_p_T(Real /*p*/, Real T) const
553 {
554  return _cp * T + _e_ref;
555 }
556 
557 void
558 IdealGasFluidProperties::h_from_p_T(Real p, Real T, Real & h, Real & dh_dp, Real & dh_dT) const
559 {
560  h = h_from_p_T(p, T);
561  dh_dp = 0.0;
562  dh_dT = _cp;
563 }
564 
565 Real
566 IdealGasFluidProperties::e_from_p_T(Real /*p*/, Real T) const
567 {
568  return _cv * T + _e_ref;
569 }
570 
571 void
572 IdealGasFluidProperties::e_from_p_T(Real p, Real T, Real & e, Real & de_dp, Real & de_dT) const
573 {
574  e = e_from_p_T(p, T);
575  de_dp = 0.0;
576  de_dT = _cv;
577 }
578 
579 Real
581 {
582  return std::pow((h - _e_ref) / (_gamma * _cv), _gamma / (_gamma - 1.0)) *
583  std::exp(-s / ((_gamma - 1.0) * _cv));
584 }
585 
586 void
587 IdealGasFluidProperties::p_from_h_s(Real h, Real s, Real & p, Real & dp_dh, Real & dp_ds) const
588 {
589  p = p_from_h_s(h, s);
590  dp_dh = _gamma / (_gamma - 1.0) / (_gamma * _cv) *
591  std::pow((h - _e_ref) / (_gamma * _cv), 1.0 / (_gamma - 1.0)) *
592  std::exp(-s / ((_gamma - 1.0) * _cv));
593  dp_ds = std::pow((h - _e_ref) / (_gamma * _cv), _gamma / (_gamma - 1)) *
594  std::exp(-s / ((_gamma - 1) * _cv)) / ((1 - _gamma) * _cv);
595 }
596 
597 Real
599 {
600  // g(p,T) for SGEOS is given by Equation (37) in the following reference:
601  //
602  // Ray A. Berry, Richard Saurel, Olivier LeMetayer
603  // The discrete equation method (DEM) for fully compressible, two-phase flows in
604  // ducts of spatially varying cross-section
605  // Nuclear Engineering and Design 240 (2010) p. 3797-3818
606  //
607  const Real p = p_from_v_e(v, e);
608  const Real T = T_from_v_e(v, e);
609 
610  return _gamma * _cv * T - _cv * T * std::log(std::pow(T, _gamma) / std::pow(p, _gamma - 1.0));
611 }
612 
613 Real
615 {
616  return _molar_mass;
617 }
618 
619 Real
621 {
622  return _T_c;
623 }
624 
625 Real
627 {
628  return _rho_c;
629 }
630 
631 Real
633 {
634  return _e_c;
635 }
636 
637 Real
639 {
640  return (h - _e_ref) / _gamma / _cv;
641 }
642 
643 void
644 IdealGasFluidProperties::T_from_p_h(Real /*p*/, Real h, Real & T, Real & dT_dp, Real & dT_dh) const
645 {
646  T = (h - _e_ref) / (_gamma * _cv);
647  dT_dp = 0;
648  dT_dh = 1.0 / (_gamma * _cv);
649 }
650 
651 Real IdealGasFluidProperties::cv_from_p_T(Real /* pressure */, Real /* temperature */) const
652 {
653  return _cv;
654 }
655 
656 void
657 IdealGasFluidProperties::cv_from_p_T(Real p, Real T, Real & cv, Real & dcv_dp, Real & dcv_dT) const
658 {
659  cv = cv_from_p_T(p, T);
660  dcv_dp = 0.0;
661  dcv_dT = 0.0;
662 }
663 
664 Real IdealGasFluidProperties::cp_from_p_T(Real /* pressure */, Real /* temperature */) const
665 {
666  return _cp;
667 }
668 
669 void
670 IdealGasFluidProperties::cp_from_p_T(Real p, Real T, Real & cp, Real & dcp_dp, Real & dcp_dT) const
671 {
672  cp = cp_from_p_T(p, T);
673  dcp_dp = 0.0;
674  dcp_dT = 0.0;
675 }
676 
677 Real IdealGasFluidProperties::mu_from_p_T(Real /* pressure */, Real /* temperature */) const
678 {
679  return _mu;
680 }
681 
682 void
683 IdealGasFluidProperties::mu_from_p_T(Real p, Real T, Real & mu, Real & dmu_dp, Real & dmu_dT) const
684 {
685  mu = this->mu_from_p_T(p, T);
686  dmu_dp = 0.0;
687  dmu_dT = 0.0;
688 }
689 
690 Real IdealGasFluidProperties::k_from_p_T(Real /* pressure */, Real /* temperature */) const
691 {
692  return _k;
693 }
694 
695 void
696 IdealGasFluidProperties::k_from_p_T(Real p, Real T, Real & k, Real & dk_dp, Real & dk_dT) const
697 {
698  k = k_from_p_T(p, T);
699  dk_dp = 0.0;
700  dk_dT = 0.0;
701 }
702 
703 Real IdealGasFluidProperties::pp_sat_from_p_T(Real /*p*/, Real /*T*/) const
704 {
705  mooseError(__PRETTY_FUNCTION__, " not implemented. Use a real fluid property class!");
706 }
virtual Real criticalInternalEnergy() const override
Critical specific internal energy.
static const std::string cv
Definition: NS.h:122
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)
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: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, true > 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:121
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
static const std::string mu
Definition: NS.h:123
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
static const std::string v
Definition: NS.h:84
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:130
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.