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;
153 Real
rho, drho_dp, drho_dT;
154 _water_fp->rho_from_p_T(pressure.value(), Tv.value() +
_T_c2k,
rho, drho_dp, drho_dT);
156 water_density.derivatives() = pressure.derivatives() * drho_dp + Tv.derivatives() * drho_dT;
173 return ad_rho.value();
183 Real & drho_dx)
const
195 rho = ad_rho.value();
196 drho_dp = ad_rho.derivatives()[0];
197 drho_dT = ad_rho.derivatives()[1];
198 drho_dx = ad_rho.derivatives()[2];
206 const Real mol2 = mol * mol;
207 const Real mol3 = mol2 * mol;
210 const Real Tc = temperature -
_T_c2k;
212 const Real
a = 1.0 + 0.0816 * mol + 0.0122 * mol2 + 0.128e-3 * mol3 +
213 0.629e-3 * Tc * (1.0 - std::exp(-0.7 * mol));
215 const Real water_viscosity =
_water_fp->mu_from_p_T(pressure, temperature);
217 return a * water_viscosity;
230 Real muw, dmuw_dp, dmuw_dT;
231 _water_fp->mu_from_p_T(pressure, temperature, muw, dmuw_dp, dmuw_dT);
235 Real dmol_dx = 1.0 / ((1.0 - xnacl) * (1.0 - xnacl) *
_Mnacl);
236 Real mol2 = mol * mol;
237 Real mol3 = mol2 * mol;
240 Real Tc = temperature -
_T_c2k;
242 Real
a = 1.0 + 0.0816 * mol + 0.0122 * mol2 + 0.128e-3 * mol3 +
243 0.629e-3 * Tc * (1.0 - std::exp(-0.7 * mol));
245 (0.0816 + 0.0244 * mol + 3.84e-4 * mol2 + 4.403e-4 * Tc * std::exp(-0.7 * mol)) * dmol_dx;
246 Real da_dT = 0.629e-3 * (1.0 - std::exp(-0.7 * mol));
249 dmu_dp =
a * dmuw_dp;
250 dmu_dx = da_dx * muw;
251 dmu_dT = da_dT * muw +
a * dmuw_dT;
261 FPADReal q1, q2, q10, q11, q12, q20, q21, q22, q23, q1x1, q2x1, Th;
264 const FPADReal pbar = pressure * 1.0e-5;
270 q11 = -32.1724 + 0.0621255 * pbar;
271 q21 = -1.69513 - 4.52781e-4 * pbar - 6.04279e-8 * pbar2;
272 q22 = 0.0612567 + 1.88082e-5 * pbar;
274 q1x1 = 47.9048 - 9.36994e-3 * pbar + 6.51059e-6 * pbar2;
275 q2x1 = 0.241022 + 3.45087e-5 * pbar - 4.28356e-9 * pbar2;
280 q20 = 1.0 - q21 * sqrt(q22);
281 q23 = q2x1 - q20 - q21 * sqrt(1.0 + q22);
283 q1 = q10 + q11 * (1.0 - Xnacl) + q12 * (1.0 - Xnacl) * (1.0 - Xnacl);
284 q2 = q20 + q21 * sqrt(Xnacl + q22) + q23 * Xnacl;
287 Th = q1 + q2 * (temperature -
_T_c2k);
291 Real h, dh_dp, dh_dT;
292 _water_fp->h_from_p_T(pressure.value(), Th.value() +
_T_c2k, h, dh_dp, dh_dT);
294 enthalpy.derivatives() = pressure.derivatives() * dh_dp + Th.derivatives() * dh_dT;
330 dh_dp = ad_h.derivatives()[0];
331 dh_dT = ad_h.derivatives()[1];
332 dh_dx = ad_h.derivatives()[2];
338 Real q1, q2, q10, q11, q12, q20, q21, q22, q23, q1x1, q2x1, Th;
341 Real pbar = pressure * 1.0e-5;
342 Real pbar2 = pbar * pbar;
347 q11 = -32.1724 + 0.0621255 * pbar;
348 q21 = -1.69513 - 4.52781e-4 * pbar - 6.04279e-8 * pbar2;
349 q22 = 0.0612567 + 1.88082e-5 * pbar;
351 q1x1 = 47.9048 - 9.36994e-3 * pbar + 6.51059e-6 * pbar2;
352 q2x1 = 0.241022 + 3.45087e-5 * pbar - 4.28356e-9 * pbar2;
357 q20 = 1.0 - q21 * std::sqrt(q22);
358 q23 = q2x1 - q20 - q21 * std::sqrt(1.0 + q22);
360 q1 = q10 + q11 * (1.0 - Xnacl) + q12 * (1.0 - Xnacl) * (1.0 - Xnacl);
361 q2 = q20 + q21 * std::sqrt(Xnacl + q22) + q23 * Xnacl;
364 Th = q1 + q2 * (temperature -
_T_c2k);
380 return enthalpy - pressure / density;
386 Real enthalpy =
h_from_p_T_X(pressure, temperature, xnacl);
389 return enthalpy - pressure / density;
412 de_dp = ad_e.derivatives()[0];
413 de_dT = ad_e.derivatives()[1];
414 de_dx = ad_e.derivatives()[2];
423 Real Tc = temperature -
_T_c2k;
426 Real lambdaw =
_water_fp->k_from_p_T(pressure, temperature);
427 Real lambda = 1.0 - (2.3434e-3 - 7.924e-6 * Tc + 3.924e-8 * Tc * Tc) * S +
428 (1.06e-5 - 2.0e-8 * Tc - 1.2e-10 * Tc * Tc) * S * S;
430 return lambda * lambdaw;
438 Real mol2 = mol * mol;
439 Real mol3 = mol2 * mol;
441 Real
a = 1.0 + 5.93582e-6 * mol - 5.19386e-5 * mol2 + 1.23156e-5 * mol3;
442 Real
b = 1.1542e-6 * mol + 1.41254e-7 * mol2 - 1.92476e-8 * mol3 - 1.70717e-9 * mol * mol3 +
443 1.0539e-10 * mol2 * mol3;
446 Real th20 = std::exp(std::log(temperature) / (
a +
b * temperature));
457 Real Tc = temperature -
_T_c2k;
459 return (26.18 + 7.2e-3 * Tc + 1.06e-4 * Tc * Tc) / 100.0;
465 return xnacl / ((1.0 - xnacl) *
_Mnacl);
474 return xnacl * Mbrine /
_Mnacl;
483 return xnacl * Mbrine /
_Mnacl;
494 const std::vector<Real> & coeffs,
503 const std::vector<Real> & coeffs)
const
509 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...
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)