3.5-git
DUNE for Multi-{Phase, Component, Scale, Physics, ...} flow and transport in porous media
freeflow/navierstokes/mass/1p/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 *****************************************************************************/
46#ifndef DUMUX_FREEFLOW_NAVIERSTOKES_1P_MODEL_HH
47#define DUMUX_FREEFLOW_NAVIERSTOKES_1P_MODEL_HH
48
51
53
59
61
62#include "localresidual.hh"
63#include "volumevariables.hh"
64#include "fluxvariables.hh"
65#include "indices.hh"
66
67namespace Dumux {
68
74{
77 static constexpr int numEq() { return 1; }
78
80 static constexpr int numFluidPhases() { return 1; }
81
83 static constexpr int numFluidComponents() { return 1; }
84
86 static constexpr bool enableAdvection() { return true; }
87
89 static constexpr bool enableMolecularDiffusion() { return false; }
90
92 static constexpr bool enableEnergyBalance() { return false; }
93
95 static constexpr bool usesTurbulenceModel() { return false; }
96
98 static constexpr auto turbulenceModel()
99 { return TurbulenceModel::none; }
100
103};
104
114template<class PV,
115 class FSY,
116 class FST,
117 class MT>
119{
121 using FluidSystem = FSY;
122 using FluidState = FST;
123 using ModelTraits = MT;
124};
125
126// \{
128// properties for the single-phase Navier-Stokes model
130namespace Properties {
131
133// Type tags
135
136// Create new type tags
137namespace TTag {
139struct NavierStokesMassOneP{ using InheritsFrom = std::tuple<ModelProperties>; };
140struct NavierStokesMassOnePNI{ using InheritsFrom = std::tuple<NavierStokesMassOneP>; };
141} // end namespace TTag
142
143
144template<class TypeTag>
145struct ModelTraits<TypeTag, TTag::NavierStokesMassOneP>
147
154template<class TypeTag>
155struct FluidState<TypeTag, TTag::NavierStokesMassOneP>
156{
157private:
160public:
162};
163
165template<class TypeTag>
166struct LocalResidual<TypeTag, TTag::NavierStokesMassOneP>
168
170template<class TypeTag>
171struct VolumeVariables<TypeTag, TTag::NavierStokesMassOneP>
172{
173private:
178
179 static_assert(FSY::numPhases == MT::numFluidPhases(), "Number of phases mismatch between model and fluid system");
180 static_assert(FST::numPhases == MT::numFluidPhases(), "Number of phases mismatch between model and fluid state");
181 static_assert(!FSY::isMiscible(), "The Navier-Stokes model only works with immiscible fluid systems.");
182
184public:
186};
187
189template<class TypeTag>
190struct FluxVariables<TypeTag, TTag::NavierStokesMassOneP>
191{
192private:
195 struct DiffusiveFluxTypes {}; // no diffusion
196 using ElementVolumeVariables = typename GetPropType<TypeTag, Properties::GridVolumeVariables>::LocalView;
197 using ElementFluxVariablesCache = typename GetPropType<TypeTag, Properties::GridFluxVariablesCache>::LocalView;
198public:
200 Problem, ModelTraits, DiffusiveFluxTypes, ElementVolumeVariables, ElementFluxVariablesCache
201 >;
202};
203
204template<class TypeTag>
205struct FluxVariablesCache<TypeTag, TTag::NavierStokesMassOneP>
207
208template<class TypeTag>
209struct FluxVariablesCacheFiller<TypeTag, TTag::NavierStokesMassOneP>
211
212// ! The specific I/O fields
213template<class TypeTag>
214struct IOFields<TypeTag, TTag::NavierStokesMassOneP> { using type = NavierStokesIOFields; };
215
216template<class TypeTag>
217struct CouplingManager<TypeTag, TTag::NavierStokesMassOneP>
218{
219public:
220 using type = struct EmptyCouplingManager {};
221};
222
223// Set the default spatial parameters
224template<class TypeTag>
225struct SpatialParams<TypeTag, TTag::NavierStokesMassOneP>
226{
230};
232// Properties for the non-isothermal single phase model
234
236template<class TypeTag>
237struct IOFields<TypeTag, TTag::NavierStokesMassOnePNI>
239
241template<class TypeTag>
242struct ModelTraits<TypeTag, TTag::NavierStokesMassOnePNI>
244
246template<class TypeTag>
247struct VolumeVariables<TypeTag, TTag::NavierStokesMassOnePNI>
248{
249private:
254
255 static_assert(FSY::numPhases == MT::numFluidPhases(), "Number of phases mismatch between model and fluid system");
256 static_assert(FST::numPhases == MT::numFluidPhases(), "Number of phases mismatch between model and fluid state");
257 static_assert(!FSY::isMiscible(), "The Navier-Stokes model only works with immiscible fluid systems.");
258
262 struct NITraits : public BaseTraits
263 {
264 using EffectiveThermalConductivityModel = ETCM;
265 using HeatConductionType = HCT;
266 };
267public:
269};
270
272template<class TypeTag>
273struct ThermalConductivityModel<TypeTag, TTag::NavierStokesMassOnePNI>
274{
275 struct type
276 {
277 template<class VolVars>
278 static auto effectiveThermalConductivity(const VolVars& volVars)
279 {
280 return volVars.fluidThermalConductivity();
281 }
282 };
283};
284
285template<class TypeTag>
286struct HeatConductionType<TypeTag, TTag::NavierStokesMassOnePNI>
288
290template<class TypeTag>
291struct FluxVariables<TypeTag, TTag::NavierStokesMassOnePNI>
292{
293private:
296
297 struct DiffusiveFluxTypes
298 {
300 };
301
302 using ElementVolumeVariables = typename GetPropType<TypeTag, Properties::GridVolumeVariables>::LocalView;
303 using ElementFluxVariablesCache = typename GetPropType<TypeTag, Properties::GridFluxVariablesCache>::LocalView;
304
305public:
307 Problem, ModelTraits, DiffusiveFluxTypes, ElementVolumeVariables, ElementFluxVariablesCache
308 >;
309};
310
311template<class TypeTag>
312struct FluxVariablesCache<TypeTag, TTag::NavierStokesMassOnePNI>
313{
314 struct type : public GetPropType<TypeTag, Properties::HeatConductionType>::Cache
315 {};
316};
317
318template<class TypeTag>
319struct FluxVariablesCacheFiller<TypeTag, TTag::NavierStokesMassOnePNI>
320{
323 static constexpr bool diffusionIsSolDependent = false; // no diffusion;
324 static constexpr bool heatConductionIsSolDependent
325 = getPropValue<TypeTag, Properties::SolutionDependentHeatConduction>();
326
328 Problem, ModelTraits, diffusionIsSolDependent, heatConductionIsSolDependent
329 >;
330};
331
332template<class TypeTag>
333struct SolutionDependentHeatConduction<TypeTag, TTag::NavierStokesMassOnePNI>
334{ static constexpr bool value = true; };
335
336} // end namespace Properties
337} // end namespace Dumux
338
339#endif
A helper class to fill the flux variables cache.
The available free flow turbulence models in Dumux.
Represents all relevant thermodynamic quantities of a multi-phase fluid system assuming immiscibility...
Definition: adapt.hh:29
typename Properties::Detail::GetPropImpl< TypeTag, Property >::type::type GetPropType
get the type alias defined in the property
Definition: propertysystem.hh:150
Traits class encapsulating model specifications.
Definition: common/properties.hh:53
A class helping models to define input and output fields.
Definition: common/properties.hh:63
Definition: common/properties.hh:74
The secondary variables within a sub-control volume.
Definition: common/properties.hh:107
Container storing the different types of flux variables.
Definition: common/properties.hh:113
Stores data associated with flux vars.
Definition: common/properties.hh:115
UndefinedProperty type
Definition: common/properties.hh:115
The engine behind the global flux cache (how to fill caches for the stencil)
Definition: common/properties.hh:117
The type for the calculation of the heat conduction fluxes.
Definition: common/properties.hh:151
specifies if the parameters for the heat conduction fluxes depend on the solution
Definition: common/properties.hh:157
The type of the spatial parameters object.
Definition: common/properties.hh:160
The type of the fluid state to use.
Definition: common/properties.hh:164
Model to be used for the calculation of the effective conductivity.
Definition: common/properties.hh:172
UndefinedProperty type
Definition: common/properties.hh:172
Definition: common/properties.hh:293
forward declaration of the method-specific implementation
Definition: flux/box/fourierslaw.hh:38
The empty filler class corresponding to EmptyCache.
Definition: fluxvariablescaching.hh:32
An empty flux variables cache.
Definition: fluxvariablescaching.hh:47
Adds I/O fields specific to non-isothermal free-flow models.
Definition: freeflow/navierstokes/energy/iofields.hh:37
Specifies a number properties of non-isothermal free-flow flow models based on the specifics of a giv...
Definition: freeflow/navierstokes/energy/model.hh:59
Adds I/O fields for the Navier-Stokes model.
Definition: freeflow/navierstokes/iofields.hh:79
The flux variables class for the single-phase flow Navier-Stokes model.
Definition: freeflow/navierstokes/mass/1p/fluxvariables.hh:51
The common indices for the isothermal Navier-Stokes mass conservation model.
Definition: freeflow/navierstokes/mass/1p/indices.hh:34
Element-wise calculation of the Navier-Stokes residual for single-phase flow.
Definition: freeflow/navierstokes/mass/1p/localresidual.hh:38
Traits for the single-phase flow Navier-Stokes mass model.
Definition: freeflow/navierstokes/mass/1p/model.hh:74
static constexpr bool enableMolecularDiffusion()
The one-phase model has no molecular diffusion.
Definition: freeflow/navierstokes/mass/1p/model.hh:89
static constexpr auto turbulenceModel()
return the type of turbulence model used
Definition: freeflow/navierstokes/mass/1p/model.hh:98
static constexpr bool enableAdvection()
Enable advection.
Definition: freeflow/navierstokes/mass/1p/model.hh:86
static constexpr bool usesTurbulenceModel()
The model does not include a turbulence model.
Definition: freeflow/navierstokes/mass/1p/model.hh:95
static constexpr int numFluidComponents()
The number of components is 1.
Definition: freeflow/navierstokes/mass/1p/model.hh:83
static constexpr bool enableEnergyBalance()
The model is isothermal.
Definition: freeflow/navierstokes/mass/1p/model.hh:92
static constexpr int numEq()
Definition: freeflow/navierstokes/mass/1p/model.hh:77
static constexpr int numFluidPhases()
The number of phases is 1.
Definition: freeflow/navierstokes/mass/1p/model.hh:80
Traits class for the volume variables of the Navier-Stokes model.
Definition: freeflow/navierstokes/mass/1p/model.hh:119
FST FluidState
Definition: freeflow/navierstokes/mass/1p/model.hh:122
PV PrimaryVariables
Definition: freeflow/navierstokes/mass/1p/model.hh:120
FSY FluidSystem
Definition: freeflow/navierstokes/mass/1p/model.hh:121
MT ModelTraits
Definition: freeflow/navierstokes/mass/1p/model.hh:123
The type tag for the single-phase, isothermal Navier-Stokes model.
Definition: freeflow/navierstokes/mass/1p/model.hh:139
std::tuple< ModelProperties > InheritsFrom
Definition: freeflow/navierstokes/mass/1p/model.hh:139
Definition: freeflow/navierstokes/mass/1p/model.hh:140
std::tuple< NavierStokesMassOneP > InheritsFrom
Definition: freeflow/navierstokes/mass/1p/model.hh:140
EmptyCouplingManager {} type
Definition: freeflow/navierstokes/mass/1p/model.hh:220
GetPropType< TypeTag, Properties::GridGeometry > GridGeometry
Definition: freeflow/navierstokes/mass/1p/model.hh:227
GetPropType< TypeTag, Properties::Scalar > Scalar
Definition: freeflow/navierstokes/mass/1p/model.hh:228
static auto effectiveThermalConductivity(const VolVars &volVars)
Definition: freeflow/navierstokes/mass/1p/model.hh:278
GetPropType< TypeTag, Properties::Problem > Problem
Definition: freeflow/navierstokes/mass/1p/model.hh:321
GetPropType< TypeTag, Properties::ModelTraits > ModelTraits
Definition: freeflow/navierstokes/mass/1p/model.hh:322
Volume variables for the single-phase Navier-Stokes model.
Definition: freeflow/navierstokes/mass/1p/volumevariables.hh:41
Definition: scalarfluxvariablescachefiller.hh:39
Definition of the spatial parameters for the freeflow problems.
Definition: freeflow/spatialparams.hh:54
Represents all relevant thermodynamic quantities of a multi-phase fluid system assuming immiscibility...
Definition: immiscible.hh:42
Declares all properties used in Dumux.
Defines a type tags and some fundamental properties for all models.
A single-phase, non-isothermal free-flow model.
Fourier's law specialized for different discretization schemes This file contains the data which is r...
Base class for the flux variables in porous medium models.
Element-wise calculation of the local residual for problems using fully implicit tracer model.
Defines the primary variable and equation indices used by the isothermal tracer model.
Definition of the spatial parameters for the freeflow problems.