Verify that the fluid name is correctly returned.
19 std::vector<Real> T = {100, 200, 300, 400, 500};
20 std::vector<Real> e = {1825110, 5272540, 10342290, 17034360, 25348750};
21 std::vector<Real> T2 = {100, 500};
22 std::vector<Real>
mu = {1, 6};
23 std::vector<Real>
k = {11, 1};
25 InputParameters e_fn_params = _factory.getValidParams(
"PiecewiseLinear");
26 e_fn_params.
set<std::vector<Real>>(
"x") = T;
27 e_fn_params.
set<std::vector<Real>>(
"y") = e;
28 _fe_problem->addFunction(
"PiecewiseLinear",
"e_fn", e_fn_params);
30 InputParameters mu_fn_params = _factory.getValidParams(
"PiecewiseLinear");
31 mu_fn_params.
set<std::vector<Real>>(
"x") = T2;
32 mu_fn_params.
set<std::vector<Real>>(
"y") =
mu;
33 _fe_problem->addFunction(
"PiecewiseLinear",
"mu_fn", mu_fn_params);
35 InputParameters k_fn_params = _factory.getValidParams(
"PiecewiseLinear");
36 k_fn_params.
set<std::vector<Real>>(
"x") = T2;
37 k_fn_params.
set<std::vector<Real>>(
"y") =
k;
38 _fe_problem->addFunction(
"PiecewiseLinear",
"k_fn", k_fn_params);
40 InputParameters uo_pars = _factory.getValidParams(
"CaloricallyImperfectGas");
41 uo_pars.
set<
Real>(
"molar_mass") = 0.002;
42 uo_pars.
set<FunctionName>(
"e") =
"e_fn";
43 uo_pars.
set<FunctionName>(
"mu") =
"mu_fn";
44 uo_pars.
set<FunctionName>(
"k") =
"k_fn";
45 uo_pars.
set<
Real>(
"min_temperature") = 100.0;
46 uo_pars.
set<
Real>(
"max_temperature") = 500.0;
47 uo_pars.
set<
Real>(
"temperature_resolution") = 0.01;
48 _fe_problem->addUserObject(
"CaloricallyImperfectGas",
"fp", uo_pars);
55 unsigned int np = 200;
56 Real dT = (max_T - min_T) / ((Real)np - 1.0);
57 Real Ru = 8.31446261815324;
62 for (
unsigned int j = 1;
j < np - 1; ++
j)
64 Real T = min_T +
j * dT;
66 const Real rho =
fp->rho_from_p_T(p, T);
67 const Real v = 1.0 / rho;
68 Real h =
fp->h_from_p_T(p, T);
69 Real e =
fp->e_from_p_T(p, T);
74 Real s =
fp->s_from_p_T(p, T);
77 REL_TEST(
fp->rho_from_p_s(p, s), rho, 10.0 * REL_TOL_CONSISTENCY);
80 REL_TEST(
fp->e_from_v_h(
v, h), e, 10.0 * REL_TOL_CONSISTENCY);
81 REL_TEST(
fp->e_from_p_rho(p, rho), e, 10.0 * REL_TOL_CONSISTENCY);
82 REL_TEST(
fp->e_from_T_v(T,
v), e, 10.0 * REL_TOL_CONSISTENCY);
85 REL_TEST(
fp->cv_from_T_v(T,
v),
cv, 10.0 * REL_TOL_CONSISTENCY);
86 REL_TEST(
fp->cv_from_v_e(
v, e),
cv, 10.0 * REL_TOL_CONSISTENCY);
89 REL_TEST(
fp->cp_from_v_e(
v, e),
cp, 10.0 * REL_TOL_CONSISTENCY);
92 REL_TEST(
fp->h_from_T_v(T,
v), h, 10.0 * REL_TOL_CONSISTENCY);
95 REL_TEST(
fp->p_from_v_e(
v, e), p, 10.0 * REL_TOL_CONSISTENCY);
96 REL_TEST(
fp->p_from_T_v(T,
v), p, 10.0 * REL_TOL_CONSISTENCY);
99 REL_TEST(
fp->T_from_p_h(p, h), T, 10.0 * REL_TOL_CONSISTENCY);
100 REL_TEST(
fp->T_from_v_e(
v, e), T, 10.0 * REL_TOL_CONSISTENCY);
103 REL_TEST(
fp->k_from_v_e(
v, e),
k, 10.0 * REL_TOL_CONSISTENCY);
106 REL_TEST(
fp->mu_from_v_e(
v, e),
mu, 10.0 * REL_TOL_CONSISTENCY);
112 for (
unsigned int j = 1;
j < np - 1; ++
j)
114 Real T = min_T +
j * dT;
116 const Real rho =
fp->rho_from_p_T(p, T);
117 const Real v = 1.0 / rho;
118 Real e =
fp->e_from_p_T(p, T);
124 ADReal ad_p =
fp->p_from_v_e(ad_v, ad_e);
128 ADReal ad_T =
fp->T_from_v_e(ad_v, ad_e);
133 ADReal ad_rho =
fp->rho_from_p_T(ad_p, ad_T);
142 fp->gamma_from_p_T(ad_p, ad_T),
153 Real e = 10342290 * 0.75 + 17034360 * 0.25;
154 Real h = e + p /
fp->rho_from_p_T(p, T);
157 REL_TEST(h,
fp->h_from_p_T(p, T), 1e-5);
158 REL_TEST(e,
fp->e_from_p_T(p, T), 1e-5);
159 REL_TEST(e,
fp->e_from_v_h(
v, h), 1e-5);
166 Real cv = (17034360.0 - 10342290.0) / 100.0;
168 REL_TEST(
cp,
fp->cp_from_p_T(p, T), 1e-5);
169 REL_TEST(
cv,
fp->cv_from_p_T(p, T), 1e-5);
172 Real e =
fp->e_from_p_T(p, T);
173 REL_TEST(
cp,
fp->cp_from_v_e(
v, e), 1e-5);
174 REL_TEST(
cv,
fp->cv_from_v_e(
v, e), 1e-5);
181 REL_TEST(
fp->mu_from_p_T(p, T), 2.875, 1e-5);
182 REL_TEST(
fp->k_from_p_T(p, T), 7.25, 1e-5);
185 Real e =
fp->e_from_p_T(p, T);
186 REL_TEST(
fp->mu_from_v_e(
v, e), 2.875, 0.001);
187 REL_TEST(
fp->k_from_v_e(
v, e), 7.25, 0.001);
190 fp->mu_from_p_T(p, T,
mu, dmu_dp, dmu_dT);
191 REL_TEST(dmu_dT, 0.0125, 1e-5);
193 Real k, dk_dp, dk_dT;
194 fp->k_from_p_T(p, T,
k, dk_dp, dk_dT);
195 REL_TEST(dk_dT, -0.025, 1e-5);
199 fp->mu_from_v_e(
v, e,
mu, dmu_dv, dmu_de);
200 REL_TEST(dmu_de, 0.0125 /
cv, 0.001);
203 fp->k_from_v_e(
v, e,
k, dk_dv, dk_de);
204 REL_TEST(dk_de, -0.025 /
cv, 0.001);
211 Real e = 10342290 * 0.75 + 17034360 * 0.25;
212 Real h = e + p /
fp->rho_from_p_T(p, T);
217 Real s =
fp->s_from_p_T(p, T);
220 Real gamma =
fp->gamma_from_p_T(p, T);
221 Real ssound =
fp->c_from_p_T(p, T);
226 fp->p_from_v_e(
v, e,
a,
b,
c);
228 DERIV_TEST_CUSTOM_PERTURBATION(
fp->p_from_v_e,
v, e, 1e-4, 1e-4);
233 fp->T_from_v_e(
v, e,
a,
b,
c);
235 DERIV_TEST_CUSTOM_PERTURBATION(
fp->T_from_v_e,
v, e, 1e-4, 1e-4);
240 fp->cp_from_v_e(
v, e,
a,
b,
c);
242 DERIV_TEST_CUSTOM_PERTURBATION(
fp->cp_from_v_e,
v, e, 1e-4, 1e-4);
247 fp->cv_from_v_e(
v, e,
a,
b,
c);
249 DERIV_TEST_CUSTOM_PERTURBATION(
fp->cv_from_v_e,
v, e, 1e-4, 1e-4);
254 fp->mu_from_v_e(
v, e,
a,
b,
c);
256 DERIV_TEST_CUSTOM_PERTURBATION(
fp->mu_from_v_e,
v, e, 1e-4, 1e-4);
261 fp->k_from_v_e(
v, e,
a,
b,
c);
263 DERIV_TEST_CUSTOM_PERTURBATION(
fp->k_from_v_e,
v, e, 1e-4, 1e-4);
268 fp->s_from_v_e(
v, e,
a,
b,
c);
270 DERIV_TEST_CUSTOM_PERTURBATION(
fp->s_from_v_e,
v, e, 1e-4, 1e-4);
275 fp->s_from_p_T(p, T,
a,
b,
c);
277 DERIV_TEST_CUSTOM_PERTURBATION(
fp->s_from_p_T, p, T, 1e-4, 1e-4);
282 fp->s_from_h_p(h, p,
a,
b,
c);
284 DERIV_TEST_CUSTOM_PERTURBATION(
fp->s_from_h_p, h, p, 1e-4, 1e-4);
289 fp->e_from_v_h(
v, h,
a,
b,
c);
291 DERIV_TEST_CUSTOM_PERTURBATION(
fp->e_from_v_h,
v, h, 1e-4, 1e-4);
296 fp->rho_from_p_T(p, T,
a,
b,
c);
297 REL_TEST(
a, rho,
tol);
298 DERIV_TEST_CUSTOM_PERTURBATION(
fp->rho_from_p_T, p, T, 1e-4, 1e-4);
303 fp->e_from_p_rho(p, rho,
a,
b,
c);
305 DERIV_TEST_CUSTOM_PERTURBATION(
fp->e_from_p_rho, p, rho, 1e-4, 1e-4);
310 fp->e_from_T_v(T,
v,
a,
b,
c);
312 DERIV_TEST_CUSTOM_PERTURBATION(
fp->e_from_T_v, T,
v, 1e-4, 1e-4);
317 fp->p_from_T_v(T,
v,
a,
b,
c);
319 DERIV_TEST_CUSTOM_PERTURBATION(
fp->p_from_T_v, T,
v, 1e-4, 1e-4);
324 fp->h_from_T_v(T,
v,
a,
b,
c);
326 DERIV_TEST_CUSTOM_PERTURBATION(
fp->h_from_T_v, T,
v, 1e-4, 1e-4);
331 fp->s_from_T_v(T,
v,
a,
b,
c);
333 DERIV_TEST_CUSTOM_PERTURBATION(
fp->s_from_T_v, T,
v, 1e-4, 1e-4);
338 fp->h_from_p_T(p, T,
a,
b,
c);
340 DERIV_TEST_CUSTOM_PERTURBATION(
fp->h_from_p_T, p, T, 1e-4, 1e-4);
345 fp->e_from_p_T(p, T,
a,
b,
c);
347 DERIV_TEST_CUSTOM_PERTURBATION(
fp->e_from_p_T, p, T, 1e-4, 1e-4);
352 fp->T_from_p_h(p, h,
a,
b,
c);
354 DERIV_TEST_CUSTOM_PERTURBATION(
fp->T_from_p_h, p, h, 1e-4, 1e-4);
359 fp->cv_from_p_T(p, T,
a,
b,
c);
361 DERIV_TEST_CUSTOM_PERTURBATION(
fp->cv_from_p_T, p, T, 1e-4, 1e-4);
366 fp->cp_from_p_T(p, T,
a,
b,
c);
368 DERIV_TEST_CUSTOM_PERTURBATION(
fp->cp_from_p_T, p, T, 1e-4, 1e-4);
373 fp->mu_from_p_T(p, T,
a,
b,
c);
375 DERIV_TEST_CUSTOM_PERTURBATION(
fp->mu_from_p_T, p, T, 1e-4, 1e-4);
380 fp->k_from_p_T(p, T,
a,
b,
c);
382 DERIV_TEST_CUSTOM_PERTURBATION(
fp->k_from_p_T, p, T, 1e-4, 1e-4);
387 fp->gamma_from_p_T(p, T,
a,
b,
c);
388 REL_TEST(
a, gamma,
tol);
389 DERIV_TEST_CUSTOM_PERTURBATION(
fp->gamma_from_p_T, p, T, 1e-4, 1e-4);
394 fp->gamma_from_v_e(
v, e,
a,
b,
c);
395 REL_TEST(
a, gamma,
tol);
396 DERIV_TEST_CUSTOM_PERTURBATION(
fp->gamma_from_v_e,
v, e, 1e-4, 1e-4);
401 fp->c_from_v_e(
v, e,
a,
b,
c);
402 REL_TEST(
a, ssound,
tol);
403 DERIV_TEST_CUSTOM_PERTURBATION(
fp->c_from_v_e,
v, e, 1e-4, 1e-4);
408 fp->c_from_p_T(p, T,
a,
b,
c);
409 REL_TEST(
a, ssound,
tol);
410 DERIV_TEST_CUSTOM_PERTURBATION(
fp->c_from_p_T, p, T, 1e-4, 1e-4);
417 Real Z = 0.5 * (80459 + 80460.7);
419 const Real rho =
fp->rho_from_p_T(p, T);
420 const Real v = 1.0 / rho;
422 Real e =
fp->e_from_p_T(p, T);
423 Real h =
fp->h_from_p_T(p, T);
424 Real s =
Z + Rs * std::log(
v / v0);
426 REL_TEST(
fp->s_from_p_T(p, T), s, 1e-6);
427 REL_TEST(
fp->s_from_v_e(
v, e), s, 1e-6);
428 REL_TEST(
fp->s_from_h_p(h, p), s, 1e-6);
429 REL_TEST(
fp->s_from_T_v(T,
v), s, 1e-6);
433 Real s_alt, ds_dp, ds_dT;
434 fp->s_from_p_T(p, T, s_alt, ds_dp, ds_dT);
435 REL_TEST(s_alt, s, 1e-5);
436 DERIV_TEST_CUSTOM_PERTURBATION(
fp->s_from_p_T, p, T, 1e-4, 1e-4);
441 Real s_alt, ds_dv, ds_de;
442 fp->s_from_v_e(
v, e, s_alt, ds_dv, ds_de);
443 REL_TEST(s_alt, s, 1e-5);
444 DERIV_TEST_CUSTOM_PERTURBATION(
fp->s_from_v_e,
v, e, 1e-4, 1e-4);
449 Real s_alt, ds_dh, ds_dp;
450 fp->s_from_h_p(h, p, s_alt, ds_dh, ds_dp);
451 REL_TEST(s_alt, s, 1e-5);
452 DERIV_TEST_CUSTOM_PERTURBATION(
fp->s_from_h_p, h, p, 1e-4, 1e-4);
460 fp->cp_from_p_T(1.0e6, 600.0);
463 catch (
const std::exception & err)
465 std::size_t pos = std::string(
err.what()).find(
"which is outside of the bounds of");
466 ASSERT_TRUE(pos != std::string::npos);
471 fp->cp_from_p_T(1.0e6, 99.0);
474 catch (
const std::exception & err)
476 std::size_t pos = std::string(
err.what()).find(
"which is outside of the bounds of");
477 ASSERT_TRUE(pos != std::string::npos);
static const std::string cv
A calorically imperfect gas fluid property class This fluid property assumes that internal energy is ...
DualNumber< Real, DNDerivativeType, true > ADReal
static const std::string cp
static const std::string mu
static const std::string Z
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const std::string v
static const std::complex< double > j(0, 1)
Complex number "j" (also known as "i")
static const std::string k