3.6-git
DUNE for Multi-{Phase, Component, Scale, Physics, ...} flow and transport in porous media
porenetwork/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 *****************************************************************************/
56#ifndef DUMUX_PNM1PNC_MODEL_HH
57#define DUMUX_PNM1PNC_MODEL_HH
58
60
62
66
70
77
78#include "iofields.hh"
79#include "volumevariables.hh"
80
81namespace Dumux::Properties {
83// Type tags
85
87// Create new type tags
88namespace TTag {
89struct PNMOnePNC { using InheritsFrom = std::tuple<PoreNetworkModel, OnePNC>; };
90
92struct PNMOnePNCNI { using InheritsFrom = std::tuple<PNMOnePNC>; };
93} // end namespace TTag
94
96// properties for the isothermal single phase model
98
101template<class TypeTag>
102struct SpatialParams<TypeTag, TTag::PNMOnePNC>
103{
104private:
107public:
109};
110
112template<class TypeTag>
113struct AdvectionType<TypeTag, TTag::PNMOnePNC>
114{
115private:
117 using TransmissibilityLaw = PoreNetwork::TransmissibilityPatzekSilin<Scalar, false/*considerPoreBodyResistance*/>;
118public:
120};
121
123template<class TypeTag>
124struct ReplaceCompEqIdx<TypeTag, TTag::PNMOnePNC>
125{
126private:
128public:
129 static constexpr auto value = FluidSystem::numComponents;
130};
131
133template<class TypeTag>
134struct MolecularDiffusionType<TypeTag, TTag::PNMOnePNC>
135{
136private:
139public:
140 using type = PoreNetwork::PNMFicksLaw<Scalar, ModelTraits::numFluidPhases(), ModelTraits::numFluidComponents()>;
141};
142
144template<class TypeTag>
145struct VolumeVariables<TypeTag, TTag::PNMOnePNC>
146{
147private:
155 static_assert(FSY::numComponents == MT::numFluidComponents(), "Number of components mismatch between model and fluid system");
156 static_assert(FST::numComponents == MT::numFluidComponents(), "Number of components mismatch between model and fluid state");
157 static_assert(FSY::numPhases == MT::numFluidPhases(), "Number of phases mismatch between model and fluid system");
158 static_assert(FST::numPhases == MT::numFluidPhases(), "Number of phases mismatch between model and fluid state");
160
163 template<class BaseTraits, class DT, class EDM>
164 struct NCTraits : public BaseTraits
165 {
166 using DiffusionType = DT;
167 using EffectiveDiffusivityModel = EDM;
168 };
169
170public:
172};
173
175template<class TypeTag>
176struct IOFields<TypeTag, TTag::PNMOnePNC>
178
179template<class TypeTag>
180struct UseMoles<TypeTag, TTag::PNMOnePNC> { static constexpr bool value = true; };
181
183// Property values for isothermal model required for the general non-isothermal model
185
187template<class TypeTag>
188struct ModelTraits<TypeTag, TTag::PNMOnePNCNI>
189{
190private:
192 using CompositionalDispersionModel = GetPropType<TypeTag, Properties::CompositionalDispersionModel>;
195 getPropValue<TypeTag, Properties::EnableCompositionalDispersion>(),
196 getPropValue<TypeTag, Properties::EnableThermalDispersion>(),
197 getPropValue<TypeTag, Properties::ReplaceCompEqIdx>(),
198 CompositionalDispersionModel>;
199public:
201};
202
203template<class TypeTag>
204struct VolumeVariables<TypeTag, TTag::PNMOnePNCNI>
205{
206private:
214 static_assert(FSY::numComponents == MT::numFluidComponents(), "Number of components mismatch between model and fluid system");
215 static_assert(FST::numComponents == MT::numFluidComponents(), "Number of components mismatch between model and fluid state");
216 static_assert(FSY::numPhases == MT::numFluidPhases(), "Number of phases mismatch between model and fluid system");
217 static_assert(FST::numPhases == MT::numFluidPhases(), "Number of phases mismatch between model and fluid state");
219
223 template<class BaseTraits, class DT, class EDM, class ETCM>
224 struct NCNITraits : public BaseTraits
225 {
226 using DiffusionType = DT;
227 using EffectiveDiffusivityModel = EDM;
228 using EffectiveThermalConductivityModel = ETCM;
229 };
230
231public:
233};
234
235template<class TypeTag>
236struct IOFields<TypeTag, TTag::PNMOnePNCNI>
237{
238private:
241public:
243};
244
245template<class TypeTag>
246struct ThermalConductivityModel<TypeTag, TTag::PNMOnePNCNI>
247{
249};
250
251// template<class TypeTag>
252// struct HeatConductionType<TypeTag, TTag::PNMOnePNCNI>
253// {
254// TODO uncomment this as soon as there is a generalized approach for component enthalpies in all fluid systems
255// using type = PoreNetwork::PNMFouriersLaw<GetPropType<TypeTag, MolecularDiffusionType>>;
256// }; //!< Use Fourier's law and also consider enthalpy transport by molecular diffusion
257
258} // end namespace Dumux::Properties
259#endif
Relation for the saturation-dependent effective diffusion coefficient.
Implementation of the single-phase transmissibility laws for throats.
Represents all relevant thermodynamic quantities of a multi-phase fluid system assuming immiscibility...
typename GetProp< TypeTag, Property >::type GetPropType
get the type alias defined in the property
Definition: propertysystem.hh:180
Definition: common/properties.hh:37
Traits class encapsulating model specifications.
Definition: common/properties.hh:51
A class helping models to define input and output fields.
Definition: common/properties.hh:61
Property whether to use moles or kg as amount unit for balance equations.
Definition: common/properties.hh:83
The component balance index that should be replaced by the total mass/mole balance.
Definition: common/properties.hh:85
The secondary variables within a sub-control volume.
Definition: common/properties.hh:105
The type for the calculation the advective fluxes.
Definition: common/properties.hh:139
The type for the calculation of the molecular diffusion fluxes.
Definition: common/properties.hh:143
The type of the spatial parameters object.
Definition: common/properties.hh:158
The employed model for the computation of the effective diffusivity.
Definition: common/properties.hh:168
Model to be used for the calculation of the effective conductivity.
Definition: common/properties.hh:170
Hagen–Poiseuille-type flux law to describe the advective flux for pore-network models.
Definition: advection.hh:46
Specialization of Fick's Law for the pore-network model.
Definition: flux/porenetwork/fickslaw.hh:42
Relation for a simple effective thermal conductivity.
Definition: thermalconductivityaverage.hh:37
Single-phase flow throat transmissibility based on Patzek & Silin (2001) https://doi....
Definition: transmissibility1p.hh:126
The default class for spatial parameters for single-phase pore-network models.
Definition: porenetwork/1p/spatialparams.hh:56
Adds output fields specific to the PNM 1pnc model.
Definition: porenetwork/1pnc/iofields.hh:38
Definition: porenetwork/1pnc/model.hh:89
std::tuple< PoreNetworkModel, OnePNC > InheritsFrom
Definition: porenetwork/1pnc/model.hh:89
The type tags for the corresponding non-isothermal problems.
Definition: porenetwork/1pnc/model.hh:92
std::tuple< PNMOnePNC > InheritsFrom
Definition: porenetwork/1pnc/model.hh:92
Contains the quantities which are are constant within a finite volume in the one-phase,...
Definition: porenetwork/1pnc/volumevariables.hh:44
Traits class for the volume variables of the single-phase model.
Definition: porousmediumflow/1p/model.hh:86
Specifies a number properties of models that consider a single-phase with multiple components.
Definition: porousmediumflow/1pnc/model.hh:82
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 common properties required for all pore-network models.
A one-phase-flow, isothermal pore-network model using the fully implicit scheme.
Adaption of the fully implicit model to the one-phase n-component flow model.
The implicit non-isothermal model.
This file contains the data which is required to calculate diffusive mass fluxes due to molecular dif...
Adds I/O fields specific to the OnePNC 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.
Python wrapper for volume variables (finite volume schemes)
Defines the indices used by the non-isothermal two-phase two-component model.
The spatial parameters for single-phase pore-network models.