version 3.10-dev
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// SPDX-FileCopyrightInfo: Copyright © DuMux Project contributors, see AUTHORS.md in root folder
5// SPDX-License-Identifier: GPL-3.0-or-later
6//
44#ifndef DUMUX_PNM1PNC_MODEL_HH
45#define DUMUX_PNM1PNC_MODEL_HH
46
48
50
54
58
65
66#include "iofields.hh"
67#include "volumevariables.hh"
68
69namespace Dumux::Properties {
71// Type tags
73
75// Create new type tags
76namespace TTag {
77struct PNMOnePNC { using InheritsFrom = std::tuple<PoreNetworkModel, OnePNC>; };
78
80struct PNMOnePNCNI { using InheritsFrom = std::tuple<PNMOnePNC>; };
81} // end namespace TTag
82
84// properties for the isothermal single phase model
86
89template<class TypeTag>
90struct SpatialParams<TypeTag, TTag::PNMOnePNC>
91{
92private:
95public:
97};
98
100template<class TypeTag>
101struct AdvectionType<TypeTag, TTag::PNMOnePNC>
102{
103private:
105 using TransmissibilityLaw = PoreNetwork::TransmissibilityPatzekSilin<Scalar, false/*considerPoreBodyResistance*/>;
106public:
108};
109
111template<class TypeTag>
112struct ReplaceCompEqIdx<TypeTag, TTag::PNMOnePNC>
113{
114private:
116public:
117 static constexpr auto value = FluidSystem::numComponents;
118};
119
121template<class TypeTag>
122struct MolecularDiffusionType<TypeTag, TTag::PNMOnePNC>
123{
124private:
127public:
128 using type = PoreNetwork::PNMFicksLaw<Scalar, ModelTraits::numFluidPhases(), ModelTraits::numFluidComponents()>;
129};
130
132template<class TypeTag>
133struct VolumeVariables<TypeTag, TTag::PNMOnePNC>
134{
135private:
143 static_assert(FSY::numComponents == MT::numFluidComponents(), "Number of components mismatch between model and fluid system");
144 static_assert(FST::numComponents == MT::numFluidComponents(), "Number of components mismatch between model and fluid state");
145 static_assert(FSY::numPhases == MT::numFluidPhases(), "Number of phases mismatch between model and fluid system");
146 static_assert(FST::numPhases == MT::numFluidPhases(), "Number of phases mismatch between model and fluid state");
148
151 template<class BaseTraits, class DT, class EDM>
152 struct NCTraits : public BaseTraits
153 {
154 using DiffusionType = DT;
155 using EffectiveDiffusivityModel = EDM;
156 };
157
158public:
160};
161
163template<class TypeTag>
164struct IOFields<TypeTag, TTag::PNMOnePNC>
166
167template<class TypeTag>
168struct UseMoles<TypeTag, TTag::PNMOnePNC> { static constexpr bool value = true; };
169
171// Property values for isothermal model required for the general non-isothermal model
173
175template<class TypeTag>
176struct ModelTraits<TypeTag, TTag::PNMOnePNCNI>
177{
178private:
180 using CompositionalDispersionModel = GetPropType<TypeTag, Properties::CompositionalDispersionModel>;
183 getPropValue<TypeTag, Properties::EnableCompositionalDispersion>(),
184 getPropValue<TypeTag, Properties::EnableThermalDispersion>(),
185 getPropValue<TypeTag, Properties::ReplaceCompEqIdx>(),
186 CompositionalDispersionModel>;
187public:
189};
190
191template<class TypeTag>
192struct VolumeVariables<TypeTag, TTag::PNMOnePNCNI>
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");
207
211 template<class BaseTraits, class DT, class EDM, class ETCM>
212 struct NCNITraits : public BaseTraits
213 {
214 using DiffusionType = DT;
215 using EffectiveDiffusivityModel = EDM;
216 using EffectiveThermalConductivityModel = ETCM;
217 };
218
219public:
221};
222
223template<class TypeTag>
224struct IOFields<TypeTag, TTag::PNMOnePNCNI>
225{
226private:
229public:
231};
232
233template<class TypeTag>
234struct ThermalConductivityModel<TypeTag, TTag::PNMOnePNCNI>
235{
237};
238
239// template<class TypeTag>
240// struct HeatConductionType<TypeTag, TTag::PNMOnePNCNI>
241// {
242// TODO uncomment this as soon as there is a generalized approach for component enthalpies in all fluid systems
243// using type = PoreNetwork::PNMFouriersLaw<GetPropType<TypeTag, MolecularDiffusionType>>;
244// }; //!< Use Fourier's law and also consider enthalpy transport by molecular diffusion
245
246} // end namespace Dumux::Properties
247#endif
Adds I/O fields specific to non-isothermal models.
Definition: porousmediumflow/nonisothermal/iofields.hh:27
Hagen–Poiseuille-type flux law to describe the advective flux for pore-network models.
Definition: advection.hh:34
The default class for spatial parameters for single-phase pore-network models.
Definition: porenetwork/1p/spatialparams.hh:44
Adds output fields specific to the PNM 1pnc model.
Definition: porenetwork/1pnc/iofields.hh:26
Contains the quantities which are are constant within a finite volume in the one-phase,...
Definition: porenetwork/1pnc/volumevariables.hh:32
Specialization of Fick's Law for the pore-network model.
Definition: flux/porenetwork/fickslaw.hh:30
Single-phase flow throat transmissibility based on Patzek & Silin (2001) https://doi....
Definition: transmissibility1p.hh:114
Effective thermal conductivity based on weighted arithmetic average.
Definition: thermalconductivityaverage.hh:43
Defines all properties used in Dumux.
This file contains the data which is required to calculate diffusive mass fluxes due to molecular dif...
typename GetProp< TypeTag, Property >::type GetPropType
get the type alias defined in the property
Definition: propertysystem.hh:296
Represents all relevant thermodynamic quantities of a multi-phase fluid system assuming immiscibility...
The energy balance equation for a porous solid.
Definition: common/properties.hh:26
A one-phase-flow, isothermal pore-network model using the fully implicit scheme.
The spatial parameters for single-phase pore-network models.
Defines common properties required for all pore-network models.
Adds I/O fields specific to the OnePNC model.
Adaption of the fully implicit model to the one-phase n-component flow model.
Element-wise calculation of the local residual for problems using compositional fully implicit model.
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.
Adds I/O fields specific to the tracer model.
Python wrapper for volume variables (finite volume schemes)
Specifies a number properties of models that consider a single-phase with multiple components.
Definition: porousmediumflow/1pnc/model.hh:81
Traits class for the volume variables of the single-phase model.
Definition: porousmediumflow/1p/model.hh:83
Specifies a number properties of non-isothermal porous medium flow models based on the specifics of a...
Definition: porousmediumflow/nonisothermal/model.hh:76
Definition: porenetwork/1pnc/model.hh:77
std::tuple< PoreNetworkModel, OnePNC > InheritsFrom
Definition: porenetwork/1pnc/model.hh:77
The type tags for the corresponding non-isothermal problems.
Definition: porenetwork/1pnc/model.hh:80
std::tuple< PNMOnePNC > InheritsFrom
Definition: porenetwork/1pnc/model.hh:80
Implementation of the single-phase transmissibility laws for throats.