3.4
DUNE for Multi-{Phase, Component, Scale, Physics, ...} flow and transport in porous media
porousmediumflow/richards/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 *****************************************************************************/
90#ifndef DUMUX_RICHARDS_MODEL_HH
91#define DUMUX_RICHARDS_MODEL_HH
92
93#include <dune/common/fvector.hh>
94
96
105
110
111#include "indices.hh"
112#include "volumevariables.hh"
113#include "iofields.hh"
114#include "localresidual.hh"
115
116namespace Dumux {
117
124template<bool enableDiff>
126{
128
129 static constexpr int numEq() { return 1; }
130 static constexpr int numFluidPhases() { return 2; }
131 static constexpr int numFluidComponents() { return 1; }
132
133 static constexpr bool enableAdvection() { return true; }
134 static constexpr bool enableMolecularDiffusion() { return enableDiff; }
135 static constexpr bool enableEnergyBalance() { return false; }
136};
137
148template<class PV, class FSY, class FST, class SSY, class SST, class PT, class MT, class DT, class EDM>
150{
152 using FluidSystem = FSY;
153 using FluidState = FST;
154 using SolidSystem = SSY;
155 using SolidState = SST;
157 using ModelTraits = MT;
158 using DiffusionType = DT;
160};
161
162// \{
164// properties for the isothermal Richards model.
166namespace Properties {
167
169// Type tags
171
173// Create new type tags
174namespace TTag {
175struct Richards { using InheritsFrom = std::tuple<PorousMediumFlow>; };
176struct RichardsNI { using InheritsFrom = std::tuple<Richards>; };
177} // end namespace TTag
178
180// Properties values
182
184template<class TypeTag>
185struct LocalResidual<TypeTag, TTag::Richards> { using type = RichardsLocalResidual<TypeTag>; };
186
188template<class TypeTag>
189struct IOFields<TypeTag, TTag::Richards>
190{
191private:
192 static constexpr bool enableWaterDiffusionInAir
193 = getPropValue<TypeTag, Properties::EnableWaterDiffusionInAir>();
194
195public:
197};
198
200template<class TypeTag>
202
204template<class TypeTag>
205struct VolumeVariables<TypeTag, TTag::Richards>
206{
207private:
218public:
220};
221
224template<class TypeTag>
225struct EnableWaterDiffusionInAir<TypeTag, TTag::Richards> { static constexpr bool value = false; };
226
228template<class TypeTag>
229struct EffectiveDiffusivityModel<TypeTag, TTag::Richards>
231
233template<class TypeTag>
234struct PrimaryVariables<TypeTag, TTag::Richards>
235{
236private:
237 using PrimaryVariablesVector = Dune::FieldVector<GetPropType<TypeTag, Properties::Scalar>,
239public:
241};
242
248template<class TypeTag>
249struct FluidSystem<TypeTag, TTag::Richards>
250{
254 FluidSystems::H2OAirDefaultPolicy</*fastButSimplifiedRelations=*/true>>;
255};
256
263template<class TypeTag>
264struct FluidState<TypeTag, TTag::Richards>
265{
266private:
269public:
271};
272
274template<class TypeTag>
275struct ThermalConductivityModel<TypeTag, TTag::RichardsNI>
276{
277private:
279public:
281};
282
284// Property values for non-isothermal Richars model
286
288template<class TypeTag>
289struct ModelTraits<TypeTag, TTag::RichardsNI>
290{
291private:
293public:
295};
296
298template<class TypeTag>
299struct IOFields<TypeTag, TTag::RichardsNI>
300{
301 static constexpr bool enableWaterDiffusionInAir
302 = getPropValue<TypeTag, Properties::EnableWaterDiffusionInAir>();
305};
306
308template<class TypeTag>
309struct VolumeVariables<TypeTag, TTag::RichardsNI>
310{
311private:
322
324 template<class BaseTraits, class ETCM>
325 struct NITraits : public BaseTraits { using EffectiveThermalConductivityModel = ETCM; };
326
327public:
329};
330
331// \}
332} // end namespace Properties
333} // end namespace Dumux
334
335#endif
A much simpler (and thus potentially less buggy) version of pure water.
Relation for the saturation-dependent effective thermal conductivity.
Relation for the saturation-dependent effective diffusion coefficient.
Represents all relevant thermodynamic quantities of a multi-phase fluid system assuming immiscibility...
A compositional two-phase fluid system with water and air as components in both, the liquid and the g...
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
Definition: propertysystem.hh:150
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:74
The secondary variables within a sub-control volume.
Definition: common/properties.hh:103
The type of the fluid system to use.
Definition: common/properties.hh:152
The type of the fluid state to use.
Definition: common/properties.hh:154
The employed model for the computation of the effective diffusivity.
Definition: common/properties.hh:160
Model to be used for the calculation of the effective conductivity.
Definition: common/properties.hh:162
Property for turning Richards into extended Richards.
Definition: common/properties.hh:187
A simple version of pure water.
Definition: simpleh2o.hh:50
Relation for the saturation-dependent effective thermal conductivity.
Definition: somerton.hh:60
Relation for the saturation-dependent effective diffusion coefficient.
Definition: diffusivitymillingtonquirk.hh:52
Represents all relevant thermodynamic quantities of a multi-phase fluid system assuming immiscibility...
Definition: immiscible.hh:42
Policy for the H2O-air fluid system.
Definition: h2oair.hh:51
A compositional two-phase fluid system with water and air as components in both, the liquid and the g...
Definition: h2oair.hh:74
A primary variable vector with a state to allow variable switches.
Definition: switchableprimaryvariables.hh:39
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
Index names for the Richards model.
Definition: porousmediumflow/richards/indices.hh:36
Adds I/O fields specific to the Richards model.
Definition: porousmediumflow/richards/iofields.hh:39
Element-wise calculation of the Jacobian matrix for problems using the Richards fully implicit models...
Definition: porousmediumflow/richards/localresidual.hh:58
Specifies a number properties of the Richards model.
Definition: porousmediumflow/richards/model.hh:126
static constexpr bool enableAdvection()
Definition: porousmediumflow/richards/model.hh:133
static constexpr int numEq()
Definition: porousmediumflow/richards/model.hh:129
static constexpr int numFluidPhases()
Definition: porousmediumflow/richards/model.hh:130
static constexpr int numFluidComponents()
Definition: porousmediumflow/richards/model.hh:131
static constexpr bool enableEnergyBalance()
Definition: porousmediumflow/richards/model.hh:135
static constexpr bool enableMolecularDiffusion()
Definition: porousmediumflow/richards/model.hh:134
Traits class for the Richards model.
Definition: porousmediumflow/richards/model.hh:150
SSY SolidSystem
Definition: porousmediumflow/richards/model.hh:154
PV PrimaryVariables
Definition: porousmediumflow/richards/model.hh:151
FST FluidState
Definition: porousmediumflow/richards/model.hh:153
MT ModelTraits
Definition: porousmediumflow/richards/model.hh:157
PT PermeabilityType
Definition: porousmediumflow/richards/model.hh:156
SST SolidState
Definition: porousmediumflow/richards/model.hh:155
DT DiffusionType
Definition: porousmediumflow/richards/model.hh:158
FSY FluidSystem
Definition: porousmediumflow/richards/model.hh:152
EDM EffectiveDiffusivityModel
Definition: porousmediumflow/richards/model.hh:159
Definition: porousmediumflow/richards/model.hh:175
std::tuple< PorousMediumFlow > InheritsFrom
Definition: porousmediumflow/richards/model.hh:175
Definition: porousmediumflow/richards/model.hh:176
std::tuple< Richards > InheritsFrom
Definition: porousmediumflow/richards/model.hh:176
GetPropType< TypeTag, Properties::Scalar > Scalar
Definition: porousmediumflow/richards/model.hh:251
Volume averaged quantities required by the Richards model.
Definition: porousmediumflow/richards/volumevariables.hh:66
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 residual for problems using the n-phase immiscible fully implicit mod...
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.