BrineCo2Pvt.hpp
Go to the documentation of this file.
1// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
2// vi: set et ts=4 sw=4 sts=4:
3/*
4 This file is part of the Open Porous Media project (OPM).
5
6 OPM is free software: you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation, either version 2 of the License, or
9 (at your option) any later version.
10
11 OPM is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with OPM. If not, see <http://www.gnu.org/licenses/>.
18
19 Consult the COPYING file in the top-level source directory of this
20 module for the precise wording of the license and the list of
21 copyright holders.
22*/
27#ifndef OPM_BRINE_CO2_PVT_HPP
28#define OPM_BRINE_CO2_PVT_HPP
29
31
39#include <opm/material/components/co2tables.inc>
40
41
42#if HAVE_ECL_INPUT
43#include <opm/input/eclipse/EclipseState/EclipseState.hpp>
44#include <opm/input/eclipse/Schedule/Schedule.hpp>
45#include <opm/input/eclipse/EclipseState/Tables/TableManager.hpp>
46#endif
47
48#include <vector>
49
50namespace Opm {
55template <class Scalar>
57{
58 static constexpr bool extrapolate = true;
59 //typedef H2O<Scalar> H2O_IAPWS;
60 //typedef Brine<Scalar, H2O_IAPWS> Brine_IAPWS;
61 //typedef TabulatedComponent<Scalar, H2O_IAPWS> H2O_Tabulated;
62 //typedef TabulatedComponent<Scalar, Brine_IAPWS> Brine_Tabulated;
63
64 //typedef H2O_Tabulated H2O;
65 //typedef Brine_Tabulated Brine;
66
67
68public:
72
75
76 explicit BrineCo2Pvt() = default;
77 BrineCo2Pvt(const std::vector<Scalar>& brineReferenceDensity,
78 const std::vector<Scalar>& co2ReferenceDensity,
79 const std::vector<Scalar>& salinity)
80 : brineReferenceDensity_(brineReferenceDensity),
81 co2ReferenceDensity_(co2ReferenceDensity),
82 salinity_(salinity)
83 {
85 }
86
87 BrineCo2Pvt(const std::vector<Scalar>& salinity,
88 Scalar T_ref = 288.71, //(273.15 + 15.56)
89 Scalar P_ref = 101325)
90 : salinity_(salinity)
91 {
92 int num_regions = salinity_.size();
93 co2ReferenceDensity_.resize(num_regions);
94 brineReferenceDensity_.resize(num_regions);
96 for (int i = 0; i < num_regions; ++i) {
97 co2ReferenceDensity_[i] = CO2::gasDensity(T_ref, P_ref, true);
98 brineReferenceDensity_[i] = Brine::liquidDensity(T_ref, P_ref, true);
99 }
100 }
101#if HAVE_ECL_INPUT
106 void initFromState(const EclipseState& eclState, const Schedule&)
107 {
108 if( !eclState.getTableManager().getDensityTable().empty()) {
109 std::cerr << "WARNING: CO2STOR is enabled but DENSITY is in the deck. \n" <<
110 "The surface density is computed based on CO2-BRINE PVT at standard conditions (STCOND) and DENSITY is ignored " << std::endl;
111 }
112
113 if( eclState.getTableManager().hasTables("PVDO") || !eclState.getTableManager().getPvtoTables().empty()) {
114 std::cerr << "WARNING: CO2STOR is enabled but PVDO or PVTO is in the deck. \n" <<
115 "BRINE PVT properties are computed based on the Hu et al. pvt model and PVDO/PVTO input is ignored. " << std::endl;
116 }
117
118 setEnableDissolvedGas(eclState.getSimulationConfig().hasDISGAS());
119
120 // We only supported single pvt region for the co2-brine module
121 size_t numRegions = 1;
123 size_t regionIdx = 0;
124 // Currently we only support constant salinity
125 const Scalar molality = eclState.getTableManager().salinity(); // mol/kg
126 const Scalar MmNaCl = 58e-3; // molar mass of NaCl [kg/mol]
127 // convert to mass fraction
128 Brine::salinity = 1 / ( 1 + 1 / (molality*MmNaCl)); //
129 salinity_[regionIdx] = Brine::salinity;
130 // set the surface conditions using the STCOND keyword
131 Scalar T_ref = eclState.getTableManager().stCond().temperature;
132 Scalar P_ref = eclState.getTableManager().stCond().pressure;
133
134 brineReferenceDensity_[regionIdx] = Brine::liquidDensity(T_ref, P_ref, extrapolate);
135 co2ReferenceDensity_[regionIdx] = CO2::gasDensity(T_ref, P_ref, extrapolate);
136 }
137#endif
138
140 {
141 brineReferenceDensity_.resize(numRegions);
142 co2ReferenceDensity_.resize(numRegions);
143 salinity_.resize(numRegions);
144 }
145
146
150 void setReferenceDensities(unsigned regionIdx,
151 Scalar rhoRefBrine,
152 Scalar rhoRefCO2,
153 Scalar /*rhoRefWater*/)
154 {
155 brineReferenceDensity_[regionIdx] = rhoRefBrine;
156 co2ReferenceDensity_[regionIdx] = rhoRefCO2;
157 }
158
159
163 void initEnd()
164 {
165
166 }
167
174 void setEnableDissolvedGas(bool yesno)
175 { enableDissolution_ = yesno; }
176
180 unsigned numRegions() const
181 { return brineReferenceDensity_.size(); }
182
186 template <class Evaluation>
187 Evaluation internalEnergy(unsigned regionIdx,
188 const Evaluation& temperature,
189 const Evaluation& pressure,
190 const Evaluation& Rs) const
191 {
192
193 const Evaluation xlCO2 = convertXoGToxoG_(convertRsToXoG_(Rs,regionIdx));
194 return (liquidEnthalpyBrineCO2_(temperature,
195 pressure,
196 salinity_[regionIdx],
197 xlCO2)
198 - pressure / density_(regionIdx, temperature, pressure, Rs));
199 }
200
204 template <class Evaluation>
205 Evaluation viscosity(unsigned regionIdx,
206 const Evaluation& temperature,
207 const Evaluation& pressure,
208 const Evaluation& /*Rs*/) const
209 {
210 //TODO: The viscosity does not yet depend on the composition
211 return saturatedViscosity(regionIdx, temperature, pressure);
212 }
213
217 template <class Evaluation>
218 Evaluation saturatedViscosity(unsigned /*regionIdx*/,
219 const Evaluation& temperature,
220 const Evaluation& pressure) const
221 {
222 return Brine::liquidViscosity(temperature, pressure);
223 }
224
228 template <class Evaluation>
229 Evaluation inverseFormationVolumeFactor(unsigned regionIdx,
230 const Evaluation& temperature,
231 const Evaluation& pressure,
232 const Evaluation& Rs) const
233 {
234 return (1.0 - convertRsToXoG_(Rs,regionIdx)) * density_(regionIdx, temperature, pressure, Rs)/brineReferenceDensity_[regionIdx];
235 }
236
240 template <class Evaluation>
241 Evaluation saturatedInverseFormationVolumeFactor(unsigned regionIdx,
242 const Evaluation& temperature,
243 const Evaluation& pressure) const
244 {
245 Evaluation rsSat = rsSat_(regionIdx, temperature, pressure);
246 return (1.0 - convertRsToXoG_(rsSat,regionIdx)) * density_(regionIdx, temperature, pressure, rsSat)/brineReferenceDensity_[regionIdx];
247 }
248
255 template <class Evaluation>
256 Evaluation saturationPressure(unsigned /*regionIdx*/,
257 const Evaluation& /*temperature*/,
258 const Evaluation& /*Rs*/) const
259 {
260 throw std::runtime_error("Requested the saturation pressure for the brine-co2 pvt module. Not yet implemented.");
261 }
262
266 template <class Evaluation>
267 Evaluation saturatedGasDissolutionFactor(unsigned regionIdx,
268 const Evaluation& temperature,
269 const Evaluation& pressure,
270 const Evaluation& /*oilSaturation*/,
271 const Evaluation& /*maxOilSaturation*/) const
272 {
273 //TODO support VAPPARS
274 return rsSat_(regionIdx, temperature, pressure);
275 }
276
280 template <class Evaluation>
281 Evaluation saturatedGasDissolutionFactor(unsigned regionIdx,
282 const Evaluation& temperature,
283 const Evaluation& pressure) const
284 {
285 return rsSat_(regionIdx, temperature, pressure);
286 }
287
288 const Scalar oilReferenceDensity(unsigned regionIdx) const
289 { return brineReferenceDensity_[regionIdx]; }
290
291 const Scalar gasReferenceDensity(unsigned regionIdx) const
292 { return co2ReferenceDensity_[regionIdx]; }
293
294 const Scalar salinity(unsigned regionIdx) const
295 { return salinity_[regionIdx]; }
296
297 bool operator==(const BrineCo2Pvt<Scalar>& data) const
298 {
299 return co2ReferenceDensity_ == data.co2ReferenceDensity_ &&
300 brineReferenceDensity_ == data.brineReferenceDensity_;
301 }
302
303 template <class Evaluation>
304 Evaluation diffusionCoefficient(const Evaluation& temperature,
305 const Evaluation& pressure,
306 unsigned /*compIdx*/) const
307 {
308 //Diffusion coefficient of CO2 in pure water according to (McLachlan and Danckwerts, 1972)
309 const Evaluation log_D_H20 = -4.1764 + 712.52 / temperature - 2.5907e5 / (temperature*temperature);
310
311 //Diffusion coefficient of CO2 in the brine phase modified following (Ratcliff and Holdcroft,1963 and Al-Rawajfeh, 2004)
312 const Evaluation& mu_H20 = H2O::liquidViscosity(temperature, pressure, extrapolate); // Water viscosity
313 const Evaluation& mu_Brine = Brine::liquidViscosity(temperature, pressure); // Brine viscosity
314 const Evaluation log_D_Brine = log_D_H20 - 0.87*log10(mu_Brine / mu_H20);
315
316 return pow(Evaluation(10), log_D_Brine) * 1e-4; // convert from cm2/s to m2/s
317 }
318
319private:
320 std::vector<Scalar> brineReferenceDensity_;
321 std::vector<Scalar> co2ReferenceDensity_;
322 std::vector<Scalar> salinity_;
323 bool enableDissolution_ = true;
324
325 template <class LhsEval>
326 LhsEval density_(unsigned regionIdx,
327 const LhsEval& temperature,
328 const LhsEval& pressure,
329 const LhsEval& Rs) const
330 {
331 LhsEval xlCO2 = convertXoGToxoG_(convertRsToXoG_(Rs,regionIdx));
332 LhsEval result = liquidDensity_(temperature,
333 pressure,
334 xlCO2);
335
337 return result;
338 }
339
340
341 template <class LhsEval>
342 LhsEval liquidDensity_(const LhsEval& T,
343 const LhsEval& pl,
344 const LhsEval& xlCO2) const
345 {
349
350 if(!extrapolate && T < 273.15) {
351 std::ostringstream oss;
352 oss << "Liquid density for Brine and CO2 is only "
353 "defined above 273.15K (is "<<T<<"K)";
354 throw NumericalIssue(oss.str());
355 }
356 if(!extrapolate && pl >= 2.5e8) {
357 std::ostringstream oss;
358 oss << "Liquid density for Brine and CO2 is only "
359 "defined below 250MPa (is "<<pl<<"Pa)";
360 throw NumericalIssue(oss.str());
361 }
362
363 const LhsEval& rho_brine = Brine::liquidDensity(T, pl, extrapolate);
364 const LhsEval& rho_pure = H2O::liquidDensity(T, pl, extrapolate);
365 const LhsEval& rho_lCO2 = liquidDensityWaterCO2_(T, pl, xlCO2);
366 const LhsEval& contribCO2 = rho_lCO2 - rho_pure;
367
368 return rho_brine + contribCO2;
369 }
370
371 template <class LhsEval>
372 LhsEval liquidDensityWaterCO2_(const LhsEval& temperature,
373 const LhsEval& pl,
374 const LhsEval& xlCO2) const
375 {
376 Scalar M_CO2 = CO2::molarMass();
377 Scalar M_H2O = H2O::molarMass();
378
379 const LhsEval& tempC = temperature - 273.15; /* tempC : temperature in °C */
380 const LhsEval& rho_pure = H2O::liquidDensity(temperature, pl, extrapolate);
381 // calculate the mole fraction of CO2 in the liquid. note that xlH2O is available
382 // as a function parameter, but in the case of a pure gas phase the value of M_T
383 // for the virtual liquid phase can become very large
384 const LhsEval xlH2O = 1.0 - xlCO2;
385 const LhsEval& M_T = M_H2O * xlH2O + M_CO2 * xlCO2;
386 const LhsEval& V_phi =
387 (37.51 +
388 tempC*(-9.585e-2 +
389 tempC*(8.74e-4 -
390 tempC*5.044e-7))) / 1.0e6;
391 return 1/ (xlCO2 * V_phi/M_T + M_H2O * xlH2O / (rho_pure * M_T));
392 }
393
398 template <class LhsEval>
399 LhsEval convertRsToXoG_(const LhsEval& Rs, unsigned regionIdx) const
400 {
401 Scalar rho_oRef = brineReferenceDensity_[regionIdx];
402 Scalar rho_gRef = co2ReferenceDensity_[regionIdx];
403
404 const LhsEval& rho_oG = Rs*rho_gRef;
405 return rho_oG/(rho_oRef + rho_oG);
406 }
407
408
412 template <class LhsEval>
413 LhsEval convertXoGToxoG_(const LhsEval& XoG) const
414 {
415 Scalar M_CO2 = CO2::molarMass();
416 Scalar M_Brine = Brine::molarMass();
417 return XoG*M_Brine / (M_CO2*(1 - XoG) + XoG*M_Brine);
418 }
419
420
424 template <class LhsEval>
425 LhsEval convertxoGToXoG(const LhsEval& xoG) const
426 {
427 Scalar M_CO2 = CO2::molarMass();
428 Scalar M_Brine = Brine::molarMass();
429
430 return xoG*M_CO2 / (xoG*(M_CO2 - M_Brine) + M_Brine);
431 }
432
433
438 template <class LhsEval>
439 LhsEval convertXoGToRs(const LhsEval& XoG, unsigned regionIdx) const
440 {
441 Scalar rho_oRef = brineReferenceDensity_[regionIdx];
442 Scalar rho_gRef = co2ReferenceDensity_[regionIdx];
443
444 return XoG/(1.0 - XoG)*(rho_oRef/rho_gRef);
445 }
446
447
448 template <class LhsEval>
449 LhsEval rsSat_(unsigned regionIdx,
450 const LhsEval& temperature,
451 const LhsEval& pressure) const
452 {
453 if (!enableDissolution_)
454 return 0.0;
455
456 // calulate the equilibrium composition for the given
457 // temperature and pressure.
458 LhsEval xgH2O;
459 LhsEval xlCO2;
461 pressure,
462 salinity_[regionIdx],
463 /*knownPhaseIdx=*/-1,
464 xlCO2,
465 xgH2O,
466 extrapolate);
467
468 // normalize the phase compositions
469 xlCO2 = max(0.0, min(1.0, xlCO2));
470
471 return convertXoGToRs(convertxoGToXoG(xlCO2), regionIdx);
472 }
473
474 template <class LhsEval>
475 static LhsEval liquidEnthalpyBrineCO2_(const LhsEval& T,
476 const LhsEval& p,
477 Scalar S, // salinity
478 const LhsEval& X_CO2_w)
479 {
480 /* X_CO2_w : mass fraction of CO2 in brine */
481
482 /* same function as enthalpy_brine, only extended by CO2 content */
483
484 /*Numerical coefficents from PALLISER*/
485 static constexpr Scalar f[] = {
486 2.63500E-1, 7.48368E-6, 1.44611E-6, -3.80860E-10
487 };
488
489 /*Numerical coefficents from MICHAELIDES for the enthalpy of brine*/
490 static constexpr Scalar a[4][3] = {
491 { 9633.6, -4080.0, +286.49 },
492 { +166.58, +68.577, -4.6856 },
493 { -0.90963, -0.36524, +0.249667E-1 },
494 { +0.17965E-2, +0.71924E-3, -0.4900E-4 }
495 };
496
497 LhsEval theta, h_NaCl;
498 LhsEval h_ls1, d_h;
499 LhsEval delta_h;
500 LhsEval delta_hCO2, hg, hw;
501
502 theta = T - 273.15;
503
504 // Regularization
505 Scalar scalarTheta = scalarValue(theta);
506 Scalar S_lSAT = f[0] + scalarTheta*(f[1] + scalarTheta*(f[2] + scalarTheta*f[3]));
507 if (S > S_lSAT)
508 S = S_lSAT;
509
510 hw = H2O::liquidEnthalpy(T, p) /1E3; /* kJ/kg */
511
512 /*DAUBERT and DANNER*/
513 /*U=*/h_NaCl = (3.6710E4*T + 0.5*(6.2770E1)*T*T - ((6.6670E-2)/3)*T*T*T
514 +((2.8000E-5)/4)*(T*T*T*T))/(58.44E3)- 2.045698e+02; /* kJ/kg */
515
516 Scalar m = 1E3/58.44 * S/(1-S);
517 int i = 0;
518 int j = 0;
519 d_h = 0;
520
521 for (i = 0; i<=3; i++) {
522 for (j=0; j<=2; j++) {
523 d_h = d_h + a[i][j] * pow(theta, static_cast<Scalar>(i)) * std::pow(m, j);
524 }
525 }
526 /* heat of dissolution for halite according to Michaelides 1971 */
527 delta_h = (4.184/(1E3 + (58.44 * m)))*d_h;
528
529 /* Enthalpy of brine without CO2 */
530 h_ls1 =(1-S)*hw + S*h_NaCl + S*delta_h; /* kJ/kg */
531
532 /* heat of dissolution for CO2 according to Fig. 6 in Duan and Sun 2003. (kJ/kg)
533 In the relevant temperature ranges CO2 dissolution is
534 exothermal */
535 delta_hCO2 = (-57.4375 + T * 0.1325) * 1000/44;
536
537 /* enthalpy contribution of CO2 (kJ/kg) */
538 hg = CO2::gasEnthalpy(T, p, extrapolate)/1E3 + delta_hCO2;
539
540 /* Enthalpy of brine with dissolved CO2 */
541 return (h_ls1 - X_CO2_w*hw + hg*X_CO2_w)*1E3; /*J/kg*/
542 }
543
544};
545
546} // namespace Opm
547
548#endif
Binary coefficients for brine and CO2.
Definition: Brine_CO2.hpp:42
static void calculateMoleFractions(const Evaluation &temperature, const Evaluation &pg, Scalar salinity, const int knownPhaseIdx, Evaluation &xlCO2, Evaluation &ygH2O, bool extrapolate=false)
Returns the mol (!) fraction of CO2 in the liquid phase and the mol_ (!) fraction of H2O in the gas p...
Definition: Brine_CO2.hpp:97
This class represents the Pressure-Volume-Temperature relations of the liquid phase for a CO2-Brine s...
Definition: BrineCo2Pvt.hpp:57
Evaluation internalEnergy(unsigned regionIdx, const Evaluation &temperature, const Evaluation &pressure, const Evaluation &Rs) const
Returns the specific enthalpy [J/kg] of gas given a set of parameters.
Definition: BrineCo2Pvt.hpp:187
BrineCo2Pvt()=default
Evaluation saturatedGasDissolutionFactor(unsigned regionIdx, const Evaluation &temperature, const Evaluation &pressure, const Evaluation &, const Evaluation &) const
Returns the gas dissoluiton factor [m^3/m^3] of the liquid phase.
Definition: BrineCo2Pvt.hpp:267
Evaluation inverseFormationVolumeFactor(unsigned regionIdx, const Evaluation &temperature, const Evaluation &pressure, const Evaluation &Rs) const
Returns the formation volume factor [-] of the fluid phase.
Definition: BrineCo2Pvt.hpp:229
BrineCo2Pvt(const std::vector< Scalar > &brineReferenceDensity, const std::vector< Scalar > &co2ReferenceDensity, const std::vector< Scalar > &salinity)
Definition: BrineCo2Pvt.hpp:77
bool operator==(const BrineCo2Pvt< Scalar > &data) const
Definition: BrineCo2Pvt.hpp:297
const Scalar oilReferenceDensity(unsigned regionIdx) const
Definition: BrineCo2Pvt.hpp:288
Evaluation diffusionCoefficient(const Evaluation &temperature, const Evaluation &pressure, unsigned) const
Definition: BrineCo2Pvt.hpp:304
const Scalar salinity(unsigned regionIdx) const
Definition: BrineCo2Pvt.hpp:294
unsigned numRegions() const
Return the number of PVT regions which are considered by this PVT-object.
Definition: BrineCo2Pvt.hpp:180
const Scalar gasReferenceDensity(unsigned regionIdx) const
Definition: BrineCo2Pvt.hpp:291
Evaluation saturationPressure(unsigned, const Evaluation &, const Evaluation &) const
Returns the saturation pressure of the brine phase [Pa] depending on its mass fraction of the gas com...
Definition: BrineCo2Pvt.hpp:256
void initEnd()
Finish initializing the oil phase PVT properties.
Definition: BrineCo2Pvt.hpp:163
BrineCo2Pvt(const std::vector< Scalar > &salinity, Scalar T_ref=288.71, Scalar P_ref=101325)
Definition: BrineCo2Pvt.hpp:87
Evaluation saturatedInverseFormationVolumeFactor(unsigned regionIdx, const Evaluation &temperature, const Evaluation &pressure) const
Returns the formation volume factor [-] of brine saturated with CO2 at a given pressure.
Definition: BrineCo2Pvt.hpp:241
void setReferenceDensities(unsigned regionIdx, Scalar rhoRefBrine, Scalar rhoRefCO2, Scalar)
Initialize the reference densities of all fluids for a given PVT region.
Definition: BrineCo2Pvt.hpp:150
Evaluation viscosity(unsigned regionIdx, const Evaluation &temperature, const Evaluation &pressure, const Evaluation &) const
Returns the dynamic viscosity [Pa s] of the fluid phase given a set of parameters.
Definition: BrineCo2Pvt.hpp:205
Evaluation saturatedGasDissolutionFactor(unsigned regionIdx, const Evaluation &temperature, const Evaluation &pressure) const
Returns thegas dissoluiton factor [m^3/m^3] of the liquid phase.
Definition: BrineCo2Pvt.hpp:281
void setEnableDissolvedGas(bool yesno)
Specify whether the PVT model should consider that the CO2 component can dissolve in the brine phase.
Definition: BrineCo2Pvt.hpp:174
Evaluation saturatedViscosity(unsigned, const Evaluation &temperature, const Evaluation &pressure) const
Returns the dynamic viscosity [Pa s] of oil saturated gas at given pressure.
Definition: BrineCo2Pvt.hpp:218
void setNumRegions(size_t numRegions)
Definition: BrineCo2Pvt.hpp:139
A class for the brine fluid properties.
Definition: Brine.hpp:46
static Scalar molarMass()
The molar mass in of the component.
Definition: Brine.hpp:80
static Evaluation liquidDensity(const Evaluation &temperature, const Evaluation &pressure, bool extrapolate=false)
The density of the liquid component at a given pressure in and temperature in .
Definition: Brine.hpp:262
static Evaluation liquidViscosity(const Evaluation &temperature, const Evaluation &)
The dynamic viscosity of pure water.
Definition: Brine.hpp:339
static Scalar salinity
The mass fraction of salt assumed to be in the brine.
Definition: Brine.hpp:49
A class for the CO2 fluid properties.
Definition: CO2.hpp:53
static Scalar molarMass()
The mass in [kg] of one mole of CO2.
Definition: CO2.hpp:66
static Evaluation gasEnthalpy(const Evaluation &temperature, const Evaluation &pressure, bool extrapolate=false)
Specific enthalpy of gaseous CO2 [J/kg].
Definition: CO2.hpp:164
static Evaluation gasDensity(const Evaluation &temperature, const Evaluation &pressure, bool extrapolate=false)
The density of CO2 at a given pressure and temperature [kg/m^3].
Definition: CO2.hpp:189
A simple version of pure water with density from Hu et al.
Definition: SimpleHuDuanH2O.hpp:70
static Evaluation liquidEnthalpy(const Evaluation &temperature, const Evaluation &)
Specific enthalpy of liquid water .
Definition: SimpleHuDuanH2O.hpp:198
static Evaluation liquidViscosity(const Evaluation &temperature, const Evaluation &pressure, bool extrapolate)
The dynamic viscosity of pure water.
Definition: SimpleHuDuanH2O.hpp:350
static Evaluation liquidDensity(const Evaluation &temperature, const Evaluation &pressure, bool extrapolate)
The density of pure water at a given pressure and temperature .
Definition: SimpleHuDuanH2O.hpp:309
static Scalar molarMass()
The molar mass in of water.
Definition: SimpleHuDuanH2O.hpp:104
bool CheckDefined(const T &value)
Make valgrind complain if any of the memory occupied by an object is undefined.
Definition: Valgrind.hpp:74
Definition: Air_Mesitylene.hpp:34
Evaluation log10(const Evaluation &value)
Definition: MathToolbox.hpp:411
ReturnEval_< Evaluation1, Evaluation2 >::type min(const Evaluation1 &arg1, const Evaluation2 &arg2)
Definition: MathToolbox.hpp:346
ReturnEval_< Evaluation1, Evaluation2 >::type max(const Evaluation1 &arg1, const Evaluation2 &arg2)
Definition: MathToolbox.hpp:341
auto scalarValue(const Evaluation &val) -> decltype(MathToolbox< Evaluation >::scalarValue(val))
Definition: MathToolbox.hpp:335
ReturnEval_< Evaluation1, Evaluation2 >::type pow(const Evaluation1 &base, const Evaluation2 &exp)
Definition: MathToolbox.hpp:416