3.2-git
DUNE for Multi-{Phase, Component, Scale, Physics, ...} flow and transport in porous media
porousmediumflow/2pnc/model.hh
Go to the documentation of this file.
1// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
2// vi: set et ts=4 sw=4 sts=4:
3/*****************************************************************************
4 * See the file COPYING for full copying permissions. *
5 * *
6 * This program is free software: you can redistribute it and/or modify *
7 * it under the terms of the GNU General Public License as published by *
8 * the Free Software Foundation, either version 3 of the License, or *
9 * (at your option) any later version. *
10 * *
11 * This program is distributed in the hope that it will be useful, *
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
14 * GNU General Public License for more details. *
15 * *
16 * You should have received a copy of the GNU General Public License *
17 * along with this program. If not, see <http://www.gnu.org/licenses/>. *
18 *****************************************************************************/
85#ifndef DUMUX_2PNC_MODEL_HH
86#define DUMUX_2PNC_MODEL_HH
87
88#include <dune/common/fvector.hh>
89
91
95
103
104#include "volumevariables.hh"
105#include "iofields.hh"
106#include "indices.hh"
107
108namespace Dumux {
109
118template<int nComp, bool useMol, bool setMoleFractionForFP, TwoPFormulation formulation, int repCompEqIdx = nComp>
120{
122
123 static constexpr int numEq() { return nComp; }
124 static constexpr int numFluidPhases() { return 2; }
125 static constexpr int numFluidComponents() { return nComp; }
126 static constexpr int replaceCompEqIdx() { return repCompEqIdx; }
127
128 static constexpr bool enableAdvection() { return true; }
129 static constexpr bool enableMolecularDiffusion() { return true; }
130 static constexpr bool enableEnergyBalance() { return false; }
131 static constexpr bool enableThermalNonEquilibrium() { return false; }
132 static constexpr bool enableChemicalNonEquilibrium() { return false; }
133
134 static constexpr bool useMoles() { return useMol; }
135 static constexpr bool setMoleFractionsForFirstPhase() { return setMoleFractionForFP; }
136
137 static constexpr TwoPFormulation priVarFormulation() { return formulation; }
138};
139
140namespace Properties {
142// Type tags
144// Create new type tags
145namespace TTag {
146struct TwoPNC { using InheritsFrom = std::tuple<PorousMediumFlow>; };
147struct TwoPNCNI { using InheritsFrom = std::tuple<TwoPNC>; };
148} // end namespace TTag
149
151// Properties for the isothermal 2pnc model
154template<class TypeTag>
155struct PrimaryVariables<TypeTag, TTag::TwoPNC>
156{
157private:
158 using PrimaryVariablesVector = Dune::FieldVector<GetPropType<TypeTag, Properties::Scalar>,
160public:
162};
163
165template<class TypeTag>
166struct VolumeVariables<TypeTag, TTag::TwoPNC>
167{
168private:
177 static constexpr bool enableIS = getPropValue<TypeTag, Properties::EnableBoxInterfaceSolver>();
178 // class used for scv-wise reconstruction of non-wetting phase saturations
181
184
185 template<class BaseTraits, class DT, class EDM>
186 struct NCTraits : public BaseTraits
187 {
188 using DiffusionType = DT;
189 using EffectiveDiffusivityModel = EDM;
190 };
191
192public:
194};
195
197template<class TypeTag>
198struct BaseModelTraits<TypeTag, TTag::TwoPNC>
199{
200private:
203 static_assert(FluidSystem::numPhases == 2, "Only fluid systems with 2 fluid phases are supported by the 2p-nc model!");
204public:
205 using type = TwoPNCModelTraits<FluidSystem::numComponents,
206 getPropValue<TypeTag, Properties::UseMoles>(),
207 getPropValue<TypeTag, Properties::SetMoleFractionsForFirstPhase>(),
208 getPropValue<TypeTag, Properties::Formulation>(), getPropValue<TypeTag, Properties::ReplaceCompEqIdx>()>;
209};
210template<class TypeTag>
211struct ModelTraits<TypeTag, TTag::TwoPNC> { using type = GetPropType<TypeTag, Properties::BaseModelTraits>; };
212
214template<class TypeTag>
215struct IOFields<TypeTag, TTag::TwoPNC> { using type = TwoPNCIOFields; };
216
217template<class TypeTag>
218struct LocalResidual<TypeTag, TTag::TwoPNC> { using type = CompositionalLocalResidual<TypeTag>; };
219
220template<class TypeTag>
221struct ReplaceCompEqIdx<TypeTag, TTag::TwoPNC> { static constexpr int value = GetPropType<TypeTag, Properties::FluidSystem>::numComponents; };
222
224template<class TypeTag>
225struct Formulation<TypeTag, TTag::TwoPNC>
226{ static constexpr auto value = TwoPFormulation::p0s1; };
227
228template<class TypeTag>
229struct SetMoleFractionsForFirstPhase<TypeTag, TTag::TwoPNC> { static constexpr bool value = true; };
230template<class TypeTag>
231struct UseMoles<TypeTag, TTag::TwoPNC> { static constexpr bool value = true; };
232
234template<class TypeTag>
236
238template<class TypeTag>
239struct FluidState<TypeTag, TTag::TwoPNC>
240{
241private:
244public:
246};
247
249// Properties for the non-isothermal 2pnc model
251
253template<class TypeTag>
254struct ModelTraits<TypeTag, TTag::TwoPNCNI>
255{
256private:
258public:
260};
261
263template<class TypeTag>
264struct VolumeVariables<TypeTag, TTag::TwoPNCNI>
265{
266private:
275 static constexpr bool enableIS = getPropValue<TypeTag, Properties::EnableBoxInterfaceSolver>();
276 // class used for scv-wise reconstruction of non-wetting phase saturations
279
283
284 template<class BaseTraits, class DT, class EDM, class ETCM>
285 struct NCNITraits : public BaseTraits
286 {
287 using DiffusionType = DT;
288 using EffectiveDiffusivityModel = EDM;
289 using EffectiveThermalConductivityModel = ETCM;
290 };
291public:
293};
294
296template<class TypeTag>
297struct IOFields<TypeTag, TTag::TwoPNCNI> { using type = EnergyIOFields<TwoPNCIOFields>; };
298
300template<class TypeTag>
301struct ThermalConductivityModel<TypeTag, TTag::TwoPNCNI>
302{
303private:
305public:
307};
308
309} // end namespace Properties
310} // end namespace Dumux
311
312#endif
Relation for the saturation-dependent effective thermal conductivity.
Relation for the saturation-dependent effective diffusion coefficient.
The base class for spatial parameters of multi-phase problems using a fully implicit discretization m...
Defines an enumeration for the formulations accepted by the two-phase model.
A primary variable vector with a state to allow variable switches.
TwoPFormulation
Enumerates the formulations which the two-phase model accepts.
Definition: formulation.hh:35
@ p0s1
first phase pressure and second phase saturation as primary variables
Definition: adapt.hh:29
typename Properties::Detail::GetPropImpl< TypeTag, Property >::type::type GetPropType
get the type alias defined in the property (equivalent to old macro GET_PROP_TYPE(....
Definition: propertysystem.hh:149
A vector of primary variables.
Definition: common/properties.hh:60
Traits class encapsulating model specifications.
Definition: common/properties.hh:66
Model traits to be used as a base for nonisothermal, mineralization ... models.
Definition: common/properties.hh:68
A class helping models to define input and output fields.
Definition: common/properties.hh:76
Definition: common/properties.hh:89
Property whether to use moles or kg as amount unit for balance equations.
Definition: common/properties.hh:100
The component balance index that should be replaced by the total mass/mole balance.
Definition: common/properties.hh:102
The secondary variables within a sub-control volume.
Definition: common/properties.hh:118
The type of the fluid state to use.
Definition: common/properties.hh:169
The employed model for the computation of the effective diffusivity.
Definition: common/properties.hh:175
Model to be used for the calculation of the effective conductivity.
Definition: common/properties.hh:177
The formulation of the model.
Definition: common/properties.hh:181
Set the mole fraction in the wetting or non-wetting phase.
Definition: common/properties.hh:196
Relation for the saturation-dependent effective thermal conductivity.
Definition: thermalconductivitysomerton.hh:60
Relation for the saturation-dependent effective diffusion coefficient.
Definition: diffusivitymillingtonquirk.hh:51
Represents all relevant thermodynamic quantities of a multi-phase, multi-component fluid system assum...
Definition: compositional.hh:47
Traits class for the two-phase model.
Definition: porousmediumflow/2p/model.hh:118
Class that computes the non-wetting saturation in an scv from the saturation at the global degree of ...
Definition: saturationreconstruction.hh:43
The indices for the isothermal two-phase n-component model.
Definition: porousmediumflow/2pnc/indices.hh:35
Adds I/O fields specific to the TwoPNC model.
Definition: porousmediumflow/2pnc/iofields.hh:39
Specifies a number properties of two-phase n-component models.
Definition: porousmediumflow/2pnc/model.hh:120
static constexpr int numFluidPhases()
Definition: porousmediumflow/2pnc/model.hh:124
static constexpr int numEq()
Definition: porousmediumflow/2pnc/model.hh:123
static constexpr int replaceCompEqIdx()
Definition: porousmediumflow/2pnc/model.hh:126
static constexpr bool enableAdvection()
Definition: porousmediumflow/2pnc/model.hh:128
static constexpr bool enableMolecularDiffusion()
Definition: porousmediumflow/2pnc/model.hh:129
static constexpr bool enableThermalNonEquilibrium()
Definition: porousmediumflow/2pnc/model.hh:131
static constexpr int numFluidComponents()
Definition: porousmediumflow/2pnc/model.hh:125
static constexpr bool useMoles()
Definition: porousmediumflow/2pnc/model.hh:134
static constexpr bool enableChemicalNonEquilibrium()
Definition: porousmediumflow/2pnc/model.hh:132
static constexpr TwoPFormulation priVarFormulation()
Definition: porousmediumflow/2pnc/model.hh:137
static constexpr bool setMoleFractionsForFirstPhase()
Definition: porousmediumflow/2pnc/model.hh:135
static constexpr bool enableEnergyBalance()
Definition: porousmediumflow/2pnc/model.hh:130
Definition: porousmediumflow/2pnc/model.hh:146
std::tuple< PorousMediumFlow > InheritsFrom
Definition: porousmediumflow/2pnc/model.hh:146
Definition: porousmediumflow/2pnc/model.hh:147
std::tuple< TwoPNC > InheritsFrom
Definition: porousmediumflow/2pnc/model.hh:147
GetPropType< TypeTag, Properties::BaseModelTraits > type
Definition: porousmediumflow/2pnc/model.hh:211
Contains the quantities which are are constant within a finite volume in the two-phase,...
Definition: porousmediumflow/2pnc/volumevariables.hh:58
Element-wise calculation of the local residual for problems using compositional fully implicit model.
Definition: porousmediumflow/compositional/localresidual.hh:43
A primary variable vector with a state to allow variable switches.
Definition: switchableprimaryvariables.hh:38
Adds I/O fields specific to non-isothermal models.
Definition: porousmediumflow/nonisothermal/iofields.hh:39
Specifies a number properties of non-isothermal porous medium flow models based on the specifics of a...
Definition: porousmediumflow/nonisothermal/model.hh:70
Declares all properties used in Dumux.
Defines a type tag and some properties for models using the box scheme.
The implicit non-isothermal model.
Adds I/O fields specific to non-isothermal models.
Adds I/O fields specific to the tracer model.
Element-wise calculation of the local residual for problems using compositional fully implicit model.
Base class for the model specific class which provides access to all volume averaged quantities.
Defines the indices used by the non-isothermal two-phase two-component model.
Defines the primary variable and equation indices used by the isothermal tracer model.