43 return 1.00423e3 - 0.21390 * temperature - 1.1046e-5 * temperature * temperature;
48 Real pressure, Real temperature, Real &
rho, Real & drho_dp, Real & drho_dT)
const
52 drho_dT = -0.21390 - 1.1046e-5 * 2 * temperature;
57 const ADReal & temperature,
62 rho = SinglePhaseFluidProperties::rho_from_p_T(pressure, temperature);
64 drho_dT = -0.21390 - 1.1046e-5 * 2 * temperature;
70 auto entropy_from_p_T = [&](Real
p, Real
T, Real & s, Real & ds_dp, Real & ds_dT)
77 name() +
"::rho_from_p_s",
86 Real pressure, Real entropy, Real &
rho, Real & drho_dp, Real & drho_ds)
const
88 auto entropy_from_p_T = [&](Real
p, Real
T, Real & s, Real & ds_dp, Real & ds_dT)
95 name() +
"::rho_from_p_s",
100 Real s, ds_dp, ds_dT;
101 s_from_p_T(pressure, temperature, s, ds_dp, ds_dT);
102 const Real dT_dp = -ds_dp / ds_dT;
103 const Real dT_ds = 1 / ds_dT;
105 Real drho_dp_T, drho_dT;
107 drho_dp = drho_dp_T + drho_dT * dT_dp;
108 drho_ds = drho_dT * dT_ds;
119 Real temperature, Real &
v, Real & dv_dT, Real & d2v_dT2, Real & d3v_dT3)
const
122 const Real drho_dT = -0.21390 - 2 * 1.1046e-5 * temperature;
123 const Real d2rho_dT2 = -2 * 1.1046e-5;
126 dv_dT = -drho_dT / (
rho *
rho);
127 d2v_dT2 = 2 * drho_dT * drho_dT / (
rho *
rho *
rho) - d2rho_dT2 / (
rho *
rho);
128 d3v_dT3 = 6 * drho_dT * d2rho_dT2 / (
rho *
rho *
rho) -
129 6 * drho_dT * drho_dT * drho_dT / (
rho *
rho *
rho *
rho);
135 const Real t2 = temperature * temperature;
136 return 3.7782E-10 * t2 * t2 - 1.7191E-6 * t2 * temperature + 3.0921E-3 * t2 -
137 2.4560 * temperature + 1972.0;
143 const Real t2 = temperature * temperature;
144 return 4 * 3.7782E-10 * t2 * temperature - 3 * 1.7191E-6 * t2 + 2 * 3.0921e-3 * temperature -
150 Real pressure, Real temperature, Real &
v, Real & dv_dp, Real & dv_dT)
const
155 Real drho_dT = -0.21390 - 1.1046e-5 * 2 * temperature;
156 dv_dT = -
v *
v * drho_dT;
163 Real dv_dT, d2v_dT2, d3v_dT3;
172 Real
v, Real e, Real & pressure, Real & dp_dv, Real & dp_de)
const
174 Real temperature, dT_dv, dT_de;
177 Real dv_dT, d2v_dT2, d3v_dT3;
183 const Real denominator = temperature * dv_dT;
185 const Real ddenominator_dv = (dv_dT + temperature * d2v_dT2) * dT_dv;
188 dp_dv = (dnumerator_dv * denominator - numerator * ddenominator_dv) / (denominator * denominator);
189 dp_de = -1.0 / denominator;
196 mooseAssert(0.2139 * 0.2139 + 4 * 1.1046e5 * (1.00423e3 - 1 /
v) > 0,
197 "Specific volume out of bounds");
198 return (0.2139 - std::sqrt(0.2139 * 0.2139 + 4 * 1.1046e-5 * (1.00423e3 - 1 /
v))) /
204 Real
v, Real e, Real & temperature, Real & dT_dv, Real & dT_de)
const
207 const Real drho_dT = -0.21390 - 1.1046e-5 * 2 * temperature;
208 dT_dv = -1 / (
v *
v * drho_dT);
218 return 2660.7 - 0.37667 * temperature - 9.0356e-5 * temperature * temperature;
223 Real
v, Real e, Real &
c, Real & dc_dv, Real & dc_de)
const
225 Real temperature, dT_dv, dT_de;
229 const Real dc_dT = -0.37667 - 2 * 9.0356e-5 * temperature;
230 dc_dv = dc_dT * dT_dv;
231 dc_de = dc_dT * dT_de;
237 Real t2 = temperature * temperature;
238 const Real h0 = 3.7782E-10 * t2 * t2 * temperature / 5 - 1.7191E-6 * t2 * t2 / 4.0 +
239 3.0921E-3 * t2 * temperature / 3.0 - 2.4560 * t2 / 2.0 + 1972.0 * temperature -
242 Real
v, dv_dT, d2v_dT2, d3v_dT3;
249 Real pressure, Real temperature, Real & h, Real & dh_dp, Real & dh_dT)
const
253 Real
v, dv_dT, d2v_dT2, d3v_dT3;
255 dh_dp =
v - temperature * dv_dT;
262 auto enthalpy_from_p_T = [&](Real
p, Real
T, Real &
h, Real & dh_dp, Real & dh_dT)
270 name() +
"::T_from_p_h",
278 Real pressure, Real enthalpy, Real & temperature, Real & dT_dp, Real & dT_dh)
const
282 Real
h, dh_dp, dh_dT;
283 h_from_p_T(pressure, temperature,
h, dh_dp, dh_dT);
284 dT_dp = -dh_dp / dh_dT;
292 constexpr Real reference_temperature = 370.98;
293 const auto temperature_part = [](Real
T)
295 const Real T2 =
T *
T;
296 return 3.7782e-10 * T2 * T2 / 4.0 - 1.7191e-6 * T2 *
T / 3.0 + 3.0921e-3 * T2 / 2.0 -
297 2.4560 *
T + 1972.0 * std::log(
T);
300 Real
v, dv_dT, d2v_dT2, d3v_dT3;
302 return temperature_part(temperature) - temperature_part(reference_temperature) -
308 Real pressure, Real temperature, Real & s, Real & ds_dp, Real & ds_dT)
const
312 Real
v, dv_dT, d2v_dT2, d3v_dT3;
315 ds_dT =
cp_from_p_T(pressure, temperature) / temperature;
326 Real
v, Real e, Real & s, Real & ds_dv, Real & ds_de)
const
328 Real pressure, dp_dv, dp_de;
331 Real temperature, dT_dv, dT_de;
335 s_from_p_T(pressure, temperature, s, ds_dp, ds_dT);
336 ds_dv = ds_dp * dp_dv + ds_dT * dT_dv;
337 ds_de = ds_dp * dp_de + ds_dT * dT_de;
346 return h - pressure *
v;
351 Real pressure, Real temperature, Real & e, Real & de_dp, Real & de_dT)
const
353 Real
v, dv_dp, dv_dT;
354 v_from_p_T(pressure, temperature,
v, dv_dp, dv_dT);
355 Real
h, dh_dp, dh_dT;
356 h_from_p_T(pressure, temperature,
h, dh_dp, dh_dT);
357 e =
h - pressure *
v;
360 de_dp = dh_dp -
v - pressure * dv_dp;
362 de_dT = dh_dT - pressure * dv_dT;
373 Real pressure, Real
rho, Real & e, Real & de_dp, Real & de_drho)
const
375 const Real
v = 1 /
rho;
376 Real temperature, dT_dv, dT_de;
380 e_from_p_T(pressure, temperature, e, de_dp_T, de_dT);
382 de_drho = de_dT * dT_dv * -
v *
v;
388 Real
v, dv_dT, d2v_dT2, d3v_dT3;
395 Real pressure, Real temperature, Real & cp, Real & dcp_dp, Real & dcp_dT)
const
398 Real
v, dv_dT, d2v_dT2, d3v_dT3;
400 dcp_dp = -temperature * d2v_dT2;
413 Real
v, Real e, Real & cp, Real & dcp_dv, Real & dcp_de)
const
415 Real pressure, dp_dv, dp_de;
417 Real temperature, dT_dv, dT_de;
421 cp_from_p_T(pressure, temperature, cp, dcp_dp, dcp_dT);
422 dcp_dv = dcp_dp * dp_dv + dcp_dT * dT_dv;
423 dcp_de = dcp_dp * dp_de + dcp_dT * dT_de;
429 Real t2 = temperature * temperature;
430 return 1.0369E-8 * temperature * t2 + 3.7164E-4 * t2 - 1.0494 * temperature + 1582.6;
435 Real pressure, Real temperature, Real & cv, Real & dcv_dp, Real & dcv_dT)
const
439 dcv_dT = 3 * 1.0369e-8 * temperature * temperature + 2 * 3.7164e-4 * temperature - 1.0494;
450 Real
v, Real e, Real & cv, Real & dcv_dv, Real & dcv_de)
const
452 Real pressure, dp_dv, dp_de;
454 Real temperature, dT_dv, dT_de;
458 cv_from_p_T(pressure, temperature, cv, dcv_dp, dcv_dT);
459 dcv_dv = dcv_dp * dp_dv + dcv_dT * dT_dv;
460 dcv_de = dcv_dp * dp_de + dcv_dT * dT_de;
466 return 3.6522E-5 + 0.16626 / temperature - 4.56877e1 / (temperature * temperature) +
467 2.8733E4 / (temperature * temperature * temperature);
472 Real pressure, Real temperature, Real &
mu, Real & dmu_dp, Real & dmu_dT)
const
477 Real t2 = temperature * temperature;
478 dmu_dT = 0.16626 * -1 / t2 - 4.56877E1 * -2 / (temperature * t2) + 2.8733E4 * -3 / (t2 * t2);
489 Real
v, Real e, Real &
mu, Real & dmu_dv, Real & dmu_de)
const
491 Real pressure, dp_dv, dp_de;
493 Real temperature, dT_dv, dT_de;
498 dmu_dv = dmu_dp * dp_dv + dmu_dT * dT_dv;
499 dmu_de = dmu_dp * dp_de + dmu_dT * dT_de;
505 return 1.1045e2 - 6.5112e-2 * temperature + 1.5430e-5 * temperature * temperature -
506 2.4617e-9 * temperature * temperature * temperature;
511 Real pressure, Real temperature, Real & k, Real & dk_dp, Real & dk_dT)
const
515 dk_dT = -6.5112e-2 + 2 * 1.5430e-5 * temperature - 3 * 2.4617e-9 * temperature * temperature;
526 Real
v, Real e, Real & k, Real & dk_dv, Real & dk_de)
const
528 Real pressure, dp_dv, dp_de;
530 Real temperature, dT_dv, dT_de;
534 k_from_p_T(pressure, temperature, k, dk_dp, dk_dT);
535 dk_dv = dk_dp * dp_dv + dk_dT * dT_dv;
536 dk_de = dk_dp * dp_de + dk_dT * dT_de;
DualNumber< Real, DNDerivativeType, true > ADReal
registerMooseObject("FluidPropertiesApp", SodiumSaturationFluidProperties)
const std::string & name() const
Common class for single phase fluid properties.
const Real _T_initial_guess
Initial guess for temperature (or temperature used to compute the initial guess)
const bool _verbose_newton
Whether to output information about newton solves to console.
static InputParameters validParams()
e e e e s T T T T T rho T
const Real _tolerance
Newton's method may be used to convert between variable sets.
const unsigned int _max_newton_its
Maximum number of iterations for the variable conversion newton solves.
e e e e s T T T T T rho v v T e h
Fluid properties for liquid sodium at saturation conditions {fink}.
virtual Real v_from_p_T(Real p, Real T) const override
SodiumSaturationFluidProperties(const InputParameters ¶meters)
virtual Real mu_from_p_T(Real p, Real T) const override
virtual Real e_from_p_rho(Real p, Real rho) const override
virtual Real k_from_v_e(Real v, Real e) const override
virtual Real k_from_p_T(Real p, Real T) const override
void specific_volume_derivatives(Real temperature, Real &v, Real &dv_dT, Real &d2v_dT2, Real &d3v_dT3) const
virtual Real T_from_v_e(Real v, Real e) const override
virtual Real T_from_p_h(Real p, Real h) const override
virtual Real cv_from_p_T(Real p, Real T) const override
virtual Real molarMass() const override
Molar mass [kg/mol].
virtual Real rho_from_p_T(Real p, Real T) const override
virtual Real mu_from_v_e(Real v, Real e) const override
virtual Real p_from_v_e(Real v, Real e) const override
virtual Real cp_from_v_e(Real v, Real e) const override
virtual Real cp_from_p_T(Real p, Real T) const override
virtual Real s_from_p_T(Real p, Real T) const override
Real dcp0_dT_from_T(Real temperature) const
virtual Real h_from_p_T(Real p, Real T) const override
virtual Real c_from_v_e(Real v, Real e) const override
virtual Real cv_from_v_e(Real v, Real e) const override
virtual Real e_from_p_T(Real p, Real T) const override
static constexpr Real _reference_pressure
virtual std::string fluidName() const override
Fluid name.
Real cp0_from_T(Real temperature) const
static InputParameters validParams()
virtual Real rho_from_p_s(Real p, Real s) const override
virtual Real s_from_v_e(Real v, Real e) const override
std::pair< T, T > NewtonSolve(const T &x, const T &y, const Real z_initial_guess, const Real tolerance, const Functor &y_from_x_z, const std::string &caller_name, const unsigned int max_its=100, const bool verbose=false)
NewtonSolve does a 1D Newton Solve to solve the equation y = f(x, z) for variable z.