7 #include <dune/common/concept.hh> 8 #include <dune/functions/functionspacebases/concepts.hh> 9 #include <dune/functions/functionspacebases/subspacebasis.hh> 11 #include <amdis/Boundary.hpp> 12 #include <amdis/BoundaryCondition.hpp> 13 #include <amdis/BoundarySubset.hpp> 14 #include <amdis/common/Concepts.hpp> 15 #include <amdis/common/TypeTraits.hpp> 16 #include <amdis/typetree/RangeType.hpp> 17 #include <amdis/typetree/TreePath.hpp> 42 template <
class Mat,
class Sol,
class Rhs,
class RowSubBasis,
class ColSubBasis,
50 using GridView =
typename RowSubBasis::GridView;
51 using Intersection =
typename GridView::Intersection;
53 using Domain =
typename GridView::template Codim<0>::Geometry::GlobalCoordinate;
54 using Range = TYPEOF(std::declval<ValueGridFct>()(std::declval<Domain>()));
58 template <
class Values,
62 : rowBasis_(
std::move(rowBasis))
63 , colBasis_(
std::move(colBasis))
64 , boundarySubset_(
std::move(boundarySubset))
65 , values_(FWD(values))
80 void apply(Mat& matrix, Sol& solution, Rhs& rhs)
override;
83 RowSubBasis rowBasis_;
84 ColSubBasis colBasis_;
88 std::vector<bool> dirichletNodes_;
93 template <
class Mat,
class Sol,
class Rhs,
class RB,
class RTP,
class CB,
class CTP,
class Values>
95 Dune::Functions::SubspaceBasis<CB, CTP> colBasis,
99 using RowSubBasis = Dune::Functions::SubspaceBasis<RB, RTP>;
100 using ColSubBasis = Dune::Functions::SubspaceBasis<CB, CTP>;
102 return BcType(std::move(rowBasis), std::move(colBasis), std::move(boundarySubset), FWD(values));
106 template <
class Mat,
class Sol,
class Rhs,
class RB,
class RTP,
class CB,
class CTP,
class Values,
107 REQUIRES(Concepts::GlobalBasis<RB>),
108 REQUIRES(Concepts::GlobalBasis<CB>)>
110 CB
const& colBasis, CTP
const& colTreePath,
114 return makeDirichletBC<Mat,Sol,Rhs>(
115 Dune::Functions::subspaceBasis(rowBasis, rowTreePath),
116 Dune::Functions::subspaceBasis(colBasis, colTreePath),
117 std::move(boundarySubset), FWD(values));
121 template <
class Mat,
class Sol,
class Rhs,
class RB,
class CB,
class Values,
122 REQUIRES(Concepts::GlobalBasis<RB>),
123 REQUIRES(Concepts::GlobalBasis<CB>)>
128 return makeDirichletBC<Mat, Sol, Rhs>(
129 rowBasis, makeTreePath(), colBasis, makeTreePath(),
130 std::move(boundarySubset), FWD(values));
135 #include "DirichletBC.inc.hpp" void init() override
Definition: DirichletBC.inc.hpp:38
constexpr bool Functor
A Functor is a function F with signature Signature.
Definition: Concepts.hpp:134
Definition: FieldMatVec.hpp:12
Implements a boundary condition of Dirichlet-type.
Definition: DirichletBC.hpp:44
auto makeDirichletBC(Dune::Functions::SubspaceBasis< RB, RTP > rowBasis, Dune::Functions::SubspaceBasis< CB, CTP > colBasis, BoundarySubset< typename RB::GridView::Intersection > boundarySubset, Values &&values)
Make a DirichletBC from subspacebases.
Definition: DirichletBC.hpp:94
Contains all classes needed for solving linear and non linear equation systems.
Definition: AdaptBase.hpp:6
void apply(Mat &matrix, Sol &solution, Rhs &rhs) override
Apply dirichlet BC to matrix and vector.
Definition: DirichletBC.inc.hpp:52
DirichletBC(RowSubBasis rowBasis, ColSubBasis colBasis, BoundarySubset< Intersection > boundarySubset, Values &&values)
Constructor accepting subspacebases.
Definition: DirichletBC.hpp:60
Interface class for boundary conditions.
Definition: BoundaryCondition.hpp:20