diff --git a/dumux/common/properties.hh b/dumux/common/properties.hh index ff39703da05ff497bff27cb8bbdbb138d2012ff8..acde51138f8bcf8c06c658337a3c8bcb7fa38fa2 100644 --- a/dumux/common/properties.hh +++ b/dumux/common/properties.hh @@ -266,12 +266,6 @@ struct NumEnergyEqFluid { using type = UndefinedProperty; }; template<class TypeTag, class MyTypeTag> struct NumEnergyEqSolid { using type = UndefinedProperty; }; -template<class TypeTag, class MyTypeTag> -struct AwnSurface { using type = UndefinedProperty; }; -template<class TypeTag, class MyTypeTag> -struct AwsSurface { using type = UndefinedProperty; }; -template<class TypeTag, class MyTypeTag> -struct AnsSurface { using type = UndefinedProperty; }; template<class TypeTag, class MyTypeTag> struct NusseltFormulation { using type = UndefinedProperty; }; template<class TypeTag, class MyTypeTag> diff --git a/dumux/discretization/box/fourierslawnonequilibrium.hh b/dumux/discretization/box/fourierslawnonequilibrium.hh index ee9fca8d306c40d8f5a1b3c805fd0816b84c3e3f..4e045c9b8e7e35de3ead7ef0d942b70b11afad0b 100644 --- a/dumux/discretization/box/fourierslawnonequilibrium.hh +++ b/dumux/discretization/box/fourierslawnonequilibrium.hh @@ -46,26 +46,20 @@ class FouriersLawNonEquilibriumImplementation<TypeTag, DiscretizationMethod::box { using Scalar = GetPropType<TypeTag, Properties::Scalar>; using Problem = GetPropType<TypeTag, Properties::Problem>; - using FluidState = GetPropType<TypeTag, Properties::FluidState>; - using FluidSystem = GetPropType<TypeTag, Properties::FluidSystem>; - using VolumeVariables = GetPropType<TypeTag, Properties::VolumeVariables>; using FVElementGeometry = typename GetPropType<TypeTag, Properties::FVGridGeometry>::LocalView; - using SubControlVolume = typename FVElementGeometry::SubControlVolume; - using PrimaryVariables = GetPropType<TypeTag, Properties::PrimaryVariables>; using SubControlVolumeFace = typename FVElementGeometry::SubControlVolumeFace; using ElementVolumeVariables = typename GetPropType<TypeTag, Properties::GridVolumeVariables>::LocalView; using ElementFluxVariablesCache = typename GetPropType<TypeTag, Properties::GridFluxVariablesCache>::LocalView; using GridView = GetPropType<TypeTag, Properties::GridView>; - using IndexType = typename GridView::IndexSet::IndexType; using ThermalConductivityModel = GetPropType<TypeTag, Properties::ThermalConductivityModel>; - + using ModelTraits = GetPropType<TypeTag, Properties::ModelTraits>; using Element = typename GridView::template Codim<0>::Entity; enum { dim = GridView::dimension} ; enum { dimWorld = GridView::dimensionworld} ; - enum { numPhases = GetPropType<TypeTag, Properties::ModelTraits>::numPhases()} ; + enum { numEnergyEqFluid = getPropValue<TypeTag, Properties::NumEnergyEqFluid>() }; - enum {sPhaseIdx = FluidSystem::numPhases}; + enum { sPhaseIdx = ModelTraits::numPhases() }; using DimWorldMatrix = Dune::FieldMatrix<Scalar, dimWorld, dimWorld>; @@ -88,8 +82,9 @@ public: // effective diffusion tensors if (phaseIdx != sPhaseIdx) { - if (numEnergyEqFluid == 1) - { //when only one energy equation for fluids is used, we need an effective law for that + //when number of energyEq for the fluid are smaller than numPhases that means that we need an effecitve law + if (numEnergyEqFluid < ModelTraits::numPhases()) + { insideLambda += ThermalConductivityModel::effectiveThermalConductivity(insideVolVars, problem.spatialParams(), element, fvGeometry, insideScv); outsideLambda += ThermalConductivityModel::effectiveThermalConductivity(outsideVolVars, problem.spatialParams(), element, fvGeometry, outsideScv); } @@ -102,8 +97,8 @@ public: //solid phase else { - insideLambda += insideVolVars.solidThermalConductivity()*(1-insideVolVars.porosity()); - outsideLambda +=outsideVolVars.solidThermalConductivity()*(1-outsideVolVars.porosity()); + insideLambda += insideVolVars.solidThermalConductivity()*(1.0-insideVolVars.porosity()); + outsideLambda += outsideVolVars.solidThermalConductivity()*(1.0-outsideVolVars.porosity()); } // scale by extrusion factor diff --git a/dumux/discretization/cellcentered/tpfa/fourierslawnonequilibrium.hh b/dumux/discretization/cellcentered/tpfa/fourierslawnonequilibrium.hh new file mode 100644 index 0000000000000000000000000000000000000000..ba1958b1e13ebe4ed7eddb604d83096f4dcbf81b --- /dev/null +++ b/dumux/discretization/cellcentered/tpfa/fourierslawnonequilibrium.hh @@ -0,0 +1,183 @@ +// -*- 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 2 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 CCTpfaDiscretization +* \brief Fourier's law for cell-centered finite volume schemes with two-point flux approximation +*/ +#ifndef DUMUX_DISCRETIZATION_CC_TPFA_FOURIERS_LAW_NONEQUILIBRIUM_HH +#define DUMUX_DISCRETIZATION_CC_TPFA_FOURIERS_LAW_NONEQUILIBRIUM_HH + +#include <dumux/common/properties.hh> +#include <dumux/discretization/method.hh> +#include <dumux/discretization/cellcentered/tpfa/computetransmissibility.hh> + +namespace Dumux { + +// forward declaration +template<class TypeTag, DiscretizationMethod discMethod> +class FouriersLawNonEquilibriumImplementation; + +/*! +* \ingroup CCTpfaDiscretization +* \brief Fourier's law for cell-centered finite volume schemes with two-point flux approximation +*/ +template <class TypeTag> +class FouriersLawNonEquilibriumImplementation<TypeTag, DiscretizationMethod::cctpfa> +{ + using Implementation = FouriersLawNonEquilibriumImplementation<TypeTag, DiscretizationMethod::cctpfa>; + using Scalar = GetPropType<TypeTag, Properties::Scalar>; + using Problem = GetPropType<TypeTag, Properties::Problem>; + using FVElementGeometry = typename GetPropType<TypeTag, Properties::FVGridGeometry>::LocalView; + using SubControlVolume = typename FVElementGeometry::SubControlVolume; + using SubControlVolumeFace = typename FVElementGeometry::SubControlVolumeFace; + using GridView = GetPropType<TypeTag, Properties::GridView>; + using ElementVolumeVariables = typename GetPropType<TypeTag, Properties::GridVolumeVariables>::LocalView; + using Element = typename GridView::template Codim<0>::Entity; + using ElementFluxVarsCache = typename GetPropType<TypeTag, Properties::GridFluxVariablesCache>::LocalView; + + static constexpr int dim = GridView::dimension; + static constexpr int dimWorld = GridView::dimensionworld; + + using ThermalConductivityModel = GetPropType<TypeTag, Properties::ThermalConductivityModel>; + using ModelTraits = GetPropType<TypeTag, Properties::ModelTraits>; + + enum { numEnergyEqFluid = ModelTraits::numEnergyEqFluid() }; + enum { sPhaseIdx = ModelTraits::numPhases() }; + +public: + //! state the discretization method this implementation belongs to + static const DiscretizationMethod discMethod = DiscretizationMethod::cctpfa; + + using Cache = FluxVariablesCaching::EmptyHeatConductionCache; + + //! Compute the heat condution flux assuming thermal equilibrium + static Scalar flux(const Problem& problem, + const Element& element, + const FVElementGeometry& fvGeometry, + const ElementVolumeVariables& elemVolVars, + const SubControlVolumeFace& scvf, + const int phaseIdx, + const ElementFluxVarsCache& elemFluxVarsCache) + { + Scalar tInside = 0.0; + Scalar tOutside = 0.0; + // get the inside/outside temperatures + if (phaseIdx < numEnergyEqFluid) + { + tInside += elemVolVars[scvf.insideScvIdx()].temperatureFluid(phaseIdx); + tOutside += elemVolVars[scvf.outsideScvIdx()].temperatureFluid(phaseIdx); + } + else //temp solid + { + tInside += elemVolVars[scvf.insideScvIdx()].temperatureSolid(); + tOutside += elemVolVars[scvf.outsideScvIdx()].temperatureSolid(); + } + + Scalar tij = calculateTransmissibility(problem, element, fvGeometry, elemVolVars, scvf, phaseIdx); + return tij*(tInside - tOutside); + } + + //! Compute transmissibilities + static Scalar calculateTransmissibility(const Problem& problem, + const Element& element, + const FVElementGeometry& fvGeometry, + const ElementVolumeVariables& elemVolVars, + const SubControlVolumeFace& scvf, + const int phaseIdx) + { + Scalar tij; + + const auto insideScvIdx = scvf.insideScvIdx(); + const auto& insideScv = fvGeometry.scv(insideScvIdx); + const auto& insideVolVars = elemVolVars[insideScvIdx]; + Scalar insideLambda = 0.0; + Scalar outsideLambda = 0.0; + + // effective diffusion tensors + if (phaseIdx != sPhaseIdx) + { + //when number of energyEq for the fluid are smaller than numPhases that means that we need an effecitve law + if (numEnergyEqFluid < ModelTraits::numPhases()) + { + insideLambda += ThermalConductivityModel::effectiveThermalConductivity(insideVolVars, problem.spatialParams(), element, fvGeometry, insideScv); + } + else //numEnergyEqFluid >1 + { + insideLambda += insideVolVars.fluidThermalConductivity(phaseIdx)*insideVolVars.saturation(phaseIdx)*insideVolVars.porosity(); + } + } + //solid phase + else + { + insideLambda += insideVolVars.solidThermalConductivity()*(1.0-insideVolVars.porosity()); + } + + const Scalar ti = computeTpfaTransmissibility(scvf, insideScv, insideLambda, insideVolVars.extrusionFactor()); + + // for the boundary (dirichlet) or at branching points we only need ti + if (scvf.boundary() || scvf.numOutsideScvs() > 1) + { + tij = scvf.area()*ti; + } + // otherwise we compute a tpfa harmonic mean + else + { + const auto outsideScvIdx = scvf.outsideScvIdx(); + const auto& outsideScv = fvGeometry.scv(outsideScvIdx); + const auto& outsideVolVars = elemVolVars[outsideScvIdx]; + + // effective diffusion tensors + if (phaseIdx != sPhaseIdx) + { + //when number of energyEq for the fluid are smaller than numPhases that means that we need an effecitve law + if (numEnergyEqFluid < ModelTraits::numPhases()) + { + outsideLambda += ThermalConductivityModel::effectiveThermalConductivity(outsideVolVars, problem.spatialParams(), element, fvGeometry, outsideScv); + } + else + { + outsideLambda += outsideVolVars.fluidThermalConductivity(phaseIdx)*outsideVolVars.saturation(phaseIdx)*outsideVolVars.porosity(); + } + } + //solid phase + else + { + outsideLambda +=outsideVolVars.solidThermalConductivity()*(1.0-outsideVolVars.porosity()); + } + Scalar tj; + if (dim == dimWorld) + // assume the normal vector from outside is anti parallel so we save flipping a vector + tj = -1.0*computeTpfaTransmissibility(scvf, outsideScv, outsideLambda, outsideVolVars.extrusionFactor()); + else + tj = computeTpfaTransmissibility(fvGeometry.flipScvf(scvf.index()), outsideScv, outsideLambda, outsideVolVars.extrusionFactor()); + + // check for division by zero! + if (ti*tj <= 0.0) + tij = 0; + else + tij = scvf.area()*(ti * tj)/(ti + tj); + } + return tij; + } +}; + +} // end namespace Dumux + +#endif diff --git a/dumux/flux/fourierslawnonequilibrium.hh b/dumux/flux/fourierslawnonequilibrium.hh index cbd9c38946d9d29decd08e89b7f6cc2795383d20..ad6822283a5826727ca3837d65dd69c2d2a1f91f 100644 --- a/dumux/flux/fourierslawnonequilibrium.hh +++ b/dumux/flux/fourierslawnonequilibrium.hh @@ -43,6 +43,7 @@ using FouriersLawNonEquilibrium = FouriersLawNonEquilibriumImplementation<TypeTa } // end namespace Dumux +#include <dumux/discretization/cellcentered/tpfa/fourierslawnonequilibrium.hh> #include <dumux/discretization/box/fourierslawnonequilibrium.hh> #endif diff --git a/dumux/material/constraintsolvers/immiscibleflash.hh b/dumux/material/constraintsolvers/immiscibleflash.hh index c8cf66acd2542ba1dcba046efa04daeba7db9750..366b02617ef6d938d6319f1b6f0370913c29279a 100644 --- a/dumux/material/constraintsolvers/immiscibleflash.hh +++ b/dumux/material/constraintsolvers/immiscibleflash.hh @@ -80,6 +80,14 @@ class ImmiscibleFlash public: using ComponentVector = Dune::FieldVector<Scalar, numComponents>; + /*! + * \brief Contruct a new flash + * \param wettingPhaseIdx the phase index of the wetting phase + */ + explicit ImmiscibleFlash(int wettingPhaseIdx = 0) + : wettingPhaseIdx_(wettingPhaseIdx) + {} + /*! * \brief Guess initial values for all quantities. * \param fluidState Thermodynamic state of the fluids @@ -87,9 +95,9 @@ public: * \param globalMolarities */ template <class FluidState> - static void guessInitial(FluidState &fluidState, - ParameterCache ¶mCache, - const ComponentVector &globalMolarities) + void guessInitial(FluidState &fluidState, + ParameterCache ¶mCache, + const ComponentVector &globalMolarities) { // the sum of all molarities Scalar sumMoles = 0; @@ -116,10 +124,10 @@ public: * The phase's fugacities must already be set. */ template <class MaterialLaw, class FluidState> - static void solve(FluidState &fluidState, - ParameterCache ¶mCache, - const typename MaterialLaw::Params &matParams, - const ComponentVector &globalMolarities) + void solve(FluidState &fluidState, + ParameterCache ¶mCache, + const typename MaterialLaw::Params &matParams, + const ComponentVector &globalMolarities) { #if DUNE_VERSION_LT(DUNE_COMMON, 2, 7) Dune::FMatrixPrecision<Scalar>::set_singular_limit(1e-25); @@ -151,7 +159,7 @@ public: } } - ///////////////////////// +// ///////////////////////// // Newton method ///////////////////////// @@ -235,7 +243,7 @@ public: protected: template <class FluidState> - static void printFluidState_(const FluidState &fs) + void printFluidState_(const FluidState &fs) { std::cout << "saturations: "; for (int phaseIdx = 0; phaseIdx < numPhases; ++phaseIdx) @@ -264,12 +272,12 @@ protected: } template <class MaterialLaw, class FluidState> - static void linearize_(Matrix &J, - Vector &b, - FluidState &fluidState, - ParameterCache ¶mCache, - const typename MaterialLaw::Params &matParams, - const ComponentVector &globalMolarities) + void linearize_(Matrix &J, + Vector &b, + FluidState &fluidState, + ParameterCache ¶mCache, + const typename MaterialLaw::Params &matParams, + const ComponentVector &globalMolarities) { FluidState origFluidState(fluidState); ParameterCache origParamCache(paramCache); @@ -314,10 +322,10 @@ protected: } template <class FluidState> - static void calculateDefect_(Vector &b, - const FluidState &fluidStateEval, - const FluidState &fluidState, - const ComponentVector &globalMolarities) + void calculateDefect_(Vector &b, + const FluidState &fluidStateEval, + const FluidState &fluidState, + const ComponentVector &globalMolarities) { // global molarities are given for (int phaseIdx = 0; phaseIdx < numPhases; ++phaseIdx) { @@ -330,10 +338,10 @@ protected: } template <class MaterialLaw, class FluidState> - static Scalar update_(FluidState &fluidState, - ParameterCache ¶mCache, - const typename MaterialLaw::Params &matParams, - const Vector &deltaX) + Scalar update_(FluidState &fluidState, + ParameterCache ¶mCache, + const typename MaterialLaw::Params &matParams, + const Vector &deltaX) { Scalar relError = 0; for (int pvIdx = 0; pvIdx < numEq; ++ pvIdx) { @@ -364,9 +372,9 @@ protected: } template <class MaterialLaw, class FluidState> - static void completeFluidState_(FluidState &fluidState, - ParameterCache ¶mCache, - const typename MaterialLaw::Params &matParams) + void completeFluidState_(FluidState &fluidState, + ParameterCache ¶mCache, + const typename MaterialLaw::Params &matParams) { // calculate the saturation of the last phase as a function of // the other saturations @@ -392,7 +400,7 @@ protected: // and first pressure are already set because it is implicitly // solved for.) ComponentVector pc; - MaterialLaw::capillaryPressures(pc, matParams, fluidState); + MaterialLaw::capillaryPressures(pc, matParams, fluidState, wettingPhaseIdx_); for (int phaseIdx = 1; phaseIdx < numPhases; ++phaseIdx) fluidState.setPressure(phaseIdx, fluidState.pressure(0) @@ -410,15 +418,15 @@ protected: } } - static bool isPressureIdx_(int pvIdx) + bool isPressureIdx_(int pvIdx) { return pvIdx == 0; } - static bool isSaturationIdx_(int pvIdx) + bool isSaturationIdx_(int pvIdx) { return 1 <= pvIdx && pvIdx < numPhases; } // retrieves a quantity from the fluid state template <class FluidState> - static Scalar getQuantity_(const FluidState &fs, int pvIdx) + Scalar getQuantity_(const FluidState &fs, int pvIdx) { assert(pvIdx < numEq); @@ -437,11 +445,11 @@ protected: // set a quantity in the fluid state template <class MaterialLaw, class FluidState> - static void setQuantity_(FluidState &fs, - ParameterCache ¶mCache, - const typename MaterialLaw::Params &matParams, - int pvIdx, - Scalar value) + void setQuantity_(FluidState &fs, + ParameterCache ¶mCache, + const typename MaterialLaw::Params &matParams, + int pvIdx, + Scalar value) { assert(0 <= pvIdx && pvIdx < numEq); @@ -478,7 +486,7 @@ protected: // update all fluid pressures using the capillary pressure // law ComponentVector pc; - MaterialLaw::capillaryPressures(pc, matParams, fs); + MaterialLaw::capillaryPressures(pc, matParams, fs, wettingPhaseIdx_); for (int phaseIdx = 1; phaseIdx < numPhases; ++phaseIdx) fs.setPressure(phaseIdx, fs.pressure(0) @@ -498,7 +506,7 @@ protected: // set a quantity in the fluid state template <class FluidState> - static void setQuantityRaw_(FluidState &fs, int pvIdx, Scalar value) + void setQuantityRaw_(FluidState &fs, int pvIdx, Scalar value) { assert(pvIdx < numEq); @@ -521,7 +529,7 @@ protected: } template <class FluidState> - static Scalar quantityWeight_(const FluidState &fs, int pvIdx) + Scalar quantityWeight_(const FluidState &fs, int pvIdx) { // first pressure if (pvIdx < 1) @@ -532,6 +540,10 @@ protected: return 1.0; } } + +private: + int wettingPhaseIdx_ = 0; //!< the phase index of the wetting phase + }; } // end namespace Dumux diff --git a/dumux/material/constraintsolvers/ncpflash.hh b/dumux/material/constraintsolvers/ncpflash.hh index a10c2c3959f69e2ce1ba656bbf3123c35a52da1a..91af2f2bd438ca130633bc5e7ada7db645a5c76d 100644 --- a/dumux/material/constraintsolvers/ncpflash.hh +++ b/dumux/material/constraintsolvers/ncpflash.hh @@ -91,6 +91,14 @@ class NcpFlash public: using ComponentVector = Dune::FieldVector<Scalar, numComponents>; + /*! + * \brief Contruct a new flash + * \param wettingPhaseIdx the phase index of the wetting phase + */ + explicit NcpFlash(int wettingPhaseIdx = 0) + : wettingPhaseIdx_(wettingPhaseIdx) + {} + /*! * \brief Guess initial values for all quantities. * \param fluidState Thermodynamic state of the fluids @@ -98,9 +106,9 @@ public: * \param globalMolarities */ template <class FluidState> - static void guessInitial(FluidState &fluidState, - ParameterCache ¶mCache, - const ComponentVector &globalMolarities) + void guessInitial(FluidState &fluidState, + ParameterCache ¶mCache, + const ComponentVector &globalMolarities) { // the sum of all molarities Scalar sumMoles = 0; @@ -142,10 +150,10 @@ public: * The phase's fugacities must already be set. */ template <class MaterialLaw, class FluidState> - static void solve(FluidState &fluidState, - ParameterCache ¶mCache, - const typename MaterialLaw::Params &matParams, - const ComponentVector &globalMolarities) + void solve(FluidState &fluidState, + ParameterCache ¶mCache, + const typename MaterialLaw::Params &matParams, + const ComponentVector &globalMolarities) { #if DUNE_VERSION_LT(DUNE_COMMON, 2, 7) Dune::FMatrixPrecision<Scalar>::set_singular_limit(1e-25); @@ -264,7 +272,7 @@ public: protected: template <class FluidState> - static void printFluidState_(const FluidState &fs) + void printFluidState_(const FluidState &fs) { std::cout << "saturations: "; for (int phaseIdx = 0; phaseIdx < numPhases; ++phaseIdx) @@ -314,12 +322,12 @@ protected: } template <class MaterialLaw, class FluidState> - static void linearize_(Matrix &J, - Vector &b, - FluidState &fluidState, - ParameterCache ¶mCache, - const typename MaterialLaw::Params &matParams, - const ComponentVector &globalMolarities) + void linearize_(Matrix &J, + Vector &b, + FluidState &fluidState, + ParameterCache ¶mCache, + const typename MaterialLaw::Params &matParams, + const ComponentVector &globalMolarities) { FluidState origFluidState(fluidState); ParameterCache origParamCache(paramCache); @@ -365,10 +373,10 @@ protected: } template <class FluidState> - static void calculateDefect_(Vector &b, - const FluidState &fluidStateEval, - const FluidState &fluidState, - const ComponentVector &globalMolarities) + void calculateDefect_(Vector &b, + const FluidState &fluidStateEval, + const FluidState &fluidState, + const ComponentVector &globalMolarities) { int eqIdx = 0; @@ -423,10 +431,10 @@ protected: } template <class MaterialLaw, class FluidState> - static Scalar update_(FluidState &fluidState, - ParameterCache ¶mCache, - const typename MaterialLaw::Params &matParams, - const Vector &deltaX) + Scalar update_(FluidState &fluidState, + ParameterCache ¶mCache, + const typename MaterialLaw::Params &matParams, + const Vector &deltaX) { Scalar relError = 0; for (int pvIdx = 0; pvIdx < numEq; ++ pvIdx) { @@ -499,9 +507,9 @@ protected: } template <class MaterialLaw, class FluidState> - static void completeFluidState_(FluidState &fluidState, - ParameterCache ¶mCache, - const typename MaterialLaw::Params &matParams) + void completeFluidState_(FluidState &fluidState, + ParameterCache ¶mCache, + const typename MaterialLaw::Params &matParams) { // calculate the saturation of the last phase as a function of // the other saturations @@ -514,7 +522,7 @@ protected: // and first pressure are already set because it is implicitly // solved for.) ComponentVector pc; - MaterialLaw::capillaryPressures(pc, matParams, fluidState); + MaterialLaw::capillaryPressures(pc, matParams, fluidState, wettingPhaseIdx_); for (int phaseIdx = 1; phaseIdx < numPhases; ++phaseIdx) fluidState.setPressure(phaseIdx, fluidState.pressure(0) @@ -538,18 +546,18 @@ protected: } } - static bool isPressureIdx_(int pvIdx) + bool isPressureIdx_(int pvIdx) { return pvIdx == 0; } - static bool isSaturationIdx_(int pvIdx) + bool isSaturationIdx_(int pvIdx) { return 1 <= pvIdx && pvIdx < numPhases; } - static bool isMoleFracIdx_(int pvIdx) + bool isMoleFracIdx_(int pvIdx) { return numPhases <= pvIdx && pvIdx < numPhases + numPhases*numComponents; } // retrieves a quantity from the fluid state template <class FluidState> - static Scalar getQuantity_(const FluidState &fs, int pvIdx) + Scalar getQuantity_(const FluidState &fs, int pvIdx) { assert(pvIdx < numEq); @@ -574,11 +582,11 @@ protected: // set a quantity in the fluid state template <class MaterialLaw, class FluidState> - static void setQuantity_(FluidState &fs, - ParameterCache ¶mCache, - const typename MaterialLaw::Params &matParams, - int pvIdx, - Scalar value) + void setQuantity_(FluidState &fs, + ParameterCache ¶mCache, + const typename MaterialLaw::Params &matParams, + int pvIdx, + Scalar value) { assert(0 <= pvIdx && pvIdx < numEq); @@ -616,7 +624,7 @@ protected: // update all fluid pressures using the capillary pressure // law ComponentVector pc; - MaterialLaw::capillaryPressures(pc, matParams, fs); + MaterialLaw::capillaryPressures(pc, matParams, fs, wettingPhaseIdx_); for (int phaseIdx = 1; phaseIdx < numPhases; ++phaseIdx) fs.setPressure(phaseIdx, fs.pressure(0) @@ -666,7 +674,7 @@ protected: // set a quantity in the fluid state template <class FluidState> - static void setQuantityRaw_(FluidState &fs, int pvIdx, Scalar value) + void setQuantityRaw_(FluidState &fs, int pvIdx, Scalar value) { assert(pvIdx < numEq); @@ -690,7 +698,7 @@ protected: } template <class FluidState> - static Scalar quantityWeight_(const FluidState &fs, int pvIdx) + Scalar quantityWeight_(const FluidState &fs, int pvIdx) { // first pressure if (pvIdx < 1) @@ -702,6 +710,9 @@ protected: else // if (pvIdx < numPhases + numPhases*numComponents) return 1.0; } + +private: + int wettingPhaseIdx_ = 0; //!< the phase index of the wetting phase }; } // end namespace Dumux diff --git a/dumux/material/fluidmatrixinteractions/1pia/CMakeLists.txt b/dumux/material/fluidmatrixinteractions/1pia/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..f531c299e63e82d7423ee38a078fdb662753f474 --- /dev/null +++ b/dumux/material/fluidmatrixinteractions/1pia/CMakeLists.txt @@ -0,0 +1,3 @@ +install(FILES +fluidsolidinterfacialareashiwang.hh +DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/dumux/material/fluidmatrixinteractions/1pia) diff --git a/dumux/material/fluidmatrixinteractions/1pia/fluidsolidinterfacialareashiwang.hh b/dumux/material/fluidmatrixinteractions/1pia/fluidsolidinterfacialareashiwang.hh new file mode 100644 index 0000000000000000000000000000000000000000..c9009ff698c78e0f8c21b7dec6adeedd12dc0df2 --- /dev/null +++ b/dumux/material/fluidmatrixinteractions/1pia/fluidsolidinterfacialareashiwang.hh @@ -0,0 +1,50 @@ +// -*- 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 2 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 Fluidmatrixinteractions + * \brief Description of a interfacial area between solid and fluid phase + */ +#ifndef FLUIDSOLID_INTERFACIALAREA_SHI_WANG_HH +#define FLUIDSOLID_INTERFACIALAREA_SHI_WANG_HH + +namespace Dumux { + +/*! + * \ingroup Fluidmatrixinteractions + * \brief Description of a interfacial area between solid and fluid phase + */ +template<class Scalar> +class FluidSolidInterfacialAreaShiWang +{ +public: + /*! + * \brief Relation for the interfacial area between a fluid and a solid phase + * after Shi & Wang, Transport in porous media (2011) + * + * \return interfacial area + */ + static Scalar fluidSolidInterfacialArea(const Scalar porosity, + const Scalar characteristicLength) + { return 6.0*(1.0-porosity)/characteristicLength; } +}; + +} // end namespace Dumux + +#endif diff --git a/dumux/material/fluidmatrixinteractions/CMakeLists.txt b/dumux/material/fluidmatrixinteractions/CMakeLists.txt index 49de0b5b04c0465e7e3f071320bd8255aa2fc60c..9e1fe9ded7883cdd0dfacf41c80321a683a6c3e1 100644 --- a/dumux/material/fluidmatrixinteractions/CMakeLists.txt +++ b/dumux/material/fluidmatrixinteractions/CMakeLists.txt @@ -1,4 +1,5 @@ add_subdirectory(1p) +add_subdirectory(1pia) add_subdirectory(2p) add_subdirectory(2pia) add_subdirectory(3p) diff --git a/dumux/material/fluidmatrixinteractions/mp/2poftadapter.hh b/dumux/material/fluidmatrixinteractions/mp/2poftadapter.hh index 8f694447c43a45969f975266d7802e5ca13731cc..44a4bc7a7404d249b48397fe5f4ebb3ee97dad83 100644 --- a/dumux/material/fluidmatrixinteractions/mp/2poftadapter.hh +++ b/dumux/material/fluidmatrixinteractions/mp/2poftadapter.hh @@ -50,11 +50,13 @@ public: * \param pc Container for capillary pressure in \f$\mathrm{[Pa]}\f$ * \param params Array of parameters * \param fluidState Fluidstate + * \param wPhaseIdx the phase index of the wetting phase */ template <class pcContainerT, class FluidState> static void capillaryPressures(pcContainerT &pc, - const Params ¶ms, - const FluidState &fluidState) + const Params ¶ms, + const FluidState &fluidState, + int wPhaseIdx = 0) { // non-wetting phase gets the capillary pressure added pc[nPhaseIdx] = 0; diff --git a/dumux/material/fluidmatrixinteractions/mp/CMakeLists.txt b/dumux/material/fluidmatrixinteractions/mp/CMakeLists.txt index 1e3eda3176ae69248539d6f629b3b4ac543f5cca..b07d7c81529b26c99713d96f611af7e66c171460 100644 --- a/dumux/material/fluidmatrixinteractions/mp/CMakeLists.txt +++ b/dumux/material/fluidmatrixinteractions/mp/CMakeLists.txt @@ -1,5 +1,5 @@ install(FILES -2padapter.hh +mpadapter.hh 2poftadapter.hh mplinearmaterial.hh mplinearmaterialparams.hh diff --git a/dumux/material/fluidmatrixinteractions/mp/2padapter.hh b/dumux/material/fluidmatrixinteractions/mp/mpadapter.hh similarity index 66% rename from dumux/material/fluidmatrixinteractions/mp/2padapter.hh rename to dumux/material/fluidmatrixinteractions/mp/mpadapter.hh index 08f35e84796e066f0efdd86aaa383c2b94994d36..050135d640b02f46b8877739fd23e640ae56c5da 100644 --- a/dumux/material/fluidmatrixinteractions/mp/2padapter.hh +++ b/dumux/material/fluidmatrixinteractions/mp/mpadapter.hh @@ -19,52 +19,54 @@ /*! * \file * \ingroup Fluidmatrixinteractions - * \brief Makes the twophase capillary pressure-saturation relations available under the M-phase API for material laws + * \brief Makes the capillary pressure-saturation relations available under the M-phase API for material laws * - * Makes the twophase capillary pressure-saturation relations + * Makes the capillary pressure-saturation relations * available under the M-phase API for material laws */ -#ifndef DUMUX_MP_2P_ADAPTER_HH -#define DUMUX_MP_2P_ADAPTER_HH +#ifndef DUMUX_MP_ADAPTER_HH +#define DUMUX_MP_ADAPTER_HH #include <algorithm> +#include <cassert> +#include <dumux/common/typetraits/typetraits.hh> namespace Dumux { /*! * \ingroup Fluidmatrixinteractions - * \brief Implements a brookscorey saturation-capillary pressure relation - * - * Implements a brookscorey saturation-capillary pressure relation for - * M-phase fluid systems. - * - * \sa MpBrookscoreyMaterialParams + * \brief An adapter for mpnc to use the capillary pressure-saturation relationships */ -template <int wPhaseIdx, class TwoPLaw > -class TwoPAdapter +template <class MaterialLaw, int numPhases> +class MPAdapter { - enum { nPhaseIdx = (wPhaseIdx == 0)?1:0 }; + static_assert(AlwaysFalse<MaterialLaw>::value, "Adapter not implemented for the specified number of phases"); +}; +template <class MaterialLaw> +class MPAdapter<MaterialLaw, 2 /*numPhases*/> +{ public: - using Params = typename TwoPLaw::Params; - enum { numPhases = 2 }; - + using Params = typename MaterialLaw::Params; /*! * \brief The capillary pressure-saturation curve. * \param values Container for the return values * \param params Array of parameters * \param state Fluidstate + * \param wPhaseIdx the phase index of the wetting phase */ template <class ContainerT, class FluidState> static void capillaryPressures(ContainerT &values, const Params ¶ms, - const FluidState &state) + const FluidState &state, + int wPhaseIdx) { + assert(values.size() == 2); + const int nPhaseIdx = 1 - wPhaseIdx; // non-wetting phase gets the capillary pressure added values[nPhaseIdx] = 0; - // wetting phase does not get anything added - values[wPhaseIdx] = - TwoPLaw::pc(params, state.saturation(wPhaseIdx)); + values[wPhaseIdx] = - MaterialLaw::pc(params, state.saturation(wPhaseIdx)); } /*! @@ -78,8 +80,11 @@ public: const Params ¶ms, const FluidState &state) { - values[wPhaseIdx] = TwoPLaw::krw(params, state.saturation(wPhaseIdx)); - values[nPhaseIdx] = TwoPLaw::krn(params, state.saturation(wPhaseIdx)); + const int wPhaseIdx = state.wettingPhase(); + assert(values.size() == 2); + const int nPhaseIdx = 1 - wPhaseIdx; + values[wPhaseIdx] = MaterialLaw::krw(params, state.saturation(wPhaseIdx)); + values[nPhaseIdx] = MaterialLaw::krn(params, state.saturation(wPhaseIdx)); } }; } diff --git a/dumux/material/fluidmatrixinteractions/mp/mplinearmaterial.hh b/dumux/material/fluidmatrixinteractions/mp/mplinearmaterial.hh index d1b1aa33be4aa8f7be1c91fefc151fa429de22c7..055ef6bfae89a77773224f85862ee83d8c786f91 100644 --- a/dumux/material/fluidmatrixinteractions/mp/mplinearmaterial.hh +++ b/dumux/material/fluidmatrixinteractions/mp/mplinearmaterial.hh @@ -61,11 +61,13 @@ public: * \param values Container for the return values * \param params Array of Parameters * \param state The fluid state + * \param wPhaseIdx the phase index of the wetting phase */ template <class ContainerT, class FluidState> static void capillaryPressures(ContainerT &values, const Params ¶ms, - const FluidState &state) + const FluidState &state, + int wPhaseIdx = 0) { for (int phaseIdx = 0; phaseIdx < numPhases; ++phaseIdx) { Scalar S = state.saturation(phaseIdx); diff --git a/dumux/material/fluidstates/compositional.hh b/dumux/material/fluidstates/compositional.hh index b15c708aedd91b7aa9649f9b1478e7247c7a52b6..ba3e7dd19d16f354278641feb76bb15318d430ee 100644 --- a/dumux/material/fluidstates/compositional.hh +++ b/dumux/material/fluidstates/compositional.hh @@ -73,8 +73,6 @@ public: /*! * \brief Returns the index of the wetting phase in the * fluid-solid configuration (for porous medium systems). - * - * \param phaseIdx the index of the phase */ int wettingPhase() const { return wPhaseIdx_; } diff --git a/dumux/material/fluidstates/immiscible.hh b/dumux/material/fluidstates/immiscible.hh index 68b6e29cc2395dc79a167ce8912d7fe47d7e78a0..e03e69332b02bac5aeb507676e700879551f0236 100644 --- a/dumux/material/fluidstates/immiscible.hh +++ b/dumux/material/fluidstates/immiscible.hh @@ -65,6 +65,7 @@ public: * Generic access to fluid properties (No assumptions * on thermodynamic equilibrium required) *****************************************************/ + /*! * \brief Returns the saturation \f$S_\alpha\f$ of a fluid phase \f$\alpha\f$ in \f$\mathrm{[-]}\f$. * @@ -332,7 +333,6 @@ public: */ void setViscosity(int phaseIdx, Scalar value) { viscosity_[phaseIdx] = value; } - protected: //! zero-initialize all data members with braces syntax Scalar pressure_[numPhases] = {}; diff --git a/dumux/material/spatialparams/fvnonequilibrium.hh b/dumux/material/spatialparams/fvnonequilibrium.hh new file mode 100644 index 0000000000000000000000000000000000000000..809adc95e9271c79ad619ff2bd5f174dc1e76488 --- /dev/null +++ b/dumux/material/spatialparams/fvnonequilibrium.hh @@ -0,0 +1,127 @@ +// -*- 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 2 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 SpatialParameters + * \brief base class for spatialparameters dealing with thermal and chemical nonequilibrium + * + */ +#ifndef DUMUX_FV_SPATIALPARAMS_NONEQUILIBRIUM_HH +#define DUMUX_FV_SPATIALPARAMS_NONEQUILIBRIUM_HH + +#include <dumux/material/spatialparams/fv.hh> + +namespace Dumux { + +/** + * \brief Definition of the spatial parameters for nonequilibrium + */ +template<class FVGridGeometry, class Scalar, class Implementation> +class FVNonEquilibriumSpatialParams +: public FVSpatialParams<FVGridGeometry, Scalar, Implementation> +{ + using ParentType = FVSpatialParams<FVGridGeometry, Scalar, Implementation>; + using GridView = typename FVGridGeometry::GridView; + using FVElementGeometry = typename FVGridGeometry::LocalView; + using SubControlVolume = typename FVGridGeometry::SubControlVolume; + using Element = typename GridView::template Codim<0>::Entity; + using GlobalPosition = typename Element::Geometry::GlobalCoordinate; + +public: + //! export the types used for interfacial area calculations + using AwnSurfaceParams = Scalar; + using AwsSurfaceParams = Scalar; + using AnsSurfaceParams = Scalar; + + FVNonEquilibriumSpatialParams(std::shared_ptr<const FVGridGeometry> fvGridGeometry) + : ParentType(fvGridGeometry) + { } + + /*!\brief Return the characteristic length for the mass transfer. + * + * The position is determined based on the coordinate of + * the vertex belonging to the considered sub controle volume. + * \param element The finite element + * \param fvGeometry The finite volume geometry + * \param scvIdx The local index of the sub control volume */ + template<class ElementSolution> + const Scalar characteristicLength(const Element & element, + const SubControlVolume &scv, + const ElementSolution &elemSol) const + + { return this->asImp_().characteristicLengthAtPos(scv.dofPosition()); } + + /*!\brief Return the characteristic length for the mass transfer. + * \param globalPos The position in global coordinates.*/ + const Scalar characteristicLengthAtPos(const GlobalPosition & globalPos) const + { + DUNE_THROW(Dune::InvalidStateException, + "The spatial parameters do not provide " + "a characteristicLengthAtPos() method."); + } + + /*!\brief Return the pre factor the the energy transfer + * + * The position is determined based on the coordinate of + * the vertex belonging to the considered sub controle volume. + * \param element The finite element + * \param fvGeometry The finite volume geometry + * \param scvIdx The local index of the sub control volume */ + template<class ElementSolution> + const Scalar factorEnergyTransfer(const Element &element, + const SubControlVolume &scv, + const ElementSolution &elemSol) const + { return this->asImp_().factorEnergyTransferAtPos(scv.dofPosition()); } + + /*!\brief Return the pre factor the the energy transfer + * \param globalPos The position in global coordinates.*/ + const Scalar factorEnergyTransferAtPos(const GlobalPosition & globalPos) const + { + DUNE_THROW(Dune::InvalidStateException, + "The spatial parameters do not provide " + "a factorEnergyTransferAtPos() method."); + } + + /*!\brief Return the pre factor the the mass transfer + * + * The position is determined based on the coordinate of + * the vertex belonging to the considered sub controle volume. + * \param element The finite element + * \param fvGeometry The finite volume geometry + * \param scvIdx The local index of the sub control volume */ + template<class ElementSolution> + const Scalar factorMassTransfer(const Element &element, + const SubControlVolume &scv, + const ElementSolution &elemSol) const + { return this->asImp_().factorMassTransferAtPos(scv.dofPosition()); } + + + /*!\brief Return the pre factor the the mass transfer + * \param globalPos The position in global coordinates.*/ + const Scalar factorMassTransferAtPos(const GlobalPosition & globalPos) const + { + DUNE_THROW(Dune::InvalidStateException, + "The spatial parameters do not provide " + "a factorMassTransferAtPos() method."); + } +}; + +} + +#endif // GUARDIAN diff --git a/dumux/porousmediumflow/1pnc/model.hh b/dumux/porousmediumflow/1pnc/model.hh index f710c2b2aac84ff9f33ce91a4fdea98ba491c734..856bfdd71674bc125fa4fa379553fc69def5e5cd 100644 --- a/dumux/porousmediumflow/1pnc/model.hh +++ b/dumux/porousmediumflow/1pnc/model.hh @@ -68,6 +68,8 @@ #include <dumux/porousmediumflow/nonisothermal/model.hh> #include <dumux/porousmediumflow/nonisothermal/indices.hh> #include <dumux/porousmediumflow/nonisothermal/iofields.hh> +#include <dumux/porousmediumflow/nonequilibrium/model.hh> +#include <dumux/porousmediumflow/nonequilibrium/volumevariables.hh> #include <dumux/material/fluidmatrixinteractions/diffusivitymillingtonquirk.hh> #include "indices.hh" @@ -165,7 +167,6 @@ public: template<class TypeTag> struct ModelTraits<TypeTag, TTag::OnePNC> { using type = GetPropType<TypeTag, Properties::BaseModelTraits>; }; //!< default the actually used traits to the base traits - /*! * \brief The fluid state which is used by the volume variables to * store the thermodynamic state. This should be chosen @@ -245,6 +246,95 @@ public: using type = PorousMediumFlowNIModelTraits<IsothermalTraits>; }; +} // end namespace Properties + +template<class OnePNCModelTraits> +struct OnePNCUnconstrainedModelTraits : public OnePNCModelTraits +{ + static constexpr int numConstraintEq() { return 0; } +}; + +namespace Properties { +////////////////////////////////////////////////////////////////// +// Type tags +////////////////////////////////////////////////////////////////// +namespace TTag { +struct OnePNCNonEquil { using InheritsFrom = std::tuple<NonEquilibrium, OnePNC>; }; +} // end namespace TTag + + +///////////////////////////////////////////////// +// Properties for the non-equilibrium OnePNC model +///////////////////////////////////////////////// + +template<class TypeTag> +struct EquilibriumLocalResidual<TypeTag, TTag::OnePNCNonEquil> { using type = CompositionalLocalResidual<TypeTag>; }; + +//! Set the vtk output fields specific to this model +template<class TypeTag> +struct EquilibriumIOFields<TypeTag, TTag::OnePNCNonEquil> { using type = OnePNCIOFields; }; + +template<class TypeTag> +struct ModelTraits<TypeTag, TTag::OnePNCNonEquil> +{ +private: + using EquiTraits = GetPropType<TypeTag, Properties::EquilibriumModelTraits>; + static constexpr bool enableTNE = getPropValue<TypeTag, Properties::EnableThermalNonEquilibrium>(); + static constexpr bool enableCNE = getPropValue<TypeTag, Properties::EnableChemicalNonEquilibrium>(); + static constexpr int numEF = getPropValue<TypeTag, Properties::NumEnergyEqFluid>(); + static constexpr int numES = getPropValue<TypeTag, Properties::NumEnergyEqSolid>(); + static constexpr auto nf = getPropValue<TypeTag, Properties::NusseltFormulation>(); + static constexpr auto ns = getPropValue<TypeTag, Properties::SherwoodFormulation>(); + + using NonEquilTraits = NonEquilibriumModelTraits<EquiTraits, enableCNE, enableTNE, numEF, numES, nf, ns>; +public: + using type = NonEquilTraits; +}; + +// by default chemical non equilibrium is enabled in the nonequil model, switch that off here +template<class TypeTag> +struct EnableChemicalNonEquilibrium<TypeTag, TTag::OnePNCNonEquil> { static constexpr bool value = false; }; + +//! set equilibrium model traits +template<class TypeTag> +struct EquilibriumModelTraits<TypeTag, TTag::OnePNCNonEquil> +{ +private: + using FluidSystem = GetPropType<TypeTag, Properties::FluidSystem>; + using EquilibriumTraits = OnePNCModelTraits<FluidSystem::numComponents, getPropValue<TypeTag, Properties::UseMoles>(), getPropValue<TypeTag, Properties::ReplaceCompEqIdx>()>; +public: + using type = OnePNCUnconstrainedModelTraits<EquilibriumTraits>; +}; + +//! in case we do not assume full non-equilibrium one needs a thermal conductivity +template<class TypeTag> +struct ThermalConductivityModel<TypeTag, TTag::OnePNCNonEquil> +{ +private: + using Scalar = GetPropType<TypeTag, Properties::Scalar>; +public: + using type = ThermalConductivityAverage<Scalar>; +}; + +//! use the mineralization volume variables together with the 2pnc vol vars +template<class TypeTag> +struct VolumeVariables<TypeTag, TTag::OnePNCNonEquil> +{ +private: + using PV = GetPropType<TypeTag, Properties::PrimaryVariables>; + using FSY = GetPropType<TypeTag, Properties::FluidSystem>; + using FST = GetPropType<TypeTag, Properties::FluidState>; + using SSY = GetPropType<TypeTag, Properties::SolidSystem>; + using SST = GetPropType<TypeTag, Properties::SolidState>; + using MT = GetPropType<TypeTag, Properties::ModelTraits>; + using PT = typename GetPropType<TypeTag, Properties::SpatialParams>::PermeabilityType; + + using Traits = OnePNCVolumeVariablesTraits<PV, FSY, FST, SSY, SST, PT, MT>; + using EquilibriumVolVars = OnePNCVolumeVariables<Traits>; +public: + using type = NonEquilibriumVolumeVariables<Traits, EquilibriumVolVars>; +}; + } // end namespace Properties } // end namespace Dumux diff --git a/dumux/porousmediumflow/mpnc/volumevariables.hh b/dumux/porousmediumflow/mpnc/volumevariables.hh index 5d3a4e3459ea2da6780502013df397ef1e6b4acf..ff7f03165fa795f1352a06372b0a23ef39ff1aa7 100644 --- a/dumux/porousmediumflow/mpnc/volumevariables.hh +++ b/dumux/porousmediumflow/mpnc/volumevariables.hh @@ -28,10 +28,10 @@ #include <dumux/porousmediumflow/volumevariables.hh> #include <dumux/porousmediumflow/nonisothermal/volumevariables.hh> -#include <dumux/material/constraintsolvers/ncpflash.hh> #include <dumux/material/constraintsolvers/compositionfromfugacities.hh> #include <dumux/material/constraintsolvers/misciblemultiphasecomposition.hh> #include <dumux/material/solidstates/updatesolidvolumefractions.hh> +#include <dumux/material/fluidmatrixinteractions/mp/mpadapter.hh> #include "pressureformulation.hh" namespace Dumux { @@ -108,7 +108,8 @@ public: const auto& materialParams = problem.spatialParams().materialLawParams(element, scv, elemSol); // relative permeabilities using MaterialLaw = typename Problem::SpatialParams::MaterialLaw; - MaterialLaw::relativePermeabilities(relativePermeability_, + using MPAdapter = MPAdapter<MaterialLaw, numPhases()>; + MPAdapter::relativePermeabilities(relativePermeability_, materialParams, fluidState_); typename FluidSystem::ParameterCache paramCache; @@ -180,12 +181,15 @@ public: // set the phase pressures ///////////// // capillary pressure parameters + const int wPhaseIdx = problem.spatialParams().template wettingPhase<FluidSystem>(element, scv, elemSol); + fluidState.setWettingPhase(wPhaseIdx); const auto& materialParams = problem.spatialParams().materialLawParams(element, scv, elemSol); // capillary pressures - Scalar capPress[numPhases()]; + std::vector<Scalar> capPress(numPhases()); using MaterialLaw = typename Problem::SpatialParams::MaterialLaw; - MaterialLaw::capillaryPressures(capPress, materialParams, fluidState); + using MPAdapter = MPAdapter<MaterialLaw, numPhases()>; + MPAdapter::capillaryPressures(capPress, materialParams, fluidState, wPhaseIdx); // add to the pressure of the first fluid phase // depending on which pressure is stored in the primary variables @@ -488,7 +492,7 @@ protected: std::array<std::array<Scalar, numFluidComps-1>, numPhases()> diffCoefficient_; Scalar porosity_; //!< Effective porosity within the control volume - Scalar relativePermeability_[numPhases()]; //!< Effective relative permeability within the control volume + std::array<Scalar, ModelTraits::numPhases()> relativePermeability_; //!< Effective relative permeability within the control volume PermeabilityType permeability_; //! Mass fractions of each component within each phase @@ -559,9 +563,10 @@ public: // relative permeabilities using MaterialLaw = typename Problem::SpatialParams::MaterialLaw; - MaterialLaw::relativePermeabilities(relativePermeability_, - materialParams, - fluidState_); + using MPAdapter = MPAdapter<MaterialLaw, numPhases()>; + MPAdapter::relativePermeabilities(relativePermeability_, + materialParams, + fluidState_); typename FluidSystem::ParameterCache paramCache; paramCache.updateAll(fluidState_); if (enableDiffusion) @@ -632,10 +637,13 @@ public: // capillary pressure parameters const auto& materialParams = problem.spatialParams().materialLawParams(element, scv, elemSol); + const int wPhaseIdx = problem.spatialParams().template wettingPhase<FluidSystem>(element, scv, elemSol); + fluidState.setWettingPhase(wPhaseIdx); // capillary pressures - Scalar capPress[numPhases()]; + std::vector<Scalar> capPress(numPhases()); using MaterialLaw = typename Problem::SpatialParams::MaterialLaw; - MaterialLaw::capillaryPressures(capPress, materialParams, fluidState); + using MPAdapter = MPAdapter<MaterialLaw, numPhases()>; + MPAdapter::capillaryPressures(capPress, materialParams, fluidState, wPhaseIdx); // add to the pressure of the first fluid phase // depending on which pressure is stored in the primary variables @@ -996,7 +1004,7 @@ protected: } std::array<std::array<Scalar, numFluidComps-1>, numPhases()> diffCoefficient_; - Scalar relativePermeability_[numPhases()]; //!< Effective relative permeability within the control volume + std::array<Scalar, ModelTraits::numPhases()> relativePermeability_; //!< Effective relative permeability within the control volume PermeabilityType permeability_; Scalar xEquil_[numPhases()][numFluidComps]; diff --git a/dumux/porousmediumflow/nonequilibrium/model.hh b/dumux/porousmediumflow/nonequilibrium/model.hh index 1013d4031250b048857bca135bfa10e42a0f4354..893f81330c3e7a597c8837d12547cd887dcf607f 100644 --- a/dumux/porousmediumflow/nonequilibrium/model.hh +++ b/dumux/porousmediumflow/nonequilibrium/model.hh @@ -63,7 +63,7 @@ template<class ET, bool chem, bool therm, int numEF, int numES, NusseltFormulati struct NonEquilibriumModelTraits : public ET { static constexpr int numEq() { return numEnergyEqFluid()+numEnergyEqSolid()+numTransportEq()+ET::numConstraintEq(); } - static constexpr int numTransportEq() { return chem ? ET::numPhases()*ET::numComponents() : ET::numPhases(); } + static constexpr int numTransportEq() { return chem ? ET::numPhases()*ET::numComponents() : ET::numComponents(); } static constexpr int numEnergyEqFluid() { return therm ? numEF : 0; } static constexpr int numEnergyEqSolid() { return therm ? numES : 0; } diff --git a/dumux/porousmediumflow/nonequilibrium/thermal/localresidual.hh b/dumux/porousmediumflow/nonequilibrium/thermal/localresidual.hh index f7148515093eb7510a77bb5c32d1d5bb5e9b766b..b55b9e0e0ded869fc52c7c9b1c145237742e9531 100644 --- a/dumux/porousmediumflow/nonequilibrium/thermal/localresidual.hh +++ b/dumux/porousmediumflow/nonequilibrium/thermal/localresidual.hh @@ -66,8 +66,6 @@ class EnergyLocalResidualNonEquilibrium<TypeTag, 1/*numEnergyEqFluid*/> enum { numPhases = ModelTraits::numPhases() }; enum { numComponents = ModelTraits::numComponents() }; - enum { phase0Idx = FluidSystem::phase0Idx}; - enum { phase1Idx = FluidSystem::phase1Idx}; public: //! The energy storage in the fluid phase with index phaseIdx @@ -147,12 +145,10 @@ public: FluxVariables& fluxVars) { //in case we have one energy equation for more than one fluid phase we use an effective law in the nonequilibrium fourierslaw - flux[energyEq0Idx] += fluxVars.heatConductionFlux(0); + flux[energyEq0Idx] += fluxVars.heatConductionFlux(0); //heat conduction for the solid phases - for(int sPhaseIdx=0; sPhaseIdx<numEnergyEqSolid; ++sPhaseIdx) - { + for(int sPhaseIdx=0; sPhaseIdx<numEnergyEqSolid; ++sPhaseIdx) flux[energyEqSolidIdx+sPhaseIdx] += fluxVars.heatConductionFlux(numPhases + sPhaseIdx); - } } /*! @@ -168,82 +164,25 @@ public: { //specialization for 2 fluid phases const auto& volVars = elemVolVars[scv]; - const auto& fs = volVars.fluidState() ; const Scalar characteristicLength = volVars.characteristicLength() ; //interfacial area // Shi & Wang, Transport in porous media (2011) - const Scalar as = 6.0 * (1.0-volVars.porosity()) / characteristicLength ; + const Scalar as = volVars.fluidSolidInterfacialArea(); //temperature fluid is the same for both fluids const Scalar TFluid = volVars.temperatureFluid(0); const Scalar TSolid = volVars.temperatureSolid(); - const Scalar satW = fs.saturation(phase0Idx) ; - const Scalar satN = fs.saturation(phase1Idx) ; - - const Scalar eps = 1e-6 ; Scalar solidToFluidEnergyExchange ; - Scalar fluidConductivity ; - if (satW < 1.0 - eps) - fluidConductivity = volVars.fluidThermalConductivity(phase1Idx) ; - else if (satW >= 1.0 - eps) - fluidConductivity = volVars.fluidThermalConductivity(phase0Idx) ; - else - DUNE_THROW(Dune::NotImplemented, - "wrong range"); + const Scalar fluidConductivity = volVars.fluidThermalConductivity(0) ; const Scalar factorEnergyTransfer = volVars.factorEnergyTransfer() ; solidToFluidEnergyExchange = factorEnergyTransfer * (TSolid - TFluid) / characteristicLength * as * fluidConductivity ; - const Scalar epsRegul = 1e-3 ; - if (satW < (0 + eps) ) - { - solidToFluidEnergyExchange *= volVars.nusseltNumber(phase1Idx) ; - } - else if ( (satW >= 0 + eps) and (satW < 1.0-eps) ) - { - solidToFluidEnergyExchange *= (volVars.nusseltNumber(phase1Idx) * satN ); - Scalar qBoil ; - if (satW<=epsRegul) - {// regularize - typedef Dumux::Spline<Scalar> Spline; - Spline sp(0.0, epsRegul, // x1, x2 - QBoilFunc(volVars, 0.0), QBoilFunc(volVars, epsRegul), // y1, y2 - 0.0,dQBoil_dSw(volVars, epsRegul)); // m1, m2 - - qBoil = sp.eval(satW) ; - } - - else if (satW>= (1.0-epsRegul) ) - {// regularize - typedef Dumux::Spline<Scalar> Spline; - Spline sp(1.0-epsRegul, 1.0, // x1, x2 - QBoilFunc(volVars, 1.0-epsRegul), 0.0, // y1, y2 - dQBoil_dSw(volVars, 1.0-epsRegul), 0.0 ); // m1, m2 - - qBoil = sp.eval(satW) ; - } - else - { - qBoil = QBoilFunc(volVars, satW) ; - } - - solidToFluidEnergyExchange += qBoil; - } - else if (satW >= 1.0-eps) - { - solidToFluidEnergyExchange *= volVars.nusseltNumber(phase0Idx) ; - } - else - DUNE_THROW(Dune::NotImplemented, - "wrong range"); - - using std::isfinite; - if (!isfinite(solidToFluidEnergyExchange)) - DUNE_THROW(NumericalProblem, "Calculated non-finite source, " << "TFluid="<< TFluid << " TSolid="<< TSolid); + solidToFluidEnergyExchange *= volVars.nusseltNumber(0) ; for(int energyEqIdx =0; energyEqIdx<numEnergyEqFluid+numEnergyEqSolid; ++energyEqIdx) { @@ -261,53 +200,6 @@ public: } // end switch }// end energyEqIdx }// end source - - - /*! \brief Calculate the energy transfer during boiling, i.e. latent heat - * - * \param volVars The volume variables - * \param satW The wetting phase saturation. Not taken from volVars, because we regularize. - */ - static Scalar QBoilFunc(const VolumeVariables & volVars, - const Scalar satW) - { - // using saturation as input (instead of from volVars) - // in order to make regularization (evaluation at different points) easyer - const auto& fs = volVars.fluidState() ; - const Scalar g( 9.81 ) ; - const Scalar gamma(0.0589) ; - const Scalar TSolid = volVars.temperatureSolid(); - const Scalar characteristicLength = volVars.characteristicLength() ; - using std::pow; - const Scalar as = 6.0 * (1.0-volVars.porosity()) / characteristicLength ; - const Scalar mul = fs.viscosity(phase0Idx) ; - const Scalar deltahv = fs.enthalpy(phase1Idx) - fs.enthalpy(phase0Idx); - const Scalar deltaRho = fs.density(phase0Idx) - fs.density(phase1Idx) ; - const Scalar firstBracket = pow(g * deltaRho / gamma, 0.5); - const Scalar cp = FluidSystem::heatCapacity(fs, phase0Idx) ; - // This use of Tsat is only justified if the fluid is always boiling (tsat equals boiling conditions) - // If a different state is to be simulated, please use the actual fluid temperature instead. - const Scalar Tsat = FluidSystem::vaporTemperature(fs, phase1Idx ) ; - const Scalar deltaT = TSolid - Tsat ; - const Scalar secondBracket = pow( (cp *deltaT / (0.006 * deltahv) ) , 3.0 ) ; - const Scalar Prl = volVars.prandtlNumber(phase0Idx) ; - const Scalar thirdBracket = pow( 1/Prl , (1.7/0.33) ); - const Scalar QBoil = satW * as * mul * deltahv * firstBracket * secondBracket * thirdBracket ; - return QBoil; - } - - /*! \brief Calculate the derivative of the energy transfer function during boiling. Needed for regularization. - * - * \param volVars The volume variables - * \param satW The wetting phase saturation. Not taken from volVars, because we regularize. - */ - static Scalar dQBoil_dSw(const VolumeVariables & volVars, - const Scalar satW) - { - // on the fly derive w.r.t. Sw. - // Only linearly depending on it (directly) - return (QBoilFunc(volVars, satW) / satW ) ; - } }; template<class TypeTag> @@ -476,16 +368,16 @@ public: //we only need to do this for when there is more than 1 fluid phase if (enableChemicalNonEquilibrium) { - // Here comes the catch: We are not doing energy conservation for the whole - // system, but rather for each individual phase. - // -> Therefore the energy fluxes over each phase boundary need be - // individually accounted for. - // -> Each particle crossing a phase boundary does carry some mass and - // thus energy! - // -> Therefore, this contribution needs to be added. - // -> the particle always brings the energy of the originating phase. - // -> Energy advectivly transported into a phase = the moles of a component that go into a phase - // * molMass * enthalpy of the component in the *originating* phase + // Here comes the catch: We are not doing energy conservation for the whole + // system, but rather for each individual phase. + // -> Therefore the energy fluxes over each phase boundary need be + // individually accounted for. + // -> Each particle crossing a phase boundary does carry some mass and + // thus energy! + // -> Therefore, this contribution needs to be added. + // -> the particle always brings the energy of the originating phase. + // -> Energy advectivly transported into a phase = the moles of a component that go into a phase + // * molMass * enthalpy of the component in the *originating* phase const auto& fluidState = volVars.fluidState(); diff --git a/dumux/porousmediumflow/nonequilibrium/volumevariables.hh b/dumux/porousmediumflow/nonequilibrium/volumevariables.hh index 09c73d50a4e30e5cb4317f7a402e6933559cc957..f07f08c0b0686cd363af9c443df466ac4a5af4a2 100644 --- a/dumux/porousmediumflow/nonequilibrium/volumevariables.hh +++ b/dumux/porousmediumflow/nonequilibrium/volumevariables.hh @@ -42,7 +42,7 @@ namespace Dumux { * modules which require the specific interfacial area between * fluid phases. */ -template<class Traits, class EquilibriumVolumeVariables, bool enableChemicalNonEquilibrium ,bool enableThermalNonEquilibrium> +template<class Traits, class EquilibriumVolumeVariables, bool enableChemicalNonEquilibrium ,bool enableThermalNonEquilibrium, int numEnergyEqFluid> class NonEquilibriumVolumeVariablesImplementation; template<class Traits, class EquilibriumVolumeVariables> @@ -50,16 +50,18 @@ using NonEquilibriumVolumeVariables = NonEquilibriumVolumeVariablesImplementation< Traits, EquilibriumVolumeVariables, Traits::ModelTraits::enableChemicalNonEquilibrium(), - Traits::ModelTraits::enableThermalNonEquilibrium() >; + Traits::ModelTraits::enableThermalNonEquilibrium(), + Traits::ModelTraits::numEnergyEqFluid()>; ///////////////////////////////////////////////////////////////////////////////////////////////////////////// -// specialization for the case of NO kinetic mass but kinetic energy transfer of a fluid mixture and solid +// specialization for the case of NO kinetic mass but kinetic energy transfer of two fluids and a solid ///////////////////////////////////////////////////////////////////////////////////////////////////////////// template<class Traits, class EquilibriumVolumeVariables> class NonEquilibriumVolumeVariablesImplementation< Traits, EquilibriumVolumeVariables, false/*chemicalNonEquilibrium?*/, - true/*thermalNonEquilibrium?*/ > + true/*thermalNonEquilibrium?*/, + 2> :public EquilibriumVolumeVariables { using ParentType = EquilibriumVolumeVariables; @@ -67,16 +69,20 @@ class NonEquilibriumVolumeVariablesImplementation< Traits, using Scalar = typename Traits::PrimaryVariables::value_type; using ModelTraits = typename Traits::ModelTraits; - using Indices = typename ModelTraits::Indices; + + using FS = typename Traits::FluidSystem; static constexpr auto numEnergyEqFluid = ModelTraits::numEnergyEqFluid(); static constexpr auto numEnergyEqSolid = ModelTraits::numEnergyEqSolid(); - static_assert((numEnergyEqFluid < 2), "This model is a specialization for a energy transfer of a fluid mixture and a solid"); + static constexpr auto phase0Idx = FS::phase0Idx; + static constexpr auto phase1Idx = FS::phase1Idx; + static constexpr auto sPhaseIdx = FS::numPhases; using DimLessNum = DimensionlessNumbers<Scalar>; public: using FluidState = typename Traits::FluidState; + using Indices = typename ModelTraits::Indices; /*! * \brief Update all quantities for a given control volume * @@ -97,9 +103,55 @@ public: ParameterCache paramCache; paramCache.updateAll(this->fluidState()); + updateDimLessNumbers(elemSol, this->fluidState(), paramCache, problem, element, scv); updateInterfacialArea(elemSol, this->fluidState(), paramCache, problem, element, scv); } + /*! + * \brief Updates dimensionless numbers + * + * \param elemSol A vector containing all primary variables connected to the element + * \param fluidState Container for all the secondary variables concerning the fluids + * \param paramCache The parameter cache corresponding to the fluid state + * \param problem The problem to be solved + * \param element An element which contains part of the control volume + * \param scv The sub-control volume + */ + template<class ElemSol, class Problem, class Element, class Scv> + void updateDimLessNumbers(const ElemSol& elemSol, + const FluidState& fluidState, + const ParameterCache& paramCache, + const Problem& problem, + const Element& element, + const Scv& scv) + { + factorEnergyTransfer_ = problem.spatialParams().factorEnergyTransfer(element, scv, elemSol); + characteristicLength_ = problem.spatialParams().characteristicLength(element, scv, elemSol); + + // set the dimensionless numbers and obtain respective quantities + const unsigned int vIdxGlobal = scv.dofIndex(); + for (int phaseIdx = 0; phaseIdx < ModelTraits::numPhases(); ++phaseIdx) + { + const auto darcyMagVelocity = problem.gridVariables().volumeDarcyMagVelocity(phaseIdx, vIdxGlobal); + const auto dynamicViscosity = fluidState.viscosity(phaseIdx); + const auto density = fluidState.density(phaseIdx); + const auto kinematicViscosity = dynamicViscosity/density; + + using FluidSystem = typename Traits::FluidSystem; + const auto heatCapacity = FluidSystem::heatCapacity(fluidState, paramCache, phaseIdx); + const auto thermalConductivity = FluidSystem::thermalConductivity(fluidState, paramCache, phaseIdx); + const auto porosity = this->porosity(); + + reynoldsNumber_[phaseIdx] = DimLessNum::reynoldsNumber(darcyMagVelocity, characteristicLength_,kinematicViscosity); + prandtlNumber_[phaseIdx] = DimLessNum::prandtlNumber(dynamicViscosity, heatCapacity, thermalConductivity); + nusseltNumber_[phaseIdx] = DimLessNum::nusseltNumberForced(reynoldsNumber_[phaseIdx], + prandtlNumber_[phaseIdx], + porosity, + ModelTraits::nusseltFormulation()); + + } + } + /*! * \brief Updates the volume specific interfacial area [m^2 / m^3] between the phases. * @@ -118,7 +170,153 @@ public: const Element& element, const Scv& scv) { - factorMassTransfer_ = problem.spatialParams().factorMassTransfer(element, scv, elemSol); + // obtain (standard) material parameters (needed for the residual saturations) + const auto& materialParams = problem.spatialParams().materialLawParams(element, scv, elemSol); + + //obtain parameters for interfacial area constitutive relations + const auto& aWettingNonWettingSurfaceParams =problem.spatialParams().aWettingNonWettingSurfaceParams(element, scv, elemSol); + const auto& aNonWettingSolidSurfaceParams =problem.spatialParams().aNonWettingSolidSurfaceParams(element, scv, elemSol); + + const Scalar pc = fluidState.pressure(phase1Idx) - fluidState.pressure(phase0Idx); + const Scalar Sw = fluidState.saturation(phase0Idx); + + Scalar awn; + + using AwnSurface = typename Problem::SpatialParams::AwnSurface; + awn = AwnSurface::interfacialArea(aWettingNonWettingSurfaceParams, materialParams, Sw, pc ); + interfacialArea_[phase0Idx][phase1Idx] = awn; + interfacialArea_[phase1Idx][phase0Idx] = interfacialArea_[phase0Idx][phase1Idx]; + interfacialArea_[phase0Idx][phase0Idx] = 0.; + + using AnsSurface = typename Problem::SpatialParams::AnsSurface; + Scalar ans = AnsSurface::interfacialArea(aNonWettingSolidSurfaceParams, materialParams,Sw, pc); + + // Switch for using a a_{wn} relations that has some "maximum capillary pressure" as parameter // That value is obtained by regularization of the pc(Sw) function. +#if USE_PCMAX + const Scalar pcMax = problem.spatialParams().pcMax(element, scv, elemSol); + //I know the solid surface from the pore network. But it is more consistent to use the fitvalue. + using AnsSurface = typename Problem::SpatialParams::AnsSurface; + solidSurface_ = AnsSurface::interfacialArea(aNonWettingSolidSurfaceParams, materialParams, /*Sw=*/0., pcMax); + + const Scalar aws = solidSurface_ - ans; + interfacialArea_[phase0Idx][sPhaseIdx] = aws; + interfacialArea_[sPhaseIdx][phase0Idx] = interfacialArea_[phase0Idx][sPhaseIdx]; + interfacialArea_[sPhaseIdx][sPhaseIdx] = 0.; +#else + using AwsSurface = typename Problem::SpatialParams::AwsSurface; + const auto& aWettingSolidSurfaceParams = problem.spatialParams().aWettingSolidSurfaceParams(element, scv, elemSol); + const auto aws = AwsSurface::interfacialArea(aWettingSolidSurfaceParams,materialParams, Sw, pc); + interfacialArea_[phase0Idx][sPhaseIdx] = aws ; + interfacialArea_[sPhaseIdx][phase0Idx] = interfacialArea_[phase0Idx][sPhaseIdx]; + interfacialArea_[sPhaseIdx][sPhaseIdx] = 0.; +#endif + interfacialArea_[phase1Idx][sPhaseIdx] = ans; + interfacialArea_[sPhaseIdx][phase1Idx] = interfacialArea_[phase1Idx][sPhaseIdx]; + interfacialArea_[phase1Idx][phase1Idx] = 0.; + } + + /*! + * \brief The specific interfacial area between two fluid phases [m^2 / m^3] + * \note This is _only_ required by the kinetic mass/energy modules + */ + const Scalar interfacialArea(const unsigned int phaseIIdx, const unsigned int phaseJIdx) const + { + // there is no interfacial area between a phase and itself + assert(phaseIIdx not_eq phaseJIdx); + return interfacialArea_[phaseIIdx][phaseJIdx]; + } + + //! access function Reynolds Number + const Scalar reynoldsNumber(const unsigned int phaseIdx) const { return reynoldsNumber_[phaseIdx]; } + //! access function Prandtl Number + const Scalar prandtlNumber(const unsigned int phaseIdx) const { return prandtlNumber_[phaseIdx]; } + //! access function Nusselt Number + const Scalar nusseltNumber(const unsigned int phaseIdx) const { return nusseltNumber_[phaseIdx]; } + //! access function characteristic length + const Scalar characteristicLength() const { return characteristicLength_; } + //! access function pre factor energy transfer + const Scalar factorEnergyTransfer() const { return factorEnergyTransfer_; } + +private: + //! dimensionless numbers + Scalar reynoldsNumber_[ModelTraits::numPhases()]; + Scalar prandtlNumber_[ModelTraits::numPhases()]; + Scalar nusseltNumber_[ModelTraits::numPhases()]; + + Scalar characteristicLength_; + Scalar factorEnergyTransfer_; + Scalar solidSurface_ ; + Scalar interfacialArea_[ModelTraits::numPhases()+numEnergyEqSolid][ModelTraits::numPhases()+numEnergyEqSolid]; +}; + +///////////////////////////////////////////////////////////////////////////////////////////////////////////// +// specialization for the case of NO kinetic mass but kinetic energy transfer of a fluid mixture and a solid +///////////////////////////////////////////////////////////////////////////////////////////////////////////// +template<class Traits, class EquilibriumVolumeVariables> +class NonEquilibriumVolumeVariablesImplementation< Traits, + EquilibriumVolumeVariables, + false/*chemicalNonEquilibrium?*/, + true/*thermalNonEquilibrium?*/, + 1> + :public EquilibriumVolumeVariables +{ + using ParentType = EquilibriumVolumeVariables; + using ParameterCache = typename Traits::FluidSystem::ParameterCache; + using Scalar = typename Traits::PrimaryVariables::value_type; + + using ModelTraits = typename Traits::ModelTraits; + using Indices = typename ModelTraits::Indices; + using FS = typename Traits::FluidSystem; + static constexpr auto numEnergyEqFluid = ModelTraits::numEnergyEqFluid(); + static constexpr auto numEnergyEqSolid = ModelTraits::numEnergyEqSolid(); + + using DimLessNum = DimensionlessNumbers<Scalar>; + +public: + using FluidState = typename Traits::FluidState; + /*! + * \brief Update all quantities for a given control volume + * + * \param elemSol A vector containing all primary variables connected to the element + * \param problem The object specifying the problem which ought to + * be simulated + * \param element An element which contains part of the control volume + * \param scv The sub-control volume + */ + template<class ElemSol, class Problem, class Element, class Scv> + void update(const ElemSol &elemSol, + const Problem &problem, + const Element &element, + const Scv& scv) + { + // Update parent type (also completes the fluid state) + ParentType::update(elemSol, problem, element, scv); + + ParameterCache paramCache; + paramCache.updateAll(this->fluidState()); + //only update of DimLessNumbers is necessary here, as interfacial area is easy due to only one fluid with a solid and is directly computed in localresidual + updateDimLessNumbers(elemSol, this->fluidState(), paramCache, problem, element, scv); + updateInterfacialArea(elemSol, this->fluidState(), paramCache, problem, element, scv); + } + + /*! + * \brief Updates dimensionless numbers + * + * \param elemSol A vector containing all primary variables connected to the element + * \param fluidState Container for all the secondary variables concerning the fluids + * \param paramCache The parameter cache corresponding to the fluid state + * \param problem The problem to be solved + * \param element An element which contains part of the control volume + * \param scv The sub-control volume + */ + template<class ElemSol, class Problem, class Element, class Scv> + void updateDimLessNumbers(const ElemSol& elemSol, + const FluidState& fluidState, + const ParameterCache& paramCache, + const Problem& problem, + const Element& element, + const Scv& scv) + { factorEnergyTransfer_ = problem.spatialParams().factorEnergyTransfer(element, scv, elemSol); characteristicLength_ = problem.spatialParams().characteristicLength(element, scv, elemSol); @@ -136,7 +334,7 @@ public: const auto thermalConductivity = FluidSystem::thermalConductivity(fluidState, paramCache, phaseIdx); const auto porosity = this->porosity(); - reynoldsNumber_[phaseIdx] = DimLessNum::reynoldsNumber(darcyMagVelocity, characteristicLength_, kinematicViscosity); + reynoldsNumber_[phaseIdx] = DimLessNum::reynoldsNumber(darcyMagVelocity, characteristicLength_,kinematicViscosity); prandtlNumber_[phaseIdx] = DimLessNum::prandtlNumber(dynamicViscosity, heatCapacity, thermalConductivity); nusseltNumber_[phaseIdx] = DimLessNum::nusseltNumberForced(reynoldsNumber_[phaseIdx], prandtlNumber_[phaseIdx], @@ -145,6 +343,29 @@ public: } } + + /*! + * \brief Updates the volume specific interfacial area [m^2 / m^3] between the solid and the fluid phase. + * + * \param elemSol A vector containing all primary variables connected to the element + * \param fluidState Container for all the secondary variables concerning the fluids + * \param paramCache The parameter cache corresponding to the fluid state + * \param problem The problem to be solved + * \param element An element which contains part of the control volume + * \param scv The sub-control volume + */ + template<class ElemSol, class Problem, class Element, class Scv> + void updateInterfacialArea(const ElemSol& elemSol, + const FluidState& fluidState, + const ParameterCache& paramCache, + const Problem& problem, + const Element& element, + const Scv& scv) + { + using FluidSolidInterfacialAreaFormulation = typename Problem::SpatialParams::FluidSolidInterfacialAreaFormulation; + interfacialArea_ = FluidSolidInterfacialAreaFormulation::fluidSolidInterfacialArea(this->porosity(), characteristicLength()); + } + //! access function Reynolds Number const Scalar reynoldsNumber(const unsigned int phaseIdx) const { return reynoldsNumber_[phaseIdx]; } //! access function Prandtl Number @@ -155,8 +376,8 @@ public: const Scalar characteristicLength() const { return characteristicLength_; } //! access function pre factor energy transfer const Scalar factorEnergyTransfer() const { return factorEnergyTransfer_; } - //! access function pre factor mass transfer - const Scalar factorMassTransfer() const { return factorMassTransfer_; } + + const Scalar fluidSolidInterfacialArea() const {return interfacialArea_;} private: //! dimensionless numbers @@ -166,8 +387,7 @@ private: Scalar characteristicLength_; Scalar factorEnergyTransfer_; - Scalar factorMassTransfer_; - Scalar solidSurface_ ; + Scalar interfacialArea_ ; }; //////////////////////////////////////////////////////////////////////////////////////////////////// @@ -177,7 +397,8 @@ template<class Traits, class EquilibriumVolumeVariables> class NonEquilibriumVolumeVariablesImplementation< Traits, EquilibriumVolumeVariables, true/*chemicalNonEquilibrium?*/, - false/*thermalNonEquilibrium?*/> + false/*thermalNonEquilibrium?*/, + 0> :public EquilibriumVolumeVariables { using ParentType = EquilibriumVolumeVariables; @@ -216,6 +437,7 @@ public: ParameterCache paramCache; paramCache.updateAll(this->fluidState()); + updateDimLessNumbers(elemSol, this->fluidState(), paramCache, problem, element, scv); updateInterfacialArea(elemSol, this->fluidState(), paramCache, problem, element, scv); } @@ -230,24 +452,13 @@ public: * \param scv The sub-control volume */ template<class ElemSol, class Problem, class Element, class Scv> - void updateInterfacialArea(const ElemSol& elemSol, - const FluidState& fluidState, - const ParameterCache& paramCache, - const Problem& problem, - const Element& element, - const Scv& scv) + void updateDimLessNumbers(const ElemSol& elemSol, + const FluidState& fluidState, + const ParameterCache& paramCache, + const Problem& problem, + const Element& element, + const Scv& scv) { - // obtain parameters for awnsurface and material law - const auto& awnSurfaceParams = problem.spatialParams().aWettingNonWettingSurfaceParams(element, scv, elemSol) ; - const auto& materialParams = problem.spatialParams().materialLawParams(element, scv, elemSol) ; - - const auto Sw = fluidState.saturation(phase0Idx) ; - const auto pc = fluidState.pressure(phase1Idx) - fluidState.pressure(phase0Idx); - - // so far there is only a model for kinetic mass transfer between fluid phases - using AwnSurface = typename Problem::SpatialParams::AwnSurface; - interfacialArea_ = AwnSurface::interfacialArea(awnSurfaceParams, materialParams, Sw, pc); - factorMassTransfer_ = problem.spatialParams().factorMassTransfer(element, scv, elemSol); characteristicLength_ = problem.spatialParams().characteristicLength(element, scv, elemSol); @@ -276,6 +487,36 @@ public: } } + /*! + * \brief Updates the volume specific interfacial area [m^2 / m^3] between the phases. + * + * \param elemSol A vector containing all primary variables connected to the element + * \param fluidState Container for all the secondary variables concerning the fluids + * \param paramCache The parameter cache corresponding to the fluid state + * \param problem The problem to be solved + * \param element An element which contains part of the control volume + * \param scv The sub-control volume + */ + template<class ElemSol, class Problem, class Element, class Scv> + void updateInterfacialArea(const ElemSol& elemSol, + const FluidState& fluidState, + const ParameterCache& paramCache, + const Problem& problem, + const Element& element, + const Scv& scv) + { + // obtain parameters for awnsurface and material law + const auto& awnSurfaceParams = problem.spatialParams().aWettingNonWettingSurfaceParams(element, scv, elemSol) ; + const auto& materialParams = problem.spatialParams().materialLawParams(element, scv, elemSol) ; + + const auto Sw = fluidState.saturation(phase0Idx) ; + const auto pc = fluidState.pressure(phase1Idx) - fluidState.pressure(phase0Idx); + + // so far there is only a model for kinetic mass transfer between fluid phases + using AwnSurface = typename Problem::SpatialParams::AwnSurface; + interfacialArea_ = AwnSurface::interfacialArea(awnSurfaceParams, materialParams, Sw, pc); + } + /*! * \brief The specific interfacial area between two fluid phases [m^2 / m^3] */ @@ -313,7 +554,8 @@ template<class Traits, class EquilibriumVolumeVariables> class NonEquilibriumVolumeVariablesImplementation< Traits, EquilibriumVolumeVariables, true/*chemicalNonEquilibrium?*/, - true/*thermalNonEquilibrium?*/> + true/*thermalNonEquilibrium?*/, + 2> :public EquilibriumVolumeVariables { using ParentType = EquilibriumVolumeVariables; @@ -357,6 +599,7 @@ public: ParameterCache paramCache; paramCache.updateAll(this->fluidState()); + updateDimLessNumbers(elemSol, this->fluidState(), paramCache, problem, element, scv); updateInterfacialArea(elemSol, this->fluidState(), paramCache, problem, element, scv); } @@ -371,6 +614,61 @@ public: * \param scv The sub-control volume */ template<class ElemSol, class Problem, class Element, class Scv> + void updateDimLessNumbers(const ElemSol& elemSol, + const FluidState& fluidState, + const ParameterCache& paramCache, + const Problem& problem, + const Element& element, + const Scv& scv) + { + factorMassTransfer_ = problem.spatialParams().factorMassTransfer(element, scv, elemSol); + factorEnergyTransfer_ = problem.spatialParams().factorEnergyTransfer(element, scv, elemSol); + characteristicLength_ = problem.spatialParams().characteristicLength(element, scv, elemSol); + + const auto vIdxGlobal = scv.dofIndex(); + using FluidSystem = typename Traits::FluidSystem; + for (int phaseIdx = 0; phaseIdx < ModelTraits::numPhases(); ++phaseIdx) + { + const auto darcyMagVelocity = problem.gridVariables().volumeDarcyMagVelocity(phaseIdx, vIdxGlobal); + const auto dynamicViscosity = fluidState.viscosity(phaseIdx); + const auto density = fluidState.density(phaseIdx); + const auto kinematicViscosity = dynamicViscosity/density; + const auto heatCapacity = FluidSystem::heatCapacity(fluidState, paramCache, phaseIdx); + const auto thermalConductivity = FluidSystem::thermalConductivity(fluidState, paramCache, phaseIdx); + + // diffusion coefficient of non-wetting component in wetting phase + const auto porosity = this->porosity(); + const auto diffCoeff = FluidSystem::binaryDiffusionCoefficient(fluidState, + paramCache, + phaseIdx, + wCompIdx, + nCompIdx); + + reynoldsNumber_[phaseIdx] = DimLessNum::reynoldsNumber(darcyMagVelocity, characteristicLength_, kinematicViscosity); + prandtlNumber_[phaseIdx] = DimLessNum::prandtlNumber(dynamicViscosity, heatCapacity, thermalConductivity); + schmidtNumber_[phaseIdx] = DimLessNum::schmidtNumber(dynamicViscosity, density, diffCoeff); + nusseltNumber_[phaseIdx] = DimLessNum::nusseltNumberForced(reynoldsNumber_[phaseIdx], + prandtlNumber_[phaseIdx], + porosity, + ModelTraits::nusseltFormulation()); + // If Diffusion is not enabled, Sherwood is divided by zero + sherwoodNumber_[phaseIdx] = DimLessNum::sherwoodNumber(reynoldsNumber_[phaseIdx], + schmidtNumber_[phaseIdx], + ModelTraits::sherwoodFormulation()); + } + } + + /*! + * \brief Updates the volume specific interfacial area [m^2 / m^3] between the phases. + * + * \param elemSol A vector containing all primary variables connected to the element + * \param fluidState Container for all the secondary variables concerning the fluids + * \param paramCache The parameter cache corresponding to the fluid state + * \param problem The problem to be solved + * \param element An element which contains part of the control volume + * \param scv The sub-control volume + */ + template<class ElemSol, class Problem, class Element, class Scv> void updateInterfacialArea(const ElemSol& elemSol, const FluidState& fluidState, const ParameterCache& paramCache, @@ -390,24 +688,6 @@ public: Scalar awn; - // TODO can we delete this??? awn is overwritten anyway! -#define AwnRegul 0 - // This regularizes the interfacial area between the fluid phases. - // This makes sure, that - // a) some saturation cannot be lost: Never leave two phase region. - // b) We cannot leave the fit region: no crazy (e.g. negative) values possible - - // const Scalar Swr = aWettingNonWettingSurfaceParams.Swr() ; - // const Scalar Snr = aWettingNonWettingSurfaceParams.Snr() ; - - // this just leads to a stalling newton error as soon as this kicks in. - // May be a spline or sth like this would help, but I do not which derivatives - // to specify. -#if AwnRegul - if(Sw < 5e-3 ) // or Sw > (1.-1e-5 ) - awn = 0. ; // 10.; // -#endif - using AwnSurface = typename Problem::SpatialParams::AwnSurface; awn = AwnSurface::interfacialArea(aWettingNonWettingSurfaceParams, materialParams, Sw, pc ); interfacialArea_[phase0Idx][phase1Idx] = awn; @@ -441,42 +721,6 @@ public: interfacialArea_[phase1Idx][sPhaseIdx] = ans; interfacialArea_[sPhaseIdx][phase1Idx] = interfacialArea_[phase1Idx][sPhaseIdx]; interfacialArea_[phase1Idx][phase1Idx] = 0.; - - factorMassTransfer_ = problem.spatialParams().factorMassTransfer(element, scv, elemSol); - factorEnergyTransfer_ = problem.spatialParams().factorEnergyTransfer(element, scv, elemSol); - characteristicLength_ = problem.spatialParams().characteristicLength(element, scv, elemSol); - - const auto vIdxGlobal = scv.dofIndex(); - using FluidSystem = typename Traits::FluidSystem; - for (int phaseIdx = 0; phaseIdx < ModelTraits::numPhases(); ++phaseIdx) - { - const auto darcyMagVelocity = problem.gridVariables().volumeDarcyMagVelocity(phaseIdx, vIdxGlobal); - const auto dynamicViscosity = fluidState.viscosity(phaseIdx); - const auto density = fluidState.density(phaseIdx); - const auto kinematicViscosity = dynamicViscosity/density; - const auto heatCapacity = FluidSystem::heatCapacity(fluidState, paramCache, phaseIdx); - const auto thermalConductivity = FluidSystem::thermalConductivity(fluidState, paramCache, phaseIdx); - - // diffusion coefficient of non-wetting component in wetting phase - const auto porosity = this->porosity(); - const auto diffCoeff = FluidSystem::binaryDiffusionCoefficient(fluidState, - paramCache, - phaseIdx, - wCompIdx, - nCompIdx); - - reynoldsNumber_[phaseIdx] = DimLessNum::reynoldsNumber(darcyMagVelocity, characteristicLength_, kinematicViscosity); - prandtlNumber_[phaseIdx] = DimLessNum::prandtlNumber(dynamicViscosity, heatCapacity, thermalConductivity); - schmidtNumber_[phaseIdx] = DimLessNum::schmidtNumber(dynamicViscosity, density, diffCoeff); - nusseltNumber_[phaseIdx] = DimLessNum::nusseltNumberForced(reynoldsNumber_[phaseIdx], - prandtlNumber_[phaseIdx], - porosity, - ModelTraits::nusseltFormulation()); - // If Diffusion is not enabled, Sherwood is divided by zero - sherwoodNumber_[phaseIdx] = DimLessNum::sherwoodNumber(reynoldsNumber_[phaseIdx], - schmidtNumber_[phaseIdx], - ModelTraits::sherwoodFormulation()); - } } /*! diff --git a/dumux/porousmediumflow/nonisothermal/volumevariables.hh b/dumux/porousmediumflow/nonisothermal/volumevariables.hh index ef6395fe32dbcb33aa1a3d64b1c6e65bc63eb5d0..87c1e91572b7afd214092304fc733f9e0b92165c 100644 --- a/dumux/porousmediumflow/nonisothermal/volumevariables.hh +++ b/dumux/porousmediumflow/nonisothermal/volumevariables.hh @@ -179,7 +179,10 @@ public: if (numEnergyEq == 2) { const Scalar T = elemSol[scv.localDofIndex()][temperatureIdx]; - fluidState.setTemperature(T); + for(int phaseIdx=0; phaseIdx < FluidSystem::numPhases; ++phaseIdx) + { + fluidState.setTemperature(phaseIdx, T); + } } //this is for numEnergyEqFluid > 1 else diff --git a/test/material/immiscibleflash/test_immiscibleflash.cc b/test/material/immiscibleflash/test_immiscibleflash.cc index 99f1e99db90238ca0ce72943a64ed82dac89d021..e0090971108a33e46d2516ea85265716099bb00b 100644 --- a/test/material/immiscibleflash/test_immiscibleflash.cc +++ b/test/material/immiscibleflash/test_immiscibleflash.cc @@ -37,7 +37,7 @@ #include <dumux/material/fluidsystems/h2on2.hh> #include <dumux/material/fluidmatrixinteractions/mp/mplinearmaterial.hh> -#include <dumux/material/fluidmatrixinteractions/mp/2padapter.hh> +#include <dumux/material/fluidmatrixinteractions/mp/mpadapter.hh> #include <dumux/material/fluidmatrixinteractions/2p/linearmaterial.hh> #include <dumux/material/fluidmatrixinteractions/2p/regularizedlinearmaterial.hh> #include <dumux/material/fluidmatrixinteractions/2p/regularizedbrookscorey.hh> @@ -100,16 +100,17 @@ void checkImmiscibleFlash(const FluidState &fsRef, } } + // create the flash + Dumux::ImmiscibleFlash<Scalar, FluidSystem> flash(/*wettingPhaseIdx=*/0); // initialize the fluid state for the flash calculation - using ImmiscibleFlash = Dumux::ImmiscibleFlash<Scalar, FluidSystem>; FluidState fsFlash; fsFlash.setTemperature(fsRef.temperature(/*phaseIdx=*/0)); // run the flash calculation typename FluidSystem::ParameterCache paramCache; - ImmiscibleFlash::guessInitial(fsFlash, paramCache, globalMolarities); - ImmiscibleFlash::template solve<MaterialLaw>(fsFlash, paramCache, matParams, globalMolarities); + flash.guessInitial(fsFlash, paramCache, globalMolarities); + flash.template solve<MaterialLaw>(fsFlash, paramCache, matParams, globalMolarities); // compare the "flashed" fluid state with the reference one checkSame<Scalar>(fsRef, fsFlash); @@ -132,7 +133,7 @@ void completeReferenceFluidState(FluidState &fs, // calulate the capillary pressure PhaseVector pc; - MaterialLaw::capillaryPressures(pc, matParams, fs); + MaterialLaw::capillaryPressures(pc, matParams, fs, /*wPhaseIdx=*/0); fs.setPressure(otherPhaseIdx, fs.pressure(refPhaseIdx) + (pc[otherPhaseIdx] - pc[refPhaseIdx])); @@ -161,8 +162,8 @@ int main() enum { gasPhaseIdx = FluidSystem::gasPhaseIdx }; using EffMaterialLaw = Dumux::RegularizedBrooksCorey<Scalar>; - using TwoPMaterialLaw = Dumux::EffToAbsLaw<EffMaterialLaw>; - using MaterialLaw = Dumux::TwoPAdapter<liquidPhaseIdx, TwoPMaterialLaw>; + using MaterialLaw = Dumux::EffToAbsLaw<EffMaterialLaw>; + using MPAdapter = Dumux::MPAdapter<MaterialLaw, numPhases>; using MaterialLawParams = MaterialLaw::Params; Scalar T = 273.15 + 25; @@ -202,10 +203,10 @@ int main() fsRef.setPressure(liquidPhaseIdx, 1e6); // set the remaining parameters of the reference fluid state - completeReferenceFluidState<Scalar, FluidSystem, MaterialLaw>(fsRef, matParams, liquidPhaseIdx); + completeReferenceFluidState<Scalar, FluidSystem, MPAdapter>(fsRef, matParams, liquidPhaseIdx); // check the flash calculation - checkImmiscibleFlash<Scalar, FluidSystem, MaterialLaw>(fsRef, matParams); + checkImmiscibleFlash<Scalar, FluidSystem, MPAdapter>(fsRef, matParams); //////////////// // only gas @@ -217,10 +218,10 @@ int main() fsRef.setPressure(gasPhaseIdx, 1e6); // set the remaining parameters of the reference fluid state - completeReferenceFluidState<Scalar, FluidSystem, MaterialLaw>(fsRef, matParams, gasPhaseIdx); + completeReferenceFluidState<Scalar, FluidSystem, MPAdapter>(fsRef, matParams, gasPhaseIdx); // check the flash calculation - checkImmiscibleFlash<Scalar, FluidSystem, MaterialLaw>(fsRef, matParams); + checkImmiscibleFlash<Scalar, FluidSystem, MPAdapter>(fsRef, matParams); //////////////// // both phases @@ -232,10 +233,10 @@ int main() fsRef.setPressure(liquidPhaseIdx, 1e6); // set the remaining parameters of the reference fluid state - completeReferenceFluidState<Scalar, FluidSystem, MaterialLaw>(fsRef, matParams, liquidPhaseIdx); + completeReferenceFluidState<Scalar, FluidSystem, MPAdapter>(fsRef, matParams, liquidPhaseIdx); // check the flash calculation - checkImmiscibleFlash<Scalar, FluidSystem, MaterialLaw>(fsRef, matParams); + checkImmiscibleFlash<Scalar, FluidSystem, MPAdapter>(fsRef, matParams); //////////////// // with capillary pressure @@ -255,10 +256,10 @@ int main() fsRef.setPressure(liquidPhaseIdx, 1e6); // set the remaining parameters of the reference fluid state - completeReferenceFluidState<Scalar, FluidSystem, MaterialLaw>(fsRef, matParams2, liquidPhaseIdx); + completeReferenceFluidState<Scalar, FluidSystem, MPAdapter>(fsRef, matParams2, liquidPhaseIdx); // check the flash calculation - checkImmiscibleFlash<Scalar, FluidSystem, MaterialLaw>(fsRef, matParams2); + checkImmiscibleFlash<Scalar, FluidSystem, MPAdapter>(fsRef, matParams2); return 0; } diff --git a/test/material/ncpflash/test_ncpflash.cc b/test/material/ncpflash/test_ncpflash.cc index 71d82f0b87f86de2307cf496b33522750e265035..b466c8c4fda0828adf66b01477c32cdeeddcd2c3 100644 --- a/test/material/ncpflash/test_ncpflash.cc +++ b/test/material/ncpflash/test_ncpflash.cc @@ -37,7 +37,7 @@ #include <dumux/material/fluidsystems/h2on2.hh> #include <dumux/material/fluidmatrixinteractions/mp/mplinearmaterial.hh> -#include <dumux/material/fluidmatrixinteractions/mp/2padapter.hh> +#include <dumux/material/fluidmatrixinteractions/mp/mpadapter.hh> #include <dumux/material/fluidmatrixinteractions/2p/linearmaterial.hh> #include <dumux/material/fluidmatrixinteractions/2p/regularizedlinearmaterial.hh> #include <dumux/material/fluidmatrixinteractions/2p/regularizedbrookscorey.hh> @@ -100,16 +100,17 @@ void checkNcpFlash(const FluidState &fsRef, } } + // make a new flash + Dumux::NcpFlash<Scalar, FluidSystem> flash(/*wettingPhaseIdx=*/0); // initialize the fluid state for the flash calculation - using NcpFlash = Dumux::NcpFlash<Scalar, FluidSystem>; FluidState fsFlash; fsFlash.setTemperature(fsRef.temperature(/*phaseIdx=*/0)); // run the flash calculation typename FluidSystem::ParameterCache paramCache; - NcpFlash::guessInitial(fsFlash, paramCache, globalMolarities); - NcpFlash::template solve<MaterialLaw>(fsFlash, paramCache, matParams, globalMolarities); + flash.guessInitial(fsFlash, paramCache, globalMolarities); + flash.template solve<MaterialLaw>(fsFlash, paramCache, matParams, globalMolarities); // compare the "flashed" fluid state with the reference one checkSame<Scalar>(fsRef, fsFlash); @@ -133,7 +134,7 @@ void completeReferenceFluidState(FluidState &fs, // calulate the capillary pressure PhaseVector pc; - MaterialLaw::capillaryPressures(pc, matParams, fs); + MaterialLaw::capillaryPressures(pc, matParams, fs, /*wPhaseIdx=*/0); fs.setPressure(otherPhaseIdx, fs.pressure(refPhaseIdx) + (pc[otherPhaseIdx] - pc[refPhaseIdx])); @@ -157,14 +158,15 @@ int main() enum { numComponents = FluidSystem::numComponents }; enum { liquidPhaseIdx = FluidSystem::liquidPhaseIdx }; enum { gasPhaseIdx = FluidSystem::gasPhaseIdx }; + enum { wPhaseIdx = liquidPhaseIdx }; enum { H2OIdx = FluidSystem::H2OIdx }; enum { N2Idx = FluidSystem::N2Idx }; using EffMaterialLaw = Dumux::RegularizedBrooksCorey<Scalar>; - using TwoPMaterialLaw = Dumux::EffToAbsLaw<EffMaterialLaw>; - using MaterialLaw = Dumux::TwoPAdapter<liquidPhaseIdx, TwoPMaterialLaw>; + using MaterialLaw = Dumux::EffToAbsLaw<EffMaterialLaw>; using MaterialLawParams = MaterialLaw::Params; + using MPAdapter = Dumux::MPAdapter<MaterialLaw, numPhases>; Scalar T = 273.15 + 25; @@ -208,11 +210,13 @@ int main() fsRef.setMoleFraction(liquidPhaseIdx, N2Idx, 0.0); fsRef.setMoleFraction(liquidPhaseIdx, H2OIdx, 1.0); + fsRef.setWettingPhase(wPhaseIdx); + // "complete" the fluid state - completeReferenceFluidState<Scalar, FluidSystem, MaterialLaw>(fsRef, matParams, liquidPhaseIdx); + completeReferenceFluidState<Scalar, FluidSystem, MPAdapter>(fsRef, matParams, liquidPhaseIdx); // check the flash calculation - checkNcpFlash<Scalar, FluidSystem, MaterialLaw>(fsRef, matParams); + checkNcpFlash<Scalar, FluidSystem, MPAdapter>(fsRef, matParams); //////////////// // only gas @@ -229,10 +233,10 @@ int main() fsRef.setMoleFraction(gasPhaseIdx, H2OIdx, 0.001); // "complete" the fluid state - completeReferenceFluidState<Scalar, FluidSystem, MaterialLaw>(fsRef, matParams, gasPhaseIdx); + completeReferenceFluidState<Scalar, FluidSystem, MPAdapter>(fsRef, matParams, gasPhaseIdx); // check the flash calculation - checkNcpFlash<Scalar, FluidSystem, MaterialLaw>(fsRef, matParams); + checkNcpFlash<Scalar, FluidSystem, MPAdapter>(fsRef, matParams); //////////////// // both phases @@ -252,7 +256,7 @@ int main() MiscibleMultiPhaseComposition::solve(fsRef, paramCache); // check the flash calculation - checkNcpFlash<Scalar, FluidSystem, MaterialLaw>(fsRef, matParams); + checkNcpFlash<Scalar, FluidSystem, MPAdapter>(fsRef, matParams); //////////////// // with capillary pressure @@ -274,7 +278,7 @@ int main() // calulate the capillary pressure using PhaseVector = Dune::FieldVector<Scalar, numPhases>; PhaseVector pc; - MaterialLaw::capillaryPressures(pc, matParams2, fsRef); + MPAdapter::capillaryPressures(pc, matParams2, fsRef, /*wPhaseIdx=*/0); fsRef.setPressure(gasPhaseIdx, fsRef.pressure(liquidPhaseIdx) + (pc[gasPhaseIdx] - pc[liquidPhaseIdx])); @@ -284,7 +288,7 @@ int main() // check the flash calculation - checkNcpFlash<Scalar, FluidSystem, MaterialLaw>(fsRef, matParams2); + checkNcpFlash<Scalar, FluidSystem, MPAdapter>(fsRef, matParams2); return 0; } diff --git a/test/material/pengrobinson/test_pengrobinson.cc b/test/material/pengrobinson/test_pengrobinson.cc index 3996032d46ff998b98edb79179253504692a16c7..484d9a8b43119a4500d6b00b43ec2297c66cc83b 100644 --- a/test/material/pengrobinson/test_pengrobinson.cc +++ b/test/material/pengrobinson/test_pengrobinson.cc @@ -42,11 +42,12 @@ Scalar bringOilToSurface(FluidState &surfaceFluidState, Scalar alpha, const Flui numComponents = FluidSystem::numComponents }; - using Flash = Dumux::NcpFlash<Scalar, FluidSystem>; using MaterialLaw = Dumux::MpLinearMaterial<numPhases, Scalar>; using MaterialLawParams = typename MaterialLaw::Params; using ComponentVector = Dune::FieldVector<Scalar, numComponents>; + // create a flash + Dumux::NcpFlash<Scalar, FluidSystem> flash(/*wettingPhaseIdx=*/0); const Scalar refPressure = 1.0135e5; // [Pa] // set the parameters for the capillary pressure law @@ -93,7 +94,7 @@ Scalar bringOilToSurface(FluidState &surfaceFluidState, Scalar alpha, const Flui // calculate the deviation from the standard pressure tmpMolarities = molarities; tmpMolarities /= alpha; - Flash::template solve<MaterialLaw>(surfaceFluidState, paramCache, matParams, tmpMolarities); + flash.template solve<MaterialLaw>(surfaceFluidState, paramCache, matParams, tmpMolarities); Scalar f = surfaceFluidState.pressure(gPhaseIdx) - refPressure; // calculate the derivative of the deviation from the standard @@ -101,7 +102,7 @@ Scalar bringOilToSurface(FluidState &surfaceFluidState, Scalar alpha, const Flui Scalar eps = alpha*1e-10; tmpMolarities = molarities; tmpMolarities /= alpha + eps; - Flash::template solve<MaterialLaw>(surfaceFluidState, paramCache, matParams, tmpMolarities); + flash.template solve<MaterialLaw>(surfaceFluidState, paramCache, matParams, tmpMolarities); Scalar fStar = surfaceFluidState.pressure(gPhaseIdx) - refPressure; Scalar fPrime = (fStar - f)/eps; @@ -117,7 +118,7 @@ Scalar bringOilToSurface(FluidState &surfaceFluidState, Scalar alpha, const Flui // calculate the final result tmpMolarities = molarities; tmpMolarities /= alpha; - Flash::template solve<MaterialLaw>(surfaceFluidState, paramCache, matParams, tmpMolarities); + flash.template solve<MaterialLaw>(surfaceFluidState, paramCache, matParams, tmpMolarities); return alpha; } @@ -142,7 +143,6 @@ int main(int argc, char** argv) C20Idx = FluidSystem::C20Idx }; - using Flash = Dumux::NcpFlash<Scalar, FluidSystem>; using ComponentVector = Dune::FieldVector<Scalar, numComponents>; using FluidState = Dumux::CompositionalFluidState<Scalar, FluidSystem>; @@ -208,10 +208,11 @@ int main(int argc, char** argv) // volume factor. //////////// + Dumux::NcpFlash<Scalar, FluidSystem> flash(/*wettingPhaseIdx=*/0); FluidState flashFluidState, surfaceFluidState; flashFluidState.assign(fluidState); - Flash::guessInitial(flashFluidState, paramCache, molarities); - Flash::solve<MaterialLaw>(flashFluidState, paramCache, matParams, molarities); + flash.guessInitial(flashFluidState, paramCache, molarities); + flash.solve<MaterialLaw>(flashFluidState, paramCache, matParams, molarities); Scalar surfaceAlpha = 50; bringOilToSurface<Scalar, FluidSystem>(surfaceFluidState, surfaceAlpha, flashFluidState, /*guessInitial=*/true); @@ -232,7 +233,7 @@ int main(int argc, char** argv) curMolarities /= alpha; // "flash" the modified reservoir oil - Flash::solve<MaterialLaw>(flashFluidState, paramCache, matParams, curMolarities); + flash.solve<MaterialLaw>(flashFluidState, paramCache, matParams, curMolarities); Scalar alphaSurface = bringOilToSurface<Scalar, FluidSystem>(surfaceFluidState, surfaceAlpha, diff --git a/test/porousmediumflow/1pnc/implicit/CMakeLists.txt b/test/porousmediumflow/1pnc/implicit/CMakeLists.txt index ec7ae9628bc44fcb31bdbf899235633899be947f..4e56daf211c600eae100a875076422aa077a1cf1 100644 --- a/test/porousmediumflow/1pnc/implicit/CMakeLists.txt +++ b/test/porousmediumflow/1pnc/implicit/CMakeLists.txt @@ -1 +1,2 @@ add_subdirectory(1p2c) +add_subdirectory(nonequilibrium) diff --git a/test/porousmediumflow/1pnc/implicit/nonequilibrium/CMakeLists.txt b/test/porousmediumflow/1pnc/implicit/nonequilibrium/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..4ca17d93c0bb906553d8b79a201e05641b9e29b1 --- /dev/null +++ b/test/porousmediumflow/1pnc/implicit/nonequilibrium/CMakeLists.txt @@ -0,0 +1,23 @@ +add_input_file_links() + +# non-isothermal tests +# conduction +dune_add_test(NAME test_1p2c_nonequilibrium_box + SOURCES main.cc + COMPILE_DEFINITIONS TYPETAG=OnePTwoCThermalNonequilibriumBox + COMMAND ${CMAKE_SOURCE_DIR}/bin/testing/runtest.py + CMD_ARGS --script fuzzy + --files ${CMAKE_SOURCE_DIR}/test/references/test_1p2c_nonequilibrium_box-reference.vtu + ${CMAKE_CURRENT_BINARY_DIR}/test_1p2c_nonequilibrium_box-00045.vtu + --command "${CMAKE_CURRENT_BINARY_DIR}/test_1p2c_nonequilibrium_box params.input -Problem.Name test_1p2c_nonequilibrium_box" + --zeroThreshold {"velocity_liq \(m/s\)_1":1e-15}) + +dune_add_test(NAME test_1p2c_nonequilibrium_tpfa + SOURCES main.cc + COMPILE_DEFINITIONS TYPETAG=OnePTwoCThermalNonequilibriumCCTpfa + COMMAND ${CMAKE_SOURCE_DIR}/bin/testing/runtest.py + CMD_ARGS --script fuzzy + --files ${CMAKE_SOURCE_DIR}/test/references/test_1p2c_nonequilibrium_tpfa-reference.vtu + ${CMAKE_CURRENT_BINARY_DIR}/test_1p2c_nonequilibrium_tpfa-00044.vtu + --command "${CMAKE_CURRENT_BINARY_DIR}/test_1p2c_nonequilibrium_tpfa params.input -Problem.Name test_1p2c_nonequilibrium_tpfa" + --zeroThreshold {"velocity_liq \(m/s\)_1":1e-15}) diff --git a/test/porousmediumflow/1pnc/implicit/nonequilibrium/main.cc b/test/porousmediumflow/1pnc/implicit/nonequilibrium/main.cc new file mode 100644 index 0000000000000000000000000000000000000000..be1998bbf3cc7382a07c566e57d3341ca793a8fc --- /dev/null +++ b/test/porousmediumflow/1pnc/implicit/nonequilibrium/main.cc @@ -0,0 +1,203 @@ +// -*- 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 2 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 + * + * \brief test for the 1pnc model + */ +#include <config.h> + +#include "problem.hh" + +#include <ctime> +#include <iostream> + +#include <dune/common/parallel/mpihelper.hh> +#include <dune/common/timer.hh> +#include <dune/grid/io/file/dgfparser/dgfexception.hh> +#include <dune/grid/io/file/vtk.hh> +#include <dune/istl/io.hh> + +#include <dumux/discretization/method.hh> + +#include <dumux/common/properties.hh> +#include <dumux/common/parameters.hh> +#include <dumux/common/dumuxmessage.hh> +#include <dumux/common/defaultusagemessage.hh> + +#include <dumux/porousmediumflow/nonequilibrium/newtonsolver.hh> +#include <dumux/linear/seqsolverbackend.hh> + +#include <dumux/assembly/fvassembler.hh> + +#include <dumux/io/vtkoutputmodule.hh> +#include <dumux/io/grid/gridmanager.hh> + +int main(int argc, char** argv) try +{ + using namespace Dumux; + + // define the type tag for this problem + using TypeTag = Properties::TTag::TYPETAG; + + //////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////// + + // initialize MPI, finalize is done automatically on exit + const auto& mpiHelper = Dune::MPIHelper::instance(argc, argv); + + // print dumux start message + if (mpiHelper.rank() == 0) + DumuxMessage::print(/*firstCall=*/true); + + // initialize parameter tree + Parameters::init(argc, argv); + + ////////////////////////////////////////////////////////////////////// + // try to create a grid (from the given grid file or the input file) + ///////////////////////////////////////////////////////////////////// + + GridManager<GetPropType<TypeTag, Properties::Grid>> gridManager; + gridManager.init(); + + //////////////////////////////////////////////////////////// + // run instationary non-linear problem on this grid + //////////////////////////////////////////////////////////// + + // we compute on the leaf grid view + const auto& leafGridView = gridManager.grid().leafGridView(); + + // create the finite volume grid geometry + using FVGridGeometry = GetPropType<TypeTag, Properties::FVGridGeometry>; + auto fvGridGeometry = std::make_shared<FVGridGeometry>(leafGridView); + fvGridGeometry->update(); + + // the problem (initial and boundary conditions) + using Problem = GetPropType<TypeTag, Properties::Problem>; + auto problem = std::make_shared<Problem>(fvGridGeometry); + + // the solution vector + using SolutionVector = GetPropType<TypeTag, Properties::SolutionVector>; + SolutionVector x(fvGridGeometry->numDofs()); + problem->applyInitialSolution(x); + auto xOld = x; + + // the grid variables + using GridVariables = GetPropType<TypeTag, Properties::GridVariables>; + auto gridVariables = std::make_shared<GridVariables>(problem, fvGridGeometry); + gridVariables->init(x); + problem->setGridVariables(gridVariables); + + // get some time loop parameters + using Scalar = GetPropType<TypeTag, Properties::Scalar>; + auto tEnd = getParam<Scalar>("TimeLoop.TEnd"); + auto dt = getParam<Scalar>("TimeLoop.DtInitial"); + auto maxDt = getParam<Scalar>("TimeLoop.MaxTimeStepSize"); + + // intialize the vtk output module + using IOFields = GetPropType<TypeTag, Properties::IOFields>; + VtkOutputModule<GridVariables, SolutionVector> vtkWriter(*gridVariables, x, problem->name()); + using VelocityOutput = GetPropType<TypeTag, Properties::VelocityOutput>; + vtkWriter.addVelocityOutput(std::make_shared<VelocityOutput>(*gridVariables)); + IOFields::initOutputModule(vtkWriter); //!< Add model specific output fields + vtkWriter.write(0.0); + + // instantiate time loop + auto timeLoop = std::make_shared<TimeLoop<Scalar>>(0.0, dt, tEnd); + timeLoop->setMaxTimeStepSize(maxDt); + + // the assembler with time loop for instationary problem + using Assembler = FVAssembler<TypeTag, DiffMethod::numeric>; + auto assembler = std::make_shared<Assembler>(problem, fvGridGeometry, gridVariables, timeLoop); + + // the linear solver + // using LinearSolver = UMFPackBackend; + using LinearSolver = ILU0BiCGSTABBackend; + auto linearSolver = std::make_shared<LinearSolver>(); + + // the non-linear solver + using NewtonSolver = Dumux::NonEquilibriumNewtonSolver<Assembler, LinearSolver>; + NewtonSolver nonLinearSolver(assembler, linearSolver); + + // time loop + timeLoop->start(); do + { + // set previous solution for storage evaluations + assembler->setPreviousSolution(xOld); + + // linearize & solve + nonLinearSolver.solve(x, *timeLoop); + + // make the new solution the old solution + xOld = x; + gridVariables->advanceTimeStep(); + + // advance to the time loop to the next step + timeLoop->advanceTimeStep(); + + // write vtk output + vtkWriter.write(timeLoop->time()); + + // report statistics of this time step + timeLoop->reportTimeStep(); + + // set new dt as suggested by the newton solver + timeLoop->setTimeStepSize(nonLinearSolver.suggestTimeStepSize(timeLoop->timeStepSize())); + + } while (!timeLoop->finished()); + + timeLoop->finalize(leafGridView.comm()); + + //////////////////////////////////////////////////////////// + // finalize, print dumux message to say goodbye + //////////////////////////////////////////////////////////// + + // print dumux end message + if (mpiHelper.rank() == 0) + { + Parameters::print(); + DumuxMessage::print(/*firstCall=*/false); + } + return 0; + +} +catch (Dumux::ParameterException &e) +{ + std::cerr << std::endl << e << " ---> Abort!" << std::endl; + return 1; +} +catch (Dune::DGFException & e) +{ + std::cerr << "DGF exception thrown (" << e << + "). Most likely, the DGF file name is wrong " + "or the DGF file is corrupted, " + "e.g. missing hash at end of file or wrong number (dimensions) of entries." + << " ---> Abort!" << std::endl; + return 2; +} +catch (Dune::Exception &e) +{ + std::cerr << "Dune reported error: " << e << " ---> Abort!" << std::endl; + return 3; +} +catch (...) +{ + std::cerr << "Unknown exception thrown! ---> Abort!" << std::endl; + return 4; +} diff --git a/test/porousmediumflow/1pnc/implicit/nonequilibrium/params.input b/test/porousmediumflow/1pnc/implicit/nonequilibrium/params.input new file mode 100644 index 0000000000000000000000000000000000000000..6b887c773fa13afa72a4ff4524440d1691ed9a71 --- /dev/null +++ b/test/porousmediumflow/1pnc/implicit/nonequilibrium/params.input @@ -0,0 +1,21 @@ +[TimeLoop] +DtInitial = 1 # [s] +TEnd = 3e4 # [s] +MaxTimeStepSize = 1e3 + +[Grid] +UpperRight = 5 1 +Cells = 200 1 + +[Problem] +Name = test_1p2c_nonequilibrium # name passed to the output routines +EnableGravity = 0 # disable gravity +DarcyVelocity = 1e-4 # [m/s] inflow at the left boundary + +[Vtk] +AddVelocity = 1 # enable velocity output + +[Component] +SolidDensity = 2700 +SolidThermalConductivity = 2.8 +SolidHeatCapacity = 790 diff --git a/test/porousmediumflow/1pnc/implicit/nonequilibrium/problem.hh b/test/porousmediumflow/1pnc/implicit/nonequilibrium/problem.hh new file mode 100644 index 0000000000000000000000000000000000000000..65e2e08394594a1573966db5b5c440f25183d77a --- /dev/null +++ b/test/porousmediumflow/1pnc/implicit/nonequilibrium/problem.hh @@ -0,0 +1,310 @@ +// -*- 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 2 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 OnePNCTests + * \brief Test for the OnePNCModel in combination with the nonequilibrium model for a thermal nonequilibrium problem problem: + * The simulation domain is a tube warmer water is injected at the right side. + */ +#ifndef DUMUX_1P2CNI_CONDUCTION_TEST_PROBLEM_HH +#define DUMUX_1P2CNI_CONDUCTION_TEST_PROBLEM_HH + +#if HAVE_UG +#include <dune/grid/uggrid.hh> +#endif +#include <dune/grid/yaspgrid.hh> + +#include <dumux/discretization/elementsolution.hh> +#include <dumux/discretization/cellcentered/tpfa/properties.hh> +#include <dumux/discretization/cellcentered/mpfa/properties.hh> +#include <dumux/discretization/box/properties.hh> +#include <dumux/porousmediumflow/1pnc/model.hh> +#include <dumux/porousmediumflow/problem.hh> + +#include <dumux/material/fluidsystems/1padapter.hh> +#include <dumux/material/fluidsystems/h2on2.hh> +#include <dumux/material/components/h2o.hh> +#include "spatialparams.hh" + +namespace Dumux +{ + +template <class TypeTag> +class OnePTwoCThermalNonequilibriumProblem; + +namespace Properties +{ +// Create new type tags +namespace TTag { +struct OnePTwoCThermalNonequilibrium { using InheritsFrom = std::tuple<OnePNCNonEquil>; }; +struct OnePTwoCThermalNonequilibriumCCTpfa { using InheritsFrom = std::tuple<OnePTwoCThermalNonequilibrium, CCTpfaModel>; }; +struct OnePTwoCThermalNonequilibriumBox { using InheritsFrom = std::tuple<OnePTwoCThermalNonequilibrium, BoxModel>; }; +} // end namespace TTag + +template<class TypeTag> +struct Grid<TypeTag, TTag::OnePTwoCThermalNonequilibrium> { using type = Dune::YaspGrid<2>; }; + +// Set the problem property +template<class TypeTag> +struct Problem<TypeTag, TTag::OnePTwoCThermalNonequilibrium> { using type = OnePTwoCThermalNonequilibriumProblem<TypeTag>; }; + +// Set fluid configuration +template<class TypeTag> +struct FluidSystem<TypeTag, TTag::OnePTwoCThermalNonequilibrium> +{ + using Scalar = GetPropType<TypeTag, Properties::Scalar>; + using H2ON2 = FluidSystems::H2ON2<Scalar, FluidSystems::H2ON2DefaultPolicy</*simplified=*/true>>; + using type = FluidSystems::OnePAdapter<H2ON2, H2ON2::liquidPhaseIdx>; +}; + +// Set the spatial parameters +template<class TypeTag> +struct SpatialParams<TypeTag, TTag::OnePTwoCThermalNonequilibrium> +{ + using FVGridGeometry = GetPropType<TypeTag, Properties::FVGridGeometry>; + using Scalar = GetPropType<TypeTag, Properties::Scalar>; + using type = OnePNCNonequilibriumTestSpatialParams<FVGridGeometry, Scalar>; +}; + +// Define whether mole(true) or mass (false) fractions are used +template<class TypeTag> +struct UseMoles<TypeTag, TTag::OnePTwoCThermalNonequilibrium> { static constexpr bool value = true; }; +} + + +/*! + * \ingroup OnePNCTests + * \brief Definition of a problem, for the 1pnc problem: + * + * The model domain is 1 m times 1 m with a discretization length of 0.05 m + * and homogeneous soil properties (\f$ \mathrm{K=10e-11, \Phi=0.4). + * Initially the domain is filled with water and a small nitrogen fraction + * + * At the right side warmer water is injected via a Neumann boundary and at the left side + * Dirichlet values are set to the inital conditions. + * + * This problem uses the \ref OnePNCModel model. + * + * To run the simulation execute the following line in shell: + * <tt>./test_1p2c_nonequilibrium_box params.input</tt> or + * <tt>./test_1p2c_nonequilibrium_tpfa params.input</tt> + */ +template <class TypeTag> +class OnePTwoCThermalNonequilibriumProblem : public PorousMediumFlowProblem<TypeTag> +{ + using ParentType = PorousMediumFlowProblem<TypeTag>; + + using Scalar = GetPropType<TypeTag, Properties::Scalar>; + using Indices = typename GetPropType<TypeTag, Properties::ModelTraits>::Indices; + using GridView = GetPropType<TypeTag, Properties::GridView>; + using FluidSystem = GetPropType<TypeTag, Properties::FluidSystem>; + using BoundaryTypes = GetPropType<TypeTag, Properties::BoundaryTypes>; + using PrimaryVariables = GetPropType<TypeTag, Properties::PrimaryVariables>; + using FVGridGeometry = GetPropType<TypeTag, Properties::FVGridGeometry>; + using FVElementGeometry = typename GetPropType<TypeTag, Properties::FVGridGeometry>::LocalView; + using NumEqVector = GetPropType<TypeTag, Properties::NumEqVector>; + using ElementVolumeVariables = typename GetPropType<TypeTag, Properties::GridVolumeVariables>::LocalView; + using SubControlVolumeFace = typename FVElementGeometry::SubControlVolumeFace; + using Element = typename GridView::template Codim<0>::Entity; + using SolutionVector = GetPropType<TypeTag, Properties::SolutionVector>; + using VolumeVariables = GetPropType<TypeTag, Properties::VolumeVariables>; + using IapwsH2O = Components::H2O<Scalar>; + + using GridVariables = GetPropType<TypeTag, Properties::GridVariables>; + + // copy some indices for convenience + enum + { + // indices of the primary variables + pressureIdx = Indices::pressureIdx, + temperatureIdx = Indices::temperatureIdx, + temperatureSolidIdx = Indices::temperatureSolidIdx, + + // component indices + H2OIdx = FluidSystem::compIdx(FluidSystem::MultiPhaseFluidSystem::H2OIdx), + N2Idx = FluidSystem::compIdx(FluidSystem::MultiPhaseFluidSystem::N2Idx), + + // indices of the equations + contiH2OEqIdx = Indices::conti0EqIdx + H2OIdx, + contiN2EqIdx = Indices::conti0EqIdx + N2Idx, + energyEqIdx = Indices::energyEqIdx + }; + + //! property that defines whether mole or mass fractions are used + static constexpr bool useMoles = getPropValue<TypeTag, Properties::UseMoles>(); + static const int dimWorld = GridView::dimensionworld; + using GlobalPosition = typename Element::Geometry::GlobalCoordinate; + +public: + OnePTwoCThermalNonequilibriumProblem(std::shared_ptr<const FVGridGeometry> fvGridGeometry) + : ParentType(fvGridGeometry) + { + //initialize fluid system + FluidSystem::init(); + + // stating in the console whether mole or mass fractions are used + if(useMoles) + std::cout<<"problem uses mole fractions"<<std::endl; + else + std::cout<<"problem uses mass fractions"<<std::endl; + + darcyVelocity_ = getParam<Scalar>("Problem.DarcyVelocity"); + } + + void setGridVariables(std::shared_ptr<GridVariables> gridVariables) + { gridVariables_ = gridVariables; } + + const GridVariables& gridVariables() const + { return *gridVariables_; } + + /*! + * \name Problem parameters + */ + // \{ + + // \} + + /*! + * \name Boundary conditions + */ + // \{ + + /*! + * \brief Specifies which kind of boundary condition should be + * used for which equation on a given boundary segment. + * + * \param globalPos The position for which the bc type should be evaluated + */ + BoundaryTypes boundaryTypesAtPos(const GlobalPosition &globalPos) const + { + BoundaryTypes values; + + if(globalPos[0] < eps_) + values.setAllDirichlet(); + else + values.setAllNeumann(); + + return values; + } + + /*! + * \brief Evaluate the boundary conditions for a dirichlet + * boundary segment. + * + * \param globalPos The position for which the bc type should be evaluated + */ + PrimaryVariables dirichletAtPos(const GlobalPosition &globalPos) const + { + PrimaryVariables values = initial_(globalPos); + + return values; + } + + /*! + * \brief Evaluate the boundary conditions for a neumann + * boundary segment. + * + * This is the method for the case where the Neumann condition is + * potentially solution dependent and requires some quantities that + * are specific to the fully-implicit method. + * + * \param values The neumann values for the conservation equations in units of + * \f$ [ \textnormal{unit of conserved quantity} / (m^2 \cdot s )] \f$ + * \param element The finite element + * \param fvGeometry The finite-volume geometry + * \param elemVolVars All volume variables for the element + * \param scvf The sub control volume face + * + * For this method, the \a values parameter stores the flux + * in normal direction of each phase. Negative values mean influx. + * E.g. for the mass balance that would the mass flux in \f$ [ kg / (m^2 \cdot s)] \f$. + */ + NumEqVector neumann(const Element& element, + const FVElementGeometry& fvGeometry, + const ElementVolumeVariables& elemVolVars, + const SubControlVolumeFace& scvf) const + { + NumEqVector flux(0.0); + const auto& globalPos = scvf.ipGlobal(); + const auto& scv = fvGeometry.scv(scvf.insideScvIdx()); + + if (globalPos[0] > this->fvGridGeometry().bBoxMax()[0] - eps_) + { + flux[contiH2OEqIdx] = -darcyVelocity_*elemVolVars[scv].molarDensity(); + flux[contiN2EqIdx] = -darcyVelocity_*elemVolVars[scv].molarDensity()*elemVolVars[scv].moleFraction(0, N2Idx); + flux[energyEqIdx] = -darcyVelocity_ + *elemVolVars[scv].density() + *IapwsH2O::liquidEnthalpy(305, elemVolVars[scv].pressure()); + } + return flux; + } + + // \} + + /*! + * \name Volume terms + */ + // \{ + + /*! + * \brief Evaluate the source term for all phases within a given + * sub-control-volume. + * + * For this method, the \a priVars parameter stores the rate mass + * of a component is generated or annihilate per volume + * unit. Positive values mean that mass is created, negative ones + * mean that it vanishes. + * + * The units must be according to either using mole or mass fractions. (mole/(m^3*s) or kg/(m^3*s)) + */ + NumEqVector sourceAtPos(const GlobalPosition &globalPos) const + { return NumEqVector(0.0); } + + /*! + * \brief Evaluate the initial value for a control volume. + * + * \param globalPos The position for which the initial condition should be evaluated + * + * For this method, the \a values parameter stores primary + * variables. + */ + PrimaryVariables initialAtPos(const GlobalPosition &globalPos) const + { return initial_(globalPos); } + + // \} +private: + + // the internal method for the initial condition + PrimaryVariables initial_(const GlobalPosition &globalPos) const + { + PrimaryVariables priVars; + priVars[pressureIdx] = 1e5; // initial condition for the pressure + priVars[N2Idx] = 1e-5; // initial condition for the N2 molefraction + priVars[temperatureIdx] = 285.; + priVars[temperatureSolidIdx] = 285.; + return priVars; + } + static constexpr Scalar eps_ = 1e-6; + std::shared_ptr<GridVariables> gridVariables_; + Scalar darcyVelocity_; + }; + +} //end namespace Dumux + +#endif diff --git a/test/porousmediumflow/1pnc/implicit/nonequilibrium/spatialparams.hh b/test/porousmediumflow/1pnc/implicit/nonequilibrium/spatialparams.hh new file mode 100644 index 0000000000000000000000000000000000000000..abb43103aaf2c82427e6e33afe76bfe01dfbea3c --- /dev/null +++ b/test/porousmediumflow/1pnc/implicit/nonequilibrium/spatialparams.hh @@ -0,0 +1,106 @@ +// -*- 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 2 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 OnePNCTests + * \brief Definition of the spatial parameters for the 1pnc + * problems. + */ +#ifndef DUMUX_1PNC_TEST_SPATIAL_PARAMS_HH +#define DUMUX_1PNC_TEST_SPATIAL_PARAMS_HH + +#include <dumux/porousmediumflow/properties.hh> +#include <dumux/material/spatialparams/fv1p.hh> +#include <dumux/material/spatialparams/fvnonequilibrium.hh> +#include <dumux/material/fluidmatrixinteractions/1pia/fluidsolidinterfacialareashiwang.hh> + +namespace Dumux { + +/*! + * \ingroup OnePNCTests + * \brief Definition of the spatial parameters for the 1pnc + * test problems. + */ +template<class FVGridGeometry, class Scalar> +class OnePNCNonequilibriumTestSpatialParams +: public FVNonEquilibriumSpatialParams<FVGridGeometry, Scalar, + OnePNCNonequilibriumTestSpatialParams<FVGridGeometry, Scalar>> +{ + using GridView = typename FVGridGeometry::GridView; + using FVElementGeometry = typename FVGridGeometry::LocalView; + using SubControlVolume = typename FVElementGeometry::SubControlVolume; + using Element = typename GridView::template Codim<0>::Entity; + using ParentType = FVNonEquilibriumSpatialParams<FVGridGeometry, Scalar, + OnePNCNonequilibriumTestSpatialParams<FVGridGeometry, Scalar>>; + + static const int dimWorld = GridView::dimensionworld; + using GlobalPosition = typename Dune::FieldVector<Scalar, dimWorld>; + +public: + // export permeability type + using PermeabilityType = Scalar; + using FluidSolidInterfacialAreaFormulation = FluidSolidInterfacialAreaShiWang<Scalar>; + + OnePNCNonequilibriumTestSpatialParams(std::shared_ptr<const FVGridGeometry> fvGridGeometry) + : ParentType(fvGridGeometry) + { + permeability_ = 1e-11; + porosity_ = 0.4; + + characteristicLength_ = 5e-4; + factorEnergyTransfer_ = 0.5; + } + + /*! + * \brief Define the intrinsic permeability \f$\mathrm{[m^2]}\f$. + * + * \param globalPos The global position + */ + PermeabilityType permeabilityAtPos(const GlobalPosition& globalPos) const + { return permeability_; } + + /*! + * \brief Define the porosity \f$\mathrm{[-]}\f$. + * + * \param globalPos The global position + */ + Scalar porosityAtPos(const GlobalPosition& globalPos) const + { return porosity_; } + + /*!\brief Return the characteristic length for the mass transfer. + * \param globalPos The position in global coordinates.*/ + const Scalar characteristicLengthAtPos(const GlobalPosition & globalPos) const + { return characteristicLength_ ; } + + /*!\brief Return the pre factor the the energy transfer + * \param globalPos The position in global coordinates.*/ + const Scalar factorEnergyTransferAtPos(const GlobalPosition & globalPos) const + { return factorEnergyTransfer_; } + +private: + Scalar permeability_; + Scalar porosity_; + + Scalar factorEnergyTransfer_ ; + Scalar characteristicLength_ ; +}; + +} // end namespace Dumux + +#endif diff --git a/test/porousmediumflow/mpnc/implicit/2p2ccomparison/CMakeLists.txt b/test/porousmediumflow/mpnc/implicit/2p2ccomparison/CMakeLists.txt index e233b1b0961b640a444e7de1b169d106919390f1..b54f2473cbd6c6758224bc73b3a250ed6f703738 100644 --- a/test/porousmediumflow/mpnc/implicit/2p2ccomparison/CMakeLists.txt +++ b/test/porousmediumflow/mpnc/implicit/2p2ccomparison/CMakeLists.txt @@ -2,6 +2,7 @@ add_input_file_links() dune_add_test(NAME test_mpnc_2p2c_comparison_box SOURCES main.cc + LABELS mpnc COMPILE_DEFINITIONS TYPETAG=MPNCComparisonBox COMMAND ${CMAKE_SOURCE_DIR}/bin/testing/runtest.py CMD_ARGS --script fuzzy @@ -11,6 +12,7 @@ dune_add_test(NAME test_mpnc_2p2c_comparison_box dune_add_test(NAME test_mpnc_2p2c_comparison_tpfa SOURCES main.cc + LABELS mpnc COMPILE_DEFINITIONS TYPETAG=MPNCComparisonCC COMMAND ${CMAKE_SOURCE_DIR}/bin/testing/runtest.py CMD_ARGS --script fuzzy diff --git a/test/porousmediumflow/mpnc/implicit/2p2ccomparison/problem.hh b/test/porousmediumflow/mpnc/implicit/2p2ccomparison/problem.hh index 43fd63f3acc56b4b799437f7767b8bda4e2b03fa..12436f264ebb71f4afe36111a15c4de6131d25f4 100644 --- a/test/porousmediumflow/mpnc/implicit/2p2ccomparison/problem.hh +++ b/test/porousmediumflow/mpnc/implicit/2p2ccomparison/problem.hh @@ -71,8 +71,7 @@ struct SpatialParams<TypeTag, TTag::MPNCComparison> { using FVGridGeometry = GetPropType<TypeTag, Properties::FVGridGeometry>; using Scalar = GetPropType<TypeTag, Properties::Scalar>; - using FluidSystem = GetPropType<TypeTag, Properties::FluidSystem>; - using type = MPNCComparisonSpatialParams<FVGridGeometry, Scalar, FluidSystem>; + using type = MPNCComparisonSpatialParams<FVGridGeometry, Scalar>; }; // Set fluid configuration @@ -284,7 +283,10 @@ private: this->spatialParams().materialLawParamsAtPos(globalPos); PhaseVector pc; using MaterialLaw = typename ParentType::SpatialParams::MaterialLaw; - MaterialLaw::capillaryPressures(pc, matParams, fs); + using MPAdapter = MPAdapter<MaterialLaw, numPhases>; + + const int wPhaseIdx = this->spatialParams().template wettingPhaseAtPos<FluidSystem>(globalPos); + MPAdapter::capillaryPressures(pc, matParams, fs, wPhaseIdx); fs.setPressure(liquidPhaseIdx, fs.pressure(gasPhaseIdx) + pc[liquidPhaseIdx] - pc[gasPhaseIdx]); diff --git a/test/porousmediumflow/mpnc/implicit/2p2ccomparison/spatialparams.hh b/test/porousmediumflow/mpnc/implicit/2p2ccomparison/spatialparams.hh index c52f0452d856d335fc5aea23c77652e967d312ff..c6898dccdb381fd3cdcea8114b86c20394b0717a 100644 --- a/test/porousmediumflow/mpnc/implicit/2p2ccomparison/spatialparams.hh +++ b/test/porousmediumflow/mpnc/implicit/2p2ccomparison/spatialparams.hh @@ -30,8 +30,6 @@ #include <dumux/material/fluidmatrixinteractions/2p/regularizedlinearmaterial.hh> #include <dumux/material/fluidmatrixinteractions/2p/efftoabslaw.hh> -#include <dumux/material/fluidmatrixinteractions/mp/2padapter.hh> - #include <dumux/material/fluidmatrixinteractions/2p/regularizedbrookscorey.hh> namespace Dumux { @@ -42,10 +40,10 @@ namespace Dumux { * \brief Definition of the spatial params properties for the obstacle problem * */ -template<class FVGridGeometry, class Scalar, class FluidSystem> +template<class FVGridGeometry, class Scalar> class MPNCComparisonSpatialParams : public FVSpatialParams<FVGridGeometry, Scalar, - MPNCComparisonSpatialParams<FVGridGeometry, Scalar, FluidSystem>> + MPNCComparisonSpatialParams<FVGridGeometry, Scalar>> { using GridView = typename FVGridGeometry::GridView; using FVElementGeometry = typename FVGridGeometry::LocalView; @@ -53,17 +51,14 @@ class MPNCComparisonSpatialParams using Element = typename GridView::template Codim<0>::Entity; using ParentType = FVSpatialParams<FVGridGeometry, Scalar, - MPNCComparisonSpatialParams<FVGridGeometry, Scalar, FluidSystem>>; + MPNCComparisonSpatialParams<FVGridGeometry, Scalar>>; using GlobalPosition = typename SubControlVolume::GlobalPosition; - - enum {liquidPhaseIdx = FluidSystem::liquidPhaseIdx}; - using EffectiveLaw = RegularizedBrooksCorey<Scalar>; public: using PermeabilityType = Scalar; - using MaterialLaw = TwoPAdapter<liquidPhaseIdx, EffToAbsLaw<EffectiveLaw>>; + using MaterialLaw = EffToAbsLaw<EffectiveLaw>; using MaterialLawParams = typename MaterialLaw::Params; //! The constructor @@ -127,6 +122,18 @@ public: return coarseMaterialParams_; } + /*! + * \brief Function for defining which phase is to be considered as the wetting phase. + * + * \return the wetting phase index + * \param globalPos The global position + */ + template<class FluidSystem> + int wettingPhaseAtPos(const GlobalPosition& globalPos) const + { + return FluidSystem::phase0Idx; + } + private: /*! * \brief Returns whether a given global position is in the diff --git a/test/porousmediumflow/mpnc/implicit/kinetic/CMakeLists.txt b/test/porousmediumflow/mpnc/implicit/kinetic/CMakeLists.txt index ef8c5c7d10a386e49a2d8405b385951126db9e6f..a161e5df9a5749fa15ec7af4361d7c7f4b3baaa1 100644 --- a/test/porousmediumflow/mpnc/implicit/kinetic/CMakeLists.txt +++ b/test/porousmediumflow/mpnc/implicit/kinetic/CMakeLists.txt @@ -3,6 +3,7 @@ add_input_file_links() # build target for the full kinetic test problem dune_add_test(NAME test_mpnc_kinetic_box SOURCES main.cc + LABELS mpnc COMPILE_DEFINITIONS TYPETAG=EvaporationAtmosphereBox COMMAND ${CMAKE_SOURCE_DIR}/bin/testing/runtest.py CMD_ARGS --script fuzzy diff --git a/test/porousmediumflow/mpnc/implicit/kinetic/problem.hh b/test/porousmediumflow/mpnc/implicit/kinetic/problem.hh index 2edd0f301285a6fe9f6f3db4dcfb931e134d5190..92dd18bd10115b859dcd1bf6d9f12fd4e3a091c4 100644 --- a/test/porousmediumflow/mpnc/implicit/kinetic/problem.hh +++ b/test/porousmediumflow/mpnc/implicit/kinetic/problem.hh @@ -118,43 +118,11 @@ struct SolidSystem<TypeTag, TTag::EvaporationAtmosphere> // Set the spatial parameters template<class TypeTag> -struct SpatialParams<TypeTag, TTag::EvaporationAtmosphere> { using type = EvaporationAtmosphereSpatialParams<TypeTag>; }; - -// Set the interfacial area relation: wetting -- non-wetting -template<class TypeTag> -struct AwnSurface<TypeTag, TTag::EvaporationAtmosphere> -{ - using Scalar = GetPropType<TypeTag, Properties::Scalar>; - using MaterialLaw = typename GetPropType<TypeTag, Properties::SpatialParams>::MaterialLaw; - using MaterialLawParams = typename MaterialLaw::Params; - using EffectiveIALaw = AwnSurfacePcMaxFct<Scalar>; -public: - using type = EffToAbsLawIA<EffectiveIALaw, MaterialLawParams>; -}; - - -// Set the interfacial area relation: wetting -- solid -template<class TypeTag> -struct AwsSurface<TypeTag, TTag::EvaporationAtmosphere> +struct SpatialParams<TypeTag, TTag::EvaporationAtmosphere> { + using FVGridGeometry = GetPropType<TypeTag, FVGridGeometry>; using Scalar = GetPropType<TypeTag, Properties::Scalar>; - using MaterialLaw = typename GetPropType<TypeTag, Properties::SpatialParams>::MaterialLaw; - using MaterialLawParams = typename MaterialLaw::Params; - using EffectiveIALaw = AwnSurfacePolynomial2ndOrder<Scalar>; -public: - using type = EffToAbsLawIA<EffectiveIALaw, MaterialLawParams>; -}; - -// Set the interfacial area relation: non-wetting -- solid -template<class TypeTag> -struct AnsSurface<TypeTag, TTag::EvaporationAtmosphere> -{ - using Scalar = GetPropType<TypeTag, Properties::Scalar>; - using MaterialLaw = typename GetPropType<TypeTag, Properties::SpatialParams>::MaterialLaw; - using MaterialLawParams = typename MaterialLaw::Params; - using EffectiveIALaw = AwnSurfaceExpSwPcTo3<Scalar>; -public: - using type = EffToAbsLawIA<EffectiveIALaw, MaterialLawParams>; + using type = EvaporationAtmosphereSpatialParams<FVGridGeometry, Scalar>; }; } // end namespace Properties @@ -452,11 +420,13 @@ private: const auto &materialParams = this->spatialParams().materialLawParamsAtPos(globalPos); - Scalar capPress[numPhases]; - + std::vector<Scalar> capPress(numPhases); //obtain pc according to saturation using MaterialLaw = typename ParentType::SpatialParams::MaterialLaw; - MaterialLaw::capillaryPressures(capPress, materialParams, equilibriumFluidState); + using MPAdapter = MPAdapter<MaterialLaw, numPhases>; + + const int wPhaseIdx = this->spatialParams().template wettingPhaseAtPos<FluidSystem>(globalPos); + MPAdapter::capillaryPressures(capPress, materialParams, equilibriumFluidState, wPhaseIdx); Scalar p[numPhases]; if (this->spatialParams().inPM_(globalPos)){ diff --git a/test/porousmediumflow/mpnc/implicit/kinetic/spatialparams.hh b/test/porousmediumflow/mpnc/implicit/kinetic/spatialparams.hh index 58f32f356bbd2acee42391fce042454e91ba8b9a..6d9eea798cf78d44a5411d2e3bff11c4be3f748f 100644 --- a/test/porousmediumflow/mpnc/implicit/kinetic/spatialparams.hh +++ b/test/porousmediumflow/mpnc/implicit/kinetic/spatialparams.hh @@ -26,56 +26,56 @@ #define DUMUX_EVAPORATION_ATMOSPHERE_SPATIALPARAMS_HH #include <dumux/porousmediumflow/properties.hh> -#include <dumux/material/spatialparams/fv.hh> +#include <dumux/material/spatialparams/fvnonequilibrium.hh> #include <dumux/material/fluidmatrixinteractions/2p/linearmaterial.hh> #include <dumux/material/fluidmatrixinteractions/2p/regularizedbrookscorey.hh> #include <dumux/material/fluidmatrixinteractions/2p/efftoabslaw.hh> #include <dumux/material/fluidmatrixinteractions/2p/vangenuchtenoftemperature.hh> #include <dumux/material/fluidmatrixinteractions/2p/regularizedvangenuchten.hh> -#include <dumux/material/fluidmatrixinteractions/mp/2padapter.hh> -#include <dumux/material/fluidmatrixinteractions/mp/2poftadapter.hh> #include <dumux/common/parameters.hh> +// material laws for interfacial area +#include <dumux/material/fluidmatrixinteractions/2pia/efftoabslawia.hh> +#include <dumux/material/fluidmatrixinteractions/2pia/awnsurfacepolynomial2ndorder.hh> +#include <dumux/material/fluidmatrixinteractions/2pia/awnsurfacepcmaxfct.hh> +#include <dumux/material/fluidmatrixinteractions/2pia/awnsurfaceexpswpcto3.hh> + namespace Dumux { /** * \brief Definition of the spatial parameters for the evaporation atmosphere Problem (using a "poor man's coupling") */ -template<class TypeTag> +template<class FVGridGeometry, class Scalar> class EvaporationAtmosphereSpatialParams -: public FVSpatialParams<GetPropType<TypeTag, Properties::FVGridGeometry>, - GetPropType<TypeTag, Properties::Scalar>, - EvaporationAtmosphereSpatialParams<TypeTag>> +: public FVNonEquilibriumSpatialParams<FVGridGeometry, Scalar, + EvaporationAtmosphereSpatialParams<FVGridGeometry, Scalar>> { - using Scalar = GetPropType<TypeTag, Properties::Scalar>; - using FVGridGeometry = GetPropType<TypeTag, Properties::FVGridGeometry>; using GridView = typename FVGridGeometry::GridView; using FVElementGeometry = typename FVGridGeometry::LocalView; using SubControlVolume = typename FVElementGeometry::SubControlVolume; using Element = typename GridView::template Codim<0>::Entity; - using ParentType = FVSpatialParams<FVGridGeometry, Scalar, EvaporationAtmosphereSpatialParams<TypeTag>>; + using ThisType = EvaporationAtmosphereSpatialParams<FVGridGeometry, Scalar>; + using ParentType = FVNonEquilibriumSpatialParams<FVGridGeometry, Scalar, ThisType>; using GlobalPosition = Dune::FieldVector<Scalar, GridView::dimension>; enum { dimWorld = GridView::dimensionworld }; - enum { numPhases = GetPropType<TypeTag, Properties::ModelTraits>::numPhases() }; - - using FluidState = GetPropType<TypeTag, Properties::FluidState>; - using FluidSystem = GetPropType<TypeTag, Properties::FluidSystem>; - - enum { liquidPhaseIdx = FluidSystem::liquidPhaseIdx }; public: //! export the type used for the permeability using PermeabilityType = Scalar; //! export the material law type used - using MaterialLaw = TwoPAdapter<liquidPhaseIdx, EffToAbsLaw<RegularizedBrooksCorey<Scalar>>>; - //! export the types used for interfacial area calculations - using AwnSurface = GetPropType<TypeTag, Properties::AwnSurface>; - using AwsSurface = GetPropType<TypeTag, Properties::AwsSurface>; - using AnsSurface = GetPropType<TypeTag, Properties::AnsSurface>; - + using MaterialLaw = EffToAbsLaw<RegularizedBrooksCorey<Scalar>>; //! convenience aliases of the law parameters using MaterialLawParams = typename MaterialLaw::Params; + + //! export the types used for interfacial area calculations + using EffectiveIALawAws = AwnSurfacePolynomial2ndOrder<Scalar>; + using EffectiveIALawAwn = AwnSurfacePcMaxFct<Scalar>; + using EffectiveIALawAns = AwnSurfaceExpSwPcTo3<Scalar>; + using AwnSurface = EffToAbsLawIA<EffectiveIALawAwn, MaterialLawParams>; + using AwsSurface = EffToAbsLawIA<EffectiveIALawAws, MaterialLawParams>; + using AnsSurface = EffToAbsLawIA<EffectiveIALawAns, MaterialLawParams>; + using AwnSurfaceParams = typename AwnSurface::Params; using AwsSurfaceParams = typename AwsSurface::Params; using AnsSurfaceParams = typename AnsSurface::Params; @@ -126,28 +126,10 @@ public: materialParamsFF_.setLambda(42.); materialParamsFF_.setPe(0.); - {//scope it - // capillary pressure parameters - FluidState fluidState ; - Scalar S[numPhases] ; - Scalar capPress[numPhases]; - //set saturation to inital values, this needs to be done in order for the fluidState to tell me pc - for (int phaseIdx = 0; phaseIdx < numPhases ; ++phaseIdx) { - // set saturation to zero for getting pcmax - S[phaseIdx] = 0. ; - Scalar TInitial = getParam<Scalar>("InitialConditions.TInitial"); - fluidState.setSaturation(phaseIdx, S[phaseIdx]); - fluidState.setTemperature(phaseIdx,TInitial); - } - - //obtain pc according to saturation - MaterialLaw::capillaryPressures(capPress, materialParamsPM_, fluidState); - using std::abs; - pcMax_ = abs(capPress[0]); - - // set pressures from capillary pressures - aWettingNonWettingSurfaceParams_.setPcMax(pcMax_); - } + // determine maximum capillary pressure for wetting-nonwetting surface + using TwoPLaw = EffToAbsLaw<RegularizedBrooksCorey<Scalar>>; + pcMax_ = TwoPLaw::pc(materialParamsPM_, /*sw = */0.0); + aWettingNonWettingSurfaceParams_.setPcMax(pcMax_); // wetting-non wetting: surface which goes to zero on the edges, but is a polynomial aWettingNonWettingSurfaceParams_.setA1(aWettingNonWettingA1_); @@ -284,21 +266,6 @@ public: const ElementSolution &elemSol) const { return aWettingNonWettingSurfaceParams_.pcMax() ; } - - /*!\brief Return the characteristic length for the mass transfer. - * - * The position is determined based on the coordinate of - * the vertex belonging to the considered sub controle volume. - * \param element The finite element - * \param fvGeometry The finite volume geometry - * \param scvIdx The local index of the sub control volume */ - template<class ElementSolution> - const Scalar characteristicLength(const Element & element, - const SubControlVolume &scv, - const ElementSolution &elemSol) const - - { return characteristicLengthAtPos(scv.dofPosition()); } - /*!\brief Return the characteristic length for the mass transfer. * \param globalPos The position in global coordinates.*/ const Scalar characteristicLengthAtPos(const GlobalPosition & globalPos) const @@ -310,19 +277,6 @@ public: else DUNE_THROW(Dune::InvalidStateException, "You should not be here: x=" << globalPos[0] << " y= "<< globalPos[dimWorld-1]); } - /*!\brief Return the pre factor the the energy transfer - * - * The position is determined based on the coordinate of - * the vertex belonging to the considered sub controle volume. - * \param element The finite element - * \param fvGeometry The finite volume geometry - * \param scvIdx The local index of the sub control volume */ - template<class ElementSolution> - const Scalar factorEnergyTransfer(const Element &element, - const SubControlVolume &scv, - const ElementSolution &elemSol) const - { return factorEnergyTransferAtPos(scv.dofPosition()); } - /*!\brief Return the pre factor the the energy transfer * \param globalPos The position in global coordinates.*/ const Scalar factorEnergyTransferAtPos(const GlobalPosition & globalPos) const @@ -334,19 +288,6 @@ public: else DUNE_THROW(Dune::InvalidStateException, "You should not be here: x=" << globalPos[0] << " y= "<< globalPos[dimWorld-1]); } - /*!\brief Return the pre factor the the mass transfer - * - * The position is determined based on the coordinate of - * the vertex belonging to the considered sub controle volume. - * \param element The finite element - * \param fvGeometry The finite volume geometry - * \param scvIdx The local index of the sub control volume */ - template<class ElementSolution> - const Scalar factorMassTransfer(const Element &element, - const SubControlVolume &scv, - const ElementSolution &elemSol) const - { return factorMassTransferAtPos(scv.dofPosition()); } - /*!\brief Return the pre factor the the mass transfer * \param globalPos The position in global coordinates.*/ const Scalar factorMassTransferAtPos(const GlobalPosition & globalPos) const @@ -358,6 +299,18 @@ public: else DUNE_THROW(Dune::InvalidStateException, "You should not be here: x=" << globalPos[0] << " y= "<< globalPos[dimWorld-1]); } + /*! + * \brief Function for defining which phase is to be considered as the wetting phase. + * + * \return the wetting phase index + * \param globalPos The global position + */ + template<class FluidSystem> + int wettingPhaseAtPos(const GlobalPosition& globalPos) const + { + return FluidSystem::phase0Idx; + } + /*!\brief Give back whether the tested position (input) is a specific region (porous medium part) in the domain * * This setting ensures, that the boundary between the two domains has porous medium properties. diff --git a/test/porousmediumflow/mpnc/implicit/obstacle/CMakeLists.txt b/test/porousmediumflow/mpnc/implicit/obstacle/CMakeLists.txt index bc50f0573eb5e4421e6cb84644157e8d6a12159c..fc08f85ee3c577de2673f2c64bdc299b746bd174 100644 --- a/test/porousmediumflow/mpnc/implicit/obstacle/CMakeLists.txt +++ b/test/porousmediumflow/mpnc/implicit/obstacle/CMakeLists.txt @@ -3,6 +3,7 @@ dune_symlink_to_source_files(FILES grids) dune_add_test(NAME test_mpnc_obstacle_box SOURCES main.cc + LABELS mpnc COMPILE_DEFINITIONS TYPETAG=ObstacleBox COMMAND ${CMAKE_SOURCE_DIR}/bin/testing/runtest.py CMD_ARGS --script fuzzy @@ -12,6 +13,7 @@ dune_add_test(NAME test_mpnc_obstacle_box dune_add_test(NAME test_mpnc_obstacle_tpfa SOURCES main.cc + LABELS mpnc COMPILE_DEFINITIONS TYPETAG=ObstacleCC COMMAND ${CMAKE_SOURCE_DIR}/bin/testing/runtest.py CMD_ARGS --script fuzzy diff --git a/test/porousmediumflow/mpnc/implicit/obstacle/problem.hh b/test/porousmediumflow/mpnc/implicit/obstacle/problem.hh index 1ebb273a5d170d9d9acc30035c78bb81c85e3bb8..93276cb70179d2a05420334c650f23487cefb5df 100644 --- a/test/porousmediumflow/mpnc/implicit/obstacle/problem.hh +++ b/test/porousmediumflow/mpnc/implicit/obstacle/problem.hh @@ -74,8 +74,7 @@ struct SpatialParams<TypeTag, TTag::Obstacle> { using FVGridGeometry = GetPropType<TypeTag, Properties::FVGridGeometry>; using Scalar = GetPropType<TypeTag, Properties::Scalar>; - using FluidSystem = GetPropType<TypeTag, Properties::FluidSystem>; - using type = ObstacleSpatialParams<FVGridGeometry, Scalar, FluidSystem>; + using type = ObstacleSpatialParams<FVGridGeometry, Scalar>; }; // Set fluid configuration @@ -362,7 +361,10 @@ private: const auto& matParams = this->spatialParams().materialLawParamsAtPos(globalPos); PhaseVector pc; using MaterialLaw = typename ParentType::SpatialParams::MaterialLaw; - MaterialLaw::capillaryPressures(pc, matParams, fs); + using MPAdapter = MPAdapter<MaterialLaw, numPhases>; + + const int wPhaseIdx = this->spatialParams().template wettingPhaseAtPos<FluidSystem>(globalPos); + MPAdapter::capillaryPressures(pc, matParams, fs, wPhaseIdx); fs.setPressure(otherPhaseIdx, fs.pressure(refPhaseIdx) + (pc[otherPhaseIdx] - pc[refPhaseIdx])); diff --git a/test/porousmediumflow/mpnc/implicit/obstacle/spatialparams.hh b/test/porousmediumflow/mpnc/implicit/obstacle/spatialparams.hh index e8a5b7831c82bb0d6036e332ba7ca0f9c9075565..51c9fdc9f4483db179257e19b7bf30a26c171e4c 100644 --- a/test/porousmediumflow/mpnc/implicit/obstacle/spatialparams.hh +++ b/test/porousmediumflow/mpnc/implicit/obstacle/spatialparams.hh @@ -30,9 +30,6 @@ #include <dumux/material/fluidmatrixinteractions/2p/regularizedlinearmaterial.hh> #include <dumux/material/fluidmatrixinteractions/2p/efftoabslaw.hh> -#include <dumux/material/fluidmatrixinteractions/mp/mplinearmaterial.hh> -#include <dumux/material/fluidmatrixinteractions/mp/2padapter.hh> - namespace Dumux { /** @@ -41,30 +38,27 @@ namespace Dumux { * \brief Definition of the spatial params properties for the obstacle problem * */ -template<class FVGridGeometry, class Scalar, class FluidSystem> +template<class FVGridGeometry, class Scalar> class ObstacleSpatialParams : public FVSpatialParams<FVGridGeometry, Scalar, - ObstacleSpatialParams<FVGridGeometry, Scalar, FluidSystem>> + ObstacleSpatialParams<FVGridGeometry, Scalar>> { using GridView = typename FVGridGeometry::GridView; using FVElementGeometry = typename FVGridGeometry::LocalView; using SubControlVolume = typename FVElementGeometry::SubControlVolume; using Element = typename GridView::template Codim<0>::Entity; using ParentType = FVSpatialParams<FVGridGeometry, Scalar, - ObstacleSpatialParams<FVGridGeometry, Scalar, FluidSystem>>; + ObstacleSpatialParams<FVGridGeometry, Scalar>>; enum {dimWorld=GridView::dimensionworld}; using GlobalPosition = typename SubControlVolume::GlobalPosition; - - enum {liquidPhaseIdx = FluidSystem::liquidPhaseIdx}; - using EffectiveLaw = RegularizedLinearMaterial<Scalar>; public: //! export the type used for the permeability using PermeabilityType = Scalar; //! export the material law type used - using MaterialLaw = TwoPAdapter<liquidPhaseIdx, EffToAbsLaw<EffectiveLaw>>; + using MaterialLaw = EffToAbsLaw<EffectiveLaw>; using MaterialLawParams = typename MaterialLaw::Params; //! the constructor @@ -127,6 +121,18 @@ public: return coarseMaterialParams_; } + /*! + * \brief Function for defining which phase is to be considered as the wetting phase. + * + * \return the wetting phase index + * \param globalPos The global position + */ + template<class FluidSystem> + int wettingPhaseAtPos(const GlobalPosition& globalPos) const + { + return FluidSystem::phase0Idx; + } + private: /*! * \brief Returns whether a given global position is in the diff --git a/test/porousmediumflow/mpnc/implicit/thermalnonequilibrium/CMakeLists.txt b/test/porousmediumflow/mpnc/implicit/thermalnonequilibrium/CMakeLists.txt index 9fff88d75d67722b2e117654a72b1e0b52b12b33..d4abf64f53223069c21cc588e5f13a4f93497d8c 100644 --- a/test/porousmediumflow/mpnc/implicit/thermalnonequilibrium/CMakeLists.txt +++ b/test/porousmediumflow/mpnc/implicit/thermalnonequilibrium/CMakeLists.txt @@ -5,6 +5,7 @@ dune_symlink_to_source_files(FILES grids) dune_add_test(COMPILE_ONLY # since it currently fails miserably with very different results on different machines NAME test_mpnc_thermalnonequil_box SOURCES main.cc + LABELS mpnc COMPILE_DEFINITIONS TYPETAG=CombustionOneComponentBox COMMAND ${CMAKE_SOURCE_DIR}/bin/testing/runtest.py CMD_ARGS --script fuzzy @@ -15,6 +16,7 @@ dune_add_test(COMPILE_ONLY # since it currently fails miserably with very differ #install sources install(FILES combustionfluidsystem.hh +combustionlocalresidual.hh problem.hh spatialparams.hh main.cc diff --git a/test/porousmediumflow/mpnc/implicit/thermalnonequilibrium/combustionlocalresidual.hh b/test/porousmediumflow/mpnc/implicit/thermalnonequilibrium/combustionlocalresidual.hh new file mode 100644 index 0000000000000000000000000000000000000000..4810977f3f39625fe36d3318a3685eef3309e0d6 --- /dev/null +++ b/test/porousmediumflow/mpnc/implicit/thermalnonequilibrium/combustionlocalresidual.hh @@ -0,0 +1,222 @@ +// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 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 2 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 PorousmediumThermalNonEquilibriumModel + * \brief This file contains the parts of the local residual to + * calculate the heat conservation in the thermal non-equilibrium model. + */ +#ifndef DUMUX_ENERGY_COMBUSTION_LOCAL_RESIDUAL_HH +#define DUMUX_ENERGY_COMBUSTION_LOCAL_RESIDUAL_HH + +#include <cmath> +#include <dumux/common/spline.hh> +#include <dumux/common/exceptions.hh> +#include <dumux/common/properties.hh> + +#include <dumux/porousmediumflow/nonequilibrium/thermal/localresidual.hh> + +namespace Dumux { + +/*! + * \ingroup PorousmediumThermalNonEquilibriumModel + * \brief This file contains the parts of the local residual to + * calculate the heat conservation in the thermal non-equilibrium model. + */ +template<class TypeTag> +class CombustionEnergyLocalResidual +: public EnergyLocalResidualNonEquilibrium<TypeTag, 1/*numEnergyEqFluid*/> +{ + using Scalar = GetPropType<TypeTag, Properties::Scalar>; + using NumEqVector = GetPropType<TypeTag, Properties::NumEqVector>; + using VolumeVariables = GetPropType<TypeTag, Properties::VolumeVariables>; + using FVElementGeometry = typename GetPropType<TypeTag, Properties::FVGridGeometry>::LocalView; + using SubControlVolume = typename FVElementGeometry::SubControlVolume; + using FluxVariables = GetPropType<TypeTag, Properties::FluxVariables>; + using FluidSystem = GetPropType<TypeTag, Properties::FluidSystem>; + using SolidSystem = GetPropType<TypeTag, Properties::SolidSystem>; + using GridView = GetPropType<TypeTag, Properties::GridView>; + using Element = typename GridView::template Codim<0>::Entity; + using ElementVolumeVariables = typename GetPropType<TypeTag, Properties::GridVolumeVariables>::LocalView; + using SubControlVolumeFace = typename FVElementGeometry::SubControlVolumeFace; + + using ModelTraits = GetPropType<TypeTag, Properties::ModelTraits>; + using Indices = typename ModelTraits::Indices; + + enum { numEnergyEqFluid = ModelTraits::numEnergyEqFluid() }; + enum { numEnergyEqSolid = ModelTraits::numEnergyEqSolid() }; + enum { energyEq0Idx = Indices::energyEq0Idx }; + enum { energyEqSolidIdx = Indices::energyEqSolidIdx}; + + enum { numComponents = ModelTraits::numComponents() }; + +public: + /*! + * \brief Calculate the source term of the equation + * + * \param scv The sub-control volume over which we integrate the source term + */ + static void computeSourceEnergy(NumEqVector& source, + const Element& element, + const FVElementGeometry& fvGeometry, + const ElementVolumeVariables& elemVolVars, + const SubControlVolume &scv) + { + //specialization for 2 fluid phases + const auto& volVars = elemVolVars[scv]; + const auto& fs = volVars.fluidState() ; + const Scalar characteristicLength = volVars.characteristicLength() ; + + //interfacial area + // Shi & Wang, Transport in porous media (2011) + const Scalar as = volVars.fluidSolidInterfacialArea(); + + //temperature fluid is the same for both fluids + const Scalar TFluid = volVars.temperatureFluid(0); + const Scalar TSolid = volVars.temperatureSolid(); + + const Scalar satW = fs.saturation(0) ; + const Scalar satN = fs.saturation(1) ; + + const Scalar eps = 1e-6 ; + Scalar solidToFluidEnergyExchange ; + + Scalar fluidConductivity ; + if (satW < 1.0 - eps) + fluidConductivity = volVars.fluidThermalConductivity(1) ; + else if (satW >= 1.0 - eps) + fluidConductivity = volVars.fluidThermalConductivity(0) ; + else + DUNE_THROW(Dune::NotImplemented, "wrong range"); + + const Scalar factorEnergyTransfer = volVars.factorEnergyTransfer() ; + + solidToFluidEnergyExchange = factorEnergyTransfer * (TSolid - TFluid) / characteristicLength * as * fluidConductivity ; + const Scalar epsRegul = 1e-3 ; + + if (satW < (0 + eps) ) + { + solidToFluidEnergyExchange *= volVars.nusseltNumber(1) ; + } + else if ( (satW >= 0 + eps) and (satW < 1.0-eps) ) + { + solidToFluidEnergyExchange *= (volVars.nusseltNumber(1) * satN ); + Scalar qBoil ; + if (satW<=epsRegul) + {// regularize + typedef Dumux::Spline<Scalar> Spline; + Spline sp(0.0, epsRegul, // x1, x2 + QBoilFunc(volVars, 0.0), QBoilFunc(volVars, epsRegul), // y1, y2 + 0.0,dQBoil_dSw(volVars, epsRegul)); // m1, m2 + + qBoil = sp.eval(satW); + } + + else if (satW>= (1.0-epsRegul) ) + { // regularize + typedef Dumux::Spline<Scalar> Spline; + Spline sp(1.0-epsRegul, 1.0, // x1, x2 + QBoilFunc(volVars, 1.0-epsRegul), 0.0, // y1, y2 + dQBoil_dSw(volVars, 1.0-epsRegul), 0.0 ); // m1, m2 + + qBoil = sp.eval(satW) ; + } + else + { + qBoil = QBoilFunc(volVars, satW) ; + } + + solidToFluidEnergyExchange += qBoil; + } + else if (satW >= 1.0-eps) + { + solidToFluidEnergyExchange *= volVars.nusseltNumber(0) ; + } + else + DUNE_THROW(Dune::NotImplemented, "wrong range"); + + using std::isfinite; + if (!isfinite(solidToFluidEnergyExchange)) + DUNE_THROW(NumericalProblem, "Calculated non-finite source, " << "TFluid="<< TFluid << " TSolid="<< TSolid); + + for(int energyEqIdx =0; energyEqIdx<numEnergyEqFluid+numEnergyEqSolid; ++energyEqIdx) + { + switch (energyEqIdx) + { + case 0 : + source[energyEq0Idx + energyEqIdx] += solidToFluidEnergyExchange; + break; + case 1 : + source[energyEq0Idx + energyEqIdx] -= solidToFluidEnergyExchange; + break; + default: + DUNE_THROW(Dune::NotImplemented, + "wrong index"); + } // end switch + }// end energyEqIdx + }// end source + + + /*! \brief Calculate the energy transfer during boiling, i.e. latent heat + * + * \param volVars The volume variables + * \param satW The wetting phase saturation. Not taken from volVars, because we regularize. + */ + static Scalar QBoilFunc(const VolumeVariables & volVars, + const Scalar satW) + { + // using saturation as input (instead of from volVars) + // in order to make regularization (evaluation at different points) easyer + const auto& fs = volVars.fluidState(); + const Scalar g( 9.81 ); + const Scalar gamma(0.0589); + const Scalar TSolid = volVars.temperatureSolid(); + using std::pow; + const Scalar as = volVars.fluidSolidInterfacialArea(); + const Scalar mul = fs.viscosity(0); + const Scalar deltahv = fs.enthalpy(1) - fs.enthalpy(0); + const Scalar deltaRho = fs.density(0) - fs.density(1); + const Scalar firstBracket = pow(g * deltaRho / gamma, 0.5); + const Scalar cp = FluidSystem::heatCapacity(fs, 0); + // This use of Tsat is only justified if the fluid is always boiling (tsat equals boiling conditions) + // If a different state is to be simulated, please use the actual fluid temperature instead. + const Scalar Tsat = FluidSystem::vaporTemperature(fs, 1 ) ; + const Scalar deltaT = TSolid - Tsat; + const Scalar secondBracket = pow( (cp *deltaT / (0.006 * deltahv) ) , 3.0 ); + const Scalar Prl = volVars.prandtlNumber(0); + const Scalar thirdBracket = pow( 1/Prl , (1.7/0.33)); + const Scalar QBoil = satW * as * mul * deltahv * firstBracket * secondBracket * thirdBracket; + return QBoil; + } + + /*! \brief Calculate the derivative of the energy transfer function during boiling. Needed for regularization. + * + * \param volVars The volume variables + * \param satW The wetting phase saturation. Not taken from volVars, because we regularize. + */ + static Scalar dQBoil_dSw(const VolumeVariables & volVars, + const Scalar satW) + { + // on the fly derive w.r.t. Sw. + // Only linearly depending on it (directly) + return (QBoilFunc(volVars, satW) / satW ) ; + } +}; +} // end namespace Dumux + +#endif // diff --git a/test/porousmediumflow/mpnc/implicit/thermalnonequilibrium/problem.hh b/test/porousmediumflow/mpnc/implicit/thermalnonequilibrium/problem.hh index 438bbe7184d77f318560b85e8666520192680612..dc56fb8f76e6872a17a4895e0c4ff700d5c0777c 100644 --- a/test/porousmediumflow/mpnc/implicit/thermalnonequilibrium/problem.hh +++ b/test/porousmediumflow/mpnc/implicit/thermalnonequilibrium/problem.hh @@ -44,6 +44,7 @@ #include "spatialparams.hh" #include "combustionfluidsystem.hh" +#include "combustionlocalresidual.hh" namespace Dumux { @@ -73,6 +74,15 @@ template<class TypeTag> struct Problem<TypeTag, TTag::CombustionOneComponent> { using type = CombustionProblemOneComponent<TypeTag>; }; +// Set the spatial parameters +template<class TypeTag> +struct SpatialParams<TypeTag, TTag::CombustionOneComponent> +{ + using FVGridGeometry = GetPropType<TypeTag, FVGridGeometry>; + using Scalar = GetPropType<TypeTag, Properties::Scalar>; + using type = CombustionSpatialParams<FVGridGeometry, Scalar>; +}; + template<class TypeTag> struct FluidSystem<TypeTag, TTag::CombustionOneComponent> { using type = FluidSystems::CombustionFluidsystem<GetPropType<TypeTag, Properties::Scalar>>; }; @@ -145,10 +155,9 @@ public: using type = CompositionalSolidState<Scalar, SolidSystem>; }; -// Set the spatial parameters template<class TypeTag> -struct SpatialParams<TypeTag, TTag::CombustionOneComponent> { using type = CombustionSpatialParams<TypeTag>; }; - +struct EnergyLocalResidual<TypeTag, TTag::CombustionOneComponent> +{ using type = CombustionEnergyLocalResidual<TypeTag>; }; } /*! * \ingroup MPNCTests @@ -440,13 +449,16 @@ private: ////////////////////////////////////// priVars[energyEq0Idx] = thisTemperature; priVars[energyEqSolidIdx] = thisTemperature; - Scalar capPress[numPhases]; + std::vector<Scalar> capPress(numPhases); //obtain pc according to saturation const auto &materialParams = this->spatialParams().materialLawParamsAtPos(globalPos); using MaterialLaw = typename ParentType::SpatialParams::MaterialLaw; - MaterialLaw::capillaryPressures(capPress, materialParams, fluidState); + using MPAdapter = MPAdapter<MaterialLaw, numPhases>; + + const int wettingPhaseIdx = this->spatialParams().template wettingPhaseAtPos<FluidSystem>(globalPos); + MPAdapter::capillaryPressures(capPress, materialParams, fluidState, wettingPhaseIdx); Scalar p[numPhases]; diff --git a/test/porousmediumflow/mpnc/implicit/thermalnonequilibrium/spatialparams.hh b/test/porousmediumflow/mpnc/implicit/thermalnonequilibrium/spatialparams.hh index edb715a66929ef6d6db71056d67872fcd6453f1c..55ad7e809f3f8436736f2cdabfb4667e2b174f1b 100644 --- a/test/porousmediumflow/mpnc/implicit/thermalnonequilibrium/spatialparams.hh +++ b/test/porousmediumflow/mpnc/implicit/thermalnonequilibrium/spatialparams.hh @@ -26,10 +26,11 @@ #include <dune/common/parametertreeparser.hh> +#include <dumux/material/spatialparams/fvnonequilibrium.hh> #include <dumux/material/fluidmatrixinteractions/2p/efftoabslaw.hh> #include <dumux/material/fluidmatrixinteractions/2p/heatpipelaw.hh> #include <dumux/material/fluidmatrixinteractions/2p/linearmaterial.hh> -#include <dumux/material/fluidmatrixinteractions/mp/2padapter.hh> +#include <dumux/material/fluidmatrixinteractions/1pia/fluidsolidinterfacialareashiwang.hh> #include <dumux/porousmediumflow/properties.hh> #include <dumux/material/spatialparams/fv.hh> @@ -39,34 +40,30 @@ namespace Dumux { * \brief Definition of the spatial parameters for the one component combustion problem * */ -template<class TypeTag> +template<class FVGridGeometry, class Scalar> class CombustionSpatialParams -: public FVSpatialParams<GetPropType<TypeTag, Properties::FVGridGeometry>, - GetPropType<TypeTag, Properties::Scalar>, - CombustionSpatialParams<TypeTag>> +: public FVNonEquilibriumSpatialParams<FVGridGeometry, Scalar, + CombustionSpatialParams<FVGridGeometry, Scalar>> { - using Scalar = GetPropType<TypeTag, Properties::Scalar>; - using FVGridGeometry = GetPropType<TypeTag, Properties::FVGridGeometry>; using GridView = typename FVGridGeometry::GridView; using FVElementGeometry = typename FVGridGeometry::LocalView; using SubControlVolume = typename FVElementGeometry::SubControlVolume; using Element = typename GridView::template Codim<0>::Entity; - using ParentType = FVSpatialParams<FVGridGeometry, Scalar, CombustionSpatialParams<TypeTag>>; + using ThisType = CombustionSpatialParams<FVGridGeometry, Scalar>; + using ParentType = FVNonEquilibriumSpatialParams<FVGridGeometry, Scalar, ThisType>; enum {dimWorld = GridView::dimensionworld}; using GlobalPosition = typename SubControlVolume::GlobalPosition; using EffectiveLaw = HeatPipeLaw<Scalar>; - using FluidSystem = GetPropType<TypeTag, Properties::FluidSystem>; - enum {wPhaseIdx = FluidSystem::wPhaseIdx}; - public: //! export the type used for the permeability using PermeabilityType = Scalar; //! export the material law type used - using MaterialLaw = TwoPAdapter<wPhaseIdx, EffToAbsLaw<EffectiveLaw>>; + using MaterialLaw = EffToAbsLaw<EffectiveLaw>; using MaterialLawParams = typename MaterialLaw::Params; + using FluidSolidInterfacialAreaFormulation = FluidSolidInterfacialAreaShiWang<Scalar>; CombustionSpatialParams(std::shared_ptr<const FVGridGeometry> fvGridGeometry) : ParentType(fvGridGeometry) { @@ -85,7 +82,6 @@ public: intrinsicPermeability_ = (pow(characteristicLength_,2.0) * pow(porosity_, 3.0)) / (150.0 * pow((1.0-porosity_),2.0)); // 1.69e-10 ; // factorEnergyTransfer_ = getParam<Scalar>("SpatialParams.PorousMedium.factorEnergyTransfer"); - factorMassTransfer_ =getParam<Scalar>("SpatialParams.PorousMedium.factorMassTransfer"); lengthPM_ = getParam<Scalar>("Grid.lengthPM"); // residual saturations @@ -160,71 +156,34 @@ public: } } + /*! + * \brief Function for defining which phase is to be considered as the wetting phase. + * + * \return the wetting phase index + * \param globalPos The global position + */ + template<class FluidSystem> + int wettingPhaseAtPos(const GlobalPosition& globalPos) const + { + return FluidSystem::phase0Idx; + } + /*! * \brief Return a reference to the material parameters of the material law. * \param globalPos The position in global coordinates. */ const MaterialLawParams& materialLawParamsAtPos(const GlobalPosition & globalPos) const { return materialParams_ ; } - /*!\brief Return the characteristic length for the mass transfer. - * - * The position is determined based on the coordinate of - * the vertex belonging to the considered sub controle volume. - * \param element The finite element - * \param fvGeometry The finite volume geometry - * \param scvIdx The local index of the sub control volume */ - template<class ElementSolution> - const Scalar characteristicLength(const Element & element, - const SubControlVolume &scv, - const ElementSolution &elemSol) const - - { return characteristicLengthAtPos(scv.center()); } - - /*!\brief Return the characteristic length for the mass transfer. * \param globalPos The position in global coordinates.*/ const Scalar characteristicLengthAtPos(const GlobalPosition & globalPos) const { return characteristicLength_ ; } - /*!\brief Return the pre factor the the energy transfer - * - * The position is determined based on the coordinate of - * the vertex belonging to the considered sub controle volume. - * \param element The finite element - * \param fvGeometry The finite volume geometry - * \param scvIdx The local index of the sub control volume */ - template<class ElementSolution> - const Scalar factorEnergyTransfer(const Element &element, - const SubControlVolume &scv, - const ElementSolution &elemSol) const - { return factorEnergyTransferAtPos(scv.dofPosition()); } - - /*!\brief Return the pre factor the the energy transfer * \param globalPos The position in global coordinates.*/ const Scalar factorEnergyTransferAtPos(const GlobalPosition & globalPos) const { return factorEnergyTransfer_; } - - /*!\brief Return the pre factor the the mass transfer - * - * The position is determined based on the coordinate of - * the vertex belonging to the considered sub controle volume. - * \param element The finite element - * \param fvGeometry The finite volume geometry - * \param scvIdx The local index of the sub control volume */ - template<class ElementSolution> - const Scalar factorMassTransfer(const Element &element, - const SubControlVolume &scv, - const ElementSolution &elemSol) const - { return factorMassTransferAtPos(scv.dofPosition()); } - - /*!\brief Return the pre factor the the mass transfer - * \param globalPos The position in global coordinates.*/ - const Scalar factorMassTransferAtPos(const GlobalPosition & globalPos) const - { return factorMassTransfer_; } - - //! Return if the tested position (input) is a specific region (right end of porous medium) in the domain bool inOutFlow(const GlobalPosition & globalPos) const { return globalPos[0] > (lengthPM_ - eps_) ; } //! Return the length of the porous medium domain @@ -239,7 +198,6 @@ private: Scalar intrinsicPermeability_ ; Scalar porosity_ ; Scalar factorEnergyTransfer_ ; - Scalar factorMassTransfer_ ; Scalar characteristicLength_ ; MaterialLawParams materialParams_ ; diff --git a/test/references/test_1p2c_nonequilibrium_box-reference.vtu b/test/references/test_1p2c_nonequilibrium_box-reference.vtu new file mode 100644 index 0000000000000000000000000000000000000000..341d936ec7c6145c6f0162c5c2922494ee8eeec4 --- /dev/null +++ b/test/references/test_1p2c_nonequilibrium_box-reference.vtu @@ -0,0 +1,815 @@ +<?xml version="1.0"?> +<VTKFile type="UnstructuredGrid" version="0.1" byte_order="LittleEndian"> + <UnstructuredGrid> + <Piece NumberOfCells="200" NumberOfPoints="402"> + <PointData Scalars="p" Vectors="velocity_liq (m/s)"> + <DataArray type="Float32" Name="p" NumberOfComponents="1" format="ascii"> + 100000 100284 100000 100284 100563 100563 100841 100841 101117 101117 101393 101393 + 101667 101667 101940 101940 102212 102212 102482 102482 102752 102752 103020 103020 + 103286 103286 103552 103552 103816 103816 104079 104079 104340 104340 104601 104601 + 104860 104860 105117 105117 105374 105374 105629 105629 105883 105883 106135 106135 + 106386 106386 106636 106636 106884 106884 107131 107131 107376 107376 107620 107620 + 107863 107863 108104 108104 108344 108344 108583 108583 108820 108820 109056 109056 + 109291 109291 109524 109524 109757 109757 109987 109987 110217 110217 110445 110445 + 110672 110672 110898 110898 111123 111123 111346 111346 111568 111568 111789 111789 + 112009 112009 112228 112228 112446 112446 112663 112663 112879 112879 113093 113093 + 113307 113307 113520 113520 113732 113732 113943 113943 114153 114153 114362 114362 + 114570 114570 114778 114778 114984 114984 115190 115190 115395 115395 115600 115600 + 115803 115803 116006 116006 116209 116209 116411 116411 116612 116612 116813 116813 + 117013 117013 117213 117213 117412 117412 117611 117611 117810 117810 118007 118007 + 118205 118205 118402 118402 118599 118599 118795 118795 118991 118991 119187 119187 + 119382 119382 119578 119578 119772 119772 119967 119967 120161 120161 120356 120356 + 120550 120550 120743 120743 120937 120937 121130 121130 121323 121323 121517 121517 + 121710 121710 121902 121902 122095 122095 122288 122288 122480 122480 122673 122673 + 122865 122865 123057 123057 123250 123250 123442 123442 123634 123634 123826 123826 + 124018 124018 124210 124210 124402 124402 124594 124594 124786 124786 124978 124978 + 125169 125169 125361 125361 125553 125553 125745 125745 125937 125937 126128 126128 + 126320 126320 126512 126512 126704 126704 126895 126895 127087 127087 127279 127279 + 127470 127470 127662 127662 127854 127854 128046 128046 128237 128237 128429 128429 + 128621 128621 128812 128812 129004 129004 129196 129196 129388 129388 129579 129579 + 129771 129771 129963 129963 130154 130154 130346 130346 130538 130538 130729 130729 + 130921 130921 131113 131113 131305 131305 131496 131496 131688 131688 131880 131880 + 132071 132071 132263 132263 132455 132455 132646 132646 132838 132838 133030 133030 + 133222 133222 133413 133413 133605 133605 133797 133797 133988 133988 134180 134180 + 134372 134372 134564 134564 134755 134755 134947 134947 135139 135139 135330 135330 + 135522 135522 135714 135714 135905 135905 136097 136097 136289 136289 136481 136481 + 136672 136672 136864 136864 137056 137056 137247 137247 137439 137439 137631 137631 + 137822 137822 138014 138014 138206 138206 138398 138398 138589 138589 138781 138781 + 138973 138973 139164 139164 139356 139356 139548 139548 139740 139740 139931 139931 + 140123 140123 140315 140315 140506 140506 140698 140698 140890 140890 141082 141082 + 141273 141273 141465 141465 141657 141657 + </DataArray> + <DataArray type="Float32" Name="rho" NumberOfComponents="1" format="ascii"> + 999.498 999.075 999.498 999.075 998.977 998.977 998.942 998.942 998.916 998.916 998.891 998.891 + 998.865 998.865 998.838 998.838 998.811 998.811 998.783 998.783 998.755 998.755 998.726 998.726 + 998.697 998.697 998.667 998.667 998.631 998.631 998.592 998.592 998.552 998.552 998.512 998.512 + 998.471 998.471 998.43 998.43 998.388 998.388 998.345 998.345 998.302 998.302 998.258 998.258 + 998.214 998.214 998.169 998.169 998.124 998.124 998.078 998.078 998.033 998.033 997.986 997.986 + 997.938 997.938 997.882 997.882 997.826 997.826 997.771 997.771 997.715 997.715 997.658 997.658 + 997.602 997.602 997.546 997.546 997.49 997.49 997.433 997.433 997.377 997.377 997.321 997.321 + 997.266 997.266 997.21 997.21 997.155 997.155 997.098 997.098 997.036 997.036 996.974 996.974 + 996.913 996.913 996.853 996.853 996.794 996.794 996.735 996.735 996.677 996.677 996.62 996.62 + 996.564 996.564 996.509 996.509 996.454 996.454 996.401 996.401 996.349 996.349 996.298 996.298 + 996.249 996.249 996.2 996.2 996.152 996.152 996.1 996.1 996.05 996.05 996.001 996.001 + 995.954 995.954 995.908 995.908 995.864 995.864 995.821 995.821 995.78 995.78 995.74 995.74 + 995.702 995.702 995.665 995.665 995.63 995.63 995.596 995.596 995.564 995.564 995.533 995.533 + 995.504 995.504 995.476 995.476 995.449 995.449 995.424 995.424 995.399 995.399 995.377 995.377 + 995.355 995.355 995.335 995.335 995.316 995.316 995.298 995.298 995.281 995.281 995.265 995.265 + 995.25 995.25 995.237 995.237 995.224 995.224 995.212 995.212 995.201 995.201 995.19 995.19 + 995.181 995.181 995.172 995.172 995.164 995.164 995.157 995.157 995.15 995.15 995.144 995.144 + 995.138 995.138 995.133 995.133 995.128 995.128 995.124 995.124 995.12 995.12 995.117 995.117 + 995.113 995.113 995.111 995.111 995.108 995.108 995.106 995.106 995.104 995.104 995.102 995.102 + 995.101 995.101 995.099 995.099 995.098 995.098 995.097 995.097 995.096 995.096 995.095 995.095 + 995.094 995.094 995.094 995.094 995.093 995.093 995.093 995.093 995.092 995.092 995.092 995.092 + 995.092 995.092 995.091 995.091 995.091 995.091 995.091 995.091 995.091 995.091 995.091 995.091 + 995.091 995.091 995.091 995.091 995.091 995.091 995.091 995.091 995.091 995.091 995.091 995.091 + 995.091 995.091 995.091 995.091 995.091 995.091 995.091 995.091 995.092 995.092 995.092 995.092 + 995.092 995.092 995.092 995.092 995.092 995.092 995.092 995.092 995.092 995.092 995.092 995.092 + 995.092 995.092 995.092 995.092 995.092 995.092 995.093 995.093 995.093 995.093 995.093 995.093 + 995.093 995.093 995.093 995.093 995.093 995.093 995.093 995.093 995.093 995.093 995.093 995.093 + 995.093 995.093 995.094 995.094 995.094 995.094 995.094 995.094 995.094 995.094 995.094 995.094 + 995.094 995.094 995.094 995.094 995.094 995.094 995.094 995.094 995.094 995.094 995.095 995.095 + 995.095 995.095 995.095 995.095 995.095 995.095 995.095 995.095 995.095 995.095 995.095 995.095 + 995.095 995.095 995.095 995.095 995.095 995.095 995.096 995.096 995.096 995.096 995.096 995.096 + 995.096 995.096 995.096 995.096 995.096 995.096 995.096 995.096 995.096 995.096 995.096 995.096 + 995.096 995.096 995.096 995.096 995.097 995.097 995.097 995.097 995.097 995.097 995.097 995.097 + 995.097 995.097 995.097 995.097 995.097 995.097 + </DataArray> + <DataArray type="Float32" Name="mu" NumberOfComponents="1" format="ascii"> + 0.00124138 0.00113672 0.00124138 0.00113672 0.00111914 0.00111914 0.00111281 0.00111281 0.00110805 0.00110805 0.00110344 0.00110344 + 0.00109876 0.00109876 0.00109396 0.00109396 0.00108906 0.00108906 0.00108405 0.00108405 0.00107893 0.00107893 0.00107371 0.00107371 + 0.00106837 0.00106837 0.00106293 0.00106293 0.00105792 0.00105792 0.00105304 0.00105304 0.00104807 0.00104807 0.00104301 0.00104301 + 0.00103788 0.00103788 0.00103266 0.00103266 0.00102737 0.00102737 0.00102201 0.00102201 0.00101658 0.00101658 0.00101108 0.00101108 + 0.00100552 0.00100552 0.000999898 0.000999898 0.000994223 0.000994223 0.000988496 0.000988496 0.000982721 0.000982721 0.000976905 0.000976905 + 0.000971242 0.000971242 0.000966106 0.000966106 0.000960945 0.000960945 0.000955763 0.000955763 0.000950564 0.000950564 0.000945353 0.000945353 + 0.000940134 0.000940134 0.000934913 0.000934913 0.000929693 0.000929693 0.00092448 0.00092448 0.000919278 0.000919278 0.000914093 0.000914093 + 0.000908928 0.000908928 0.000903789 0.000903789 0.000898681 0.000898681 0.000893799 0.000893799 0.000889381 0.000889381 0.000885002 0.000885002 + 0.000880666 0.000880666 0.000876377 0.000876377 0.000872139 0.000872139 0.000867956 0.000867956 0.000863832 0.000863832 0.000859769 0.000859769 + 0.000855772 0.000855772 0.000851844 0.000851844 0.000847987 0.000847987 0.000844206 0.000844206 0.000840501 0.000840501 0.000836877 0.000836877 + 0.000833336 0.000833336 0.000829879 0.000829879 0.000826596 0.000826596 0.000823699 0.000823699 0.000820881 0.000820881 0.000818143 0.000818143 + 0.000815488 0.000815488 0.000812915 0.000812915 0.000810426 0.000810426 0.00080802 0.00080802 0.000805699 0.000805699 0.000803462 0.000803462 + 0.000801308 0.000801308 0.000799239 0.000799239 0.000797253 0.000797253 0.000795349 0.000795349 0.000793528 0.000793528 0.000791787 0.000791787 + 0.000790127 0.000790127 0.000788544 0.000788544 0.000787039 0.000787039 0.00078561 0.00078561 0.000784254 0.000784254 0.000782971 0.000782971 + 0.000781757 0.000781757 0.000780613 0.000780613 0.000779534 0.000779534 0.00077852 0.00077852 0.000777567 0.000777567 0.000776675 0.000776675 + 0.00077584 0.00077584 0.00077506 0.00077506 0.000774333 0.000774333 0.000773656 0.000773656 0.000773028 0.000773028 0.000772446 0.000772446 + 0.000771907 0.000771907 0.00077141 0.00077141 0.000770952 0.000770952 0.00077053 0.00077053 0.000770144 0.000770144 0.00076979 0.00076979 + 0.000769466 0.000769466 0.000769172 0.000769172 0.000768903 0.000768903 0.00076866 0.00076866 0.00076844 0.00076844 0.000768241 0.000768241 + 0.000768061 0.000768061 0.0007679 0.0007679 0.000767756 0.000767756 0.000767626 0.000767626 0.000767511 0.000767511 0.000767409 0.000767409 + 0.000767318 0.000767318 0.000767244 0.000767244 0.000767181 0.000767181 0.000767126 0.000767126 0.000767077 0.000767077 0.000767035 0.000767035 + 0.000766998 0.000766998 0.000766966 0.000766966 0.000766938 0.000766938 0.000766914 0.000766914 0.000766893 0.000766893 0.000766876 0.000766876 + 0.000766861 0.000766861 0.000766848 0.000766848 0.000766838 0.000766838 0.000766829 0.000766829 0.000766821 0.000766821 0.000766815 0.000766815 + 0.00076681 0.00076681 0.000766806 0.000766806 0.000766802 0.000766802 0.0007668 0.0007668 0.000766798 0.000766798 0.000766796 0.000766796 + 0.000766795 0.000766795 0.000766794 0.000766794 0.000766793 0.000766793 0.000766793 0.000766793 0.000766793 0.000766793 0.000766793 0.000766793 + 0.000766793 0.000766793 0.000766793 0.000766793 0.000766793 0.000766793 0.000766794 0.000766794 0.000766794 0.000766794 0.000766795 0.000766795 + 0.000766795 0.000766795 0.000766796 0.000766796 0.000766796 0.000766796 0.000766797 0.000766797 0.000766797 0.000766797 0.000766798 0.000766798 + 0.000766799 0.000766799 0.000766799 0.000766799 0.0007668 0.0007668 0.0007668 0.0007668 0.000766801 0.000766801 0.000766802 0.000766802 + 0.000766802 0.000766802 0.000766803 0.000766803 0.000766803 0.000766803 0.000766804 0.000766804 0.000766805 0.000766805 0.000766805 0.000766805 + 0.000766806 0.000766806 0.000766806 0.000766806 0.000766807 0.000766807 0.000766808 0.000766808 0.000766808 0.000766808 0.000766809 0.000766809 + 0.000766809 0.000766809 0.00076681 0.00076681 0.000766811 0.000766811 0.000766811 0.000766811 0.000766812 0.000766812 0.000766812 0.000766812 + 0.000766813 0.000766813 0.000766814 0.000766814 0.000766814 0.000766814 0.000766815 0.000766815 0.000766816 0.000766816 0.000766816 0.000766816 + 0.000766817 0.000766817 0.000766817 0.000766817 0.000766818 0.000766818 0.000766819 0.000766819 0.000766819 0.000766819 0.00076682 0.00076682 + 0.00076682 0.00076682 0.000766821 0.000766821 0.000766822 0.000766822 0.000766822 0.000766822 0.000766823 0.000766823 0.000766823 0.000766823 + 0.000766824 0.000766824 0.000766825 0.000766825 0.000766825 0.000766825 + </DataArray> + <DataArray type="Float32" Name="delp" NumberOfComponents="1" format="ascii"> + 0 283.675 0 283.675 562.987 562.987 840.725 840.725 1117.28 1117.28 1392.69 1392.69 + 1666.93 1666.93 1939.97 1939.97 2211.8 2211.8 2482.38 2482.38 2751.68 2751.68 3019.69 3019.69 + 3286.36 3286.36 3551.68 3551.68 3815.76 3815.76 4078.62 4078.62 4340.24 4340.24 4600.61 4600.61 + 4859.7 4859.7 5117.49 5117.49 5373.97 5373.97 5629.11 5629.11 5882.9 5882.9 6135.32 6135.32 + 6386.36 6386.36 6636.01 6636.01 6884.23 6884.23 7131.04 7131.04 7376.41 7376.41 7620.33 7620.33 + 7862.84 7862.84 8104.07 8104.07 8344.03 8344.03 8582.69 8582.69 8820.06 8820.06 9056.14 9056.14 + 9290.92 9290.92 9524.4 9524.4 9756.58 9756.58 9987.47 9987.47 10217.1 10217.1 10445.4 10445.4 + 10672.4 10672.4 10898.1 10898.1 11122.6 11122.6 11345.9 11345.9 11568 11568 11789.1 11789.1 + 12009.1 12009.1 12228 12228 12445.9 12445.9 12662.7 12662.7 12878.5 12878.5 13093.3 13093.3 + 13307.1 13307.1 13520 13520 13731.8 13731.8 13942.8 13942.8 14152.8 14152.8 14361.9 14361.9 + 14570.1 14570.1 14777.5 14777.5 14984.1 14984.1 15189.9 15189.9 15395 15395 15599.5 15599.5 + 15803.3 15803.3 16006.5 16006.5 16209 16209 16410.9 16410.9 16612.3 16612.3 16813.1 16813.1 + 17013.4 17013.4 17213.2 17213.2 17412.4 17412.4 17611.2 17611.2 17809.6 17809.6 18007.5 18007.5 + 18205 18205 18402.1 18402.1 18598.8 18598.8 18795.2 18795.2 18991.2 18991.2 19187 19187 + 19382.4 19382.4 19577.5 19577.5 19772.4 19772.4 19967 19967 20161.4 20161.4 20355.5 20355.5 + 20549.5 20549.5 20743.3 20743.3 20936.8 20936.8 21130.2 21130.2 21323.5 21323.5 21516.6 21516.6 + 21709.6 21709.6 21902.4 21902.4 22095.2 22095.2 22287.8 22287.8 22480.3 22480.3 22672.8 22672.8 + 22865.1 22865.1 23057.4 23057.4 23249.7 23249.7 23441.8 23441.8 23633.9 23633.9 23826 23826 + 24018 24018 24210 24210 24401.9 24401.9 24593.8 24593.8 24785.7 24785.7 24977.6 24977.6 + 25169.4 25169.4 25361.2 25361.2 25553 25553 25744.8 25744.8 25936.6 25936.6 26128.3 26128.3 + 26320.1 26320.1 26511.8 26511.8 26703.6 26703.6 26895.3 26895.3 27087 27087 27278.8 27278.8 + 27470.5 27470.5 27662.2 27662.2 27853.9 27853.9 28045.6 28045.6 28237.3 28237.3 28429 28429 + 28620.7 28620.7 28812.4 28812.4 29004.1 29004.1 29195.8 29195.8 29387.5 29387.5 29579.2 29579.2 + 29771 29771 29962.7 29962.7 30154.4 30154.4 30346.1 30346.1 30537.8 30537.8 30729.5 30729.5 + 30921.2 30921.2 31112.9 31112.9 31304.6 31304.6 31496.3 31496.3 31688 31688 31879.7 31879.7 + 32071.4 32071.4 32263.1 32263.1 32454.8 32454.8 32646.5 32646.5 32838.2 32838.2 33029.9 33029.9 + 33221.6 33221.6 33413.3 33413.3 33605 33605 33796.7 33796.7 33988.4 33988.4 34180.1 34180.1 + 34371.8 34371.8 34563.5 34563.5 34755.2 34755.2 34946.9 34946.9 35138.6 35138.6 35330.3 35330.3 + 35522 35522 35713.7 35713.7 35905.4 35905.4 36097.1 36097.1 36288.8 36288.8 36480.5 36480.5 + 36672.3 36672.3 36864 36864 37055.7 37055.7 37247.4 37247.4 37439.1 37439.1 37630.8 37630.8 + 37822.5 37822.5 38014.2 38014.2 38205.9 38205.9 38397.6 38397.6 38589.3 38589.3 38781 38781 + 38972.7 38972.7 39164.4 39164.4 39356.1 39356.1 39547.8 39547.8 39739.5 39739.5 39931.3 39931.3 + 40123 40123 40314.7 40314.7 40506.4 40506.4 40698.1 40698.1 40889.8 40889.8 41081.5 41081.5 + 41273.2 41273.2 41464.9 41464.9 41656.6 41656.6 + </DataArray> + <DataArray type="Float32" Name="x^H2O_liq" NumberOfComponents="1" format="ascii"> + 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 + 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 + 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 + 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 + 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 + 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 + 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 + 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 + 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 + 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 + 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 + 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 + 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 + 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 + 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 + 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 + 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 + 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 + 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 + 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 + 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 + 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 + 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 + 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 + 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 + 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 + 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 + 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 + 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 + 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 + 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 + 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 + 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 + 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 + </DataArray> + <DataArray type="Float32" Name="x^N2_liq" NumberOfComponents="1" format="ascii"> + 1e-05 9.97984e-06 1e-05 9.97984e-06 9.97964e-06 9.97964e-06 9.97944e-06 9.97944e-06 9.97925e-06 9.97925e-06 9.97905e-06 9.97905e-06 + 9.97885e-06 9.97885e-06 9.97866e-06 9.97866e-06 9.97846e-06 9.97846e-06 9.97827e-06 9.97827e-06 9.97807e-06 9.97807e-06 9.97787e-06 9.97787e-06 + 9.97767e-06 9.97767e-06 9.97748e-06 9.97748e-06 9.97728e-06 9.97728e-06 9.97708e-06 9.97708e-06 9.97688e-06 9.97688e-06 9.97669e-06 9.97669e-06 + 9.97649e-06 9.97649e-06 9.97629e-06 9.97629e-06 9.97609e-06 9.97609e-06 9.97589e-06 9.97589e-06 9.9757e-06 9.9757e-06 9.9755e-06 9.9755e-06 + 9.9753e-06 9.9753e-06 9.9751e-06 9.9751e-06 9.9749e-06 9.9749e-06 9.9747e-06 9.9747e-06 9.9745e-06 9.9745e-06 9.97431e-06 9.97431e-06 + 9.97411e-06 9.97411e-06 9.97391e-06 9.97391e-06 9.97371e-06 9.97371e-06 9.97351e-06 9.97351e-06 9.97331e-06 9.97331e-06 9.97311e-06 9.97311e-06 + 9.97291e-06 9.97291e-06 9.97271e-06 9.97271e-06 9.97252e-06 9.97252e-06 9.97232e-06 9.97232e-06 9.97212e-06 9.97212e-06 9.97192e-06 9.97192e-06 + 9.97172e-06 9.97172e-06 9.97152e-06 9.97152e-06 9.97132e-06 9.97132e-06 9.97112e-06 9.97112e-06 9.97092e-06 9.97092e-06 9.97072e-06 9.97072e-06 + 9.97052e-06 9.97052e-06 9.97033e-06 9.97033e-06 9.97013e-06 9.97013e-06 9.96993e-06 9.96993e-06 9.96973e-06 9.96973e-06 9.96953e-06 9.96953e-06 + 9.96933e-06 9.96933e-06 9.96913e-06 9.96913e-06 9.96893e-06 9.96893e-06 9.96873e-06 9.96873e-06 9.96853e-06 9.96853e-06 9.96833e-06 9.96833e-06 + 9.96814e-06 9.96814e-06 9.96794e-06 9.96794e-06 9.96774e-06 9.96774e-06 9.96754e-06 9.96754e-06 9.96734e-06 9.96734e-06 9.96714e-06 9.96714e-06 + 9.96694e-06 9.96694e-06 9.96674e-06 9.96674e-06 9.96654e-06 9.96654e-06 9.96635e-06 9.96635e-06 9.96615e-06 9.96615e-06 9.96595e-06 9.96595e-06 + 9.96575e-06 9.96575e-06 9.96555e-06 9.96555e-06 9.96535e-06 9.96535e-06 9.96515e-06 9.96515e-06 9.96496e-06 9.96496e-06 9.96476e-06 9.96476e-06 + 9.96456e-06 9.96456e-06 9.96436e-06 9.96436e-06 9.96416e-06 9.96416e-06 9.96396e-06 9.96396e-06 9.96376e-06 9.96376e-06 9.96356e-06 9.96356e-06 + 9.96337e-06 9.96337e-06 9.96317e-06 9.96317e-06 9.96297e-06 9.96297e-06 9.96277e-06 9.96277e-06 9.96257e-06 9.96257e-06 9.96237e-06 9.96237e-06 + 9.96217e-06 9.96217e-06 9.96198e-06 9.96198e-06 9.96178e-06 9.96178e-06 9.96158e-06 9.96158e-06 9.96138e-06 9.96138e-06 9.96118e-06 9.96118e-06 + 9.96098e-06 9.96098e-06 9.96079e-06 9.96079e-06 9.96059e-06 9.96059e-06 9.96039e-06 9.96039e-06 9.96019e-06 9.96019e-06 9.95999e-06 9.95999e-06 + 9.95979e-06 9.95979e-06 9.9596e-06 9.9596e-06 9.9594e-06 9.9594e-06 9.9592e-06 9.9592e-06 9.959e-06 9.959e-06 9.9588e-06 9.9588e-06 + 9.9586e-06 9.9586e-06 9.95841e-06 9.95841e-06 9.95821e-06 9.95821e-06 9.95801e-06 9.95801e-06 9.95781e-06 9.95781e-06 9.95761e-06 9.95761e-06 + 9.95742e-06 9.95742e-06 9.95722e-06 9.95722e-06 9.95702e-06 9.95702e-06 9.95682e-06 9.95682e-06 9.95662e-06 9.95662e-06 9.95642e-06 9.95642e-06 + 9.95623e-06 9.95623e-06 9.95603e-06 9.95603e-06 9.95583e-06 9.95583e-06 9.95563e-06 9.95563e-06 9.95543e-06 9.95543e-06 9.95524e-06 9.95524e-06 + 9.95504e-06 9.95504e-06 9.95484e-06 9.95484e-06 9.95464e-06 9.95464e-06 9.95444e-06 9.95444e-06 9.95424e-06 9.95424e-06 9.95405e-06 9.95405e-06 + 9.95385e-06 9.95385e-06 9.95365e-06 9.95365e-06 9.95345e-06 9.95345e-06 9.95325e-06 9.95325e-06 9.95306e-06 9.95306e-06 9.95286e-06 9.95286e-06 + 9.95266e-06 9.95266e-06 9.95246e-06 9.95246e-06 9.95226e-06 9.95226e-06 9.95207e-06 9.95207e-06 9.95187e-06 9.95187e-06 9.95167e-06 9.95167e-06 + 9.95147e-06 9.95147e-06 9.95127e-06 9.95127e-06 9.95108e-06 9.95108e-06 9.95088e-06 9.95088e-06 9.95068e-06 9.95068e-06 9.95048e-06 9.95048e-06 + 9.95028e-06 9.95028e-06 9.95009e-06 9.95009e-06 9.94989e-06 9.94989e-06 9.94969e-06 9.94969e-06 9.94949e-06 9.94949e-06 9.9493e-06 9.9493e-06 + 9.9491e-06 9.9491e-06 9.9489e-06 9.9489e-06 9.9487e-06 9.9487e-06 9.9485e-06 9.9485e-06 9.94831e-06 9.94831e-06 9.94811e-06 9.94811e-06 + 9.94791e-06 9.94791e-06 9.94771e-06 9.94771e-06 9.94751e-06 9.94751e-06 9.94732e-06 9.94732e-06 9.94712e-06 9.94712e-06 9.94692e-06 9.94692e-06 + 9.94672e-06 9.94672e-06 9.94653e-06 9.94653e-06 9.94633e-06 9.94633e-06 9.94613e-06 9.94613e-06 9.94593e-06 9.94593e-06 9.94573e-06 9.94573e-06 + 9.94554e-06 9.94554e-06 9.94534e-06 9.94534e-06 9.94514e-06 9.94514e-06 9.94494e-06 9.94494e-06 9.94475e-06 9.94475e-06 9.94455e-06 9.94455e-06 + 9.94435e-06 9.94435e-06 9.94415e-06 9.94415e-06 9.94395e-06 9.94395e-06 9.94376e-06 9.94376e-06 9.94356e-06 9.94356e-06 9.94336e-06 9.94336e-06 + 9.94316e-06 9.94316e-06 9.94297e-06 9.94297e-06 9.94277e-06 9.94277e-06 9.94257e-06 9.94257e-06 9.94237e-06 9.94237e-06 9.94218e-06 9.94218e-06 + 9.94198e-06 9.94198e-06 9.94178e-06 9.94178e-06 9.94158e-06 9.94158e-06 9.94139e-06 9.94139e-06 9.94119e-06 9.94119e-06 9.94099e-06 9.94099e-06 + 9.94079e-06 9.94079e-06 9.9406e-06 9.9406e-06 9.9404e-06 9.9404e-06 + </DataArray> + <DataArray type="Float32" Name="X^H2O_liq" NumberOfComponents="1" format="ascii"> + 0.999984 0.999985 0.999984 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 + 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 + 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 + 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 + 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 + 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 + 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 + 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 + 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 + 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 + 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 + 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 + 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 + 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 + 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 + 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 + 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 + 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 + 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 + 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 + 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 + 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 + 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 + 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 + 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 + 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 + 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 + 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 + 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 + 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 + 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 + 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 + 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 + 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 + </DataArray> + <DataArray type="Float32" Name="X^N2_liq" NumberOfComponents="1" format="ascii"> + 1.55498e-05 1.55184e-05 1.55498e-05 1.55184e-05 1.55181e-05 1.55181e-05 1.55178e-05 1.55178e-05 1.55175e-05 1.55175e-05 1.55172e-05 1.55172e-05 + 1.55169e-05 1.55169e-05 1.55166e-05 1.55166e-05 1.55163e-05 1.55163e-05 1.5516e-05 1.5516e-05 1.55157e-05 1.55157e-05 1.55154e-05 1.55154e-05 + 1.55151e-05 1.55151e-05 1.55148e-05 1.55148e-05 1.55145e-05 1.55145e-05 1.55142e-05 1.55142e-05 1.55139e-05 1.55139e-05 1.55135e-05 1.55135e-05 + 1.55132e-05 1.55132e-05 1.55129e-05 1.55129e-05 1.55126e-05 1.55126e-05 1.55123e-05 1.55123e-05 1.5512e-05 1.5512e-05 1.55117e-05 1.55117e-05 + 1.55114e-05 1.55114e-05 1.55111e-05 1.55111e-05 1.55108e-05 1.55108e-05 1.55105e-05 1.55105e-05 1.55102e-05 1.55102e-05 1.55098e-05 1.55098e-05 + 1.55095e-05 1.55095e-05 1.55092e-05 1.55092e-05 1.55089e-05 1.55089e-05 1.55086e-05 1.55086e-05 1.55083e-05 1.55083e-05 1.5508e-05 1.5508e-05 + 1.55077e-05 1.55077e-05 1.55074e-05 1.55074e-05 1.55071e-05 1.55071e-05 1.55068e-05 1.55068e-05 1.55064e-05 1.55064e-05 1.55061e-05 1.55061e-05 + 1.55058e-05 1.55058e-05 1.55055e-05 1.55055e-05 1.55052e-05 1.55052e-05 1.55049e-05 1.55049e-05 1.55046e-05 1.55046e-05 1.55043e-05 1.55043e-05 + 1.5504e-05 1.5504e-05 1.55037e-05 1.55037e-05 1.55033e-05 1.55033e-05 1.5503e-05 1.5503e-05 1.55027e-05 1.55027e-05 1.55024e-05 1.55024e-05 + 1.55021e-05 1.55021e-05 1.55018e-05 1.55018e-05 1.55015e-05 1.55015e-05 1.55012e-05 1.55012e-05 1.55009e-05 1.55009e-05 1.55006e-05 1.55006e-05 + 1.55003e-05 1.55003e-05 1.54999e-05 1.54999e-05 1.54996e-05 1.54996e-05 1.54993e-05 1.54993e-05 1.5499e-05 1.5499e-05 1.54987e-05 1.54987e-05 + 1.54984e-05 1.54984e-05 1.54981e-05 1.54981e-05 1.54978e-05 1.54978e-05 1.54975e-05 1.54975e-05 1.54972e-05 1.54972e-05 1.54969e-05 1.54969e-05 + 1.54965e-05 1.54965e-05 1.54962e-05 1.54962e-05 1.54959e-05 1.54959e-05 1.54956e-05 1.54956e-05 1.54953e-05 1.54953e-05 1.5495e-05 1.5495e-05 + 1.54947e-05 1.54947e-05 1.54944e-05 1.54944e-05 1.54941e-05 1.54941e-05 1.54938e-05 1.54938e-05 1.54935e-05 1.54935e-05 1.54931e-05 1.54931e-05 + 1.54928e-05 1.54928e-05 1.54925e-05 1.54925e-05 1.54922e-05 1.54922e-05 1.54919e-05 1.54919e-05 1.54916e-05 1.54916e-05 1.54913e-05 1.54913e-05 + 1.5491e-05 1.5491e-05 1.54907e-05 1.54907e-05 1.54904e-05 1.54904e-05 1.54901e-05 1.54901e-05 1.54897e-05 1.54897e-05 1.54894e-05 1.54894e-05 + 1.54891e-05 1.54891e-05 1.54888e-05 1.54888e-05 1.54885e-05 1.54885e-05 1.54882e-05 1.54882e-05 1.54879e-05 1.54879e-05 1.54876e-05 1.54876e-05 + 1.54873e-05 1.54873e-05 1.5487e-05 1.5487e-05 1.54867e-05 1.54867e-05 1.54864e-05 1.54864e-05 1.5486e-05 1.5486e-05 1.54857e-05 1.54857e-05 + 1.54854e-05 1.54854e-05 1.54851e-05 1.54851e-05 1.54848e-05 1.54848e-05 1.54845e-05 1.54845e-05 1.54842e-05 1.54842e-05 1.54839e-05 1.54839e-05 + 1.54836e-05 1.54836e-05 1.54833e-05 1.54833e-05 1.5483e-05 1.5483e-05 1.54827e-05 1.54827e-05 1.54823e-05 1.54823e-05 1.5482e-05 1.5482e-05 + 1.54817e-05 1.54817e-05 1.54814e-05 1.54814e-05 1.54811e-05 1.54811e-05 1.54808e-05 1.54808e-05 1.54805e-05 1.54805e-05 1.54802e-05 1.54802e-05 + 1.54799e-05 1.54799e-05 1.54796e-05 1.54796e-05 1.54793e-05 1.54793e-05 1.5479e-05 1.5479e-05 1.54787e-05 1.54787e-05 1.54783e-05 1.54783e-05 + 1.5478e-05 1.5478e-05 1.54777e-05 1.54777e-05 1.54774e-05 1.54774e-05 1.54771e-05 1.54771e-05 1.54768e-05 1.54768e-05 1.54765e-05 1.54765e-05 + 1.54762e-05 1.54762e-05 1.54759e-05 1.54759e-05 1.54756e-05 1.54756e-05 1.54753e-05 1.54753e-05 1.5475e-05 1.5475e-05 1.54746e-05 1.54746e-05 + 1.54743e-05 1.54743e-05 1.5474e-05 1.5474e-05 1.54737e-05 1.54737e-05 1.54734e-05 1.54734e-05 1.54731e-05 1.54731e-05 1.54728e-05 1.54728e-05 + 1.54725e-05 1.54725e-05 1.54722e-05 1.54722e-05 1.54719e-05 1.54719e-05 1.54716e-05 1.54716e-05 1.54713e-05 1.54713e-05 1.5471e-05 1.5471e-05 + 1.54706e-05 1.54706e-05 1.54703e-05 1.54703e-05 1.547e-05 1.547e-05 1.54697e-05 1.54697e-05 1.54694e-05 1.54694e-05 1.54691e-05 1.54691e-05 + 1.54688e-05 1.54688e-05 1.54685e-05 1.54685e-05 1.54682e-05 1.54682e-05 1.54679e-05 1.54679e-05 1.54676e-05 1.54676e-05 1.54673e-05 1.54673e-05 + 1.5467e-05 1.5467e-05 1.54666e-05 1.54666e-05 1.54663e-05 1.54663e-05 1.5466e-05 1.5466e-05 1.54657e-05 1.54657e-05 1.54654e-05 1.54654e-05 + 1.54651e-05 1.54651e-05 1.54648e-05 1.54648e-05 1.54645e-05 1.54645e-05 1.54642e-05 1.54642e-05 1.54639e-05 1.54639e-05 1.54636e-05 1.54636e-05 + 1.54633e-05 1.54633e-05 1.5463e-05 1.5463e-05 1.54627e-05 1.54627e-05 1.54623e-05 1.54623e-05 1.5462e-05 1.5462e-05 1.54617e-05 1.54617e-05 + 1.54614e-05 1.54614e-05 1.54611e-05 1.54611e-05 1.54608e-05 1.54608e-05 1.54605e-05 1.54605e-05 1.54602e-05 1.54602e-05 1.54599e-05 1.54599e-05 + 1.54596e-05 1.54596e-05 1.54593e-05 1.54593e-05 1.5459e-05 1.5459e-05 1.54587e-05 1.54587e-05 1.54584e-05 1.54584e-05 1.5458e-05 1.5458e-05 + 1.54577e-05 1.54577e-05 1.54574e-05 1.54574e-05 1.54571e-05 1.54571e-05 + </DataArray> + <DataArray type="Float32" Name="T_liq" NumberOfComponents="1" format="ascii"> + 285 288.228 285 288.228 288.834 288.834 289.052 289.052 289.216 289.216 289.375 289.375 + 289.537 289.537 289.702 289.702 289.871 289.871 290.043 290.043 290.22 290.22 290.4 290.4 + 290.584 290.584 290.771 290.771 290.962 290.962 291.157 291.157 291.355 291.355 291.556 291.556 + 291.761 291.761 291.968 291.968 292.179 292.179 292.392 292.392 292.609 292.609 292.828 292.828 + 293.049 293.049 293.273 293.273 293.499 293.499 293.727 293.727 293.957 293.957 294.189 294.189 + 294.422 294.422 294.657 294.657 294.892 294.892 295.129 295.129 295.367 295.367 295.605 295.605 + 295.843 295.843 296.082 296.082 296.32 296.32 296.558 296.558 296.796 296.796 297.033 297.033 + 297.269 297.269 297.504 297.504 297.737 297.737 297.969 297.969 298.199 298.199 298.427 298.427 + 298.652 298.652 298.876 298.876 299.096 299.096 299.314 299.314 299.529 299.529 299.74 299.74 + 299.948 299.948 300.153 300.153 300.354 300.354 300.55 300.55 300.743 300.743 300.932 300.932 + 301.116 301.116 301.296 301.296 301.472 301.472 301.642 301.642 301.809 301.809 301.97 301.97 + 302.127 302.127 302.278 302.278 302.425 302.425 302.567 302.567 302.704 302.704 302.836 302.836 + 302.963 302.963 303.085 303.085 303.202 303.202 303.314 303.314 303.422 303.422 303.524 303.524 + 303.622 303.622 303.715 303.715 303.804 303.804 303.888 303.888 303.968 303.968 304.044 304.044 + 304.116 304.116 304.183 304.183 304.247 304.247 304.307 304.307 304.363 304.363 304.415 304.415 + 304.465 304.465 304.511 304.511 304.553 304.553 304.593 304.593 304.63 304.63 304.665 304.665 + 304.696 304.696 304.726 304.726 304.753 304.753 304.778 304.778 304.8 304.8 304.821 304.821 + 304.84 304.84 304.858 304.858 304.874 304.874 304.888 304.888 304.901 304.901 304.913 304.913 + 304.923 304.923 304.933 304.933 304.941 304.941 304.949 304.949 304.956 304.956 304.962 304.962 + 304.967 304.967 304.972 304.972 304.976 304.976 304.98 304.98 304.983 304.983 304.986 304.986 + 304.988 304.988 304.99 304.99 304.992 304.992 304.994 304.994 304.995 304.995 304.996 304.996 + 304.997 304.997 304.998 304.998 304.999 304.999 304.999 304.999 305 305 305 305 + 305.001 305.001 305.001 305.001 305.001 305.001 305.001 305.001 305.002 305.002 305.002 305.002 + 305.002 305.002 305.002 305.002 305.002 305.002 305.002 305.002 305.002 305.002 305.002 305.002 + 305.002 305.002 305.002 305.002 305.002 305.002 305.002 305.002 305.002 305.002 305.002 305.002 + 305.002 305.002 305.002 305.002 305.002 305.002 305.002 305.002 305.002 305.002 305.001 305.001 + 305.001 305.001 305.001 305.001 305.001 305.001 305.001 305.001 305.001 305.001 305.001 305.001 + 305.001 305.001 305.001 305.001 305.001 305.001 305.001 305.001 305.001 305.001 305.001 305.001 + 305.001 305.001 305.001 305.001 305.001 305.001 305.001 305.001 305.001 305.001 305.001 305.001 + 305.001 305.001 305.001 305.001 305.001 305.001 305.001 305.001 305.001 305.001 305.001 305.001 + 305 305 305 305 305 305 305 305 305 305 305 305 + 305 305 305 305 305 305 305 305 305 305 305 305 + 305 305 305 305 305 305 305 305 305 305 305 305 + 305 305 305 305 305 305 + </DataArray> + <DataArray type="Float32" Name="T_s" NumberOfComponents="1" format="ascii"> + 285 288.228 285 288.228 288.834 288.834 289.052 289.052 289.216 289.216 289.375 289.375 + 289.537 289.537 289.702 289.702 289.871 289.871 290.043 290.043 290.22 290.22 290.4 290.4 + 290.584 290.584 290.771 290.771 290.962 290.962 291.157 291.157 291.355 291.355 291.556 291.556 + 291.76 291.76 291.968 291.968 292.179 292.179 292.392 292.392 292.609 292.609 292.828 292.828 + 293.049 293.049 293.273 293.273 293.499 293.499 293.727 293.727 293.957 293.957 294.189 294.189 + 294.422 294.422 294.656 294.656 294.892 294.892 295.129 295.129 295.366 295.366 295.605 295.605 + 295.843 295.843 296.081 296.081 296.32 296.32 296.558 296.558 296.796 296.796 297.033 297.033 + 297.269 297.269 297.503 297.503 297.737 297.737 297.969 297.969 298.198 298.198 298.426 298.426 + 298.652 298.652 298.875 298.875 299.096 299.096 299.314 299.314 299.529 299.529 299.74 299.74 + 299.948 299.948 300.153 300.153 300.353 300.353 300.55 300.55 300.743 300.743 300.932 300.932 + 301.116 301.116 301.296 301.296 301.472 301.472 301.642 301.642 301.809 301.809 301.97 301.97 + 302.127 302.127 302.278 302.278 302.425 302.425 302.567 302.567 302.704 302.704 302.836 302.836 + 302.963 302.963 303.085 303.085 303.202 303.202 303.314 303.314 303.422 303.422 303.524 303.524 + 303.622 303.622 303.715 303.715 303.804 303.804 303.888 303.888 303.968 303.968 304.044 304.044 + 304.116 304.116 304.183 304.183 304.247 304.247 304.307 304.307 304.363 304.363 304.415 304.415 + 304.465 304.465 304.511 304.511 304.553 304.553 304.593 304.593 304.63 304.63 304.665 304.665 + 304.696 304.696 304.726 304.726 304.753 304.753 304.778 304.778 304.8 304.8 304.821 304.821 + 304.84 304.84 304.858 304.858 304.874 304.874 304.888 304.888 304.901 304.901 304.913 304.913 + 304.923 304.923 304.933 304.933 304.941 304.941 304.949 304.949 304.956 304.956 304.962 304.962 + 304.967 304.967 304.972 304.972 304.976 304.976 304.98 304.98 304.983 304.983 304.986 304.986 + 304.988 304.988 304.99 304.99 304.992 304.992 304.994 304.994 304.995 304.995 304.996 304.996 + 304.997 304.997 304.998 304.998 304.999 304.999 304.999 304.999 305 305 305 305 + 305.001 305.001 305.001 305.001 305.001 305.001 305.001 305.001 305.002 305.002 305.002 305.002 + 305.002 305.002 305.002 305.002 305.002 305.002 305.002 305.002 305.002 305.002 305.002 305.002 + 305.002 305.002 305.002 305.002 305.002 305.002 305.002 305.002 305.002 305.002 305.002 305.002 + 305.002 305.002 305.002 305.002 305.002 305.002 305.002 305.002 305.002 305.002 305.001 305.001 + 305.001 305.001 305.001 305.001 305.001 305.001 305.001 305.001 305.001 305.001 305.001 305.001 + 305.001 305.001 305.001 305.001 305.001 305.001 305.001 305.001 305.001 305.001 305.001 305.001 + 305.001 305.001 305.001 305.001 305.001 305.001 305.001 305.001 305.001 305.001 305.001 305.001 + 305.001 305.001 305.001 305.001 305.001 305.001 305.001 305.001 305.001 305.001 305.001 305.001 + 305 305 305 305 305 305 305 305 305 305 305 305 + 305 305 305 305 305 305 305 305 305 305 305 305 + 305 305 305 305 305 305 305 305 305 305 305 305 + 305 305 305 305 305 305 + </DataArray> + <DataArray type="Float32" Name="reynoldsNumber_liq" NumberOfComponents="1" format="ascii"> + 0.0401861 0.0438693 0.0401861 0.0438693 0.0445563 0.0445563 0.0448092 0.0448092 0.0450008 0.0450008 0.0451882 0.0451882 + 0.0453802 0.0453802 0.0455783 0.0455783 0.0457827 0.0457827 0.0459937 0.0459937 0.0462112 0.0462112 0.0464354 0.0464354 + 0.0466664 0.0466664 0.0469045 0.0469045 0.0471259 0.0471259 0.0473435 0.0473435 0.0475669 0.0475669 0.0477963 0.0477963 + 0.0480317 0.0480317 0.0482731 0.0482731 0.0485204 0.0485204 0.0487738 0.0487738 0.0490333 0.0490333 0.0492987 0.0492987 + 0.0495701 0.0495701 0.0498475 0.0498475 0.0501308 0.0501308 0.0504199 0.0504199 0.0507148 0.0507148 0.0510155 0.0510155 + 0.0513117 0.0513117 0.0515829 0.0515829 0.0518584 0.0518584 0.0521379 0.0521379 0.0524214 0.0524214 0.0527086 0.0527086 + 0.0529995 0.0529995 0.0532938 0.0532938 0.0535913 0.0535913 0.0538918 0.0538918 0.054195 0.054195 0.0545007 0.0545007 + 0.0548087 0.0548087 0.0551186 0.0551186 0.0554302 0.0554302 0.0557313 0.0557313 0.0560063 0.0560063 0.0562814 0.0562814 + 0.0565566 0.0565566 0.0568314 0.0568314 0.0571056 0.0571056 0.0573789 0.0573789 0.0576509 0.0576509 0.0579215 0.0579215 + 0.0581901 0.0581901 0.0584566 0.0584566 0.0587207 0.0587207 0.0589819 0.0589819 0.0592401 0.0592401 0.0594949 0.0594949 + 0.0597461 0.0597461 0.0599933 0.0599933 0.06023 0.06023 0.0604402 0.0604402 0.0606459 0.0606459 0.0608471 0.0608471 + 0.0610436 0.0610436 0.0612352 0.0612352 0.0614217 0.0614217 0.0616031 0.0616031 0.0617791 0.0617791 0.0619497 0.0619497 + 0.0621148 0.0621148 0.0622744 0.0622744 0.0624282 0.0624282 0.0625764 0.0625764 0.0627189 0.0627189 0.0628556 0.0628556 + 0.0629867 0.0629867 0.0631121 0.0631121 0.0632318 0.0632318 0.0633459 0.0633459 0.0634545 0.0634545 0.0635577 0.0635577 + 0.0636555 0.0636555 0.0637482 0.0637482 0.0638357 0.0638357 0.0639182 0.0639182 0.0639958 0.0639958 0.0640688 0.0640688 + 0.0641372 0.0641372 0.0642012 0.0642012 0.064261 0.064261 0.0643167 0.0643167 0.0643686 0.0643686 0.0644167 0.0644167 + 0.0644613 0.0644613 0.0645026 0.0645026 0.0645406 0.0645406 0.0645756 0.0645756 0.0646078 0.0646078 0.0646372 0.0646372 + 0.0646642 0.0646642 0.0646888 0.0646888 0.0647111 0.0647111 0.0647315 0.0647315 0.0647499 0.0647499 0.0647665 0.0647665 + 0.0647815 0.0647815 0.064795 0.064795 0.0648071 0.0648071 0.0648179 0.0648179 0.0648276 0.0648276 0.0648362 0.0648362 + 0.0648438 0.0648438 0.06485 0.06485 0.0648552 0.0648552 0.0648599 0.0648599 0.0648639 0.0648639 0.0648675 0.0648675 + 0.0648706 0.0648706 0.0648733 0.0648733 0.0648756 0.0648756 0.0648776 0.0648776 0.0648793 0.0648793 0.0648808 0.0648808 + 0.064882 0.064882 0.0648831 0.0648831 0.064884 0.064884 0.0648847 0.0648847 0.0648853 0.0648853 0.0648859 0.0648859 + 0.0648863 0.0648863 0.0648866 0.0648866 0.0648869 0.0648869 0.0648871 0.0648871 0.0648873 0.0648873 0.0648874 0.0648874 + 0.0648875 0.0648875 0.0648876 0.0648876 0.0648877 0.0648877 0.0648877 0.0648877 0.0648877 0.0648877 0.0648877 0.0648877 + 0.0648877 0.0648877 0.0648877 0.0648877 0.0648876 0.0648876 0.0648876 0.0648876 0.0648876 0.0648876 0.0648875 0.0648875 + 0.0648875 0.0648875 0.0648874 0.0648874 0.0648874 0.0648874 0.0648873 0.0648873 0.0648873 0.0648873 0.0648872 0.0648872 + 0.0648872 0.0648872 0.0648871 0.0648871 0.0648871 0.0648871 0.064887 0.064887 0.064887 0.064887 0.0648869 0.0648869 + 0.0648869 0.0648869 0.0648868 0.0648868 0.0648868 0.0648868 0.0648867 0.0648867 0.0648867 0.0648867 0.0648866 0.0648866 + 0.0648866 0.0648866 0.0648865 0.0648865 0.0648865 0.0648865 0.0648864 0.0648864 0.0648863 0.0648863 0.0648863 0.0648863 + 0.0648862 0.0648862 0.0648862 0.0648862 0.0648861 0.0648861 0.0648861 0.0648861 0.064886 0.064886 0.064886 0.064886 + 0.0648859 0.0648859 0.0648859 0.0648859 0.0648858 0.0648858 0.0648858 0.0648858 0.0648857 0.0648857 0.0648857 0.0648857 + 0.0648856 0.0648856 0.0648855 0.0648855 0.0648855 0.0648855 0.0648854 0.0648854 0.0648854 0.0648854 0.0648853 0.0648853 + 0.0648853 0.0648853 0.0648852 0.0648852 0.0648852 0.0648852 0.0648851 0.0648851 0.0648851 0.0648851 0.064885 0.064885 + 0.064885 0.064885 0.0648849 0.0648849 0.0648849 0.0648849 + </DataArray> + <DataArray type="Float32" Name="nusseltNumber_liq" NumberOfComponents="1" format="ascii"> + 2.33126 2.33785 2.33126 2.33785 2.33903 2.33903 2.33946 2.33946 2.33978 2.33978 2.3401 2.3401 + 2.34043 2.34043 2.34076 2.34076 2.34111 2.34111 2.34146 2.34146 2.34183 2.34183 2.3422 2.3422 + 2.34259 2.34259 2.34298 2.34298 2.34335 2.34335 2.3437 2.3437 2.34406 2.34406 2.34443 2.34443 + 2.34481 2.34481 2.3452 2.3452 2.3456 2.3456 2.346 2.346 2.34641 2.34641 2.34684 2.34684 + 2.34727 2.34727 2.3477 2.3477 2.34815 2.34815 2.3486 2.3486 2.34906 2.34906 2.34953 2.34953 + 2.34999 2.34999 2.3504 2.3504 2.35082 2.35082 2.35124 2.35124 2.35167 2.35167 2.3521 2.3521 + 2.35254 2.35254 2.35298 2.35298 2.35342 2.35342 2.35387 2.35387 2.35432 2.35432 2.35477 2.35477 + 2.35522 2.35522 2.35567 2.35567 2.35613 2.35613 2.35657 2.35657 2.35696 2.35696 2.35735 2.35735 + 2.35774 2.35774 2.35813 2.35813 2.35852 2.35852 2.3589 2.3589 2.35929 2.35929 2.35967 2.35967 + 2.36004 2.36004 2.36041 2.36041 2.36078 2.36078 2.36114 2.36114 2.3615 2.3615 2.36185 2.36185 + 2.3622 2.3622 2.36254 2.36254 2.36286 2.36286 2.36315 2.36315 2.36342 2.36342 2.36369 2.36369 + 2.36396 2.36396 2.36421 2.36421 2.36446 2.36446 2.3647 2.3647 2.36494 2.36494 2.36516 2.36516 + 2.36538 2.36538 2.36559 2.36559 2.3658 2.3658 2.36599 2.36599 2.36618 2.36618 2.36636 2.36636 + 2.36653 2.36653 2.3667 2.3667 2.36686 2.36686 2.367 2.367 2.36715 2.36715 2.36728 2.36728 + 2.36741 2.36741 2.36753 2.36753 2.36765 2.36765 2.36775 2.36775 2.36785 2.36785 2.36795 2.36795 + 2.36804 2.36804 2.36812 2.36812 2.3682 2.3682 2.36827 2.36827 2.36834 2.36834 2.3684 2.3684 + 2.36846 2.36846 2.36851 2.36851 2.36856 2.36856 2.36861 2.36861 2.36865 2.36865 2.36869 2.36869 + 2.36872 2.36872 2.36875 2.36875 2.36878 2.36878 2.36881 2.36881 2.36883 2.36883 2.36885 2.36885 + 2.36887 2.36887 2.36889 2.36889 2.36891 2.36891 2.36892 2.36892 2.36893 2.36893 2.36894 2.36894 + 2.36895 2.36895 2.36896 2.36896 2.36897 2.36897 2.36897 2.36897 2.36898 2.36898 2.36898 2.36898 + 2.36899 2.36899 2.36899 2.36899 2.36899 2.36899 2.369 2.369 2.369 2.369 2.369 2.369 + 2.369 2.369 2.369 2.369 2.369 2.369 2.36901 2.36901 2.36901 2.36901 2.36901 2.36901 + 2.36901 2.36901 2.36901 2.36901 2.36901 2.36901 2.36901 2.36901 2.36901 2.36901 2.36901 2.36901 + 2.36901 2.36901 2.36901 2.36901 2.36901 2.36901 2.36901 2.36901 2.36901 2.36901 2.36901 2.36901 + 2.36901 2.36901 2.36901 2.36901 2.36901 2.36901 2.36901 2.36901 2.36901 2.36901 2.36901 2.36901 + 2.36901 2.36901 2.36901 2.36901 2.36901 2.36901 2.36901 2.36901 2.36901 2.36901 2.36901 2.36901 + 2.36901 2.36901 2.36901 2.36901 2.36901 2.36901 2.36901 2.36901 2.36901 2.36901 2.36901 2.36901 + 2.36901 2.36901 2.36901 2.36901 2.36901 2.36901 2.36901 2.36901 2.36901 2.36901 2.36901 2.36901 + 2.36901 2.36901 2.36901 2.36901 2.36901 2.36901 2.36901 2.36901 2.36901 2.36901 2.36901 2.36901 + 2.36901 2.36901 2.36901 2.36901 2.36901 2.36901 2.36901 2.36901 2.36901 2.36901 2.369 2.369 + 2.369 2.369 2.369 2.369 2.369 2.369 2.369 2.369 2.369 2.369 2.369 2.369 + 2.369 2.369 2.369 2.369 2.369 2.369 2.369 2.369 2.369 2.369 2.369 2.369 + 2.369 2.369 2.369 2.369 2.369 2.369 2.369 2.369 2.369 2.369 2.369 2.369 + 2.369 2.369 2.369 2.369 2.369 2.369 + </DataArray> + <DataArray type="Float32" Name="prandtlNumber_liq" NumberOfComponents="1" format="ascii"> + 8.89203 8.05538 8.89203 8.05538 7.91563 7.91563 7.86539 7.86539 7.82774 7.82774 7.79125 7.79125 + 7.7542 7.7542 7.71637 7.71637 7.6777 7.6777 7.63822 7.63822 7.59792 7.59792 7.55682 7.55682 + 7.51493 7.51493 7.47227 7.47227 7.43275 7.43275 7.39416 7.39416 7.35495 7.35495 7.31513 7.31513 + 7.27471 7.27471 7.23373 7.23373 7.1922 7.1922 7.15015 7.15015 7.10761 7.10761 7.06461 7.06461 + 7.02116 7.02116 6.97732 6.97732 6.9331 6.9331 6.88854 6.88854 6.84367 6.84367 6.79853 6.79853 + 6.75457 6.75457 6.71448 6.71448 6.67425 6.67425 6.63391 6.63391 6.59349 6.59349 6.55303 6.55303 + 6.51257 6.51257 6.47213 6.47213 6.43176 6.43176 6.3915 6.3915 6.35138 6.35138 6.31143 6.31143 + 6.27169 6.27169 6.23221 6.23221 6.19301 6.19301 6.15551 6.15551 6.12142 6.12142 6.08768 6.08768 + 6.05431 6.05431 6.02134 6.02134 5.98879 5.98879 5.95671 5.95671 5.92511 5.92511 5.89402 5.89402 + 5.86346 5.86346 5.83346 5.83346 5.80404 5.80404 5.77522 5.77522 5.74701 5.74701 5.71945 5.71945 + 5.69254 5.69254 5.66629 5.66629 5.64136 5.64136 5.61924 5.61924 5.59775 5.59775 5.57689 5.57689 + 5.55667 5.55667 5.53709 5.53709 5.51817 5.51817 5.49989 5.49989 5.48226 5.48226 5.46528 5.46528 + 5.44895 5.44895 5.43327 5.43327 5.41823 5.41823 5.40382 5.40382 5.39004 5.39004 5.37687 5.37687 + 5.36432 5.36432 5.35236 5.35236 5.341 5.341 5.33021 5.33021 5.31998 5.31998 5.3103 5.3103 + 5.30115 5.30115 5.29252 5.29252 5.28439 5.28439 5.27675 5.27675 5.26957 5.26957 5.26285 5.26285 + 5.25657 5.25657 5.2507 5.2507 5.24523 5.24523 5.24014 5.24014 5.23541 5.23541 5.23103 5.23103 + 5.22698 5.22698 5.22324 5.22324 5.2198 5.2198 5.21663 5.21663 5.21372 5.21372 5.21106 5.21106 + 5.20863 5.20863 5.20641 5.20641 5.2044 5.2044 5.20257 5.20257 5.20091 5.20091 5.19942 5.19942 + 5.19807 5.19807 5.19686 5.19686 5.19577 5.19577 5.1948 5.1948 5.19393 5.19393 5.19316 5.19316 + 5.19248 5.19248 5.19192 5.19192 5.19144 5.19144 5.19102 5.19102 5.19065 5.19065 5.19033 5.19033 + 5.19005 5.19005 5.18981 5.18981 5.1896 5.1896 5.18941 5.18941 5.18926 5.18926 5.18912 5.18912 + 5.18901 5.18901 5.18891 5.18891 5.18883 5.18883 5.18876 5.18876 5.1887 5.1887 5.18865 5.18865 + 5.18861 5.18861 5.18858 5.18858 5.18855 5.18855 5.18853 5.18853 5.18852 5.18852 5.1885 5.1885 + 5.18849 5.18849 5.18848 5.18848 5.18848 5.18848 5.18847 5.18847 5.18847 5.18847 5.18847 5.18847 + 5.18847 5.18847 5.18847 5.18847 5.18847 5.18847 5.18847 5.18847 5.18847 5.18847 5.18847 5.18847 + 5.18848 5.18848 5.18848 5.18848 5.18848 5.18848 5.18848 5.18848 5.18849 5.18849 5.18849 5.18849 + 5.18849 5.18849 5.1885 5.1885 5.1885 5.1885 5.1885 5.1885 5.18851 5.18851 5.18851 5.18851 + 5.18851 5.18851 5.18851 5.18851 5.18852 5.18852 5.18852 5.18852 5.18852 5.18852 5.18853 5.18853 + 5.18853 5.18853 5.18853 5.18853 5.18854 5.18854 5.18854 5.18854 5.18854 5.18854 5.18855 5.18855 + 5.18855 5.18855 5.18855 5.18855 5.18855 5.18855 5.18856 5.18856 5.18856 5.18856 5.18856 5.18856 + 5.18857 5.18857 5.18857 5.18857 5.18857 5.18857 5.18858 5.18858 5.18858 5.18858 5.18858 5.18858 + 5.18859 5.18859 5.18859 5.18859 5.18859 5.18859 5.18859 5.18859 5.1886 5.1886 5.1886 5.1886 + 5.1886 5.1886 5.18861 5.18861 5.18861 5.18861 5.18861 5.18861 5.18862 5.18862 5.18862 5.18862 + 5.18862 5.18862 5.18863 5.18863 5.18863 5.18863 + </DataArray> + <DataArray type="Float32" Name="velocity_liq (m/s)" NumberOfComponents="3" format="ascii"> + -9.98222e-05 2.9306e-20 0 -9.98265e-05 1.28017e-19 0 -9.98222e-05 2.9306e-20 0 -9.98265e-05 1.28017e-19 0 + -9.98319e-05 0 0 -9.98319e-05 0 0 -9.98336e-05 -1.47114e-19 0 -9.98336e-05 -1.47114e-19 0 + -9.98348e-05 -1.96993e-19 0 -9.98348e-05 -1.96993e-19 0 -9.98359e-05 -4.9454e-19 0 -9.98359e-05 -4.9454e-19 0 + -9.9837e-05 -4.80095e-19 0 -9.9837e-05 -4.80095e-19 0 -9.98382e-05 -5.3208e-19 0 -9.98382e-05 -5.3208e-19 0 + -9.98393e-05 -3.34047e-19 0 -9.98393e-05 -3.34047e-19 0 -9.98405e-05 0 0 -9.98405e-05 0 0 + -9.98417e-05 1.68592e-20 0 -9.98417e-05 1.68592e-20 0 -9.9843e-05 -1.01647e-19 0 -9.9843e-05 -1.01647e-19 0 + -9.98443e-05 -3.40516e-20 0 -9.98443e-05 -3.40516e-20 0 -9.98458e-05 3.42258e-20 0 -9.98458e-05 3.42258e-20 0 + -9.98476e-05 -8.597e-20 0 -9.98476e-05 -8.597e-20 0 -9.98494e-05 -3.10928e-19 0 -9.98494e-05 -3.10928e-19 0 + -9.98511e-05 -8.67784e-20 0 -9.98511e-05 -8.67784e-20 0 -9.98528e-05 -4.70874e-19 0 -9.98528e-05 -4.70874e-19 0 + -9.98546e-05 -9.63934e-19 0 -9.98546e-05 -9.63934e-19 0 -9.98564e-05 -5.28437e-19 0 -9.98564e-05 -5.28437e-19 0 + -9.98582e-05 -5.31157e-20 0 -9.98582e-05 -5.31157e-20 0 -9.98601e-05 3.55963e-20 0 -9.98601e-05 3.55963e-20 0 + -9.98619e-05 -1.25253e-19 0 -9.98619e-05 -1.25253e-19 0 -9.98638e-05 -5.39717e-20 0 -9.98638e-05 -5.39717e-20 0 + -9.98657e-05 -8.32143e-19 0 -9.98657e-05 -8.32143e-19 0 -9.98677e-05 -2.43769e-18 0 -9.98677e-05 -2.43769e-18 0 + -9.98696e-05 -2.45161e-18 0 -9.98696e-05 -2.45161e-18 0 -9.98716e-05 -2.11618e-18 0 -9.98716e-05 -2.11618e-18 0 + -9.98736e-05 1.48078e-19 0 -9.98736e-05 1.48078e-19 0 -9.98757e-05 1.37787e-18 0 -9.98757e-05 1.37787e-18 0 + -9.98782e-05 9.36425e-20 0 -9.98782e-05 9.36425e-20 0 -9.98808e-05 2.44765e-19 0 -9.98808e-05 2.44765e-19 0 + -9.98832e-05 -3.40725e-19 0 -9.98832e-05 -3.40725e-19 0 -9.98856e-05 -8.94495e-19 0 -9.98856e-05 -8.94495e-19 0 + -9.9888e-05 3.06174e-19 0 -9.9888e-05 3.06174e-19 0 -9.98905e-05 6.34965e-19 0 -9.98905e-05 6.34965e-19 0 + -9.98929e-05 -5.80446e-20 0 -9.98929e-05 -5.80446e-20 0 -9.98953e-05 9.339e-19 0 -9.98953e-05 9.339e-19 0 + -9.98978e-05 8.02185e-19 0 -9.98978e-05 8.02185e-19 0 -9.99002e-05 2.69559e-18 0 -9.99002e-05 2.69559e-18 0 + -9.99026e-05 5.26338e-18 0 -9.99026e-05 5.26338e-18 0 -9.9905e-05 4.27837e-18 0 -9.9905e-05 4.27837e-18 0 + -9.99075e-05 4.30268e-18 0 -9.99075e-05 4.30268e-18 0 -9.99099e-05 3.48184e-18 0 -9.99099e-05 3.48184e-18 0 + -9.99124e-05 2.20623e-18 0 -9.99124e-05 2.20623e-18 0 -9.99152e-05 -1.13967e-18 0 -9.99152e-05 -1.13967e-18 0 + -9.9918e-05 -3.49735e-18 0 -9.9918e-05 -3.49735e-18 0 -9.99206e-05 -5.75498e-19 0 -9.99206e-05 -5.75498e-19 0 + -9.99233e-05 8.05534e-19 0 -9.99233e-05 8.05534e-19 0 -9.99259e-05 1.24535e-18 0 -9.99259e-05 1.24535e-18 0 + -9.99285e-05 -8.34266e-20 0 -9.99285e-05 -8.34266e-20 0 -9.9931e-05 -2.45199e-18 0 -9.9931e-05 -2.45199e-18 0 + -9.99335e-05 -2.40052e-18 0 -9.99335e-05 -2.40052e-18 0 -9.9936e-05 -1.29056e-18 0 -9.9936e-05 -1.29056e-18 0 + -9.99384e-05 8.71477e-19 0 -9.99384e-05 8.71477e-19 0 -9.99408e-05 3.48063e-18 0 -9.99408e-05 3.48063e-18 0 + -9.99431e-05 2.55263e-18 0 -9.99431e-05 2.55263e-18 0 -9.99454e-05 4.41709e-18 0 -9.99454e-05 4.41709e-18 0 + -9.99477e-05 2.0776e-18 0 -9.99477e-05 2.0776e-18 0 -9.99499e-05 3.32552e-18 0 -9.99499e-05 3.32552e-18 0 + -9.9952e-05 7.42145e-18 0 -9.9952e-05 7.42145e-18 0 -9.99542e-05 1.22745e-17 0 -9.99542e-05 1.22745e-17 0 + -9.99565e-05 1.08929e-17 0 -9.99565e-05 1.08929e-17 0 -9.99588e-05 1.50607e-17 0 -9.99588e-05 1.50607e-17 0 + -9.9961e-05 1.83033e-17 0 -9.9961e-05 1.83033e-17 0 -9.99631e-05 1.63414e-17 0 -9.99631e-05 1.63414e-17 0 + -9.99651e-05 1.35841e-17 0 -9.99651e-05 1.35841e-17 0 -9.99671e-05 1.15461e-17 0 -9.99671e-05 1.15461e-17 0 + -9.9969e-05 1.32874e-17 0 -9.9969e-05 1.32874e-17 0 -9.99708e-05 1.46776e-17 0 -9.99708e-05 1.46776e-17 0 + -9.99726e-05 7.85664e-18 0 -9.99726e-05 7.85664e-18 0 -9.99743e-05 8.08227e-18 0 -9.99743e-05 8.08227e-18 0 + -9.9976e-05 4.78975e-18 0 -9.9976e-05 4.78975e-18 0 -9.99775e-05 9.78638e-19 0 -9.99775e-05 9.78638e-19 0 + -9.99791e-05 3.58207e-18 0 -9.99791e-05 3.58207e-18 0 -9.99805e-05 2.72157e-18 0 -9.99805e-05 2.72157e-18 0 + -9.99819e-05 1.97136e-18 0 -9.99819e-05 1.97136e-18 0 -9.99832e-05 -2.41219e-18 0 -9.99832e-05 -2.41219e-18 0 + -9.99845e-05 4.6043e-20 0 -9.99845e-05 4.6043e-20 0 -9.99857e-05 -2.07609e-18 0 -9.99857e-05 -2.07609e-18 0 + -9.99868e-05 -7.39578e-19 0 -9.99868e-05 -7.39578e-19 0 -9.99879e-05 -8.33539e-19 0 -9.99879e-05 -8.33539e-19 0 + -9.99889e-05 -3.47908e-19 0 -9.99889e-05 -3.47908e-19 0 -9.99899e-05 -1.83532e-18 0 -9.99899e-05 -1.83532e-18 0 + -9.99908e-05 -3.46692e-18 0 -9.99908e-05 -3.46692e-18 0 -9.99917e-05 -2.95936e-18 0 -9.99917e-05 -2.95936e-18 0 + -9.99925e-05 -8.8437e-18 0 -9.99925e-05 -8.8437e-18 0 -9.99933e-05 -9.18233e-18 0 -9.99933e-05 -9.18233e-18 0 + -9.9994e-05 -1.15563e-17 0 -9.9994e-05 -1.15563e-17 0 -9.99947e-05 -9.60229e-18 0 -9.99947e-05 -9.60229e-18 0 + -9.99953e-05 -5.95514e-18 0 -9.99953e-05 -5.95514e-18 0 -9.99959e-05 -2.67547e-18 0 -9.99959e-05 -2.67547e-18 0 + -9.99964e-05 -2.44307e-18 0 -9.99964e-05 -2.44307e-18 0 -9.99969e-05 -3.73834e-18 0 -9.99969e-05 -3.73834e-18 0 + -9.99974e-05 -1.08241e-18 0 -9.99974e-05 -1.08241e-18 0 -9.99978e-05 -4.5213e-18 0 -9.99978e-05 -4.5213e-18 0 + -9.99982e-05 -4.19455e-18 0 -9.99982e-05 -4.19455e-18 0 -9.99986e-05 -2.31085e-18 0 -9.99986e-05 -2.31085e-18 0 + -9.99989e-05 -2.83129e-18 0 -9.99989e-05 -2.83129e-18 0 -9.99992e-05 -1.60527e-18 0 -9.99992e-05 -1.60527e-18 0 + -9.99995e-05 2.62169e-18 0 -9.99995e-05 2.62169e-18 0 -9.99998e-05 2.10304e-18 0 -9.99998e-05 2.10304e-18 0 + -0.0001 3.35683e-18 0 -0.0001 3.35683e-18 0 -0.0001 6.85812e-19 0 -0.0001 6.85812e-19 0 + -0.0001 -1.60867e-18 0 -0.0001 -1.60867e-18 0 -0.000100001 1.27788e-18 0 -0.000100001 1.27788e-18 0 + -0.000100001 6.43857e-18 0 -0.000100001 6.43857e-18 0 -0.000100001 7.71881e-18 0 -0.000100001 7.71881e-18 0 + -0.000100001 7.29432e-18 0 -0.000100001 7.29432e-18 0 -0.000100001 1.05648e-17 0 -0.000100001 1.05648e-17 0 + -0.000100001 6.98923e-18 0 -0.000100001 6.98923e-18 0 -0.000100001 3.38857e-18 0 -0.000100001 3.38857e-18 0 + -0.000100001 4.88217e-18 0 -0.000100001 4.88217e-18 0 -0.000100001 4.93023e-18 0 -0.000100001 4.93023e-18 0 + -0.000100002 2.46541e-18 0 -0.000100002 2.46541e-18 0 -0.000100002 1.56473e-18 0 -0.000100002 1.56473e-18 0 + -0.000100002 -8.29851e-19 0 -0.000100002 -8.29851e-19 0 -0.000100002 -7.11353e-19 0 -0.000100002 -7.11353e-19 0 + -0.000100002 1.44651e-18 0 -0.000100002 1.44651e-18 0 -0.000100002 2.15803e-18 0 -0.000100002 2.15803e-18 0 + -0.000100002 2.27671e-18 0 -0.000100002 2.27671e-18 0 -0.000100002 1.82619e-18 0 -0.000100002 1.82619e-18 0 + -0.000100002 -2.98841e-18 0 -0.000100002 -2.98841e-18 0 -0.000100002 -2.94107e-18 0 -0.000100002 -2.94107e-18 0 + -0.000100002 5.45535e-19 0 -0.000100002 5.45535e-19 0 -0.000100002 3.32073e-19 0 -0.000100002 3.32073e-19 0 + -0.000100002 6.64158e-19 0 -0.000100002 6.64158e-19 0 -0.000100002 1.42322e-18 0 -0.000100002 1.42322e-18 0 + -0.000100002 -2.56183e-18 0 -0.000100002 -2.56183e-18 0 -0.000100002 1.28093e-18 0 -0.000100002 1.28093e-18 0 + -0.000100002 4.88656e-18 0 -0.000100002 4.88656e-18 0 -0.000100002 -9.96297e-19 0 -0.000100002 -9.96297e-19 0 + -0.000100002 -4.36476e-18 0 -0.000100002 -4.36476e-18 0 -0.000100002 -6.66578e-18 0 -0.000100002 -6.66578e-18 0 + -0.000100002 -1.19558e-17 0 -0.000100002 -1.19558e-17 0 -0.000100002 -1.39247e-17 0 -0.000100002 -1.39247e-17 0 + -0.000100002 -1.72221e-17 0 -0.000100002 -1.72221e-17 0 -0.000100002 -2.1587e-17 0 -0.000100002 -2.1587e-17 0 + -0.000100002 -1.80762e-17 0 -0.000100002 -1.80762e-17 0 -0.000100002 -7.51988e-18 0 -0.000100002 -7.51988e-18 0 + -0.000100002 -5.19512e-18 0 -0.000100002 -5.19512e-18 0 -0.000100002 -1.09359e-17 0 -0.000100002 -1.09359e-17 0 + -0.000100002 -1.24541e-17 0 -0.000100002 -1.24541e-17 0 -0.000100002 -1.29997e-17 0 -0.000100002 -1.29997e-17 0 + -0.000100002 -1.04851e-17 0 -0.000100002 -1.04851e-17 0 -0.000100002 -1.75543e-17 0 -0.000100002 -1.75543e-17 0 + -0.000100002 -1.89302e-17 0 -0.000100002 -1.89302e-17 0 -0.000100002 -1.74594e-17 0 -0.000100002 -1.74594e-17 0 + -0.000100002 -1.84557e-17 0 -0.000100002 -1.84557e-17 0 -0.000100002 -2.24884e-17 0 -0.000100002 -2.24884e-17 0 + -0.000100002 -1.52769e-17 0 -0.000100002 -1.52769e-17 0 -0.000100002 -1.10544e-17 0 -0.000100002 -1.10544e-17 0 + -0.000100002 -1.09121e-17 0 -0.000100002 -1.09121e-17 0 -0.000100002 -1.25726e-17 0 -0.000100002 -1.25726e-17 0 + -0.000100002 -1.44229e-17 0 -0.000100002 -1.44229e-17 0 -0.000100002 -1.54667e-17 0 -0.000100002 -1.54667e-17 0 + -0.000100002 -1.19084e-17 0 -0.000100002 -1.19084e-17 0 -0.000100002 -4.36482e-18 0 -0.000100002 -4.36482e-18 0 + -0.000100001 -7.40121e-18 0 -0.000100001 -7.40121e-18 0 -0.000100001 -1.42331e-17 0 -0.000100001 -1.42331e-17 0 + -0.000100001 -1.19083e-17 0 -0.000100001 -1.19083e-17 0 -0.000100001 -9.29894e-18 0 -0.000100001 -9.29894e-18 0 + -0.000100001 -3.60571e-18 0 -0.000100001 -3.60571e-18 0 -0.000100001 -6.92675e-18 0 -0.000100001 -6.92675e-18 0 + -0.000100001 -1.58936e-17 0 -0.000100001 -1.58936e-17 0 -0.000100001 -1.97839e-17 0 -0.000100001 -1.97839e-17 0 + -0.000100001 -2.41012e-17 0 -0.000100001 -2.41012e-17 0 -0.000100001 -2.08276e-17 0 -0.000100001 -2.08276e-17 0 + -0.000100001 -1.62256e-17 0 -0.000100001 -1.62256e-17 0 -0.000100001 -1.37585e-17 0 -0.000100001 -1.37585e-17 0 + -0.000100001 -7.59091e-18 0 -0.000100001 -7.59091e-18 0 -0.000100001 3.79545e-19 0 -0.000100001 3.79545e-19 0 + -0.000100001 3.51079e-18 0 -0.000100001 3.51079e-18 0 -0.000100001 3.84289e-18 0 -0.000100001 3.84289e-18 0 + -0.000100001 4.83919e-18 0 -0.000100001 4.83919e-18 0 -0.000100001 5.74061e-18 0 -0.000100001 5.74061e-18 0 + -0.000100001 8.44485e-18 0 -0.000100001 8.44485e-18 0 -0.000100001 6.87923e-18 0 -0.000100001 6.87923e-18 0 + -0.000100001 3.70055e-18 0 -0.000100001 3.70055e-18 0 -0.000100001 4.22242e-18 0 -0.000100001 4.22242e-18 0 + -0.000100001 7.21131e-18 0 -0.000100001 7.21131e-18 0 -0.000100001 4.50707e-18 0 -0.000100001 4.50707e-18 0 + -0.000100001 2.75168e-18 0 -0.000100001 2.75168e-18 0 -0.000100001 7.82805e-18 0 -0.000100001 7.82805e-18 0 + -0.000100001 7.4485e-18 0 -0.000100001 7.4485e-18 0 -0.000100001 6.02522e-18 0 -0.000100001 6.02522e-18 0 + -0.000100001 6.16754e-18 0 -0.000100001 6.16754e-18 0 -0.000100001 1.18606e-17 0 -0.000100001 1.18606e-17 0 + -0.000100001 8.72943e-18 0 -0.000100001 8.72943e-18 0 -0.000100001 -2.65678e-18 0 -0.000100001 -2.65678e-18 0 + -0.000100001 -6.02519e-18 0 -0.000100001 -6.02519e-18 0 -0.000100001 -2.41956e-18 0 -0.000100001 -2.41956e-18 0 + -0.000100001 5.69309e-19 0 -0.000100001 5.69309e-19 0 -0.000100001 -4.45958e-18 0 -0.000100001 -4.45958e-18 0 + -0.000100001 -1.3189e-17 0 -0.000100001 -1.3189e-17 0 -0.000100001 -3.22607e-17 0 -0.000100001 -3.22607e-17 0 + -0.000100001 -3.14542e-17 0 -0.000100001 -3.14542e-17 0 -0.000100001 -4.63036e-17 0 -0.000100001 -4.63036e-17 0 + -0.000100001 -5.27082e-17 0 -0.000100001 -5.27082e-17 0 -0.000100001 -6.25287e-17 0 -0.000100001 -6.25287e-17 0 + -0.000100001 -6.39519e-17 0 -0.000100001 -6.39519e-17 0 + </DataArray> + </PointData> + <CellData Scalars="process rank"> + <DataArray type="Float32" Name="process rank" NumberOfComponents="1" format="ascii"> + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + </DataArray> + </CellData> + <Points> + <DataArray type="Float32" Name="Coordinates" NumberOfComponents="3" format="ascii"> + 0 0 0 0.025 0 0 0 1 0 0.025 1 0 + 0.05 0 0 0.05 1 0 0.075 0 0 0.075 1 0 + 0.1 0 0 0.1 1 0 0.125 0 0 0.125 1 0 + 0.15 0 0 0.15 1 0 0.175 0 0 0.175 1 0 + 0.2 0 0 0.2 1 0 0.225 0 0 0.225 1 0 + 0.25 0 0 0.25 1 0 0.275 0 0 0.275 1 0 + 0.3 0 0 0.3 1 0 0.325 0 0 0.325 1 0 + 0.35 0 0 0.35 1 0 0.375 0 0 0.375 1 0 + 0.4 0 0 0.4 1 0 0.425 0 0 0.425 1 0 + 0.45 0 0 0.45 1 0 0.475 0 0 0.475 1 0 + 0.5 0 0 0.5 1 0 0.525 0 0 0.525 1 0 + 0.55 0 0 0.55 1 0 0.575 0 0 0.575 1 0 + 0.6 0 0 0.6 1 0 0.625 0 0 0.625 1 0 + 0.65 0 0 0.65 1 0 0.675 0 0 0.675 1 0 + 0.7 0 0 0.7 1 0 0.725 0 0 0.725 1 0 + 0.75 0 0 0.75 1 0 0.775 0 0 0.775 1 0 + 0.8 0 0 0.8 1 0 0.825 0 0 0.825 1 0 + 0.85 0 0 0.85 1 0 0.875 0 0 0.875 1 0 + 0.9 0 0 0.9 1 0 0.925 0 0 0.925 1 0 + 0.95 0 0 0.95 1 0 0.975 0 0 0.975 1 0 + 1 0 0 1 1 0 1.025 0 0 1.025 1 0 + 1.05 0 0 1.05 1 0 1.075 0 0 1.075 1 0 + 1.1 0 0 1.1 1 0 1.125 0 0 1.125 1 0 + 1.15 0 0 1.15 1 0 1.175 0 0 1.175 1 0 + 1.2 0 0 1.2 1 0 1.225 0 0 1.225 1 0 + 1.25 0 0 1.25 1 0 1.275 0 0 1.275 1 0 + 1.3 0 0 1.3 1 0 1.325 0 0 1.325 1 0 + 1.35 0 0 1.35 1 0 1.375 0 0 1.375 1 0 + 1.4 0 0 1.4 1 0 1.425 0 0 1.425 1 0 + 1.45 0 0 1.45 1 0 1.475 0 0 1.475 1 0 + 1.5 0 0 1.5 1 0 1.525 0 0 1.525 1 0 + 1.55 0 0 1.55 1 0 1.575 0 0 1.575 1 0 + 1.6 0 0 1.6 1 0 1.625 0 0 1.625 1 0 + 1.65 0 0 1.65 1 0 1.675 0 0 1.675 1 0 + 1.7 0 0 1.7 1 0 1.725 0 0 1.725 1 0 + 1.75 0 0 1.75 1 0 1.775 0 0 1.775 1 0 + 1.8 0 0 1.8 1 0 1.825 0 0 1.825 1 0 + 1.85 0 0 1.85 1 0 1.875 0 0 1.875 1 0 + 1.9 0 0 1.9 1 0 1.925 0 0 1.925 1 0 + 1.95 0 0 1.95 1 0 1.975 0 0 1.975 1 0 + 2 0 0 2 1 0 2.025 0 0 2.025 1 0 + 2.05 0 0 2.05 1 0 2.075 0 0 2.075 1 0 + 2.1 0 0 2.1 1 0 2.125 0 0 2.125 1 0 + 2.15 0 0 2.15 1 0 2.175 0 0 2.175 1 0 + 2.2 0 0 2.2 1 0 2.225 0 0 2.225 1 0 + 2.25 0 0 2.25 1 0 2.275 0 0 2.275 1 0 + 2.3 0 0 2.3 1 0 2.325 0 0 2.325 1 0 + 2.35 0 0 2.35 1 0 2.375 0 0 2.375 1 0 + 2.4 0 0 2.4 1 0 2.425 0 0 2.425 1 0 + 2.45 0 0 2.45 1 0 2.475 0 0 2.475 1 0 + 2.5 0 0 2.5 1 0 2.525 0 0 2.525 1 0 + 2.55 0 0 2.55 1 0 2.575 0 0 2.575 1 0 + 2.6 0 0 2.6 1 0 2.625 0 0 2.625 1 0 + 2.65 0 0 2.65 1 0 2.675 0 0 2.675 1 0 + 2.7 0 0 2.7 1 0 2.725 0 0 2.725 1 0 + 2.75 0 0 2.75 1 0 2.775 0 0 2.775 1 0 + 2.8 0 0 2.8 1 0 2.825 0 0 2.825 1 0 + 2.85 0 0 2.85 1 0 2.875 0 0 2.875 1 0 + 2.9 0 0 2.9 1 0 2.925 0 0 2.925 1 0 + 2.95 0 0 2.95 1 0 2.975 0 0 2.975 1 0 + 3 0 0 3 1 0 3.025 0 0 3.025 1 0 + 3.05 0 0 3.05 1 0 3.075 0 0 3.075 1 0 + 3.1 0 0 3.1 1 0 3.125 0 0 3.125 1 0 + 3.15 0 0 3.15 1 0 3.175 0 0 3.175 1 0 + 3.2 0 0 3.2 1 0 3.225 0 0 3.225 1 0 + 3.25 0 0 3.25 1 0 3.275 0 0 3.275 1 0 + 3.3 0 0 3.3 1 0 3.325 0 0 3.325 1 0 + 3.35 0 0 3.35 1 0 3.375 0 0 3.375 1 0 + 3.4 0 0 3.4 1 0 3.425 0 0 3.425 1 0 + 3.45 0 0 3.45 1 0 3.475 0 0 3.475 1 0 + 3.5 0 0 3.5 1 0 3.525 0 0 3.525 1 0 + 3.55 0 0 3.55 1 0 3.575 0 0 3.575 1 0 + 3.6 0 0 3.6 1 0 3.625 0 0 3.625 1 0 + 3.65 0 0 3.65 1 0 3.675 0 0 3.675 1 0 + 3.7 0 0 3.7 1 0 3.725 0 0 3.725 1 0 + 3.75 0 0 3.75 1 0 3.775 0 0 3.775 1 0 + 3.8 0 0 3.8 1 0 3.825 0 0 3.825 1 0 + 3.85 0 0 3.85 1 0 3.875 0 0 3.875 1 0 + 3.9 0 0 3.9 1 0 3.925 0 0 3.925 1 0 + 3.95 0 0 3.95 1 0 3.975 0 0 3.975 1 0 + 4 0 0 4 1 0 4.025 0 0 4.025 1 0 + 4.05 0 0 4.05 1 0 4.075 0 0 4.075 1 0 + 4.1 0 0 4.1 1 0 4.125 0 0 4.125 1 0 + 4.15 0 0 4.15 1 0 4.175 0 0 4.175 1 0 + 4.2 0 0 4.2 1 0 4.225 0 0 4.225 1 0 + 4.25 0 0 4.25 1 0 4.275 0 0 4.275 1 0 + 4.3 0 0 4.3 1 0 4.325 0 0 4.325 1 0 + 4.35 0 0 4.35 1 0 4.375 0 0 4.375 1 0 + 4.4 0 0 4.4 1 0 4.425 0 0 4.425 1 0 + 4.45 0 0 4.45 1 0 4.475 0 0 4.475 1 0 + 4.5 0 0 4.5 1 0 4.525 0 0 4.525 1 0 + 4.55 0 0 4.55 1 0 4.575 0 0 4.575 1 0 + 4.6 0 0 4.6 1 0 4.625 0 0 4.625 1 0 + 4.65 0 0 4.65 1 0 4.675 0 0 4.675 1 0 + 4.7 0 0 4.7 1 0 4.725 0 0 4.725 1 0 + 4.75 0 0 4.75 1 0 4.775 0 0 4.775 1 0 + 4.8 0 0 4.8 1 0 4.825 0 0 4.825 1 0 + 4.85 0 0 4.85 1 0 4.875 0 0 4.875 1 0 + 4.9 0 0 4.9 1 0 4.925 0 0 4.925 1 0 + 4.95 0 0 4.95 1 0 4.975 0 0 4.975 1 0 + 5 0 0 5 1 0 + </DataArray> + </Points> + <Cells> + <DataArray type="Int32" Name="connectivity" NumberOfComponents="1" format="ascii"> + 0 1 3 2 1 4 5 3 4 6 7 5 + 6 8 9 7 8 10 11 9 10 12 13 11 + 12 14 15 13 14 16 17 15 16 18 19 17 + 18 20 21 19 20 22 23 21 22 24 25 23 + 24 26 27 25 26 28 29 27 28 30 31 29 + 30 32 33 31 32 34 35 33 34 36 37 35 + 36 38 39 37 38 40 41 39 40 42 43 41 + 42 44 45 43 44 46 47 45 46 48 49 47 + 48 50 51 49 50 52 53 51 52 54 55 53 + 54 56 57 55 56 58 59 57 58 60 61 59 + 60 62 63 61 62 64 65 63 64 66 67 65 + 66 68 69 67 68 70 71 69 70 72 73 71 + 72 74 75 73 74 76 77 75 76 78 79 77 + 78 80 81 79 80 82 83 81 82 84 85 83 + 84 86 87 85 86 88 89 87 88 90 91 89 + 90 92 93 91 92 94 95 93 94 96 97 95 + 96 98 99 97 98 100 101 99 100 102 103 101 + 102 104 105 103 104 106 107 105 106 108 109 107 + 108 110 111 109 110 112 113 111 112 114 115 113 + 114 116 117 115 116 118 119 117 118 120 121 119 + 120 122 123 121 122 124 125 123 124 126 127 125 + 126 128 129 127 128 130 131 129 130 132 133 131 + 132 134 135 133 134 136 137 135 136 138 139 137 + 138 140 141 139 140 142 143 141 142 144 145 143 + 144 146 147 145 146 148 149 147 148 150 151 149 + 150 152 153 151 152 154 155 153 154 156 157 155 + 156 158 159 157 158 160 161 159 160 162 163 161 + 162 164 165 163 164 166 167 165 166 168 169 167 + 168 170 171 169 170 172 173 171 172 174 175 173 + 174 176 177 175 176 178 179 177 178 180 181 179 + 180 182 183 181 182 184 185 183 184 186 187 185 + 186 188 189 187 188 190 191 189 190 192 193 191 + 192 194 195 193 194 196 197 195 196 198 199 197 + 198 200 201 199 200 202 203 201 202 204 205 203 + 204 206 207 205 206 208 209 207 208 210 211 209 + 210 212 213 211 212 214 215 213 214 216 217 215 + 216 218 219 217 218 220 221 219 220 222 223 221 + 222 224 225 223 224 226 227 225 226 228 229 227 + 228 230 231 229 230 232 233 231 232 234 235 233 + 234 236 237 235 236 238 239 237 238 240 241 239 + 240 242 243 241 242 244 245 243 244 246 247 245 + 246 248 249 247 248 250 251 249 250 252 253 251 + 252 254 255 253 254 256 257 255 256 258 259 257 + 258 260 261 259 260 262 263 261 262 264 265 263 + 264 266 267 265 266 268 269 267 268 270 271 269 + 270 272 273 271 272 274 275 273 274 276 277 275 + 276 278 279 277 278 280 281 279 280 282 283 281 + 282 284 285 283 284 286 287 285 286 288 289 287 + 288 290 291 289 290 292 293 291 292 294 295 293 + 294 296 297 295 296 298 299 297 298 300 301 299 + 300 302 303 301 302 304 305 303 304 306 307 305 + 306 308 309 307 308 310 311 309 310 312 313 311 + 312 314 315 313 314 316 317 315 316 318 319 317 + 318 320 321 319 320 322 323 321 322 324 325 323 + 324 326 327 325 326 328 329 327 328 330 331 329 + 330 332 333 331 332 334 335 333 334 336 337 335 + 336 338 339 337 338 340 341 339 340 342 343 341 + 342 344 345 343 344 346 347 345 346 348 349 347 + 348 350 351 349 350 352 353 351 352 354 355 353 + 354 356 357 355 356 358 359 357 358 360 361 359 + 360 362 363 361 362 364 365 363 364 366 367 365 + 366 368 369 367 368 370 371 369 370 372 373 371 + 372 374 375 373 374 376 377 375 376 378 379 377 + 378 380 381 379 380 382 383 381 382 384 385 383 + 384 386 387 385 386 388 389 387 388 390 391 389 + 390 392 393 391 392 394 395 393 394 396 397 395 + 396 398 399 397 398 400 401 399 + </DataArray> + <DataArray type="Int32" Name="offsets" NumberOfComponents="1" format="ascii"> + 4 8 12 16 20 24 28 32 36 40 44 48 + 52 56 60 64 68 72 76 80 84 88 92 96 + 100 104 108 112 116 120 124 128 132 136 140 144 + 148 152 156 160 164 168 172 176 180 184 188 192 + 196 200 204 208 212 216 220 224 228 232 236 240 + 244 248 252 256 260 264 268 272 276 280 284 288 + 292 296 300 304 308 312 316 320 324 328 332 336 + 340 344 348 352 356 360 364 368 372 376 380 384 + 388 392 396 400 404 408 412 416 420 424 428 432 + 436 440 444 448 452 456 460 464 468 472 476 480 + 484 488 492 496 500 504 508 512 516 520 524 528 + 532 536 540 544 548 552 556 560 564 568 572 576 + 580 584 588 592 596 600 604 608 612 616 620 624 + 628 632 636 640 644 648 652 656 660 664 668 672 + 676 680 684 688 692 696 700 704 708 712 716 720 + 724 728 732 736 740 744 748 752 756 760 764 768 + 772 776 780 784 788 792 796 800 + </DataArray> + <DataArray type="UInt8" Name="types" NumberOfComponents="1" format="ascii"> + 9 9 9 9 9 9 9 9 9 9 9 9 + 9 9 9 9 9 9 9 9 9 9 9 9 + 9 9 9 9 9 9 9 9 9 9 9 9 + 9 9 9 9 9 9 9 9 9 9 9 9 + 9 9 9 9 9 9 9 9 9 9 9 9 + 9 9 9 9 9 9 9 9 9 9 9 9 + 9 9 9 9 9 9 9 9 9 9 9 9 + 9 9 9 9 9 9 9 9 9 9 9 9 + 9 9 9 9 9 9 9 9 9 9 9 9 + 9 9 9 9 9 9 9 9 9 9 9 9 + 9 9 9 9 9 9 9 9 9 9 9 9 + 9 9 9 9 9 9 9 9 9 9 9 9 + 9 9 9 9 9 9 9 9 9 9 9 9 + 9 9 9 9 9 9 9 9 9 9 9 9 + 9 9 9 9 9 9 9 9 9 9 9 9 + 9 9 9 9 9 9 9 9 9 9 9 9 + 9 9 9 9 9 9 9 9 + </DataArray> + </Cells> + </Piece> + </UnstructuredGrid> +</VTKFile> diff --git a/test/references/test_1p2c_nonequilibrium_tpfa-reference.vtu b/test/references/test_1p2c_nonequilibrium_tpfa-reference.vtu new file mode 100644 index 0000000000000000000000000000000000000000..3f6138551c2c06a26e5ed17d969c86a73b8272d8 --- /dev/null +++ b/test/references/test_1p2c_nonequilibrium_tpfa-reference.vtu @@ -0,0 +1,541 @@ +<?xml version="1.0"?> +<VTKFile type="UnstructuredGrid" version="0.1" byte_order="LittleEndian"> + <UnstructuredGrid> + <Piece NumberOfCells="200" NumberOfPoints="402"> + <CellData Scalars="p" Vectors="velocity_liq (m/s)"> + <DataArray type="Float32" Name="p" NumberOfComponents="1" format="ascii"> + 100144 100424 100702 100979 101255 101530 101803 102076 102347 102617 102885 103153 + 103418 103683 103946 104209 104470 104729 104988 105245 105501 105755 106008 106260 + 106510 106759 107007 107253 107497 107740 107982 108223 108462 108700 108937 109172 + 109406 109639 109871 110101 110330 110558 110784 111009 111233 111456 111678 111898 + 112118 112336 112553 112770 112985 113199 113413 113625 113837 114047 114257 114466 + 114673 114880 115087 115292 115497 115701 115905 116108 116310 116512 116713 116913 + 117113 117313 117512 117711 117909 118106 118304 118501 118697 118894 119090 119285 + 119480 119675 119870 120065 120259 120453 120647 120841 121034 121228 121421 121614 + 121807 122000 122192 122385 122577 122770 122962 123154 123347 123539 123731 123923 + 124115 124307 124499 124691 124882 125074 125266 125458 125650 125842 126033 126225 + 126417 126609 126800 126992 127184 127375 127567 127759 127951 128142 128334 128526 + 128717 128909 129101 129293 129484 129676 129868 130059 130251 130443 130634 130826 + 131018 131210 131401 131593 131785 131976 132168 132360 132552 132743 132935 133127 + 133318 133510 133702 133893 134085 134277 134469 134660 134852 135044 135235 135427 + 135619 135810 136002 136194 136386 136577 136769 136961 137152 137344 137536 137728 + 137919 138111 138303 138494 138686 138878 139069 139261 139453 139645 139836 140028 + 140220 140411 140603 140795 140987 141178 141370 141562 + </DataArray> + <DataArray type="Float32" Name="rho" NumberOfComponents="1" format="ascii"> + 999.15 998.997 998.954 998.927 998.902 998.876 998.85 998.823 998.796 998.768 998.74 998.71 + 998.681 998.648 998.61 998.571 998.531 998.491 998.449 998.408 998.365 998.323 998.279 998.235 + 998.191 998.146 998.101 998.055 998.009 997.963 997.91 997.854 997.799 997.743 997.687 997.631 + 997.574 997.518 997.462 997.406 997.35 997.294 997.239 997.184 997.129 997.069 997.007 996.946 + 996.885 996.826 996.766 996.708 996.651 996.594 996.539 996.484 996.43 996.378 996.326 996.276 + 996.227 996.179 996.129 996.078 996.029 995.981 995.934 995.889 995.846 995.804 995.763 995.724 + 995.687 995.651 995.616 995.583 995.551 995.521 995.492 995.465 995.439 995.414 995.39 995.368 + 995.347 995.327 995.309 995.291 995.275 995.259 995.245 995.232 995.219 995.208 995.197 995.187 + 995.178 995.169 995.161 995.154 995.148 995.141 995.136 995.131 995.127 995.122 995.119 995.115 + 995.112 995.11 995.107 995.105 995.103 995.102 995.1 995.099 995.098 995.096 995.096 995.095 + 995.094 995.093 995.093 995.093 995.092 995.092 995.092 995.091 995.091 995.091 995.091 995.091 + 995.091 995.091 995.091 995.091 995.091 995.091 995.091 995.091 995.091 995.091 995.092 995.092 + 995.092 995.092 995.092 995.092 995.092 995.092 995.092 995.092 995.093 995.093 995.093 995.093 + 995.093 995.093 995.093 995.093 995.093 995.093 995.094 995.094 995.094 995.094 995.094 995.094 + 995.094 995.094 995.094 995.094 995.094 995.095 995.095 995.095 995.095 995.095 995.095 995.095 + 995.095 995.095 995.095 995.096 995.096 995.096 995.096 995.096 995.096 995.096 995.096 995.096 + 995.096 995.097 995.097 995.097 995.097 995.097 995.097 995.097 + </DataArray> + <DataArray type="Float32" Name="mu" NumberOfComponents="1" format="ascii"> + 0.00115023 0.00112276 0.001115 0.00111008 0.00110549 0.00110086 0.00109613 0.00109128 0.00108633 0.00108127 0.0010761 0.00107083 + 0.00106545 0.00106015 0.00105532 0.00105039 0.00104539 0.0010403 0.00103514 0.00102989 0.00102457 0.00101919 0.00101373 0.00100821 + 0.00100263 0.000996991 0.0009913 0.00098556 0.000979776 0.000973951 0.000968661 0.000963522 0.00095836 0.00095318 0.000947985 0.000942781 + 0.000937571 0.00093236 0.000927154 0.000921956 0.000916772 0.000911607 0.000906465 0.00090135 0.000896269 0.000891706 0.000887315 0.000882965 + 0.00087866 0.000874403 0.000870199 0.000866051 0.000861963 0.000857938 0.00085398 0.000850092 0.000846277 0.000842537 0.000838876 0.000835296 + 0.000831799 0.000828388 0.000825319 0.000822462 0.000819685 0.000816989 0.000814374 0.000811842 0.000809394 0.000807029 0.000804747 0.00080255 + 0.000800436 0.000798406 0.000796458 0.000794592 0.000792808 0.000791103 0.000789478 0.00078793 0.000786459 0.000785062 0.000783738 0.000782485 + 0.000781301 0.000780185 0.000779134 0.000778146 0.000777218 0.00077635 0.000775538 0.00077478 0.000774074 0.000773417 0.000772807 0.000772242 + 0.00077172 0.000771239 0.000770795 0.000770387 0.000770013 0.000769671 0.000769359 0.000769074 0.000768816 0.000768581 0.000768369 0.000768177 + 0.000768004 0.000767849 0.000767711 0.000767586 0.000767476 0.000767377 0.000767291 0.000767223 0.000767163 0.00076711 0.000767063 0.000767023 + 0.000766987 0.000766957 0.00076693 0.000766908 0.000766888 0.000766871 0.000766857 0.000766845 0.000766835 0.000766827 0.00076682 0.000766814 + 0.000766809 0.000766805 0.000766802 0.0007668 0.000766798 0.000766796 0.000766795 0.000766794 0.000766794 0.000766793 0.000766793 0.000766793 + 0.000766793 0.000766794 0.000766794 0.000766794 0.000766795 0.000766795 0.000766796 0.000766796 0.000766797 0.000766797 0.000766798 0.000766799 + 0.000766799 0.0007668 0.0007668 0.000766801 0.000766802 0.000766802 0.000766803 0.000766803 0.000766804 0.000766805 0.000766805 0.000766806 + 0.000766806 0.000766807 0.000766808 0.000766808 0.000766809 0.000766809 0.00076681 0.000766811 0.000766811 0.000766812 0.000766812 0.000766813 + 0.000766814 0.000766814 0.000766815 0.000766816 0.000766816 0.000766817 0.000766817 0.000766818 0.000766819 0.000766819 0.00076682 0.00076682 + 0.000766821 0.000766822 0.000766822 0.000766823 0.000766823 0.000766824 0.000766825 0.000766825 + </DataArray> + <DataArray type="Float32" Name="delp" NumberOfComponents="1" format="ascii"> + 143.507 423.707 701.977 979.025 1254.93 1529.68 1803.26 2075.63 2346.76 2616.64 2885.23 3152.51 + 3418.44 3683.06 3946.48 4208.67 4469.62 4729.31 4987.71 5244.8 5500.58 5755.01 6008.09 6259.79 + 6510.1 6759.01 7006.51 7252.58 7497.2 7740.38 7982.24 8222.83 8462.14 8700.15 8936.88 9172.31 + 9406.45 9639.29 9870.84 10101.1 10330.1 10557.7 10784.1 11009.3 11233.1 11455.9 11677.5 11898.1 + 12117.6 12336 12553.4 12769.8 12985.1 13199.5 13412.8 13625.2 13836.7 14047.2 14256.8 14465.5 + 14673.4 14880.4 15086.6 15292.1 15497 15701.1 15904.7 16107.6 16309.8 16511.5 16712.7 16913.3 + 17113.3 17312.9 17511.9 17710.6 17908.7 18106.5 18303.8 18500.8 18697.3 18893.6 19089.5 19285.1 + 19480.4 19675.4 19870.2 20064.7 20259 20453.1 20647 20840.7 21034.2 21227.5 21420.7 21613.8 + 21806.7 21999.5 22192.2 22384.8 22577.3 22769.7 22962.1 23154.3 23346.5 23538.7 23730.8 23922.8 + 24114.8 24306.8 24498.7 24690.6 24882.5 25074.3 25266.2 25458 25649.8 25841.5 26033.3 26225.1 + 26416.8 26608.6 26800.3 26992 27183.8 27375.5 27567.2 27758.9 27950.6 28142.3 28334 28525.7 + 28717.5 28909.2 29100.9 29292.6 29484.3 29676 29867.7 30059.4 30251.1 30442.8 30634.5 30826.2 + 31017.9 31209.6 31401.3 31593 31784.7 31976.4 32168.1 32359.8 32551.5 32743.2 32934.9 33126.6 + 33318.3 33510 33701.7 33893.4 34085.1 34276.8 34468.5 34660.2 34851.9 35043.6 35235.3 35427 + 35618.7 35810.5 36002.2 36193.9 36385.6 36577.3 36769 36960.7 37152.4 37344.1 37535.8 37727.5 + 37919.2 38110.9 38302.6 38494.3 38686 38877.7 39069.4 39261.2 39452.9 39644.6 39836.3 40028 + 40219.7 40411.4 40603.1 40794.8 40986.5 41178.2 41369.9 41561.6 + </DataArray> + <DataArray type="Float32" Name="x^H2O_liq" NumberOfComponents="1" format="ascii"> + 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 + 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 + 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 + 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 + 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 + 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 + 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 + 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 + 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 + 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 + 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 + 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 + 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 + 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 + 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 + 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 + 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 0.99999 + </DataArray> + <DataArray type="Float32" Name="x^N2_liq" NumberOfComponents="1" format="ascii"> + 9.98991e-06 9.9898e-06 9.98971e-06 9.98961e-06 9.98951e-06 9.98941e-06 9.98931e-06 9.98921e-06 9.98911e-06 9.98902e-06 9.98892e-06 9.98882e-06 + 9.98872e-06 9.98862e-06 9.98852e-06 9.98842e-06 9.98832e-06 9.98822e-06 9.98813e-06 9.98803e-06 9.98793e-06 9.98783e-06 9.98773e-06 9.98763e-06 + 9.98753e-06 9.98743e-06 9.98733e-06 9.98723e-06 9.98713e-06 9.98703e-06 9.98693e-06 9.98683e-06 9.98673e-06 9.98663e-06 9.98653e-06 9.98643e-06 + 9.98633e-06 9.98623e-06 9.98613e-06 9.98603e-06 9.98593e-06 9.98583e-06 9.98573e-06 9.98563e-06 9.98553e-06 9.98543e-06 9.98533e-06 9.98523e-06 + 9.98513e-06 9.98503e-06 9.98493e-06 9.98483e-06 9.98473e-06 9.98463e-06 9.98454e-06 9.98444e-06 9.98434e-06 9.98424e-06 9.98414e-06 9.98404e-06 + 9.98394e-06 9.98384e-06 9.98374e-06 9.98364e-06 9.98354e-06 9.98344e-06 9.98334e-06 9.98324e-06 9.98314e-06 9.98304e-06 9.98294e-06 9.98284e-06 + 9.98274e-06 9.98264e-06 9.98254e-06 9.98244e-06 9.98234e-06 9.98224e-06 9.98214e-06 9.98204e-06 9.98194e-06 9.98184e-06 9.98174e-06 9.98164e-06 + 9.98154e-06 9.98144e-06 9.98134e-06 9.98124e-06 9.98114e-06 9.98104e-06 9.98094e-06 9.98084e-06 9.98075e-06 9.98065e-06 9.98055e-06 9.98045e-06 + 9.98035e-06 9.98025e-06 9.98015e-06 9.98005e-06 9.97995e-06 9.97985e-06 9.97975e-06 9.97965e-06 9.97955e-06 9.97945e-06 9.97935e-06 9.97925e-06 + 9.97915e-06 9.97905e-06 9.97895e-06 9.97885e-06 9.97875e-06 9.97865e-06 9.97855e-06 9.97846e-06 9.97836e-06 9.97826e-06 9.97816e-06 9.97806e-06 + 9.97796e-06 9.97786e-06 9.97776e-06 9.97766e-06 9.97756e-06 9.97746e-06 9.97736e-06 9.97726e-06 9.97716e-06 9.97706e-06 9.97696e-06 9.97686e-06 + 9.97676e-06 9.97666e-06 9.97656e-06 9.97646e-06 9.97637e-06 9.97627e-06 9.97617e-06 9.97607e-06 9.97597e-06 9.97587e-06 9.97577e-06 9.97567e-06 + 9.97557e-06 9.97547e-06 9.97537e-06 9.97527e-06 9.97517e-06 9.97507e-06 9.97497e-06 9.97487e-06 9.97477e-06 9.97467e-06 9.97457e-06 9.97447e-06 + 9.97438e-06 9.97428e-06 9.97418e-06 9.97408e-06 9.97398e-06 9.97388e-06 9.97378e-06 9.97368e-06 9.97358e-06 9.97348e-06 9.97338e-06 9.97328e-06 + 9.97318e-06 9.97308e-06 9.97298e-06 9.97288e-06 9.97278e-06 9.97268e-06 9.97259e-06 9.97249e-06 9.97239e-06 9.97229e-06 9.97219e-06 9.97209e-06 + 9.97199e-06 9.97189e-06 9.97179e-06 9.97169e-06 9.97159e-06 9.97149e-06 9.97139e-06 9.97129e-06 9.97119e-06 9.97109e-06 9.971e-06 9.9709e-06 + 9.9708e-06 9.9707e-06 9.9706e-06 9.9705e-06 9.9704e-06 9.9703e-06 9.9702e-06 9.9701e-06 + </DataArray> + <DataArray type="Float32" Name="X^H2O_liq" NumberOfComponents="1" format="ascii"> + 0.999984 0.999984 0.999984 0.999984 0.999984 0.999984 0.999984 0.999984 0.999984 0.999984 0.999984 0.999984 + 0.999984 0.999984 0.999984 0.999984 0.999984 0.999984 0.999984 0.999984 0.999984 0.999984 0.999984 0.999984 + 0.999984 0.999984 0.999984 0.999984 0.999984 0.999984 0.999984 0.999984 0.999984 0.999984 0.999984 0.999984 + 0.999984 0.999984 0.999984 0.999984 0.999984 0.999984 0.999984 0.999984 0.999984 0.999984 0.999985 0.999985 + 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 + 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 + 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 + 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 + 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 + 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 + 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 + 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 + 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 + 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 + 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 + 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 + 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 0.999985 + </DataArray> + <DataArray type="Float32" Name="X^N2_liq" NumberOfComponents="1" format="ascii"> + 1.55341e-05 1.55339e-05 1.55338e-05 1.55336e-05 1.55335e-05 1.55333e-05 1.55332e-05 1.5533e-05 1.55329e-05 1.55327e-05 1.55326e-05 1.55324e-05 + 1.55323e-05 1.55321e-05 1.5532e-05 1.55318e-05 1.55316e-05 1.55315e-05 1.55313e-05 1.55312e-05 1.5531e-05 1.55309e-05 1.55307e-05 1.55306e-05 + 1.55304e-05 1.55303e-05 1.55301e-05 1.55299e-05 1.55298e-05 1.55296e-05 1.55295e-05 1.55293e-05 1.55292e-05 1.5529e-05 1.55289e-05 1.55287e-05 + 1.55285e-05 1.55284e-05 1.55282e-05 1.55281e-05 1.55279e-05 1.55278e-05 1.55276e-05 1.55275e-05 1.55273e-05 1.55272e-05 1.5527e-05 1.55268e-05 + 1.55267e-05 1.55265e-05 1.55264e-05 1.55262e-05 1.55261e-05 1.55259e-05 1.55258e-05 1.55256e-05 1.55254e-05 1.55253e-05 1.55251e-05 1.5525e-05 + 1.55248e-05 1.55247e-05 1.55245e-05 1.55244e-05 1.55242e-05 1.5524e-05 1.55239e-05 1.55237e-05 1.55236e-05 1.55234e-05 1.55233e-05 1.55231e-05 + 1.5523e-05 1.55228e-05 1.55226e-05 1.55225e-05 1.55223e-05 1.55222e-05 1.5522e-05 1.55219e-05 1.55217e-05 1.55216e-05 1.55214e-05 1.55213e-05 + 1.55211e-05 1.55209e-05 1.55208e-05 1.55206e-05 1.55205e-05 1.55203e-05 1.55202e-05 1.552e-05 1.55199e-05 1.55197e-05 1.55196e-05 1.55194e-05 + 1.55192e-05 1.55191e-05 1.55189e-05 1.55188e-05 1.55186e-05 1.55185e-05 1.55183e-05 1.55182e-05 1.5518e-05 1.55178e-05 1.55177e-05 1.55175e-05 + 1.55174e-05 1.55172e-05 1.55171e-05 1.55169e-05 1.55168e-05 1.55166e-05 1.55165e-05 1.55163e-05 1.55161e-05 1.5516e-05 1.55158e-05 1.55157e-05 + 1.55155e-05 1.55154e-05 1.55152e-05 1.55151e-05 1.55149e-05 1.55147e-05 1.55146e-05 1.55144e-05 1.55143e-05 1.55141e-05 1.5514e-05 1.55138e-05 + 1.55137e-05 1.55135e-05 1.55134e-05 1.55132e-05 1.5513e-05 1.55129e-05 1.55127e-05 1.55126e-05 1.55124e-05 1.55123e-05 1.55121e-05 1.5512e-05 + 1.55118e-05 1.55117e-05 1.55115e-05 1.55113e-05 1.55112e-05 1.5511e-05 1.55109e-05 1.55107e-05 1.55106e-05 1.55104e-05 1.55103e-05 1.55101e-05 + 1.551e-05 1.55098e-05 1.55096e-05 1.55095e-05 1.55093e-05 1.55092e-05 1.5509e-05 1.55089e-05 1.55087e-05 1.55086e-05 1.55084e-05 1.55083e-05 + 1.55081e-05 1.55079e-05 1.55078e-05 1.55076e-05 1.55075e-05 1.55073e-05 1.55072e-05 1.5507e-05 1.55069e-05 1.55067e-05 1.55066e-05 1.55064e-05 + 1.55062e-05 1.55061e-05 1.55059e-05 1.55058e-05 1.55056e-05 1.55055e-05 1.55053e-05 1.55052e-05 1.5505e-05 1.55049e-05 1.55047e-05 1.55045e-05 + 1.55044e-05 1.55042e-05 1.55041e-05 1.55039e-05 1.55038e-05 1.55036e-05 1.55035e-05 1.55033e-05 + </DataArray> + <DataArray type="Float32" Name="T_liq" NumberOfComponents="1" format="ascii"> + 287.763 288.71 288.977 289.147 289.305 289.464 289.627 289.794 289.965 290.139 290.317 290.499 + 290.685 290.873 291.066 291.262 291.461 291.664 291.87 292.079 292.29 292.505 292.722 292.942 + 293.164 293.389 293.615 293.844 294.074 294.306 294.54 294.775 295.01 295.247 295.484 295.722 + 295.96 296.198 296.436 296.674 296.91 297.146 297.381 297.615 297.847 298.078 298.306 298.533 + 298.757 298.978 299.197 299.413 299.626 299.835 300.042 300.244 300.443 300.637 300.828 301.014 + 301.196 301.374 301.547 301.715 301.879 302.038 302.192 302.342 302.486 302.625 302.76 302.89 + 303.014 303.134 303.249 303.359 303.464 303.565 303.66 303.752 303.838 303.921 303.999 304.073 + 304.143 304.208 304.27 304.329 304.383 304.435 304.482 304.527 304.569 304.607 304.643 304.677 + 304.707 304.736 304.762 304.786 304.808 304.828 304.847 304.864 304.879 304.893 304.905 304.916 + 304.927 304.936 304.944 304.951 304.958 304.964 304.969 304.973 304.977 304.981 304.984 304.987 + 304.989 304.991 304.993 304.994 304.996 304.997 304.998 304.998 304.999 305 305 305 + 305.001 305.001 305.001 305.001 305.002 305.002 305.002 305.002 305.002 305.002 305.002 305.002 + 305.002 305.002 305.002 305.002 305.002 305.002 305.002 305.002 305.002 305.002 305.001 305.001 + 305.001 305.001 305.001 305.001 305.001 305.001 305.001 305.001 305.001 305.001 305.001 305.001 + 305.001 305.001 305.001 305.001 305.001 305.001 305.001 305.001 305.001 305.001 305.001 305 + 305 305 305 305 305 305 305 305 305 305 305 305 + 305 305 305 305 305 305 305 305 + </DataArray> + <DataArray type="Float32" Name="T_s" NumberOfComponents="1" format="ascii"> + 287.761 288.709 288.977 289.146 289.304 289.464 289.627 289.794 289.965 290.139 290.317 290.499 + 290.684 290.873 291.066 291.262 291.461 291.664 291.87 292.078 292.29 292.505 292.722 292.942 + 293.164 293.389 293.615 293.844 294.074 294.306 294.54 294.774 295.01 295.247 295.484 295.722 + 295.96 296.198 296.436 296.673 296.91 297.146 297.381 297.615 297.847 298.077 298.306 298.532 + 298.757 298.978 299.197 299.413 299.626 299.835 300.041 300.244 300.442 300.637 300.828 301.014 + 301.196 301.374 301.547 301.715 301.879 302.038 302.192 302.342 302.486 302.625 302.76 302.889 + 303.014 303.134 303.249 303.359 303.464 303.564 303.66 303.752 303.838 303.921 303.999 304.073 + 304.142 304.208 304.27 304.329 304.383 304.434 304.482 304.527 304.569 304.607 304.643 304.677 + 304.707 304.736 304.762 304.786 304.808 304.828 304.847 304.863 304.879 304.893 304.905 304.916 + 304.927 304.936 304.944 304.951 304.958 304.964 304.969 304.973 304.977 304.981 304.984 304.987 + 304.989 304.991 304.993 304.994 304.996 304.997 304.998 304.998 304.999 305 305 305 + 305.001 305.001 305.001 305.001 305.002 305.002 305.002 305.002 305.002 305.002 305.002 305.002 + 305.002 305.002 305.002 305.002 305.002 305.002 305.002 305.002 305.002 305.002 305.001 305.001 + 305.001 305.001 305.001 305.001 305.001 305.001 305.001 305.001 305.001 305.001 305.001 305.001 + 305.001 305.001 305.001 305.001 305.001 305.001 305.001 305.001 305.001 305.001 305.001 305 + 305 305 305 305 305 305 305 305 305 305 305 305 + 305 305 305 305 305 305 305 305 + </DataArray> + <DataArray type="Float32" Name="reynoldsNumber_liq" NumberOfComponents="1" format="ascii"> + 0.0433537 0.0444115 0.0447198 0.0449172 0.0451029 0.045292 0.0454869 0.0456881 0.0458956 0.0461097 0.0463304 0.0465578 + 0.0467921 0.0470254 0.04724 0.0474604 0.0476867 0.0479188 0.0481569 0.048401 0.048651 0.048907 0.049169 0.049437 + 0.0497109 0.0499908 0.0502765 0.050568 0.0508652 0.0511682 0.0514463 0.0517193 0.0519963 0.0522774 0.0525622 0.0528507 + 0.0531427 0.053438 0.0537364 0.0540376 0.0543414 0.0546476 0.0549559 0.055266 0.0555777 0.0558604 0.0561351 0.0564098 + 0.0566844 0.0569584 0.0572317 0.0575039 0.0577747 0.0580438 0.058311 0.0585759 0.0588382 0.0590975 0.0593537 0.0596064 + 0.0598553 0.0601003 0.0603221 0.0605301 0.0607335 0.0609324 0.0611264 0.0613155 0.0614994 0.0616782 0.0618516 0.0620195 + 0.062182 0.0623388 0.06249 0.0626356 0.0627754 0.0629096 0.063038 0.0631609 0.0632781 0.0633898 0.063496 0.0635968 + 0.0636924 0.0637828 0.0638682 0.0639486 0.0640243 0.0640954 0.0641619 0.0642242 0.0642824 0.0643365 0.0643869 0.0644336 + 0.0644768 0.0645168 0.0645536 0.0645875 0.0646186 0.0646471 0.0646731 0.0646969 0.0647185 0.0647381 0.0647558 0.0647718 + 0.0647863 0.0647992 0.0648109 0.0648213 0.0648305 0.0648388 0.064846 0.0648517 0.0648568 0.0648612 0.0648651 0.0648685 + 0.0648714 0.064874 0.0648762 0.0648781 0.0648797 0.0648811 0.0648823 0.0648833 0.0648842 0.0648849 0.0648855 0.064886 + 0.0648864 0.0648867 0.0648869 0.0648871 0.0648873 0.0648874 0.0648875 0.0648876 0.0648876 0.0648876 0.0648877 0.0648877 + 0.0648876 0.0648876 0.0648876 0.0648875 0.0648875 0.0648875 0.0648874 0.0648874 0.0648873 0.0648873 0.0648872 0.0648872 + 0.0648871 0.0648871 0.064887 0.064887 0.0648869 0.0648869 0.0648868 0.0648868 0.0648867 0.0648867 0.0648866 0.0648866 + 0.0648865 0.0648865 0.0648864 0.0648863 0.0648863 0.0648862 0.0648862 0.0648861 0.0648861 0.064886 0.064886 0.0648859 + 0.0648859 0.0648858 0.0648858 0.0648857 0.0648857 0.0648856 0.0648855 0.0648855 0.0648854 0.0648854 0.0648853 0.0648853 + 0.0648852 0.0648852 0.0648851 0.0648851 0.064885 0.064885 0.0648849 0.0648849 + </DataArray> + <DataArray type="Float32" Name="nusseltNumber_liq" NumberOfComponents="1" format="ascii"> + 2.33695 2.33877 2.3393 2.33964 2.33995 2.34027 2.3406 2.34094 2.34129 2.34165 2.34202 2.3424 + 2.34279 2.34318 2.34353 2.34388 2.34425 2.34463 2.34501 2.3454 2.3458 2.34621 2.34663 2.34705 + 2.34748 2.34792 2.34837 2.34883 2.34929 2.34976 2.35019 2.35061 2.35103 2.35145 2.35188 2.35231 + 2.35275 2.35319 2.35363 2.35408 2.35453 2.35498 2.35543 2.35589 2.35634 2.35675 2.35714 2.35753 + 2.35792 2.35831 2.3587 2.35908 2.35946 2.35984 2.36021 2.36058 2.36094 2.3613 2.36166 2.36201 + 2.36235 2.36268 2.36299 2.36327 2.36354 2.36381 2.36407 2.36432 2.36456 2.3648 2.36503 2.36526 + 2.36547 2.36568 2.36588 2.36607 2.36626 2.36643 2.3666 2.36676 2.36692 2.36706 2.3672 2.36733 + 2.36746 2.36758 2.36769 2.36779 2.36789 2.36798 2.36807 2.36815 2.36823 2.3683 2.36836 2.36842 + 2.36848 2.36853 2.36858 2.36862 2.36866 2.3687 2.36873 2.36876 2.36879 2.36882 2.36884 2.36886 + 2.36888 2.3689 2.36891 2.36892 2.36894 2.36895 2.36896 2.36896 2.36897 2.36898 2.36898 2.36898 + 2.36899 2.36899 2.36899 2.369 2.369 2.369 2.369 2.369 2.369 2.36901 2.36901 2.36901 + 2.36901 2.36901 2.36901 2.36901 2.36901 2.36901 2.36901 2.36901 2.36901 2.36901 2.36901 2.36901 + 2.36901 2.36901 2.36901 2.36901 2.36901 2.36901 2.36901 2.36901 2.36901 2.36901 2.36901 2.36901 + 2.36901 2.36901 2.36901 2.36901 2.36901 2.36901 2.36901 2.36901 2.36901 2.36901 2.36901 2.36901 + 2.36901 2.36901 2.36901 2.36901 2.36901 2.36901 2.36901 2.36901 2.36901 2.36901 2.369 2.369 + 2.369 2.369 2.369 2.369 2.369 2.369 2.369 2.369 2.369 2.369 2.369 2.369 + 2.369 2.369 2.369 2.369 2.369 2.369 2.369 2.369 + </DataArray> + <DataArray type="Float32" Name="prandtlNumber_liq" NumberOfComponents="1" format="ascii"> + 8.16314 7.94433 7.88273 7.84377 7.80746 7.77083 7.73344 7.69522 7.65618 7.61633 7.57568 7.53423 + 7.49201 7.45037 7.41216 7.37332 7.33385 7.2938 7.25316 7.21197 7.17025 7.12803 7.08533 7.04218 + 6.99861 6.95466 6.91035 6.86572 6.82081 6.77564 6.73441 6.69433 6.65413 6.61382 6.57346 6.53308 + 6.49271 6.45238 6.41215 6.37203 6.33207 6.2923 6.25276 6.21349 6.17452 6.13936 6.1055 6.072 + 6.03888 6.00617 5.97391 5.94211 5.9108 5.88002 5.84977 5.82009 5.791 5.76251 5.73465 5.70743 + 5.68087 5.65498 5.63161 5.60981 5.58863 5.56809 5.54819 5.52893 5.51032 5.49236 5.47504 5.45837 + 5.44234 5.42696 5.41221 5.39809 5.38459 5.3717 5.35942 5.34773 5.33661 5.32607 5.31608 5.30663 + 5.29771 5.28929 5.28137 5.27393 5.26695 5.26041 5.25429 5.24859 5.24327 5.23833 5.23375 5.2295 + 5.22557 5.22195 5.21862 5.21555 5.21274 5.21017 5.20782 5.20568 5.20374 5.20197 5.20038 5.19894 + 5.19764 5.19648 5.19543 5.1945 5.19367 5.19293 5.19228 5.19176 5.1913 5.1909 5.19055 5.19024 + 5.18997 5.18974 5.18954 5.18937 5.18922 5.18909 5.18898 5.18889 5.18881 5.18874 5.18869 5.18864 + 5.18861 5.18858 5.18855 5.18853 5.18851 5.1885 5.18849 5.18848 5.18848 5.18848 5.18847 5.18847 + 5.18847 5.18847 5.18847 5.18847 5.18848 5.18848 5.18848 5.18848 5.18849 5.18849 5.18849 5.18849 + 5.1885 5.1885 5.1885 5.18851 5.18851 5.18851 5.18852 5.18852 5.18852 5.18852 5.18853 5.18853 + 5.18853 5.18854 5.18854 5.18854 5.18855 5.18855 5.18855 5.18856 5.18856 5.18856 5.18856 5.18857 + 5.18857 5.18857 5.18858 5.18858 5.18858 5.18859 5.18859 5.18859 5.1886 5.1886 5.1886 5.18861 + 5.18861 5.18861 5.18861 5.18862 5.18862 5.18862 5.18863 5.18863 + </DataArray> + <DataArray type="Float32" Name="velocity_liq (m/s)" NumberOfComponents="3" format="ascii"> + -9.98183e-05 0 0 -9.9827e-05 0 0 -9.98291e-05 0 0 -9.98303e-05 0 0 + -9.98314e-05 0 0 -9.98325e-05 0 0 -9.98337e-05 0 0 -9.98348e-05 0 0 + -9.9836e-05 0 0 -9.98372e-05 0 0 -9.98385e-05 0 0 -9.98397e-05 0 0 + -9.98411e-05 0 0 -9.98429e-05 0 0 -9.98449e-05 0 0 -9.98469e-05 0 0 + -9.98489e-05 0 0 -9.98508e-05 0 0 -9.98527e-05 0 0 -9.98545e-05 0 0 + -9.98564e-05 0 0 -9.98582e-05 0 0 -9.98601e-05 0 0 -9.9862e-05 0 0 + -9.98639e-05 0 0 -9.98659e-05 0 0 -9.98678e-05 0 0 -9.98698e-05 0 0 + -9.98718e-05 0 0 -9.98741e-05 0 0 -9.98769e-05 0 0 -9.98796e-05 0 0 + -9.98823e-05 0 0 -9.9885e-05 0 0 -9.98875e-05 0 0 -9.989e-05 0 0 + -9.98924e-05 0 0 -9.98949e-05 0 0 -9.98973e-05 0 0 -9.98997e-05 0 0 + -9.99021e-05 0 0 -9.99046e-05 0 0 -9.9907e-05 0 0 -9.99093e-05 0 0 + -9.9912e-05 0 0 -9.9915e-05 0 0 -9.9918e-05 0 0 -9.99209e-05 0 0 + -9.99237e-05 0 0 -9.99264e-05 0 0 -9.9929e-05 0 0 -9.99315e-05 0 0 + -9.9934e-05 0 0 -9.99364e-05 0 0 -9.99388e-05 0 0 -9.99412e-05 0 0 + -9.99435e-05 0 0 -9.99458e-05 0 0 -9.9948e-05 0 0 -9.99502e-05 0 0 + -9.99523e-05 0 0 -9.99545e-05 0 0 -9.9957e-05 0 0 -9.99594e-05 0 0 + -9.99617e-05 0 0 -9.99639e-05 0 0 -9.99659e-05 0 0 -9.99679e-05 0 0 + -9.99698e-05 0 0 -9.99716e-05 0 0 -9.99733e-05 0 0 -9.9975e-05 0 0 + -9.99766e-05 0 0 -9.99782e-05 0 0 -9.99797e-05 0 0 -9.99811e-05 0 0 + -9.99824e-05 0 0 -9.99837e-05 0 0 -9.9985e-05 0 0 -9.99861e-05 0 0 + -9.99873e-05 0 0 -9.99883e-05 0 0 -9.99893e-05 0 0 -9.99903e-05 0 0 + -9.99912e-05 0 0 -9.9992e-05 0 0 -9.99928e-05 0 0 -9.99936e-05 0 0 + -9.99942e-05 0 0 -9.99949e-05 0 0 -9.99955e-05 0 0 -9.99961e-05 0 0 + -9.99966e-05 0 0 -9.99971e-05 0 0 -9.99976e-05 0 0 -9.9998e-05 0 0 + -9.99984e-05 0 0 -9.99987e-05 0 0 -9.9999e-05 0 0 -9.99993e-05 0 0 + -9.99996e-05 0 0 -9.99999e-05 0 0 -0.0001 0 0 -0.0001 0 0 + -0.0001 0 0 -0.000100001 0 0 -0.000100001 0 0 -0.000100001 0 0 + -0.000100001 0 0 -0.000100001 0 0 -0.000100001 0 0 -0.000100001 0 0 + -0.000100001 0 0 -0.000100001 0 0 -0.000100002 0 0 -0.000100002 0 0 + -0.000100002 0 0 -0.000100002 0 0 -0.000100002 0 0 -0.000100002 0 0 + -0.000100002 0 0 -0.000100002 0 0 -0.000100002 0 0 -0.000100002 0 0 + -0.000100002 0 0 -0.000100002 0 0 -0.000100002 0 0 -0.000100002 0 0 + -0.000100002 0 0 -0.000100002 0 0 -0.000100002 0 0 -0.000100002 0 0 + -0.000100002 0 0 -0.000100002 0 0 -0.000100002 0 0 -0.000100002 0 0 + -0.000100002 0 0 -0.000100002 0 0 -0.000100002 0 0 -0.000100002 0 0 + -0.000100002 0 0 -0.000100002 0 0 -0.000100002 0 0 -0.000100002 0 0 + -0.000100002 0 0 -0.000100002 0 0 -0.000100002 0 0 -0.000100002 0 0 + -0.000100002 0 0 -0.000100002 0 0 -0.000100002 0 0 -0.000100002 0 0 + -0.000100002 0 0 -0.000100002 0 0 -0.000100002 0 0 -0.000100002 0 0 + -0.000100002 0 0 -0.000100002 0 0 -0.000100001 0 0 -0.000100001 0 0 + -0.000100001 0 0 -0.000100001 0 0 -0.000100001 0 0 -0.000100001 0 0 + -0.000100001 0 0 -0.000100001 0 0 -0.000100001 0 0 -0.000100001 0 0 + -0.000100001 0 0 -0.000100001 0 0 -0.000100001 0 0 -0.000100001 0 0 + -0.000100001 0 0 -0.000100001 0 0 -0.000100001 0 0 -0.000100001 0 0 + -0.000100001 0 0 -0.000100001 0 0 -0.000100001 0 0 -0.000100001 0 0 + -0.000100001 0 0 -0.000100001 0 0 -0.000100001 0 0 -0.000100001 0 0 + -0.000100001 0 0 -0.000100001 0 0 -0.000100001 0 0 -0.000100001 0 0 + -0.000100001 0 0 -0.000100001 0 0 -0.000100001 0 0 -0.000100001 0 0 + -0.000100001 0 0 -0.000100001 0 0 -0.000100001 0 0 -0.000100001 0 0 + -0.000100001 0 0 -0.000100001 0 0 -0.000100001 0 0 -0.000100001 0 0 + </DataArray> + <DataArray type="Float32" Name="process rank" NumberOfComponents="1" format="ascii"> + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + </DataArray> + </CellData> + <Points> + <DataArray type="Float32" Name="Coordinates" NumberOfComponents="3" format="ascii"> + 0 0 0 0.025 0 0 0 1 0 0.025 1 0 + 0.05 0 0 0.05 1 0 0.075 0 0 0.075 1 0 + 0.1 0 0 0.1 1 0 0.125 0 0 0.125 1 0 + 0.15 0 0 0.15 1 0 0.175 0 0 0.175 1 0 + 0.2 0 0 0.2 1 0 0.225 0 0 0.225 1 0 + 0.25 0 0 0.25 1 0 0.275 0 0 0.275 1 0 + 0.3 0 0 0.3 1 0 0.325 0 0 0.325 1 0 + 0.35 0 0 0.35 1 0 0.375 0 0 0.375 1 0 + 0.4 0 0 0.4 1 0 0.425 0 0 0.425 1 0 + 0.45 0 0 0.45 1 0 0.475 0 0 0.475 1 0 + 0.5 0 0 0.5 1 0 0.525 0 0 0.525 1 0 + 0.55 0 0 0.55 1 0 0.575 0 0 0.575 1 0 + 0.6 0 0 0.6 1 0 0.625 0 0 0.625 1 0 + 0.65 0 0 0.65 1 0 0.675 0 0 0.675 1 0 + 0.7 0 0 0.7 1 0 0.725 0 0 0.725 1 0 + 0.75 0 0 0.75 1 0 0.775 0 0 0.775 1 0 + 0.8 0 0 0.8 1 0 0.825 0 0 0.825 1 0 + 0.85 0 0 0.85 1 0 0.875 0 0 0.875 1 0 + 0.9 0 0 0.9 1 0 0.925 0 0 0.925 1 0 + 0.95 0 0 0.95 1 0 0.975 0 0 0.975 1 0 + 1 0 0 1 1 0 1.025 0 0 1.025 1 0 + 1.05 0 0 1.05 1 0 1.075 0 0 1.075 1 0 + 1.1 0 0 1.1 1 0 1.125 0 0 1.125 1 0 + 1.15 0 0 1.15 1 0 1.175 0 0 1.175 1 0 + 1.2 0 0 1.2 1 0 1.225 0 0 1.225 1 0 + 1.25 0 0 1.25 1 0 1.275 0 0 1.275 1 0 + 1.3 0 0 1.3 1 0 1.325 0 0 1.325 1 0 + 1.35 0 0 1.35 1 0 1.375 0 0 1.375 1 0 + 1.4 0 0 1.4 1 0 1.425 0 0 1.425 1 0 + 1.45 0 0 1.45 1 0 1.475 0 0 1.475 1 0 + 1.5 0 0 1.5 1 0 1.525 0 0 1.525 1 0 + 1.55 0 0 1.55 1 0 1.575 0 0 1.575 1 0 + 1.6 0 0 1.6 1 0 1.625 0 0 1.625 1 0 + 1.65 0 0 1.65 1 0 1.675 0 0 1.675 1 0 + 1.7 0 0 1.7 1 0 1.725 0 0 1.725 1 0 + 1.75 0 0 1.75 1 0 1.775 0 0 1.775 1 0 + 1.8 0 0 1.8 1 0 1.825 0 0 1.825 1 0 + 1.85 0 0 1.85 1 0 1.875 0 0 1.875 1 0 + 1.9 0 0 1.9 1 0 1.925 0 0 1.925 1 0 + 1.95 0 0 1.95 1 0 1.975 0 0 1.975 1 0 + 2 0 0 2 1 0 2.025 0 0 2.025 1 0 + 2.05 0 0 2.05 1 0 2.075 0 0 2.075 1 0 + 2.1 0 0 2.1 1 0 2.125 0 0 2.125 1 0 + 2.15 0 0 2.15 1 0 2.175 0 0 2.175 1 0 + 2.2 0 0 2.2 1 0 2.225 0 0 2.225 1 0 + 2.25 0 0 2.25 1 0 2.275 0 0 2.275 1 0 + 2.3 0 0 2.3 1 0 2.325 0 0 2.325 1 0 + 2.35 0 0 2.35 1 0 2.375 0 0 2.375 1 0 + 2.4 0 0 2.4 1 0 2.425 0 0 2.425 1 0 + 2.45 0 0 2.45 1 0 2.475 0 0 2.475 1 0 + 2.5 0 0 2.5 1 0 2.525 0 0 2.525 1 0 + 2.55 0 0 2.55 1 0 2.575 0 0 2.575 1 0 + 2.6 0 0 2.6 1 0 2.625 0 0 2.625 1 0 + 2.65 0 0 2.65 1 0 2.675 0 0 2.675 1 0 + 2.7 0 0 2.7 1 0 2.725 0 0 2.725 1 0 + 2.75 0 0 2.75 1 0 2.775 0 0 2.775 1 0 + 2.8 0 0 2.8 1 0 2.825 0 0 2.825 1 0 + 2.85 0 0 2.85 1 0 2.875 0 0 2.875 1 0 + 2.9 0 0 2.9 1 0 2.925 0 0 2.925 1 0 + 2.95 0 0 2.95 1 0 2.975 0 0 2.975 1 0 + 3 0 0 3 1 0 3.025 0 0 3.025 1 0 + 3.05 0 0 3.05 1 0 3.075 0 0 3.075 1 0 + 3.1 0 0 3.1 1 0 3.125 0 0 3.125 1 0 + 3.15 0 0 3.15 1 0 3.175 0 0 3.175 1 0 + 3.2 0 0 3.2 1 0 3.225 0 0 3.225 1 0 + 3.25 0 0 3.25 1 0 3.275 0 0 3.275 1 0 + 3.3 0 0 3.3 1 0 3.325 0 0 3.325 1 0 + 3.35 0 0 3.35 1 0 3.375 0 0 3.375 1 0 + 3.4 0 0 3.4 1 0 3.425 0 0 3.425 1 0 + 3.45 0 0 3.45 1 0 3.475 0 0 3.475 1 0 + 3.5 0 0 3.5 1 0 3.525 0 0 3.525 1 0 + 3.55 0 0 3.55 1 0 3.575 0 0 3.575 1 0 + 3.6 0 0 3.6 1 0 3.625 0 0 3.625 1 0 + 3.65 0 0 3.65 1 0 3.675 0 0 3.675 1 0 + 3.7 0 0 3.7 1 0 3.725 0 0 3.725 1 0 + 3.75 0 0 3.75 1 0 3.775 0 0 3.775 1 0 + 3.8 0 0 3.8 1 0 3.825 0 0 3.825 1 0 + 3.85 0 0 3.85 1 0 3.875 0 0 3.875 1 0 + 3.9 0 0 3.9 1 0 3.925 0 0 3.925 1 0 + 3.95 0 0 3.95 1 0 3.975 0 0 3.975 1 0 + 4 0 0 4 1 0 4.025 0 0 4.025 1 0 + 4.05 0 0 4.05 1 0 4.075 0 0 4.075 1 0 + 4.1 0 0 4.1 1 0 4.125 0 0 4.125 1 0 + 4.15 0 0 4.15 1 0 4.175 0 0 4.175 1 0 + 4.2 0 0 4.2 1 0 4.225 0 0 4.225 1 0 + 4.25 0 0 4.25 1 0 4.275 0 0 4.275 1 0 + 4.3 0 0 4.3 1 0 4.325 0 0 4.325 1 0 + 4.35 0 0 4.35 1 0 4.375 0 0 4.375 1 0 + 4.4 0 0 4.4 1 0 4.425 0 0 4.425 1 0 + 4.45 0 0 4.45 1 0 4.475 0 0 4.475 1 0 + 4.5 0 0 4.5 1 0 4.525 0 0 4.525 1 0 + 4.55 0 0 4.55 1 0 4.575 0 0 4.575 1 0 + 4.6 0 0 4.6 1 0 4.625 0 0 4.625 1 0 + 4.65 0 0 4.65 1 0 4.675 0 0 4.675 1 0 + 4.7 0 0 4.7 1 0 4.725 0 0 4.725 1 0 + 4.75 0 0 4.75 1 0 4.775 0 0 4.775 1 0 + 4.8 0 0 4.8 1 0 4.825 0 0 4.825 1 0 + 4.85 0 0 4.85 1 0 4.875 0 0 4.875 1 0 + 4.9 0 0 4.9 1 0 4.925 0 0 4.925 1 0 + 4.95 0 0 4.95 1 0 4.975 0 0 4.975 1 0 + 5 0 0 5 1 0 + </DataArray> + </Points> + <Cells> + <DataArray type="Int32" Name="connectivity" NumberOfComponents="1" format="ascii"> + 0 1 3 2 1 4 5 3 4 6 7 5 + 6 8 9 7 8 10 11 9 10 12 13 11 + 12 14 15 13 14 16 17 15 16 18 19 17 + 18 20 21 19 20 22 23 21 22 24 25 23 + 24 26 27 25 26 28 29 27 28 30 31 29 + 30 32 33 31 32 34 35 33 34 36 37 35 + 36 38 39 37 38 40 41 39 40 42 43 41 + 42 44 45 43 44 46 47 45 46 48 49 47 + 48 50 51 49 50 52 53 51 52 54 55 53 + 54 56 57 55 56 58 59 57 58 60 61 59 + 60 62 63 61 62 64 65 63 64 66 67 65 + 66 68 69 67 68 70 71 69 70 72 73 71 + 72 74 75 73 74 76 77 75 76 78 79 77 + 78 80 81 79 80 82 83 81 82 84 85 83 + 84 86 87 85 86 88 89 87 88 90 91 89 + 90 92 93 91 92 94 95 93 94 96 97 95 + 96 98 99 97 98 100 101 99 100 102 103 101 + 102 104 105 103 104 106 107 105 106 108 109 107 + 108 110 111 109 110 112 113 111 112 114 115 113 + 114 116 117 115 116 118 119 117 118 120 121 119 + 120 122 123 121 122 124 125 123 124 126 127 125 + 126 128 129 127 128 130 131 129 130 132 133 131 + 132 134 135 133 134 136 137 135 136 138 139 137 + 138 140 141 139 140 142 143 141 142 144 145 143 + 144 146 147 145 146 148 149 147 148 150 151 149 + 150 152 153 151 152 154 155 153 154 156 157 155 + 156 158 159 157 158 160 161 159 160 162 163 161 + 162 164 165 163 164 166 167 165 166 168 169 167 + 168 170 171 169 170 172 173 171 172 174 175 173 + 174 176 177 175 176 178 179 177 178 180 181 179 + 180 182 183 181 182 184 185 183 184 186 187 185 + 186 188 189 187 188 190 191 189 190 192 193 191 + 192 194 195 193 194 196 197 195 196 198 199 197 + 198 200 201 199 200 202 203 201 202 204 205 203 + 204 206 207 205 206 208 209 207 208 210 211 209 + 210 212 213 211 212 214 215 213 214 216 217 215 + 216 218 219 217 218 220 221 219 220 222 223 221 + 222 224 225 223 224 226 227 225 226 228 229 227 + 228 230 231 229 230 232 233 231 232 234 235 233 + 234 236 237 235 236 238 239 237 238 240 241 239 + 240 242 243 241 242 244 245 243 244 246 247 245 + 246 248 249 247 248 250 251 249 250 252 253 251 + 252 254 255 253 254 256 257 255 256 258 259 257 + 258 260 261 259 260 262 263 261 262 264 265 263 + 264 266 267 265 266 268 269 267 268 270 271 269 + 270 272 273 271 272 274 275 273 274 276 277 275 + 276 278 279 277 278 280 281 279 280 282 283 281 + 282 284 285 283 284 286 287 285 286 288 289 287 + 288 290 291 289 290 292 293 291 292 294 295 293 + 294 296 297 295 296 298 299 297 298 300 301 299 + 300 302 303 301 302 304 305 303 304 306 307 305 + 306 308 309 307 308 310 311 309 310 312 313 311 + 312 314 315 313 314 316 317 315 316 318 319 317 + 318 320 321 319 320 322 323 321 322 324 325 323 + 324 326 327 325 326 328 329 327 328 330 331 329 + 330 332 333 331 332 334 335 333 334 336 337 335 + 336 338 339 337 338 340 341 339 340 342 343 341 + 342 344 345 343 344 346 347 345 346 348 349 347 + 348 350 351 349 350 352 353 351 352 354 355 353 + 354 356 357 355 356 358 359 357 358 360 361 359 + 360 362 363 361 362 364 365 363 364 366 367 365 + 366 368 369 367 368 370 371 369 370 372 373 371 + 372 374 375 373 374 376 377 375 376 378 379 377 + 378 380 381 379 380 382 383 381 382 384 385 383 + 384 386 387 385 386 388 389 387 388 390 391 389 + 390 392 393 391 392 394 395 393 394 396 397 395 + 396 398 399 397 398 400 401 399 + </DataArray> + <DataArray type="Int32" Name="offsets" NumberOfComponents="1" format="ascii"> + 4 8 12 16 20 24 28 32 36 40 44 48 + 52 56 60 64 68 72 76 80 84 88 92 96 + 100 104 108 112 116 120 124 128 132 136 140 144 + 148 152 156 160 164 168 172 176 180 184 188 192 + 196 200 204 208 212 216 220 224 228 232 236 240 + 244 248 252 256 260 264 268 272 276 280 284 288 + 292 296 300 304 308 312 316 320 324 328 332 336 + 340 344 348 352 356 360 364 368 372 376 380 384 + 388 392 396 400 404 408 412 416 420 424 428 432 + 436 440 444 448 452 456 460 464 468 472 476 480 + 484 488 492 496 500 504 508 512 516 520 524 528 + 532 536 540 544 548 552 556 560 564 568 572 576 + 580 584 588 592 596 600 604 608 612 616 620 624 + 628 632 636 640 644 648 652 656 660 664 668 672 + 676 680 684 688 692 696 700 704 708 712 716 720 + 724 728 732 736 740 744 748 752 756 760 764 768 + 772 776 780 784 788 792 796 800 + </DataArray> + <DataArray type="UInt8" Name="types" NumberOfComponents="1" format="ascii"> + 9 9 9 9 9 9 9 9 9 9 9 9 + 9 9 9 9 9 9 9 9 9 9 9 9 + 9 9 9 9 9 9 9 9 9 9 9 9 + 9 9 9 9 9 9 9 9 9 9 9 9 + 9 9 9 9 9 9 9 9 9 9 9 9 + 9 9 9 9 9 9 9 9 9 9 9 9 + 9 9 9 9 9 9 9 9 9 9 9 9 + 9 9 9 9 9 9 9 9 9 9 9 9 + 9 9 9 9 9 9 9 9 9 9 9 9 + 9 9 9 9 9 9 9 9 9 9 9 9 + 9 9 9 9 9 9 9 9 9 9 9 9 + 9 9 9 9 9 9 9 9 9 9 9 9 + 9 9 9 9 9 9 9 9 9 9 9 9 + 9 9 9 9 9 9 9 9 9 9 9 9 + 9 9 9 9 9 9 9 9 9 9 9 9 + 9 9 9 9 9 9 9 9 9 9 9 9 + 9 9 9 9 9 9 9 9 + </DataArray> + </Cells> + </Piece> + </UnstructuredGrid> +</VTKFile>