12#ifndef DUMUX_COMMON_DEFAULT_PROBLEM_HH
13#define DUMUX_COMMON_DEFAULT_PROBLEM_HH
19#include <dumux/common/boundarytypes_.hh>
37template<
class TypeTag>
43 using ElementDiscretization =
typename GridDiscretization::LocalView;
44 using GridView =
typename GridDiscretization::GridView;
45 using Element =
typename GridView::template Codim<0>::Entity;
46 using GlobalPosition =
typename Element::Geometry::GlobalCoordinate;
51 using BoundaryTypes = Dumux::Experimental::BoundaryTypes<PrimaryVariables::size()>;
82 const std::string&
name()
const
94 problemName_ = newName;
110 const typename ElementDiscretization::BoundaryFace& boundaryFace)
const
113 return asImp_().boundaryTypesAtPos(boundaryFace.center());
126 return BoundaryTypes{};
138 template<
class Res
idualVector,
class ElementVariables,
class BoundaryTypes>
140 const ElementDiscretization& elemDisc,
141 const ElementVariables& elemVars,
142 const typename ElementDiscretization::BoundaryFace& boundaryFace,
143 const BoundaryTypes& bcTypes)
const
157 template<
class Res
idualVector,
class ElementVariables,
class SubControlVolumeFace,
class BoundaryTypes>
159 const ElementDiscretization& elemDisc,
160 const ElementVariables& elemVars,
161 const SubControlVolumeFace& scvf,
162 const BoundaryTypes& bcTypes)
const
182 template<
class ElementVariables,
class FaceIpData>
184 const ElementVariables& elemVars,
185 const FaceIpData& faceIpData)
const
188 return asImp_().boundaryFluxAtPos(faceIpData.global());
221 template<
class ElementVariables,
class IpData>
222 NumEqVector
source(
const ElementDiscretization& elemDisc,
223 const ElementVariables& elemVars,
224 const IpData& ipData)
const
226 return asImp_().sourceAtPos(ipData.global());
250 template<
class MatrixBlock,
class Variables,
class IpData>
252 const Element& element,
253 const ElementDiscretization& elemDisc,
255 const IpData& ipData)
const {}
292 [[deprecated(
"Use gridDiscretization() instead")]]
294 {
return *gridDiscretization_; }
298 {
return *gridDiscretization_; }
302 {
return paramGroup_; }
307 {
return *
static_cast<Implementation *
>(
this); }
311 {
return *
static_cast<const Implementation *
>(
this); }
315 std::shared_ptr<const GridDiscretization> gridDiscretization_;
318 std::string paramGroup_;
321 std::string problemName_;
Free functions for adding boundary flux integral contributions to a residual vector.
void addFEBoundaryFluxIntegral(ResidualVector &residual, const ElementDiscretization &elemDisc, const ElementVariables &elemVars, const typename ElementDiscretization::BoundaryFace &boundaryFace, const BoundaryTypes &bcTypes) const
Evaluates finite-element boundary flux integral contributions for a given boundary face.
Definition common/problem.hh:139
const std::string & paramGroup() const
The parameter group in which to retrieve runtime parameters.
Definition common/problem.hh:301
void addSourceDerivatives(MatrixBlock &block, const Element &element, const ElementDiscretization &elemDisc, const Variables &volVars, const IpData &ipData) const
Add source term derivative to the Jacobian.
Definition common/problem.hh:251
Implementation & asImp_()
Returns the implementation of the problem (i.e. static polymorphism).
Definition common/problem.hh:306
const GridDiscretization & gridDiscretization() const
The grid discretization.
Definition common/problem.hh:297
const std::string & name() const
The problem name.
Definition common/problem.hh:82
EmptyPointSources pointSources() const
Return the point sources for this problem.
Definition common/problem.hh:288
NumEqVector boundaryFluxAtPos(const GlobalPosition &globalPos) const
Evaluate the boundary flux at a given position.
Definition common/problem.hh:199
BoundaryTypes boundaryTypes(const ElementDiscretization &elemDisc, const typename ElementDiscretization::BoundaryFace &boundaryFace) const
Specifies which kind of boundary condition should be used for which equation on a given boundary face...
Definition common/problem.hh:109
const Implementation & asImp_() const
Returns the implementation of the problem (i.e. static polymorphism).
Definition common/problem.hh:310
const GridDiscretization & gridGeometry() const
The grid discretization.
Definition common/problem.hh:293
NumEqVector source(const ElementDiscretization &elemDisc, const ElementVariables &elemVars, const IpData &ipData) const
Evaluate the source term at a given interpolation point.
Definition common/problem.hh:222
void setName(const std::string &newName)
Set the problem name.
Definition common/problem.hh:92
void addFVBoundaryFluxIntegral(ResidualVector &residual, const ElementDiscretization &elemDisc, const ElementVariables &elemVars, const SubControlVolumeFace &scvf, const BoundaryTypes &bcTypes) const
Evaluates finite-volume boundary flux integral contributions for a given scvf.
Definition common/problem.hh:158
NumEqVector boundaryFlux(const ElementDiscretization &elemDisc, const ElementVariables &elemVars, const FaceIpData &faceIpData) const
Evaluate the boundary conditions for a neumann boundary segment.
Definition common/problem.hh:183
NumEqVector sourceAtPos(const GlobalPosition &globalPos) const
Evaluate the source term for all phases at a given position.
Definition common/problem.hh:239
Problem(std::shared_ptr< const GridDiscretization > gridDiscretization, const std::string ¶mGroup="")
Constructor.
Definition common/problem.hh:67
BoundaryTypes boundaryTypesAtPos(const GlobalPosition &globalPos) const
Specifies which kind of boundary condition should be used for which equation on a given boundary segm...
Definition common/problem.hh:122
Class that represents the variables of a model. We assume that models are formulated on the basis of ...
Definition experimental/common/variables.hh:41
Defines all properties used in Dumux.
Concepts for discretization types.
void addFVBoundaryFluxIntegral(ResidualVector &residual, const Problem &problem, const ElementDiscretization &elemDisc, const ElementVariables &elemVars, const typename ElementDiscretization::SubControlVolumeFace &scvf, const BoundaryTypes &bcTypes)
Adds boundary flux contributions to the residual for a single FV sub-control volume face.
Definition boundaryfluxintegral.hh:35
void addFEBoundaryFluxIntegral(ResidualVector &residual, const Problem &problem, const ElementDiscretization &elemDisc, const ElementVariables &elemVars, const typename ElementDiscretization::BoundaryFace &boundaryFace, const BoundaryTypes &bcTypes)
Adds boundary flux contributions to the residual related to FE discretization.
Definition boundaryfluxintegral.hh:68
typename NumEqVectorTraits< PrimaryVariables >::type NumEqVector
A vector with the same size as numbers of equations This is the default implementation and has to be ...
Definition numeqvector.hh:34
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
Definition assembly/assembler.hh:44
A helper to deduce a vector with the same size as numbers of equations.
The infrastructure to retrieve run-time parameters from Dune::ParameterTrees.
Point source types and helpers for handling point sources.
Empty point sources.
Definition pointsources.hh:41
export traits of this problem
Definition common/problem.hh:56
Problem::NumEqVector NumEqVector
Definition common/problem.hh:59
Problem::PrimaryVariables PrimaryVariables
Definition common/problem.hh:58
Problem::Scalar Scalar
Definition common/problem.hh:57