20 EXPECT_EQ(_fp->fluidName(),
"sodium_sat");
28 ABS_TEST(_fp->molarMass(), 22.989769E-3, REL_TOL_SAVED_VALUE);
38 const Real p = 101325;
41 REL_TEST(_fp->k_from_p_T(
p,
T), 66.9752096, REL_TOL_SAVED_VALUE);
42 DERIV_TEST(_fp->k_from_p_T,
p,
T, REL_TOL_DERIVATIVE);
51 const Real p = 101325;
54 REL_TEST(_fp->mu_from_p_T(
p,
T), 0.00022907910937500003, REL_TOL_SAVED_VALUE);
55 DERIV_TEST(_fp->mu_from_p_T,
p,
T, REL_TOL_DERIVATIVE);
63 const Real T1 = 400.0;
64 const Real T2 = 800.0;
68 REL_TEST(_fp->cp_from_p_T(
p, T1), 1383.985792, REL_TOL_SAVED_VALUE);
69 DERIV_TEST(_fp->cp_from_p_T, 5e5, T1, REL_TOL_DERIVATIVE);
72 REL_TEST(_fp->cp_from_p_T(
p, T2), 1260.719872, REL_TOL_SAVED_VALUE);
73 DERIV_TEST(_fp->cp_from_p_T, 5e5, T2, REL_TOL_DERIVATIVE);
81 const Real T1 = 400.0;
82 const Real T2 = 800.0;
83 const Real p = 101325;
86 REL_TEST(_fp->cv_from_p_T(
p, T1), 1222.9660159999999, REL_TOL_SAVED_VALUE);
87 DERIV_TEST(_fp->cv_from_p_T,
p, T1, REL_TOL_DERIVATIVE);
90 REL_TEST(_fp->cv_from_p_T(
p, T2), 986.2385279999999, REL_TOL_SAVED_VALUE);
91 DERIV_TEST(_fp->cv_from_p_T,
p, T2, REL_TOL_DERIVATIVE);
99 const Real Tm = 370.98;
100 const Real T = 800.0;
101 const Real Tb = 1156.5;
102 const Real p = 101325;
105 ABS_TEST(_fp->rho_from_p_T(
p, Tm), 923.3571594322216, REL_TOL_SAVED_VALUE);
106 DERIV_TEST(_fp->rho_from_p_T,
p, Tm, REL_TOL_DERIVATIVE);
107 ABS_TEST(_fp->v_from_p_T(
p, Tm), 0.001083004544649772, REL_TOL_SAVED_VALUE);
108 DERIV_TEST(_fp->v_from_p_T,
p, Tm, REL_TOL_DERIVATIVE);
111 ABS_TEST(_fp->rho_from_p_T(
p,
T), 826.04056, REL_TOL_SAVED_VALUE);
112 DERIV_TEST(_fp->rho_from_p_T,
p,
T, REL_TOL_DERIVATIVE);
113 ABS_TEST(_fp->v_from_p_T(
p,
T), 0.0012105943078630425, REL_TOL_SAVED_VALUE);
114 DERIV_TEST(_fp->v_from_p_T,
p,
T, REL_TOL_DERIVATIVE);
117 ABS_TEST(_fp->rho_from_p_T(
p, Tb), 742.0807106065, REL_TOL_SAVED_VALUE);
118 DERIV_TEST(_fp->rho_from_p_T,
p, Tb, REL_TOL_DERIVATIVE);
119 ABS_TEST(_fp->v_from_p_T(
p, Tb), 0.0013475623145933863, REL_TOL_SAVED_VALUE);
120 DERIV_TEST(_fp->v_from_p_T,
p, Tb, REL_TOL_DERIVATIVE);
128 const Real T = 800.0;
129 const Real p = 101325;
131 ABS_TEST(_fp->e_from_p_T(
p,
T),
132 _fp->h_from_p_T(
p,
T) -
p * _fp->v_from_p_T(
p,
T),
133 REL_TOL_SAVED_VALUE);
134 DERIV_TEST(_fp->e_from_p_T,
p,
T, REL_TOL_DERIVATIVE);
142 const Real T = 800.0;
146 ABS_TEST(_fp->h_from_p_T(
p,
T), 767034.6715200001, REL_TOL_SAVED_VALUE);
147 DERIV_TEST(_fp->h_from_p_T,
p,
T, REL_TOL_DERIVATIVE);
150 const Real T2 = 1156.5;
151 ABS_TEST(_fp->h_from_p_T(
p, T2), 1218897.6776327428, REL_TOL_SAVED_VALUE);
152 DERIV_TEST(_fp->h_from_p_T,
p, T2, REL_TOL_DERIVATIVE);
160 const Real T = 800.0;
164 Real v, dv_dp, dv_dT;
165 _fp->v_from_p_T(
p,
T,
v, dv_dp, dv_dT);
167 Real h, dh_dp, dh_dT;
168 _fp->h_from_p_T(
p,
T, h, dh_dp, dh_dT);
169 const Real h0 = _fp->h_from_p_T(p0,
T);
171 Real s, ds_dp, ds_dT;
172 _fp->s_from_p_T(
p,
T, s, ds_dp, ds_dT);
174 DERIV_TEST(_fp->h_from_p_T,
p,
T, REL_TOL_DERIVATIVE);
175 REL_TEST(h - h0, (
p - p0) * (
v -
T * dv_dT), REL_TOL_CONSISTENCY);
176 REL_TEST(dh_dp,
v -
T * dv_dT, REL_TOL_DERIVATIVE);
177 REL_TEST(dh_dT, _fp->cp_from_p_T(
p,
T), REL_TOL_DERIVATIVE);
178 REL_TEST(ds_dp, (dh_dp -
v) /
T, REL_TOL_DERIVATIVE);
179 REL_TEST(ds_dT, dh_dT /
T, REL_TOL_DERIVATIVE);
188 const Real T = 800.0;
189 const Real h = _fp->h_from_p_T(
p,
T);
191 REL_TEST(_fp->T_from_p_h(
p, h),
T, REL_TOL_CONSISTENCY);
192 DERIV_TEST(_fp->T_from_p_h,
p, h, REL_TOL_DERIVATIVE);
200 const Real reference_T = 370.98;
201 const Real reference_p = 1e5;
202 ABS_TEST(_fp->s_from_p_T(reference_p, reference_T), 0.0, TOLERANCE);
204 const Real T = 800.0;
206 const Real v = _fp->v_from_p_T(
p,
T);
207 const Real e = _fp->e_from_p_T(
p,
T);
208 const Real s = _fp->s_from_p_T(
p,
T);
209 REL_TEST(_fp->s_from_v_e(
v, e), s, REL_TOL_CONSISTENCY);
210 REL_TEST(_fp->rho_from_p_s(
p, s), 1 /
v, REL_TOL_CONSISTENCY);
212 DERIV_TEST(_fp->s_from_p_T,
p,
T, REL_TOL_DERIVATIVE);
214 DERIV_TEST_CUSTOM_PERTURBATION(_fp->s_from_v_e,
v, e, REL_TOL_DERIVATIVE, 2e-6);
215 DERIV_TEST_CUSTOM_PERTURBATION(_fp->rho_from_p_s,
p, s, REL_TOL_DERIVATIVE, 1e-5);
224 const Real T = 800.0;
228 const Real v = _fp->v_from_p_T(
p,
T);
229 const Real e = _fp->e_from_p_T(
p,
T);
232 ABS_TEST(_fp->T_from_v_e(
v, e),
T, TOLERANCE);
235 ABS_TEST(_fp->p_from_v_e(
v, e),
p, 1e-5);
238 REL_TEST(_fp->c_from_v_e(
v, e), 2301.5361599999997, REL_TOL_SAVED_VALUE);
239 REL_TEST(_fp->cp_from_v_e(
v, e), _fp->cp_from_p_T(
p,
T), REL_TOL_CONSISTENCY);
240 REL_TEST(_fp->cv_from_v_e(
v, e), _fp->cv_from_p_T(
p,
T), REL_TOL_CONSISTENCY);
241 REL_TEST(_fp->mu_from_v_e(
v, e), _fp->mu_from_p_T(
p,
T), REL_TOL_CONSISTENCY);
242 REL_TEST(_fp->k_from_v_e(
v, e), _fp->k_from_p_T(
p,
T), REL_TOL_CONSISTENCY);
243 REL_TEST(_fp->e_from_p_rho(
p, 1 /
v), e, REL_TOL_CONSISTENCY);
245 DERIV_TEST(_fp->p_from_v_e,
v, e, REL_TOL_DERIVATIVE);
246 DERIV_TEST(_fp->T_from_v_e,
v, e, REL_TOL_DERIVATIVE);
247 DERIV_TEST(_fp->c_from_v_e,
v, e, REL_TOL_DERIVATIVE);
248 DERIV_TEST(_fp->cp_from_v_e,
v, e, REL_TOL_DERIVATIVE);
249 DERIV_TEST(_fp->cv_from_v_e,
v, e, REL_TOL_DERIVATIVE);
250 DERIV_TEST(_fp->mu_from_v_e,
v, e, REL_TOL_DERIVATIVE);
251 DERIV_TEST(_fp->k_from_v_e,
v, e, REL_TOL_DERIVATIVE);
252 DERIV_TEST(_fp->e_from_p_rho,
p, 1 /
v, REL_TOL_DERIVATIVE);
261 const Real T = 800.0;
262 const Real v = _fp->v_from_p_T(
p,
T);
263 const Real e = _fp->e_from_p_T(
p,
T);
275 const auto check_ad_derivatives =
278 EXPECT_DOUBLE_EQ(ad_value.value(),
value);
279 EXPECT_DOUBLE_EQ(ad_value.derivatives()[0], dvalue_dv);
280 EXPECT_DOUBLE_EQ(ad_value.derivatives()[1], dvalue_de);
287 _fp->p_from_v_e(
v, e,
value, dvalue_dv, dvalue_de);
288 check_ad_derivatives(
fp.p_from_v_e(v_ad, e_ad),
value, dvalue_dv, dvalue_de);
290 _fp->T_from_v_e(
v, e,
value, dvalue_dv, dvalue_de);
291 check_ad_derivatives(
fp.T_from_v_e(v_ad, e_ad),
value, dvalue_dv, dvalue_de);
293 _fp->c_from_v_e(
v, e,
value, dvalue_dv, dvalue_de);
294 check_ad_derivatives(
fp.c_from_v_e(v_ad, e_ad),
value, dvalue_dv, dvalue_de);
296 _fp->cp_from_v_e(
v, e,
value, dvalue_dv, dvalue_de);
297 check_ad_derivatives(
fp.cp_from_v_e(v_ad, e_ad),
value, dvalue_dv, dvalue_de);
299 _fp->cv_from_v_e(
v, e,
value, dvalue_dv, dvalue_de);
300 check_ad_derivatives(
fp.cv_from_v_e(v_ad, e_ad),
value, dvalue_dv, dvalue_de);
302 _fp->mu_from_v_e(
v, e,
value, dvalue_dv, dvalue_de);
303 check_ad_derivatives(
fp.mu_from_v_e(v_ad, e_ad),
value, dvalue_dv, dvalue_de);
305 _fp->k_from_v_e(
v, e,
value, dvalue_dv, dvalue_de);
306 check_ad_derivatives(
fp.k_from_v_e(v_ad, e_ad),
value, dvalue_dv, dvalue_de);
308 _fp->s_from_v_e(
v, e,
value, dvalue_dv, dvalue_de);
309 check_ad_derivatives(
fp.s_from_v_e(v_ad, e_ad),
value, dvalue_dv, dvalue_de);
TEST_F(SodiumSaturationFluidPropertiesTest, fluidName)
Test that the fluid name is correctly returned.
static const std::string density
DualNumber< Real, DNDerivativeType, false > ADReal
Real value(unsigned n, unsigned alpha, unsigned beta, Real x)
Common class for single phase fluid properties.
KokkosSemiDynamicSparseNumberArray< Real, libMesh::dof_id_type, NWrapper< MOOSE_AD_MAX_DOFS_PER_ELEM > > DNDerivativeType
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
void derivInsert(SemiDynamicSparseNumberArray< Real, libMesh::dof_id_type, NWrapper< N >> &derivs, libMesh::dof_id_type index, Real value)