AMDiS  0.3
The Adaptive Multi-Dimensional Simulation Toolbox
DirichletBC.inc.hpp
1 #pragma once
2 
3 #include <type_traits>
4 
5 #include <dune/functions/functionspacebases/subentitydofs.hh>
6 
7 #include <amdis/functions/Interpolate.hpp>
8 #include <amdis/LinearAlgebra.hpp>
9 
10 namespace AMDiS {
11 
12 template <class B, class V>
15 {
16  dirichletNodes_.assign(basis_.dimension(), false);
17 
18  auto localView = basis_.localView();
19  auto seDOFs = Dune::Functions::subEntityDOFs(basis_);
20  auto const& gridView = basis_.gridView();
21  for (auto const& element : elements(gridView, typename BackendTraits<B>::PartitionSet{})) {
22  if (element.hasBoundaryIntersections()) {
23  localView.bind(element);
24  for(auto const& intersection: intersections(gridView, element))
25  if (intersection.boundary())
26  for(auto localIndex: seDOFs.bind(localView,intersection))
27  dirichletNodes_[localView.index(localIndex)]
28  = dirichletNodes_[localView.index(localIndex)] || boundarySubset_(intersection);
29  }
30  }
31 
32 }
33 
34 
35 template <class B, class V>
36  template <class Mat, class Sol, class Rhs>
38 apply(Mat& matrix, Sol& solution, Rhs& rhs)
39 {
40  AMDiS::interpolate(basis_, solution, values_, tag::defaulted{}, tag::defaulted{}, dirichletNodes_);
41  dirichletBC(matrix, solution, rhs, dirichletNodes_);
42 }
43 
44 } // end namespace AMDiS
Definition: Tags.hpp:17
void interpolate(Basis const &basis, Vec &vec, GF const &gf, TP const &tp_, C &&c_, BV &&bv_, Assign &&a_)
Interpolate given function in discrete function space.
Definition: Interpolate.hpp:120
Contains all classes needed for solving linear and non linear equation systems.
Definition: AdaptBase.hpp:6
void init()
Definition: DirichletBC.inc.hpp:14
void apply(Mat &matrix, Sol &solution, Rhs &rhs)
Apply dirichlet BC to matrix and vector.
Definition: DirichletBC.inc.hpp:38