60 const auto & fp_2phase = buildTwoPhaseFluidProperties();
61 const auto & fp_liquid =
63 const auto & fp_vapor =
68 const Real h_lat = fp_2phase.h_lat(
p,
T);
71 Real dh_liquid_dp = 0;
72 Real dh_liquid_dT = 0;
73 fp_liquid.h_from_p_T(
p,
T, h_liquid, dh_liquid_dp, dh_liquid_dT);
78 fp_vapor.h_from_p_T(
p,
T, h_vapor, dh_vapor_dp, dh_vapor_dT);
80 const Real dh_lat_dp = dh_vapor_dp - dh_liquid_dp;
81 const Real dh_lat_dT = dh_vapor_dT - dh_liquid_dT;
83 const ADReal h_lat_ad = fp_2phase.h_lat(p_ad, T_ad);
85 EXPECT_DOUBLE_EQ(h_lat, h_lat_ad.value());
86 for (
size_t i = 0; i < 3; i++)
87 EXPECT_DOUBLE_EQ(dh_lat_dp * dpdU[i] + dh_lat_dT * dTdU[i], h_lat_ad.derivatives()[i]);
91 const Real sigma = fp_2phase.sigma_from_T(
T);
92 const Real dsigma_dT = fp_2phase.dsigma_dT_from_T(
T);
93 const ADReal sigma_ad = fp_2phase.sigma_from_T(T_ad);
95 EXPECT_DOUBLE_EQ(sigma, sigma_ad.value());
96 for (
size_t i = 0; i < 3; i++)
97 EXPECT_DOUBLE_EQ(dsigma_dT * dTdU[i], sigma_ad.derivatives()[i]);
101 const Real T_sat = fp_2phase.T_sat(
p);
102 const Real dT_sat_dp = fp_2phase.dT_sat_dp(
p);
103 const ADReal T_sat_ad = fp_2phase.T_sat(p_ad);
105 EXPECT_DOUBLE_EQ(T_sat, T_sat_ad.value());
106 for (
size_t i = 0; i < 3; i++)
107 EXPECT_DOUBLE_EQ(dT_sat_dp * dpdU[i], T_sat_ad.derivatives()[i]);
111 const Real p_sat = fp_2phase.p_sat(
T);
112 const Real dp_sat_dT = 1.0 / fp_2phase.dT_sat_dp(p_sat);
113 const ADReal p_sat_ad = fp_2phase.p_sat(T_ad);
115 EXPECT_DOUBLE_EQ(p_sat, p_sat_ad.value());
116 for (
size_t i = 0; i < 3; i++)
117 EXPECT_DOUBLE_EQ(dp_sat_dT * dTdU[i], p_sat_ad.derivatives()[i]);
void derivInsert(SemiDynamicSparseNumberArray< Real, libMesh::dof_id_type, NWrapper< N > > &derivs, libMesh::dof_id_type index, Real value)