18 params.
addParam<UserObjectName>(
"water_fp",
19 "The name of the FluidProperties UserObject for water");
33 const std::string water_name =
name() +
":water";
35 const std::string class_name =
"Water97FluidProperties";
45 _water_fp = &getUserObject<SinglePhaseFluidProperties>(
"water_fp");
49 paramError(
"water_fp",
"A water FluidProperties UserObject must be supplied");
58 const std::string nacl_name =
name() +
":nacl";
60 const std::string class_name =
"NaClFluidProperties";
86 mooseError(
"BrineFluidProperties::getComponent has been provided an incorrect component");
99 return 1.0 / (xnacl /
_Mnacl + (1.0 - xnacl) /
_Mh2o);
105 return 1.0 / (xnacl /
_Mnacl + (1.0 - xnacl) /
_Mh2o);
125 using std::exp, std::sqrt;
134 const FPADReal n11 = -54.2958 - 45.7623 * exp(-9.44785e-4 * pbar);
135 const FPADReal n21 = -2.6142 - 2.39092e-4 * pbar;
136 const FPADReal n22 = 0.0356828 + 4.37235e-6 * pbar + 2.0566e-9 * pbar2;
138 330.47 + 0.942876 * sqrt(pbar) + 0.0817193 * pbar - 2.47556e-8 * pbar2 + 3.45052e-10 * pbar3;
139 const FPADReal n2x1 = -0.0370751 + 0.00237723 * sqrt(pbar) + 5.42049e-5 * pbar +
140 5.84709e-9 * pbar2 - 5.99373e-13 * pbar3;
142 const FPADReal n20 = 1.0 - n21 * sqrt(n22);
143 const FPADReal n23 = n2x1 - n20 - n21 * sqrt(1.0 + n22);
147 const FPADReal n1 = n1x1 + n11 * (1.0 - Xnacl) + n12 * (1.0 - Xnacl) * (1.0 - Xnacl);
148 const FPADReal n2 = n20 + n21 * sqrt(Xnacl + n22) + n23 * Xnacl;
156 Real
rho, drho_dp, drho_dT;
157 _water_fp->rho_from_p_T(pressure.value(), Tv.value() +
_T_c2k,
rho, drho_dp, drho_dT);
160 water_density.derivatives() = pressure.derivatives() * drho_dp + Tv.derivatives() * drho_dT;
163 water_density =
_water_fp->rho_from_p_T(pressure.value(), Tv.value() +
_T_c2k);
181 return ad_rho.value();
191 Real & drho_dx)
const
204 rho = ad_rho.value();
205 drho_dp = ad_rho.derivatives()[0];
206 drho_dT = ad_rho.derivatives()[1];
207 drho_dx = ad_rho.derivatives()[2];
215 const Real mol2 = mol * mol;
216 const Real mol3 = mol2 * mol;
219 const Real Tc = temperature -
_T_c2k;
221 const Real
a = 1.0 + 0.0816 * mol + 0.0122 * mol2 + 0.128e-3 * mol3 +
222 0.629e-3 * Tc * (1.0 - std::exp(-0.7 * mol));
224 const Real water_viscosity =
_water_fp->mu_from_p_T(pressure, temperature);
226 return a * water_viscosity;
239 Real muw, dmuw_dp, dmuw_dT;
240 _water_fp->mu_from_p_T(pressure, temperature, muw, dmuw_dp, dmuw_dT);
244 Real dmol_dx = 1.0 / ((1.0 - xnacl) * (1.0 - xnacl) *
_Mnacl);
245 Real mol2 = mol * mol;
246 Real mol3 = mol2 * mol;
249 Real Tc = temperature -
_T_c2k;
251 Real
a = 1.0 + 0.0816 * mol + 0.0122 * mol2 + 0.128e-3 * mol3 +
252 0.629e-3 * Tc * (1.0 - std::exp(-0.7 * mol));
254 (0.0816 + 0.0244 * mol + 3.84e-4 * mol2 + 4.403e-4 * Tc * std::exp(-0.7 * mol)) * dmol_dx;
255 Real da_dT = 0.629e-3 * (1.0 - std::exp(-0.7 * mol));
258 dmu_dp =
a * dmuw_dp;
259 dmu_dx = da_dx * muw;
260 dmu_dT = da_dT * muw +
a * dmuw_dT;
270 FPADReal q1, q2, q10, q11, q12, q20, q21, q22, q23, q1x1, q2x1, Th;
273 const FPADReal pbar = pressure * 1.0e-5;
279 q11 = -32.1724 + 0.0621255 * pbar;
280 q21 = -1.69513 - 4.52781e-4 * pbar - 6.04279e-8 * pbar2;
281 q22 = 0.0612567 + 1.88082e-5 * pbar;
283 q1x1 = 47.9048 - 9.36994e-3 * pbar + 6.51059e-6 * pbar2;
284 q2x1 = 0.241022 + 3.45087e-5 * pbar - 4.28356e-9 * pbar2;
289 q20 = 1.0 - q21 * sqrt(q22);
290 q23 = q2x1 - q20 - q21 * sqrt(1.0 + q22);
292 q1 = q10 + q11 * (1.0 - Xnacl) + q12 * (1.0 - Xnacl) * (1.0 - Xnacl);
293 q2 = q20 + q21 * sqrt(Xnacl + q22) + q23 * Xnacl;
296 Th = q1 + q2 * (temperature -
_T_c2k);
303 Real h, dh_dp, dh_dT;
304 _water_fp->h_from_p_T(pressure.value(), Th.value() +
_T_c2k, h, dh_dp, dh_dT);
307 enthalpy.derivatives() = pressure.derivatives() * dh_dp + Th.derivatives() * dh_dT;
310 enthalpy =
_water_fp->h_from_p_T(pressure.value(), Th.value() +
_T_c2k);
348 dh_dp = ad_h.derivatives()[0];
349 dh_dT = ad_h.derivatives()[1];
350 dh_dx = ad_h.derivatives()[2];
356 Real q1, q2, q10, q11, q12, q20, q21, q22, q23, q1x1, q2x1, Th;
359 Real pbar = pressure * 1.0e-5;
360 Real pbar2 = pbar * pbar;
365 q11 = -32.1724 + 0.0621255 * pbar;
366 q21 = -1.69513 - 4.52781e-4 * pbar - 6.04279e-8 * pbar2;
367 q22 = 0.0612567 + 1.88082e-5 * pbar;
369 q1x1 = 47.9048 - 9.36994e-3 * pbar + 6.51059e-6 * pbar2;
370 q2x1 = 0.241022 + 3.45087e-5 * pbar - 4.28356e-9 * pbar2;
375 q20 = 1.0 - q21 * std::sqrt(q22);
376 q23 = q2x1 - q20 - q21 * std::sqrt(1.0 + q22);
378 q1 = q10 + q11 * (1.0 - Xnacl) + q12 * (1.0 - Xnacl) * (1.0 - Xnacl);
379 q2 = q20 + q21 * std::sqrt(Xnacl + q22) + q23 * Xnacl;
382 Th = q1 + q2 * (temperature -
_T_c2k);
398 return enthalpy - pressure / density;
404 Real enthalpy =
h_from_p_T_X(pressure, temperature, xnacl);
407 return enthalpy - pressure / density;
431 de_dp = ad_e.derivatives()[0];
432 de_dT = ad_e.derivatives()[1];
433 de_dx = ad_e.derivatives()[2];
442 Real Tc = temperature -
_T_c2k;
445 Real lambdaw =
_water_fp->k_from_p_T(pressure, temperature);
446 Real lambda = 1.0 - (2.3434e-3 - 7.924e-6 * Tc + 3.924e-8 * Tc * Tc) * S +
447 (1.06e-5 - 2.0e-8 * Tc - 1.2e-10 * Tc * Tc) * S * S;
449 return lambda * lambdaw;
457 Real mol2 = mol * mol;
458 Real mol3 = mol2 * mol;
460 Real
a = 1.0 + 5.93582e-6 * mol - 5.19386e-5 * mol2 + 1.23156e-5 * mol3;
461 Real
b = 1.1542e-6 * mol + 1.41254e-7 * mol2 - 1.92476e-8 * mol3 - 1.70717e-9 * mol * mol3 +
462 1.0539e-10 * mol2 * mol3;
465 Real th20 = std::exp(std::log(temperature) / (
a +
b * temperature));
476 Real Tc = temperature -
_T_c2k;
478 return (26.18 + 7.2e-3 * Tc + 1.06e-4 * Tc * Tc) / 100.0;
484 return xnacl / ((1.0 - xnacl) *
_Mnacl);
493 return xnacl * Mbrine /
_Mnacl;
502 return xnacl * Mbrine /
_Mnacl;
513 const std::vector<Real> & coeffs,
522 const std::vector<Real> & coeffs)
const
528 henry.derivatives() = temperature.derivatives() * dKh_dT;
DualNumber< Real, DNDerivativeType, true > ADReal
registerMooseObject("FluidPropertiesApp", BrineFluidProperties)
const std::vector< double > x
DualNumber< Real, DNDerivativeSize< 5 > > FPADReal
Brine (NaCl in H2O) fluid properties as a function of pressure (Pa), temperature (K) and NaCl mass fr...
virtual Real mu_from_p_T_X(Real pressure, Real temperature, Real xnacl) const override
virtual Real rho_from_p_T_X(Real pressure, Real temperature, Real xnacl) const override
Real massFractionToMolalConc(Real xnacl) const
Conversion from mass fraction to molal concentration (molality)
FPADReal e_from_p_T_X(const FPADReal &pressure, const FPADReal &temperature, const FPADReal &xnacl) const
const SinglePhaseFluidProperties * _nacl_fp
NaClFluidProperties UserObject.
Real molarMassNaCl() const
NaCl molar mass.
virtual ~BrineFluidProperties()
FPADReal h_from_p_T_X(const FPADReal &pressure, const FPADReal &temperature, const FPADReal &xnacl) const
virtual Real k_from_p_T_X(Real pressure, Real temperature, Real xnacl) const override
Real massFractionToMoleFraction(Real xnacl) const
Conversion from mass fraction to mole fraction.
Real _Mh2o
Molar mass of water (H2O) (kg/mol)
Real haliteSolubility(Real temperature) const
Solubility of halite (solid NaCl) in water Originally from Potter et al., A new method for determinin...
static const unsigned int NACL
BrineFluidProperties(const InputParameters ¶meters)
Real vaporPressure(Real temperature, Real xnacl) const
Brine vapour pressure From Haas, Physical properties of the coexisting phases and thermochemical prop...
const SinglePhaseFluidProperties * _water_fp
Water97FluidProperties UserObject.
Real molarMassH2O() const
H2O molar mass.
static InputParameters validParams()
static const unsigned int WATER
Fluid component numbers for water and NaCl.
virtual Real cp_from_p_T_X(Real pressure, Real temperature, Real xnacl) const override
virtual const SinglePhaseFluidProperties & getComponent(unsigned int component) const override
Get UserObject for specified component.
Real henryConstant(Real temperature, const std::vector< Real > &coeffs) const
IAPWS formulation of Henry's law constant for dissolution in water (implemented in water FluidPropert...
bool _water_fp_derivs
Flag to indicate whether to calculate derivatives in water_fp.
Real molarMass(Real xnacl) const
Average molar mass of brine.
const Water97FluidProperties * _water97_fp
Water97FluidProperties UserObject (for Henry's law)
Real _Mnacl
Molar mass of NaCl (kg/mol)
virtual std::string fluidName() const override
Fluid name.
T & getUserObject(const std::string &name, unsigned int tid=0) const
virtual std::vector< std::shared_ptr< UserObject > > addUserObject(const std::string &user_object_name, const std::string &name, InputParameters ¶meters)
InputParameters getValidParams(const std::string &name) const
const Real _T_c2k
Conversion of temperature from Celsius to Kelvin.
const InputParameters & parameters() const
const std::string & name() const
void paramError(const std::string ¶m, Args... args) const
void mooseError(Args &&... args) const
Common class for multiple component fluid properties using a pressure and temperature formulation.
static InputParameters validParams()
Common class for single phase fluid properties.
virtual Real vaporPressure(Real T) const
Vapor pressure.
virtual Real molarMass() const
Molar mass [kg/mol].
e e e e s T T T T T rho v v T e p T T virtual T std::string fluidName() const
Fluid name.
FEProblemBase & _fe_problem
Water (H2O) fluid properties as a function of pressure (Pa) and temperature (K) from IAPWS-IF97: Revi...
Real henryConstant(Real temperature, const std::vector< Real > &coeffs) const
IAPWS formulation of Henry's law constant for dissolution in water From Guidelines on the Henry's con...
void derivInsert(SemiDynamicSparseNumberArray< Real, libMesh::dof_id_type, NWrapper< N > > &derivs, libMesh::dof_id_type index, Real value)