12#ifndef DUMUX_DIRICHLET_CONSTRAINTS_HH
13#define DUMUX_DIRICHLET_CONSTRAINTS_HH
18#include <unordered_map>
21#include <dune/grid/common/rangegenerators.hh>
27template<
class Info,
class Values>
43template<
class DirichletConstra
intInfo,
class DirichletValues,
class IndexType>
69template<
class Constra
int,
class Gr
idDiscretization,
class Constra
intInfoFunc,
class ValuesFunc>
72 const ConstraintInfoFunc& constraintInfo,
73 const ValuesFunc& values)
76 using ConstraintValues =
typename Constraint::ConstraintValues;
77 using GridIndexType =
typename Constraint::GridIndexType;
78 static constexpr auto noConstraint = std::numeric_limits<std::size_t>::max();
85 elemDisc.bindElement(element);
86 for (
const auto& boundaryFace : boundaryFaces(elemDisc))
88 for (
const auto& localDof :
localDofs(elemDisc, boundaryFace))
90 const ConstraintInfo info = constraintInfo(elemDisc, boundaryFace, localDof);
91 auto& index = constraintIndex[localDof.dofIndex()];
97 if (index == noConstraint)
99 index = constraints.size();
101 ConstraintValues(values(elemDisc, localDof)),
102 static_cast<GridIndexType
>(localDof.dofIndex())});
105 auto& mergedInfo = constraints[index].info_;
106 if (!mergedInfo.isConstraintEquation(eqIdx))
107 mergedInfo.set(info.eqToPriVarIndex(eqIdx), eqIdx);
Class to specify information related to constraints.
Definition constraintinfo.hh:26
static constexpr int size()
we might have a constraint for each equation
Definition constraintinfo.hh:32
bool isConstraintEquation(int eqIdx) const
Returns true if an equation is used to specify a constraint condition.
Definition constraintinfo.hh:73
void appendBoundaryDirichletConstraints(std::vector< Constraint > &constraints, const GridDiscretization &gridDiscretization, const ConstraintInfoFunc &constraintInfo, const ValuesFunc &values)
Append the Dirichlet constraints of the local dofs on the boundary faces of a grid discretization.
Definition dirichletconstraints.hh:70
GridCache::LocalView localView(const GridCache &gridCache)
Free function to get the local view of a grid cache object.
Definition localview.hh:26
decltype(auto) gridDiscretization(const T &t, Args &&... args)
The grid discretization.
Definition griddiscretization.hh:65
auto localDofs(const FVElementGeometry &fvGeometry)
range over local dofs
Definition localdof.hh:50
Definition dirichletconstraints.hh:29
Info ConstraintInfo
Definition dirichletconstraints.hh:30
const ConstraintValues & values() const
Definition dirichletconstraints.hh:36
ConstraintValues values_
Definition dirichletconstraints.hh:40
ConstraintInfo info_
Definition dirichletconstraints.hh:39
Values ConstraintValues
Definition dirichletconstraints.hh:31
const ConstraintInfo & constraintInfo() const
Definition dirichletconstraints.hh:33
Definition dirichletconstraints.hh:45
IndexType GridIndexType
Definition dirichletconstraints.hh:46
GridIndexType dofIndex() const
Definition dirichletconstraints.hh:48
GridIndexType dofIdx_
Definition dirichletconstraints.hh:51