LehrFEM++ 1.0.0
A simple Finite Element Library for teaching
Loading...
Searching...
No Matches
quad_rule.h
1
9#ifndef INCGa7241ee797424d98ad339341b02bca70
10#define INCGa7241ee797424d98ad339341b02bca70
11
12#include <lf/base/base.h>
13
14#include <iostream>
15#include <utility>
16
17namespace lf::quad {
18
19using quadDegree_t = unsigned int;
20
58class QuadRule {
59 public:
62 QuadRule(const QuadRule&) = default;
63 QuadRule(QuadRule&&) = default;
64 QuadRule& operator=(const QuadRule&) = default;
66 ~QuadRule() = default;
75 QuadRule() : ref_el_(lf::base::RefEl::kPoint()), points_(0, 0), weights_(0) {}
76
90 explicit QuadRule(base::RefEl ref_el, Eigen::MatrixXd points,
91 Eigen::VectorXd weights, quadDegree_t degree)
92 : ref_el_(std::move(ref_el)),
93 degree_(degree),
94 points_(std::move(points)),
95 weights_(std::move(weights)) {
96 LF_ASSERT_MSG(points_.rows() == ref_el_.Dimension(), "Dimension mismatch");
97 LF_ASSERT_MSG(weights_.size() == points_.cols(), "Dimension mismatch");
98 }
99
104 [[nodiscard]] base::RefEl RefEl() const { return ref_el_; }
105
129 [[nodiscard]] quadDegree_t Degree() const { return degree_; }
130
137 [[nodiscard]] unsigned int Order() const { return Degree() + 1; }
138
145 [[nodiscard]] const Eigen::MatrixXd& Points() const { return points_; }
146
152 [[nodiscard]] const Eigen::VectorXd& Weights() const { return weights_; }
153
158 [[nodiscard]] base::size_type NumPoints() const { return points_.cols(); }
159
169 void PrintInfo(std::ostream& o, int out_ctrl = 0) const {
170 o << weights_.size() << "-point QR";
171 if (out_ctrl > 0) {
172 o << ", weights = " << weights_.transpose() << ", nodes = \n" << points_;
173 }
174 }
175
176 private:
179 Eigen::MatrixXd points_;
180 Eigen::VectorXd weights_;
181
182 public:
183};
184
194std::ostream& operator<<(std::ostream& stream,
195 const lf::quad::QuadRule& quadrule);
196
197} // namespace lf::quad
198
200
204template <>
205struct fmt::formatter<lf::quad::QuadRule> : ostream_formatter {};
207
208#endif // INCGa7241ee797424d98ad339341b02bca70
Represents a reference element with all its properties.
Definition ref_el.h:109
constexpr dim_t Dimension() const
Return the dimension of this reference element.
Definition ref_el.h:204
Represents a Quadrature Rule over one of the Reference Elements.
Definition quad_rule.h:58
QuadRule(base::RefEl ref_el, Eigen::MatrixXd points, Eigen::VectorXd weights, quadDegree_t degree)
Construct a new quadrature rule by specifying reference element, points, weights and degree of exactn...
Definition quad_rule.h:90
quadDegree_t Degree() const
Return the degree of exactness of this Quadrature Rule.
Definition quad_rule.h:129
base::RefEl ref_el_
Definition quad_rule.h:177
const Eigen::VectorXd & Weights() const
All quadrature weights as a vector.
Definition quad_rule.h:152
void PrintInfo(std::ostream &o, int out_ctrl=0) const
Output function controlled by variable out_ctrl;.
Definition quad_rule.h:169
Eigen::MatrixXd points_
Definition quad_rule.h:179
QuadRule(QuadRule &&)=default
QuadRule & operator=(const QuadRule &)=default
base::RefEl RefEl() const
The reference element over which this QuadRule integrates.
Definition quad_rule.h:104
const Eigen::MatrixXd & Points() const
All quadrature points as column vectors.
Definition quad_rule.h:145
QuadRule & operator=(QuadRule &&)=default
QuadRule()
Default constructor creating an "invalid quadrature rule".
Definition quad_rule.h:75
Eigen::VectorXd weights_
Definition quad_rule.h:180
quadDegree_t degree_
Definition quad_rule.h:178
QuadRule(const QuadRule &)=default
unsigned int Order() const
Return the order of the quadrature rule.
Definition quad_rule.h:137
base::size_type NumPoints() const
Return the total number of quadrature points (num of columns of points/weights)
Definition quad_rule.h:158
unsigned int size_type
general type for variables related to size of arrays
Definition types.h:20
Rules for numerical quadrature on reference entity shapes.
unsigned int quadDegree_t
Definition quad_rule.h:19
std::ostream & operator<<(std::ostream &stream, const lf::quad::QuadRule &quadrule)
Output operator for quadrature rules.
Definition quad_rule.cc:19
Definition assemble.h:31