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
159 template<
class Res
idualVector,
class ElementVariables,
class BoundaryTypes>
161 const ElementDiscretization& elemDisc,
162 const ElementVariables& elemVars,
163 const typename ElementDiscretization::SubControlVolumeFace& scvf,
164 const BoundaryTypes& bcTypes)
const
185 template<
class ElementVariables,
class FaceIpData>
187 const ElementVariables& elemVars,
188 const FaceIpData& faceIpData)
const
191 return asImp_().boundaryFluxAtPos(faceIpData.global());
224 template<
class ElementVariables,
class IpData>
225 NumEqVector
source(
const ElementDiscretization& elemDisc,
226 const ElementVariables& elemVars,
227 const IpData& ipData)
const
229 return asImp_().sourceAtPos(ipData.global());
253 template<
class MatrixBlock,
class Variables,
class IpData>
255 const Element& element,
256 const ElementDiscretization& elemDisc,
258 const IpData& ipData)
const {}
295 [[deprecated(
"Use gridDiscretization() instead")]]
297 {
return *gridDiscretization_; }
301 {
return *gridDiscretization_; }
305 {
return paramGroup_; }
310 {
return *
static_cast<Implementation *
>(
this); }
314 {
return *
static_cast<const Implementation *
>(
this); }
318 std::shared_ptr<const GridDiscretization> gridDiscretization_;
321 std::string paramGroup_;
324 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:304
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:254
Implementation & asImp_()
Returns the implementation of the problem (i.e. static polymorphism).
Definition common/problem.hh:309
void addFVBoundaryFluxIntegral(ResidualVector &residual, const ElementDiscretization &elemDisc, const ElementVariables &elemVars, const typename ElementDiscretization::SubControlVolumeFace &scvf, const BoundaryTypes &bcTypes) const
Evaluates finite-volume boundary flux integral contributions for a given scvf.
Definition common/problem.hh:160
const GridDiscretization & gridDiscretization() const
The grid discretization.
Definition common/problem.hh:300
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:291
NumEqVector boundaryFluxAtPos(const GlobalPosition &globalPos) const
Evaluate the boundary flux at a given position.
Definition common/problem.hh:202
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:313
const GridDiscretization & gridGeometry() const
The grid discretization.
Definition common/problem.hh:296
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:225
void setName(const std::string &newName)
Set the problem name.
Definition common/problem.hh:92
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:186
NumEqVector sourceAtPos(const GlobalPosition &globalPos) const
Evaluate the source term for all phases at a given position.
Definition common/problem.hh:242
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.
Concept for pure finite-element discretizations (no FV structure).
Definition concepts.hh:50
Concept for finite-volume discretizations.
Definition concepts.hh:26
Concept for hybrid finite-element/finite-volume discretizations.
Definition concepts.hh:39
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