version 3.8.0
Loading...
Searching...
No Matches
porousmediumflow/mpnc/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// SPDX-FileCopyrightInfo: Copyright © DuMux Project contributors, see AUTHORS.md in root folder
5// SPDX-License-Identifier: GPL-3.0-or-later
6//
90#ifndef DUMUX_MPNC_MODEL_HH
91#define DUMUX_MPNC_MODEL_HH
92
94
100
108
109#include "indices.hh"
110#include "volumevariables.hh"
111#include "iofields.hh"
112#include "localresidual.hh"
113#include "pressureformulation.hh"
114
115namespace Dumux
116{
117
125template<int nPhases, int nComp, MpNcPressureFormulation formulation, bool useM, int repCompEqIdx = nComp>
127{
128 static constexpr int numEq() { return numTransportEq()+numConstraintEq(); }
129 static constexpr int numFluidPhases() { return nPhases; }
130 static constexpr int numFluidComponents() { return nComp; }
131 static constexpr int numTransportEq() { return nComp;}
132 static constexpr int numConstraintEq() { return nPhases; }
133 static constexpr int replaceCompEqIdx() { return repCompEqIdx; }
134
135 static constexpr bool useMoles() { return useM; }
136 static constexpr bool enableAdvection() { return true; }
137 static constexpr bool enableMolecularDiffusion() { return true; }
138 static constexpr bool enableEnergyBalance() { return false; }
139 static constexpr bool enableThermalNonEquilibrium() { return false; }
140 static constexpr bool enableChemicalNonEquilibrium() { return false; }
141 static constexpr bool enableCompositionalDispersion() { return false; }
142 static constexpr bool enableThermalDispersion() { return false; }
143
144 static constexpr MpNcPressureFormulation pressureFormulation() { return formulation; }
145
148};
149
160template<class NonEquilTraits>
161struct MPNCNonequilibriumModelTraits : public NonEquilTraits
162{
163private:
166 using MpNcIndices = MPNCIndices< NonEquilTraits::numFluidPhases(),
167 NonEquilTraits::numTransportEq()+NonEquilTraits::numConstraintEq() >;
168public:
170 NonEquilTraits::numEnergyEqFluid(),
171 NonEquilTraits::numEnergyEqSolid(),
172 NonEquilTraits::numEq() >;
173};
174
186template<class PV, class FSY, class FST, class SSY, class SST, class PT, class MT, class DT, class EDM>
188{
190 using FluidSystem = FSY;
191 using FluidState = FST;
192 using SolidSystem = SSY;
195 using ModelTraits = MT;
196 using DiffusionType = DT;
198};
199
200namespace Properties
201{
202
204// Type tags
207// Create new type tags
208namespace TTag {
209struct MPNC { using InheritsFrom = std::tuple<PorousMediumFlow>; };
210struct MPNCNI { using InheritsFrom = std::tuple<MPNC>; };
211struct MPNCNonequil { using InheritsFrom = std::tuple<NonEquilibrium, MPNC>; };
212} // end namespace TTag
213
215// Properties for the isothermal mpnc model
217
219template<class TypeTag>
220struct LocalResidual<TypeTag, TTag::MPNC> { using type = MPNCLocalResidual<TypeTag>; };
221
223template<class TypeTag>
224struct ModelTraits<TypeTag, TTag::MPNC>
225{
226private:
228public:
229 using type = MPNCModelTraits<FluidSystem::numPhases,
230 FluidSystem::numComponents,
231 getPropValue<TypeTag, Properties::PressureFormulation>(),
232 getPropValue<TypeTag, Properties::UseMoles>(),
233 getPropValue<TypeTag, Properties::ReplaceCompEqIdx>()>;
234};
235
237template<class TypeTag>
238struct FluidState<TypeTag, TTag::MPNC>
239{
240private:
243public:
245};
246
248template<class TypeTag>
266
268template<class TypeTag>
269struct ReplaceCompEqIdx<TypeTag, TTag::MPNC> { static constexpr int value = GetPropType<TypeTag, Properties::FluidSystem>::numComponents; };
271template<class TypeTag>
272struct UseMoles<TypeTag, TTag::MPNC> { static constexpr bool value = true; };
274template<class TypeTag>
275struct EffectiveDiffusivityModel<TypeTag, TTag::MPNC> { using type = DiffusivityMillingtonQuirk<GetPropType<TypeTag, Properties::Scalar>>; };
277template<class TypeTag>
278struct PressureFormulation<TypeTag, TTag::MPNC>
279{
280public:
281 static const MpNcPressureFormulation value = MpNcPressureFormulation::mostWettingFirst;
282};
283
285template<class TypeTag>
286struct IOFields<TypeTag, TTag::MPNC> { using type = MPNCIOFields; };
287
289// Properties for the non-isothermal mpnc model
291
293template<class TypeTag>
294struct ModelTraits<TypeTag, TTag::MPNCNI>
295{
296private:
298 using IsothermalTraits = MPNCModelTraits<FluidSystem::numPhases,
299 FluidSystem::numComponents,
300 getPropValue<TypeTag, Properties::PressureFormulation>(),
301 getPropValue<TypeTag, Properties::UseMoles>(),
302 getPropValue<TypeTag, Properties::ReplaceCompEqIdx>()>;
303public:
305};
306
308template<class TypeTag>
329
331template<class TypeTag>
332struct ThermalConductivityModel<TypeTag, TTag::MPNCNI>
334
336// Properties for the non-equilibrium mpnc model
338
339template<class TypeTag>
340struct EquilibriumLocalResidual<TypeTag, TTag::MPNCNonequil> { using type = MPNCLocalResidual<TypeTag>; };
341
343template<class TypeTag>
344struct EquilibriumIOFields<TypeTag, TTag::MPNCNonequil> { using type = MPNCIOFields; };
345
348template<class TypeTag>
349struct ModelTraits<TypeTag, TTag::MPNCNonequil>
350{
351private:
353 static constexpr bool enableTNE = getPropValue<TypeTag, Properties::EnableThermalNonEquilibrium>();
354 static constexpr bool enableCNE = getPropValue<TypeTag, Properties::EnableChemicalNonEquilibrium>();
355 static constexpr int numEF = getPropValue<TypeTag, Properties::NumEnergyEqFluid>();
356 static constexpr int numES = getPropValue<TypeTag, Properties::NumEnergyEqSolid>();
357 static constexpr auto nf = getPropValue<TypeTag, Properties::NusseltFormulation>();
358 static constexpr auto ns = getPropValue<TypeTag, Properties::SherwoodFormulation>();
359
361public:
363};
364
366template<class TypeTag>
367struct EquilibriumModelTraits<TypeTag, TTag::MPNCNonequil>
368{
369private:
371public:
372 using type = MPNCModelTraits<FluidSystem::numPhases,
373 FluidSystem::numComponents,
374 getPropValue<TypeTag, Properties::PressureFormulation>(),
375 getPropValue<TypeTag, Properties::UseMoles>(),
376 getPropValue<TypeTag, Properties::ReplaceCompEqIdx>()>;
377};
378
380template<class TypeTag>
381struct ThermalConductivityModel<TypeTag, TTag::MPNCNonequil>
383
385template<class TypeTag>
407
408} //end namespace Properties
409} //end namespace Dumux
410
411#endif
Represents all relevant thermodynamic quantities of a multi-phase, multi-component fluid system assum...
Definition compositional.hh:35
Relation for the saturation-dependent effective diffusion coefficient.
Definition diffusivitymillingtonquirk.hh:40
Adds I/O fields specific to the mpnc model.
Definition porousmediumflow/mpnc/iofields.hh:28
MpNc specific details needed to approximately calculate the local defect in the fully implicit scheme...
Definition porousmediumflow/mpnc/localresidual.hh:34
Definition porousmediumflow/mpnc/volumevariables.hh:30
The primary variable and equation indices for the MpNc model.
Definition porousmediumflow/nonequilibrium/indices.hh:24
This class contains the volume variables required for the modules which require the specific interfac...
Definition porousmediumflow/nonequilibrium/volumevariables.hh:37
Relation for the saturation-dependent effective thermal conductivity.
Definition simplefluidlumping.hh:26
Relation for the saturation-dependent effective thermal conductivity.
Definition somerton.hh:48
Defines all properties used in Dumux.
Represents all relevant thermodynamic quantities of a multi-phase, multi-component fluid system assum...
Relation for the saturation-dependent effective diffusion coefficient.
MpNcPressureFormulation
Enumerates the formulations which the MpNc model accepts.
Definition pressureformulation.hh:24
typename GetProp< TypeTag, Property >::type GetPropType
get the type alias defined in the property
Definition propertysystem.hh:296
Definition adapt.hh:17
Represents all relevant thermodynamic quantities of a multi-phase, multi-component fluid system witho...
Element-wise calculation of the local residual for problems using compositional fully implicit model.
The primary variable and equation indices for the MpNc model.
Adds I/O fields specific to the mpnc model.
MpNc specific details needed to approximately calculate the local defect in the fully implicit scheme...
Contains the secondary variables (Quantities which are constant within a finite volume) of the MpNc m...
This specifies models which are able to capture non-equilibrium mass and / or energy transfer.
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.
Adds I/O fields specific to non-isothermal models.
The implicit non-isothermal model.
Defines a type tag and some properties for models using the box scheme.
Enumeration of the formulations accepted by the MpNc model.
Relation for the saturation-dependent effective thermal conductivity.
Relation for the saturation-dependent effective thermal conductivity.
The primary variable and equation indices for the MpNc model.
Definition porousmediumflow/mpnc/indices.hh:27
Specifies a number properties of the m-phase n-component model.
Definition porousmediumflow/mpnc/model.hh:127
static constexpr int numConstraintEq()
Definition porousmediumflow/mpnc/model.hh:132
static constexpr bool enableThermalNonEquilibrium()
Definition porousmediumflow/mpnc/model.hh:139
static constexpr bool enableThermalDispersion()
Definition porousmediumflow/mpnc/model.hh:142
static constexpr bool useMoles()
Definition porousmediumflow/mpnc/model.hh:135
static constexpr bool enableEnergyBalance()
Definition porousmediumflow/mpnc/model.hh:138
static constexpr bool enableMolecularDiffusion()
Definition porousmediumflow/mpnc/model.hh:137
static constexpr bool enableCompositionalDispersion()
Definition porousmediumflow/mpnc/model.hh:141
static constexpr int replaceCompEqIdx()
Definition porousmediumflow/mpnc/model.hh:133
static constexpr int numEq()
Definition porousmediumflow/mpnc/model.hh:128
static constexpr int numFluidPhases()
Definition porousmediumflow/mpnc/model.hh:129
static constexpr int numTransportEq()
Definition porousmediumflow/mpnc/model.hh:131
static constexpr bool enableChemicalNonEquilibrium()
Definition porousmediumflow/mpnc/model.hh:140
static constexpr bool enableAdvection()
Definition porousmediumflow/mpnc/model.hh:136
static constexpr MpNcPressureFormulation pressureFormulation()
Definition porousmediumflow/mpnc/model.hh:144
static constexpr int numFluidComponents()
Definition porousmediumflow/mpnc/model.hh:130
Specifies a number properties of the m-phase n-component model in conjunction with non-equilibrium....
Definition porousmediumflow/mpnc/model.hh:162
Traits class for the mpnc volume variables.
Definition porousmediumflow/mpnc/model.hh:188
DT DiffusionType
Definition porousmediumflow/mpnc/model.hh:196
SSY SolidSystem
Definition porousmediumflow/mpnc/model.hh:192
EDM EffectiveDiffusivityModel
Definition porousmediumflow/mpnc/model.hh:197
SST SolidState
Definition porousmediumflow/mpnc/model.hh:193
FSY FluidSystem
Definition porousmediumflow/mpnc/model.hh:190
MT ModelTraits
Definition porousmediumflow/mpnc/model.hh:195
FST FluidState
Definition porousmediumflow/mpnc/model.hh:191
PT PermeabilityType
Definition porousmediumflow/mpnc/model.hh:194
PV PrimaryVariables
Definition porousmediumflow/mpnc/model.hh:189
Specifies a number properties of porous-medium flow non-equilibrium models.
Definition porousmediumflow/nonequilibrium/model.hh:45
Specifies a number properties of non-isothermal porous medium flow models based on the specifics of a...
Definition porousmediumflow/nonisothermal/model.hh:71
Definition porousmediumflow/mpnc/model.hh:209
std::tuple< PorousMediumFlow > InheritsFrom
Definition porousmediumflow/mpnc/model.hh:209
Definition porousmediumflow/mpnc/model.hh:210
std::tuple< MPNC > InheritsFrom
Definition porousmediumflow/mpnc/model.hh:210
Definition porousmediumflow/mpnc/model.hh:211
std::tuple< NonEquilibrium, MPNC > InheritsFrom
Definition porousmediumflow/mpnc/model.hh:211