22 _fp->p_from_v_e(
v, e, p, dpdv, dpde);
35 auto p_ad = _fp->p_from_v_e(v_ad, e_ad);
37 EXPECT_DOUBLE_EQ(p, p_ad.value());
38 for (
size_t i = 0; i < 3; i++)
39 EXPECT_DOUBLE_EQ(dpdv * dvdx[i] + dpde * dedx[i], p_ad.derivatives()[i]);
57 const ADReal p_ad(p, dpdU);
58 const ADReal T_ad(T, dTdU);
60 const auto & fp_2phase = buildTwoPhaseFluidProperties();
66 const Real h_lat = fp_2phase.h_lat(p, T);
69 Real dh_liquid_dp = 0;
70 Real dh_liquid_dT = 0;
71 fp_liquid.h_from_p_T(p, T, h_liquid, dh_liquid_dp, dh_liquid_dT);
76 fp_vapor.h_from_p_T(p, T, h_vapor, dh_vapor_dp, dh_vapor_dT);
78 const Real dh_lat_dp = dh_vapor_dp - dh_liquid_dp;
79 const Real dh_lat_dT = dh_vapor_dT - dh_liquid_dT;
81 const ADReal h_lat_ad = fp_2phase.h_lat(p_ad, T_ad);
83 EXPECT_DOUBLE_EQ(h_lat, h_lat_ad.value());
84 for (
size_t i = 0; i < 3; i++)
85 EXPECT_DOUBLE_EQ(dh_lat_dp * dpdU[i] + dh_lat_dT * dTdU[i], h_lat_ad.derivatives()[i]);
89 const Real sigma = fp_2phase.sigma_from_T(T);
90 const Real dsigma_dT = fp_2phase.dsigma_dT_from_T(T);
91 const ADReal sigma_ad = fp_2phase.sigma_from_T(T_ad);
93 EXPECT_DOUBLE_EQ(
sigma, sigma_ad.value());
94 for (
size_t i = 0; i < 3; i++)
95 EXPECT_DOUBLE_EQ(dsigma_dT * dTdU[i], sigma_ad.derivatives()[i]);
99 const Real T_sat = fp_2phase.T_sat(p);
100 const Real dT_sat_dp = fp_2phase.dT_sat_dp(p);
101 const ADReal T_sat_ad = fp_2phase.T_sat(p_ad);
103 EXPECT_DOUBLE_EQ(T_sat, T_sat_ad.value());
104 for (
size_t i = 0; i < 3; i++)
105 EXPECT_DOUBLE_EQ(dT_sat_dp * dpdU[i], T_sat_ad.derivatives()[i]);
109 const Real p_sat = fp_2phase.p_sat(T);
110 const Real dp_sat_dT = 1.0 / fp_2phase.dT_sat_dp(p_sat);
111 const ADReal p_sat_ad = fp_2phase.p_sat(T_ad);
113 EXPECT_DOUBLE_EQ(p_sat, p_sat_ad.value());
114 for (
size_t i = 0; i < 3; i++)
115 EXPECT_DOUBLE_EQ(dp_sat_dT * dTdU[i], p_sat_ad.derivatives()[i]);
124 EXPECT_THROW(_fp->g_from_v_e(
v, e), std::runtime_error);
127 auto &
fp = buildObj(
"fp2",
true);
128 EXPECT_THROW(
fp.g_from_v_e(
v, e), std::runtime_error);
135 EXPECT_NO_THROW(
fp.g_from_v_e(
v, e));
SemiDynamicSparseNumberArray< Real, libMesh::dof_id_type, NWrapper< MOOSE_AD_MAX_DOFS_PER_ELEM > > DNDerivativeType
bool _warnings_are_errors
TEST_F(ADFluidPropsTest, ad_basic)
DualNumber< Real, DNDerivativeType, true > ADReal
Common class for single phase fluid properties.
const T & getUserObject(const std::string ¶m_name, bool is_dependency=true) const
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const std::string v
void derivInsert(SemiDynamicSparseNumberArray< Real, libMesh::dof_id_type, NWrapper< N >> &derivs, libMesh::dof_id_type index, Real value)