31 for (std::size_t i = 0; i < _p.size(); ++i)
33 REL_TEST(_fp->rho_from_p_T(_p[i],
T), _rho_sc / _B[i], REL_TOL_CONSISTENCY);
34 REL_TEST(_fp->mu_from_p_T(_p[i],
T), _mu[i], REL_TOL_CONSISTENCY);
35 REL_TEST(_fp_bounds->rho_from_p_T(_p[i],
T), _rho_sc / _B[i], REL_TOL_CONSISTENCY);
36 REL_TEST(_fp_bounds->mu_from_p_T(_p[i],
T), _mu[i], REL_TOL_CONSISTENCY);
37 REL_TEST(_fp_throw->rho_from_p_T(_p[i],
T), _rho_sc / _B[i], REL_TOL_CONSISTENCY);
38 REL_TEST(_fp_throw->mu_from_p_T(_p[i],
T), _mu[i], REL_TOL_CONSISTENCY);
50 const Real inv_B = 0.5 * (1.0 / _B[1] + 1.0 / _B[2]);
51 const Real inv_B_mu = 0.5 * (1.0 / (_B[1] * _mu[1]) + 1.0 / (_B[2] * _mu[2]));
52 const Real
rho = _rho_sc * inv_B;
53 const Real
mu = inv_B / inv_B_mu;
55 REL_TEST(_fp->rho_from_p_T(
p,
T),
rho, REL_TOL_CONSISTENCY);
56 REL_TEST(_fp->mu_from_p_T(
p,
T),
mu, REL_TOL_CONSISTENCY);
57 REL_TEST(_fp->e_from_p_T(
p,
T), _cv *
T, REL_TOL_CONSISTENCY);
58 REL_TEST(_fp->h_from_p_T(
p,
T), _cv *
T +
p /
rho, REL_TOL_CONSISTENCY);
61 REL_TEST(_fp->rho_from_p_T(
p,
T), 814.20313790256, REL_TOL_SAVED_VALUE);
62 REL_TEST(_fp->mu_from_p_T(
p,
T), 1.1341216986149e-3, REL_TOL_SAVED_VALUE);
66 _fp->rho_mu_from_p_T(
p,
T, rho2, mu2);
67 REL_TEST(rho2,
rho, REL_TOL_CONSISTENCY);
68 REL_TEST(mu2,
mu, REL_TOL_CONSISTENCY);
82 const Real inv_B = 1.0 / _B[3] + 0.5 * (1.0 / _B[3] - 1.0 / _B[2]);
84 1.0 / (_B[3] * _mu[3]) + 0.5 * (1.0 / (_B[3] * _mu[3]) - 1.0 / (_B[2] * _mu[2]));
85 REL_TEST(_fp->rho_from_p_T(
p,
T), _rho_sc * inv_B, REL_TOL_CONSISTENCY);
86 REL_TEST(_fp->mu_from_p_T(
p,
T), inv_B / inv_B_mu, REL_TOL_CONSISTENCY);
92 const Real inv_B = 1.0 / _B[0] - 0.125 * (1.0 / _B[1] - 1.0 / _B[0]);
94 1.0 / (_B[0] * _mu[0]) - 0.125 * (1.0 / (_B[1] * _mu[1]) - 1.0 / (_B[0] * _mu[0]));
95 REL_TEST(_fp->rho_from_p_T(
p,
T), _rho_sc * inv_B, REL_TOL_CONSISTENCY);
96 REL_TEST(_fp->mu_from_p_T(
p,
T), inv_B / inv_B_mu, REL_TOL_CONSISTENCY);
105 const Real
T = 350.0;
106 Real
rho, drho_dp, drho_dT,
mu, dmu_dp, dmu_dT;
108 _fp_bounds->rho_from_p_T(3.5e7,
T,
rho, drho_dp, drho_dT);
109 _fp_bounds->mu_from_p_T(3.5e7,
T,
mu, dmu_dp, dmu_dT);
110 REL_TEST(
rho, _rho_sc / _B[3], REL_TOL_CONSISTENCY);
111 REL_TEST(
mu, _mu[3], REL_TOL_CONSISTENCY);
112 ABS_TEST(drho_dp, 0.0, REL_TOL_CONSISTENCY);
113 ABS_TEST(dmu_dp, 0.0, REL_TOL_CONSISTENCY);
115 _fp_bounds->rho_from_p_T(1.0e6,
T,
rho, drho_dp, drho_dT);
116 _fp_bounds->mu_from_p_T(1.0e6,
T,
mu, dmu_dp, dmu_dT);
117 REL_TEST(
rho, _rho_sc / _B[0], REL_TOL_CONSISTENCY);
118 REL_TEST(
mu, _mu[0], REL_TOL_CONSISTENCY);
119 ABS_TEST(drho_dp, 0.0, REL_TOL_CONSISTENCY);
120 ABS_TEST(dmu_dp, 0.0, REL_TOL_CONSISTENCY);
130 const Real
T = 350.0;
131 const Real
tol = REL_TOL_DERIVATIVE;
133 for (
const Real
p : {1.0e6, 5.0e6, 1.5e7, 2.5e7, 3.5e7})
135 DERIV_TEST(_fp->rho_from_p_T,
p,
T,
tol);
136 DERIV_TEST(_fp->mu_from_p_T,
p,
T,
tol);
137 DERIV_TEST(_fp->e_from_p_T,
p,
T,
tol);
138 DERIV_TEST(_fp->h_from_p_T,
p,
T,
tol);
140 DERIV_TEST(_fp_bounds->rho_from_p_T,
p,
T,
tol);
141 DERIV_TEST(_fp_bounds->mu_from_p_T,
p,
T,
tol);
142 DERIV_TEST(_fp_bounds->h_from_p_T,
p,
T,
tol);
146 for (
const Real
p : {5.0e6, 1.5e7, 2.5e7})
148 DERIV_TEST(_fp_throw->rho_from_p_T,
p,
T,
tol);
149 DERIV_TEST(_fp_throw->mu_from_p_T,
p,
T,
tol);
150 DERIV_TEST(_fp_throw->h_from_p_T,
p,
T,
tol);
159 const Real
p = 1.5e7;
160 const Real
T = 350.0;
167 Real
rho, drho_dp, drho_dT,
mu, dmu_dp, dmu_dT;
168 _fp->rho_from_p_T(
p,
T,
rho, drho_dp, drho_dT);
169 _fp->mu_from_p_T(
p,
T,
mu, dmu_dp, dmu_dT);
171 const ADReal ad_rho = _fp->rho_from_p_T(ad_p, ad_T);
172 const ADReal ad_mu = _fp->mu_from_p_T(ad_p, ad_T);
174 REL_TEST(ad_rho.value(),
rho, REL_TOL_CONSISTENCY);
175 REL_TEST(ad_rho.derivatives()[0], drho_dp, REL_TOL_CONSISTENCY);
176 ABS_TEST(ad_rho.derivatives()[1], drho_dT, REL_TOL_CONSISTENCY);
177 REL_TEST(ad_mu.value(),
mu, REL_TOL_CONSISTENCY);
178 REL_TEST(ad_mu.derivatives()[0], dmu_dp, REL_TOL_CONSISTENCY);
179 ABS_TEST(ad_mu.derivatives()[1], dmu_dT, REL_TOL_CONSISTENCY);
188 const Real
T = 350.0;
196 EXPECT_NO_THROW(_fp_throw->rho_from_p_T(_p.front(),
T));
197 EXPECT_NO_THROW(_fp_throw->rho_from_p_T(_p.back(),
T));
201 _fp_throw->rho_from_p_T(3.5e7,
T);
202 FAIL() <<
"missing expected exception";
206 EXPECT_NE(std::string(err.what()).find(
"is outside the range of tabulated pressure"),
218 const Real
T = 350.0;
220 for (
const auto *
fp : {_fp_declare_invalid, _fp_warn_invalid})
222 Real
rho, drho_dp, drho_dT,
mu, dmu_dp, dmu_dT;
224 fp->rho_from_p_T(3.5e7,
T,
rho, drho_dp, drho_dT);
225 fp->mu_from_p_T(3.5e7,
T,
mu, dmu_dp, dmu_dT);
226 REL_TEST(
rho, _rho_sc / _B[3], REL_TOL_CONSISTENCY);
227 REL_TEST(
mu, _mu[3], REL_TOL_CONSISTENCY);
228 ABS_TEST(drho_dp, 0.0, REL_TOL_CONSISTENCY);
229 ABS_TEST(dmu_dp, 0.0, REL_TOL_CONSISTENCY);
231 fp->rho_from_p_T(1.0e6,
T,
rho, drho_dp, drho_dT);
232 fp->mu_from_p_T(1.0e6,
T,
mu, dmu_dp, dmu_dT);
233 REL_TEST(
rho, _rho_sc / _B[0], REL_TOL_CONSISTENCY);
234 REL_TEST(
mu, _mu[0], REL_TOL_CONSISTENCY);
278 params.
set<std::vector<Real>>(
"formation_volume_factor") = {1.062, 1.050, 1.038};
279 EXPECT_MOOSEERROR_MSG_CONTAINS(
280 _fe_problem->addUserObject(
"TabulatedPVTFluidProperties",
"invalid_fp", params),
281 "Must have the same number of entries as 'pressure'");
296 params.
set<std::vector<Real>>(
"formation_volume_factor") = {1.062, 0.0, 1.038, 1.028};
297 EXPECT_MOOSEERROR_MSG_CONTAINS(
298 _fe_problem->addUserObject(
"TabulatedPVTFluidProperties",
"invalid_fp", params),
299 "All entries must be positive");
void derivInsert(SemiDynamicSparseNumberArray< Real, libMesh::dof_id_type, NWrapper< N > > &derivs, libMesh::dof_id_type index, Real value)