AMDiS  0.3
The Adaptive Multi-Dimensional Simulation Toolbox
BoundarySubset.hpp
1 #pragma once
2 
3 #include <functional>
4 
5 #include <amdis/Boundary.hpp>
6 #include <amdis/BoundaryManager.hpp>
7 #include <amdis/common/Concepts.hpp>
8 #include <amdis/common/ConceptsBase.hpp>
9 
10 namespace AMDiS
11 {
13 
21  template <class IS>
23  {
24  using Domain = typename IS::GlobalCoordinate;
25 
26  public:
27  using Intersection = IS;
28 
31  : predicate_([](Intersection const& is) -> bool { return is.boundary(); })
32  {}
33 
36  : predicate_([&boundaryManager, id](Intersection const& is) -> bool {
37  return is.boundary() && boundaryManager.boundaryId(is) == id;
38  })
39  {}
40 
42  template <class Predicate,
43  REQUIRES(Concepts::Functor<Predicate, bool(Domain)>)>
45  : predicate_([predicate](Intersection const& is) -> bool {
46  return predicate(is.geometry().center());
47  })
48  {}
49 
51  bool operator()(Intersection const& is) const
52  {
53  return predicate_(is);
54  }
55 
56  protected:
57  std::shared_ptr<BoundaryManagerBase const> boundaryManager_;
58  BoundaryType id_{0};
59  std::function<bool(Intersection const&)> predicate_;
60  };
61 
62 } // end namespace AMDiS
bool operator()(Intersection const &is) const
Return true if intersection is on boundary segment.
Definition: BoundarySubset.hpp:51
Class defining a subset of a domain boundary.
Definition: BoundarySubset.hpp:22
constexpr bool Functor
A Functor is a function F with signature Signature.
Definition: Concepts.hpp:134
constexpr bool Predicate
A predicate is a function that returns a boolean.
Definition: Concepts.hpp:142
Contains all classes needed for solving linear and non linear equation systems.
Definition: AdaptBase.hpp:6
BoundaryType boundaryId(Intersection const &intersection) const
Return the stored boundary id for the given intersection.
Definition: BoundaryManager.hpp:23
Definition: BoundaryManager.hpp:14
BoundarySubset(Predicate &&predicate)
Use a predicate of the form bool(GlobalCoordinate) to determine a subset.
Definition: BoundarySubset.hpp:44
BoundarySubset(BoundaryManagerBase &boundaryManager, BoundaryType id)
Use a boundary manager and id to determine a subset.
Definition: BoundarySubset.hpp:35
BoundarySubset()
Default constructor. Uses a predicate that returns true on the complete boundary. ...
Definition: BoundarySubset.hpp:30