28 ABS_TEST(_fp->criticalPressure(), 22.064e6, 1.0e-15);
29 ABS_TEST(_fp->criticalTemperature(), 647.096, 1.0e-15);
30 ABS_TEST(_fp->criticalDensity(), 322.0, 1.0e-15);
38 ABS_TEST(_fp->triplePointPressure(), 611.657, 1.0e-15);
39 ABS_TEST(_fp->triplePointTemperature(), 273.16, 1.0e-15);
50 EXPECT_EQ(_fp->inRegion(3.0e6, 300), (
unsigned int)1);
51 EXPECT_EQ(_fp->inRegion(80.0e6, 300), (
unsigned int)1);
52 EXPECT_EQ(_fp->inRegion(3.0e6, 500), (
unsigned int)1);
55 EXPECT_EQ(_fp->inRegion(3.5e3, 300), (
unsigned int)2);
56 EXPECT_EQ(_fp->inRegion(30.0e6, 700), (
unsigned int)2);
57 EXPECT_EQ(_fp->inRegion(75.0e6, 950), (
unsigned int)2);
60 EXPECT_EQ(_fp->inRegion(25.588e6, 650), (
unsigned int)3);
61 EXPECT_EQ(_fp->inRegion(22.298e6, 650), (
unsigned int)3);
62 EXPECT_EQ(_fp->inRegion(78.32e6, 750), (
unsigned int)3);
65 EXPECT_EQ(_fp->inRegion(0.5e6, 1500), (
unsigned int)5);
66 EXPECT_EQ(_fp->inRegion(30.0e6, 1500), (
unsigned int)5);
67 EXPECT_EQ(_fp->inRegion(30.0e6, 2000), (
unsigned int)5);
73 _fp->inRegion(101.0e6, 300.0);
77 catch (
const std::exception & e)
79 std::string msg(e.what());
80 ASSERT_NE(msg.find(
"Pressure 1.01e+08 is out of range in fp: inRegion()"), std::string::npos)
81 <<
"failed with unexpected error: " << msg;
87 _fp->inRegion(51.0e6, 1200.0);
88 FAIL() <<
"missing expected error";
90 catch (
const std::exception & e)
92 std::string msg(e.what());
93 ASSERT_NE(msg.find(
"Pressure 5.1e+07 is out of range in fp: inRegion()"), std::string::npos)
94 <<
"failed with unexpected error: " << msg;
100 _fp->inRegion(5.0e6, 2001.0);
104 catch (
const std::exception & e)
106 std::string msg(e.what());
107 ASSERT_NE(msg.find(
"Temperature 2001 is out of range in fp: inRegion()"), std::string::npos)
108 <<
"failed with unexpected error: " << msg;
120 EXPECT_EQ(_fp->inRegionPH(3.0e6, _fp->h_from_p_T(3.0e6, 300)), (
unsigned int)1);
121 EXPECT_EQ(_fp->inRegionPH(80.0e6, _fp->h_from_p_T(80.0e6, 300)), (
unsigned int)1);
122 EXPECT_EQ(_fp->inRegionPH(3.0e6, _fp->h_from_p_T(3.0e6, 500)), (
unsigned int)1);
125 const auto p_test = _fp->vaporPressure(400);
126 EXPECT_EQ(_fp->inRegionPH(p_test, _fp->h_from_p_T(p_test, 400 - 0.01) + 1e2), (
unsigned int)4);
127 EXPECT_EQ(_fp->inRegionPH(p_test, _fp->h_from_p_T(p_test, 400 + 0.01) - 1e2), (
unsigned int)4);
130 EXPECT_EQ(_fp->inRegionPH(3.5e3, _fp->h_from_p_T(3.5e3, 300)), (
unsigned int)2);
131 EXPECT_EQ(_fp->inRegionPH(30.0e6, _fp->h_from_p_T(30.0e6, 700)), (
unsigned int)2);
132 EXPECT_EQ(_fp->inRegionPH(75.0e6, _fp->h_from_p_T(75.0e6, 950)), (
unsigned int)2);
135 EXPECT_EQ(_fp->inRegionPH(25.588e6, _fp->h_from_p_T(25.588e6, 650)), (
unsigned int)3);
136 EXPECT_EQ(_fp->inRegionPH(22.298e6, _fp->h_from_p_T(22.298e6, 650)), (
unsigned int)3);
137 EXPECT_EQ(_fp->inRegionPH(78.32e6, _fp->h_from_p_T(78.32e6, 750)), (
unsigned int)3);
140 EXPECT_EQ(_fp->inRegionPH(0.5e6, _fp->h_from_p_T(0.5e6, 1500)), (
unsigned int)5);
141 EXPECT_EQ(_fp->inRegionPH(30.0e6, _fp->h_from_p_T(30.0e6, 1500)), (
unsigned int)5);
142 EXPECT_EQ(_fp->inRegionPH(30.0e6, _fp->h_from_p_T(30.0e6, 2000)), (
unsigned int)5);
149 _fp->inRegionPH(101.0e6, 0.1);
150 FAIL() <<
"missing expected error";
152 catch (
const std::exception & e)
154 std::string msg(e.what());
155 ASSERT_NE(msg.find(
"Pressure 1.01e+08 is out of range in fp: inRegion()"), std::string::npos)
156 <<
"failed with unexpected error: " << msg;
163 _fp->inRegionPH(1.0e6, 1e8);
164 FAIL() <<
"missing expected error";
166 catch (
const std::exception & e)
168 std::string msg(e.what());
169 ASSERT_NE(msg.find(
"Enthalpy 1e+08 is out of range in fp: inRegionPH()"), std::string::npos)
170 <<
"failed with unexpected error: " << msg;
177 _fp->inRegionPH(20e6, 1e8);
178 FAIL() <<
"missing expected error";
180 catch (
const std::exception & e)
182 std::string msg(e.what());
183 ASSERT_NE(msg.find(
"Enthalpy 1e+08 is out of range in fp: inRegionPH()"), std::string::npos)
184 <<
"failed with unexpected error: " << msg;
191 _fp->inRegionPH(70e6, 1e8);
192 FAIL() <<
"missing expected error";
194 catch (
const std::exception & e)
196 std::string msg(e.what());
197 ASSERT_NE(msg.find(
"Enthalpy 1e+08 is out of range in fp: inRegionPH()"), std::string::npos)
198 <<
"failed with unexpected error: " << msg;
210 REL_TEST(_fp->b23T(16.5291643e6), 623.15, 1.0e-8);
211 REL_TEST(_fp->b23p(623.15), 16.5291643e6, 1.0e-8);
242 REL_TEST(_fp->vaporPressure(300), 3.53658941e3, 1.0e-8);
243 REL_TEST(_fp->vaporPressure(500), 2.63889776e6, 1.0e-8);
244 REL_TEST(_fp->vaporPressure(600), 12.3443146e6, 1.0e-8);
255 REL_TEST(_fp->vaporTemperature(0.1e6), 372.755919, 1.0e-8);
256 REL_TEST(_fp->vaporTemperature(1.0e6), 453.035632, 1.0e-8);
257 REL_TEST(_fp->vaporTemperature(10.0e6), 584.149488, 1.0e-8);
269 EXPECT_EQ(_fp->subregion3(50.0e6, 630.0), (
unsigned int)0);
270 EXPECT_EQ(_fp->subregion3(80.0e6, 670.0), (
unsigned int)0);
271 EXPECT_EQ(_fp->subregion3(50.0e6, 710.0), (
unsigned int)1);
272 EXPECT_EQ(_fp->subregion3(80.0e6, 750.0), (
unsigned int)1);
273 EXPECT_EQ(_fp->subregion3(20.0e6, 630.0), (
unsigned int)2);
274 EXPECT_EQ(_fp->subregion3(30.0e6, 650.0), (
unsigned int)2);
275 EXPECT_EQ(_fp->subregion3(26.0e6, 656.0), (
unsigned int)3);
276 EXPECT_EQ(_fp->subregion3(30.0e6, 670.0), (
unsigned int)3);
277 EXPECT_EQ(_fp->subregion3(26.0e6, 661.0), (
unsigned int)4);
278 EXPECT_EQ(_fp->subregion3(30.0e6, 675.0), (
unsigned int)4);
279 EXPECT_EQ(_fp->subregion3(26.0e6, 671.0), (
unsigned int)5);
280 EXPECT_EQ(_fp->subregion3(30.0e6, 690.0), (
unsigned int)5);
281 EXPECT_EQ(_fp->subregion3(23.6e6, 649.0), (
unsigned int)6);
282 EXPECT_EQ(_fp->subregion3(24.0e6, 650.0), (
unsigned int)6);
283 EXPECT_EQ(_fp->subregion3(23.6e6, 652.0), (
unsigned int)7);
284 EXPECT_EQ(_fp->subregion3(24.0e6, 654.0), (
unsigned int)7);
285 EXPECT_EQ(_fp->subregion3(23.6e6, 653.0), (
unsigned int)8);
286 EXPECT_EQ(_fp->subregion3(24.0e6, 655.0), (
unsigned int)8);
287 EXPECT_EQ(_fp->subregion3(23.5e6, 655.0), (
unsigned int)9);
288 EXPECT_EQ(_fp->subregion3(24.0e6, 660.0), (
unsigned int)9);
289 EXPECT_EQ(_fp->subregion3(23.0e6, 660.0), (
unsigned int)10);
290 EXPECT_EQ(_fp->subregion3(24.0e6, 670.0), (
unsigned int)10);
291 EXPECT_EQ(_fp->subregion3(22.6e6, 646.0), (
unsigned int)11);
292 EXPECT_EQ(_fp->subregion3(23.0e6, 646.0), (
unsigned int)11);
293 EXPECT_EQ(_fp->subregion3(22.6e6, 648.6), (
unsigned int)12);
294 EXPECT_EQ(_fp->subregion3(22.8e6, 649.3), (
unsigned int)12);
295 EXPECT_EQ(_fp->subregion3(22.6e6, 649.0), (
unsigned int)13);
296 EXPECT_EQ(_fp->subregion3(22.8e6, 649.7), (
unsigned int)13);
297 EXPECT_EQ(_fp->subregion3(22.6e6, 649.1), (
unsigned int)14);
298 EXPECT_EQ(_fp->subregion3(22.8e6, 649.9), (
unsigned int)14);
299 EXPECT_EQ(_fp->subregion3(22.6e6, 649.4), (
unsigned int)15);
300 EXPECT_EQ(_fp->subregion3(22.8e6, 650.2), (
unsigned int)15);
301 EXPECT_EQ(_fp->subregion3(21.1e6, 640.0), (
unsigned int)16);
302 EXPECT_EQ(_fp->subregion3(21.8e6, 643.0), (
unsigned int)16);
303 EXPECT_EQ(_fp->subregion3(21.1e6, 644.0), (
unsigned int)17);
304 EXPECT_EQ(_fp->subregion3(21.8e6, 648.0), (
unsigned int)17);
305 EXPECT_EQ(_fp->subregion3(19.1e6, 635.0), (
unsigned int)18);
306 EXPECT_EQ(_fp->subregion3(20.0e6, 638.0), (
unsigned int)18);
307 EXPECT_EQ(_fp->subregion3(17.0e6, 626.0), (
unsigned int)19);
308 EXPECT_EQ(_fp->subregion3(20.0e6, 640.0), (
unsigned int)19);
309 EXPECT_EQ(_fp->subregion3(21.5e6, 644.6), (
unsigned int)20);
310 EXPECT_EQ(_fp->subregion3(22.0e6, 646.1), (
unsigned int)20);
311 EXPECT_EQ(_fp->subregion3(22.5e6, 648.6), (
unsigned int)21);
312 EXPECT_EQ(_fp->subregion3(22.3e6, 647.9), (
unsigned int)21);
313 EXPECT_EQ(_fp->subregion3(22.15e6, 647.5), (
unsigned int)22);
314 EXPECT_EQ(_fp->subregion3(22.3e6, 648.1), (
unsigned int)22);
315 EXPECT_EQ(_fp->subregion3(22.11e6, 648.0), (
unsigned int)23);
316 EXPECT_EQ(_fp->subregion3(22.3e6, 649.0), (
unsigned int)23);
317 EXPECT_EQ(_fp->subregion3(22.0e6, 646.84), (
unsigned int)24);
318 EXPECT_EQ(_fp->subregion3(22.064e6, 647.05), (
unsigned int)24);
319 EXPECT_EQ(_fp->subregion3(22.0e6, 646.89), (
unsigned int)25);
320 EXPECT_EQ(_fp->subregion3(22.064e6, 647.15), (
unsigned int)25);
334 REL_TEST(_fp->densityRegion3(50.0e6, 630.0), 1.0 / 0.001470853100,
tol);
335 REL_TEST(_fp->densityRegion3(80.0e6, 670.0), 1.0 / 0.001503831359,
tol);
336 REL_TEST(_fp->densityRegion3(50.0e6, 710.0), 1.0 / 0.002204728587,
tol);
337 REL_TEST(_fp->densityRegion3(80.0e6, 750.0), 1.0 / 0.001973692940,
tol);
338 REL_TEST(_fp->densityRegion3(20.0e6, 630.0), 1.0 / 0.001761696406,
tol);
339 REL_TEST(_fp->densityRegion3(30.0e6, 650.0), 1.0 / 0.001819560617,
tol);
340 REL_TEST(_fp->densityRegion3(26.0e6, 656.0), 1.0 / 0.002245587720,
tol);
341 REL_TEST(_fp->densityRegion3(30.0e6, 670.0), 1.0 / 0.002506897702,
tol);
342 REL_TEST(_fp->densityRegion3(26.0e6, 661.0), 1.0 / 0.002970225962,
tol);
343 REL_TEST(_fp->densityRegion3(30.0e6, 675.0), 1.0 / 0.003004627086,
tol);
344 REL_TEST(_fp->densityRegion3(26.0e6, 671.0), 1.0 / 0.005019029401,
tol);
345 REL_TEST(_fp->densityRegion3(30.0e6, 690.0), 1.0 / 0.004656470142,
tol);
346 REL_TEST(_fp->densityRegion3(23.6e6, 649.0), 1.0 / 0.002163198378,
tol);
347 REL_TEST(_fp->densityRegion3(24.0e6, 650.0), 1.0 / 0.002166044161,
tol);
348 REL_TEST(_fp->densityRegion3(23.6e6, 652.0), 1.0 / 0.002651081407,
tol);
349 REL_TEST(_fp->densityRegion3(24.0e6, 654.0), 1.0 / 0.002967802335,
tol);
350 REL_TEST(_fp->densityRegion3(23.6e6, 653.0), 1.0 / 0.003273916816,
tol);
351 REL_TEST(_fp->densityRegion3(24.0e6, 655.0), 1.0 / 0.003550329864,
tol);
352 REL_TEST(_fp->densityRegion3(23.5e6, 655.0), 1.0 / 0.004545001142,
tol);
353 REL_TEST(_fp->densityRegion3(24.0e6, 660.0), 1.0 / 0.005100267704,
tol);
354 REL_TEST(_fp->densityRegion3(23.0e6, 660.0), 1.0 / 0.006109525997,
tol);
355 REL_TEST(_fp->densityRegion3(24.0e6, 670.0), 1.0 / 0.006427325645,
tol);
356 REL_TEST(_fp->densityRegion3(22.6e6, 646.0), 1.0 / 0.002117860851,
tol);
357 REL_TEST(_fp->densityRegion3(23.0e6, 646.0), 1.0 / 0.002062374674,
tol);
358 REL_TEST(_fp->densityRegion3(22.6e6, 648.6), 1.0 / 0.002533063780,
tol);
359 REL_TEST(_fp->densityRegion3(22.8e6, 649.3), 1.0 / 0.002572971781,
tol);
360 REL_TEST(_fp->densityRegion3(22.6e6, 649.0), 1.0 / 0.002923432711,
tol);
361 REL_TEST(_fp->densityRegion3(22.8e6, 649.7), 1.0 / 0.002913311494,
tol);
362 REL_TEST(_fp->densityRegion3(22.6e6, 649.1), 1.0 / 0.003131208996,
tol);
363 REL_TEST(_fp->densityRegion3(22.8e6, 649.9), 1.0 / 0.003221160278,
tol);
364 REL_TEST(_fp->densityRegion3(22.6e6, 649.4), 1.0 / 0.003715596186,
tol);
365 REL_TEST(_fp->densityRegion3(22.8e6, 650.2), 1.0 / 0.003664754790,
tol);
366 REL_TEST(_fp->densityRegion3(21.1e6, 640.0), 1.0 / 0.001970999272,
tol);
367 REL_TEST(_fp->densityRegion3(21.8e6, 643.0), 1.0 / 0.002043919161,
tol);
368 REL_TEST(_fp->densityRegion3(21.1e6, 644.0), 1.0 / 0.005251009921,
tol);
369 REL_TEST(_fp->densityRegion3(21.8e6, 648.0), 1.0 / 0.005256844741,
tol);
370 REL_TEST(_fp->densityRegion3(19.1e6, 635.0), 1.0 / 0.001932829079,
tol);
371 REL_TEST(_fp->densityRegion3(20.0e6, 638.0), 1.0 / 0.001985387227,
tol);
372 REL_TEST(_fp->densityRegion3(17.0e6, 626.0), 1.0 / 0.008483262001,
tol);
373 REL_TEST(_fp->densityRegion3(20.0e6, 640.0), 1.0 / 0.006227528101,
tol);
374 REL_TEST(_fp->densityRegion3(21.5e6, 644.6), 1.0 / 0.002268366647,
tol);
375 REL_TEST(_fp->densityRegion3(22.0e6, 646.1), 1.0 / 0.002296350553,
tol);
376 REL_TEST(_fp->densityRegion3(22.5e6, 648.6), 1.0 / 0.002832373260,
tol);
377 REL_TEST(_fp->densityRegion3(22.3e6, 647.9), 1.0 / 0.002811424405,
tol);
378 REL_TEST(_fp->densityRegion3(22.15e6, 647.5), 1.0 / 0.003694032281,
tol);
379 REL_TEST(_fp->densityRegion3(22.3e6, 648.1), 1.0 / 0.003622226305,
tol);
380 REL_TEST(_fp->densityRegion3(22.11e6, 648.0), 1.0 / 0.004528072649,
tol);
381 REL_TEST(_fp->densityRegion3(22.3e6, 649.0), 1.0 / 0.004556905799,
tol);
382 REL_TEST(_fp->densityRegion3(22.0e6, 646.84), 1.0 / 0.002698354719,
tol);
383 REL_TEST(_fp->densityRegion3(22.064e6, 647.05), 1.0 / 0.002717655648,
tol);
384 REL_TEST(_fp->densityRegion3(22.0e6, 646.89), 1.0 / 0.003798732962,
tol);
385 REL_TEST(_fp->densityRegion3(22.064e6, 647.15), 1.0 / 0.003701940010,
tol);
405 Real p0, p1, p2, T0, T1, T2;
408 const Real tol2 = 1.0e-12;
418 REL_TEST(_fp->rho_from_p_T(p0, T0), 1.0 / 0.00100215168,
tol);
419 REL_TEST(_fp->rho_from_p_T(p1, T1), 1.0 / 0.000971180894,
tol);
420 REL_TEST(_fp->rho_from_p_T(p2, T2), 1.0 / 0.00120241800,
tol);
421 REL_TEST(_fp->h_from_p_T(p0, T0), 115.331273e3,
tol);
422 REL_TEST(_fp->h_from_p_T(p1, T1), 184.142828e3,
tol);
423 REL_TEST(_fp->h_from_p_T(p2, T2), 975.542239e3,
tol);
424 REL_TEST(_fp->e_from_p_T(p0, T0), 112.324818e3,
tol);
425 REL_TEST(_fp->e_from_p_T(p1, T1), 106.448356e3,
tol);
426 REL_TEST(_fp->e_from_p_T(p2, T2), 971.934985e3,
tol);
427 REL_TEST(_fp->s_from_p_T(p0, T0), 0.392294792e3,
tol);
428 REL_TEST(_fp->s_from_p_T(p1, T1), 0.368563852e3,
tol);
429 REL_TEST(_fp->s_from_p_T(p2, T2), 2.58041912e3,
tol);
430 REL_TEST(_fp->cp_from_p_T(p0, T0), 4.17301218e3,
tol);
431 REL_TEST(_fp->cp_from_p_T(p1, T1), 4.01008987e3,
tol);
432 REL_TEST(_fp->cp_from_p_T(p2, T2), 4.65580682e3,
tol);
433 REL_TEST(_fp->c_from_p_T(p0, T0), 1507.73921,
tol);
434 REL_TEST(_fp->c_from_p_T(p1, T1), 1634.69054,
tol);
435 REL_TEST(_fp->c_from_p_T(p2, T2), 1240.71337,
tol);
438 REL_TEST(_fp->cv_from_p_T(p0, T0), 4.1207e3, REL_TOL_EXTERNAL_VALUE);
442 h0 = _fp->h_from_p_T(p0, T0);
443 h1 = _fp->h_from_p_T(p1, T1);
444 h2 = _fp->h_from_p_T(p2, T2);
445 REL_TEST(_fp->s_from_h_p(h0, p0), 0.392294792e3, 1e-3);
446 REL_TEST(_fp->s_from_h_p(h1, p1), 0.368563852e3, 1e-3);
447 REL_TEST(_fp->s_from_h_p(h2, p2), 2.58041912e3, 1e-4);
457 REL_TEST(_fp->rho_from_p_T(p0, T0), 1.0 / 39.4913866,
tol);
458 REL_TEST(_fp->rho_from_p_T(p1, T1), 1.0 / 92.3015898,
tol);
459 REL_TEST(_fp->rho_from_p_T(p2, T2), 1.0 / 0.00542946619,
tol);
460 REL_TEST(_fp->h_from_p_T(p0, T0), 2549.91145e3,
tol);
461 REL_TEST(_fp->h_from_p_T(p1, T1), 3335.68375e3,
tol);
462 REL_TEST(_fp->h_from_p_T(p2, T2), 2631.49474e3,
tol);
463 REL_TEST(_fp->e_from_p_T(p0, T0), 2411.6916e3,
tol);
464 REL_TEST(_fp->e_from_p_T(p1, T1), 3012.62819e3,
tol);
465 REL_TEST(_fp->e_from_p_T(p2, T2), 2468.61076e3,
tol);
466 REL_TEST(_fp->s_from_p_T(p0, T0), 8.52238967e3,
tol);
467 REL_TEST(_fp->s_from_p_T(p1, T1), 10.1749996e3,
tol);
468 REL_TEST(_fp->s_from_p_T(p2, T2), 5.17540298e3,
tol);
469 REL_TEST(_fp->cp_from_p_T(p0, T0), 1.91300162e3,
tol);
470 REL_TEST(_fp->cp_from_p_T(p1, T1), 2.08141274e3,
tol);
471 REL_TEST(_fp->cp_from_p_T(p2, T2), 10.3505092e3,
tol);
472 REL_TEST(_fp->c_from_p_T(p0, T0), 427.920172,
tol);
473 REL_TEST(_fp->c_from_p_T(p1, T1), 644.289068,
tol);
474 REL_TEST(_fp->c_from_p_T(p2, T2), 480.386523,
tol);
477 REL_TEST(_fp->cv_from_p_T(p0, T0), 1.4415e3, REL_TOL_EXTERNAL_VALUE);
480 h0 = _fp->h_from_p_T(p0, T0);
481 h1 = _fp->h_from_p_T(p1, T1);
482 h2 = _fp->h_from_p_T(p2, T2);
483 REL_TEST(_fp->s_from_h_p(h0, p0), 8.52238967e3, 1e-5);
484 REL_TEST(_fp->s_from_h_p(h1, p1), 10.1749996e3, 1e-6);
485 REL_TEST(_fp->s_from_h_p(h2, p2), 5.17540298e3, 1e-4);
496 REL_TEST(_fp->rho_from_p_T(p0, T0), 500.0, 1.0e-5);
497 REL_TEST(_fp->rho_from_p_T(p1, T1), 200.0, 1.0e-5);
498 REL_TEST(_fp->rho_from_p_T(p2, T2), 500.0, 1.0e-5);
499 REL_TEST(_fp->h_from_p_T(p0, T0), 1863.43019e3, 1.0e-5);
500 REL_TEST(_fp->h_from_p_T(p1, T1), 2375.12401e3, 1.0e-5);
501 REL_TEST(_fp->h_from_p_T(p2, T2), 2258.68845e3, 1.0e-5);
502 REL_TEST(_fp->e_from_p_T(p0, T0), 1812.26279e3, 1.0e-5);
503 REL_TEST(_fp->e_from_p_T(p1, T1), 2263.65868e3, 1.0e-5);
504 REL_TEST(_fp->e_from_p_T(p2, T2), 2102.06932e3, 1.0e-5);
505 REL_TEST(_fp->s_from_p_T(p0, T0), 4.05427273e3, 1.0e-5);
506 REL_TEST(_fp->s_from_p_T(p1, T1), 4.85438792e3, 1.0e-5);
507 REL_TEST(_fp->s_from_p_T(p2, T2), 4.46971906e3, 1.0e-5);
508 REL_TEST(_fp->cp_from_p_T(p0, T0), 13.8935717e3, 1.0e-4);
509 REL_TEST(_fp->cp_from_p_T(p1, T1), 44.6579342e3, 1.0e-5);
510 REL_TEST(_fp->cp_from_p_T(p2, T2), 6.34165359e3, 1.0e-5);
511 REL_TEST(_fp->c_from_p_T(p0, T0), 502.005554, 1.0e-5);
512 REL_TEST(_fp->c_from_p_T(p1, T1), 383.444594, 1.0e-5);
513 REL_TEST(_fp->c_from_p_T(p2, T2), 760.696041, 1.0e-5);
516 REL_TEST(_fp->cv_from_p_T(p0, T0), 3.1910e3, REL_TOL_EXTERNAL_VALUE);
519 h0 = _fp->h_from_p_T(p0, T0);
520 h1 = _fp->h_from_p_T(p1, T1);
521 h2 = _fp->h_from_p_T(p2, T2);
522 REL_TEST(_fp->s_from_h_p(h0, p0), 4.05427273e3, 1e-4);
523 REL_TEST(_fp->s_from_h_p(h1, p1), 4.85438792e3, 2e-4);
524 REL_TEST(_fp->s_from_h_p(h2, p2), 4.46971906e3, 2e-5);
534 REL_TEST(_fp->rho_from_p_T(p0, T0), 1.0 / 1.38455090,
tol);
535 REL_TEST(_fp->rho_from_p_T(p1, T1), 1.0 / 0.0230761299,
tol);
536 REL_TEST(_fp->rho_from_p_T(p2, T2), 1.0 / 0.0311385219,
tol);
537 REL_TEST(_fp->h_from_p_T(p0, T0), 5219.76855e3,
tol);
538 REL_TEST(_fp->h_from_p_T(p1, T1), 5167.23514e3,
tol);
539 REL_TEST(_fp->h_from_p_T(p2, T2), 6571.22604e3,
tol);
540 REL_TEST(_fp->e_from_p_T(p0, T0), 4527.4931e3,
tol);
541 REL_TEST(_fp->e_from_p_T(p1, T1), 4474.95124e3,
tol);
542 REL_TEST(_fp->e_from_p_T(p2, T2), 5637.07038e3,
tol);
543 REL_TEST(_fp->s_from_p_T(p0, T0), 9.65408875e3,
tol);
544 REL_TEST(_fp->s_from_p_T(p1, T1), 7.72970133e3,
tol);
545 REL_TEST(_fp->s_from_p_T(p2, T2), 8.53640523e3,
tol);
546 REL_TEST(_fp->cp_from_p_T(p0, T0), 2.61609445e3,
tol);
547 REL_TEST(_fp->cp_from_p_T(p1, T1), 2.72724317e3,
tol);
548 REL_TEST(_fp->cp_from_p_T(p2, T2), 2.88569882e3,
tol);
549 REL_TEST(_fp->c_from_p_T(p0, T0), 917.06869,
tol);
550 REL_TEST(_fp->c_from_p_T(p1, T1), 928.548002,
tol);
551 REL_TEST(_fp->c_from_p_T(p2, T2), 1067.36948,
tol);
554 REL_TEST(_fp->cv_from_p_T(p0, T0), 2.1534e3, REL_TOL_EXTERNAL_VALUE);
560 ABS_TEST(_fp->mu_from_rho_T(998.0, 298.15), 889.735100e-6, tol2);
561 ABS_TEST(_fp->mu_from_rho_T(1200.0, 298.15), 1437.649467e-6, tol2);
562 ABS_TEST(_fp->mu_from_rho_T(1000.0, 373.15), 307.883622e-6, tol2);
563 ABS_TEST(_fp->mu_from_rho_T(1.0, 433.15), 14.538324e-6, tol2);
564 ABS_TEST(_fp->mu_from_rho_T(1000.0, 433.15), 217.685358e-6, tol2);
565 ABS_TEST(_fp->mu_from_rho_T(1.0, 873.15), 32.619287e-6, tol2);
566 ABS_TEST(_fp->mu_from_rho_T(100.0, 873.15), 35.802262e-6, tol2);
567 ABS_TEST(_fp->mu_from_rho_T(600.0, 873.15), 77.430195e-6, tol2);
568 ABS_TEST(_fp->mu_from_rho_T(1.0, 1173.15), 44.217245e-6, tol2);
569 ABS_TEST(_fp->mu_from_rho_T(100.0, 1173.15), 47.640433e-6, tol2);
570 ABS_TEST(_fp->mu_from_rho_T(400.0, 1173.15), 64.154608e-6, tol2);
571 REL_TEST(_fp->mu_from_p_T(1e6, 298.15), 889.898581797e-6, REL_TOL_EXTERNAL_VALUE);
572 REL_TEST(_fp->mu_from_p_T(2e6, 298.15), 889.763899645e-6, REL_TOL_EXTERNAL_VALUE);
573 REL_TEST(_fp->mu_from_p_T(1e6, 373.15), 281.825180491e-6, REL_TOL_EXTERNAL_VALUE);
574 REL_TEST(_fp->mu_from_p_T(2e6, 373.15), 282.09550632e-6, REL_TOL_EXTERNAL_VALUE);
575 REL_TEST(_fp->mu_from_p_T(1e6, 433.15), 170.526801634e-6, REL_TOL_EXTERNAL_VALUE);
576 REL_TEST(_fp->mu_from_p_T(2e6, 433.15), 170.780193827e-6, REL_TOL_EXTERNAL_VALUE);
577 REL_TEST(_fp->mu_from_p_T(1e6, 873.15), 3.2641885983e-5, REL_TOL_EXTERNAL_VALUE);
578 REL_TEST(_fp->mu_from_p_T(2e6, 873.15), 3.26820969808e-5, REL_TOL_EXTERNAL_VALUE);
579 REL_TEST(_fp->mu_from_p_T(1e6, 1173.15), 4.42374919686e-5, REL_TOL_EXTERNAL_VALUE);
580 REL_TEST(_fp->mu_from_p_T(2e6, 1173.15), 4.42823959629e-5, REL_TOL_EXTERNAL_VALUE);
583 REL_TEST(_fp->k_from_p_T(1.0e6, 323.15), 0.641, 1.0e-4);
584 REL_TEST(_fp->k_from_p_T(20.0e6, 623.15), 0.4541, 1.0e-4);
585 REL_TEST(_fp->k_from_p_T(50.0e6, 773.15), 0.2055, 1.0e-4);
587 ABS_TEST(_fp->k_from_p_T(1.0e6, 323.15), 0.640972, 5e-7);
588 ABS_TEST(_fp->k_from_p_T(20.0e6, 623.15), 0.454131, 7e-7);
589 ABS_TEST(_fp->k_from_p_T(50.0e6, 773.15), 0.205485, 5e-7);
593 REL_TEST(_fp->T_from_p_h(3.0e6, 500.0e3), 0.391798509e3,
tol);
594 REL_TEST(_fp->T_from_p_h(80.0e6, 500.0e3), 0.378108626e3,
tol);
595 REL_TEST(_fp->T_from_p_h(80.0e6, 1500.0e3), 0.611041229e3,
tol);
596 REL_TEST(_fp->T_from_p_h((
ADReal)80.0e6, (
ADReal)1500.0e3).value(), 0.611041229e3,
tol);
599 REL_TEST(_fp->T_from_p_h(1.0e3, 3000.0e3), 0.534433241e3,
tol);
600 REL_TEST(_fp->T_from_p_h(3.0e6, 3000.0e3), 0.575373370e3,
tol);
601 REL_TEST(_fp->T_from_p_h(3.0e6, 4000.0e3), 0.101077577e4,
tol);
604 REL_TEST(_fp->T_from_p_h(5.0e6, 3500.0e3), 0.801299102e3,
tol);
605 REL_TEST(_fp->T_from_p_h(5.0e6, 4000.0e3), 0.101531583e4,
tol);
606 REL_TEST(_fp->T_from_p_h(25.0e6, 3500.0e3), 0.875279054e3,
tol);
609 REL_TEST(_fp->T_from_p_h(40.0e6, 2700.0e3), 0.743056411e3,
tol);
610 REL_TEST(_fp->T_from_p_h(60.0e6, 2700.0e3), 0.791137067e3,
tol);
611 REL_TEST(_fp->T_from_p_h(60.0e6, 3200.0e3), 0.882756860e3,
tol);
614 REL_TEST(_fp->T_from_p_h(20.0e6, 1700.0e3), 0.6293083892e3,
tol);
615 REL_TEST(_fp->T_from_p_h(50.0e6, 2000.0e3), 0.6905718338e3,
tol);
616 REL_TEST(_fp->T_from_p_h(100.0e6, 2100.0e3), 0.7336163014e3,
tol);
619 REL_TEST(_fp->T_from_p_h(20.0e6, 2500.0e3), 0.6418418053e3,
tol);
620 REL_TEST(_fp->T_from_p_h(50.0e6, 2400.0e3), 0.7351848618e3,
tol);
621 REL_TEST(_fp->T_from_p_h(100.0e6, 2700.0e3), 0.8420460876e3,
tol);
630 const Real tol = REL_TOL_DERIVATIVE;
635 DERIV_TEST(_fp->rho_from_p_T,
p,
T,
tol);
636 DERIV_TEST(_fp->e_from_p_T,
p,
T,
tol);
637 DERIV_TEST(_fp->h_from_p_T,
p,
T,
tol);
638 DERIV_TEST(_fp->s_from_p_T,
p,
T,
tol);
643 DERIV_TEST(_fp->rho_from_p_T,
p,
T,
tol);
644 DERIV_TEST(_fp->e_from_p_T,
p,
T,
tol);
645 DERIV_TEST(_fp->h_from_p_T,
p,
T,
tol);
646 DERIV_TEST(_fp->s_from_p_T,
p,
T,
tol);
651 DERIV_TEST(_fp->rho_from_p_T,
p,
T, 1.0e-2);
652 DERIV_TEST(_fp->e_from_p_T,
p,
T, 1.0e-2);
653 DERIV_TEST(_fp->h_from_p_T,
p,
T, 1.0e-2);
654 DERIV_TEST(_fp->s_from_p_T,
p,
T, 1.0e-2);
658 const Real dT = 1.0e-4;
660 Real dpSat_dT_fd = (_fp->vaporPressure(
T + dT) - _fp->vaporPressure(
T - dT)) / (2.0 * dT);
661 Real pSat = 0.0, dpSat_dT = 0.0;
662 _fp->vaporPressure(
T, pSat, dpSat_dT);
664 REL_TEST(dpSat_dT, dpSat_dT_fd, 1.0e-6);
669 DERIV_TEST(_fp->rho_from_p_T,
p,
T,
tol);
670 DERIV_TEST(_fp->e_from_p_T,
p,
T,
tol);
671 DERIV_TEST(_fp->h_from_p_T,
p,
T,
tol);
672 DERIV_TEST(_fp->s_from_p_T,
p,
T,
tol);
675 Real rho = 998.0, drho_dp = 0.0, drho_dT = 0.0;
680 (_fp->mu_from_rho_T(
rho + drho,
T) - _fp->mu_from_rho_T(
rho - drho,
T)) / (2.0 * drho);
681 Real mu = 0.0, dmu_drho = 0.0, dmu_dT = 0.0;
682 _fp->mu_from_rho_T(
rho,
T, drho_dT,
mu, dmu_drho, dmu_dT);
684 ABS_TEST(
mu, _fp->mu_from_rho_T(
rho,
T), 1.0e-15);
685 REL_TEST(dmu_drho, dmu_drho_fd, 1.0e-6);
690 _fp->rho_from_p_T(
p,
T,
rho, drho_dp, drho_dT);
691 _fp->mu_from_rho_T(
rho,
T, drho_dT,
mu, dmu_drho, dmu_dT);
692 Real dmu_dT_fd = (_fp->mu_from_rho_T(_fp->rho_from_p_T(
p,
T + dT),
T + dT) -
693 _fp->mu_from_rho_T(_fp->rho_from_p_T(
p,
T - dT),
T - dT)) /
696 REL_TEST(dmu_dT, dmu_dT_fd, 1.0e-6);
701 Real dmu_dp_fd = (_fp->mu_from_p_T(
p + dp,
T) - _fp->mu_from_p_T(
p - dp,
T)) / (2.0 * dp);
703 _fp->mu_from_p_T(
p,
T,
mu, dmu_dp, dmu_dT);
705 REL_TEST(dmu_dp, dmu_dp_fd, 1.0e-5);
714 ADReal adT = _ad_fp->T_from_p_h(adp, adh);
716 REL_TEST(adT.value(), 0.101077577e4, 1.0e-8);
718 Real dT_dp_fd = (_fp->T_from_p_h(adp.value() + dp, adh.value()) -
719 _fp->T_from_p_h(adp.value() - dp, adh.value())) /
722 REL_TEST(adT.derivatives()[0], dT_dp_fd,
tol);
725 Real dT_dh_fd = (_fp->T_from_p_h(adp.value(), adh.value() + dh) -
726 _fp->T_from_p_h(adp.value(), adh.value() - dh)) /
729 REL_TEST(adT.derivatives()[1], dT_dh_fd,
tol);
734 Real h = _fp->h_from_p_T(
p,
T);
735 DERIV_TEST(_fp->s_from_h_p, h,
p,
tol);
744 const Real p = 1.0e6;
745 const Real T = 300.0;
746 const Real tol = REL_TOL_CONSISTENCY;
750 _fp->rho_from_p_T(
p,
T,
rho, drho_dp, drho_dT);
752 _fp->mu_from_p_T(
p,
T,
mu, dmu_dp, dmu_dT);
753 Real e, de_dp, de_dT;
754 _fp->e_from_p_T(
p,
T, e, de_dp, de_dT);
757 Real rho2, drho2_dp, drho2_dT, mu2, dmu2_dp, dmu2_dT, e2, de2_dp, de2_dT;
758 _fp->rho_mu_from_p_T(
p,
T, rho2, mu2);
761 ABS_TEST(
mu, mu2,
tol);
763 _fp->rho_mu_from_p_T(
p,
T, rho2, drho2_dp, drho2_dT, mu2, dmu2_dp, dmu2_dT);
765 ABS_TEST(drho_dp, drho2_dp,
tol);
766 ABS_TEST(drho_dT, drho2_dT,
tol);
767 ABS_TEST(
mu, mu2,
tol);
768 ABS_TEST(dmu_dp, dmu2_dp,
tol);
769 ABS_TEST(dmu_dT, dmu2_dT,
tol);
771 _fp->rho_e_from_p_T(
p,
T, rho2, drho2_dp, drho2_dT, e2, de2_dp, de2_dT);
773 ABS_TEST(drho_dp, drho2_dp,
tol);
774 ABS_TEST(drho_dT, drho2_dT,
tol);
775 ABS_TEST(e, e2,
tol);
776 ABS_TEST(de_dp, de2_dp,
tol);
777 ABS_TEST(de_dT, de2_dT,
tol);
787 const Real tol = REL_TOL_EXTERNAL_VALUE;
790 const std::vector<Real> co2{-8.55445, 4.01195, 9.52345};
791 REL_TEST(_fp->henryConstant(300.0, co2), 173.63e6,
tol);
792 REL_TEST(_fp->henryConstant(500.0, co2), 520.79e6,
tol);
795 const std::vector<Real> ch4{-10.44708, 4.66491, 12.1298};
796 REL_TEST(_fp->henryConstant(400.0, ch4), 6017.1e6, REL_TOL_EXTERNAL_VALUE);
797 REL_TEST(_fp->henryConstant(600.0, ch4), 801.8e6, REL_TOL_EXTERNAL_VALUE);
800 const Real dT = 1.0e-4;
801 const Real dKh_dT_fd =
802 (_fp->henryConstant(500.0 + dT, co2) - _fp->henryConstant(500.0 - dT, co2)) / (2.0 * dT);
804 Real Kh = 0.0, dKh_dT = 0.0;
805 _fp->henryConstant(500.0, co2, Kh, dKh_dT);
806 REL_TEST(Kh, _fp->henryConstant(500.0, co2), REL_TOL_CONSISTENCY);
807 REL_TEST(dKh_dT_fd, dKh_dT, REL_TOL_DERIVATIVE);
815 auto run_tests = [
this](
const auto & example)
817 typedef typename std::decay<decltype(example)>::type TestType;
822 const auto v = 1 /
rho;
825 auto [p_test, T_test] = _fp->p_T_from_v_e(
v, e);
826 REL_TEST(
pressure, p_test, REL_TOL_CONSISTENCY);
827 REL_TEST(
temperature, T_test, REL_TOL_CONSISTENCY);
829 decltype(p_test) rho_test;
830 std::tie(rho_test, T_test) = _fp->rho_T_from_v_e(
v, e);
831 REL_TEST(
rho, rho_test, REL_TOL_CONSISTENCY);
832 REL_TEST(
temperature, T_test, REL_TOL_CONSISTENCY);
835 REL_TEST(_fp->e_from_p_rho(
pressure,
rho), e, REL_TOL_CONSISTENCY);
837 constexpr
Real perturbation_factor = 1 + 1e-8;
838 TestType de_dp, de_drho, de_dT;
839 _fp->e_from_p_rho(
pressure,
rho, e, de_dp, de_drho);
842 REL_TEST(de_dp, de_dp_diff, 1e-2);
843 auto de_drho_diff = (_fp->e_from_p_rho(
pressure, perturbation_factor *
rho) - e) / (1e-8 *
rho);
844 REL_TEST(de_drho, de_drho_diff, 1e-2);
849 REL_TEST(de_dp, de_dp_diff, 1e-2);
852 REL_TEST(de_dT, de_dT_diff, 1e-2);
855 std::tie(p_test, T_test) = _fp->p_T_from_v_h(
v, h);
856 REL_TEST(
pressure, p_test, REL_TOL_CONSISTENCY);
857 REL_TEST(
temperature, T_test, REL_TOL_CONSISTENCY);
859 REL_TEST(_fp->e_from_v_h(
v, h), e, REL_TOL_CONSISTENCY);
860 REL_TEST(_fp->T_from_v_e(
v, e),
temperature, REL_TOL_CONSISTENCY);
871 bool conversion_succeeded =
false;
872 _fp->p_T_from_h_s(h, s, p0, T0, p_test, T_test, conversion_succeeded);
873 EXPECT_TRUE(conversion_succeeded);
874 REL_TEST(
pressure, p_test, REL_TOL_CONSISTENCY);
875 REL_TEST(
temperature, T_test, REL_TOL_CONSISTENCY);
TEST_F(Water97FluidPropertiesTest, fluidName)
Test that the fluid name is correctly returned.
static const std::string temperature
DualNumber< Real, DNDerivativeType, false > ADReal
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const std::string pressure
void derivInsert(SemiDynamicSparseNumberArray< Real, libMesh::dof_id_type, NWrapper< N >> &derivs, libMesh::dof_id_type index, Real value)
void ErrorVector unsigned int