3.3.0
DUNE for Multi-{Phase, Component, Scale, Physics, ...} flow and transport in porous media
porousmediumflow/richardsnc/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 *****************************************************************************/
67#ifndef DUMUX_RICHARDSNC_MODEL_HH
68#define DUMUX_RICHARDSNC_MODEL_HH
69
71
79
86
87#include "volumevariables.hh"
88#include "indices.hh"
89#include "iofields.hh"
90
91namespace Dumux {
92
100template<int nComp, bool useMol, int repCompEqIdx = nComp>
102{
104
105 static constexpr int numEq() { return nComp; }
106 static constexpr int numFluidPhases() { return 1; }
107 static constexpr int numFluidComponents() { return nComp; }
108 static constexpr int replaceCompEqIdx() { return repCompEqIdx; }
109
110 static constexpr bool enableAdvection() { return true; }
111 static constexpr bool enableMolecularDiffusion() { return true; }
112 static constexpr bool enableEnergyBalance() { return false; }
113
114 static constexpr bool useMoles() { return useMol; }
115};
116
117namespace Properties {
118
120// Type tags
122
124// Create new type tags
125namespace TTag {
126struct RichardsNC { using InheritsFrom = std::tuple<PorousMediumFlow>; };
127struct RichardsNCNI { using InheritsFrom = std::tuple<RichardsNC>; };
128} // end namespace TTag
130// Property tags
133// Property values
135
137template<class TypeTag>
138struct BaseModelTraits<TypeTag, TTag::RichardsNC>
139{
140private:
142public:
143 using type = RichardsNCModelTraits<FluidSystem::numComponents, getPropValue<TypeTag, Properties::UseMoles>(), getPropValue<TypeTag, Properties::ReplaceCompEqIdx>()>;
144};
145template<class TypeTag>
146struct ModelTraits<TypeTag, TTag::RichardsNC> { using type = GetPropType<TypeTag, Properties::BaseModelTraits>; };
147
149template<class TypeTag>
150struct UseMoles<TypeTag, TTag::RichardsNC> { static constexpr bool value = true; };
151
153template<class TypeTag>
154struct LocalResidual<TypeTag, TTag::RichardsNC> { using type = CompositionalLocalResidual<TypeTag>; };
155
158template<class TypeTag>
159struct ReplaceCompEqIdx<TypeTag, TTag::RichardsNC> { static constexpr int value = 0; };
160
162template<class TypeTag>
163struct VolumeVariables<TypeTag, TTag::RichardsNC>
164{
165private:
173 static_assert(FSY::numComponents == MT::numFluidComponents(), "Number of components mismatch between model and fluid system");
174 static_assert(FST::numComponents == MT::numFluidComponents(), "Number of components mismatch between model and fluid state");
175 static_assert(FSY::numPhases == MT::numFluidPhases(), "Number of phases mismatch between model and fluid system");
176 static_assert(FST::numPhases == MT::numFluidPhases(), "Number of phases mismatch between model and fluid state");
180
181public:
183};
184
187template<class TypeTag>
188struct EnableWaterDiffusionInAir<TypeTag, TTag::RichardsNC> { static constexpr bool value = false; };
189
195template<class TypeTag>
196struct FluidSystem<TypeTag, TTag::RichardsNC>
197{
200};
201
208template<class TypeTag>
209struct FluidState<TypeTag, TTag::RichardsNC>
210{
214};
215
217template<class TypeTag>
218struct IOFields<TypeTag, TTag::RichardsNC> { using type = RichardsNCIOFields; };
219
221template<class TypeTag>
223
225template<class TypeTag>
227
229// Property values for non-isothermal Richards n-components model
231
233template<class TypeTag>
234struct ModelTraits<TypeTag, TTag::RichardsNCNI>
235{
236private:
238public:
240};
241
243template<class TypeTag>
244struct VolumeVariables<TypeTag, TTag::RichardsNCNI>
245{
246private:
257
259 template<class BaseTraits, class ETCM>
260 struct NCNITraits : public BaseTraits { using EffectiveThermalConductivityModel = ETCM; };
261public:
263};
264
265
266} // end namespace Properties
267} // end namespace Dumux
268
269#endif
A much simpler (and thus potentially less buggy) version of pure water.
Setting constant fluid properties via the input file.
Reation for a simple effective thermal conductivity.
Relation for the saturation-dependent effective diffusion coefficient.
Represents all relevant thermodynamic quantities of a multi-phase, multi-component fluid system assum...
A liquid phase consisting of a two components, a main component and a conservative tracer component.
The base class for spatial parameters of one-phase problems using a fully implicit discretization met...
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:53
Model traits to be used as a base for nonisothermal, mineralization ... models.
Definition: common/properties.hh:55
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 system to use.
Definition: common/properties.hh:155
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
Property for turning Richards into extended Richards.
Definition: common/properties.hh:190
A component which returns run time specified values for all fluid properties.
Definition: constant.hh:58
Relation for a simple effective thermal conductivity.
Definition: thermalconductivityaverage.hh:37
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
A liquid phase consisting of a two components, a main component and a conservative tracer component.
Definition: liquidphase2c.hh:46
Element-wise calculation of the local residual for problems using compositional fully implicit model.
Definition: porousmediumflow/compositional/localresidual.hh:43
Specifies a number properties of non-isothermal porous medium flow models based on the specifics of a...
Definition: porousmediumflow/nonisothermal/model.hh:70
Traits class for the Richards model.
Definition: porousmediumflow/richards/model.hh:150
The indices for the isothermal Richards, n-component model.
Definition: porousmediumflow/richardsnc/indices.hh:36
Adds I/O fields specific to the Richards model.
Definition: porousmediumflow/richardsnc/iofields.hh:38
Specifies a number properties of the Richards n-components model.
Definition: porousmediumflow/richardsnc/model.hh:102
static constexpr int numEq()
Definition: porousmediumflow/richardsnc/model.hh:105
static constexpr int numFluidPhases()
Definition: porousmediumflow/richardsnc/model.hh:106
static constexpr bool enableMolecularDiffusion()
Definition: porousmediumflow/richardsnc/model.hh:111
static constexpr bool enableEnergyBalance()
Definition: porousmediumflow/richardsnc/model.hh:112
static constexpr bool useMoles()
Definition: porousmediumflow/richardsnc/model.hh:114
static constexpr bool enableAdvection()
Definition: porousmediumflow/richardsnc/model.hh:110
static constexpr int numFluidComponents()
Definition: porousmediumflow/richardsnc/model.hh:107
static constexpr int replaceCompEqIdx()
Definition: porousmediumflow/richardsnc/model.hh:108
Definition: porousmediumflow/richardsnc/model.hh:126
std::tuple< PorousMediumFlow > InheritsFrom
Definition: porousmediumflow/richardsnc/model.hh:126
Definition: porousmediumflow/richardsnc/model.hh:127
std::tuple< RichardsNC > InheritsFrom
Definition: porousmediumflow/richardsnc/model.hh:127
GetPropType< TypeTag, Properties::BaseModelTraits > type
Definition: porousmediumflow/richardsnc/model.hh:146
GetPropType< TypeTag, Properties::Scalar > Scalar
Definition: porousmediumflow/richardsnc/model.hh:198
GetPropType< TypeTag, Properties::Scalar > Scalar
Definition: porousmediumflow/richardsnc/model.hh:211
GetPropType< TypeTag, Properties::FluidSystem > FluidSystem
Definition: porousmediumflow/richardsnc/model.hh:212
Contains the quantities which are constant within a finite volume in the Richards,...
Definition: porousmediumflow/richardsnc/volumevariables.hh:49
Declares all properties used in Dumux.
Defines a type tag and some properties for models using the box scheme.
The implicit non-isothermal model.
This model implements a variant of the Richards' equation for quasi-twophase flow.
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.