3.1-git
DUNE for Multi-{Phase, Component, Scale, Physics, ...} flow and transport in porous media
porousmediumflow/1pnc/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 *****************************************************************************/
57#ifndef DUMUX_1PNC_MODEL_HH
58#define DUMUX_1PNC_MODEL_HH
59
61
64
74
75#include "indices.hh"
76#include "volumevariables.hh"
77#include "iofields.hh"
78
79namespace Dumux {
80
88template<int nComp, bool useM, int repCompEqIdx = nComp>
90{
92
93 static constexpr int numEq() { return nComp; }
94 static constexpr int numFluidPhases() { return 1; }
95 static constexpr int numFluidComponents() { return nComp; }
96 static constexpr int replaceCompEqIdx() { return repCompEqIdx; }
97
98 static constexpr bool useMoles() { return useM; }
99 static constexpr bool enableAdvection() { return true; }
100 static constexpr bool enableMolecularDiffusion() { return true; }
101 static constexpr bool enableEnergyBalance() { return false; }
102};
103
114template<class PV, class FSY, class FST, class SSY, class SST, class PT, class MT>
116{
118 using FluidSystem = FSY;
119 using FluidState = FST;
120 using SolidSystem = SSY;
121 using SolidState = SST;
123 using ModelTraits = MT;
124};
125
126namespace Properties {
127
129// Type tags
131
133// Create new type tags
134namespace TTag {
135struct OnePNC { using InheritsFrom = std::tuple<PorousMediumFlow>; };
136struct OnePNCNI { using InheritsFrom = std::tuple<OnePNC>; };
137} // end namespace TTag
138
140// Properties for the isothermal single phase model
142
144template<class TypeTag>
145struct ReplaceCompEqIdx<TypeTag, TTag::OnePNC> { static constexpr int value = GetPropType<TypeTag, Properties::FluidSystem>::numComponents; };
146
148template<class TypeTag>
149struct BaseModelTraits<TypeTag, TTag::OnePNC>
150{
151private:
153public:
154 using type = OnePNCModelTraits<FluidSystem::numComponents, getPropValue<TypeTag, Properties::UseMoles>(), getPropValue<TypeTag, Properties::ReplaceCompEqIdx>()>;
155};
156template<class TypeTag>
157struct ModelTraits<TypeTag, TTag::OnePNC> { using type = GetPropType<TypeTag, Properties::BaseModelTraits>; };
158
166template<class TypeTag>
167struct FluidState<TypeTag, TTag::OnePNC>
168{
169private:
173public:
175};
176
178template<class TypeTag>
179struct EffectiveDiffusivityModel<TypeTag, TTag::OnePNC>
181
183template<class TypeTag>
184struct UseMoles<TypeTag, TTag::OnePNC> { static constexpr bool value = true; };
185
187template<class TypeTag>
188struct LocalResidual<TypeTag, TTag::OnePNC> { using type = CompositionalLocalResidual<TypeTag>; };
189
191template<class TypeTag>
192struct VolumeVariables<TypeTag, TTag::OnePNC>
193{
194private:
202 static_assert(FSY::numComponents == MT::numFluidComponents(), "Number of components mismatch between model and fluid system");
203 static_assert(FST::numComponents == MT::numFluidComponents(), "Number of components mismatch between model and fluid state");
204 static_assert(FSY::numPhases == MT::numFluidPhases(), "Number of phases mismatch between model and fluid system");
205 static_assert(FST::numPhases == MT::numFluidPhases(), "Number of phases mismatch between model and fluid state");
206
208public:
210};
211
213template<class TypeTag>
214struct IOFields<TypeTag, TTag::OnePNC> { using type = OnePNCIOFields; };
215
217// Properties for the non-isothermal single phase model
219
221template<class TypeTag>
222struct IOFields<TypeTag, TTag::OnePNCNI> { using type = EnergyIOFields<OnePNCIOFields>; };
223
225template<class TypeTag>
226struct ThermalConductivityModel<TypeTag, TTag::OnePNCNI>
228
230template<class TypeTag>
231struct ModelTraits<TypeTag, TTag::OnePNCNI>
232{
233private:
235public:
237};
238
239} // end namespace Properties
240
241template<class OnePNCModelTraits>
243{
244 static constexpr int numConstraintEq() { return 0; }
245};
246
247namespace Properties {
249// Type tags
251namespace TTag {
252struct OnePNCNonEquil { using InheritsFrom = std::tuple<NonEquilibrium, OnePNC>; };
253} // end namespace TTag
254
255
257// Properties for the non-equilibrium OnePNC model
259
260template<class TypeTag>
261struct EquilibriumLocalResidual<TypeTag, TTag::OnePNCNonEquil> { using type = CompositionalLocalResidual<TypeTag>; };
262
264template<class TypeTag>
265struct EquilibriumIOFields<TypeTag, TTag::OnePNCNonEquil> { using type = OnePNCIOFields; };
266
267template<class TypeTag>
268struct ModelTraits<TypeTag, TTag::OnePNCNonEquil>
269{
270private:
272 static constexpr bool enableTNE = getPropValue<TypeTag, Properties::EnableThermalNonEquilibrium>();
273 static constexpr bool enableCNE = getPropValue<TypeTag, Properties::EnableChemicalNonEquilibrium>();
274 static constexpr int numEF = getPropValue<TypeTag, Properties::NumEnergyEqFluid>();
275 static constexpr int numES = getPropValue<TypeTag, Properties::NumEnergyEqSolid>();
276 static constexpr auto nf = getPropValue<TypeTag, Properties::NusseltFormulation>();
277 static constexpr auto ns = getPropValue<TypeTag, Properties::SherwoodFormulation>();
278
280public:
282};
283
284// by default chemical non equilibrium is enabled in the nonequil model, switch that off here
285template<class TypeTag>
286struct EnableChemicalNonEquilibrium<TypeTag, TTag::OnePNCNonEquil> { static constexpr bool value = false; };
287
289template<class TypeTag>
290struct EquilibriumModelTraits<TypeTag, TTag::OnePNCNonEquil>
291{
292private:
294 using EquilibriumTraits = OnePNCModelTraits<FluidSystem::numComponents, getPropValue<TypeTag, Properties::UseMoles>(), getPropValue<TypeTag, Properties::ReplaceCompEqIdx>()>;
295public:
297};
298
300template<class TypeTag>
301struct ThermalConductivityModel<TypeTag, TTag::OnePNCNonEquil>
302{
303private:
305public:
307};
308
310template<class TypeTag>
311struct VolumeVariables<TypeTag, TTag::OnePNCNonEquil>
312{
313private:
321
324public:
326};
327
328} // end namespace Properties
329} // end namespace Dumux
330
331#endif
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...
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
Model traits to be used as a base for nonisothermal, mineralization ... models.
Definition: common/properties.hh:67
A class helping models to define input and output fields.
Definition: common/properties.hh:78
Definition: common/properties.hh:91
Property whether to use moles or kg as amount unit for balance equations.
Definition: common/properties.hh:102
The component balance index that should be replaced by the total mass/mole balance.
Definition: common/properties.hh:104
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
The employed model for the computation of the effective diffusivity.
Definition: common/properties.hh:231
Model to be used for the calculation of the effective conductivity.
Definition: common/properties.hh:233
the formulation of the pressure e.g most wetting first
Definition: common/properties.hh:318
Definition: common/properties.hh:320
Definition: common/properties.hh:324
Definition: common/properties.hh:330
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
The indices for the isothermal one-phase n-component model.
Definition: porousmediumflow/1pnc/indices.hh:38
Adds I/O fields specific to the OnePNC model.
Definition: dumux/porousmediumflow/1pnc/iofields.hh:38
Specifies a number properties of models that consider a single-phase with multiple components.
Definition: porousmediumflow/1pnc/model.hh:90
static constexpr bool enableEnergyBalance()
Definition: porousmediumflow/1pnc/model.hh:101
static constexpr bool useMoles()
Definition: porousmediumflow/1pnc/model.hh:98
static constexpr int numFluidPhases()
Definition: porousmediumflow/1pnc/model.hh:94
static constexpr bool enableMolecularDiffusion()
Definition: porousmediumflow/1pnc/model.hh:100
static constexpr int numFluidComponents()
Definition: porousmediumflow/1pnc/model.hh:95
static constexpr bool enableAdvection()
Definition: porousmediumflow/1pnc/model.hh:99
static constexpr int numEq()
Definition: porousmediumflow/1pnc/model.hh:93
static constexpr int replaceCompEqIdx()
Definition: porousmediumflow/1pnc/model.hh:96
Traits class for the volume variables of the single-phase model.
Definition: porousmediumflow/1pnc/model.hh:116
SST SolidState
Definition: porousmediumflow/1pnc/model.hh:121
FST FluidState
Definition: porousmediumflow/1pnc/model.hh:119
FSY FluidSystem
Definition: porousmediumflow/1pnc/model.hh:118
SSY SolidSystem
Definition: porousmediumflow/1pnc/model.hh:120
PT PermeabilityType
Definition: porousmediumflow/1pnc/model.hh:122
PV PrimaryVariables
Definition: porousmediumflow/1pnc/model.hh:117
MT ModelTraits
Definition: porousmediumflow/1pnc/model.hh:123
Definition: porousmediumflow/1pnc/model.hh:135
std::tuple< PorousMediumFlow > InheritsFrom
Definition: porousmediumflow/1pnc/model.hh:135
Definition: porousmediumflow/1pnc/model.hh:136
std::tuple< OnePNC > InheritsFrom
Definition: porousmediumflow/1pnc/model.hh:136
GetPropType< TypeTag, Properties::BaseModelTraits > type
Definition: porousmediumflow/1pnc/model.hh:157
Definition: porousmediumflow/1pnc/model.hh:243
static constexpr int numConstraintEq()
Definition: porousmediumflow/1pnc/model.hh:244
Definition: porousmediumflow/1pnc/model.hh:252
std::tuple< NonEquilibrium, OnePNC > InheritsFrom
Definition: porousmediumflow/1pnc/model.hh:252
Contains the quantities which are are constant within a finite volume in the one-phase,...
Definition: porousmediumflow/1pnc/volumevariables.hh:50
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 porous-medium flow non-equilibrium models.
Definition: porousmediumflow/nonequilibrium/model.hh:58
This class contains the volume variables required for the modules which require the specific interfac...
Definition: porousmediumflow/nonequilibrium/volumevariables.hh:49
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.
A single-phase, isothermal flow model using the fully implicit scheme.
This specifies models which are able to capture non-equilibrium mass and / or energy transfer.
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 local residual for problems using compositional fully implicit model.
Base class for the model specific class which provides access to all volume averaged quantities.
This class contains the volume variables required for the modules which require the specific interfac...
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.