version 3.9
porenetwork/2pnc/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//
45#ifndef DUMUX_PNM_2P_NC_MODEL_HH
46#define DUMUX_PNM_2P_NC_MODEL_HH
47
51
55
62
67
68
69#include "iofields.hh"
70#include "volumevariables.hh"
71
72namespace Dumux::Properties{
73// \{
75// Type tags
77
79// Create new type tags
80namespace TTag {
81struct PNMTwoPNC { using InheritsFrom = std::tuple<PoreNetworkModel, TwoPNC>; };
82
84struct PNMTwoPNCNI { using InheritsFrom = std::tuple<PNMTwoPNC>; };
85} // end namespace TTag
86
88// Property tags
90
92template<class TypeTag>
93struct VolumeVariables<TypeTag, TTag::PNMTwoPNC>
94{
95private:
104 static constexpr bool enableIS = getPropValue<TypeTag, Properties::EnableBoxInterfaceSolver>();
105 // class used for scv-wise reconstruction of nonwetting phase saturations
108
111
112 template<class BaseTraits, class DT, class EDM>
113 struct NCTraits : public BaseTraits
114 {
115 using DiffusionType = DT;
116 using EffectiveDiffusivityModel = EDM;
117 };
118public:
120};
121
123template<class TypeTag>
124struct PrimaryVariables<TypeTag, TTag::PNMTwoPNC>
125{
126private:
127 using PrimaryVariablesVector = Dune::FieldVector<GetPropType<TypeTag, Properties::Scalar>,
129public:
131};
132
135template<class TypeTag>
136struct SpatialParams<TypeTag, TTag::PNMTwoPNC>
137{
138private:
142public:
144};
145
147template<class TypeTag>
148struct AdvectionType<TypeTag, TTag::PNMTwoPNC>
149{
150private:
155
156public:
158};
159
160template<class TypeTag>
161struct IOFields<TypeTag, TTag::PNMTwoPNC> { using type = PoreNetwork::TwoPNCIOFields; };
162
164template<class TypeTag>
165struct GridFluxVariablesCache<TypeTag, TTag::PNMTwoPNC>
166{
167private:
168 static constexpr bool enableCache = getPropValue<TypeTag, Properties::EnableGridFluxVariablesCache>();
171 using FluxVariablesCache = GetPropTypeOr<TypeTag,
172 Properties::FluxVariablesCache, FluxVariablesCaching::EmptyCache<Scalar>
173 >;
175public:
177};
178
180template<class TypeTag>
181struct FluxVariablesCache<TypeTag, TTag::PNMTwoPNC>
183
185template<class TypeTag>
186struct MolecularDiffusionType<TypeTag, TTag::PNMTwoPNC>
187{
188private:
191public:
192 using type = PoreNetwork::PNMFicksLaw<Scalar, ModelTraits::numFluidPhases(), ModelTraits::numFluidComponents()>;
193};
194
196// Property values for isothermal model required for the general non-isothermal model
198template<class TypeTag>
199struct ModelTraits<TypeTag, TTag::PNMTwoPNCNI>
200{
201private:
204 static_assert(FluidSystem::numPhases == 2, "Only fluid systems with 2 fluid phases are supported by the 2p-nc model!");
205 using IsothermalTraits = TwoPNCModelTraits<FluidSystem::numComponents,
206 getPropValue<TypeTag, Properties::UseMoles>(),
207 getPropValue<TypeTag, Properties::SetMoleFractionsForFirstPhase>(),
208 getPropValue<TypeTag, Properties::Formulation>(), getPropValue<TypeTag, Properties::ReplaceCompEqIdx>()>;
209public:
211};
212
214template<class TypeTag>
215struct VolumeVariables<TypeTag, TTag::PNMTwoPNCNI>
216{
217private:
226 static constexpr bool enableIS = getPropValue<TypeTag, Properties::EnableBoxInterfaceSolver>();
227 // class used for scv-wise reconstruction of nonwetting phase saturations
230
234
235 template<class BaseTraits, class DT, class EDM, class ETCM>
236 struct NCNITraits : public BaseTraits
237 {
238 using DiffusionType = DT;
239 using EffectiveDiffusivityModel = EDM;
240 using EffectiveThermalConductivityModel = ETCM;
241 };
242public:
244};
245
247template<class TypeTag>
248struct IOFields<TypeTag, TTag::PNMTwoPNCNI> { using type = EnergyIOFields<PoreNetwork::TwoPNCIOFields>; };
249
250// Somerton is used as default model to compute the effective thermal heat conductivity
251template<class TypeTag>
252struct ThermalConductivityModel<TypeTag, TTag::PNMTwoPNCNI>
253{
255};
256
257} // end namespace Dumux::Properties
258
259#endif
This file contains the data which is required to calculate the fluxes of the pore network model over ...
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
Implementation of capillary pressure curves for multiple pore body geometries.
Definition: multishapelocalrules.hh:43
Specialization of Fick's Law for the pore-network model.
Definition: flux/porenetwork/fickslaw.hh:30
Flux variable caches on a gridview.
Definition: porenetwork/2p/gridfluxvariablescache.hh:47
Single-phase flow throat transmissibility based on Patzek & Silin (2001) https://doi....
Definition: transmissibility1p.hh:114
The default class for spatial parameters for two-phase pore-network models.
Definition: porenetwork/2p/spatialparams.hh:227
Flux variables cache for the two-phase-flow PNM Store data required for flux calculation.
Definition: porenetwork/2p/fluxvariablescache.hh:29
Adds output fields specific to the PNM 2pnc model.
Definition: porenetwork/2pnc/iofields.hh:25
Contains the quantities which are constant within a finite volume in the two-phase n-components model...
Definition: porenetwork/2pnc/volumevariables.hh:28
A primary variable vector with a state to allow variable switches.
Definition: switchableprimaryvariables.hh:28
Effective thermal conductivity after Somerton.
Definition: somerton.hh:46
Class that computes the nonwetting saturation in an scv from the saturation at the global degree of f...
Definition: saturationreconstruction.hh:31
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
typename GetPropOr< TypeTag, Property, T >::type GetPropTypeOr
get the type alias defined in the property or the type T if the property is undefined
Definition: propertysystem.hh:303
Implementation of capillary pressure curves for multiple pore body geometries.
The energy balance equation for a porous solid.
Definition: common/properties.hh:26
Flux variables cache for the two-phase-flow PNM.
Global flux variable cache.
The two-phase spatial parameters for pore-network models.
Defines common properties required for all pore-network models.
Adaption of the fully implicit scheme to the two-phase n-component fully implicit 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)
An empty flux variables cache.
Definition: fluxvariablescaching.hh:35
Flux variable caches traits.
Definition: porenetwork/2p/gridfluxvariablescache.hh:29
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/2pnc/model.hh:81
std::tuple< PoreNetworkModel, TwoPNC > InheritsFrom
Definition: porenetwork/2pnc/model.hh:81
The type tags for the corresponding non-isothermal problems.
Definition: porenetwork/2pnc/model.hh:84
std::tuple< PNMTwoPNC > InheritsFrom
Definition: porenetwork/2pnc/model.hh:84
Specifies a number properties of two-phase n-component models.
Definition: porousmediumflow/2pnc/model.hh:114
Traits class for the two-phase model.
Definition: porousmediumflow/2p/model.hh:107
A primary variable vector with a state to allow variable switches.
Implementation of the single-phase transmissibility laws for throats.
Implementation of the transmissibility laws for throats.