diff --git a/CHANGELOG.md b/CHANGELOG.md index b59d2c66ce6cc457ff81701ccaadf5e3ad3e79bb..c4d29c5139a5304e5bab72d5bb926c231063278e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -35,6 +35,9 @@ The new and last argument is the `ResidualType` (see above). - __AMGBackend__: `AMGBiCGSTABBackend` have been deprecated, use `AMGBiCGSTABIstlSolver` instead - __IstlSolverFactoryBackend__: `IstlSolverFactoryBackend` now require an additional parameter `LinearAlgebraTraits` +- __BrineCO2__: Fluidsystem `BrineCO2` and binary coefficients `Brine_CO2` receiving a `CO2Table` as +template parameter has been deprecated. Pass a component instead, use `Components::CO2<CO2Table>` to +keep using a tabulated component. ### New experimental features (possibly subject to backwards-incompatible changes in the future) diff --git a/dumux/common/deprecated.hh b/dumux/common/deprecated.hh index 1e13c76136b3060c9bd375040ce2eefb560bb54e..acb380b63e359d9bc508a0fbe6a8cfec6017d69f 100644 --- a/dumux/common/deprecated.hh +++ b/dumux/common/deprecated.hh @@ -52,6 +52,25 @@ namespace Deprecated { #pragma clang diagnostic pop #endif // __clang__ +template<class CO2Impl> + struct BrineCO2Helper{ + template<class CO2Arg> + using TabulatedDensityDetector = decltype(std::declval<CO2Arg>().tabulatedDensity); + static constexpr bool rawCO2Table = Dune::Std::is_detected<TabulatedDensityDetector, + CO2Impl >::value; + + template< typename T> + [[deprecated("Passing just CO2Tables to define a BrineCO2 fluidsystem/binarycoefficient is deprecated. Use Components::CO2<Scalar, CO2Tables> as template parameter instead.")]] + static constexpr void DefiningBrineCO2WithCO2Table() {} + + static constexpr bool isRawTable() + { + if constexpr (rawCO2Table) + DefiningBrineCO2WithCO2Table<CO2Impl>(); + return rawCO2Table; + } + }; + } // end namespace Deprecated #endif diff --git a/dumux/material/binarycoefficients/brine_co2.hh b/dumux/material/binarycoefficients/brine_co2.hh index d77545b75cd91550dcda19f86f9e6bc1c2a0c890..c1bba1a569a61be7dfe3e4b83a4fc4d0fdea30e3 100644 --- a/dumux/material/binarycoefficients/brine_co2.hh +++ b/dumux/material/binarycoefficients/brine_co2.hh @@ -26,10 +26,14 @@ #include <dune/common/math.hh> +#include <type_traits> +#include <dune/common/debugstream.hh> +#include <dumux/common/deprecated.hh> #include <dumux/common/parameters.hh> #include <dumux/material/components/brine.hh> #include <dumux/material/components/h2o.hh> #include <dumux/material/components/co2.hh> +#include <dumux/material/components/simpleco2.hh> #include <dumux/material/idealgas.hh> namespace Dumux::BinaryCoeff { @@ -38,10 +42,15 @@ namespace Dumux::BinaryCoeff { * \ingroup Binarycoefficients * \brief Binary coefficients for brine and CO2. */ -template<class Scalar, class CO2Tables, bool verbose = true> +template<class Scalar, class CO2Impl = Components::SimpleCO2<Scalar>, bool verbose = true> class Brine_CO2 { - using H2O = Dumux::Components::H2O<Scalar>; - using CO2 = Dumux::Components::CO2<Scalar, CO2Tables>; + using H2O = Components::H2O<Scalar>; + + static constexpr bool rawCO2Table = Deprecated::BrineCO2Helper<CO2Impl>::isRawTable(); + using CO2Component = typename std::conditional_t< rawCO2Table, + Components::CO2<Scalar, CO2Impl>, + CO2Impl >; + using CO2 = CO2Component; using IdealGas = Dumux::IdealGas<Scalar>; static constexpr int lPhaseIdx = 0; // index of the liquid phase static constexpr int gPhaseIdx = 1; // index of the gas phase @@ -378,12 +387,12 @@ private: * molfraction of H2O has been assumed to be a constant value * For use with the actual brine_co2_system this class still needs to be adapted */ -template<class Scalar, class CO2Tables, bool verbose = true> +template<class Scalar, class CO2Impl = Components::SimpleCO2<Scalar>, bool verbose = true> class Brine_CO2_Old { - using H2O = Dumux::Components::H2O<Scalar>; - using Brine = Dumux::Components::Brine<Scalar,H2O>; - using CO2 = Dumux::Components::CO2<Scalar, CO2Tables>; + using H2O = Components::H2O<Scalar>; + using Brine = Components::Brine<Scalar,H2O>; + using CO2 = CO2Impl; using IdealGas = Dumux::IdealGas<Scalar>; public: diff --git a/dumux/material/components/simpleco2.hh b/dumux/material/components/simpleco2.hh new file mode 100644 index 0000000000000000000000000000000000000000..863c087e774a3fd4ce0c968b08703400d155ad4f --- /dev/null +++ b/dumux/material/components/simpleco2.hh @@ -0,0 +1,270 @@ +// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- +// vi: set et ts=4 sw=4 sts=4: +/***************************************************************************** + * See the file COPYING for full copying permissions. * + * * + * This program is free software: you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation, either version 3 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program. If not, see <http://www.gnu.org/licenses/>. * + *****************************************************************************/ +/*! + * \file + * \ingroup Components + * \brief A much simpler (and thus potentially less buggy) version of + * pure CO2. + */ +#ifndef DUMUX_SIMPLE_CO2_HH +#define DUMUX_SIMPLE_CO2_HH + +#include <dumux/common/parameters.hh> +#include <dumux/material/idealgas.hh> + +#include <cmath> + +#include <dumux/material/components/base.hh> +#include <dumux/material/components/gas.hh> + +namespace Dumux::Components { + +/*! + * \ingroup Components + * \brief A simple version of pure CO2 + * + * \tparam Scalar The type used for scalar values + */ +template <class Scalar> +class SimpleCO2 +: public Components::Base<Scalar, SimpleCO2<Scalar> > +, public Components::Gas<Scalar, SimpleCO2<Scalar> > +{ + using IdealGas = Dumux::IdealGas<Scalar>; + +public: + /*! + * \brief A human readable name for the CO2. + */ + static std::string name() + { return "SimpleCO2"; } + + /*! + * \brief The mass in \f$\mathrm{[kg/mol]}\f$ of one mole of CO2. + */ + static constexpr Scalar molarMass() + { return 44.0e-3; /* [kg/mol] */ } + + /*! + * \brief Returns the critical temperature \f$\mathrm{[K]}\f$ of CO2 + */ + static Scalar criticalTemperature() + { return 273.15 + 30.95; /* [K] */ } + + /*! + * \brief Returns the critical pressure \f$\mathrm{[Pa]}\f$ of CO2 + */ + static Scalar criticalPressure() + { return 73.8e5; /* [Pa] */ } + + /*! + * \brief Returns the temperature \f$\mathrm{[K]}\f$ at CO2's triple point. + */ + static Scalar tripleTemperature() + { return 273.15 - 56.35; /* [K] */ } + + /*! + * \brief Returns the pressure \f$\mathrm{[Pa]}\f$ at CO2's triple point. + */ + static Scalar triplePressure() + { return 5.11e5; /* [N/m^2] */ } + + + /*! + * \brief Specific enthalpy of CO2 \f$\mathrm{[J/kg]}\f$. + * source: Shomate Equation for a temperature range of 298. to 1200°C. + * with components published by NIST \cite NIST + * https://webbook.nist.gov/cgi/cbook.cgi?ID=C124389&Mask=1&Type=JANAFG&Table=on + * \param temperature temperature of component in \f$\mathrm{[K]}\f$ + * \param pressure pressure of component in \f$\mathrm{[Pa]}\f$ + */ + static const Scalar gasEnthalpy(Scalar temperature, + Scalar pressure) + { + const Scalar t = temperature/1000; + constexpr double a = 24.99735; + constexpr double b = 55.18696; + constexpr double c = -33.69137; + constexpr double d = 7.948387; + constexpr double e = -0.136638; + constexpr double f = -403.6075; + constexpr double h = -393.5224; + return (a*t + b*t*t/2 + c*t*t*t/3 + d*t*t*t*t/4 - e/t -h)*1000/molarMass(); //conversion from kJ/mol to J/kg + } + + /*! + * \brief Specific internal energy of CO2 \f$\mathrm{[J/kg]}\f$. + * + * Definition of enthalpy: \f$h= u + pv = u + p / \rho\f$. + * Rearranging for internal energy yields: \f$u = h - pv\f$. + * Exploiting the Ideal Gas assumption (\f$pv = R_{\textnormal{specific}} T\f$)gives: \f$u = h - R / M T \f$. + * + * The universal gas constant can only be used in the case of molar formulations. + * \param temperature temperature of component in \f$\mathrm{[K]}\f$ + * \param pressure pressure of component in \f$\mathrm{[Pa]}\f$ + */ + static const Scalar gasInternalEnergy(Scalar temperature, + Scalar pressure) + { + // 1/molarMass: conversion from [J/(mol K)] to [J/(kg K)] + // R*T/molarMass: pressure *spec. volume for an ideal gas + return gasEnthalpy(temperature, pressure) + - 1.0/molarMass()*IdealGas::R*temperature; + } + + /*! + * \brief Returns true if the gas phase is assumed to be compressible + */ + static constexpr bool gasIsCompressible() + { return true; } + + /*! + * \brief Returns true if the gas phase viscostiy is constant + */ + static constexpr bool gasViscosityIsConstant() + { return false; } + + /*! + * \brief The density \f$\mathrm{[kg/m^3]}\f$ of CO2 at a given pressure and temperature. + * + * \param temperature temperature of component in \f$\mathrm{[K]}\f$ + * \param pressure pressure of component in \f$\mathrm{[Pa]}\f$ + */ + static Scalar gasDensity(Scalar temperature, Scalar pressure) + { return IdealGas::density(molarMass(), temperature, pressure); } + + /*! + * \brief The molar density of CO2 in \f$\mathrm{[mol/m^3]}\f$ at a given pressure and temperature. + * + * \param temperature temperature of component in \f$\mathrm{[K]}\f$ + * \param pressure pressure of component in \f$\mathrm{[Pa]}\f$ + * + */ + static Scalar gasMolarDensity(Scalar temperature, Scalar pressure) + { return IdealGas::molarDensity(temperature, pressure); } + + /*! + * \brief Returns true if the gas phase is assumed to be ideal + */ + static constexpr bool gasIsIdeal() + { return true; } + + /*! + * \brief The pressure of CO2 in \f$\mathrm{[Pa]}\f$ at a given density and temperature. + * + * \param temperature temperature of component in \f$\mathrm{[K]}\f$ + * \param density density of component in \f$\mathrm{[kg/m^3]}\f$ + */ + static Scalar gasPressure(Scalar temperature, Scalar density) + { return IdealGas::pressure(temperature, density/molarMass()); } + + /*! + * \brief The dynamic viscosity \f$\mathrm{[Pa*s]}\f$ of CO2. + * Equations given in: - Vesovic et al., 1990 + * - Fenhour et al., 1998 + * \param temperature temperature of component in \f$\mathrm{[K]}\f$ + * \param pressure pressure of component in \f$\mathrm{[Pa]}\f$ + * TODO: this does not look like a really "simple" parameterization. Can this be simplified further? + */ + static Scalar gasViscosity(Scalar temperature, Scalar pressure) + { + constexpr double a0 = 0.235156; + constexpr double a1 = -0.491266; + constexpr double a2 = 5.211155E-2; + constexpr double a3 = 5.347906E-2; + constexpr double a4 = -1.537102E-2; + + constexpr double d11 = 0.4071119E-2; + constexpr double d21 = 0.7198037E-4; + constexpr double d64 = 0.2411697E-16; + constexpr double d81 = 0.2971072E-22; + constexpr double d82 = -0.1627888E-22; + + constexpr double ESP = 251.196; + + if(temperature < 275.0) // regularisation + { + temperature = 275.0; + Dune::dgrave << "Temperature below 275K in viscosity function:" + << "Regularizing temperature to 275K. " << std::endl; + } + + + const double TStar = temperature/ESP; + + /* mu0: viscosity in zero-density limit */ + using std::exp; + using std::log; + using std::sqrt; + const double logTStar = log(TStar); + const double SigmaStar = exp(a0 + a1*logTStar + + a2*logTStar*logTStar + + a3*logTStar*logTStar*logTStar + + a4*logTStar*logTStar*logTStar*logTStar ); + const double mu0 = 1.00697*sqrt(temperature) / SigmaStar; + + /* dmu : excess viscosity at elevated density */ + const double rho = gasDensity(temperature, pressure); /* CO2 mass density [kg/m^3] */ + + using Dune::power; + const double dmu = d11*rho + d21*rho*rho + d64*power(rho, 6)/(TStar*TStar*TStar) + + d81*power(rho, 8) + d82*power(rho, 8)/TStar; + + return (mu0 + dmu)/1.0E6; /* conversion to [Pa s] */ + } + + + /*! + * \brief Thermal conductivity \f$\mathrm{[[W/(m*K)]}\f$ of CO2. + * + * Thermal conductivity of CO2 at T=20°C, see: + * http://www.engineeringtoolbox.com/carbon-dioxide-d_1000.html + * + * \param temperature absolute temperature in \f$\mathrm{[K]}\f$ + * \param pressure of the phase in \f$\mathrm{[Pa]}\f$ + */ + static Scalar gasThermalConductivity(Scalar temperature, Scalar pressure) + { + return 0.087; + } + + /*! + * \brief Specific isobaric heat capacity of CO2 \f$\mathrm{[J/(kg*K)]}\f$. + * source: Shomate Equation for a temperature range of 298. to 1200°C. + * with components published by NIST \cite NIST + * https://webbook.nist.gov/cgi/cbook.cgi?ID=C124389&Mask=1&Type=JANAFG&Table=on + * \param temperature temperature of component in \f$\mathrm{[K]}\f$ + * \param pressure pressure of component in \f$\mathrm{[Pa]}\f$ + */ + static Scalar gasHeatCapacity(Scalar temperature, Scalar pressure) + { + const Scalar t = temperature/1000; + constexpr double a = 24.99735; + constexpr double b = 55.18696; + constexpr double c = -33.69137; + constexpr double d = 7.948387; + constexpr double e = -0.136638; + return (a + b*t + c*t*t + d*t*t*t + e/(t*t))/molarMass(); + } + +}; + +} // end namespace Dumux::Components + +#endif diff --git a/dumux/material/fluidsystems/brineco2.hh b/dumux/material/fluidsystems/brineco2.hh index db3353ed7c4c0d87684af7546f9e3003d8afe054..bd8c069077494f47ba07ef3f7ec4dc99bcb1a8b4 100644 --- a/dumux/material/fluidsystems/brineco2.hh +++ b/dumux/material/fluidsystems/brineco2.hh @@ -28,6 +28,7 @@ #include <dune/common/exceptions.hh> +#include <dumux/common/deprecated.hh> #include <dumux/common/parameters.hh> #include <dumux/material/idealgas.hh> #include <dumux/material/fluidsystems/base.hh> @@ -35,6 +36,7 @@ #include <dumux/material/fluidstates/adapter.hh> #include <dumux/material/components/brine.hh> +#include <dumux/material/components/simpleco2.hh> #include <dumux/material/components/co2.hh> #include <dumux/material/components/tabulatedcomponent.hh> @@ -46,7 +48,7 @@ namespace Dumux::FluidSystems::Detail { /*! * \brief Class that exports some indices that should - * be provided by the BrineAir fluid system. + * be provided by the BrineCO2 fluid system. * The indices are chosen dependent on the policy, * i.e. if a simplified pseudo component Brine is * used or salt is considered an individual component. @@ -105,17 +107,23 @@ struct BrineCO2DefaultPolicy * \note This implementation always assumes NaCl stays in the liquid phase. */ template< class Scalar, - class CO2Table, + class CO2Impl = Components::SimpleCO2<Scalar>, class H2OType = Components::TabulatedComponent<Components::H2O<Scalar>>, class Policy = BrineCO2DefaultPolicy</*constantSalinity?*/true> > class BrineCO2 -: public Base<Scalar, BrineCO2<Scalar, CO2Table, H2OType, Policy>> +: public Base<Scalar, BrineCO2<Scalar, CO2Impl, H2OType, Policy>> , public Detail::BrineCO2Indices<Policy::useConstantSalinity()> { - using ThisType = BrineCO2<Scalar, CO2Table, H2OType, Policy>; + using ThisType = BrineCO2<Scalar, CO2Impl, H2OType, Policy>; + + static constexpr bool rawCO2Table = Deprecated::BrineCO2Helper<CO2Impl>::isRawTable(); + + using CO2Component = typename std::conditional_t< rawCO2Table, + Components::CO2<Scalar, CO2Impl>, + CO2Impl >; // binary coefficients - using Brine_CO2 = BinaryCoeff::Brine_CO2<Scalar, CO2Table>; + using Brine_CO2 = BinaryCoeff::Brine_CO2<Scalar, CO2Component>; // use constant salinity brine? static constexpr bool useConstantSalinity = Policy::useConstantSalinity(); @@ -144,7 +152,7 @@ public: using H2O = H2OType; using Brine = BrineType; - using CO2 = Dumux::Components::CO2<Scalar, CO2Table>; + using CO2 = CO2Component; static constexpr int numComponents = useConstantSalinity ? 2 : 3; static constexpr int numPhases = 2; diff --git a/examples/biomineralization/.doc_config b/examples/biomineralization/.doc_config index b00f4f51785bbac41878c723670fc865b731c319..add9aec8751bf8aa6f2ce3a8a5eddf25c28907cc 100644 --- a/examples/biomineralization/.doc_config +++ b/examples/biomineralization/.doc_config @@ -21,7 +21,6 @@ "doc/fluidmaterial.md" : [ "doc/fluidmaterial_intro.md", - "material/co2tables.hh", "material/components/suspendedbiomass.hh", "material/fluidsystems/biominsimplechemistry.hh", "material/fluidsystems/icpcomplexsalinitybrine.hh" diff --git a/examples/biomineralization/README.md b/examples/biomineralization/README.md index 540241ed00535b24be9fcff3393858e675a4d96d..e1fde8857a4d078c99e639890c01bf550c592023 100644 --- a/examples/biomineralization/README.md +++ b/examples/biomineralization/README.md @@ -120,9 +120,8 @@ We will discuss the different parts of the code in detail subsequently. ├── fluidsystems/ │ ├── biominsimplechemistry.hh │ └── icpcomplexsalinitybrine.hh - ├── solidsystems/ - │ └── biominsolids.hh - └── co2tables.hh + └── solidsystems/ + └── biominsolids.hh ``` In order to define a simulation setup in DuMu<sup>x</sup>, you need to implement compile-time settings, @@ -149,7 +148,6 @@ Similar strategies might be useful when simulating experimental setups with boun __Part 4__ discusses the code concerned with the fluid (files in the folder `material/`), especially the multi-component fluidsystems. -The CO<sub>2</sub> properties are stored in the CO<sub>2</sub> tables in the subfolder `material` (`co2tables.hh`,`co2values.inc`). __Part 5__ discusses the code concerned with the solid properties (files in the folder `material/`), especially the multi-component solidsystems and variable solid volume fractions. diff --git a/examples/biomineralization/doc/_intro.md b/examples/biomineralization/doc/_intro.md index 6e651d688ed268381cc86c4ea047dd44ac2b0d90..cb78a4e829b099eb758b88787887cdc5eefffaba 100644 --- a/examples/biomineralization/doc/_intro.md +++ b/examples/biomineralization/doc/_intro.md @@ -118,9 +118,8 @@ We will discuss the different parts of the code in detail subsequently. ├── fluidsystems/ │ ├── biominsimplechemistry.hh │ └── icpcomplexsalinitybrine.hh - ├── solidsystems/ - │ └── biominsolids.hh - └── co2tables.hh + └── solidsystems/ + └── biominsolids.hh ``` In order to define a simulation setup in DuMu<sup>x</sup>, you need to implement compile-time settings, @@ -147,7 +146,6 @@ Similar strategies might be useful when simulating experimental setups with boun __Part 4__ discusses the code concerned with the fluid (files in the folder `material/`), especially the multi-component fluidsystems. -The CO<sub>2</sub> properties are stored in the CO<sub>2</sub> tables in the subfolder `material` (`co2tables.hh`,`co2values.inc`). __Part 5__ discusses the code concerned with the solid properties (files in the folder `material/`), especially the multi-component solidsystems and variable solid volume fractions. diff --git a/examples/biomineralization/doc/fluidmaterial.md b/examples/biomineralization/doc/fluidmaterial.md index 4cb7bec6d56559a18455e6497fa3ca095e4eab77..bc7cf70850d9f4c982e95a7f407f4143020ef8cc 100644 --- a/examples/biomineralization/doc/fluidmaterial.md +++ b/examples/biomineralization/doc/fluidmaterial.md @@ -30,7 +30,7 @@ For further specialization, the overview over the material subfolder is split in ## Fluids in the folder `material` As this example is about biomineralization involving many components with complex inteactions, some specific fluid material files are necessary. -A CO_2-Table file provides tabulated CO_2 properties according to @Span1996 in `material/co2tables.hh` +This example uses a simplified version of CO<sub>2</sub> mostly based on an ideal gas assumption. In the component subfolder, `material/components/suspendedbiomass.hh` defines the component suspended biomass, which is the mobile form of biomass being transported suspended in the aqueous fluid phase. In the fluidsystem subfolder, the biomineralization fluidsystem `material/fluidsystems/biominsimplechemistry.hh` as well as the complex salinity brine adapter `material/fluidsystems/icpcomplexsalinitybrine.hh` can be found. @@ -45,184 +45,6 @@ The subsequent documentation is structured as follows: [[_TOC_]] -[@Span1996]: https://aip.scitation.org/doi/abs/10.1063/1.555991 "A new equation of state for carbon dioxide covering the fluid region from the triple-point temperature to 1100 K at pressures up to 800 MPa" - - - -```cpp -/*! - * \file - * \ingroup Components - * \brief A reader and tables for CO$_2$ tabulated material laws that depend - * on pressure and temperature. - */ - - -#include <dune/common/float_cmp.hh> -``` - -## The CO2 tables (`co2tables.hh`) - -This file contains the __co2table class__ which forwards to tabulated properties of CO2. -The tables are generated using the NIST (National Institute of Standards -and Technology) Standard Reference Database Number 69 -(https://doi.org/10.18434/T4D303). - -Copyright for NIST Standard Reference Data is governed by the Standard -Reference Data Act (https://www.nist.gov/srd/public-law). - -###################################################################### -In case you are using this the data generated with this script -please cite the following publications: - -P.J. Linstrom and W.G. Mallard, Eds., -NIST Chemistry WebBook, NIST Standard Reference Database Number 69, -National Institute of Standards and Technology, Gaithersburg MD, 20899, -https://doi.org/10.18434/T4D303, (retrieved [insert date]). - -Span, Roland, and Wolfgang Wagner. -"A new equation of state for carbon dioxide covering -the fluid region from the tripleâ€point temperature -to 1100 K at pressures up to 800 MPa." -Journal of physical and chemical reference data 25.6 (1996): 1509-1596. -https://doi.org/10.1063/1.555991 - -###################################################################### - -The density and the enthalpy are calculated using the equation of Span and -Wagner (2009 "A New Equation of State for Carbon Dioxide Covering the Fluid -Region from the Triple-Point Temperature to 1100 K at Pressures up to 800 MPa"). -Therefore, the maximum pressure limit is the lowest of the following values: -* 800.0000 MPa -* The pressure at which a density of 1178.5 kg/m3 is reached. - - -<details open> -<summary><b>Click to hide/show the file documentation</b> (or inspect the [source code](../material/co2tables.hh))</summary> - - - -```cpp - -namespace Dumux::BiomineralizationCO2Tables { - -/*! - * \ingroup Components - * \brief A generic template for tabulated material laws that depend - * on two parameters. - */ -template <class Traits> -class TabulatedProperties -{ - using Scalar = typename Traits::Scalar; - - static constexpr auto numTempSteps = Traits::numTempSteps; - static constexpr auto numPressSteps = Traits::numPressSteps; - -public: - TabulatedProperties() = default; - - constexpr Scalar minTemp() const { return Traits::minTemp; } - constexpr Scalar maxTemp() const { return Traits::maxTemp; } - constexpr Scalar minPress() const { return Traits::minPress; } - constexpr Scalar maxPress() const { return Traits::maxPress; } - - constexpr bool applies(Scalar temperature, Scalar pressure) const - { - return minTemp() <= temperature && temperature <= maxTemp() && - minPress() <= pressure && pressure <= maxPress(); - } - - constexpr Scalar at(Scalar temperature, Scalar pressure) const - { - if (!applies(temperature, pressure)) - { - if (temperature<minTemp()) temperature = minTemp(); - else if (temperature>maxTemp()) temperature = maxTemp(); - - if (pressure<minPress()) pressure = minPress(); - else if (pressure>maxPress()) pressure = maxPress(); - } - - const int i = findTempIdx_(temperature); - const int j = findPressIdx_(pressure); - - const Scalar tempAtI = temperatureAt_(i); - const Scalar tempAtI1 = temperatureAt_(i + 1); - const Scalar pressAtI = pressureAt_(j); - const Scalar pressAtI1 = pressureAt_(j + 1); - - const Scalar alpha = (temperature - tempAtI)/(tempAtI1 - tempAtI); - const Scalar beta = (pressure - pressAtI)/(pressAtI1 - pressAtI); - - // bi-linear interpolation - const Scalar lowresValue = - (1-alpha)*(1-beta)*val(i, j) + - (1-alpha)*( beta)*val(i, j + 1) + - ( alpha)*(1-beta)*val(i + 1, j) + - ( alpha)*( beta)*val(i + 1, j + 1); - - // return the weighted sum of the low- and high-resolution values - return lowresValue; - } - - constexpr Scalar val(int i, int j) const - { return Traits::vals[i][j]; } - -private: - constexpr int findTempIdx_(Scalar temperature) const - { - if (Dune::FloatCmp::eq<Scalar>(temperature, maxTemp())) - return numTempSteps - 2; - - const int result = static_cast<int>((temperature - minTemp())/(maxTemp() - minTemp())*(numTempSteps - 1)); - - using std::clamp; - return clamp(result, 0, numTempSteps - 2); - } - - constexpr int findPressIdx_(Scalar pressure) const - { - if (Dune::FloatCmp::eq<Scalar>(pressure, maxPress())) - return numPressSteps - 2; - - const int result = static_cast<int>((pressure - minPress())/(maxPress() - minPress())*(numPressSteps - 1)); - - using std::clamp; - return clamp(result, 0, numPressSteps - 2); - } - - constexpr Scalar temperatureAt_(int i) const - { return i*(maxTemp() - minTemp())/(numTempSteps - 1) + minTemp(); } - - constexpr Scalar pressureAt_(int j) const - { return j*(maxPress() - minPress())/(numPressSteps - 1) + minPress(); } -}; - -#ifndef DOXYGEN // hide from doxygen -// the real work is done by some external program which provides -// ready-to-use tables. -#include "co2values.inc" - - -using TabulatedDensity = TabulatedProperties<TabulatedDensityTraits>; -using TabulatedEnthalpy = TabulatedProperties<TabulatedEnthalpyTraits>; - -// this class collects all the tabulated quantities in one convenient place -struct CO2Tables -{ - static constexpr inline TabulatedEnthalpy tabulatedEnthalpy = {}; - static constexpr inline TabulatedDensity tabulatedDensity = {}; -}; - -} // end namespace Dumux::GeneratedCO2Tables -``` - - -</details> - - - ## The suspended biomass component (`suspendedbiomass.hh`) This file contains the __ component class__ which defines the name and molar mass of suspended biomass @@ -337,12 +159,12 @@ We enter the namespace Dumux. All Dumux functions and classes are in a namespace namespace Dumux::FluidSystems { template <class Scalar, - class CO2Table, + class CO2Impl = Components::SimpleCO2<Scalar>, class H2OType = Components::TabulatedComponent<Components::H2O<Scalar>> > class BioMinSimpleChemistryFluid -: public Base<Scalar, BioMinSimpleChemistryFluid<Scalar, CO2Table, H2OType> > +: public Base<Scalar, BioMinSimpleChemistryFluid<Scalar, CO2Impl, H2OType> > { - using ThisType = BioMinSimpleChemistryFluid<Scalar, CO2Table, H2OType>; + using ThisType = BioMinSimpleChemistryFluid<Scalar, CO2Impl, H2OType>; using Base = Dumux::FluidSystems::Base<Scalar, ThisType>; using IdealGas = Dumux::IdealGas<Scalar>; ``` @@ -354,7 +176,7 @@ With the following function we define what phases and components will be used by ```cpp public: // We use convenient declarations that we derive from the property system - typedef Components::CO2<Scalar, CO2Table> CO2; + using CO2 = CO2Impl; using H2O = H2OType; // export the underlying brine fluid system for the liquid phase, as brine is used as a "pseudo component" using Brine = Dumux::FluidSystems::ICPComplexSalinityBrine<Scalar, H2OType>; @@ -367,7 +189,7 @@ public: using SuspendedBiomass = Components::SuspendedBiomass<Scalar>; // We define the binary coefficients file, which accounts for the interactions of the main fluids in our setup, water/brine and CO2 - using Brine_CO2 = BinaryCoeff::Brine_CO2<Scalar, CO2Table, true>; + using Brine_CO2 = BinaryCoeff::Brine_CO2<Scalar, CO2Impl, true>; // the type of parameter cache objects. this fluid system does not // cache anything, so it uses Dumux::NullParameterCache diff --git a/examples/biomineralization/doc/fluidmaterial_intro.md b/examples/biomineralization/doc/fluidmaterial_intro.md index 5bd010706cc6c061bd6ce5ecd1185c44206ecc42..eb918ee2f4afd85867266d82b79f76d671094783 100644 --- a/examples/biomineralization/doc/fluidmaterial_intro.md +++ b/examples/biomineralization/doc/fluidmaterial_intro.md @@ -24,7 +24,7 @@ For further specialization, the overview over the material subfolder is split in ## Fluids in the folder `material` As this example is about biomineralization involving many components with complex inteactions, some specific fluid material files are necessary. -A CO_2-Table file provides tabulated CO_2 properties according to @Span1996 in `material/co2tables.hh` +This example uses a simplified version of CO<sub>2</sub> mostly based on an ideal gas assumption. In the component subfolder, `material/components/suspendedbiomass.hh` defines the component suspended biomass, which is the mobile form of biomass being transported suspended in the aqueous fluid phase. In the fluidsystem subfolder, the biomineralization fluidsystem `material/fluidsystems/biominsimplechemistry.hh` as well as the complex salinity brine adapter `material/fluidsystems/icpcomplexsalinitybrine.hh` can be found. @@ -37,6 +37,3 @@ adapts the brine fluidsystem (dumux/dumux/material/fluidsystems/brine.hh) expect The subsequent documentation is structured as follows: [[_TOC_]] - - -[@Span1996]: https://aip.scitation.org/doi/abs/10.1063/1.555991 "A new equation of state for carbon dioxide covering the fluid region from the triple-point temperature to 1100 K at pressures up to 800 MPa" diff --git a/examples/biomineralization/doc/modelconcept.md b/examples/biomineralization/doc/modelconcept.md index e918be0508341dc952674133cc854eccdafb0b86..d31c4b6f218b54e279c1ea5d5e8420a976922dc4 100644 --- a/examples/biomineralization/doc/modelconcept.md +++ b/examples/biomineralization/doc/modelconcept.md @@ -228,8 +228,10 @@ the volume fractions of biofilm and calcite increase: ## Fluid properties -The density and the viscosity of the CO<sub>2</sub> phase are calculated using -the relation given by [@Span1996] and [@Fenghour1998] respectively. +The density of the CO<sub>2</sub> phase is calculated using +an ideal gas assumption as the pressures are low enough. +The viscosity of the CO<sub>2</sub> phase is calculated using +the relation given by [@Fenghour1998]. In these calculations, the effects of the small amounts of water and oxygen are neglected. The density and the viscosity of the aqueous phase are calculated according to [@Batzle1992] as a function of salinity. @@ -264,7 +266,6 @@ For the solubility of oxygen in the aqueous phase, Henry's law is used. [@Hommel2016]: https://elib.uni-stuttgart.de/handle/11682/8787 "Modelling biogeochemical and mass transport processes in the subsurface: investigation of microbially induced calcite precipitation" [@Lauchnor2015]: http://dx.doi.org/10.1111/jam.12804 "Whole cell kinetics of ureolysis by Sporosarcina pasteurii" [@Mitchell2008]: https://www.sciencedirect.com/science/article/pii/S0896844608002040 "Resilience of planktonic and biofilm cultures to supercritical CO<sub>2</sub>" -[@Span1996]: https://aip.scitation.org/doi/abs/10.1063/1.555991 "A new equation of state for carbon dioxide covering the fluid region from the triple-point temperature to 1100 K at pressures up to 800 MPa" | [:arrow_left: Back to the main documentation](../README.md) | [:arrow_right: Continue with part 2](mainfile.md) | |---|---:| diff --git a/examples/biomineralization/doc/modelconcept_intro.md b/examples/biomineralization/doc/modelconcept_intro.md index 68d6ca11b45e66b5aca7f97753302e0ee58f7fcb..fb953e4992b6361b8bc7150a7aafb9e7d37aa7c2 100644 --- a/examples/biomineralization/doc/modelconcept_intro.md +++ b/examples/biomineralization/doc/modelconcept_intro.md @@ -222,8 +222,10 @@ the volume fractions of biofilm and calcite increase: ## Fluid properties -The density and the viscosity of the CO<sub>2</sub> phase are calculated using -the relation given by [@Span1996] and [@Fenghour1998] respectively. +The density of the CO<sub>2</sub> phase is calculated using +an ideal gas assumption as the pressures are low enough. +The viscosity of the CO<sub>2</sub> phase is calculated using +the relation given by [@Fenghour1998]. In these calculations, the effects of the small amounts of water and oxygen are neglected. The density and the viscosity of the aqueous phase are calculated according to [@Batzle1992] as a function of salinity. @@ -258,4 +260,3 @@ For the solubility of oxygen in the aqueous phase, Henry's law is used. [@Hommel2016]: https://elib.uni-stuttgart.de/handle/11682/8787 "Modelling biogeochemical and mass transport processes in the subsurface: investigation of microbially induced calcite precipitation" [@Lauchnor2015]: http://dx.doi.org/10.1111/jam.12804 "Whole cell kinetics of ureolysis by Sporosarcina pasteurii" [@Mitchell2008]: https://www.sciencedirect.com/science/article/pii/S0896844608002040 "Resilience of planktonic and biofilm cultures to supercritical CO<sub>2</sub>" -[@Span1996]: https://aip.scitation.org/doi/abs/10.1063/1.555991 "A new equation of state for carbon dioxide covering the fluid region from the triple-point temperature to 1100 K at pressures up to 800 MPa" diff --git a/examples/biomineralization/doc/setup.md b/examples/biomineralization/doc/setup.md index 7825d24cdbc06339a9ebe54b00d042620825a578..52f5a8ec59b4025d8882d0bcabc1e5124f05b53b 100644 --- a/examples/biomineralization/doc/setup.md +++ b/examples/biomineralization/doc/setup.md @@ -815,6 +815,7 @@ modify or for which no meaningful default can be set. ```cpp #include <dumux/common/properties.hh> +#include <dumux/material/components/simpleco2.hh> #include <dumux/porousmediumflow/2pncmin/model.hh> ``` @@ -835,7 +836,6 @@ We include the necessary material files ```cpp #include <examples/biomineralization/material/fluidsystems/biominsimplechemistry.hh> #include <examples/biomineralization/material/solidsystems/biominsolids.hh> -#include <examples/biomineralization/material/co2tables.hh> ``` We include the problem and spatial parameters headers used for this simulation. @@ -886,9 +886,9 @@ template<class TypeTag> struct FluidSystem<TypeTag, TTag::MICPColumnSimpleChemistry> { using Scalar = GetPropType<TypeTag, Properties::Scalar>; - using CO2Tables = BiomineralizationCO2Tables::CO2Tables; + using CO2Impl = Components::SimpleCO2<Scalar>; using H2OTabulated = Components::TabulatedComponent<Components::H2O<Scalar>>; - using type = Dumux::FluidSystems::BioMinSimpleChemistryFluid<Scalar, CO2Tables, H2OTabulated>; + using type = Dumux::FluidSystems::BioMinSimpleChemistryFluid<Scalar, CO2Impl, H2OTabulated>; }; // We set the solidSystem used for our simulation diff --git a/examples/biomineralization/doc/solidmaterial.md b/examples/biomineralization/doc/solidmaterial.md index 3662b2fec8f7431b94dbd962e7bab82b21b64482..009ccb6d81ee443338be9b8c25f6930c5fd9a2d4 100644 --- a/examples/biomineralization/doc/solidmaterial.md +++ b/examples/biomineralization/doc/solidmaterial.md @@ -41,9 +41,6 @@ The subsequent documentation is structured as follows: [[_TOC_]] -[@Span1996]: https://aip.scitation.org/doi/abs/10.1063/1.555991 "A new equation of state for carbon dioxide covering the fluid region from the triple-point temperature to 1100 K at pressures up to 800 MPa" - - ## The biofilm component (`biofilm.hh`) This file contains the __solid component class__ which defines the name, molar mass and density of biofilm diff --git a/examples/biomineralization/doc/solidmaterial_intro.md b/examples/biomineralization/doc/solidmaterial_intro.md index 8e223b463d74a85d1ccbbb0a10e7af94889c3905..6fc0d7b67093a8384b6bd7faaed209ba8c4d6b00 100644 --- a/examples/biomineralization/doc/solidmaterial_intro.md +++ b/examples/biomineralization/doc/solidmaterial_intro.md @@ -33,6 +33,3 @@ calculate the resulting average solid properties based on the solids volume frac The subsequent documentation is structured as follows: [[_TOC_]] - - -[@Span1996]: https://aip.scitation.org/doi/abs/10.1063/1.555991 "A new equation of state for carbon dioxide covering the fluid region from the triple-point temperature to 1100 K at pressures up to 800 MPa" diff --git a/examples/biomineralization/material/co2tables.hh b/examples/biomineralization/material/co2tables.hh deleted file mode 100644 index 4c8c7be6567f82c8f8ec6db59c7c6ca411c6cd35..0000000000000000000000000000000000000000 --- a/examples/biomineralization/material/co2tables.hh +++ /dev/null @@ -1,184 +0,0 @@ -// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- -// vi: set et ts=4 sw=4 sts=4: -/***************************************************************************** - * See the file COPYING for full copying permissions. * - * * - * This program is free software: you can redistribute it and/or modify * - * it under the terms of the GNU General Public License as published by * - * the Free Software Foundation, either version 3 of the License, or * - * (at your option) any later version. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License * - * along with this program. If not, see <http://www.gnu.org/licenses/>. * - *****************************************************************************/ -/*! - * \file - * \ingroup Components - * \brief A reader and tables for CO$_2$ tabulated material laws that depend - * on pressure and temperature. - */ -#ifndef DUMUX_EXAMPLE_BIOMINERALIZATION_CO2TABLES_HH -#define DUMUX_EXAMPLE_BIOMINERALIZATION_CO2TABLES_HH - -#include <dune/common/float_cmp.hh> - -// ## The CO2 tables (`co2tables.hh`) -// -// This file contains the __co2table class__ which forwards to tabulated properties of CO2. -// The tables are generated using the NIST (National Institute of Standards -// and Technology) Standard Reference Database Number 69 -// (https://doi.org/10.18434/T4D303). -// -// Copyright for NIST Standard Reference Data is governed by the Standard -// Reference Data Act (https://www.nist.gov/srd/public-law). -// -// ###################################################################### -// In case you are using this the data generated with this script -// please cite the following publications: -// -// P.J. Linstrom and W.G. Mallard, Eds., -// NIST Chemistry WebBook, NIST Standard Reference Database Number 69, -// National Institute of Standards and Technology, Gaithersburg MD, 20899, -// https://doi.org/10.18434/T4D303, (retrieved [insert date]). -// -// Span, Roland, and Wolfgang Wagner. -// "A new equation of state for carbon dioxide covering -// the fluid region from the tripleâ€point temperature -// to 1100 K at pressures up to 800 MPa." -// Journal of physical and chemical reference data 25.6 (1996): 1509-1596. -// https://doi.org/10.1063/1.555991 -// -// ###################################################################### -// -// The density and the enthalpy are calculated using the equation of Span and -// Wagner (2009 "A New Equation of State for Carbon Dioxide Covering the Fluid -// Region from the Triple-Point Temperature to 1100 K at Pressures up to 800 MPa"). -// Therefore, the maximum pressure limit is the lowest of the following values: -// * 800.0000 MPa -// * The pressure at which a density of 1178.5 kg/m3 is reached. -// -// [[content]] -// -// [[codeblock]] - -namespace Dumux::BiomineralizationCO2Tables { - -/*! - * \ingroup Components - * \brief A generic template for tabulated material laws that depend - * on two parameters. - */ -template <class Traits> -class TabulatedProperties -{ - using Scalar = typename Traits::Scalar; - - static constexpr auto numTempSteps = Traits::numTempSteps; - static constexpr auto numPressSteps = Traits::numPressSteps; - -public: - TabulatedProperties() = default; - - constexpr Scalar minTemp() const { return Traits::minTemp; } - constexpr Scalar maxTemp() const { return Traits::maxTemp; } - constexpr Scalar minPress() const { return Traits::minPress; } - constexpr Scalar maxPress() const { return Traits::maxPress; } - - constexpr bool applies(Scalar temperature, Scalar pressure) const - { - return minTemp() <= temperature && temperature <= maxTemp() && - minPress() <= pressure && pressure <= maxPress(); - } - - constexpr Scalar at(Scalar temperature, Scalar pressure) const - { - if (!applies(temperature, pressure)) - { - if (temperature<minTemp()) temperature = minTemp(); - else if (temperature>maxTemp()) temperature = maxTemp(); - - if (pressure<minPress()) pressure = minPress(); - else if (pressure>maxPress()) pressure = maxPress(); - } - - const int i = findTempIdx_(temperature); - const int j = findPressIdx_(pressure); - - const Scalar tempAtI = temperatureAt_(i); - const Scalar tempAtI1 = temperatureAt_(i + 1); - const Scalar pressAtI = pressureAt_(j); - const Scalar pressAtI1 = pressureAt_(j + 1); - - const Scalar alpha = (temperature - tempAtI)/(tempAtI1 - tempAtI); - const Scalar beta = (pressure - pressAtI)/(pressAtI1 - pressAtI); - - // bi-linear interpolation - const Scalar lowresValue = - (1-alpha)*(1-beta)*val(i, j) + - (1-alpha)*( beta)*val(i, j + 1) + - ( alpha)*(1-beta)*val(i + 1, j) + - ( alpha)*( beta)*val(i + 1, j + 1); - - // return the weighted sum of the low- and high-resolution values - return lowresValue; - } - - constexpr Scalar val(int i, int j) const - { return Traits::vals[i][j]; } - -private: - constexpr int findTempIdx_(Scalar temperature) const - { - if (Dune::FloatCmp::eq<Scalar>(temperature, maxTemp())) - return numTempSteps - 2; - - const int result = static_cast<int>((temperature - minTemp())/(maxTemp() - minTemp())*(numTempSteps - 1)); - - using std::clamp; - return clamp(result, 0, numTempSteps - 2); - } - - constexpr int findPressIdx_(Scalar pressure) const - { - if (Dune::FloatCmp::eq<Scalar>(pressure, maxPress())) - return numPressSteps - 2; - - const int result = static_cast<int>((pressure - minPress())/(maxPress() - minPress())*(numPressSteps - 1)); - - using std::clamp; - return clamp(result, 0, numPressSteps - 2); - } - - constexpr Scalar temperatureAt_(int i) const - { return i*(maxTemp() - minTemp())/(numTempSteps - 1) + minTemp(); } - - constexpr Scalar pressureAt_(int j) const - { return j*(maxPress() - minPress())/(numPressSteps - 1) + minPress(); } -}; - -#ifndef DOXYGEN // hide from doxygen -// the real work is done by some external program which provides -// ready-to-use tables. -#include "co2values.inc" -#endif - -using TabulatedDensity = TabulatedProperties<TabulatedDensityTraits>; -using TabulatedEnthalpy = TabulatedProperties<TabulatedEnthalpyTraits>; - -// this class collects all the tabulated quantities in one convenient place -struct CO2Tables -{ - static constexpr inline TabulatedEnthalpy tabulatedEnthalpy = {}; - static constexpr inline TabulatedDensity tabulatedDensity = {}; -}; - -} // end namespace Dumux::GeneratedCO2Tables -// [[/codeblock]] -// [[/content]] - -#endif diff --git a/examples/biomineralization/material/co2values.inc b/examples/biomineralization/material/co2values.inc deleted file mode 100644 index 434b1a2e3a2d042eb4b2447ad30c7476590b7284..0000000000000000000000000000000000000000 --- a/examples/biomineralization/material/co2values.inc +++ /dev/null @@ -1,78 +0,0 @@ -/* Tables for CO2 fluid properties calculated according to Span and - * Wagner (1996) and using a web service of the National Institute - * of Standards and Techlology of the U.S. Department of Commerce: - * https://webbook.nist.gov/ - * - * THIS AN AUTO-GENERATED FILE! DO NOT EDIT IT! - * - ******************************************************************** - - In case you are using this the data generated with this script - please cite the following publications: - - P.J. Linstrom and W.G. Mallard, Eds., - NIST Chemistry WebBook, NIST Standard Reference Database Number 69, - National Institute of Standards and Technology, Gaithersburg MD, 20899, - https://doi.org/10.18434/T4D303, (retrieved April 25, 2022). - - Span, Roland, and Wolfgang Wagner. - "A new equation of state for carbon dioxide covering - the fluid region from the tripleâ€point temperature - to 1100 K at pressures up to 800 MPa." - Journal of physical and chemical reference data 25.6 (1996): 1509-1596. - https://doi.org/10.1063/1.555991 - - ******************************************************************** - * - * Generated using: - * - * ./make_co2_table.py -t1 293.15 -t2 303.15 -nt 10 -p1 95000.0 -p2 145000.0 -np 50 - */ - -struct TabulatedDensityTraits -{ - using Scalar = double; - static constexpr std::string_view name = "density"; - static constexpr int numTempSteps = 10; - static constexpr Scalar minTemp = 293.15; - static constexpr Scalar maxTemp = 303.15; - static constexpr int numPressSteps = 50; - static constexpr Scalar minPress = 95000.0; - static constexpr Scalar maxPress = 145000.0; - static constexpr Scalar vals[numTempSteps][numPressSteps] = { - {1.723948306030e+00, 1.742559905290e+00, 1.761173529270e+00, 1.779789178530e+00, 1.798406853630e+00, 1.817026555130e+00, 1.835648283590e+00, 1.854272039590e+00, 1.872897823680e+00, 1.891525636430e+00, 1.910155478410e+00, 1.928787350180e+00, 1.947421252310e+00, 1.966057185360e+00, 1.984695149890e+00, 2.003335146480e+00, 2.021977175690e+00, 2.040621238090e+00, 2.059267334250e+00, 2.077915464720e+00, 2.096565630090e+00, 2.115217830910e+00, 2.133872067760e+00, 2.152528341200e+00, 2.171186651800e+00, 2.189847000140e+00, 2.208509386770e+00, 2.227173812280e+00, 2.245840277220e+00, 2.264508782180e+00, 2.283179327710e+00, 2.301851914390e+00, 2.320526542790e+00, 2.339203213480e+00, 2.357881927040e+00, 2.376562684030e+00, 2.395245485020e+00, 2.413930330590e+00, 2.432617221310e+00, 2.451306157750e+00, 2.469997140490e+00, 2.488690170090e+00, 2.507385247140e+00, 2.526082372190e+00, 2.544781545840e+00, 2.563482768650e+00, 2.582186041190e+00, 2.600891364050e+00, 2.619598737790e+00, 2.638308162990e+00}, - {1.717331325170e+00, 1.735870305270e+00, 1.754411276690e+00, 1.772954239980e+00, 1.791499195680e+00, 1.810046144340e+00, 1.828595086510e+00, 1.847146022730e+00, 1.865698953550e+00, 1.884253879520e+00, 1.902810801180e+00, 1.921369719090e+00, 1.939930633780e+00, 1.958493545810e+00, 1.977058455730e+00, 1.995625364080e+00, 2.014194271410e+00, 2.032765178280e+00, 2.051338085230e+00, 2.069912992810e+00, 2.088489901570e+00, 2.107068812060e+00, 2.125649724840e+00, 2.144232640440e+00, 2.162817559430e+00, 2.181404482350e+00, 2.199993409760e+00, 2.218584342200e+00, 2.237177280240e+00, 2.255772224410e+00, 2.274369175270e+00, 2.292968133380e+00, 2.311569099290e+00, 2.330172073550e+00, 2.348777056710e+00, 2.367384049330e+00, 2.385993051960e+00, 2.404604065150e+00, 2.423217089470e+00, 2.441832125450e+00, 2.460449173670e+00, 2.479068234670e+00, 2.497689309010e+00, 2.516312397240e+00, 2.534937499920e+00, 2.553564617610e+00, 2.572193750860e+00, 2.590824900220e+00, 2.609458066260e+00, 2.628093249540e+00}, - {1.710765836600e+00, 1.729232781450e+00, 1.747701684910e+00, 1.766172547500e+00, 1.784645369750e+00, 1.803120152200e+00, 1.821596895360e+00, 1.840075599780e+00, 1.858556265980e+00, 1.877038894490e+00, 1.895523485840e+00, 1.914010040560e+00, 1.932498559180e+00, 1.950989042240e+00, 1.969481490260e+00, 1.987975903780e+00, 2.006472283330e+00, 2.024970629430e+00, 2.043470942630e+00, 2.061973223460e+00, 2.080477472440e+00, 2.098983690110e+00, 2.117491877000e+00, 2.136002033650e+00, 2.154514160590e+00, 2.173028258350e+00, 2.191544327480e+00, 2.210062368490e+00, 2.228582381930e+00, 2.247104368330e+00, 2.265628328230e+00, 2.284154262160e+00, 2.302682170660e+00, 2.321212054260e+00, 2.339743913500e+00, 2.358277748910e+00, 2.376813561030e+00, 2.395351350400e+00, 2.413891117560e+00, 2.432432863040e+00, 2.450976587370e+00, 2.469522291110e+00, 2.488069974780e+00, 2.506619638920e+00, 2.525171284070e+00, 2.543724910760e+00, 2.562280519550e+00, 2.580838110970e+00, 2.599397685550e+00, 2.617959243830e+00}, - {1.704251226290e+00, 1.722646712460e+00, 1.741044125190e+00, 1.759443464970e+00, 1.777844732320e+00, 1.796247927750e+00, 1.814653051780e+00, 1.833060104920e+00, 1.851469087680e+00, 1.869880000580e+00, 1.888292844130e+00, 1.906707618840e+00, 1.925124325230e+00, 1.943542963810e+00, 1.961963535100e+00, 1.980386039620e+00, 1.998810477870e+00, 2.017236850370e+00, 2.035665157650e+00, 2.054095400200e+00, 2.072527578560e+00, 2.090961693240e+00, 2.109397744750e+00, 2.127835733610e+00, 2.146275660330e+00, 2.164717525440e+00, 2.183161329450e+00, 2.201607072890e+00, 2.220054756260e+00, 2.238504380080e+00, 2.256955944880e+00, 2.275409451170e+00, 2.293864899470e+00, 2.312322290300e+00, 2.330781624180e+00, 2.349242901630e+00, 2.367706123160e+00, 2.386171289310e+00, 2.404638400580e+00, 2.423107457500e+00, 2.441578460590e+00, 2.460051410360e+00, 2.478526307350e+00, 2.497003152070e+00, 2.515481945040e+00, 2.533962686790e+00, 2.552445377840e+00, 2.570930018700e+00, 2.589416609900e+00, 2.607905151970e+00}, - {1.697786890250e+00, 1.716111487110e+00, 1.734437979100e+00, 1.752766366720e+00, 1.771096650450e+00, 1.789428830800e+00, 1.807762908270e+00, 1.826098883340e+00, 1.844436756530e+00, 1.862776528320e+00, 1.881118199210e+00, 1.899461769710e+00, 1.917807240300e+00, 1.936154611500e+00, 1.954503883800e+00, 1.972855057690e+00, 1.991208133680e+00, 2.009563112260e+00, 2.027919993940e+00, 2.046278779210e+00, 2.064639468580e+00, 2.083002062550e+00, 2.101366561610e+00, 2.119732966270e+00, 2.138101277020e+00, 2.156471494380e+00, 2.174843618830e+00, 2.193217650890e+00, 2.211593591050e+00, 2.229971439810e+00, 2.248351197680e+00, 2.266732865160e+00, 2.285116442760e+00, 2.303501930960e+00, 2.321889330290e+00, 2.340278641240e+00, 2.358669864310e+00, 2.377063000010e+00, 2.395458048850e+00, 2.413855011320e+00, 2.432253887930e+00, 2.450654679190e+00, 2.469057385590e+00, 2.487462007660e+00, 2.505868545880e+00, 2.524277000760e+00, 2.542687372820e+00, 2.561099662560e+00, 2.579513870480e+00, 2.597929997080e+00}, - {1.691372234350e+00, 1.709626504170e+00, 1.727882638330e+00, 1.746140637300e+00, 1.764400501570e+00, 1.782662231610e+00, 1.800925827910e+00, 1.819191290960e+00, 1.837458621220e+00, 1.855727819200e+00, 1.873998885360e+00, 1.892271820190e+00, 1.910546624170e+00, 1.928823297790e+00, 1.947101841530e+00, 1.965382255880e+00, 1.983664541310e+00, 2.001948698320e+00, 2.020234727380e+00, 2.038522628980e+00, 2.056812403610e+00, 2.075104051740e+00, 2.093397573870e+00, 2.111692970480e+00, 2.129990242050e+00, 2.148289389080e+00, 2.166590412040e+00, 2.184893311420e+00, 2.203198087710e+00, 2.221504741400e+00, 2.239813272970e+00, 2.258123682900e+00, 2.276435971700e+00, 2.294750139830e+00, 2.313066187790e+00, 2.331384116080e+00, 2.349703925160e+00, 2.368025615540e+00, 2.386349187710e+00, 2.404674642140e+00, 2.423001979330e+00, 2.441331199770e+00, 2.459662303940e+00, 2.477995292340e+00, 2.496330165460e+00, 2.514666923780e+00, 2.533005567800e+00, 2.551346098000e+00, 2.569688514870e+00, 2.588032818910e+00}, - {1.685006674100e+00, 1.703191172190e+00, 1.721377504430e+00, 1.739565671290e+00, 1.757755673230e+00, 1.775947510710e+00, 1.794141184220e+00, 1.812336694210e+00, 1.830534041140e+00, 1.848733225500e+00, 1.866934247740e+00, 1.885137108340e+00, 1.903341807760e+00, 1.921548346470e+00, 1.939756724930e+00, 1.957966943630e+00, 1.976179003020e+00, 1.994392903580e+00, 2.012608645770e+00, 2.030826230060e+00, 2.049045656930e+00, 2.067266926840e+00, 2.085490040270e+00, 2.103714997680e+00, 2.121941799540e+00, 2.140170446330e+00, 2.158400938510e+00, 2.176633276560e+00, 2.194867460940e+00, 2.213103492140e+00, 2.231341370610e+00, 2.249581096840e+00, 2.267822671290e+00, 2.286066094440e+00, 2.304311366760e+00, 2.322558488710e+00, 2.340807460780e+00, 2.359058283440e+00, 2.377310957150e+00, 2.395565482400e+00, 2.413821859660e+00, 2.432080089390e+00, 2.450340172080e+00, 2.468602108200e+00, 2.486865898220e+00, 2.505131542620e+00, 2.523399041860e+00, 2.541668396440e+00, 2.559939606810e+00, 2.578212673460e+00}, - {1.678689634460e+00, 1.696804909270e+00, 1.714921988650e+00, 1.733040873050e+00, 1.751161562910e+00, 1.769284058690e+00, 1.787408360840e+00, 1.805534469810e+00, 1.823662386060e+00, 1.841792110050e+00, 1.859923642210e+00, 1.878056983010e+00, 1.896192132900e+00, 1.914329092340e+00, 1.932467861780e+00, 1.950608441660e+00, 1.968750832460e+00, 1.986895034620e+00, 2.005041048590e+00, 2.023188874830e+00, 2.041338513810e+00, 2.059489965960e+00, 2.077643231750e+00, 2.095798311640e+00, 2.113955206070e+00, 2.132113915510e+00, 2.150274440410e+00, 2.168436781230e+00, 2.186600938420e+00, 2.204766912440e+00, 2.222934703760e+00, 2.241104312810e+00, 2.259275740080e+00, 2.277448986000e+00, 2.295624051040e+00, 2.313800935650e+00, 2.331979640300e+00, 2.350160165440e+00, 2.368342511540e+00, 2.386526679040e+00, 2.404712668410e+00, 2.422900480110e+00, 2.441090114590e+00, 2.459281572330e+00, 2.477474853760e+00, 2.495669959360e+00, 2.513866889590e+00, 2.532065644900e+00, 2.550266225760e+00, 2.568468632630e+00}, - {1.672420549580e+00, 1.690467142870e+00, 1.708515511710e+00, 1.726565656540e+00, 1.744617577810e+00, 1.762671275940e+00, 1.780726751390e+00, 1.798784004580e+00, 1.816843035960e+00, 1.834903845960e+00, 1.852966435030e+00, 1.871030803610e+00, 1.889096952130e+00, 1.907164881040e+00, 1.925234590770e+00, 1.943306081770e+00, 1.961379354470e+00, 1.979454409320e+00, 1.997531246750e+00, 2.015609867220e+00, 2.033690271150e+00, 2.051772459000e+00, 2.069856431190e+00, 2.087942188190e+00, 2.106029730410e+00, 2.124119058320e+00, 2.142210172340e+00, 2.160303072930e+00, 2.178397760520e+00, 2.196494235570e+00, 2.214592498500e+00, 2.232692549760e+00, 2.250794389810e+00, 2.268898019070e+00, 2.287003438000e+00, 2.305110647030e+00, 2.323219646620e+00, 2.341330437210e+00, 2.359443019230e+00, 2.377557393140e+00, 2.395673559380e+00, 2.413791518400e+00, 2.431911270630e+00, 2.450032816530e+00, 2.468156156540e+00, 2.486281291110e+00, 2.504408220670e+00, 2.522536945690e+00, 2.540667466600e+00, 2.558799783840e+00}, - {1.666198862710e+00, 1.684177309590e+00, 1.702157503580e+00, 1.720139445120e+00, 1.738123134620e+00, 1.756108572510e+00, 1.774095759220e+00, 1.792084695160e+00, 1.810075380780e+00, 1.828067816480e+00, 1.846062002710e+00, 1.864057939880e+00, 1.882055628420e+00, 1.900055068760e+00, 1.918056261320e+00, 1.936059206540e+00, 1.954063904830e+00, 1.972070356630e+00, 1.990078562360e+00, 2.008088522450e+00, 2.026100237330e+00, 2.044113707420e+00, 2.062128933160e+00, 2.080145914960e+00, 2.098164653270e+00, 2.116185148510e+00, 2.134207401100e+00, 2.152231411480e+00, 2.170257180080e+00, 2.188284707320e+00, 2.206313993630e+00, 2.224345039440e+00, 2.242377845190e+00, 2.260412411300e+00, 2.278448738210e+00, 2.296486826330e+00, 2.314526676110e+00, 2.332568287970e+00, 2.350611662340e+00, 2.368656799660e+00, 2.386703700360e+00, 2.404752364860e+00, 2.422802793610e+00, 2.440854987020e+00, 2.458908945530e+00, 2.476964669580e+00, 2.495022159590e+00, 2.513081416000e+00, 2.531142439240e+00, 2.549205229740e+00} - }; -}; - -struct TabulatedEnthalpyTraits -{ - using Scalar = double; - static constexpr std::string_view name = "enthalpy"; - static constexpr int numTempSteps = 10; - static constexpr Scalar minTemp = 293.15; - static constexpr Scalar maxTemp = 303.15; - static constexpr int numPressSteps = 50; - static constexpr Scalar minPress = 95000.0; - static constexpr Scalar maxPress = 145000.0; - static constexpr Scalar vals[numTempSteps][numPressSteps] = { - {1.678997536687e+04, 1.678012437187e+04, 1.677027245487e+04, 1.676041961487e+04, 1.675056585287e+04, 1.674071116687e+04, 1.673085555887e+04, 1.672099902587e+04, 1.671114156987e+04, 1.670128318987e+04, 1.669142388587e+04, 1.668156365687e+04, 1.667170250287e+04, 1.666184042487e+04, 1.665197742087e+04, 1.664211349187e+04, 1.663224863587e+04, 1.662238285487e+04, 1.661251614787e+04, 1.660264851387e+04, 1.659277995287e+04, 1.658291046487e+04, 1.657304005087e+04, 1.656316870787e+04, 1.655329643787e+04, 1.654342323987e+04, 1.653354911287e+04, 1.652367405787e+04, 1.651379807387e+04, 1.650392116087e+04, 1.649404331887e+04, 1.648416454787e+04, 1.647428484587e+04, 1.646440421487e+04, 1.645452265287e+04, 1.644464016087e+04, 1.643475673787e+04, 1.642487238387e+04, 1.641498709887e+04, 1.640510088187e+04, 1.639521373287e+04, 1.638532565287e+04, 1.637543663987e+04, 1.636554669387e+04, 1.635565581587e+04, 1.634576400487e+04, 1.633587125987e+04, 1.632597758187e+04, 1.631608296987e+04, 1.630618742387e+04}, - {1.773011562787e+04, 1.772034748787e+04, 1.771057844687e+04, 1.770080850487e+04, 1.769103766187e+04, 1.768126591687e+04, 1.767149327087e+04, 1.766171972387e+04, 1.765194527387e+04, 1.764216992187e+04, 1.763239366687e+04, 1.762261650987e+04, 1.761283844887e+04, 1.760305948487e+04, 1.759327961787e+04, 1.758349884687e+04, 1.757371717187e+04, 1.756393459287e+04, 1.755415110887e+04, 1.754436672087e+04, 1.753458142687e+04, 1.752479522887e+04, 1.751500812487e+04, 1.750522011587e+04, 1.749543119987e+04, 1.748564137787e+04, 1.747585064987e+04, 1.746605901587e+04, 1.745626647387e+04, 1.744647302587e+04, 1.743667866987e+04, 1.742688340687e+04, 1.741708723487e+04, 1.740729015587e+04, 1.739749216787e+04, 1.738769327187e+04, 1.737789346687e+04, 1.736809275287e+04, 1.735829112987e+04, 1.734848859687e+04, 1.733868515387e+04, 1.732888080187e+04, 1.731907553887e+04, 1.730926936587e+04, 1.729946228187e+04, 1.728965428687e+04, 1.727984538087e+04, 1.727003556287e+04, 1.726022483387e+04, 1.725041319287e+04}, - {1.867144821787e+04, 1.866176178387e+04, 1.865207447087e+04, 1.864238627787e+04, 1.863269720487e+04, 1.862300725187e+04, 1.861331641787e+04, 1.860362470287e+04, 1.859393210787e+04, 1.858423863087e+04, 1.857454427287e+04, 1.856484903287e+04, 1.855515291187e+04, 1.854545590787e+04, 1.853575802187e+04, 1.852605925287e+04, 1.851635960187e+04, 1.850665906687e+04, 1.849695764987e+04, 1.848725534887e+04, 1.847755216387e+04, 1.846784809487e+04, 1.845814314187e+04, 1.844843730487e+04, 1.843873058287e+04, 1.842902297587e+04, 1.841931448387e+04, 1.840960510687e+04, 1.839989484387e+04, 1.839018369587e+04, 1.838047166087e+04, 1.837075873987e+04, 1.836104493287e+04, 1.835133023887e+04, 1.834161465787e+04, 1.833189818987e+04, 1.832218083487e+04, 1.831246259187e+04, 1.830274346087e+04, 1.829302344187e+04, 1.828330253487e+04, 1.827358073887e+04, 1.826385805387e+04, 1.825413447987e+04, 1.824441001687e+04, 1.823468466487e+04, 1.822495842287e+04, 1.821523129087e+04, 1.820550326887e+04, 1.819577435587e+04}, - {1.961397238587e+04, 1.960436653387e+04, 1.959475982187e+04, 1.958515225187e+04, 1.957554382187e+04, 1.956593453187e+04, 1.955632438187e+04, 1.954671337287e+04, 1.953710150187e+04, 1.952748877087e+04, 1.951787517887e+04, 1.950826072687e+04, 1.949864541187e+04, 1.948902923687e+04, 1.947941219987e+04, 1.946979429987e+04, 1.946017553887e+04, 1.945055591487e+04, 1.944093542787e+04, 1.943131407887e+04, 1.942169186687e+04, 1.941206879087e+04, 1.940244485187e+04, 1.939282004987e+04, 1.938319438287e+04, 1.937356785187e+04, 1.936394045687e+04, 1.935431219687e+04, 1.934468307287e+04, 1.933505308287e+04, 1.932542222787e+04, 1.931579050787e+04, 1.930615792187e+04, 1.929652446987e+04, 1.928689015187e+04, 1.927725496687e+04, 1.926761891587e+04, 1.925798199887e+04, 1.924834421387e+04, 1.923870556187e+04, 1.922906604187e+04, 1.921942565487e+04, 1.920978439987e+04, 1.920014227687e+04, 1.919049928487e+04, 1.918085542487e+04, 1.917121069587e+04, 1.916156509787e+04, 1.915191863087e+04, 1.914227129387e+04}, - {2.055768731187e+04, 2.054816093787e+04, 2.053863372487e+04, 2.052910567287e+04, 2.051957678087e+04, 2.051004704987e+04, 2.050051647787e+04, 2.049098506587e+04, 2.048145281387e+04, 2.047191972187e+04, 2.046238578787e+04, 2.045285101287e+04, 2.044331539787e+04, 2.043377893987e+04, 2.042424164087e+04, 2.041470350087e+04, 2.040516451787e+04, 2.039562469187e+04, 2.038608402487e+04, 2.037654251387e+04, 2.036700016087e+04, 2.035745696487e+04, 2.034791292487e+04, 2.033836804087e+04, 2.032882231387e+04, 2.031927574287e+04, 2.030972832787e+04, 2.030018006787e+04, 2.029063096287e+04, 2.028108101387e+04, 2.027153021987e+04, 2.026197857987e+04, 2.025242609487e+04, 2.024287276487e+04, 2.023331858787e+04, 2.022376356487e+04, 2.021420769587e+04, 2.020465098087e+04, 2.019509341787e+04, 2.018553500887e+04, 2.017597575287e+04, 2.016641564887e+04, 2.015685469787e+04, 2.014729289787e+04, 2.013773025087e+04, 2.012816675587e+04, 2.011860241187e+04, 2.010903721887e+04, 2.009947117787e+04, 2.008990428687e+04}, - {2.150259211087e+04, 2.149314413387e+04, 2.148369533687e+04, 2.147424572087e+04, 2.146479528387e+04, 2.145534402687e+04, 2.144589194887e+04, 2.143643904987e+04, 2.142698533087e+04, 2.141753079087e+04, 2.140807542887e+04, 2.139861924487e+04, 2.138916223987e+04, 2.137970441287e+04, 2.137024576387e+04, 2.136078629287e+04, 2.135132599887e+04, 2.134186488187e+04, 2.133240294187e+04, 2.132294017887e+04, 2.131347659287e+04, 2.130401218287e+04, 2.129454694987e+04, 2.128508089187e+04, 2.127561400987e+04, 2.126614630387e+04, 2.125667777387e+04, 2.124720841787e+04, 2.123773823787e+04, 2.122826723187e+04, 2.121879540087e+04, 2.120932274487e+04, 2.119984926287e+04, 2.119037495387e+04, 2.118089981987e+04, 2.117142385887e+04, 2.116194707187e+04, 2.115246945687e+04, 2.114299101587e+04, 2.113351174687e+04, 2.112403165087e+04, 2.111455072787e+04, 2.110506897687e+04, 2.109558639687e+04, 2.108610298887e+04, 2.107661875287e+04, 2.106713368887e+04, 2.105764779487e+04, 2.104816107187e+04, 2.103867351987e+04}, - {2.244868583587e+04, 2.243931519487e+04, 2.242994375287e+04, 2.242057150887e+04, 2.241119846487e+04, 2.240182461887e+04, 2.239244997187e+04, 2.238307452287e+04, 2.237369827187e+04, 2.236432121887e+04, 2.235494336287e+04, 2.234556470487e+04, 2.233618524387e+04, 2.232680497987e+04, 2.231742391287e+04, 2.230804204287e+04, 2.229865936887e+04, 2.228927589087e+04, 2.227989160987e+04, 2.227050652487e+04, 2.226112063487e+04, 2.225173393987e+04, 2.224234644087e+04, 2.223295813787e+04, 2.222356902887e+04, 2.221417911387e+04, 2.220478839487e+04, 2.219539686887e+04, 2.218600453787e+04, 2.217661140087e+04, 2.216721745787e+04, 2.215782270787e+04, 2.214842715087e+04, 2.213903078787e+04, 2.212963361787e+04, 2.212023563987e+04, 2.211083685487e+04, 2.210143726187e+04, 2.209203686187e+04, 2.208263565387e+04, 2.207323363687e+04, 2.206383081187e+04, 2.205442717887e+04, 2.204502273587e+04, 2.203561748487e+04, 2.202621142487e+04, 2.201680455487e+04, 2.200739687487e+04, 2.199798838587e+04, 2.198857908687e+04}, - {2.339596747787e+04, 2.338667313187e+04, 2.337737800387e+04, 2.336808209187e+04, 2.335878539787e+04, 2.334948792087e+04, 2.334018966087e+04, 2.333089061787e+04, 2.332159079087e+04, 2.331229017987e+04, 2.330298878587e+04, 2.329368660687e+04, 2.328438364387e+04, 2.327507989687e+04, 2.326577536487e+04, 2.325647004887e+04, 2.324716394687e+04, 2.323785705987e+04, 2.322854938787e+04, 2.321924092987e+04, 2.320993168687e+04, 2.320062165687e+04, 2.319131084187e+04, 2.318199923987e+04, 2.317268685187e+04, 2.316337367687e+04, 2.315405971487e+04, 2.314474496587e+04, 2.313542942987e+04, 2.312611310587e+04, 2.311679599487e+04, 2.310747809587e+04, 2.309815940987e+04, 2.308883993487e+04, 2.307951967087e+04, 2.307019861887e+04, 2.306087677887e+04, 2.305155414887e+04, 2.304223073087e+04, 2.303290652287e+04, 2.302358152487e+04, 2.301425573787e+04, 2.300492916087e+04, 2.299560179387e+04, 2.298627363687e+04, 2.297694468887e+04, 2.296761495087e+04, 2.295828442187e+04, 2.294895310187e+04, 2.293962099087e+04}, - {2.434443597187e+04, 2.433521689887e+04, 2.432599706287e+04, 2.431677646187e+04, 2.430755509587e+04, 2.429833296487e+04, 2.428911006887e+04, 2.427988640687e+04, 2.427066197987e+04, 2.426143678687e+04, 2.425221082887e+04, 2.424298410387e+04, 2.423375661287e+04, 2.422452835587e+04, 2.421529933187e+04, 2.420606954087e+04, 2.419683898387e+04, 2.418760765887e+04, 2.417837556687e+04, 2.416914270687e+04, 2.415990907987e+04, 2.415067468487e+04, 2.414143952187e+04, 2.413220359087e+04, 2.412296689087e+04, 2.411372942287e+04, 2.410449118587e+04, 2.409525217987e+04, 2.408601240487e+04, 2.407677186087e+04, 2.406753054687e+04, 2.405828846387e+04, 2.404904561087e+04, 2.403980198787e+04, 2.403055759387e+04, 2.402131243087e+04, 2.401206649687e+04, 2.400281979187e+04, 2.399357231587e+04, 2.398432406887e+04, 2.397507505087e+04, 2.396582526187e+04, 2.395657469987e+04, 2.394732336787e+04, 2.393807126287e+04, 2.392881838587e+04, 2.391956473587e+04, 2.391031031387e+04, 2.390105511987e+04, 2.389179915187e+04}, - {2.529409019387e+04, 2.528494539387e+04, 2.527579984687e+04, 2.526665355387e+04, 2.525750651287e+04, 2.524835872387e+04, 2.523921018787e+04, 2.523006090387e+04, 2.522091087187e+04, 2.521176009187e+04, 2.520260856287e+04, 2.519345628587e+04, 2.518430325987e+04, 2.517514948587e+04, 2.516599496187e+04, 2.515683968887e+04, 2.514768366687e+04, 2.513852689487e+04, 2.512936937387e+04, 2.512021110187e+04, 2.511105208087e+04, 2.510189230887e+04, 2.509273178687e+04, 2.508357051387e+04, 2.507440849087e+04, 2.506524571687e+04, 2.505608219087e+04, 2.504691791487e+04, 2.503775288587e+04, 2.502858710687e+04, 2.501942057487e+04, 2.501025329187e+04, 2.500108525587e+04, 2.499191646787e+04, 2.498274692787e+04, 2.497357663487e+04, 2.496440558887e+04, 2.495523378987e+04, 2.494606123787e+04, 2.493688793287e+04, 2.492771387387e+04, 2.491853906187e+04, 2.490936349487e+04, 2.490018717487e+04, 2.489101010087e+04, 2.488183227187e+04, 2.487265368787e+04, 2.486347434987e+04, 2.485429425687e+04, 2.484511340887e+04} - }; -}; diff --git a/examples/biomineralization/material/fluidsystems/biominsimplechemistry.hh b/examples/biomineralization/material/fluidsystems/biominsimplechemistry.hh index 973f07db9340c9adbf0835badf90092e100a0f91..9155bb6f4ce7d19d3b117674c6c79ebac53ac8e3 100644 --- a/examples/biomineralization/material/fluidsystems/biominsimplechemistry.hh +++ b/examples/biomineralization/material/fluidsystems/biominsimplechemistry.hh @@ -69,12 +69,12 @@ namespace Dumux::FluidSystems { template <class Scalar, - class CO2Table, + class CO2Impl = Components::SimpleCO2<Scalar>, class H2OType = Components::TabulatedComponent<Components::H2O<Scalar>> > class BioMinSimpleChemistryFluid -: public Base<Scalar, BioMinSimpleChemistryFluid<Scalar, CO2Table, H2OType> > +: public Base<Scalar, BioMinSimpleChemistryFluid<Scalar, CO2Impl, H2OType> > { - using ThisType = BioMinSimpleChemistryFluid<Scalar, CO2Table, H2OType>; + using ThisType = BioMinSimpleChemistryFluid<Scalar, CO2Impl, H2OType>; using Base = Dumux::FluidSystems::Base<Scalar, ThisType>; using IdealGas = Dumux::IdealGas<Scalar>; // [[/codeblock]] @@ -84,7 +84,7 @@ class BioMinSimpleChemistryFluid // [[codeblock]] public: // We use convenient declarations that we derive from the property system - typedef Components::CO2<Scalar, CO2Table> CO2; + using CO2 = CO2Impl; using H2O = H2OType; // export the underlying brine fluid system for the liquid phase, as brine is used as a "pseudo component" using Brine = Dumux::FluidSystems::ICPComplexSalinityBrine<Scalar, H2OType>; @@ -97,7 +97,7 @@ public: using SuspendedBiomass = Components::SuspendedBiomass<Scalar>; // We define the binary coefficients file, which accounts for the interactions of the main fluids in our setup, water/brine and CO2 - using Brine_CO2 = BinaryCoeff::Brine_CO2<Scalar, CO2Table, true>; + using Brine_CO2 = BinaryCoeff::Brine_CO2<Scalar, CO2Impl, true>; // the type of parameter cache objects. this fluid system does not // cache anything, so it uses Dumux::NullParameterCache diff --git a/examples/biomineralization/properties.hh b/examples/biomineralization/properties.hh index fea806e1e97be8b1424970a61bd80f2af2571d24..3d6557c3e3a2a8dd8fcdfcb6db0506207175d817 100644 --- a/examples/biomineralization/properties.hh +++ b/examples/biomineralization/properties.hh @@ -36,6 +36,7 @@ // subsequently specialize those `properties` for our `TypeTag`, which we want to // modify or for which no meaningful default can be set. #include <dumux/common/properties.hh> +#include <dumux/material/components/simpleco2.hh> #include <dumux/porousmediumflow/2pncmin/model.hh> // We want to use `YaspGrid`, an implementation of the dune grid interface for structured grids: @@ -47,7 +48,6 @@ // We include the necessary material files #include <examples/biomineralization/material/fluidsystems/biominsimplechemistry.hh> #include <examples/biomineralization/material/solidsystems/biominsolids.hh> -#include <examples/biomineralization/material/co2tables.hh> // We include the problem and spatial parameters headers used for this simulation. #include "problem.hh" @@ -93,9 +93,9 @@ template<class TypeTag> struct FluidSystem<TypeTag, TTag::MICPColumnSimpleChemistry> { using Scalar = GetPropType<TypeTag, Properties::Scalar>; - using CO2Tables = BiomineralizationCO2Tables::CO2Tables; + using CO2Impl = Components::SimpleCO2<Scalar>; using H2OTabulated = Components::TabulatedComponent<Components::H2O<Scalar>>; - using type = Dumux::FluidSystems::BioMinSimpleChemistryFluid<Scalar, CO2Tables, H2OTabulated>; + using type = Dumux::FluidSystems::BioMinSimpleChemistryFluid<Scalar, CO2Impl, H2OTabulated>; }; // We set the solidSystem used for our simulation diff --git a/test/material/binarycoefficients/test_binarycoefficients.cc b/test/material/binarycoefficients/test_binarycoefficients.cc index c46e8569ce733b64eb124eba43cc3dbdb928a208..99d65c6094ae65aa0c7b8d973fe096cddecb0060 100644 --- a/test/material/binarycoefficients/test_binarycoefficients.cc +++ b/test/material/binarycoefficients/test_binarycoefficients.cc @@ -38,6 +38,7 @@ #include <dumux/material/binarycoefficients/h2o_xylene.hh> #include <dumux/material/binarycoefficients/n2_o2.hh> +#include <dumux/material/components/co2.hh> #include <test/porousmediumflow/co2/co2tables.hh> template<class Scalar, class BinaryCoefficients> @@ -93,7 +94,7 @@ int main() success += checkBinaryCoefficients<Scalar, Air_Mesitylene>(); success += checkBinaryCoefficients<Scalar, Air_Xylene>(); - success += checkBinaryCoefficients<Scalar, Brine_CO2<Scalar, GeneratedCO2Tables::CO2Tables>>(); + success += checkBinaryCoefficients<Scalar, Brine_CO2<Scalar, Components::CO2<Scalar, GeneratedCO2Tables::CO2Tables>>>(); success += checkBinaryCoefficients<Scalar, H2O_Air>(); success += checkBinaryCoefficients<Scalar, H2O_CH4>(); success += checkBinaryCoefficients<Scalar, H2O_Component<Scalar, Components::Constant<0, Scalar>>>(); diff --git a/test/material/components/CMakeLists.txt b/test/material/components/CMakeLists.txt index a2fa8428da76f8ee4adaf4d7be60d00e2ac11580..a5228e4746d76ae6ed30af0a4209353359566cfd 100644 --- a/test/material/components/CMakeLists.txt +++ b/test/material/components/CMakeLists.txt @@ -130,6 +130,12 @@ dumux_add_test(NAME plot_o2 CMD_ARGS "O2" LABELS unit material) +dumux_add_test(NAME plot_simpleco2 + TARGET plot_component + COMMAND ./plot_component + CMD_ARGS "SimpleCO2" + LABELS unit material) + dumux_add_test(NAME plot_simpleh2o TARGET plot_component COMMAND ./plot_component diff --git a/test/material/components/plotproperties.cc b/test/material/components/plotproperties.cc index 71f79bb74969157297d87dca524056ab1ac9f6b0..bfbf8b0870fa7e32f2010284ec42917705c65c33 100644 --- a/test/material/components/plotproperties.cc +++ b/test/material/components/plotproperties.cc @@ -56,6 +56,7 @@ #include <dumux/material/components/n2.hh> #include <dumux/material/components/nacl.hh> #include <dumux/material/components/o2.hh> +#include <dumux/material/components/simpleco2.hh> #include <dumux/material/components/simpleh2o.hh> #include <dumux/material/components/sodiumion.hh> #include <dumux/material/components/trichloroethene.hh> @@ -377,6 +378,8 @@ int main(int argc, char *argv[]) plotStuff< Components::NaCl<double> >(openPlotWindow); else if (compName == "O2") plotStuff< Components::O2<double> >(openPlotWindow); + else if (compName == "SimpleCO2") + plotStuff< Components::SimpleCO2<double> >(openPlotWindow); else if (compName == "SimpleH2O") plotStuff< Components::SimpleH2O<double> >(openPlotWindow); else if (compName == "SodiumIon") diff --git a/test/material/fluidsystems/test_fluidsystems.cc b/test/material/fluidsystems/test_fluidsystems.cc index 6d17c58e5ca443be8c94aefe328ede41071caba9..0c273d18f084499ee173167e2e33acbf6bf9545d 100644 --- a/test/material/fluidsystems/test_fluidsystems.cc +++ b/test/material/fluidsystems/test_fluidsystems.cc @@ -61,7 +61,8 @@ #include <dumux/material/fluidstates/saturationoverlay.hh> #include <dumux/material/fluidstates/temperatureoverlay.hh> -// for co2, include the tables of the co2 test +// for co2, include the tabulated co2 component and the tables of the co2 test +#include <dumux/material/components/co2.hh> #include <test/porousmediumflow/co2/co2tables.hh> int main() @@ -159,40 +160,40 @@ int main() // that is why checkFluidSystem() needs to be called with "false" here. // Also see the checkFluidSystem documentation. { using H2OType = Components::SimpleH2O<Scalar>; - using FluidSystem = FluidSystems::BrineCO2< Scalar, GeneratedCO2Tables::CO2Tables, + using FluidSystem = FluidSystems::BrineCO2< Scalar, Components::CO2<Scalar, GeneratedCO2Tables::CO2Tables>, H2OType, FluidSystems::BrineCO2DefaultPolicy</*useConstantSalinity=*/true> >; Parameters::init([](auto& params){ params["Brine.Salinity"] = "0.3"; }); success += checkFluidSystem<Scalar, FluidSystem>( false ); } { using H2OType = Components::SimpleH2O<Scalar>; - using FluidSystem = FluidSystems::BrineCO2< Scalar, GeneratedCO2Tables::CO2Tables, + using FluidSystem = FluidSystems::BrineCO2< Scalar, Components::CO2<Scalar, GeneratedCO2Tables::CO2Tables>, H2OType, FluidSystems::BrineCO2DefaultPolicy</*useConstantSalinity=*/false> >; success += checkFluidSystem<Scalar, FluidSystem>( false ); } { using H2OType = Components::H2O<Scalar>; - using FluidSystem = FluidSystems::BrineCO2< Scalar, GeneratedCO2Tables::CO2Tables, + using FluidSystem = FluidSystems::BrineCO2< Scalar, Components::CO2<Scalar, GeneratedCO2Tables::CO2Tables>, H2OType, FluidSystems::BrineCO2DefaultPolicy</*useConstantSalinity=*/true> >; Parameters::init([](auto& params){ params["Brine.Salinity"] = "0.3"; }); success += checkFluidSystem<Scalar, FluidSystem>( false ); } { using H2OType = Components::H2O<Scalar>; - using FluidSystem = FluidSystems::BrineCO2< Scalar, GeneratedCO2Tables::CO2Tables, + using FluidSystem = FluidSystems::BrineCO2< Scalar, Components::CO2<Scalar, GeneratedCO2Tables::CO2Tables>, H2OType, FluidSystems::BrineCO2DefaultPolicy</*useConstantSalinity=*/false> >; success += checkFluidSystem<Scalar, FluidSystem>( false ); } { using H2OType = Components::TabulatedComponent<Components::H2O<Scalar>>; - using FluidSystem = FluidSystems::BrineCO2< Scalar, GeneratedCO2Tables::CO2Tables, + using FluidSystem = FluidSystems::BrineCO2< Scalar, Components::CO2<Scalar, GeneratedCO2Tables::CO2Tables>, H2OType, FluidSystems::BrineCO2DefaultPolicy</*useConstantSalinity=*/true> >; Parameters::init([](auto& params){ params["Brine.Salinity"] = "0.3"; }); success += checkFluidSystem<Scalar, FluidSystem>( false ); } { using H2OType = Components::TabulatedComponent<Components::H2O<Scalar>>; - using FluidSystem = FluidSystems::BrineCO2< Scalar, GeneratedCO2Tables::CO2Tables, + using FluidSystem = FluidSystems::BrineCO2< Scalar, Components::CO2<Scalar, GeneratedCO2Tables::CO2Tables>, H2OType, FluidSystems::BrineCO2DefaultPolicy</*useConstantSalinity=*/false> >; success += checkFluidSystem<Scalar, FluidSystem>( false ); } { using H2OType = Components::TabulatedComponent<Components::H2O<Scalar>>; - using FluidSystem = FluidSystems::BrineCO2< Scalar, GeneratedCO2Tables::CO2Tables, + using FluidSystem = FluidSystems::BrineCO2< Scalar, Components::CO2<Scalar, GeneratedCO2Tables::CO2Tables>, H2OType, FluidSystems::BrineCO2DefaultPolicy</*useConstantSalinity=*/true, /*fastButSimplifiedRelations*/true> >; Parameters::init([](auto& params){ params["Brine.Salinity"] = "0.3"; }); success += checkFluidSystem<Scalar, FluidSystem>( false ); } { using H2OType = Components::TabulatedComponent<Components::H2O<Scalar>>; - using FluidSystem = FluidSystems::BrineCO2< Scalar, GeneratedCO2Tables::CO2Tables, + using FluidSystem = FluidSystems::BrineCO2< Scalar, Components::CO2<Scalar, GeneratedCO2Tables::CO2Tables>, H2OType, FluidSystems::BrineCO2DefaultPolicy</*useConstantSalinity=*/false, /*fastButSimplifiedRelations*/true> >; success += checkFluidSystem<Scalar, FluidSystem>( false ); } diff --git a/test/multidomain/poromechanics/el2p/properties.hh b/test/multidomain/poromechanics/el2p/properties.hh index c4335708867884d8665a65da8ba106506d7a9489..bd82cbbd5a2487ccd76c356e3b55df90e36667a4 100644 --- a/test/multidomain/poromechanics/el2p/properties.hh +++ b/test/multidomain/poromechanics/el2p/properties.hh @@ -35,6 +35,7 @@ #include <dumux/geomechanics/poroelastic/model.hh> #include <dumux/porousmediumflow/problem.hh> +#include <dumux/material/components/co2.hh> #include <dumux/material/fluidsystems/brineco2.hh> #include <dumux/multidomain/traits.hh> @@ -60,7 +61,7 @@ template<class TypeTag> struct FluidSystem<TypeTag, TTag::TwoPSub> { using Scalar = GetPropType<TypeTag, Properties::Scalar>; - using type = FluidSystems::BrineCO2<Scalar, GeneratedCO2Tables::CO2Tables>; + using type = FluidSystems::BrineCO2<Scalar, Components::CO2<Scalar, GeneratedCO2Tables::CO2Tables>>; }; // Set the grid type @@ -95,7 +96,7 @@ template<class TypeTag> struct FluidSystem<TypeTag, TTag::PoroElasticSub> { using Scalar = GetPropType<TypeTag, Properties::Scalar>; - using type = FluidSystems::BrineCO2<Scalar, GeneratedCO2Tables::CO2Tables>; + using type = FluidSystems::BrineCO2<Scalar, Components::CO2<Scalar, GeneratedCO2Tables::CO2Tables>>; }; // The spatial parameters property diff --git a/test/porousmediumflow/co2/properties.hh b/test/porousmediumflow/co2/properties.hh index 18689580a634c5618ddbf577a29ead61b5110002..030700fda0733f4ed46aab248096b3540b8e1f03 100644 --- a/test/porousmediumflow/co2/properties.hh +++ b/test/porousmediumflow/co2/properties.hh @@ -33,6 +33,7 @@ #include <dumux/porousmediumflow/co2/model.hh> #include <dumux/material/components/tabulatedcomponent.hh> +#include <dumux/material/components/co2.hh> #include <dumux/material/components/h2o.hh> #include <dumux/material/fluidsystems/brineco2.hh> @@ -80,7 +81,7 @@ template<class TypeTag> struct FluidSystem<TypeTag, TTag::Heterogeneous> { using type = FluidSystems::BrineCO2<GetPropType<TypeTag, Properties::Scalar>, - GeneratedCO2Tables::CO2Tables, + Components::CO2<GetPropType<TypeTag, Properties::Scalar>, GeneratedCO2Tables::CO2Tables>, Components::TabulatedComponent<Components::H2O<GetPropType<TypeTag, Properties::Scalar>>>, FluidSystems::BrineCO2DefaultPolicy</*constantSalinity=*/true, /*simpleButFast=*/true>>; }; @@ -130,7 +131,7 @@ template<class TypeTag> struct FluidSystem<TypeTag, TTag::HeterogeneousNI> { using type = FluidSystems::BrineCO2<GetPropType<TypeTag, Properties::Scalar>, - GeneratedCO2Tables::CO2Tables, + Components::CO2<GetPropType<TypeTag, Properties::Scalar>, GeneratedCO2Tables::CO2Tables>, Components::TabulatedComponent<Components::H2O<GetPropType<TypeTag, Properties::Scalar>>>, FluidSystems::BrineCO2DefaultPolicy</*constantSalinity=*/true, /*simpleButFast=*/true>>; }; diff --git a/test/references/example_biomineralization-reference.vtp b/test/references/example_biomineralization-reference.vtp index 697e1233377c85e786d3878a454c53244df8ff91..9559b07bd3fbff88a5ea2f1a2b84dc4ab79011f3 100644 --- a/test/references/example_biomineralization-reference.vtp +++ b/test/references/example_biomineralization-reference.vtp @@ -46,11 +46,11 @@ 110854 110705 110556 110408 110259 110111 109962 109814 109667 </DataArray> <DataArray type="Float32" Name="rho_n" NumberOfComponents="1" format="ascii"> - 1.7176 1.71751 1.71744 1.71737 1.7173 1.71725 1.7172 1.71716 1.71712 1.71708 1.71705 1.71703 - 1.717 1.71698 1.71696 1.71694 1.71693 1.71692 1.7169 1.71689 1.71688 1.71688 1.71687 1.71686 - 1.71686 1.71685 1.71685 1.71685 1.71684 1.71684 1.71684 1.71684 1.71684 1.71684 1.71684 1.71683 - 1.71684 1.71684 1.71684 1.71684 1.71684 1.71684 1.71684 1.71684 1.71684 1.71685 1.71685 1.71685 - 1.71685 1.71686 1.71686 1.71686 1.71687 1.71687 1.71687 1.71688 1.71765 + 0.023895 0.0238254 0.023764 0.0237098 0.0236619 0.0236196 0.0235821 0.0235489 0.0235194 0.0234934 0.0234702 0.0234497 + 0.0234314 0.0234152 0.0234008 0.023388 0.0233767 0.0233666 0.0233577 0.0233498 0.0233428 0.0233366 0.0233311 0.0233264 + 0.0233222 0.0233185 0.0233154 0.0233127 0.0233105 0.0233086 0.0233071 0.023306 0.0233052 0.0233047 0.0233045 0.0233046 + 0.023305 0.0233057 0.0233067 0.0233081 0.0233098 0.0233118 0.0233141 0.0233169 0.02332 0.0233236 0.0233276 0.0233322 + 0.0233372 0.0233428 0.023349 0.0233559 0.0233635 0.0233718 0.0233809 0.023391 0.0239213 </DataArray> <DataArray type="Float32" Name="mob_n" NumberOfComponents="1" format="ascii"> 0 0 0 0 0 0 0 0 0 0 0 0 @@ -144,18 +144,18 @@ 55727.1 55725.9 55724.6 55723.3 55721.9 55720.4 55718.9 55717.3 55411 </DataArray> <DataArray type="Float32" Name="x^H2O_n" NumberOfComponents="1" format="ascii"> - 0.026815 0.0267443 0.0266854 0.0266367 0.0265973 0.026566 0.0265419 0.0265242 0.0265123 0.0265054 0.0265031 0.0265048 - 0.0265101 0.0265187 0.0265301 0.0265441 0.0265604 0.0265789 0.0265991 0.0266211 0.0266446 0.0266694 0.0266956 0.0267228 - 0.0267511 0.0267803 0.0268104 0.0268413 0.0268729 0.0269053 0.0269382 0.0269718 0.0270058 0.0270405 0.0270756 0.0271111 - 0.0271471 0.0271836 0.0272204 0.0272576 0.0272952 0.0273332 0.0273715 0.0274101 0.027449 0.0274883 0.0275279 0.0275678 - 0.027608 0.0276485 0.0276892 0.0277303 0.0277716 0.0278132 0.027855 0.0278972 0.0288955 + 0.0269642 0.026893 0.0268335 0.0267844 0.0267446 0.0267129 0.0266885 0.0266706 0.0266583 0.0266513 0.0266487 0.0266503 + 0.0266554 0.0266638 0.0266751 0.026689 0.0267052 0.0267235 0.0267437 0.0267656 0.026789 0.0268138 0.0268399 0.0268671 + 0.0268953 0.0269245 0.0269546 0.0269855 0.0270171 0.0270494 0.0270823 0.0271158 0.0271499 0.0271845 0.0272196 0.0272551 + 0.0272911 0.0273276 0.0273644 0.0274016 0.0274392 0.0274771 0.0275154 0.0275541 0.027593 0.0276323 0.0276719 0.0277118 + 0.027752 0.0277925 0.0278333 0.0278743 0.0279156 0.0279572 0.0279991 0.0280414 0.0290446 </DataArray> <DataArray type="Float32" Name="x^TotalC_n" NumberOfComponents="1" format="ascii"> - 0.000352141 0.000362127 0.000371228 0.000379512 0.000387044 0.000393889 0.000400105 0.00040575 0.000410876 0.000415531 0.000419762 0.000423608 - 0.000427108 0.000430295 0.000433201 0.000435854 0.000438279 0.000440499 0.000442535 0.000444406 0.000446128 0.000447716 0.000449185 0.000450547 - 0.000451813 0.000452994 0.000454099 0.000455139 0.00045612 0.000457053 0.000457945 0.000458803 0.000459636 0.000460453 0.000461261 0.000462069 - 0.000462886 0.000463723 0.00046459 0.000465497 0.000466458 0.000467484 0.00046859 0.000469792 0.000471104 0.000472546 0.000474136 0.000475894 - 0.000477842 0.000480004 0.000482405 0.000485072 0.000488033 0.000491319 0.000494961 0.000498978 0.000376053 + 0.000354109 0.000364148 0.000373297 0.000381624 0.000389196 0.000396076 0.000402324 0.000407997 0.000413148 0.000417827 0.000422077 0.000425942 + 0.000429457 0.000432659 0.000435578 0.000438242 0.000440678 0.000442907 0.000444951 0.000446828 0.000448556 0.00045015 0.000451624 0.00045299 + 0.000454259 0.000455443 0.000456551 0.000457593 0.000458577 0.000459511 0.000460404 0.000461263 0.000462098 0.000462915 0.000463724 0.000464533 + 0.000465352 0.00046619 0.000467058 0.000467966 0.000468928 0.000469957 0.000471065 0.00047227 0.000473586 0.000475031 0.000476626 0.00047839 + 0.000480345 0.000482515 0.000484925 0.000487602 0.000490575 0.000493874 0.000497532 0.000501565 0.000378 </DataArray> <DataArray type="Float32" Name="x^Na+_n" NumberOfComponents="1" format="ascii"> 2.57213e-26 2.29597e-26 2.05067e-26 1.83275e-26 1.63913e-26 1.4671e-26 1.31424e-26 1.17842e-26 1.05774e-26 9.50519e-27 8.55278e-27 7.70695e-27 @@ -207,11 +207,11 @@ 9.18229e-30 9.31748e-30 9.44966e-30 9.57886e-30 9.7051e-30 9.82837e-30 9.94806e-30 1.00537e-29 0 </DataArray> <DataArray type="Float32" Name="rhoMolar_n" NumberOfComponents="1" format="ascii"> - 39.7913 39.7863 39.7819 39.778 39.7746 39.7715 39.7688 39.7664 39.7642 39.7623 39.7606 39.7591 - 39.7578 39.7566 39.7556 39.7546 39.7538 39.7531 39.7524 39.7518 39.7513 39.7509 39.7505 39.7501 - 39.7498 39.7496 39.7494 39.7492 39.749 39.7489 39.7488 39.7487 39.7486 39.7486 39.7486 39.7486 - 39.7486 39.7486 39.7486 39.7487 39.7488 39.7488 39.7489 39.749 39.7491 39.7492 39.7494 39.7495 - 39.7496 39.7498 39.75 39.7501 39.7503 39.7505 39.7507 39.7509 39.7935 + 1.30208 1.29756 1.29355 1.29 1.28686 1.28407 1.2816 1.27941 1.27746 1.27573 1.27419 1.27282 + 1.27161 1.27053 1.26957 1.26872 1.26797 1.2673 1.2667 1.26617 1.26571 1.2653 1.26494 1.26462 + 1.26434 1.2641 1.26389 1.26371 1.26356 1.26344 1.26334 1.26326 1.26319 1.26315 1.26313 1.26312 + 1.26313 1.26316 1.2632 1.26325 1.26332 1.26341 1.26351 1.26363 1.26376 1.2639 1.26406 1.26424 + 1.26444 1.26465 1.26488 1.26513 1.2654 1.2657 1.26601 1.26636 1.30372 </DataArray> <DataArray type="Float32" Name="phase presence" NumberOfComponents="1" format="ascii"> 1 1 1 1 1 1 1 1 1 1 1 1