AMDiS  0.3
The Adaptive Multi-Dimensional Simulation Toolbox
QuadratureFactory.hpp
1 #pragma once
2 
3 #include <dune/common/hybridutilities.hh>
4 #include <dune/common/std/type_traits.hh>
5 #include <dune/geometry/quadraturerules.hh>
6 #include <dune/geometry/type.hh>
7 
8 #include <amdis/common/Order.hpp>
9 
10 namespace AMDiS
11 {
13  template <class ctype, int dim, class LocalFunction>
15  {
16  protected:
17  using QuadratureRule = Dune::QuadratureRule<ctype, dim>;
18 
19  public:
20  virtual ~QuadratureFactory() = default;
21 
23  virtual void bind(LocalFunction const& localFct)
24  {}
25 
27  virtual int order() const
28  {
29  return 0;
30  }
31 
34  virtual QuadratureRule const& rule(Dune::GeometryType const& type, int degree) const
35  {
36  using QuadratureRules = Dune::QuadratureRules<ctype, dim>;
37  return QuadratureRules::rule(type, degree);
38  }
39  };
40 
41 
44  template <class ctype, int dim, class LocalFunction>
46  : public QuadratureFactory<ctype, dim, LocalFunction>
47  {
48  public:
49  void bind(LocalFunction const& localFct) final
50  {
51  using AMDiS::order;
52  if constexpr (Concepts::Polynomial<LocalFunction>)
53  order_ = order(localFct);
54  }
55 
56  int order() const final { return order_; }
57 
58  private:
59  int order_ = -1;
60  };
61 
63 
64  inline auto makePreQuadratureFactory()
65  {
67  }
68 
70  template <class ctype, int dim, class LocalFunction>
72  {
74  }
75 
76 
79  template <class ctype, int dim, class LocalFunction>
81  : public QuadratureFactory<ctype, dim, LocalFunction>
82  {
84  using QuadratureRule = typename Super::QuadratureRule;
85 
86  public:
88  QuadFactoryFromOrder(int order, Dune::QuadratureType::Enum qt)
89  : order_(order)
90  , qt_(qt)
91  {}
92 
93  int order() const final { return order_; }
94 
95  QuadratureRule const& rule(Dune::GeometryType const& type, int degree) const final
96  {
97  using QuadratureRules = Dune::QuadratureRules<ctype, dim>;
98  return QuadratureRules::rule(type, degree, qt_);
99  }
100 
101  private:
102  int order_;
103  Dune::QuadratureType::Enum qt_;
104  };
105 
107  {
108  int order;
109  Dune::QuadratureType::Enum qt;
110  };
111 
112  inline auto makePreQuadratureFactory(int order, Dune::QuadratureType::Enum qt = Dune::QuadratureType::GaussLegendre)
113  {
114  return PreQuadFactoryFromOrder{order, qt};
115  }
116 
118  template <class ctype, int dim, class LocalFunction>
120  {
121  return QuadFactoryFromOrder<ctype, dim, LocalFunction>{pre.order, pre.qt};
122  }
123 
124 
126  template <class ctype, int dim, class LocalFunction>
128  : public QuadratureFactory<ctype, dim, LocalFunction>
129  {
131  using QuadratureRule = typename Super::QuadratureRule;
132 
133  public:
134  QuadFactoryFromRule(QuadratureRule const& rule)
135  : rule_(rule)
136  {}
137 
138  QuadratureRule const& rule(Dune::GeometryType const& /*type*/, int /*degree*/) const final
139  {
140  return rule_;
141  }
142 
143  private:
144  QuadratureRule const& rule_;
145  };
146 
147  template <class QuadRule>
149  {
150  QuadRule const& rule;
151  };
152 
153  template <class ctype, int dim>
154  auto makePreQuadratureFactory(Dune::QuadratureRule<ctype, dim> const& rule)
155  {
157  }
158 
160  template <class ctype, int dim, class LocalFunction, class QuadRule>
162  {
164  }
165 
166 } // end namespace AMDiS
Definition: QuadratureFactory.hpp:106
auto makeQuadratureFactory(PreQuadFactoryFromRule< QuadRule > const &pre)
Generator for QuadFactoryFromRule.
Definition: QuadratureFactory.hpp:161
virtual int order() const
Return the quadrature order of the coefficient relates to the localFunction.
Definition: QuadratureFactory.hpp:27
Definition: QuadratureFactory.hpp:62
QuadFactoryFromOrder(int order, Dune::QuadratureType::Enum qt)
Constructor. Takes the order of the localCoefficient and a quadrature-type.
Definition: QuadratureFactory.hpp:88
int order() const final
Return the quadrature order of the coefficient relates to the localFunction.
Definition: QuadratureFactory.hpp:93
Definition: QuadratureFactory.hpp:148
QuadratureRule const & rule(Dune::GeometryType const &, int) const final
Definition: QuadratureFactory.hpp:138
QuadratureRule const & rule(Dune::GeometryType const &type, int degree) const final
Definition: QuadratureFactory.hpp:95
Contains all classes needed for solving linear and non linear equation systems.
Definition: AdaptBase.hpp:6
virtual QuadratureRule const & rule(Dune::GeometryType const &type, int degree) const
Definition: QuadratureFactory.hpp:34
auto makeQuadratureFactory(PreQuadFactoryFromOrder const &pre)
Generator for QuadFactoryFromOrder.
Definition: QuadratureFactory.hpp:119
void bind(LocalFunction const &localFct) final
Bind the rule to a localFunction.
Definition: QuadratureFactory.hpp:49
Factory for quadrature rule, that is based on an existing rule.
Definition: QuadratureFactory.hpp:127
auto order(F const &f) -> decltype(&F::operator(), f.order())
polynomial order of functions
Definition: Order.hpp:11
Factory for quadrature rule, that calculates the coefficient order from a localFunction passed to the...
Definition: QuadratureFactory.hpp:45
virtual void bind(LocalFunction const &localFct)
Bind the rule to a localFunction.
Definition: QuadratureFactory.hpp:23
Factory for quadrature rule, that takes to order of the localFunction and a quadrature-type.
Definition: QuadratureFactory.hpp:80
int order() const final
Return the quadrature order of the coefficient relates to the localFunction.
Definition: QuadratureFactory.hpp:56
auto makeQuadratureFactory(PreQuadFactoryFromLocalFunction const &)
Generator for QuadFactoryFromLocalFunction.
Definition: QuadratureFactory.hpp:71
Base class for quadrature factories for localFunctions.
Definition: QuadratureFactory.hpp:14