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>;
 
   95            gravity_[dim-1]  = -9.81;
 
 
  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 
  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>
 
  368        std::vector<bool> dofHandled(this->
gridGeometry().numDofs(), 
false);
 
  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();
 
 
  421                                const Scalar viscosity,
 
  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,
 
  527    , couplingManager_(couplingManager)
 
  530            gravity_[dim-1]  = -9.81;
 
 
  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>
 
  790        std::vector<bool> dofHandled(this->
gridGeometry().numDofs(), 
false);
 
  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>
 
const std::string & paramGroup() const
The parameter group in which to retrieve runtime parameters.
Definition common/fvproblem.hh:524
const PointSourceMap & pointSourceMap() const
Get the point source map. It stores the point sources per scv.
Definition common/fvproblem.hh:481
const GridGeometry & gridGeometry() const
The finite volume grid geometry.
Definition common/fvproblem.hh:520
FVProblemWithSpatialParams(std::shared_ptr< const GridGeometry > gridGeometry, const std::string ¶mGroup="")
Constructor.
Definition fvproblemwithspatialparams.hh:42
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
NavierStokesMomentumBoundaryTypes< ModelTraits::dim()> BoundaryTypes
Export the boundary types.
Definition freeflow/navierstokes/momentum/problem.hh:511
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
NavierStokesMomentumBoundaryTypes< ModelTraits::dim()> BoundaryTypes
Export the boundary types.
Definition freeflow/navierstokes/momentum/problem.hh:76
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.
Class to specify the type of a boundary condition for the Navier-Stokes model.
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
NavierStokesMomentumProblemImpl< TypeTag, typename GetPropType< TypeTag, Properties::GridGeometry >::DiscretizationMethod > NavierStokesMomentumProblem
Navier-Stokes momentum problem class.
Definition freeflow/navierstokes/momentum/problem.hh:837
T getParamFromGroup(Args &&... args)
A free function to get a parameter from the parameter tree singleton with a model group.
Definition parameters.hh:149
typename GetProp< TypeTag, Property >::type GetPropType
get the type alias defined in the property
Definition propertysystem.hh:296
The available discretization methods in Dumux.
A helper to deduce a vector with the same size as numbers of equations.