12#ifndef DUMUX_NAVIERSTOKES_MOMENTUM_PROBLEM_HH
13#define DUMUX_NAVIERSTOKES_MOMENTUM_PROBLEM_HH
15#include <dune/common/exceptions.hh>
16#include <dune/common/fvector.hh>
17#include <dune/common/typetraits.hh>
26template<
class TypeTag,
class DiscretizationMethod>
29template<
class TypeTag>
37 using GridView =
typename GridGeometry::GridView;
38 using Element =
typename GridView::template Codim<0>::Entity;
41 using GridVolumeVariables =
typename GridVariables::GridVolumeVariables;
42 using ElementVolumeVariables =
typename GridVolumeVariables::LocalView;
45 using FVElementGeometry =
typename GridGeometry::LocalView;
46 using SubControlVolume =
typename FVElementGeometry::SubControlVolume;
47 using SubControlVolumeFace =
typename FVElementGeometry::SubControlVolumeFace;
51 dim = GridView::dimension,
52 dimWorld = GridView::dimensionworld
55 using GlobalPosition =
typename SubControlVolumeFace::GlobalPosition;
56 using VelocityVector = Dune::FieldVector<Scalar, dimWorld>;
57 using GravityVector = Dune::FieldVector<Scalar, dimWorld>;
61 static constexpr bool isCoupled_ = !std::is_empty_v<CouplingManager>;
69 using Sources = Dune::FieldVector<Scalar, dimWorld>;
88 std::shared_ptr<CouplingManager> couplingManager,
89 const std::string& paramGroup =
"")
92 , couplingManager_(couplingManager)
94 if (getParamFromGroup<bool>(paramGroup,
"Problem.EnableGravity"))
95 gravity_[dim-1] = -9.81;
97 enableInertiaTerms_ = getParamFromGroup<bool>(paramGroup,
"Problem.EnableInertiaTerms");
106 const std::string& paramGroup =
"")
129 const FVElementGeometry& fvGeometry,
130 const ElementVolumeVariables& elemVolVars,
131 const SubControlVolume& scv)
const
134 return asImp_().sourceAtPos(scv.dofPosition());
164 const FVElementGeometry& fvGeometry,
165 const ElementVolumeVariables& elemVolVars,
166 const SubControlVolume& scv)
const
168 if (!this->pointSourceMap().empty())
169 DUNE_THROW(Dune::NotImplemented,
"scvPointSources not implemented");
182 const SubControlVolumeFace& scvf)
const
187 return asImp_().boundaryTypesAtPos(scvf.center());
200 return asImp_().dirichletAtPos(scvf.ipGlobal());
212 template<
class ElementFluxVariablesCache>
214 const FVElementGeometry& fvGeometry,
215 const ElementVolumeVariables& elemVolVars,
216 const ElementFluxVariablesCache& elemFluxVarsCache,
217 const SubControlVolumeFace& scvf)
const
218 {
return asImp_().neumannAtPos(scvf.ipGlobal()); }
239 {
return enableInertiaTerms_; }
246 const FVElementGeometry& fvGeometry,
247 const SubControlVolumeFace& scvf)
const
249 if constexpr (isCoupled_)
250 return couplingManager_->pressure(element, fvGeometry, scvf);
252 return asImp_().pressureAtPos(scvf.ipGlobal());
260 DUNE_THROW(Dune::NotImplemented,
"pressureAtPos not implemented");
270 const FVElementGeometry& fvGeometry,
271 const SubControlVolumeFace& scvf)
const
279 const FVElementGeometry& fvGeometry,
280 const SubControlVolumeFace& scvf)
const
282 if constexpr (isCoupled_)
283 return couplingManager_->density(element, fvGeometry, scvf);
285 return asImp_().densityAtPos(scvf.ipGlobal());
293 const SubControlVolume& scv,
294 const bool isPreviousTimeStep =
false)
const
296 if constexpr (isCoupled_)
297 return couplingManager_->density(element, scv, isPreviousTimeStep);
299 return asImp_().densityAtPos(scv.dofPosition());
303 const FVElementGeometry& fvGeometry,
304 const SubControlVolumeFace& scvf,
305 const bool isPreviousTimeStep =
false)
const
307 if constexpr (isCoupled_)
308 return couplingManager_->insideAndOutsideDensity(element, fvGeometry, scvf, isPreviousTimeStep);
311 const auto rho = asImp_().densityAtPos(scvf.ipGlobal());
312 return std::make_pair(rho, rho);
321 DUNE_THROW(Dune::NotImplemented,
"densityAtPos not implemented");
329 const FVElementGeometry& fvGeometry,
330 const SubControlVolumeFace& scvf)
const
332 if constexpr (isCoupled_)
333 return couplingManager_->effectiveViscosity(element, fvGeometry, scvf);
335 return asImp_().effectiveViscosityAtPos(scvf.ipGlobal());
343 const FVElementGeometry& fvGeometry,
344 const SubControlVolume& scv)
const
346 if constexpr (isCoupled_)
347 return couplingManager_->effectiveViscosity(element, fvGeometry, scv);
349 return asImp_().effectiveViscosityAtPos(scv.dofPosition());
357 DUNE_THROW(Dune::NotImplemented,
"effectiveViscosityAtPos not implemented");
364 template<
class SolutionVector>
367 sol.resize(this->gridGeometry().numDofs());
368 std::vector<bool> dofHandled(this->gridGeometry().numDofs(),
false);
369 auto fvGeometry =
localView(this->gridGeometry());
370 for (
const auto& element : elements(this->gridGeometry().gridView()))
372 fvGeometry.bindElement(element);
373 for (
const auto& scv : scvs(fvGeometry))
375 const auto dofIdx = scv.dofIndex();
376 if (!dofHandled[dofIdx])
378 dofHandled[dofIdx] =
true;
379 sol[dofIdx] = asImp_().initial(scv)[scv.dofAxis()];
390 return asImp_().initialAtPos(scv.dofPosition());
395 const FVElementGeometry& fvGeometry,
396 const ElementVolumeVariables& elemVolVars,
397 const SubControlVolume& scv,
399 const Scalar factor = 8.0)
const
401 const Scalar velocity = elemVolVars[scv].velocity();
402 const auto scvf = scvfs(fvGeometry, scv).begin();
403 const Scalar
viscosity = effectiveViscosity(element, fvGeometry, *scvf);
404 return pseudo3DWallFriction(velocity,
viscosity, height, factor);
423 const Scalar factor = 8.0)
const
425 static_assert(dim == 2,
"Pseudo 3D wall friction may only be used in 2D");
426 return -factor * velocity *
viscosity / (height*height);
434 bool onSlipBoundary(
const FVElementGeometry& fvGeometry,
const SubControlVolumeFace& scvf)
const
435 {
return asImp_().onSlipBoundaryAtPos(scvf.center()); }
446 if constexpr (isCoupled_)
447 return *couplingManager_;
449 DUNE_THROW(Dune::InvalidStateException,
450 "Accessing coupling manager of an uncoupled problem is not possible."
456 Implementation& asImp_()
457 {
return *
static_cast<Implementation *
>(
this); }
460 const Implementation& asImp_()
const
461 {
return *
static_cast<const Implementation *
>(
this); }
463 GravityVector gravity_;
464 bool enableInertiaTerms_;
465 std::shared_ptr<CouplingManager> couplingManager_;
471template<
class TypeTag,
class DM>
479 using GridView =
typename GridGeometry::GridView;
480 using Element =
typename GridView::template Codim<0>::Entity;
483 using GridVolumeVariables =
typename GridVariables::GridVolumeVariables;
484 using ElementVolumeVariables =
typename GridVolumeVariables::LocalView;
487 using FVElementGeometry =
typename GridGeometry::LocalView;
488 using SubControlVolume =
typename FVElementGeometry::SubControlVolume;
489 using SubControlVolumeFace =
typename FVElementGeometry::SubControlVolumeFace;
492 static constexpr int dim = GridView::dimension;
493 static constexpr int dimWorld = GridView::dimensionworld;
495 using GlobalPosition =
typename SubControlVolumeFace::GlobalPosition;
496 using VelocityVector = Dune::FieldVector<Scalar, dimWorld>;
497 using GravityVector = Dune::FieldVector<Scalar, dimWorld>;
506 using Sources = Dune::FieldVector<Scalar, dimWorld>;
523 std::shared_ptr<CouplingManager> couplingManager,
524 const std::string& paramGroup =
"")
527 , couplingManager_(couplingManager)
529 if (getParamFromGroup<bool>(paramGroup,
"Problem.EnableGravity"))
530 gravity_[dim-1] = -9.81;
532 enableInertiaTerms_ = getParamFromGroup<bool>(paramGroup,
"Problem.EnableInertiaTerms");
541 const std::string& paramGroup =
"")
563 template<
class ElementVolumeVariables>
565 const FVElementGeometry& fvGeometry,
566 const ElementVolumeVariables& elemVolVars,
567 const SubControlVolume &scv)
const
570 return asImp_().sourceAtPos(scv.center());
600 const SubControlVolume& scv)
const
603 return asImp_().boundaryTypesAtPos(scv.dofPosition());
614 const SubControlVolumeFace& scvf)
const
616 DUNE_THROW(Dune::InvalidStateException,
"boundaryTypes(..., scvf) called for a CVFE method.");
629 return asImp_().dirichletAtPos(scv.dofPosition());
642 DUNE_THROW(Dune::InvalidStateException,
"dirichlet(scvf) called for CVFE method.");
658 {
return enableInertiaTerms_; }
674 const FVElementGeometry& fvGeometry,
675 const SubControlVolumeFace& scvf)
const
677 if constexpr (std::is_empty_v<CouplingManager>)
678 return asImp_().pressureAtPos(scvf.ipGlobal());
680 return couplingManager_->pressure(element, fvGeometry, scvf);
688 const FVElementGeometry& fvGeometry,
689 const SubControlVolume& scv,
690 const bool isPreviousTimeStep =
false)
const
692 if constexpr (std::is_empty_v<CouplingManager>)
693 return asImp_().pressureAtPos(scv.dofPosition());
695 return couplingManager_->pressure(element, fvGeometry, scv, isPreviousTimeStep);
703 DUNE_THROW(Dune::NotImplemented,
"pressureAtPos not implemented");
711 const FVElementGeometry& fvGeometry,
712 const SubControlVolumeFace& scvf)
const
714 if constexpr (std::is_empty_v<CouplingManager>)
715 return asImp_().densityAtPos(scvf.ipGlobal());
717 return couplingManager_->density(element, fvGeometry, scvf);
725 const FVElementGeometry& fvGeometry,
726 const SubControlVolume& scv,
727 const bool isPreviousTimeStep =
false)
const
729 if constexpr (std::is_empty_v<CouplingManager>)
730 return asImp_().densityAtPos(scv.dofPosition());
732 return couplingManager_->density(element, fvGeometry, scv, isPreviousTimeStep);
741 DUNE_THROW(Dune::NotImplemented,
"densityAtPos not implemented");
749 const FVElementGeometry& fvGeometry,
750 const SubControlVolumeFace& scvf)
const
752 if constexpr (std::is_empty_v<CouplingManager>)
753 return asImp_().effectiveViscosityAtPos(scvf.ipGlobal());
755 return couplingManager_->effectiveViscosity(element, fvGeometry, scvf);
763 const FVElementGeometry& fvGeometry,
764 const SubControlVolume& scv,
765 const bool isPreviousTimeStep =
false)
const
767 if constexpr (std::is_empty_v<CouplingManager>)
768 return asImp_().effectiveViscosityAtPos(scv.dofPosition());
770 return couplingManager_->effectiveViscosity(element, fvGeometry, scv, isPreviousTimeStep);
778 DUNE_THROW(Dune::NotImplemented,
"effectiveViscosityAtPos not implemented");
785 template<
class SolutionVector>
789 sol.resize(this->gridGeometry().numDofs());
790 std::vector<bool> dofHandled(this->gridGeometry().numDofs(),
false);
791 auto fvGeometry =
localView(this->gridGeometry());
792 for (
const auto& element : elements(this->gridGeometry().gridView()))
794 fvGeometry.bindElement(element);
795 for (
const auto& scv : scvs(fvGeometry))
797 const auto dofIdx = scv.dofIndex();
798 if (!dofHandled[dofIdx])
800 dofHandled[dofIdx] =
true;
801 sol[dofIdx] = asImp_().initial(scv);
813 return asImp_().initialAtPos(scv.dofPosition());
818 Implementation &asImp_()
819 {
return *
static_cast<Implementation *
>(
this); }
822 const Implementation &asImp_()
const
823 {
return *
static_cast<const Implementation *
>(
this); }
825 GravityVector gravity_;
826 bool enableInertiaTerms_;
827 std::shared_ptr<CouplingManager> couplingManager_ = {};
836template<
class TypeTag>
Class to specify the type of a boundary.
Definition: common/boundarytypes.hh:26
Base class for all finite-volume problems.
Definition: common/fvproblem.hh:43
Base class for all finite-volume problems using spatial parameters.
Definition: fvproblemwithspatialparams.hh:29
Class to specify the type of a boundary condition for the Navier-Stokes model.
Definition: freeflow/navierstokes/momentum/boundarytypes.hh:25
Scalar effectiveViscosity(const Element &element, const FVElementGeometry &fvGeometry, const SubControlVolumeFace &scvf) const
Returns the effective dynamic viscosity at a given sub control volume face.
Definition: freeflow/navierstokes/momentum/problem.hh:748
Dune::FieldVector< Scalar, dimWorld > Sources
Definition: freeflow/navierstokes/momentum/problem.hh:506
NavierStokesMomentumProblemImpl(std::shared_ptr< const GridGeometry > gridGeometry, std::shared_ptr< CouplingManager > couplingManager, const std::string ¶mGroup="")
The constructor.
Definition: freeflow/navierstokes/momentum/problem.hh:522
void applyInitialSolution(SolutionVector &sol) const
Applies the initial solution for all degrees of freedom of the grid.
Definition: freeflow/navierstokes/momentum/problem.hh:786
Scalar pressureAtPos(const GlobalPosition &) const
Returns the pressure at a given position.
Definition: freeflow/navierstokes/momentum/problem.hh:701
Scalar pressure(const Element &element, const FVElementGeometry &fvGeometry, const SubControlVolume &scv, const bool isPreviousTimeStep=false) const
Returns the pressure at a given sub control volume.
Definition: freeflow/navierstokes/momentum/problem.hh:687
static constexpr bool isMomentumProblem()
This problem is used for the momentum balance model.
Definition: freeflow/navierstokes/momentum/problem.hh:514
Scalar densityAtPos(const GlobalPosition &) const
Returns the density at a given position.
Definition: freeflow/navierstokes/momentum/problem.hh:739
InitialValues initial(const SubControlVolume &scv) const
Evaluate the initial value at an sub control volume.
Definition: freeflow/navierstokes/momentum/problem.hh:810
Sources sourceAtPos(const GlobalPosition &globalPos) const
Evaluate the source term for all phases at a given position.
Definition: freeflow/navierstokes/momentum/problem.hh:585
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.
Definition: freeflow/navierstokes/momentum/problem.hh:564
Scalar effectiveViscosityAtPos(const GlobalPosition &) const
Returns the effective dynamic viscosity at a given position.
Definition: freeflow/navierstokes/momentum/problem.hh:776
Dune::FieldVector< Scalar, dimWorld > InitialValues
Definition: freeflow/navierstokes/momentum/problem.hh:505
BoundaryTypes boundaryTypes(const Element &element, const SubControlVolumeFace &scvf) const
Specifies which kind of boundary condition should be used for which equation on a given boundary segm...
Definition: freeflow/navierstokes/momentum/problem.hh:613
const GravityVector & gravity() const
Returns the acceleration due to gravity.
Definition: freeflow/navierstokes/momentum/problem.hh:651
Scalar density(const Element &element, const FVElementGeometry &fvGeometry, const SubControlVolumeFace &scvf) const
Returns the density at a given sub control volume face.
Definition: freeflow/navierstokes/momentum/problem.hh:710
Dune::FieldVector< Scalar, dimWorld > DirichletValues
Definition: freeflow/navierstokes/momentum/problem.hh:507
DirichletValues dirichlet(const Element &element, const SubControlVolume &scv) const
Evaluate the boundary conditions for a Dirichlet control volume.
Definition: freeflow/navierstokes/momentum/problem.hh:626
bool enableInertiaTerms() const
Returns whether inertia terms should be considered.
Definition: freeflow/navierstokes/momentum/problem.hh:657
NavierStokesMomentumProblemImpl(std::shared_ptr< const GridGeometry > gridGeometry, const std::string ¶mGroup="")
The constructor for usage without a coupling manager.
Definition: freeflow/navierstokes/momentum/problem.hh:540
BoundaryTypes boundaryTypes(const Element &element, const SubControlVolume &scv) const
Specifies which kind of boundary condition should be used for which equation on a given boundary segm...
Definition: freeflow/navierstokes/momentum/problem.hh:599
Scalar density(const Element &element, const FVElementGeometry &fvGeometry, const SubControlVolume &scv, const bool isPreviousTimeStep=false) const
Returns the density at a given sub control volume.
Definition: freeflow/navierstokes/momentum/problem.hh:724
Dune::FieldVector< Scalar, dimWorld > BoundaryFluxes
Definition: freeflow/navierstokes/momentum/problem.hh:508
Scalar referencePressure() const
Returns a reference pressure This pressure is subtracted from the actual pressure for the momentum ba...
Definition: freeflow/navierstokes/momentum/problem.hh:666
Scalar effectiveViscosity(const Element &element, const FVElementGeometry &fvGeometry, const SubControlVolume &scv, const bool isPreviousTimeStep=false) const
Returns the effective dynamic viscosity at a given sub control volume.
Definition: freeflow/navierstokes/momentum/problem.hh:762
Scalar pressure(const Element &element, const FVElementGeometry &fvGeometry, const SubControlVolumeFace &scvf) const
Returns the pressure at a given sub control volume face.
Definition: freeflow/navierstokes/momentum/problem.hh:673
DirichletValues dirichlet(const Element &element, const SubControlVolumeFace &scvf) const
Evaluate the boundary conditions for a Dirichlet control volume face.
Definition: freeflow/navierstokes/momentum/problem.hh:639
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.
Definition: freeflow/navierstokes/momentum/problem.hh:128
NavierStokesMomentumProblemImpl(std::shared_ptr< const GridGeometry > gridGeometry, const std::string ¶mGroup="")
The constructor for usage without a coupling manager.
Definition: freeflow/navierstokes/momentum/problem.hh:105
Scalar pressure(const Element &element, const FVElementGeometry &fvGeometry, const SubControlVolumeFace &scvf) const
Returns the pressure at a given sub control volume face.
Definition: freeflow/navierstokes/momentum/problem.hh:245
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 segm...
Definition: freeflow/navierstokes/momentum/problem.hh:181
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 beha...
Definition: freeflow/navierstokes/momentum/problem.hh:420
Scalar effectiveViscosity(const Element &element, const FVElementGeometry &fvGeometry, const SubControlVolumeFace &scvf) const
Returns the effective dynamic viscosity at a given sub control volume face.
Definition: freeflow/navierstokes/momentum/problem.hh:328
bool enableInertiaTerms() const
Returns whether inertia terms should be considered.
Definition: freeflow/navierstokes/momentum/problem.hh:238
NavierStokesMomentumProblemImpl(std::shared_ptr< const GridGeometry > gridGeometry, std::shared_ptr< CouplingManager > couplingManager, const std::string ¶mGroup="")
The constructor.
Definition: freeflow/navierstokes/momentum/problem.hh:87
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.
Definition: freeflow/navierstokes/momentum/problem.hh:394
auto insideAndOutsideDensity(const Element &element, const FVElementGeometry &fvGeometry, const SubControlVolumeFace &scvf, const bool isPreviousTimeStep=false) const
Definition: freeflow/navierstokes/momentum/problem.hh:302
Scalar effectiveViscosityAtPos(const GlobalPosition &) const
Returns the effective dynamic viscosity at a given position.
Definition: freeflow/navierstokes/momentum/problem.hh:355
const CouplingManager & couplingManager() const
Definition: freeflow/navierstokes/momentum/problem.hh:444
Dune::FieldVector< Scalar, dimWorld > MomentumFluxType
Definition: freeflow/navierstokes/momentum/problem.hh:73
static constexpr bool isMomentumProblem()
This problem is used for the momentum balance model.
Definition: freeflow/navierstokes/momentum/problem.hh:79
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 subtracted from the...
Definition: freeflow/navierstokes/momentum/problem.hh:269
void applyInitialSolution(SolutionVector &sol) const
Applies the initial solution for all degrees of freedom of the grid.
Definition: freeflow/navierstokes/momentum/problem.hh:365
Scalar density(const Element &element, const FVElementGeometry &fvGeometry, const SubControlVolumeFace &scvf) const
Returns the density at a given sub control volume face.
Definition: freeflow/navierstokes/momentum/problem.hh:278
const GravityVector & gravity() const
A default, i.e. if the user's does not overload any neumann method.
Definition: freeflow/navierstokes/momentum/problem.hh:232
bool onSlipBoundary(const FVElementGeometry &fvGeometry, const SubControlVolumeFace &scvf) const
Returns true if the scvf is located on a boundary with a slip condition.
Definition: freeflow/navierstokes/momentum/problem.hh:434
Dune::FieldVector< Scalar, dimWorld > InitialValues
Definition: freeflow/navierstokes/momentum/problem.hh:68
Scalar density(const Element &element, const SubControlVolume &scv, const bool isPreviousTimeStep=false) const
Returns the density at a given sub control volume.
Definition: freeflow/navierstokes/momentum/problem.hh:292
BoundaryFluxes neumannAtPos(const GlobalPosition &globalPos) const
Returns the neumann flux at a given position.
Definition: freeflow/navierstokes/momentum/problem.hh:223
InitialValues initial(const SubControlVolume &scv) const
Evaluate the initial value at a sub control volume.
Definition: freeflow/navierstokes/momentum/problem.hh:388
Sources 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....
Definition: freeflow/navierstokes/momentum/problem.hh:163
Scalar effectiveViscosity(const Element &element, const FVElementGeometry &fvGeometry, const SubControlVolume &scv) const
Returns the effective dynamic viscosity at a given sub control volume.
Definition: freeflow/navierstokes/momentum/problem.hh:342
Scalar densityAtPos(const GlobalPosition &) const
Returns the density at a given position.
Definition: freeflow/navierstokes/momentum/problem.hh:319
Dune::FieldVector< Scalar, dimWorld > BoundaryFluxes
Definition: freeflow/navierstokes/momentum/problem.hh:71
DirichletValues dirichlet(const Element &element, const SubControlVolumeFace &scvf) const
Evaluate the boundary conditions for a dirichlet control volume face.
Definition: freeflow/navierstokes/momentum/problem.hh:198
Dune::FieldVector< Scalar, dimWorld > DirichletValues
Definition: freeflow/navierstokes/momentum/problem.hh:70
Dune::FieldVector< Scalar, dimWorld > Sources
Definition: freeflow/navierstokes/momentum/problem.hh:69
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.
Definition: freeflow/navierstokes/momentum/problem.hh:213
bool onSlipBoundaryAtPos(const GlobalPosition &pos) const
Returns true if the scvf is located on a boundary with a slip condition.
Definition: freeflow/navierstokes/momentum/problem.hh:441
Scalar pressureAtPos(const GlobalPosition &) const
Returns the pressure at a given position.
Definition: freeflow/navierstokes/momentum/problem.hh:258
Sources sourceAtPos(const GlobalPosition &globalPos) const
Evaluate the source term for all phases within a given sub-control-volume.
Definition: freeflow/navierstokes/momentum/problem.hh:150
Definition: freeflow/navierstokes/momentum/problem.hh:27
Defines all properties used in Dumux.
Base class for all finite volume problems that are parameterized.
GridCache::LocalView localView(const GridCache &gridCache)
Free function to get the local view of a grid cache object.
Definition: localview.hh:26
typename GetProp< TypeTag, Property >::type GetPropType
get the type alias defined in the property
Definition: propertysystem.hh:296
The available discretization methods in Dumux.
std::string viscosity(int phaseIdx) noexcept
I/O name of viscosity for multiphase systems.
Definition: name.hh:62
A helper to deduce a vector with the same size as numbers of equations.