https://mooseframework.inl.gov
Loading...
Searching...
No Matches
StiffenedGasFluidProperties.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
13
16{
18 params += NaNInterface::validParams();
19 params.addParam<bool>(
20 "allow_nonphysical_states", true, "Allows for non-physical states, e.g., negative density.");
21 params.addRequiredParam<Real>("gamma", "Heat capacity ratio");
22 params.addRequiredParam<Real>("cv", "Constant volume specific heat");
23 params.addRequiredParam<Real>("q", "Parameter defining zero point of internal energy");
24 params.addRequiredParam<Real>("p_inf", "Stiffness parameter");
25 params.addParam<Real>("q_prime", 0, "Parameter");
26 params.addParam<Real>("mu", 1.e-3, "Dynamic viscosity, Pa.s");
27 params.addParam<Real>("k", 0.6, "Thermal conductivity, W/(m-K)");
28 params.addParam<Real>("M", 0, "Molar mass, kg/mol");
29 params.addParam<Real>("T_c", 0, "Critical temperature, K");
30 params.addParam<Real>("rho_c", 0, "Critical density, kg/m3");
31 params.addParam<Real>("e_c", 0, "Internal energy at the critical point, J/kg");
32 params.addClassDescription("Fluid properties for a stiffened gas");
33 return params;
34}
35
37 : SinglePhaseFluidProperties(parameters),
38 NaNInterface(this),
39 _allow_nonphysical_states(getParam<bool>("allow_nonphysical_states")),
40 _gamma(getParam<Real>("gamma")),
41 _cv(getParam<Real>("cv")),
42 _q(getParam<Real>("q")),
43 _q_prime(getParam<Real>("q_prime")),
44 _p_inf(getParam<Real>("p_inf")),
45 _mu(getParam<Real>("mu")),
46 _k(getParam<Real>("k")),
47 _molar_mass(getParam<Real>("M")),
48 _T_c(getParam<Real>("T_c")),
49 _rho_c(getParam<Real>("rho_c")),
50 _e_c(getParam<Real>("e_c"))
51{
52 if (_cv == 0.0)
53 mooseError("cv cannot be zero.");
54 _cp = _cv * _gamma;
55}
56
58
59Real
60StiffenedGasFluidProperties::p_from_v_e(Real v, Real e) const
61{
62 return p_from_v_e_template(v, e);
63}
64
65void
66StiffenedGasFluidProperties::p_from_v_e(Real v, Real e, Real & p, Real & dp_dv, Real & dp_de) const
67{
68 p_from_v_e_template(v, e, p, dp_dv, dp_de);
69}
70
72StiffenedGasFluidProperties::p_from_v_e(const ADReal & v, const ADReal & e) const
73{
74 return p_from_v_e_template(v, e);
75}
76
77void
78StiffenedGasFluidProperties::p_from_v_e(
79 const ADReal & v, const ADReal & e, ADReal & p, ADReal & dp_dv, ADReal & dp_de) const
80{
81 p_from_v_e_template(v, e, p, dp_dv, dp_de);
82}
83
84Real
85StiffenedGasFluidProperties::T_from_v_e(Real v, Real e) const
86{
87 return T_from_v_e_template(v, e);
88}
89
90void
91StiffenedGasFluidProperties::T_from_v_e(Real v, Real e, Real & T, Real & dT_dv, Real & dT_de) const
92{
93 T_from_v_e_template(v, e, T, dT_dv, dT_de);
94}
95
97StiffenedGasFluidProperties::T_from_v_e(const ADReal & v, const ADReal & e) const
98{
99 return T_from_v_e_template(v, e);
100}
101
102void
103StiffenedGasFluidProperties::T_from_v_e(
104 const ADReal & v, const ADReal & e, ADReal & p, ADReal & dp_dv, ADReal & dp_de) const
105{
106 T_from_v_e_template(v, e, p, dp_dv, dp_de);
107}
108
109Real
110StiffenedGasFluidProperties::T_from_p_h(Real p, Real h) const
111{
112 return T_from_p_h_template(p, h);
113}
114
115void
116StiffenedGasFluidProperties::T_from_p_h(Real p, Real h, Real & T, Real & dT_dp, Real & dT_dh) const
117{
118 T_from_p_h_template(p, h, T, dT_dp, dT_dh);
119}
120
121ADReal
122StiffenedGasFluidProperties::T_from_p_h(const ADReal & p, const ADReal & h) const
123{
124 return T_from_p_h_template(p, h);
125}
126
127void
128StiffenedGasFluidProperties::T_from_p_h(
129 const ADReal & p, const ADReal & h, ADReal & T, ADReal & dT_dp, ADReal & dT_dh) const
130{
131 T_from_p_h_template(p, h, T, dT_dp, dT_dh);
132}
133
134Real
136{
138 return std::sqrt(_gamma * (p_from_v_e(v, e) + _p_inf) * v);
139 else
140 {
141 const Real radicant = _gamma * (p_from_v_e(v, e) + _p_inf) * v;
142 if (radicant < 0.)
143 {
144 return getNaN();
145 }
146 else
147 {
148 return std::sqrt(radicant);
149 }
150 }
151}
152
153void
154StiffenedGasFluidProperties::c_from_v_e(Real v, Real e, Real & c, Real & dc_dv, Real & dc_de) const
155{
157 {
158 Real p, dp_dv, dp_de;
159 p_from_v_e(v, e, p, dp_dv, dp_de);
160
161 c = std::sqrt(_gamma * (p_from_v_e(v, e) + _p_inf) * v);
162 const Real dc_dp = 0.5 / c * _gamma * v;
163 const Real dc_dv_partial = 0.5 / c * _gamma * (p + _p_inf);
164
165 dc_dv = dc_dv_partial + dc_dp * dp_dv;
166 dc_de = dc_dp * dp_de;
167 }
168 else
169 {
170 const Real radicant = _gamma * (p_from_v_e(v, e) + _p_inf) * v;
171 if (radicant < 0.)
172 {
173 c = getNaN();
174 dc_dv = getNaN();
175 dc_de = getNaN();
176 }
177 else
178 {
179 Real p, dp_dv, dp_de;
180 p_from_v_e(v, e, p, dp_dv, dp_de);
181 c = std::sqrt(radicant);
182 const Real dc_dp = 0.5 / c * _gamma * v;
183 const Real dc_dv_partial = 0.5 / c * _gamma * (p + _p_inf);
184
185 dc_dv = dc_dv_partial + dc_dp * dp_dv;
186 dc_de = dc_dp * dp_de;
187 }
188 }
189}
190
191Real
193{
194 return _cp;
195}
196
197void
199 Real v, Real e, Real & cp, Real & dcp_dv, Real & dcp_de) const
200{
201 cp = cp_from_v_e(v, e);
202 dcp_dv = 0.0;
203 dcp_de = 0.0;
204}
205
206Real
208{
209 return _cv;
210}
211
212void
214 Real v, Real e, Real & cv, Real & dcv_dv, Real & dcv_de) const
215{
216 cv = cv_from_v_e(v, e);
217 dcv_dv = 0.0;
218 dcv_de = 0.0;
219}
220
221Real
223{
224 return _mu;
225}
226
227void
229 Real v, Real e, Real & mu, Real & dmu_dv, Real & dmu_de) const
230{
231 mu = this->mu_from_v_e(v, e);
232 dmu_dv = 0.0;
233 dmu_de = 0.0;
234}
235
236Real
238{
239 return _k;
240}
241
242void
243StiffenedGasFluidProperties::k_from_v_e(Real v, Real e, Real & k, Real & dk_dv, Real & dk_de) const
244{
245 k = k_from_v_e(v, e);
246 dk_dv = 0.0;
247 dk_de = 0.0;
248}
249
250Real
251StiffenedGasFluidProperties::s_from_v_e(Real v, Real e) const
252{
253 return s_from_v_e_template(v, e);
254}
255
256void
257StiffenedGasFluidProperties::s_from_v_e(Real v, Real e, Real & s, Real & ds_dv, Real & ds_de) const
258{
259 s_from_v_e_template(v, e, s, ds_dv, ds_de);
260}
261
262ADReal
263StiffenedGasFluidProperties::s_from_v_e(const ADReal & v, const ADReal & e) const
264{
265 return s_from_v_e_template(v, e);
266}
267
268void
269StiffenedGasFluidProperties::s_from_v_e(
270 const ADReal & v, const ADReal & e, ADReal & s, ADReal & ds_dv, ADReal & ds_de) const
271{
272 s_from_v_e_template(v, e, s, ds_dv, ds_de);
273}
274
275Real
277{
278 const Real aux = (p + _p_inf) * std::pow((h - _q) / (_gamma * _cv), -_gamma / (_gamma - 1));
279 if (aux <= 0.0)
280 return getNaN();
281 else
282 return _q_prime - (_gamma - 1) * _cv * std::log(aux);
283}
284
285void
286StiffenedGasFluidProperties::s_from_h_p(Real h, Real p, Real & s, Real & ds_dh, Real & ds_dp) const
287{
288 const Real aux = (p + _p_inf) * std::pow((h - _q) / (_gamma * _cv), -_gamma / (_gamma - 1));
289 if (aux <= 0.0)
290 {
291 s = getNaN();
292 ds_dh = getNaN();
293 ds_dp = getNaN();
294 }
295 else
296 {
297 const Real daux_dh = (p + _p_inf) *
298 std::pow((h - _q) / (_gamma * _cv), -_gamma / (_gamma - 1) - 1) *
299 (-_gamma / (_gamma - 1)) / (_gamma * _cv);
300 const Real daux_dp = std::pow((h - _q) / (_gamma * _cv), -_gamma / (_gamma - 1));
301
302 s = _q_prime - (_gamma - 1) * _cv * std::log(aux);
303 ds_dh = -(_gamma - 1) * _cv / aux * daux_dh;
304 ds_dp = -(_gamma - 1) * _cv / aux * daux_dp;
305 }
306}
307
308Real
309StiffenedGasFluidProperties::s_from_p_T(Real p, Real T) const
310{
311 return s_from_p_T_template(p, T);
312}
313
314void
315StiffenedGasFluidProperties::s_from_p_T(Real p, Real T, Real & s, Real & ds_dp, Real & ds_dT) const
316{
317 s_from_p_T_template(p, T, s, ds_dp, ds_dT);
318}
319
320ADReal
321StiffenedGasFluidProperties::s_from_p_T(const ADReal & p, const ADReal & T) const
322{
323 return s_from_p_T_template(p, T);
324}
325
326void
327StiffenedGasFluidProperties::s_from_p_T(
328 const ADReal & p, const ADReal & T, ADReal & s, ADReal & ds_dp, ADReal & ds_dT) const
329{
330 s_from_p_T_template(p, T, s, ds_dp, ds_dT);
331}
332
333Real
335{
336 Real a = (s - _q_prime + _cv * std::log(std::pow(p + _p_inf, _gamma - 1.0))) / _cv;
337 Real T = std::pow(std::exp(a), 1.0 / _gamma);
338 Real rho = rho_from_p_T(p, T);
339 if (!_allow_nonphysical_states && rho <= 0.)
340 return getNaN();
341 else
342 return rho;
343}
344
345void
347 Real p, Real s, Real & rho, Real & drho_dp, Real & drho_ds) const
348{
349 // T(p,s)
350 const Real aux = (s - _q_prime + _cv * std::log(std::pow(p + _p_inf, _gamma - 1.0))) / _cv;
351 const Real T = std::pow(std::exp(aux), 1 / _gamma);
352
353 // dT/dp
354 const Real dT_dp = 1.0 / _gamma * std::pow(std::exp(aux), 1.0 / _gamma - 1.0) * std::exp(aux) /
355 std::pow(p + _p_inf, _gamma - 1.0) * (_gamma - 1.0) *
356 std::pow(p + _p_inf, _gamma - 2.0);
357
358 // dT/ds
359 const Real dT_ds =
360 1.0 / _gamma * std::pow(std::exp(aux), 1.0 / _gamma - 1.0) * std::exp(aux) / _cv;
361
362 // Drho/Dp = d/dp[rho(p, T(p,s))] = drho/dp + drho/dT * dT/dp
363 Real drho_dp_partial, drho_dT;
364 rho_from_p_T(p, T, rho, drho_dp_partial, drho_dT);
365 drho_dp = drho_dp_partial + drho_dT * dT_dp;
366
367 // Drho/Ds = d/ds[rho(p, T(p,s))] = drho/dT * dT/ds
368 drho_ds = drho_dT * dT_ds;
369}
370
371Real
373{
374 return (h + (_gamma - 1.0) * _q + _gamma * _p_inf * v) / _gamma;
375}
376
377void
378StiffenedGasFluidProperties::e_from_v_h(Real v, Real h, Real & e, Real & de_dv, Real & de_dh) const
379{
380 e = (h + (_gamma - 1.0) * _q + _gamma * _p_inf * v) / _gamma;
381 de_dv = _p_inf;
382 de_dh = 1.0 / _gamma;
383}
384
385Real
386StiffenedGasFluidProperties::rho_from_p_T(Real p, Real T) const
387{
388 return rho_from_p_T_template(p, T);
389}
390
391void
392StiffenedGasFluidProperties::rho_from_p_T(
393 Real p, Real T, Real & rho, Real & drho_dp, Real & drho_dT) const
394{
395 rho_from_p_T_template(p, T, rho, drho_dp, drho_dT);
396}
397
398ADReal
399StiffenedGasFluidProperties::rho_from_p_T(const ADReal & p, const ADReal & T) const
400{
401 return rho_from_p_T_template(p, T);
402}
403
404void
405StiffenedGasFluidProperties::rho_from_p_T(
406 const ADReal & p, const ADReal & T, ADReal & rho, ADReal & drho_dp, ADReal & drho_dT) const
407{
408 rho_from_p_T_template(p, T, rho, drho_dp, drho_dT);
409}
410
411Real
412StiffenedGasFluidProperties::e_from_p_rho(Real p, Real rho) const
413{
414 return e_from_p_rho_template(p, rho);
415}
416
417void
418StiffenedGasFluidProperties::e_from_p_rho(
419 Real p, Real rho, Real & e, Real & de_dp, Real & de_drho) const
420{
421 e_from_p_rho_template(p, rho, e, de_dp, de_drho);
422}
423
424ADReal
425StiffenedGasFluidProperties::e_from_p_rho(const ADReal & p, const ADReal & rho) const
426{
427 return e_from_p_rho_template(p, rho);
428}
429
430void
431StiffenedGasFluidProperties::e_from_p_rho(
432 const ADReal & p, const ADReal & rho, ADReal & e, ADReal & de_dp, ADReal & de_drho) const
433{
434 e_from_p_rho_template(p, rho, e, de_dp, de_drho);
435}
436
437Real
439{
440 return _cv * T + _q + _p_inf * v;
441}
442
443void
444StiffenedGasFluidProperties::e_from_T_v(Real T, Real v, Real & e, Real & de_dT, Real & de_dv) const
445{
446 e = _cv * T + _q + _p_inf * v;
447 de_dT = _cv;
448 de_dv = _p_inf;
449}
450
451Real
453{
454 Real e = e_from_T_v(T, v);
455 return p_from_v_e(v, e);
456}
457
458void
459StiffenedGasFluidProperties::p_from_T_v(Real T, Real v, Real & p, Real & dp_dT, Real & dp_dv) const
460{
461 Real e, de_dT_v, de_dv_T, dp_dv_e, dp_de_v;
462 e_from_T_v(T, v, e, de_dT_v, de_dv_T);
463 p_from_v_e(v, e, p, dp_dv_e, dp_de_v);
464 dp_dT = dp_de_v * de_dT_v;
465 dp_dv = dp_dv_e + dp_de_v * de_dv_T;
466}
467
468Real
470{
471 return _gamma * _cv * T + _q;
472}
473
474void
476 Real T, Real /*v*/, Real & h, Real & dh_dT, Real & dh_dv) const
477{
478 h = _gamma * _cv * T + _q;
479 dh_dT = _gamma * _cv;
480 dh_dv = 0.0;
481}
482
483Real
485{
486 Real e = e_from_T_v(T, v);
487 return s_from_v_e(v, e);
488}
489
490void
491StiffenedGasFluidProperties::s_from_T_v(Real T, Real v, Real & s, Real & ds_dT, Real & ds_dv) const
492{
493 Real e, de_dT_v, de_dv_T, ds_dv_e, ds_de_v;
494 e_from_T_v(T, v, e, de_dT_v, de_dv_T);
495 s_from_v_e(v, e, s, ds_dv_e, ds_de_v);
496 ds_dT = ds_de_v * de_dT_v;
497 ds_dv = ds_dv_e + ds_de_v * de_dv_T;
498}
499
500Real
501StiffenedGasFluidProperties::cv_from_T_v(Real /*T*/, Real /*v*/) const
502{
503 return _cv;
504}
505
506Real
508{
509 return _e_c;
510}
511
512void
513StiffenedGasFluidProperties::v_e_spndl_from_T(Real /*T*/, Real & v, Real & e) const
514{
515 v = 1. / _rho_c;
516 e = _e_c;
517}
518
519Real
521{
522 return _gamma * _cv * T + _q;
523}
524
525void
526StiffenedGasFluidProperties::h_from_p_T(Real p, Real T, Real & h, Real & dh_dp, Real & dh_dT) const
527{
528 h = h_from_p_T(p, T);
529 dh_dp = 0.0;
530 dh_dT = _gamma * _cv;
531}
532
533Real
535{
536 return (p + _gamma * _p_inf) / (p + _p_inf) * _cv * T + _q;
537}
538
539void
540StiffenedGasFluidProperties::e_from_p_T(Real p, Real T, Real & e, Real & de_dp, Real & de_dT) const
541{
542 e = e_from_p_T(p, T);
543 de_dp = (1. - _gamma) * _p_inf / (p + _p_inf) / (p + _p_inf) * _cv * T;
544 de_dT = (p + _gamma * _p_inf) / (p + _p_inf) * _cv;
545}
546
547Real
549{
550 return std::pow((h - _q) / (_gamma * _cv), _gamma / (_gamma - 1.0)) *
551 std::exp((_q_prime - s) / ((_gamma - 1.0) * _cv)) -
552 _p_inf;
553}
554
555void
556StiffenedGasFluidProperties::p_from_h_s(Real h, Real s, Real & p, Real & dp_dh, Real & dp_ds) const
557{
558 p = p_from_h_s(h, s);
559 dp_dh = _gamma / (_gamma - 1.0) / (_gamma * _cv) *
560 std::pow((h - _q) / (_gamma * _cv), 1.0 / (_gamma - 1.0)) *
561 std::exp((_q_prime - s) / ((_gamma - 1.0) * _cv));
562 dp_ds = std::pow((h - _q) / (_gamma * _cv), _gamma / (_gamma - 1)) *
563 std::exp((_q_prime - s) / ((_gamma - 1) * _cv)) / ((1 - _gamma) * _cv);
564}
565
566Real
568{
569 // g(p,T) for SGEOS is given by Equation (37) in the following reference:
570 //
571 // Ray A. Berry, Richard Saurel, Olivier LeMetayer
572 // The discrete equation method (DEM) for fully compressible, two-phase flows in
573 // ducts of spatially varying cross-section
574 // Nuclear Engineering and Design 240 (2010) p. 3797-3818
575 //
576 const Real p = p_from_v_e(v, e);
577 const Real T = T_from_v_e(v, e);
578
579 return (_gamma * _cv - _q_prime) * T -
580 _cv * T * std::log(std::pow(T, _gamma) / std::pow(p + _p_inf, _gamma - 1.0)) + _q;
581}
582
583Real
585{
586 return _gamma * (pressure + _p_inf) / rho;
587}
588
589Real
594
595Real
600
601Real
606
607Real
612
613Real
614StiffenedGasFluidProperties::cv_from_p_T(Real /* pressure */, Real /* temperature */) const
615{
616 return _cv;
617}
618
619void
621 Real pressure, Real temperature, Real & cv, Real & dcv_dp, Real & dcv_dT) const
622{
623 cv = cv_from_p_T(pressure, temperature);
624 dcv_dp = 0.0;
625 dcv_dT = 0.0;
626}
627
628Real
629StiffenedGasFluidProperties::cp_from_p_T(Real /* pressure */, Real /* temperature */) const
630{
631 return _cp;
632}
633
634void
636 Real pressure, Real temperature, Real & cp, Real & dcp_dp, Real & dcp_dT) const
637{
638 cp = cp_from_p_T(pressure, temperature);
639 dcp_dp = 0.0;
640 dcp_dT = 0.0;
641}
642
643Real
644StiffenedGasFluidProperties::mu_from_p_T(Real /* pressure */, Real /* temperature */) const
645{
646 return _mu;
647}
648
649void
651 Real pressure, Real temperature, Real & mu, Real & dmu_dp, Real & dmu_dT) const
652{
653 mu = this->mu_from_p_T(pressure, temperature);
654 dmu_dp = 0.0;
655 dmu_dT = 0.0;
656}
657
658Real
659StiffenedGasFluidProperties::k_from_p_T(Real /* pressure */, Real /* temperature */) const
660{
661 return _k;
662}
663
664void
666 Real pressure, Real temperature, Real & k, Real & dk_dp, Real & dk_dT) const
667{
668 k = this->k_from_p_T(pressure, temperature);
669 dk_dp = 0.0;
670 dk_dT = 0.0;
671}
672Real
673StiffenedGasFluidProperties::beta_from_p_T(Real /* pressure */, Real temperature) const
674{
675 return 1 / temperature;
676}
677void
679 Real pressure, Real temperature, Real & beta, Real & dbeta_dp, Real & dbeta_dT) const
680{
681 beta = this->beta_from_p_T(pressure, temperature);
682 dbeta_dp = 0.0;
683 dbeta_dT = -1 / (temperature * temperature);
684}
685
686Real
688{
689 mooseError(__PRETTY_FUNCTION__, " not implemented. Use a real fluid property class!");
690}
DualNumber< Real, DNDerivativeType, true > ADReal
const double mu
const Real p
const double rho
const double T
const double v
registerMooseObject("FluidPropertiesApp", StiffenedGasFluidProperties)
void addRequiredParam(const std::string &name, const std::string &doc_string)
void addParam(const std::string &name, const std::initializer_list< typename T::value_type > &value, const std::string &doc_string)
void addClassDescription(const std::string &doc_string)
void mooseError(Args &&... args) const
Interface class for producing errors, warnings, or just quiet NaNs.
Real getNaN() const
Throws an error or returns a NaN with or without a warning, with a default message.
static InputParameters validParams()
Common class for single phase fluid properties.
static InputParameters validParams()
e e e e s T T T T T rho v v T e h
Stiffened gas fluid properties.
virtual Real p_from_T_v(Real T, Real v) const override
virtual Real mu_from_p_T(Real p, Real T) const override
virtual Real cv_from_T_v(Real T, Real v) const override
virtual Real cv_from_p_T(Real p, Real T) const override
virtual Real criticalDensity() const override
Critical density.
virtual Real k_from_v_e(Real v, Real e) const override
virtual Real mu_from_v_e(Real v, Real e) const override
virtual Real s_from_T_v(Real T, Real v) const override
virtual Real e_from_p_T(Real p, Real T) const override
virtual Real rho_from_p_s(Real p, Real s) const override
virtual Real c2_from_p_rho(Real pressure, Real rho) const
virtual Real e_from_v_h(Real v, Real h) const override
virtual Real cv_from_v_e(Real v, Real e) 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.
StiffenedGasFluidProperties(const InputParameters &parameters)
virtual Real e_spndl_from_v(Real v) const override
Specific internal energy from temperature and specific volume.
virtual Real p_from_h_s(Real h, Real s) const override
virtual Real cp_from_p_T(Real p, Real T) const override
virtual Real h_from_T_v(Real T, Real v) const override
virtual Real e_from_T_v(Real T, Real v) const override
virtual Real g_from_v_e(Real v, Real e) const override
virtual Real pp_sat_from_p_T(Real, Real) const override
virtual Real beta_from_p_T(Real p, Real T) const override
virtual Real h_from_p_T(Real p, Real T) const override
virtual Real cp_from_v_e(Real v, Real e) const override
virtual Real criticalTemperature() const override
Critical temperature.
virtual Real criticalInternalEnergy() const override
Critical specific internal energy.
virtual Real molarMass() const override
Molar mass [kg/mol].
virtual Real k_from_p_T(Real p, Real T) const override
virtual Real c_from_v_e(Real v, Real e) const override
virtual Real s_from_h_p(Real h, Real p) const override
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real