3.5-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 *****************************************************************************/
54#ifndef DUMUX_1PNC_MODEL_HH
55#define DUMUX_1PNC_MODEL_HH
56
58
61
71
72#include "indices.hh"
73#include "volumevariables.hh"
74#include "iofields.hh"
75
76namespace Dumux {
77
85template<int nComp, bool useM, int enableCompDisp, int enableThermDisp, int repCompEqIdx = nComp, class CDM = void>
87{
90
91 static constexpr int numEq() { return nComp; }
92 static constexpr int numFluidPhases() { return 1; }
93 static constexpr int numFluidComponents() { return nComp; }
94 static constexpr int replaceCompEqIdx() { return repCompEqIdx; }
95
96 static constexpr bool useMoles() { return useM; }
97 static constexpr bool enableAdvection() { return true; }
98 static constexpr bool enableMolecularDiffusion() { return true; }
99 static constexpr bool enableCompositionalDispersion() { return enableCompDisp; }
100 static constexpr bool enableThermalDispersion() { return enableThermDisp; }
101 static constexpr bool enableEnergyBalance() { return false; }
102};
103
104namespace Properties {
105
107// Type tags
109
111// Create new type tags
112namespace TTag {
113struct OnePNC { using InheritsFrom = std::tuple<PorousMediumFlow>; };
114struct OnePNCNI { using InheritsFrom = std::tuple<OnePNC>; };
115} // end namespace TTag
116
118// Properties for the isothermal single phase model
120
122template<class TypeTag>
123struct ReplaceCompEqIdx<TypeTag, TTag::OnePNC> { static constexpr int value = GetPropType<TypeTag, Properties::FluidSystem>::numComponents; };
124
126template<class TypeTag>
127struct BaseModelTraits<TypeTag, TTag::OnePNC>
128{
129private:
132public:
133 using type = OnePNCModelTraits<FluidSystem::numComponents,
134 getPropValue<TypeTag, Properties::UseMoles>(),
135 getPropValue<TypeTag, Properties::EnableCompositionalDispersion>(),
136 getPropValue<TypeTag, Properties::EnableThermalDispersion>(),
137 getPropValue<TypeTag, Properties::ReplaceCompEqIdx>(),
138 CDM>;
139};
140template<class TypeTag>
141struct ModelTraits<TypeTag, TTag::OnePNC> { using type = GetPropType<TypeTag, Properties::BaseModelTraits>; };
142
150template<class TypeTag>
151struct FluidState<TypeTag, TTag::OnePNC>
152{
153private:
157public:
159};
160
162template<class TypeTag>
163struct EffectiveDiffusivityModel<TypeTag, TTag::OnePNC>
165
167template<class TypeTag>
168struct UseMoles<TypeTag, TTag::OnePNC> { static constexpr bool value = true; };
169
171template<class TypeTag>
172struct LocalResidual<TypeTag, TTag::OnePNC> { using type = CompositionalLocalResidual<TypeTag>; };
173
175template<class TypeTag>
176struct VolumeVariables<TypeTag, TTag::OnePNC>
177{
178private:
186 static_assert(FSY::numComponents == MT::numFluidComponents(), "Number of components mismatch between model and fluid system");
187 static_assert(FST::numComponents == MT::numFluidComponents(), "Number of components mismatch between model and fluid state");
188 static_assert(FSY::numPhases == MT::numFluidPhases(), "Number of phases mismatch between model and fluid system");
189 static_assert(FST::numPhases == MT::numFluidPhases(), "Number of phases mismatch between model and fluid state");
191
194 template<class BaseTraits, class DT, class EDM>
195 struct NCTraits : public BaseTraits
196 {
197 using DiffusionType = DT;
198 using EffectiveDiffusivityModel = EDM;
199 };
200
201public:
203};
204
206template<class TypeTag>
207struct IOFields<TypeTag, TTag::OnePNC> { using type = OnePNCIOFields; };
208
210// Properties for the non-isothermal single phase model
212
214template<class TypeTag>
215struct IOFields<TypeTag, TTag::OnePNCNI> { using type = EnergyIOFields<OnePNCIOFields>; };
216
218template<class TypeTag>
219struct ThermalConductivityModel<TypeTag, TTag::OnePNCNI>
221
223template<class TypeTag>
224struct ModelTraits<TypeTag, TTag::OnePNCNI>
225{
226private:
229public:
231};
232
233template<class TypeTag>
234struct VolumeVariables<TypeTag, TTag::OnePNCNI>
235{
236private:
244 static_assert(FSY::numComponents == MT::numFluidComponents(), "Number of components mismatch between model and fluid system");
245 static_assert(FST::numComponents == MT::numFluidComponents(), "Number of components mismatch between model and fluid state");
246 static_assert(FSY::numPhases == MT::numFluidPhases(), "Number of phases mismatch between model and fluid system");
247 static_assert(FST::numPhases == MT::numFluidPhases(), "Number of phases mismatch between model and fluid state");
249
253 template<class BaseTraits, class DT, class EDM, class ETCM>
254 struct NCNITraits : public BaseTraits
255 {
256 using DiffusionType = DT;
257 using EffectiveDiffusivityModel = EDM;
258 using EffectiveThermalConductivityModel = ETCM;
259 };
260
261public:
263};
264
265} // end namespace Properties
266
267template<class OnePNCModelTraits>
269{
270 static constexpr int numConstraintEq() { return 0; }
271};
272
273namespace Properties {
275// Type tags
277namespace TTag {
278struct OnePNCNonEquil { using InheritsFrom = std::tuple<NonEquilibrium, OnePNC>; };
279} // end namespace TTag
280
281
283// Properties for the non-equilibrium OnePNC model
285
286template<class TypeTag>
287struct EquilibriumLocalResidual<TypeTag, TTag::OnePNCNonEquil> { using type = CompositionalLocalResidual<TypeTag>; };
288
290template<class TypeTag>
291struct EquilibriumIOFields<TypeTag, TTag::OnePNCNonEquil> { using type = OnePNCIOFields; };
292
293template<class TypeTag>
294struct ModelTraits<TypeTag, TTag::OnePNCNonEquil>
295{
296private:
298 static constexpr bool enableTNE = getPropValue<TypeTag, Properties::EnableThermalNonEquilibrium>();
299 static constexpr bool enableCNE = getPropValue<TypeTag, Properties::EnableChemicalNonEquilibrium>();
300 static constexpr int numEF = getPropValue<TypeTag, Properties::NumEnergyEqFluid>();
301 static constexpr int numES = getPropValue<TypeTag, Properties::NumEnergyEqSolid>();
302 static constexpr auto nf = getPropValue<TypeTag, Properties::NusseltFormulation>();
303 static constexpr auto ns = getPropValue<TypeTag, Properties::SherwoodFormulation>();
304
306public:
308};
309
310// by default chemical non equilibrium is enabled in the nonequil model, switch that off here
311template<class TypeTag>
312struct EnableChemicalNonEquilibrium<TypeTag, TTag::OnePNCNonEquil> { static constexpr bool value = false; };
313
315template<class TypeTag>
316struct EquilibriumModelTraits<TypeTag, TTag::OnePNCNonEquil>
317{
318private:
320 using EquilibriumTraits = OnePNCModelTraits<FluidSystem::numComponents,
321 getPropValue<TypeTag, Properties::UseMoles>(),
322 getPropValue<TypeTag, Properties::EnableCompositionalDispersion>(),
323 getPropValue<TypeTag, Properties::EnableThermalDispersion>(),
324 getPropValue<TypeTag, Properties::ReplaceCompEqIdx>()>;
325public:
327};
328
330template<class TypeTag>
331struct ThermalConductivityModel<TypeTag, TTag::OnePNCNonEquil>
332{
333private:
335public:
337};
338
340template<class TypeTag>
341struct VolumeVariables<TypeTag, TTag::OnePNCNonEquil>
342{
343private:
352
356 template<class BaseTraits, class DT, class EDM, class ETCM>
357 struct NCNITraits : public BaseTraits
358 {
359 using DiffusionType = DT;
360 using EffectiveDiffusivityModel = EDM;
361 using EffectiveThermalConductivityModel = ETCM;
362 };
363
365public:
367};
368
369} // end namespace Properties
370} // end namespace Dumux
371
372#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...
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
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:74
Property whether to use moles or kg as amount unit for balance equations.
Definition: common/properties.hh:85
The component balance index that should be replaced by the total mass/mole balance.
Definition: common/properties.hh:87
The secondary variables within a sub-control volume.
Definition: common/properties.hh:107
The type of the fluid state to use.
Definition: common/properties.hh:164
The employed model for the computation of the effective diffusivity.
Definition: common/properties.hh:170
Model to be used for the calculation of the effective conductivity.
Definition: common/properties.hh:172
the formulation of the pressure e.g most wetting first
Definition: common/properties.hh:257
Definition: common/properties.hh:259
Definition: common/properties.hh:263
Definition: common/properties.hh:269
Relation for a simple effective thermal conductivity.
Definition: thermalconductivityaverage.hh:37
Relation for the saturation-dependent effective diffusion coefficient.
Definition: diffusivitymillingtonquirk.hh:52
Represents all relevant thermodynamic quantities of a multi-phase, multi-component fluid system assum...
Definition: compositional.hh:47
Traits class for the volume variables of the single-phase model.
Definition: porousmediumflow/1p/model.hh:90
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: porousmediumflow/1pnc/iofields.hh:38
Specifies a number properties of models that consider a single-phase with multiple components.
Definition: porousmediumflow/1pnc/model.hh:87
static constexpr int numEq()
Definition: porousmediumflow/1pnc/model.hh:91
static constexpr bool enableAdvection()
Definition: porousmediumflow/1pnc/model.hh:97
static constexpr int numFluidComponents()
Definition: porousmediumflow/1pnc/model.hh:93
static constexpr int numFluidPhases()
Definition: porousmediumflow/1pnc/model.hh:92
static constexpr int replaceCompEqIdx()
Definition: porousmediumflow/1pnc/model.hh:94
static constexpr bool useMoles()
Definition: porousmediumflow/1pnc/model.hh:96
static constexpr bool enableCompositionalDispersion()
Definition: porousmediumflow/1pnc/model.hh:99
CDM CompositionalDispersionModel
Definition: porousmediumflow/1pnc/model.hh:89
static constexpr bool enableMolecularDiffusion()
Definition: porousmediumflow/1pnc/model.hh:98
static constexpr bool enableThermalDispersion()
Definition: porousmediumflow/1pnc/model.hh:100
static constexpr bool enableEnergyBalance()
Definition: porousmediumflow/1pnc/model.hh:101
Definition: porousmediumflow/1pnc/model.hh:113
std::tuple< PorousMediumFlow > InheritsFrom
Definition: porousmediumflow/1pnc/model.hh:113
Definition: porousmediumflow/1pnc/model.hh:114
std::tuple< OnePNC > InheritsFrom
Definition: porousmediumflow/1pnc/model.hh:114
GetPropType< TypeTag, Properties::BaseModelTraits > type
Definition: porousmediumflow/1pnc/model.hh:141
Definition: porousmediumflow/1pnc/model.hh:269
static constexpr int numConstraintEq()
Definition: porousmediumflow/1pnc/model.hh:270
Definition: porousmediumflow/1pnc/model.hh:278
std::tuple< NonEquilibrium, OnePNC > InheritsFrom
Definition: porousmediumflow/1pnc/model.hh:278
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:46
Specifies a number properties of porous-medium flow non-equilibrium models.
Definition: porousmediumflow/nonequilibrium/model.hh:57
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: 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 tracer model.
Element-wise calculation of the local residual for problems using compositional fully implicit model.
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.