version 3.11-dev
Loading...
Searching...
No Matches
common/spatialparams.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// SPDX-FileCopyrightText: Copyright © DuMux Project contributors, see AUTHORS.md in root folder
5// SPDX-License-Identifier: GPL-3.0-or-later
6//
13#ifndef DUMUX_COMMON_SPATIAL_PARAMS_HH
14#define DUMUX_COMMON_SPATIAL_PARAMS_HH
15
16#include <memory>
17
18#include <dune/common/fvector.hh>
19#include <dune/common/exceptions.hh>
20
22
23namespace Dumux::Experimental {
24
30template<class GridDiscretization,
31 class Scalar,
32 class Implementation>
34{
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;
39
40 using GlobalPosition = typename Element::Geometry::GlobalCoordinate;
41 using GravityVector = Dune::FieldVector<Scalar, dimWorld>;
42
43public:
44 SpatialParams(std::shared_ptr<const GridDiscretization> gridDiscretization)
45 : gridDiscretization_(gridDiscretization)
46 , gravity_(0.0)
47 {
48 if (getParam<bool>("Problem.EnableGravity"))
49 gravity_[dimWorld-1] = -9.81;
50 }
51
61 template<class IpData, class ElementSolution>
62 Scalar extrusionFactor(const ElementDiscretization& elemDisc,
63 const IpData& ipData,
64 const ElementSolution& elemSol) const
65 {
66 // forward to generic interface
67 return asImp_().extrusionFactorAtPos(ipData.global());
68 }
69
73 Scalar extrusionFactorAtPos(const GlobalPosition& globalPos) const
74 {
75 // As a default, i.e. if the user's spatial parameters do not overload
76 // any extrusion factor method, return 1.0
77 return 1.0;
78 }
79
83 template<class IpData, class ElementSolution>
84 Scalar temperature(const ElementDiscretization& elemDisc,
85 const IpData& ipData,
86 const ElementSolution& elemSol) const
87 {
88 // forward to generic interface
89 return asImp_().temperatureAtPos(ipData.global());
90 }
91
96 Scalar temperatureAtPos(const GlobalPosition& globalPos) const
97 {
98 static const Scalar defaultTemperature = [] ()
99 {
100 Scalar defaultTemp = 293.15; // 20°C
101 if (!hasParam("SpatialParams.Temperature"))
102 {
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."
106 << std::endl;
107 }
108 const Scalar temperature = getParam<Scalar>("SpatialParams.Temperature", defaultTemp);
109 return temperature;
110 } ();
111
112 return defaultTemperature;
113 }
114
125 const GravityVector& gravity(const GlobalPosition& pos) const
126 { return gravity_; }
127
129 [[deprecated("Use gridDiscretization() instead")]]
130 const GridDiscretization& gridGeometry() const
131 { return *gridDiscretization_; }
132
134 const GridDiscretization& gridDiscretization() const
135 { return *gridDiscretization_; }
136
137protected:
139 Implementation &asImp_()
140 { return *static_cast<Implementation *>(this); }
141
143 const Implementation &asImp_() const
144 { return *static_cast<const Implementation *>(this); }
145
146private:
147 std::shared_ptr<const GridDiscretization> gridDiscretization_;
148 GravityVector gravity_;
149};
150
151} // namespace Dumux::Experimental
152
153#endif
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 &param)
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.