LehrFEM++ 1.0.0
A simple Finite Element Library for teaching
Loading...
Searching...
No Matches
quad_rule_cache.cc
1
9#include "quad_rule_cache.h"
10
11#include "make_quad_rule.h"
12
13namespace lf::quad {
14const QuadRule& QuadRuleCache::Get(base::RefEl ref_el, unsigned degree) const {
15 LF_ASSERT_MSG(degree >= 0, "degree must be non-negative.");
16 auto& vector = cache_[ref_el.Id()];
17 if (vector.size() < degree + 1) {
18 vector.resize(degree + 1);
19 }
20 auto& qr = vector[degree];
21 if (qr.NumPoints() == 0) {
22 qr = make_QuadRule(ref_el, degree);
23 }
24 LF_ASSERT_MSG(qr.Degree() >= degree, "something is horribly wrong.");
25 return qr;
26}
27} // namespace lf::quad
Represents a reference element with all its properties.
Definition ref_el.h:109
constexpr unsigned int Id() const
Return a unique id for this reference element.
Definition ref_el.h:494
const QuadRule & Get(base::RefEl ref_el, unsigned degree) const
Retrieve a quadrature rule for reference element ref_el with degree d. Is identical to calling make_Q...
std::array< std::deque< QuadRule >, 5 > cache_
Represents a Quadrature Rule over one of the Reference Elements.
Definition quad_rule.h:58
Rules for numerical quadrature on reference entity shapes.
QuadRule make_QuadRule(base::RefEl ref_el, unsigned degree)
Returns a QuadRule object for the given Reference Element and Degree.