#include <dumux/freeflow/navierstokes/problem.hh>
Public Types | |
using | InitialValues = Dune::FieldVector< Scalar, dimWorld > |
using | Sources = Dune::FieldVector< Scalar, dimWorld > |
using | DirichletValues = Dune::FieldVector< Scalar, dimWorld > |
using | BoundaryFluxes = Dune::FieldVector< Scalar, dimWorld > |
using | MomentumFluxType = Dune::FieldVector< Scalar, dimWorld > |
using | BoundaryTypes = NavierStokesMomentumBoundaryTypes< ModelTraits::dim()> |
Export the boundary types. More... | |
using | SpatialParams = GetPropType< TypeTag, Properties::SpatialParams > |
Public Member Functions | |
NavierStokesProblemImpl (std::shared_ptr< const GridGeometry > gridGeometry, std::shared_ptr< CouplingManager > couplingManager, const std::string ¶mGroup="") | |
The constructor. More... | |
NavierStokesProblemImpl (std::shared_ptr< const GridGeometry > gridGeometry, const std::string ¶mGroup="") | |
The constructor for usage without a coupling manager. More... | |
Sources | source (const Element &element, const FVElementGeometry &fvGeometry, const ElementVolumeVariables &elemVolVars, const SubControlVolume &scv) const |
Evaluate the source term for all phases within a given sub-control-volume. More... | |
Sources | sourceAtPos (const GlobalPosition &globalPos) const |
Evaluate the source term for all phases within a given sub-control-volume. More... | |
auto | boundaryTypes (const Element &element, const SubControlVolumeFace &scvf) const |
Specifies which kind of boundary condition should be used for which equation on a given boundary segment. More... | |
DirichletValues | dirichlet (const Element &element, const SubControlVolumeFace &scvf) const |
Evaluate the boundary conditions for a dirichlet control volume face. More... | |
template<class ElementFluxVariablesCache > | |
BoundaryFluxes | neumann (const Element &element, const FVElementGeometry &fvGeometry, const ElementVolumeVariables &elemVolVars, const ElementFluxVariablesCache &elemFluxVarsCache, const SubControlVolumeFace &scvf) const |
Evaluates the boundary conditions for a Neumann control volume. More... | |
BoundaryFluxes | neumannAtPos (const GlobalPosition &globalPos) const |
Returns the neumann flux at a given position. More... | |
const GravityVector & | gravity () const |
A default, i.e. if the user's does not overload any neumann method. More... | |
bool | enableInertiaTerms () const |
Returns whether intertia terms should be considered. More... | |
Scalar | pressure (const Element &element, const FVElementGeometry &fvGeometry, const SubControlVolumeFace &scvf) const |
Returns the pressure at a given sub control volume face. More... | |
Scalar | pressureAtPos (const GlobalPosition &) const |
Returns the pressure at a given position. More... | |
Scalar | referencePressure (const Element &element, const FVElementGeometry &fvGeometry, const SubControlVolumeFace &scvf) const |
Returns a reference pressure at a given sub control volume face. This pressure is substracted from the actual pressure for the momentum balance which potentially helps to improve numerical accuracy by avoiding issues related do floating point arithmetic. More... | |
Scalar | density (const Element &element, const FVElementGeometry &fvGeometry, const SubControlVolumeFace &scvf) const |
Returns the density at a given sub control volume face. More... | |
Scalar | density (const Element &element, const SubControlVolume &scv, const bool isPreviousTimeStep=false) const |
Returns the density at a given sub control volume. More... | |
auto | insideAndOutsideDensity (const Element &element, const FVElementGeometry &fvGeometry, const SubControlVolumeFace &scvf, const bool isPreviousTimeStep=false) const |
Scalar | densityAtPos (const GlobalPosition &) const |
Returns the density at a given position. More... | |
Scalar | effectiveViscosity (const Element &element, const FVElementGeometry &fvGeometry, const SubControlVolumeFace &scvf) const |
Returns the effective dynamic viscosity at a given sub control volume face. More... | |
Scalar | effectiveViscosityAtPos (const GlobalPosition &) const |
Returns the effective dynamic viscosity at a given position. More... | |
template<class SolutionVector > | |
void | applyInitialSolution (SolutionVector &sol) const |
Applies the initial solution for all degrees of freedom of the grid. More... | |
InitialValues | initial (const SubControlVolume &scv) const |
Evaluate the initial value at an sub control volume. More... | |
Scalar | pseudo3DWallFriction (const Element &element, const FVElementGeometry &fvGeometry, const ElementVolumeVariables &elemVolVars, const SubControlVolume &scv, const Scalar height, const Scalar factor=8.0) const |
Convenience function for staggered grid implementation. More... | |
Scalar | pseudo3DWallFriction (const Scalar velocity, const Scalar viscosity, const Scalar height, const Scalar factor=8.0) const |
An additional drag term can be included as source term for the momentum balance to mimic 3D flow behavior in 2D: More... | |
bool | onSlipBoundary (const FVElementGeometry &fvGeometry, const SubControlVolumeFace &scvf) const |
Returns true if the scvf is located on a boundary with a slip condition. More... | |
bool | onSlipBoundaryAtPos (const GlobalPosition &pos) const |
Returns true if the scvf is located on a boundary with a slip condition. More... | |
Scalar | permeability (const FVElementGeometry &fvGeometry, const SubControlVolumeFace &scvf) const |
Returns the intrinsic permeability of required as input parameter for the Beavers-Joseph-Saffman boundary condition This member function must be overloaded in the problem implementation, if the BJS boundary condition is used. More... | |
Scalar | alphaBJ (const FVElementGeometry &fvGeometry, const SubControlVolumeFace &scvf) const |
Returns the alpha value required as input parameter for the Beavers-Joseph-Saffman boundary condition This member function must be overloaded in the problem implementation, if the BJS boundary condition is used. More... | |
Scalar | betaBJ (const FVElementGeometry &fvGeometry, const SubControlVolumeFace &scvf, const GlobalPosition &tangentialVector) const |
Returns the beta value which is the alpha value divided by the square root of the (scalar-valued) interface permeability. More... | |
VelocityVector | porousMediumVelocity (const FVElementGeometry &fvGeometry, const SubControlVolumeFace &scvf) const |
Returns the velocity in the porous medium (which is 0 by default according to Saffmann). More... | |
const VelocityVector | beaversJosephVelocity (const FVElementGeometry &fvGeometry, const SubControlVolumeFace &scvf, const ElementVolumeVariables &elemVolVars, Scalar tangentialVelocityGradient) const |
Returns the slip velocity at a porous boundary based on the Beavers-Joseph(-Saffman) condition. More... | |
const CouplingManager & | couplingManager () const |
const SpatialParams & | spatialParams () const |
Return a reference to the underlying spatial parameters. More... | |
SpatialParams & | spatialParams () |
Return a reference to the underlying spatial parameters. More... | |
const std::string & | name () const |
The problem name. More... | |
void | setName (const std::string &newName) |
Set the problem name. More... | |
Static Public Member Functions | |
static constexpr bool | isMomentumProblem () |
This problem is used for the momentum balance model. More... | |
Boundary conditions and sources defining the problem | |
static constexpr bool | enableInternalDirichletConstraints () |
If internal Dirichlet contraints are enabled Enables / disables internal (non-boundary) Dirichlet constraints. If this is overloaded to return true, the assembler calls problem.hasInternalDirichletConstraint(element, scv). This means you have to implement the following member function. More... | |
auto | boundaryTypes (const Element &element, const SubControlVolume &scv) const |
Specifies which kind of boundary condition should be used for which equation on a given boundary segment. More... | |
BoundaryTypes | boundaryTypesAtPos (const GlobalPosition &globalPos) const |
Specifies which kind of boundary condition should be used for which equation on a given boundary segment. More... | |
PrimaryVariables | dirichlet (const Element &element, const SubControlVolume &scv) const |
Evaluate the boundary conditions for a dirichlet control volume. More... | |
PrimaryVariables | dirichletAtPos (const GlobalPosition &globalPos) const |
Evaluate the boundary conditions for a dirichlet control volume. More... | |
template<class ElementVolumeVariables , class ElementFluxVariablesCache > | |
NumEqVector | neumann (const Element &element, const FVElementGeometry &fvGeometry, const ElementVolumeVariables &elemVolVars, const ElementFluxVariablesCache &elemFluxVarsCache, const SubControlVolumeFace &scvf) const |
Evaluate the boundary conditions for a neumann boundary segment. More... | |
template<class ElementVolumeVariables > | |
NumEqVector | source (const Element &element, const FVElementGeometry &fvGeometry, const ElementVolumeVariables &elemVolVars, const SubControlVolume &scv) const |
Evaluate the source term for all phases within a given sub-control-volume. More... | |
void | addPointSources (std::vector< PointSource > &pointSources) const |
Applies a vector of point sources. The point sources are possibly solution dependent. More... | |
template<class ElementVolumeVariables > | |
void | pointSource (PointSource &source, const Element &element, const FVElementGeometry &fvGeometry, const ElementVolumeVariables &elemVolVars, const SubControlVolume &scv) const |
Evaluate the point sources (added by addPointSources) for all phases within a given sub-control-volume. More... | |
void | pointSourceAtPos (PointSource &pointSource, const GlobalPosition &globalPos) const |
Evaluate the point sources (added by addPointSources) for all phases within a given sub-control-volume. More... | |
template<class MatrixBlock , class VolumeVariables > | |
void | addSourceDerivatives (MatrixBlock &block, const Element &element, const FVElementGeometry &fvGeometry, const VolumeVariables &volVars, const SubControlVolume &scv) const |
Add source term derivative to the Jacobian. More... | |
template<class ElementVolumeVariables > | |
NumEqVector | scvPointSources (const Element &element, const FVElementGeometry &fvGeometry, const ElementVolumeVariables &elemVolVars, const SubControlVolume &scv) const |
Adds contribution of point sources for a specific sub control volume to the values. Caution: Only overload this method in the implementation if you know what you are doing. More... | |
void | computePointSourceMap () |
Compute the point source map, i.e. which scvs have point source contributions. More... | |
const PointSourceMap & | pointSourceMap () const |
Get the point source map. It stores the point sources per scv. More... | |
template<class Entity > | |
PrimaryVariables | initial (const Entity &entity) const |
Evaluate the initial value for an element (for cell-centered models) or vertex (for box / vertex-centered models) More... | |
PrimaryVariables | initialAtPos (const GlobalPosition &globalPos) const |
Evaluate the initial value for a control volume. More... | |
template<class ElementSolution > | |
Scalar | extrusionFactor (const Element &element, const SubControlVolume &scv, const ElementSolution &elemSol, double defaultValue=1.0) const |
Return how much the domain is extruded at a given sub-control volume. More... | |
Scalar | extrusionFactorAtPos (const GlobalPosition &globalPos, double defaultValue=1.0) const |
Return how much the domain is extruded at a given position. More... | |
const GridGeometry & | gridGeometry () const |
The finite volume grid geometry. More... | |
const std::string & | paramGroup () const |
The parameter group in which to retrieve runtime parameters. More... | |
using Dumux::NavierStokesProblemImpl< TypeTag, DiscretizationMethods::FCStaggered >::BoundaryFluxes = Dune::FieldVector<Scalar, dimWorld> |
using Dumux::NavierStokesProblemImpl< TypeTag, DiscretizationMethods::FCStaggered >::BoundaryTypes = NavierStokesMomentumBoundaryTypes<ModelTraits::dim()> |
Export the boundary types.
using Dumux::NavierStokesProblemImpl< TypeTag, DiscretizationMethods::FCStaggered >::DirichletValues = Dune::FieldVector<Scalar, dimWorld> |
using Dumux::NavierStokesProblemImpl< TypeTag, DiscretizationMethods::FCStaggered >::InitialValues = Dune::FieldVector<Scalar, dimWorld> |
These types are used in place of the typical NumEqVector type. In the numeqvector assembly type, only one equation per DOF (face) is considered while the type here provides one entry for each world dimension.
using Dumux::NavierStokesProblemImpl< TypeTag, DiscretizationMethods::FCStaggered >::MomentumFluxType = Dune::FieldVector<Scalar, dimWorld> |
using Dumux::NavierStokesProblemImpl< TypeTag, DiscretizationMethods::FCStaggered >::Sources = Dune::FieldVector<Scalar, dimWorld> |
|
inherited |
|
inline |
The constructor.
gridGeometry | The finite volume grid geometry |
couplingManager | The coupling manager (couples mass and momentum equations) |
paramGroup | The parameter group in which to look for runtime parameters first (default is "") |
|
inline |
The constructor for usage without a coupling manager.
gridGeometry | The finite volume grid geometry |
paramGroup | The parameter group in which to look for runtime parameters first (default is "") |
|
inlineinherited |
Applies a vector of point sources. The point sources are possibly solution dependent.
pointSources | A vector of PointSource s that contain source values for all phases and space positions. |
For this method, the values method of the point source has to return the absolute rate values in units \( [ \textnormal{unit of conserved quantity} / s ] \). Positive values mean that the conserved quantity is created, negative ones mean that it vanishes. E.g. for the mass balance that would be a mass rate in \( [ kg / s ] \).
|
inlineinherited |
Add source term derivative to the Jacobian.
|
inline |
Returns the alpha value required as input parameter for the Beavers-Joseph-Saffman boundary condition This member function must be overloaded in the problem implementation, if the BJS boundary condition is used.
|
inline |
Applies the initial solution for all degrees of freedom of the grid.
sol | the initial solution vector |
|
inline |
Returns the slip velocity at a porous boundary based on the Beavers-Joseph(-Saffman) condition.
|
inline |
Returns the beta value which is the alpha value divided by the square root of the (scalar-valued) interface permeability.
|
inlineinherited |
Specifies which kind of boundary condition should be used for which equation on a given boundary segment.
element | The finite element |
scv | The sub control volume |
|
inline |
Specifies which kind of boundary condition should be used for which equation on a given boundary segment.
element | The finite element |
scvf | The sub control volume face |
|
inlineinherited |
Specifies which kind of boundary condition should be used for which equation on a given boundary segment.
globalPos | The position of the finite volume in global coordinates |
As a default, i.e. if the user's problem does not overload any boundaryTypes method set Dirichlet boundary conditions everywhere for all primary variables
|
inlineinherited |
Compute the point source map, i.e. which scvs have point source contributions.
|
inline |
|
inline |
Returns the density at a given sub control volume face.
|
inline |
Returns the density at a given sub control volume.
|
inline |
Returns the density at a given position.
|
inlineinherited |
Evaluate the boundary conditions for a dirichlet control volume.
element | The finite element |
scv | the sub control volume |
|
inline |
Evaluate the boundary conditions for a dirichlet control volume face.
element | The finite element |
scvf | the sub control volume face |
|
inlineinherited |
Evaluate the boundary conditions for a dirichlet control volume.
globalPos | The position of the center of the finite volume for which the dirichlet condition ought to be set in global coordinates |
|
inline |
Returns the effective dynamic viscosity at a given sub control volume face.
|
inline |
Returns the effective dynamic viscosity at a given position.
|
inline |
Returns whether intertia terms should be considered.
|
inlinestaticconstexprinherited |
If internal Dirichlet contraints are enabled Enables / disables internal (non-boundary) Dirichlet constraints. If this is overloaded to return true, the assembler calls problem.hasInternalDirichletConstraint(element, scv). This means you have to implement the following member function.
bool hasInternalDirichletConstraint(const Element& element, const SubControlVolume& scv) const;
which returns an indexable container of booleans defining for each equation if the corresponding dof associated with the element/scv pair is constraint. If true is returned for a dof, the assembler calls problem.internalDirichlet(element, scv). This means you have to additionally implement the following member function
PrimaryVariables internalDirichlet(const Element& element, const SubControlVolume& scv) const;
which returns the enforced Dirichlet values the dof associated with the element/scv pair.
|
inlineinherited |
Return how much the domain is extruded at a given sub-control volume.
This means the factor by which a lower-dimensional (1D or 2D) entity needs to be expanded to get a full dimensional cell. The default is 1.0 which means that 1D problems are actually thought as pipes with a cross section of 1 m^2 and 2D problems are assumed to extend 1 m to the back.
|
inlineinherited |
Return how much the domain is extruded at a given position.
This means the factor by which a lower-dimensional (1D or 2D) entity needs to be expanded to get a full dimensional cell. The default is 1.0 which means that 1D problems are actually thought as pipes with a cross section of 1 m^2 and 2D problems are assumed to extend 1 m to the back.
|
inline |
A default, i.e. if the user's does not overload any neumann method.
Returns the acceleration due to gravity.
If the Problem.EnableGravity
parameter is true, this means \(\boldsymbol{g} = ( 0,\dots,\ -9.81)^T \), else \(\boldsymbol{g} = ( 0,\dots, 0)^T \)
|
inlineinherited |
The finite volume grid geometry.
|
inlineinherited |
Evaluate the initial value for an element (for cell-centered models) or vertex (for box / vertex-centered models)
entity | The dof entity (element or vertex) |
|
inline |
Evaluate the initial value at an sub control volume.
|
inlineinherited |
Evaluate the initial value for a control volume.
globalPos | The global position |
|
inline |
|
inlinestaticconstexpr |
This problem is used for the momentum balance model.
|
inlineinherited |
The problem name.
This is used as a prefix for files generated by the simulation. It could be either overwritten by the problem files, or simply declared over the setName() function in the application file.
|
inlineinherited |
Evaluate the boundary conditions for a neumann boundary segment.
This is the method for the case where the Neumann condition is potentially solution dependent
element | The finite element |
fvGeometry | The finite-volume geometry |
elemVolVars | All volume variables for the element |
elemFluxVarsCache | Flux variables caches for all faces in stencil |
scvf | The sub control volume face |
Negative values mean influx. E.g. for the mass balance that would be the mass flux in \( [ kg / (m^2 \cdot s)] \).
|
inline |
Evaluates the boundary conditions for a Neumann control volume.
element | The element for which the Neumann boundary condition is set |
fvGeometry | The fvGeometry |
elemVolVars | The element volume variables |
elemFluxVarsCache | The element flux variables cache |
scvf | The boundary sub control volume face |
|
inline |
Returns the neumann flux at a given position.
|
inline |
Returns true if the scvf is located on a boundary with a slip condition.
|
inline |
Returns true if the scvf is located on a boundary with a slip condition.
|
inlineinherited |
The parameter group in which to retrieve runtime parameters.
|
inline |
Returns the intrinsic permeability of required as input parameter for the Beavers-Joseph-Saffman boundary condition This member function must be overloaded in the problem implementation, if the BJS boundary condition is used.
|
inlineinherited |
Evaluate the point sources (added by addPointSources) for all phases within a given sub-control-volume.
This is the method for the case where the point source is solution dependent
source | A single point source |
element | The finite element |
fvGeometry | The finite-volume geometry |
elemVolVars | All volume variables for the element |
scv | The sub control volume |
For this method, the values() method of the point sources returns the absolute conserved quantity rate generated or annihilate in units \( [ \textnormal{unit of conserved quantity} / s ] \). Positive values mean that the conserved quantity is created, negative ones mean that it vanishes. E.g. for the mass balance that would be a mass rate in \( [ kg / s ] \).
|
inlineinherited |
Evaluate the point sources (added by addPointSources) for all phases within a given sub-control-volume.
This is the method for the case where the point source is space dependent
pointSource | A single point source |
globalPos | The point source position in global coordinates |
For this method, the values() method of the point sources returns the absolute conserved quantity rate generated or annihilate in units \( [ \textnormal{unit of conserved quantity} / s ] \). Positive values mean that the conserved quantity is created, negative ones mean that it vanishes. E.g. for the mass balance that would be a mass rate in \( [ kg / s ] \).
|
inlineinherited |
Get the point source map. It stores the point sources per scv.
|
inline |
Returns the velocity in the porous medium (which is 0 by default according to Saffmann).
|
inline |
Returns the pressure at a given sub control volume face.
|
inline |
Returns the pressure at a given position.
|
inline |
Convenience function for staggered grid implementation.
|
inline |
An additional drag term can be included as source term for the momentum balance to mimic 3D flow behavior in 2D:
\[ f_{drag} = -(8 \mu / h^2)v \]
Here, \(h\) corresponds to the extruded height that is bounded by the imaginary walls. See Flekkoy et al. (1995) [23]
A value of 8.0 is used as a default factor, corresponding to the velocity profile at the center plane of the virtual height (maximum velocity). Setting this value to 12.0 corresponds to an depth-averaged velocity (Venturoli and Boek, 2006) [71].
|
inline |
Returns a reference pressure at a given sub control volume face. This pressure is substracted from the actual pressure for the momentum balance which potentially helps to improve numerical accuracy by avoiding issues related do floating point arithmetic.
|
inlineinherited |
Adds contribution of point sources for a specific sub control volume to the values. Caution: Only overload this method in the implementation if you know what you are doing.
|
inlineinherited |
Set the problem name.
This static method sets the simulation name, which should be called before the application problem is declared! If not, the default name "sim" will be used.
newName | The problem's name |
|
inlineinherited |
Evaluate the source term for all phases within a given sub-control-volume.
This is the method for the case where the source term is potentially solution dependent and requires some quantities that are specific to the fully-implicit method.
element | The finite element |
fvGeometry | The finite-volume geometry |
elemVolVars | All volume variables for the element |
scv | The sub control volume |
For this method, the return parameter stores the conserved quantity rate generated or annihilate per volume unit. Positive values mean that the conserved quantity is created, negative ones mean that it vanishes. E.g. for the mass balance that would be a mass rate in \( [ kg / (m^3 \cdot s)] \).
|
inline |
Evaluate the source term for all phases within a given sub-control-volume.
This is the method for the case where the source term is potentially solution dependent and requires some quantities that are specific to the fully-implicit method.
element | The finite element |
fvGeometry | The finite-volume geometry |
elemVolVars | All volume variables for the element |
scv | The sub control volume |
For this method, the return parameter stores the conserved quantity rate generated or annihilate per volume unit. Positive values mean that the conserved quantity is created, negative ones mean that it vanishes. E.g. for the mass balance that would be a mass rate in \( [ kg / (m^3 \cdot s)] \).
|
inline |
Evaluate the source term for all phases within a given sub-control-volume.
globalPos | The position of the center of the finite volume for which the source term ought to be specified in global coordinates |
For this method, the values parameter stores the conserved quantity rate generated or annihilate per volume unit. Positive values mean that the conserved quantity is created, negative ones mean that it vanishes. E.g. for the mass balance that would be a mass rate in \( [ kg / (m^3 \cdot s)] \).
As a default, i.e. if the user's problem does not overload any source method return 0.0 (no source terms)
|
inlineinherited |
Return a reference to the underlying spatial parameters.
|
inlineinherited |
Return a reference to the underlying spatial parameters.