3.3.0
DUNE for Multi-{Phase, Component, Scale, Physics, ...} flow and transport in porous media
porousmediumflow/3pwateroil/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 *****************************************************************************/
71#ifndef DUMUX_3P2CNI_MODEL_HH
72#define DUMUX_3P2CNI_MODEL_HH
73
74#include <dune/common/fvector.hh>
75
80
87
88#include "indices.hh"
89#include "model.hh"
90#include "volumevariables.hh"
91#include "localresidual.hh"
92#include "iofields.hh"
93
94namespace Dumux {
95
100template<bool onlyGasPhase>
102{
104
105 static constexpr int numEq() { return 2; }
106 static constexpr int numFluidPhases() { return 3; }
107 static constexpr int numFluidComponents() { return 2; }
108
109 static constexpr bool enableAdvection() { return true; }
110 static constexpr bool enableMolecularDiffusion() { return true; }
111 static constexpr bool enableEnergyBalance() { return false; }
112
113 static constexpr bool onlyGasPhaseCanDisappear() { return onlyGasPhase; }
114};
115
116namespace Properties {
117
118// Create new type tags
119namespace TTag {
120struct ThreePWaterOilNI { using InheritsFrom = std::tuple<PorousMediumFlow>; };
121} // end namespace TTag
122
124// Property values
126
128template<class TypeTag>
129struct ModelTraits<TypeTag, TTag::ThreePWaterOilNI>
130{
131private:
133 static_assert(FluidSystem::numComponents == 2, "Only fluid systems with 2 components are supported by the 3p2cni model!");
134 static_assert(FluidSystem::numPhases == 3, "Only fluid systems with 3 phases are supported by the 3p2cni model!");
135public:
137};
138
145template<class TypeTag>
146struct FluidState<TypeTag, TTag::ThreePWaterOilNI>{
147 private:
150 public:
152};
153
155template<class TypeTag>
156struct LocalResidual<TypeTag, TTag::ThreePWaterOilNI> { using type = ThreePWaterOilLocalResidual<TypeTag>; };
157
159template<class TypeTag>
160struct ReplaceCompEqIdx<TypeTag, TTag::ThreePWaterOilNI> { static constexpr int value = GetPropType<TypeTag, Properties::ModelTraits>::numFluidComponents(); };
161
163template<class TypeTag>
164struct PrimaryVariables<TypeTag, TTag::ThreePWaterOilNI>
165{
166private:
167 using PrimaryVariablesVector = Dune::FieldVector<GetPropType<TypeTag, Properties::Scalar>,
169public:
171};
172
174template<class TypeTag>
175struct OnlyGasPhaseCanDisappear<TypeTag, TTag::ThreePWaterOilNI> { static constexpr bool value = true; };
176
178template<class TypeTag>
179struct VolumeVariables<TypeTag, TTag::ThreePWaterOilNI>
180{
181private:
190
194 template<class BaseTraits, class DT, class EDM, class ETCM>
195 struct NCNITraits : public BaseTraits
196 {
197 using DiffusionType = DT;
198 using EffectiveDiffusivityModel = EDM;
199 using EffectiveThermalConductivityModel = ETCM;
200 };
201
202public:
204};
205
207template<class TypeTag>
208struct EffectiveDiffusivityModel<TypeTag, TTag::ThreePWaterOilNI>
210
211// Define that mole fractions are used in the balance equations per default
212template<class TypeTag>
213struct UseMoles<TypeTag, TTag::ThreePWaterOilNI> { static constexpr bool value = true; };
214
216template<class TypeTag>
218
220template<class TypeTag>
221struct IOFields<TypeTag, TTag::ThreePWaterOilNI> { using type = EnergyIOFields<ThreePWaterOilIOFields>; };
222
223} // end namespace Properties
224} // end namespace Dumux
225
226#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...
A primary variable vector with a state to allow variable switches.
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:49
Traits class encapsulating model specifications.
Definition: common/properties.hh:53
A class helping models to define input and output fields.
Definition: common/properties.hh:63
Definition: common/properties.hh:77
Property whether to use moles or kg as amount unit for balance equations.
Definition: common/properties.hh:88
The component balance index that should be replaced by the total mass/mole balance.
Definition: common/properties.hh:90
The secondary variables within a sub-control volume.
Definition: common/properties.hh:106
The type of the fluid state to use.
Definition: common/properties.hh:157
The employed model for the computation of the effective diffusivity.
Definition: common/properties.hh:163
Model to be used for the calculation of the effective conductivity.
Definition: common/properties.hh:165
reduces the phasestates to threePhases and wnPhaseOnly
Definition: common/properties.hh:196
Relation for the saturation-dependent effective thermal conductivity.
Definition: somerton.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/3p/model.hh:106
The indices for the isothermal 3p2cni model.
Definition: porousmediumflow/3pwateroil/indices.hh:35
Element-wise calculation of the local residual for problems using the ThreePWaterOil fully implicit m...
Definition: porousmediumflow/3pwateroil/localresidual.hh:40
Specifies a number properties of the three-phase two-component model.
Definition: porousmediumflow/3pwateroil/model.hh:102
static constexpr int numFluidComponents()
Definition: porousmediumflow/3pwateroil/model.hh:107
static constexpr int numFluidPhases()
Definition: porousmediumflow/3pwateroil/model.hh:106
static constexpr bool enableMolecularDiffusion()
Definition: porousmediumflow/3pwateroil/model.hh:110
static constexpr bool onlyGasPhaseCanDisappear()
Definition: porousmediumflow/3pwateroil/model.hh:113
static constexpr int numEq()
Definition: porousmediumflow/3pwateroil/model.hh:105
static constexpr bool enableEnergyBalance()
Definition: porousmediumflow/3pwateroil/model.hh:111
static constexpr bool enableAdvection()
Definition: porousmediumflow/3pwateroil/model.hh:109
Definition: porousmediumflow/3pwateroil/model.hh:120
std::tuple< PorousMediumFlow > InheritsFrom
Definition: porousmediumflow/3pwateroil/model.hh:120
Contains the quantities which are are constant within a finite volume in the three-phase,...
Definition: porousmediumflow/3pwateroil/volumevariables.hh:71
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.
Adaption of the fully implicit scheme to the three-phase flow model.
The implicit non-isothermal model.
Adaption of the fully implicit scheme to the tracer transport 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 fully implicit tracer 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.