Verify that the fluid name is correctly returned.
17{
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};
24
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);
29
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);
34
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);
39
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);
50
52
55 unsigned int np = 200;
56 Real dT = (max_T - min_T) / ((Real)np - 1.0);
57 Real Ru = 8.31446261815324;
59
60
61 {
62 for (unsigned int j = 1; j < np - 1; ++j)
63 {
64 Real T = min_T + j * dT;
75
76
77 REL_TEST(
fp->rho_from_p_s(
p, s),
rho, 10.0 * REL_TOL_CONSISTENCY);
78
79
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);
83
84
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);
87
88
89 REL_TEST(
fp->cp_from_v_e(
v, e), cp, 10.0 * REL_TOL_CONSISTENCY);
90
91
92 REL_TEST(
fp->h_from_T_v(
T,
v), h, 10.0 * REL_TOL_CONSISTENCY);
93
94
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);
97
98
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);
101
102
103 REL_TEST(
fp->k_from_v_e(
v, e), k, 10.0 * REL_TOL_CONSISTENCY);
104
105
106 REL_TEST(
fp->mu_from_v_e(
v, e),
mu, 10.0 * REL_TOL_CONSISTENCY);
107 }
108 }
109
110
111 {
112 for (unsigned int j = 1; j < np - 1; ++j)
113 {
114 Real T = min_T + j * dT;
121
124 ADReal ad_p =
fp->p_from_v_e(ad_v, ad_e);
127
128 ADReal ad_T =
fp->T_from_v_e(ad_v, ad_e);
130
132
133 ADReal ad_rho =
fp->rho_from_p_T(ad_p, ad_T);
135
139 REL_TEST(
142 fp->gamma_from_p_T(ad_p, ad_T),
146 }
147 }
148
149
150 {
153 Real e = 10342290 * 0.75 + 17034360 * 0.25;
156
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);
160 }
161
162
163 {
166 Real cv = (17034360.0 - 10342290.0) / 100.0;
167 Real cp = cv + 8.3144598 / 0.002;
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);
170
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);
175 }
176
177
178 {
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);
183
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);
188
190 fp->mu_from_p_T(
p,
T,
mu, dmu_dp, dmu_dT);
191 REL_TEST(dmu_dT, 0.0125, 1e-5);
192
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);
196
199 fp->mu_from_v_e(
v, e,
mu, dmu_dv, dmu_de);
200 REL_TEST(dmu_de, 0.0125 / cv, 0.001);
201
203 fp->k_from_v_e(
v, e, k, dk_dv, dk_de);
204 REL_TEST(dk_de, -0.025 / cv, 0.001);
205 }
206
207
208 {
211 Real e = 10342290 * 0.75 + 17034360 * 0.25;
220 Real gamma =
fp->gamma_from_p_T(
p,
T);
223
224 {
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);
229 }
230
231 {
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);
236 }
237
238 {
240 fp->cp_from_v_e(
v, e,
a, b,
c);
241 REL_TEST(
a, cp,
tol);
242 DERIV_TEST_CUSTOM_PERTURBATION(
fp->cp_from_v_e,
v, e, 1e-4, 1e-4);
243 }
244
245 {
247 fp->cv_from_v_e(
v, e,
a, b,
c);
248 REL_TEST(
a, cv,
tol);
249 DERIV_TEST_CUSTOM_PERTURBATION(
fp->cv_from_v_e,
v, e, 1e-4, 1e-4);
250 }
251
252 {
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);
257 }
258
259 {
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);
264 }
265
266 {
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);
271 }
272
273 {
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);
278 }
279
280 {
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);
285 }
286
287 {
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);
292 }
293
294 {
296 fp->rho_from_p_T(
p,
T,
a, b,
c);
298 DERIV_TEST_CUSTOM_PERTURBATION(
fp->rho_from_p_T,
p,
T, 1e-4, 1e-4);
299 }
300
301 {
305 DERIV_TEST_CUSTOM_PERTURBATION(
fp->e_from_p_rho,
p,
rho, 1e-4, 1e-4);
306 }
307
308 {
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);
313 }
314
315 {
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);
320 }
321
322 {
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);
327 }
328
329 {
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);
334 }
335
336 {
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);
341 }
342
343 {
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);
348 }
349
350 {
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);
355 }
356
357 {
359 fp->cv_from_p_T(
p,
T,
a, b,
c);
360 REL_TEST(
a, cv,
tol);
361 DERIV_TEST_CUSTOM_PERTURBATION(
fp->cv_from_p_T,
p,
T, 1e-4, 1e-4);
362 }
363
364 {
366 fp->cp_from_p_T(
p,
T,
a, b,
c);
367 REL_TEST(
a, cp,
tol);
368 DERIV_TEST_CUSTOM_PERTURBATION(
fp->cp_from_p_T,
p,
T, 1e-4, 1e-4);
369 }
370
371 {
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);
376 }
377
378 {
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);
383 }
384
385 {
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);
390 }
391
392 {
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);
397 }
398
399 {
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);
404 }
405
406 {
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);
411 }
412 }
413
414
415 {
417 Real Z = 0.5 * (80459 + 80460.7);
424 Real s = Z + Rs * std::log(
v / v0);
425
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);
430
431
432 {
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);
437 }
438
439
440 {
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);
445 }
446
447
448 {
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);
453 }
454 }
455
456
457 {
458 try
459 {
460 fp->cp_from_p_T(1.0e6, 600.0);
461 FAIL();
462 }
463 catch (const std::exception & err)
464 {
465 std::size_t pos = std::string(
err.what()).find(
"which is outside of the bounds of");
466 ASSERT_TRUE(pos != std::string::npos);
467 }
468
469 try
470 {
471 fp->cp_from_p_T(1.0e6, 99.0);
472 FAIL();
473 }
474 catch (const std::exception & err)
475 {
476 std::size_t pos = std::string(
err.what()).find(
"which is outside of the bounds of");
477 ASSERT_TRUE(pos != std::string::npos);
478 }
479 }
480}
DualNumber< Real, DNDerivativeType, true > ADReal