LehrFEM++ 1.0.0
A simple Finite Element Library for teaching
Loading...
Searching...
No Matches
quad.h
1
9#ifndef INCG9dc22ac9eb6645d3a27f60a7abcd52a4
10#define INCG9dc22ac9eb6645d3a27f60a7abcd52a4
11
12#include <lf/mesh/mesh.h>
13
14namespace lf::mesh::hybrid2d {
15
16class Point;
17class Segment;
18
30
31 public:
33 Quadrilateral() = default;
34
39 Quadrilateral(const Quadrilateral&) = delete;
40 Quadrilateral(Quadrilateral&&) noexcept = default;
41 Quadrilateral& operator=(const Quadrilateral&) = delete;
42 Quadrilateral& operator=(Quadrilateral&&) noexcept = default;
44
66 std::unique_ptr<geometry::Geometry>&& geometry,
67 const Point* corner0, const Point* corner1,
68 const Point* corner2, const Point* corner3,
69 const Segment* edge0, const Segment* edge1,
70 const Segment* edge2, const Segment* edge3);
71
73 [[nodiscard]] unsigned Codim() const override { return 0; }
74
84 [[nodiscard]] std::span<const Entity* const> SubEntities(
85 unsigned rel_codim) const override;
86
90 [[nodiscard]] std::span<const lf::mesh::Orientation> RelativeOrientations()
91 const override {
92 return edge_ori_;
93 }
94
96 [[nodiscard]] size_type index() const { return index_; }
97
103 [[nodiscard]] const geometry::Geometry* Geometry() const override {
104 return geometry_.get();
105 }
106 [[nodiscard]] base::RefEl RefEl() const override {
107 return base::RefEl::kQuad();
108 }
109 [[nodiscard]] bool operator==(const mesh::Entity& rhs) const override {
110 return this == &rhs;
111 }
114 ~Quadrilateral() override = default;
115
116 private:
117 size_type index_ = -1; // zero-based index of this entity.
118 std::unique_ptr<geometry::Geometry> geometry_; // shape information
119 std::array<const Point*, 4> nodes_{}; // nodes = corners of quad
120 std::array<const Segment*, 4> edges_{}; // edges of quad
121 std::array<lf::mesh::Orientation, 4>
122 edge_ori_{}; // orientation of edges (set in constructor)
123 Entity* this_ = nullptr; // needed for SubEntity()
124};
125
126} // namespace lf::mesh::hybrid2d
127
128#endif // INCG9dc22ac9eb6645d3a27f60a7abcd52a4
Represents a reference element with all its properties.
Definition ref_el.h:109
static constexpr RefEl kQuad()
Returns the reference quadrilateral.
Definition ref_el.h:169
Interface class for shape information on a mesh cell in the spirit of parametric finite element metho...
Interface class representing a topological entity in a cellular complex
Definition entity.h:42
lf::base::size_type size_type
A node object for a 2D hybrid mesh.
Definition point.h:28
Describes a general quadrilateral cell for a 2D hybrid mesh.
Definition quad.h:28
mesh::Mesh::size_type size_type
Definition quad.h:29
size_type index() const
access to index of an entity
Definition quad.h:96
bool operator==(const mesh::Entity &rhs) const override
Check if two entities are the same.
Definition quad.h:109
base::RefEl RefEl() const override
Describes the reference element type of this entity.
Definition quad.h:106
std::array< const Point *, 4 > nodes_
Definition quad.h:119
const geometry::Geometry * Geometry() const override
Describes the geometry of this entity.
Definition quad.h:103
std::array< lf::mesh::Orientation, 4 > edge_ori_
Definition quad.h:122
std::span< const Entity *const > SubEntities(unsigned rel_codim) const override
Access to all subentities selected by relative co-dimension.
Definition quad.cc:84
std::array< const Segment *, 4 > edges_
Definition quad.h:120
std::span< const lf::mesh::Orientation > RelativeOrientations() const override
Access to relative orientations of edges.
Definition quad.h:90
std::unique_ptr< geometry::Geometry > geometry_
Definition quad.h:118
Quadrilateral()=default
default constructors, needed by std::vector
Quadrilateral(Quadrilateral &&) noexcept=default
unsigned Codim() const override
an edge is an entity of co-dimension 1
Definition quad.h:73
~Quadrilateral() override=default
Quadrilateral(const Quadrilateral &)=delete
An edge object for a 2D hybrid mesh.
Definition segment.h:29
An alternative implementation of a hybrid2d mesh manager that uses Pointers to store sub-entity relat...
Definition hybrid2d.h:11