Commit 97adbf55 authored by Melanie Lipp's avatar Melanie Lipp
Browse files

[cleanup][2p2c/2pnc] Remove duplicates in 2p2c and 2pnc model.

parent b4829fc7
......@@ -3,7 +3,5 @@ add_subdirectory(sequential)
install(FILES
indices.hh
model.hh
primaryvariableswitch.hh
volumevariables.hh
vtkoutputfields.hh
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/dumux/porousmediumflow/2p2c)
......@@ -96,36 +96,11 @@
#include "indices.hh"
#include "volumevariables.hh"
#include "primaryvariableswitch.hh"
#include "vtkoutputfields.hh"
#include <dumux/porousmediumflow/2pnc/primaryvariableswitch.hh>
#include <dumux/porousmediumflow/2pnc/vtkoutputfields.hh>
#include <dumux/porousmediumflow/2pnc/model.hh>
namespace Dumux {
/*!
* \ingroup TwoPTwoCModel
* \brief Specifies a number properties of two-phase two-component models.
*
* \tparam f The two-phase formulation used
* \tparam useM Boolean to specify if moles or masses are balanced
*/
template<TwoPFormulation f, bool useM, int repCompEqIdx = 2>
struct TwoPTwoCModelTraits
{
using Indices = TwoPTwoCIndices;
static constexpr int numEq() { return 2; }
static constexpr int numPhases() { return 2; }
static constexpr int numComponents() { return 2; }
static constexpr int replaceCompEqIdx() { return repCompEqIdx; }
static constexpr bool useMoles() { return useM; }
static constexpr bool enableAdvection() { return true; }
static constexpr bool enableMolecularDiffusion() { return true; }
static constexpr bool enableEnergyBalance() { return false; }
static constexpr TwoPFormulation priVarFormulation() { return f; }
};
/*!
* \ingroup TwoPTwoCModel
* \brief Traits class for the two-phase two-component model.
......@@ -156,7 +131,7 @@ namespace Properties {
//////////////////////////////////////////////////////////////////
// Type tags
//////////////////////////////////////////////////////////////////
NEW_TYPE_TAG(TwoPTwoC, INHERITS_FROM(PorousMediumFlow));
NEW_TYPE_TAG(TwoPTwoC, INHERITS_FROM(TwoPNC));
NEW_TYPE_TAG(TwoPTwoCNI, INHERITS_FROM(TwoPTwoC));
//////////////////////////////////////////////////////////////////
......@@ -174,50 +149,11 @@ private:
static_assert(FluidSystem::numPhases == 2, "Only fluid systems with 2 phases are supported by the 2p-2c model!");
public:
using type = TwoPTwoCModelTraits< GET_PROP_VALUE(TypeTag, Formulation),
GET_PROP_VALUE(TypeTag, UseMoles), GET_PROP_VALUE(TypeTag, ReplaceCompEqIdx) >;
using type = TwoPNCModelTraits<2, GET_PROP_VALUE(TypeTag, UseMoles), true, GET_PROP_VALUE(TypeTag, Formulation), GET_PROP_VALUE(TypeTag, ReplaceCompEqIdx)>;
};
//! Set the vtk output fields specific to this model
SET_TYPE_PROP(TwoPTwoC, VtkOutputFields, TwoPTwoCVtkOutputFields);
/*!
* \brief The fluid state which is used by the volume variables to
* store the thermodynamic state. This should be chosen
* appropriately for the model ((non-)isothermal, equilibrium, ...).
* This can be done in the problem.
*/
SET_PROP(TwoPTwoC, FluidState)
{
private:
using Scalar = typename GET_PROP_TYPE(TypeTag, Scalar);
using FluidSystem = typename GET_PROP_TYPE(TypeTag, FluidSystem);
public:
using type = CompositionalFluidState<Scalar, FluidSystem>;
};
//! Set the default formulation to pw-sn
SET_PROP(TwoPTwoC, Formulation)
{ static constexpr TwoPFormulation value = TwoPFormulation::p0s1; };
//! Set as default that no component mass balance is replaced by the total mass balance
SET_INT_PROP(TwoPTwoC, ReplaceCompEqIdx, GET_PROP_TYPE(TypeTag, FluidSystem)::numComponents);
//! Use the compositional local residual operator
SET_TYPE_PROP(TwoPTwoC, LocalResidual, CompositionalLocalResidual<TypeTag>);
//! The primary variable switch for the 2p2c model
SET_TYPE_PROP(TwoPTwoC, PrimaryVariableSwitch, TwoPTwoCPrimaryVariableSwitch);
//! The primary variables vector for the 2p2c model
SET_PROP(TwoPTwoC, PrimaryVariables)
{
private:
using PrimaryVariablesVector = Dune::FieldVector<typename GET_PROP_TYPE(TypeTag, Scalar),
GET_PROP_TYPE(TypeTag, ModelTraits)::numEq()>;
public:
using type = SwitchablePrimaryVariables<PrimaryVariablesVector, int>;
};
SET_TYPE_PROP(TwoPTwoC, PrimaryVariableSwitch, TwoPNCPrimaryVariableSwitch<TypeTag>);
//! Use the 2p2c VolumeVariables
SET_PROP(TwoPTwoC, VolumeVariables)
......@@ -238,13 +174,6 @@ public:
using type = TwoPTwoCVolumeVariables<Traits>;
};
//! Use the model after Millington (1961) for the effective diffusivity
SET_TYPE_PROP(TwoPTwoC, EffectiveDiffusivityModel,
DiffusivityMillingtonQuirk<typename GET_PROP_TYPE(TypeTag, Scalar)>);
//! Use mole fractions in the balance equations by default
SET_BOOL_PROP(TwoPTwoC, UseMoles, true);
//! Determines whether the constraint solver is used
SET_BOOL_PROP(TwoPTwoC, UseConstraintSolver, true);
......@@ -268,14 +197,13 @@ private:
using FluidSystem = typename GET_PROP_TYPE(TypeTag, FluidSystem);
static_assert(FluidSystem::numComponents == 2, "Only fluid systems with 2 components are supported by the 2p-2c model!");
static_assert(FluidSystem::numPhases == 2, "Only fluid systems with 2 phases are supported by the 2p-2c model!");
using Traits = TwoPTwoCModelTraits< GET_PROP_VALUE(TypeTag, Formulation),
GET_PROP_VALUE(TypeTag, UseMoles), GET_PROP_VALUE(TypeTag, ReplaceCompEqIdx)>;
using Traits = TwoPNCModelTraits< 2, GET_PROP_VALUE(TypeTag, UseMoles), true, GET_PROP_VALUE(TypeTag, Formulation), GET_PROP_VALUE(TypeTag, ReplaceCompEqIdx)>;
public:
using type = PorousMediumFlowNIModelTraits< Traits >;
};
//! Set non-isothermal output fields
SET_TYPE_PROP(TwoPTwoCNI, VtkOutputFields, EnergyVtkOutputFields<TwoPTwoCVtkOutputFields>);
SET_TYPE_PROP(TwoPTwoCNI, VtkOutputFields, EnergyVtkOutputFields<TwoPNCVtkOutputFields>);
} // end namespace Properties
} // end namespace Dumux
......
// -*- 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 TwoPTwoCModel
* \brief The primary variable switch for the 2p2c model
*/
#ifndef DUMUX_2P2C_PRIMARY_VARIABLE_SWITCH_HH
#define DUMUX_2P2C_PRIMARY_VARIABLE_SWITCH_HH
#include <iostream>
#include <dumux/porousmediumflow/compositional/primaryvariableswitch.hh>
#include <dumux/porousmediumflow/2p/formulation.hh>
namespace Dumux
{
/*!
* \ingroup TwoPTwoCModel
* \brief The primary variable switch controlling the phase presence state variable
*/
class TwoPTwoCPrimaryVariableSwitch : public PrimaryVariableSwitch<TwoPTwoCPrimaryVariableSwitch>
{
using ParentType = PrimaryVariableSwitch<TwoPTwoCPrimaryVariableSwitch>;
friend ParentType;
public:
using ParentType::ParentType;
protected:
// perform variable switch at a degree of freedom location
template<class VolumeVariables, class IndexType, class GlobalPosition>
bool update_(typename VolumeVariables::PrimaryVariables& priVars,
const VolumeVariables& volVars,
IndexType dofIdxGlobal,
const GlobalPosition& globalPos)
{
using Scalar = typename VolumeVariables::PrimaryVariables::value_type;
using FluidSystem = typename VolumeVariables::FluidSystem;
static constexpr int phase0Idx = FluidSystem::phase0Idx;
static constexpr int phase1Idx = FluidSystem::phase1Idx;
static constexpr int comp0Idx = FluidSystem::comp0Idx;
static constexpr int comp1Idx = FluidSystem::comp1Idx;
static constexpr bool useMoles = VolumeVariables::useMoles();
static constexpr auto formulation = VolumeVariables::priVarFormulation();
static_assert( (formulation == TwoPFormulation::p0s1 || formulation == TwoPFormulation::p1s0),
"Chosen TwoPFormulation not supported!");
using Indices = typename VolumeVariables::Indices;
static constexpr int switchIdx = Indices::switchIdx;
// evaluate primary variable switch
bool wouldSwitch = false;
int phasePresence = priVars.state();
int newPhasePresence = phasePresence;
// check if a primary var switch is necessary
if (phasePresence == Indices::secondPhaseOnly)
{
// calculate mole fraction in the hypothetic first phase
Scalar x00 = volVars.moleFraction(phase0Idx, comp0Idx);
Scalar x01 = volVars.moleFraction(phase0Idx, comp1Idx);
Scalar x0Max = 1.0;
if (x00 + x01 > x0Max)
wouldSwitch = true;
if (this->wasSwitched_[dofIdxGlobal])
x0Max *= 1.02;
// if the sum of the mole fractions is too large, first phase appears
if (x00 + x01 > x0Max)
{
if (this->verbosity() > 1)
std::cout << "First phase (" << FluidSystem::phaseName(phase0Idx) << ")"
<< " appears at dof " << dofIdxGlobal
<< ", coordinates: " << globalPos
<< ", sum x^i_" << FluidSystem::phaseName(phase0Idx) << ": " << x00 + x01
<< std::endl;
newPhasePresence = Indices::bothPhases;
if (formulation == TwoPFormulation::p1s0)
priVars[switchIdx] = 0.0001;
else
priVars[switchIdx] = 0.9999;
}
}
else if (phasePresence == Indices::firstPhaseOnly)
{
// calculate mole fraction in the hypothetic second phase
Scalar x10 = volVars.moleFraction(phase1Idx, comp0Idx);
Scalar x11 = volVars.moleFraction(phase1Idx, comp1Idx);
Scalar x1Max = 1.0;
if (x10 + x11 > x1Max)
wouldSwitch = true;
if (this->wasSwitched_[dofIdxGlobal])
x1Max *= 1.02;
// if the sum of the mole fractions is too large, second phase appears
if (x10 + x11 > x1Max)
{
if (this->verbosity() > 1)
std::cout << "Second phase (" << FluidSystem::phaseName(phase1Idx) << ")"
<< " appears at dof " << dofIdxGlobal
<< ", coordinates: " << globalPos
<< ", sum x^i_" << FluidSystem::phaseName(phase1Idx) << ": " << x10 + x11
<< std::endl;
newPhasePresence = Indices::bothPhases;
if (formulation == TwoPFormulation::p1s0)
priVars[switchIdx] = 0.9999;
else
priVars[switchIdx] = 0.0001;
}
}
else if (phasePresence == Indices::bothPhases)
{
Scalar Smin = 0.0;
if (this->wasSwitched_[dofIdxGlobal])
Smin = -0.01;
if (volVars.saturation(phase1Idx) <= Smin)
{
if (this->verbosity() > 1)
std::cout << "Second phase (" << FluidSystem::phaseName(phase1Idx) << ")"
<< " disappears at dof " << dofIdxGlobal
<< ", coordinates: " << globalPos
<< ", S_" << FluidSystem::phaseName(phase1Idx) << ": " << volVars.saturation(phase1Idx)
<< std::endl;
wouldSwitch = true;
newPhasePresence = Indices::firstPhaseOnly;
if(useMoles) // mole-fraction formulation
priVars[switchIdx] = volVars.moleFraction(phase0Idx, comp1Idx);
else // mass-fraction formulation
priVars[switchIdx] = volVars.massFraction(phase0Idx, comp1Idx);
}
else if (volVars.saturation(phase0Idx) <= Smin)
{
if (this->verbosity() > 1)
std::cout << "First phase (" << FluidSystem::phaseName(phase0Idx) << ")"
<< " disappears at dof " << dofIdxGlobal
<< ", coordinates: " << globalPos
<< ", S_" << FluidSystem::phaseName(phase0Idx) << ": " << volVars.saturation(phase1Idx)
<< std::endl;
wouldSwitch = true;
newPhasePresence = Indices::secondPhaseOnly;
if(useMoles) // mole-fraction formulation
priVars[switchIdx] = volVars.moleFraction(phase1Idx, comp0Idx);
else // mass-fraction formulation
priVars[switchIdx] = volVars.massFraction(phase1Idx, comp0Idx);
}
}
priVars.setState(newPhasePresence);
this->wasSwitched_[dofIdxGlobal] = wouldSwitch;
return phasePresence != newPhasePresence;
}
};
} // end namespace Dumux
#endif
// -*- 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 TwoPTwoCModel
* \brief Adds vtk output fields specific to the twop model
*/
#ifndef DUMUX_TWOPTWOC_VTK_OUTPUT_FIELDS_HH
#define DUMUX_TWOPTWOC_VTK_OUTPUT_FIELDS_HH
namespace Dumux {
/*!
* \ingroup TwoPTwoCModel
* \brief Adds vtk output fields specific to the two-phase two-component model
*/
class TwoPTwoCVtkOutputFields
{
public:
template <class VtkOutputModule>
static void init(VtkOutputModule& vtk)
{
using VolumeVariables = typename VtkOutputModule::VolumeVariables;
using FluidSystem = typename VolumeVariables::FluidSystem;
// register standardized vtk output fields
vtk.addVolumeVariable([](const auto& v){ return v.saturation(FluidSystem::phase1Idx); }, "S_n");
vtk.addVolumeVariable([](const auto& v){ return v.saturation(FluidSystem::phase0Idx); }, "S_w");
vtk.addVolumeVariable([](const auto& v){ return v.pressure(FluidSystem::phase1Idx); }, "p_n");
vtk.addVolumeVariable([](const auto& v){ return v.pressure(FluidSystem::phase0Idx); }, "p_w");
vtk.addVolumeVariable([](const auto& v){ return v.capillaryPressure(); }, "pc");
vtk.addVolumeVariable([](const auto& v){ return v.density(FluidSystem::phase0Idx); }, "rho_w");
vtk.addVolumeVariable([](const auto& v){ return v.density(FluidSystem::phase1Idx); }, "rho_n");
vtk.addVolumeVariable([](const auto& v){ return v.mobility(FluidSystem::phase0Idx); }, "mob_w");
vtk.addVolumeVariable([](const auto& v){ return v.mobility(FluidSystem::phase1Idx); }, "mob_n");
for (int i = 0; i < VolumeVariables::numPhases(); ++i)
for (int j = 0; j < VolumeVariables::numComponents(); ++j)
vtk.addVolumeVariable([i,j](const auto& v){ return v.massFraction(i,j); },"X^"+ FluidSystem::componentName(j) + "_" + FluidSystem::phaseName(i));
for (int i = 0; i < VolumeVariables::numPhases(); ++i)
for (int j = 0; j < VolumeVariables::numComponents(); ++j)
vtk.addVolumeVariable([i,j](const auto& v){ return v.moleFraction(i,j); },"x^"+ FluidSystem::componentName(j) + "_" + FluidSystem::phaseName(i));
vtk.addVolumeVariable([](const auto& v){ return v.porosity(); }, "porosity");
vtk.addVolumeVariable([](const auto& v){ return v.priVars().state(); }, "phase presence");
}
};
} // end namespace Dumux
#endif
......@@ -61,6 +61,8 @@ protected:
static constexpr int comp1Idx = FluidSystem::comp1Idx;
static constexpr auto numComponents = VolumeVariables::numComponents();
static constexpr bool useMoles = VolumeVariables::useMoles();
static_assert(useMoles || numComponents < 3, "!useMoles is only implemented for numComponents < 3.");
static constexpr auto numMajorComponents = VolumeVariables::numPhases();
static constexpr auto formulation = VolumeVariables::priVarFormulation();
static_assert( (formulation == TwoPFormulation::p0s1 || formulation == TwoPFormulation::p1s0),
......@@ -95,11 +97,18 @@ protected:
newPhasePresence = Indices::secondPhaseOnly;
// switch not depending on formulation, switch "S0" to "x10"
priVars[switchIdx] = volVars.moleFraction(phase1Idx, comp0Idx);
if(useMoles) // mole-fraction formulation
priVars[switchIdx] = volVars.moleFraction(phase1Idx, comp0Idx);
else // mass-fraction formulation
priVars[switchIdx] = volVars.massFraction(phase1Idx, comp0Idx);
// switch all secondary components to mole fraction in non-wetting phase
for (int compIdx = numMajorComponents; compIdx < numComponents; ++compIdx)
priVars[compIdx] = volVars.moleFraction(phase1Idx, compIdx);
if(useMoles) // mole-fraction formulation
for (int compIdx = numMajorComponents; compIdx < numComponents; ++compIdx)
priVars[compIdx] = volVars.moleFraction(phase1Idx, compIdx);
else // mass-fraction formulation
for (int compIdx = numMajorComponents; compIdx < numComponents; ++compIdx)
priVars[compIdx] = volVars.massFraction(phase1Idx, compIdx);
}
// if saturation of second phase is smaller than 0: switch
......@@ -116,7 +125,10 @@ protected:
newPhasePresence = Indices::firstPhaseOnly;
// switch "S1" to "x01"
priVars[switchIdx] = volVars.moleFraction(phase0Idx, comp1Idx);
if(useMoles) // mole-fraction formulation
priVars[switchIdx] = volVars.moleFraction(phase0Idx, comp1Idx);
else // mass-fraction formulation
priVars[switchIdx] = volVars.massFraction(phase0Idx, comp1Idx);
}
}
else if (phasePresence == Indices::secondPhaseOnly)
......
......@@ -449,15 +449,6 @@ public:
DUNE_THROW(Dune::InvalidStateException, "Diffusion coefficient called for phaseIdx = compIdx");
}
/*!
* \brief Returns the molarity of a component in the phase
*
* \param phaseIdx the index of the fluid phase
* \param compIdx the index of the component
*/
Scalar molarity(int phaseIdx, int compIdx) const // [moles/m^3]
{ return fluidState_.molarity(phaseIdx, compIdx);}
/*!
* \brief Returns the mass fraction of a component in the phase
*
......
......@@ -49,11 +49,18 @@ public:
for (int i = 0; i < VolumeVariables::numPhases(); ++i)
for (int j = 0; j < VolumeVariables::numComponents(); ++j)
vtk.addVolumeVariable([i,j](const auto& v){ return v.moleFraction(i,j); },
"x^"+ FluidSystem::componentName(j) + "_" + FluidSystem::phaseName(i));
"x^"+ FluidSystem::componentName(j) + "_" + FluidSystem::phaseName(i));
for (int j = 0; j < VolumeVariables::numComponents(); ++j)
vtk.addVolumeVariable([j](const auto& v){ return v.molarity(FluidSystem::phase0Idx,j); },
"m^" + FluidSystem::componentName(j) + "_" + FluidSystem::phaseName(FluidSystem::phase0Idx));
for (int i = 0; i < VolumeVariables::numPhases(); ++i)
vtk.addVolumeVariable([i](const auto& v){ return v.molarDensity(i); },
"rhoMolar_" + FluidSystem::phaseName(i));
if (VolumeVariables::numComponents() < 3){
for (int i = 0; i < VolumeVariables::numPhases(); ++i)
for (int j = 0; j < VolumeVariables::numComponents(); ++j)
vtk.addVolumeVariable([i,j](const auto& v){ return v.massFraction(i,j); },
"X^"+ FluidSystem::componentName(j) + "_" + FluidSystem::phaseName(i));
}
vtk.addVolumeVariable([](const auto& v){ return v.priVars().state(); }, "phasePresence");
}
......
......@@ -243,50 +243,35 @@
0.363895 0.363895 0.363895 0.363895 0.363895 0.363895 0.363895 0.363895 0.363895 0.363895 0.363895 0.363895
0.363895 0.363895 0.363895 0.363895 0.363895 0.363895 0.363895 0.363895 0.363895 0.363895
</DataArray>
<DataArray type="Float32" Name="m^H2O_l" NumberOfComponents="1" format="ascii">
55141.5 55141.5 55141.5 55141.5 55141.5 55141.5 55141.5 55141.5 55141.5 55141.5 55141.5 55141.5
55141.5 55141.5 55141.5 55141.5 55141.5 55141.5 55141.5 55141.5 55141.5 55141.5 55141.5 55141.5
55141.5 55141.5 55141.5 55141.5 55141.5 55141.5 55141.5 55141.5 55141.5 55141.5 55141.5 55141.5
55141.5 55141.5 55141.5 55141.5 55141.5 55141.5 55141.5 55141.5 55141.5 55141.5 55141.5 55141.5
55141.5 55141.5 55141.5 55141.5 55141.5 55141.5 55141.5 55141.5 55141.5 55141.5 55141.5 55141.5
55141.5 55141.5 55141.5 55141.5 55141.5 55141.5 55141.5 55141.5 55141.5 55141.5 55141.5 55141.5
55141.5 55141.5 55141.5 55141.5 55141.5 55141.5 55141.5 55141.5 55141.5 55141.5 55141.5 55141.5
55141.5 55141.5 55141.5 55141.5 55141.5 55141.5 55141.5 55141.5 55141.5 55141.5 55141.5 55141.5
55141.5 55141.5 55141.5 55141.5 55141.5 55141.5 55141.5 55141.5 55141.5 55141.5 55141.5 55141.5
55141.5 55141.5 55141.5 55141.5 55141.5 55141.5 55141.5 55141.5 55141.5 55141.5 55141.5 55141.5
55141.5 55141.5 55141.5 55141.5 55141.5 55141.5 55141.5 55141.5 55141.5 55141.5 55141.5 55141.5
55141.4 55141.4 55141.4 55141.4 55141.4 55141.4 55141.4 55141.4 55141.4 55141.4 55141.4 55141.4
55141.4 55141.4 55141.4 55141.4 55141.4 55141.4 55141.4 55141.4 55141.4 55141.4
<DataArray type="Float32" Name="rhoMolar_l" NumberOfComponents="1" format="ascii">
55142.1 55142.1 55142.1 55142.1 55142.1 55142.1 55142.1 55142.1 55142.1 55142.1 55142.1 55142.1
55142.1 55142.1 55142.1 55142.1 55142.1 55142.1 55142.1 55142.1 55142.1 55142.1 55142.1 55142.1
55142.1 55142.1 55142.1 55142.1 55142.1 55142.1 55142.1 55142.1 55142.1 55142.1 55142.1 55142.1
55142.1 55142.1 55142.1 55142.1 55142.1 55142.1 55142.1 55142.1 55142.1 55142.1 55142.1 55142.1
55142.1 55142.1 55142.1 55142.1 55142.1 55142.1 55142.1 55142.1 55142.1 55142.1 55142.1 55142.1
55142.1 55142.1 55142.1 55142.1 55142.1 55142.1 55142.1 55142.1 55142.1 55142.1 55142.1 55142.1
55142.1 55142.1 55142.1 55142.1 55142.1 55142.1 55142.1 55142.1 55142.1 55142.1 55142.1 55142.1
55142.1 55142.1 55142.1 55142.1 55142.1 55142.1 55142.1 55142.1 55142.1 55142.1 55142.1 55142.1
55142.1 55142.1 55142.1 55142.1 55142.1 55142.1 55142.1 55142.1 55142.1 55142.1 55142.1 55142.1
55142.1 55142.1 55142.1 55142.1 55142.1 55142.1 55142.1 55142.1 55142.1 55142.1 55142.1 55142.1
55142.1 55142.1 55142.1 55142.1 55142.1 55142.1 55142.1 55142.1 55142.1 55142.1 55142.1 55142.1
55142.1 55142.1 55142.1 55142.1 55142.1 55142.1 55142.1 55142.1 55142.1 55142.1 55142.1 55142.1
55142.1 55142.1 55142.1 55142.1 55142.1 55142.1 55142.1 55142.1 55142.1 55142.1
</DataArray>
<DataArray type="Float32" Name="m^N2_l" NumberOfComponents="1" format="ascii">
0.395279 0.395279 0.381259 0.381259 0.395279 0.381259 0.395279 0.381259 0.395279 0.381259 0.395279 0.381259
0.395279 0.381259 0.395279 0.381259 0.395279 0.381259 0.395279 0.381259 0.395279 0.381259 0.395279 0.381259
0.395279 0.381259 0.395279 0.381259 0.395279 0.381259 0.395279 0.381259 0.395279 0.381259 0.395279 0.381259
0.395279 0.381259 0.395279 0.381259 0.395279 0.381259 0.395279 0.381259 0.367736 0.367736 0.367736 0.367736
0.367736 0.367736 0.367736 0.367736 0.367736 0.367736 0.367736 0.367736 0.367736 0.367736 0.367736 0.367736
0.367736 0.367736 0.367736 0.367736 0.367736 0.367736 0.354693 0.354693 0.354693 0.354693 0.354693 0.354693
0.354693 0.354693 0.354693 0.354693 0.354693 0.354693 0.354693 0.354693 0.354693 0.354693 0.354693 0.354693
0.354693 0.354693 0.354693 0.354693 0.342113 0.342113 0.342113 0.342113 0.342113 0.342113 0.342113 0.342113
0.342113 0.342113 0.342113 0.342113 0.342113 0.342113 0.342113 0.342113 0.342113 0.342113 0.342113 0.342113
0.342113 0.342113 0.329979 0.329979 0.329979 0.329979 0.329979 0.329979 0.329979 0.329979 0.329979 0.329979
0.329979 0.329979 0.329979 0.329979 0.329979 0.329979 0.329979 0.329979 0.329979 0.329979 0.329979 0.329979
0.318276 0.318276 0.318276 0.318276 0.318276 0.318276 0.318276 0.318276 0.318276 0.318276 0.318276 0.318276
0.318276 0.318276 0.318276 0.318276 0.318276 0.318276 0.318276 0.318276 0.318276 0.318276
</DataArray>
<DataArray type="Float32" Name="m^O2_l" NumberOfComponents="1" format="ascii">
0.237117 0.237117 0.263746 0.263746 0.237117 0.263746 0.237117 0.263746 0.237117 0.263746 0.237117 0.263746
0.237117 0.263746 0.237117 0.263746 0.237117 0.263746 0.237117 0.263746 0.237117 0.263746 0.237117 0.263746
0.237117 0.263746 0.237117 0.263746 0.237117 0.263746 0.237117 0.263746 0.237117 0.263746 0.237117 0.263746
0.237117 0.263746 0.237117 0.263746 0.237117 0.263746 0.237117 0.263746 0.289431 0.289431 0.289431 0.289431
0.289431 0.289431 0.289431 0.289431 0.289431 0.289431 0.289431 0.289431 0.289431 0.289431 0.289431 0.289431
0.289431 0.289431 0.289431 0.289431 0.289431 0.289431 0.314205 0.314205 0.314205 0.314205 0.314205 0.314205
0.314205 0.314205 0.314205 0.314205 0.314205 0.314205 0.314205 0.314205 0.314205 0.314205 0.314205 0.314205
0.314205 0.314205 0.314205 0.314205 0.338099 0.338099 0.338099 0.338099 0.338099 0.338099 0.338099 0.338099
0.338099 0.338099 0.338099 0.338099 0.338099 0.338099 0.338099 0.338099 0.338099 0.338099 0.338099 0.338099
0.338099 0.338099 0.361146 0.361146 0.361146 0.361146 0.361146 0.361146 0.361146 0.361146 0.361146 0.361146
0.361146 0.361146 0.361146 0.361146 0.361146 0.361146 0.361146 0.361146 0.361146 0.361146 0.361146 0.361146
0.383375 0.383375 0.383375 0.383375 0.383375 0.383375 0.383375 0.383375 0.383375 0.383375 0.383375 0.383375
0.383375 0.383375 0.383375 0.383375 0.383375 0.383375 0.383375 0.383375 0.383375 0.383375
<DataArray type="Float32" Name="rhoMolar_g" NumberOfComponents="1" format="ascii">
38.8034 38.8034 38.8034 38.8034 38.8034 38.8034 38.8034 38.8034 38.8034 38.8034 38.8034 38.8034
38.8034 38.8034 38.8034 38.8034 38.8034 38.8034 38.8034 38.8034 38.8034 38.8034 38.8034 38.8034
38.8034 38.8034 38.8034 38.8034 38.8034 38.8034 38.8034 38.8034 38.8034 38.8034 38.8034 38.8034
38.8034 38.8034 38.8034 38.8034 38.8034 38.8034 38.8034 38.8034 38.8035 38.8035 38.8035 38.8035
38.8035 38.8035 38.8035 38.8035 38.8035 38.8035 38.8035 38.8035 38.8035 38.8035 38.8035 38.8035
38.8035 38.8035 38.8035 38.8035 38.8035 38.8035 38.8035 38.8035 38.8035 38.8035 38.8035 38.8035
38.8035 38.8035 38.8035 38.8035 38.8035 38.8035 38.8035 38.8035 38.8035 38.8035 38.8035 38.8035
38.8035 38.8035 38.8035 38.8035 38.8035 38.8035 38.8035 38.8035 38.8035 38.8035 38.8035 38.8035
38.8035 38.8035 38.8035 38.8035 38.8035 38.8035 38.8035 38.8035 38.8035 38.8035 38.8035 38.8035
38.8035 38.8035 38.8035 38.8035 38.8035 38.8035 38.8035 38.8035 38.8035 38.8035 38.8035 38.8035
38.8035 38.8035 38.8035 38.8035 38.8035 38.8035 38.8035 38.8035 38.8035 38.8035 38.8035 38.8035
38.8036 38.8036 38.8036 38.8036 38.8036 38.8036 38.8036 38.8036 38.8036 38.8036 38.8036 38.8036
38.8036 38.8036 38.8036 38.8036 38.8036 38.8036 38.8036 38.8036 38.8036 38.8036
</DataArray>
<DataArray type="Float32" Name="phasePresence" NumberOfComponents="1" format="ascii">
3 3 3 3 3 3 3 3 3 3 3 3
......
......@@ -243,50 +243,35 @@
0.282119 0.282119 0.282119 0.282119 0.282119 0.282119 0.282119 0.282119 0.282119 0.282119 0.282119 0.282119
0.282119 0.282119 0.282119 0.282119 0.282119 0.282119 0.282119 0.282119 0.282119 0.282119
</DataArray>
<DataArray type="Float32" Name="m^H2O_l" NumberOfComponents="1" format="ascii">
55376 55376 55382 55382 55376 55382 55376 55382 55376 55382 55376 55382
55376 55382 55376 55382 55376 55382 55376 55382 55376 55382 55376 55382
55376 55382 55376 55382 55376 55382 55376 55382 55376 55382 55376 55382
55376 55382 55376 55382 55376 55382 55376 55382 55387.9 55387.9 55387.9 55387.9
55387.9 55387.9 55387.9 55387.9 55387.9 55387.9 55387.9 55387.9 55387.9 55387.9 55387.9 55387.9
55387.9 55387.9 55387.9 55387.9 55387.9 55387.9 55393.7 55393.7 55393.7 55393.7 55393.7 55393.7
55393.7 55393.7 55393.7 55393.7 55393.7 55393.7 55393.7 55393.7 55393.7 55393.7 55393.7 55393.7
55393.7 55393.7 55393.7 55393.7 55399.4 55399.4 55399.4 55399.4 55399.4 55399.4 55399.4 55399.4
55399.4 55399.4 55399.4 55399.4 55399.4 55399.4 55399.4 55399.4 55399.4 55399.4 55399.4 55399.4
55399.4 55399.4 55404.9 55404.9 55404.9 55404.9 55404.9 55404.9 55404.9 55404.9 55404.9 55404.9
55404.9 55404.9 55404.9 55404.9 55404.9 55404.9 55404.9 55404.9 55404.9 55404.9 55404.9 55404.9
55410.3 55410.3 55410.3 55410.3 55410.3 55410.3 55410.3 55410.3 55410.3 55410.3 55410.3 55410.3
55410.3 55410.3 55410.3 55410.3 55410.3 55410.3 55410.3 55410.3 55410.3 55410.3
<DataArray type="Float32" Name="rhoMolar_l" NumberOfComponents="1" format="ascii">