3.1-git
DUNE for Multi-{Phase, Component, Scale, Physics, ...} flow and transport in porous media
porousmediumflow/3p/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 *****************************************************************************/
56#ifndef DUMUX_3P_MODEL_HH
57#define DUMUX_3P_MODEL_HH
58
60
64
70
71#include "indices.hh"
72#include "volumevariables.hh"
73#include "iofields.hh"
74
75namespace Dumux {
76
82{
84
85 static constexpr int numEq() { return 3; }
86 static constexpr int numFluidPhases() { return 3; }
87 static constexpr int numFluidComponents() { return 3; }
88
89 static constexpr bool enableAdvection() { return true; }
90 static constexpr bool enableMolecularDiffusion() { return false; }
91 static constexpr bool enableEnergyBalance() { return false; }
92};
93
104template<class PV, class FSY, class FST, class SSY, class SST, class PT, class MT>
106{
108 using FluidSystem = FSY;
109 using FluidState = FST;
110 using SolidSystem = SSY;
111 using SolidState = SST;
113 using ModelTraits = MT;
114};
115
116namespace Properties {
117
119// Type tags
121namespace TTag {
123struct ThreeP { using InheritsFrom = std::tuple<PorousMediumFlow>; };
125struct ThreePNI { using InheritsFrom = std::tuple<ThreeP>; };
126} // end namespace TTag
127
129// Properties for the isothermal 3p model
131
133template<class TypeTag>
134struct ModelTraits<TypeTag, TTag::ThreeP>
135{
136 private:
138 static_assert(FluidSystem::numPhases == 3, "Only fluid systems with 3 phases are supported by the 3p model!");
139 static_assert(FluidSystem::numComponents == 3, "Only fluid systems with 3 components are supported by the 3p model!");
140 public:
142};
143
145template<class TypeTag>
146struct LocalResidual<TypeTag, TTag::ThreeP> { using type = ImmiscibleLocalResidual<TypeTag>; };
147
149template<class TypeTag>
150struct VolumeVariables<TypeTag, TTag::ThreeP>
151{
152private:
160
162public:
164};
165
173template<class TypeTag>
174struct FluidState<TypeTag, TTag::ThreeP>
175{
176private:
179public:
181};
182
184template<class TypeTag>
185struct IOFields<TypeTag, TTag::ThreeP> { using type = ThreePIOFields; };
186
188// Properties for the non-isothermal 3p model
190
192template<class TypeTag>
193struct ThermalConductivityModel<TypeTag, TTag::ThreePNI>
194{
195private:
197public:
199};
200
202template<class TypeTag>
203struct IOFields<TypeTag, TTag::ThreePNI> { using type = EnergyIOFields<ThreePIOFields>; };
204
206template<class TypeTag>
207struct ModelTraits<TypeTag, TTag::ThreePNI>
208{
209private:
211 static_assert(FluidSystem::numPhases == 3, "Only fluid systems with 3 phases are supported by the 3p model!");
212 static_assert(FluidSystem::numComponents == 3, "Only fluid systems with 3 components are supported by the 3p model!");
213public:
215};
216
217} // end namespace Properties
218} // end namespace Dumux
219
220#endif
Relation for the saturation-dependent effective thermal conductivity.
Represents all relevant thermodynamic quantities of a multi-phase fluid system assuming immiscibility...
The base class for spatial parameters of multi-phase problems using a fully implicit discretization m...
make the local view function available whenever we use the grid geometry
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
Traits class encapsulating model specifications.
Definition: common/properties.hh:65
A class helping models to define input and output fields.
Definition: common/properties.hh:78
Definition: common/properties.hh:91
The secondary variables within a sub-control volume.
Definition: common/properties.hh:174
The type of the fluid state to use.
Definition: common/properties.hh:225
Model to be used for the calculation of the effective conductivity.
Definition: common/properties.hh:233
Relation for the saturation-dependent effective thermal conductivity.
Definition: thermalconductivitysomerton.hh:60
Represents all relevant thermodynamic quantities of a multi-phase fluid system assuming immiscibility...
Definition: immiscible.hh:42
The common indices for the isothermal three-phase model.
Definition: porousmediumflow/3p/indices.hh:35
Adds I/O fields specific to the three-phase model.
Definition: dumux/porousmediumflow/3p/iofields.hh:37
Specifies a number properties of three-phase models.
Definition: porousmediumflow/3p/model.hh:82
static constexpr int numFluidPhases()
Definition: porousmediumflow/3p/model.hh:86
static constexpr bool enableAdvection()
Definition: porousmediumflow/3p/model.hh:89
static constexpr int numFluidComponents()
Definition: porousmediumflow/3p/model.hh:87
static constexpr int numEq()
Definition: porousmediumflow/3p/model.hh:85
static constexpr bool enableEnergyBalance()
Definition: porousmediumflow/3p/model.hh:91
static constexpr bool enableMolecularDiffusion()
Definition: porousmediumflow/3p/model.hh:90
Traits class for the two-phase model.
Definition: porousmediumflow/3p/model.hh:106
PT PermeabilityType
Definition: porousmediumflow/3p/model.hh:112
FST FluidState
Definition: porousmediumflow/3p/model.hh:109
SST SolidState
Definition: porousmediumflow/3p/model.hh:111
MT ModelTraits
Definition: porousmediumflow/3p/model.hh:113
SSY SolidSystem
Definition: porousmediumflow/3p/model.hh:110
PV PrimaryVariables
Definition: porousmediumflow/3p/model.hh:107
FSY FluidSystem
Definition: porousmediumflow/3p/model.hh:108
The type tags for the isothermal three-phase model.
Definition: porousmediumflow/3p/model.hh:123
std::tuple< PorousMediumFlow > InheritsFrom
Definition: porousmediumflow/3p/model.hh:123
The type tags for the non-isothermal three-phase model.
Definition: porousmediumflow/3p/model.hh:125
std::tuple< ThreeP > InheritsFrom
Definition: porousmediumflow/3p/model.hh:125
Contains the quantities which are constant within a finite volume in the three-phase model.
Definition: porousmediumflow/3p/volumevariables.hh:45
Element-wise calculation of the residual for problems using the n-phase immiscible fully implicit mod...
Definition: porousmediumflow/immiscible/localresidual.hh:39
Adds I/O fields specific to non-isothermal models.
Definition: dumux/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 twop model.
Element-wise calculation of the residual for problems using the n-phase immiscible fully implicit mod...
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.