3.6-git
DUNE for Multi-{Phase, Component, Scale, Physics, ...} flow and transport in porous media
freeflow/navierstokes/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_NAVIERSTOKES_MODEL_HH
47#define DUMUX_NAVIERSTOKES_MODEL_HH
48
54
55#include "localresidual.hh"
56#include "volumevariables.hh"
57#include "fluxvariables.hh"
58#include "indices.hh"
59#include "iofields.hh"
60
64
65namespace Dumux {
66
73template<int dimension>
75{
77 static constexpr int dim() { return dimension; }
78
81 static constexpr int numEq() { return dimension+1; }
82
84 static constexpr int numFluidPhases() { return 1; }
85
87 static constexpr int numFluidComponents() { return 1; }
88
90 static constexpr bool enableAdvection() { return true; }
91
93 static constexpr bool enableMolecularDiffusion() { return false; }
94
96 static constexpr bool enableEnergyBalance() { return false; }
97
99 static constexpr bool usesTurbulenceModel() { return false; }
100
102 static constexpr auto turbulenceModel()
103 { return TurbulenceModel::none; }
104
107};
108
118template<class PV,
119 class FSY,
120 class FST,
121 class MT>
123{
125 using FluidSystem = FSY;
126 using FluidState = FST;
127 using ModelTraits = MT;
128};
129
130// \{
132// properties for the single-phase Navier-Stokes model
134namespace Properties {
135
137// Type tags
139
140// Create new type tags
141namespace TTag {
143struct NavierStokes { using InheritsFrom = std::tuple<FreeFlow>; };
144
146struct NavierStokesNI { using InheritsFrom = std::tuple<NavierStokes>; };
147} // end namespace TTag
148
150// default property values for the isothermal single phase model
152template<class TypeTag>
153struct NormalizePressure<TypeTag, TTag::NavierStokes> { static constexpr bool value = true; };
154
156template<class TypeTag>
157struct ModelTraits<TypeTag, TTag::NavierStokes>
158{
159private:
161 static constexpr auto dim = GridView::dimension;
162public:
164};
165
172template<class TypeTag>
173struct FluidState<TypeTag, TTag::NavierStokes>{
174private:
177public:
179};
180
182template<class TypeTag>
183struct LocalResidual<TypeTag, TTag::NavierStokes> { using type = NavierStokesResidual<TypeTag>; };
184
186template<class TypeTag>
187struct VolumeVariables<TypeTag, TTag::NavierStokes>
188{
189private:
194
195 static_assert(FSY::numPhases == MT::numFluidPhases(), "Number of phases mismatch between model and fluid system");
196 static_assert(FST::numPhases == MT::numFluidPhases(), "Number of phases mismatch between model and fluid state");
197 static_assert(!FSY::isMiscible(), "The Navier-Stokes model only works with immiscible fluid systems.");
198
200public:
202};
203
205template<class TypeTag>
206struct FluxVariables<TypeTag, TTag::NavierStokes> { using type = NavierStokesFluxVariables<TypeTag>; };
207
209template<class TypeTag>
210struct IOFields<TypeTag, TTag::NavierStokes> { using type = NavierStokesIOFields; };
211
213// Property values for non-isothermal Navier-Stokes model
215
217template<class TypeTag>
218struct ModelTraits<TypeTag, TTag::NavierStokesNI>
219{
220private:
222 static constexpr auto dim = GridView::dimension;
224public:
226};
227
229template<class TypeTag>
230struct IOFields<TypeTag, TTag::NavierStokesNI> { using type = FreeflowNonIsothermalIOFields<NavierStokesIOFields>; };
231
232 // \}
233}
234
235} // end namespace
236
237#endif
The available discretization methods in Dumux.
Represents all relevant thermodynamic quantities of a multi-phase fluid system assuming immiscibility...
Adaption of the non-isothermal two-phase two-component flow model to problems with CO2.
Definition: adapt.hh:29
typename GetProp< TypeTag, Property >::type GetPropType
get the type alias defined in the property
Definition: propertysystem.hh:180
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
Definition: common/properties.hh:72
The secondary variables within a sub-control volume.
Definition: common/properties.hh:105
Container storing the different types of flux variables.
Definition: common/properties.hh:111
The type of the fluid state to use.
Definition: common/properties.hh:162
Returns whether to normalize the pressure term in the momentum balance or not.
Definition: common/properties.hh:283
The flux variables class for the Navier-Stokes model using the staggered grid discretization.
Definition: freeflow/navierstokes/fluxvariables.hh:35
The common indices for the isothermal Navier-Stokes model.
Definition: freeflow/navierstokes/indices.hh:37
Adds I/O fields for the Navier-Stokes model.
Definition: freeflow/navierstokes/iofields.hh:79
Element-wise calculation of the Navier-Stokes residual for models using the staggered discretization.
Definition: freeflow/navierstokes/localresidual.hh:35
Traits for the Navier-Stokes model.
Definition: freeflow/navierstokes/model.hh:75
static constexpr int numFluidComponents()
The number of components is 1.
Definition: freeflow/navierstokes/model.hh:87
static constexpr bool enableAdvection()
Enable advection.
Definition: freeflow/navierstokes/model.hh:90
static constexpr int dim()
The dimension of the model.
Definition: freeflow/navierstokes/model.hh:77
static constexpr bool enableMolecularDiffusion()
The one-phase model has no molecular diffusion.
Definition: freeflow/navierstokes/model.hh:93
static constexpr int numEq()
Definition: freeflow/navierstokes/model.hh:81
static constexpr auto turbulenceModel()
return the type of turbulence model used
Definition: freeflow/navierstokes/model.hh:102
static constexpr bool usesTurbulenceModel()
The model does not include a turbulence model.
Definition: freeflow/navierstokes/model.hh:99
static constexpr bool enableEnergyBalance()
The model is isothermal.
Definition: freeflow/navierstokes/model.hh:96
static constexpr int numFluidPhases()
The number of phases is 1.
Definition: freeflow/navierstokes/model.hh:84
Traits class for the volume variables of the Navier-Stokes model.
Definition: freeflow/navierstokes/model.hh:123
PV PrimaryVariables
Definition: freeflow/navierstokes/model.hh:124
MT ModelTraits
Definition: freeflow/navierstokes/model.hh:127
FST FluidState
Definition: freeflow/navierstokes/model.hh:126
FSY FluidSystem
Definition: freeflow/navierstokes/model.hh:125
The type tag for the single-phase, isothermal Navier-Stokes model.
Definition: freeflow/navierstokes/model.hh:143
std::tuple< FreeFlow > InheritsFrom
Definition: freeflow/navierstokes/model.hh:143
The type tag for the corresponding non-isothermal model.
Definition: freeflow/navierstokes/model.hh:146
std::tuple< NavierStokes > InheritsFrom
Definition: freeflow/navierstokes/model.hh:146
Volume variables for the single-phase Navier-Stokes model.
Definition: freeflow/navierstokes/volumevariables.hh:38
Adds I/O fields specific to non-isothermal free-flow models.
Definition: freeflow/nonisothermal/iofields.hh:38
Specifies a number properties of non-isothermal free-flow flow models based on the specifics of a giv...
Definition: freeflow/nonisothermal/model.hh:59
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 tag and some properties for free flow models.
A single-phase, non-isothermal free-flow model.
Diffusive heat flux according to Fourier's law.
Base class for the flux variables in porous medium models.
Defines the primary variable and equation indices used by the isothermal tracer model.
Element-wise calculation of the local residual for problems using fully implicit tracer model.
Adds I/O fields specific to the tracer model.
Python wrapper for volume variables (finite volume schemes)