version 3.11-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-FileCopyrightText: 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:49
Defines all properties used in Dumux.
Relation for the effective diffusion coefficient after Millington and Quirk.
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.
Volume variables for the hyperelasticity model.
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.