21 "Weight fraction of potassium in NaK. Only eutectic is implemented (X_K = 0.778)");
29 const Real Xk = getParam<Real>(
"weight_fraction_K");
32 "Only 0.778 weight percent potassium (eutectic) is implemented");
35 const Real AwK = 39.102;
36 const Real AwNa = 22.9898;
37 _Nk = Xk / AwK / (Xk / AwK + (1 - Xk) / AwNa);
58 Real h2 = enthalpy * enthalpy;
60 std::pow(183.357574154983 * std::sqrt(8405 * h2 - 8208700353 * enthalpy + 9265308922016000) +
61 16810 * enthalpy - 8208700353,
63 return _T_c2k + 0.174216027874564 * (3.65930571002297 * B1 - 2.28699205892461e7 / B1 + 3087);
70 auto lambda = [&](Real
p, Real current_T, Real & new_rho, Real & drho_dp, Real & drho_dT)
77 name() +
"::T_from_p_rho",
84 ") and density (rho = ",
86 ") to temperature failed to converge.");
93 const Real Tc = temperature -
_T_c2k;
95 if (Tc < 210 || Tc > 1110)
97 "NaK density evaluated outside of Na density temperature range [210, 1110] C");
98 if (Tc < 63.2 || Tc > 1250)
100 "NaK density evaluated outside of K density temperature range [63, 1250] C");
103 const Real v_k = 1. / (0.8415 - 2.172e-4 * Tc - 2.7e-8 * Tc * Tc + 4.77e-12 * Tc * Tc * Tc);
105 const Real v_Na = 1. / (0.9453 - 2.2473e-4 * Tc);
107 return 1000 / (
_Nk * v_k + (1 -
_Nk) * v_Na);
112 Real pressure, Real temperature, Real &
rho, Real & drho_dp, Real & drho_dT)
const
117 const Real Tc = temperature -
_T_c2k;
119 const Real v_k = 1. / (0.8415 - 2.172e-4 * Tc - 2.7e-8 * Tc * Tc + 4.77e-12 * Tc * Tc * Tc);
121 const Real v_Na = 1. / (0.9453 - 2.2473e-4 * Tc);
124 -(
_Nk * -(-2.172e-4 - 2 * 2.7e-8 * Tc + 3 * 4.77e-12 * Tc * Tc) *
MathUtils::pow(v_k, 2) +
144 Real pressure, Real temperature, Real & e, Real & de_dp, Real & de_dT)
const
146 Real
h, dh_dp, dh_dT;
147 h_from_p_T(pressure, temperature,
h, dh_dp, dh_dT);
148 Real
rho, drho_dp, drho_dT;
151 e =
h - pressure /
rho;
152 de_dp = dh_dp + pressure * drho_dp /
rho /
rho - 1.0 /
rho;
153 de_dT = dh_dT + pressure * drho_dT /
rho /
rho;
159 const Real Tc = temperature -
_T_c2k;
162 return (0.232 - 8.82e-5 * Tc + 8.2e-8 * Tc * Tc) * 4200;
167 Real , Real temperature, Real & cp, Real & dcp_dp, Real & dcp_dT)
const
169 const Real Tc = temperature -
_T_c2k;
174 dcp_dT = (-8.82e-5 + 2 * 8.2e-8 * Tc) * 4200;
180 Real e, de_dp, de_dT;
181 e_from_p_T(pressure, temperature, e, de_dp, de_dT);
192 if (temperature <
_T_c2k + 400)
193 return 0.001 * 0.116 * std::pow(
rho, 1 / 3.) * exp(688 *
rho / temperature);
195 return 0.001 * 0.082 * std::pow(
rho, 1 / 3.) * exp(979 *
rho / temperature);
200 Real , Real temperature, Real &
mu, Real & dmu_dp, Real & dmu_dT)
const
205 Real
rho, drho_dp, drho_dT;
209 if (temperature <
_T_c2k + 400)
211 mu = 0.001 * 0.116 * std::pow(
rho, 1 / 3.) * exp(688 *
rho / temperature);
214 0.001 * 0.116 * exp(688 *
rho / temperature) *
215 (1 / 3. * drho_dT * std::pow(
rho, -2 / 3.) +
216 std::pow(
rho, 1 / 3.) * 688 * (drho_dT * temperature -
rho) / temperature / temperature);
220 mu = 0.001 * 0.082 * std::pow(
rho, 1 / 3.) * exp(979 *
rho / temperature);
223 0.001 * 0.082 * exp(979 *
rho / temperature) *
224 (1 / 3. * drho_dT * std::pow(
rho, -2 / 3.) +
225 std::pow(
rho, 1 / 3.) * 979 * (drho_dT * temperature -
rho) / temperature / temperature);
232 const Real Tc = temperature -
_T_c2k;
237 if (Tc < 150 || Tc > 680)
239 "NaK thermal diffusivity evaluated outside of temperature range [150, 680] C");
240 return 100 * (0.214 + 2.07e-4 * Tc - 2.2e-7 * Tc * Tc);
245 Real , Real temperature, Real & k, Real & dk_dp, Real & dk_dT)
const
247 const Real Tc = temperature -
_T_c2k;
250 dk_dT = 100 * (2.07e-4 - 2 * 2.2e-7 * Tc);
257 const Real Tc = temperature -
_T_c2k;
258 return (0.232 * Tc - 8.82e-5 / 2 * Tc * Tc + 8.2e-8 / 3 * Tc * Tc * Tc) * 4200;
263 Real pressure, Real temperature, Real & h, Real & dh_dp, Real & dh_dT)
const
265 const Real Tc = temperature -
_T_c2k;
266 h = (0.232 * Tc - 8.82e-5 / 2 * Tc * Tc + 8.2e-8 / 3 * Tc * Tc * Tc) * 4200;
registerMooseObject("FluidPropertiesApp", NaKFluidProperties)
const Real _T_c2k
Conversion of temperature from Celsius to Kelvin.
const std::string & name() const
void paramError(const std::string ¶m, Args... args) const
void mooseError(Args &&... args) const
NaK fluid properties as a function of pressure (Pa) and temperature (K).
virtual Real e_from_p_T(Real pressure, Real temperature) const override
static InputParameters validParams()
virtual Real cp_from_p_T(Real pressure, Real temperature) const override
virtual std::string fluidName() const override
Fluid name.
const Real _MNaK
NaK molar mass (kg/mol)
virtual Real molarMass() const override
Molar mass [kg/mol].
NaKFluidProperties(const InputParameters ¶meters)
virtual ~NaKFluidProperties()
virtual Real T_from_p_h(Real pressure, Real enthalpy) const override
Real T_from_p_rho(Real pressure, Real density) const
virtual Real cv_from_p_T(Real pressure, Real temperature) const override
virtual Real k_from_p_T(Real pressure, Real temperature) const override
virtual Real h_from_p_T(Real pressure, Real temperature) const override
virtual Real mu_from_p_T(Real p, Real T) const override
virtual Real rho_from_p_T(Real pressure, Real temperature) const override
virtual Real e_from_p_rho(Real pressure, Real density) const override
Real _Nk
K molar fraction.
Common class for single phase fluid properties.
const Real _T_initial_guess
Initial guess for temperature (or temperature used to compute the initial guess)
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
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.