13#ifndef DUMUX_COMMON_SPATIAL_PARAMS_HH
14#define DUMUX_COMMON_SPATIAL_PARAMS_HH
18#include <dune/common/fvector.hh>
19#include <dune/common/exceptions.hh>
30template<
class GridDiscretization,
35 using GridView =
typename GridDiscretization::GridView;
36 using Element =
typename GridView::template Codim<0>::Entity;
37 using ElementDiscretization =
typename GridDiscretization::LocalView;
38 static constexpr int dimWorld = GridView::dimensionworld;
40 using GlobalPosition =
typename Element::Geometry::GlobalCoordinate;
41 using GravityVector = Dune::FieldVector<Scalar, dimWorld>;
49 gravity_[dimWorld-1] = -9.81;
61 template<
class IpData,
class ElementSolution>
64 const ElementSolution& elemSol)
const
67 return asImp_().extrusionFactorAtPos(ipData.global());
83 template<
class IpData,
class ElementSolution>
86 const ElementSolution& elemSol)
const
89 return asImp_().temperatureAtPos(ipData.global());
98 static const Scalar defaultTemperature = [] ()
100 Scalar defaultTemp = 293.15;
101 if (!
hasParam(
"SpatialParams.Temperature"))
103 std::cout <<
" -- Using the default temperature of " << defaultTemp <<
" in the entire domain. "
104 <<
"Overload temperatureAtPos() in your spatial params class to define a custom temperature field."
105 <<
"Or provide the preferred domain temperature via the SpatialParams.Temperature parameter."
112 return defaultTemperature;
125 const GravityVector&
gravity(
const GlobalPosition& pos)
const
129 [[deprecated(
"Use gridDiscretization() instead")]]
131 {
return *gridDiscretization_; }
135 {
return *gridDiscretization_; }
140 {
return *
static_cast<Implementation *
>(
this); }
144 {
return *
static_cast<const Implementation *
>(
this); }
147 std::shared_ptr<const GridDiscretization> gridDiscretization_;
148 GravityVector gravity_;
const Implementation & asImp_() const
Returns the implementation of the spatial parameters (static polymorphism).
Definition common/spatialparams.hh:143
Scalar temperatureAtPos(const GlobalPosition &globalPos) const
Return the temperature in the domain at the given position.
Definition common/spatialparams.hh:96
Scalar temperature(const ElementDiscretization &elemDisc, const IpData &ipData, const ElementSolution &elemSol) const
Return the temperature at an integration point.
Definition common/spatialparams.hh:84
Scalar extrusionFactor(const ElementDiscretization &elemDisc, const IpData &ipData, const ElementSolution &elemSol) const
Return how much the domain is extruded at an integration point.
Definition common/spatialparams.hh:62
const GridDiscretization & gridGeometry() const
The finite volume grid geometry.
Definition common/spatialparams.hh:130
SpatialParams(std::shared_ptr< const GridDiscretization > gridDiscretization)
Definition common/spatialparams.hh:44
const GravityVector & gravity(const GlobalPosition &pos) const
Returns the acceleration due to gravity .
Definition common/spatialparams.hh:125
Implementation & asImp_()
Returns the implementation of the spatial parameters (static polymorphism).
Definition common/spatialparams.hh:139
const GridDiscretization & gridDiscretization() const
The grid discretization.
Definition common/spatialparams.hh:134
Scalar extrusionFactorAtPos(const GlobalPosition &globalPos) const
Return how much the domain is extruded at a given position.
Definition common/spatialparams.hh:73
bool hasParam(const std::string ¶m)
Check whether a key exists in the parameter tree.
Definition parameters.hh:157
T getParam(Args &&... args)
A free function to get a parameter from the parameter tree singleton.
Definition parameters.hh:139
Definition assembly/assembler.hh:44
The infrastructure to retrieve run-time parameters from Dune::ParameterTrees.