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.
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.
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...