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;
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;
160 water_density.derivatives() =
pressure.derivatives() * drho_dp + Tv.derivatives() * drho_dT;
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;
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));
226 return a * water_viscosity;
239 Real 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;
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;
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;
303 Real h, dh_dp, dh_dT;
307 enthalpy.derivatives() =
pressure.derivatives() * dh_dp + Th.derivatives() * dh_dT;
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;
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;
431 de_dp = ad_e.derivatives()[0];
432 de_dT = ad_e.derivatives()[1];
433 de_dx = ad_e.derivatives()[2];
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;
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;
registerMooseObject("FluidPropertiesApp", BrineFluidProperties)
T & getUserObject(const std::string &name, unsigned int tid=0) const
Real molarMass(Real xnacl) const
Average molar mass of brine.
FPADReal h_from_p_T_X(const FPADReal &pressure, const FPADReal &temperature, const FPADReal &xnacl) const
const SinglePhaseFluidProperties * _nacl_fp
NaClFluidProperties UserObject.
void paramError(const std::string ¶m, Args... args) const
virtual ~BrineFluidProperties()
virtual Real rho_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 massFractionToMolalConc(Real xnacl) const
Conversion from mass fraction to molal concentration (molality)
const Water97FluidProperties * _water97_fp
Water97FluidProperties UserObject (for Henry's law)
static const std::string component
virtual std::string fluidName() const override
Fluid name.
const InputParameters & parameters() const
virtual Real molarMass() const
Molar mass [kg/mol].
static const std::string density
InputParameters getValidParams(const std::string &name) const
Real molarMassH2O() const
H2O molar mass.
static const std::string temperature
virtual Real mu_from_p_T_X(Real pressure, Real temperature, Real xnacl) const override
Brine (NaCl in H2O) fluid properties as a function of pressure (Pa), temperature (K) and NaCl mass fr...
DualNumber< Real, DNDerivativeType, true > ADReal
static InputParameters validParams()
Real vaporPressure(Real temperature, Real xnacl) const
Brine vapour pressure From Haas, Physical properties of the coexisting phases and thermochemical prop...
DualNumber< Real, DNDerivativeSize< 5 > > FPADReal
static const unsigned int NACL
const std::string & name() const
Real _Mnacl
Molar mass of NaCl (kg/mol)
Real molarMassNaCl() const
NaCl molar mass.
const std::vector< double > x
static const std::string S
static const std::string mu
virtual const SinglePhaseFluidProperties & getComponent(unsigned int component) const override
Get UserObject for specified component.
Common class for single phase fluid properties.
BrineFluidProperties(const InputParameters ¶meters)
FPADReal e_from_p_T_X(const FPADReal &pressure, const FPADReal &temperature, const FPADReal &xnacl) const
Common class for multiple component fluid properties using a pressure and temperature formulation...
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
CTSub CT_OPERATOR_BINARY CTMul CTCompareLess CTCompareGreater CTCompareEqual _arg template * sqrt(_arg)) *_arg.template D< dtag >()) CT_SIMPLE_UNARY_FUNCTION(tanh
FEProblemBase & _fe_problem
Real _Mh2o
Molar mass of water (H2O) (kg/mol)
virtual Real k_from_p_T_X(Real pressure, Real temperature, Real xnacl) const override
virtual std::vector< std::shared_ptr< UserObject > > addUserObject(const std::string &user_object_name, const std::string &name, InputParameters ¶meters)
Water (H2O) fluid properties as a function of pressure (Pa) and temperature (K) from IAPWS-IF97: Revi...
static const std::string pressure
void mooseError(Args &&... args) const
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...
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.
void derivInsert(SemiDynamicSparseNumberArray< Real, libMesh::dof_id_type, NWrapper< N >> &derivs, libMesh::dof_id_type index, Real value)
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 haliteSolubility(Real temperature) const
Solubility of halite (solid NaCl) in water Originally from Potter et al., A new method for determinin...
virtual Real cp_from_p_T_X(Real pressure, Real temperature, Real xnacl) const override
virtual Real vaporPressure(Real T) const
Vapor pressure.
const SinglePhaseFluidProperties * _water_fp
Water97FluidProperties UserObject.
static InputParameters validParams()
const Real _T_c2k
Conversion of temperature from Celsius to Kelvin.
bool _water_fp_derivs
Flag to indicate whether to calculate derivatives in water_fp.
static const unsigned int WATER
Fluid component numbers for water and NaCl.