LehrFEM++ 1.0.0
A simple Finite Element Library for teaching
Loading...
Searching...
No Matches
triangle.h
1
9#ifndef INCG6f934bca210e4020914d12e0910fab42
10#define INCG6f934bca210e4020914d12e0910fab42
11
12#include <lf/mesh/mesh.h>
13
14namespace lf::mesh::hybrid2d {
15
16class Point;
17class Segment;
18
28class Triangle : public mesh::Entity {
30
31 public:
33 Triangle() = default;
34
37 Triangle(const Triangle&) = delete;
38 Triangle(Triangle&&) noexcept = default;
39 Triangle& operator=(const Triangle&) = delete;
40 Triangle& operator=(Triangle&&) noexcept = default;
61 explicit Triangle(size_type index,
62 std::unique_ptr<geometry::Geometry>&& geometry,
63 const Point* corner0, const Point* corner1,
64 const Point* corner2, const Segment* edge0,
65 const Segment* edge1, const Segment* edge2);
66
68 [[nodiscard]] unsigned Codim() const override { return 0; }
69
71 [[nodiscard]] size_type index() const { return index_; }
72
80 [[nodiscard]] std::span<const Entity* const> SubEntities(
81 unsigned rel_codim) const override;
82
86 [[nodiscard]] std::span<const lf::mesh::Orientation> RelativeOrientations()
87 const override {
88 return edge_ori_;
89 }
90
95 [[nodiscard]] const geometry::Geometry* Geometry() const override {
96 return geometry_.get();
97 }
98 [[nodiscard]] base::RefEl RefEl() const override {
99 return base::RefEl::kTria();
100 }
101 [[nodiscard]] bool operator==(const mesh::Entity& rhs) const override {
102 return this == &rhs;
103 }
106 ~Triangle() override = default;
107
108 private:
109 size_type index_ = -1; // zero-based index of this entity.
110 std::unique_ptr<geometry::Geometry> geometry_; // shape information
111 std::array<const Point*, 3> nodes_{}; // nodes = corners of cell
112 std::array<const Segment*, 3> edges_{}; // edges of the cells
113 std::array<lf::mesh::Orientation, 3>
114 edge_ori_{}; // orientation of edges (set in constructor)
115 Entity* this_ = nullptr; // needed for SubEntity()
116};
117
118} // namespace lf::mesh::hybrid2d
119
120#endif // INCG6f934bca210e4020914d12e0910fab42
Represents a reference element with all its properties.
Definition ref_el.h:109
static constexpr RefEl kTria()
Returns the reference triangle.
Definition ref_el.h:161
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
An edge object for a 2D hybrid mesh.
Definition segment.h:29
Describes a trilateral cell for a 2D hybrid mesh.
Definition triangle.h:28
Triangle(Triangle &&) noexcept=default
std::unique_ptr< geometry::Geometry > geometry_
Definition triangle.h:110
std::array< lf::mesh::Orientation, 3 > edge_ori_
Definition triangle.h:114
bool operator==(const mesh::Entity &rhs) const override
Check if two entities are the same.
Definition triangle.h:101
std::array< const Point *, 3 > nodes_
Definition triangle.h:111
mesh::Mesh::size_type size_type
Definition triangle.h:29
std::span< const Entity *const > SubEntities(unsigned rel_codim) const override
Access to all subentities selected by relative co-dimension.
Definition triangle.cc:81
base::RefEl RefEl() const override
Describes the reference element type of this entity.
Definition triangle.h:98
size_type index() const
access to index of an entity
Definition triangle.h:71
Triangle(const Triangle &)=delete
const geometry::Geometry * Geometry() const override
Describes the geometry of this entity.
Definition triangle.h:95
std::span< const lf::mesh::Orientation > RelativeOrientations() const override
Access to relative orientations of edges.
Definition triangle.h:86
Triangle()=default
default constructors, needed by std::vector
std::array< const Segment *, 3 > edges_
Definition triangle.h:112
~Triangle() override=default
unsigned Codim() const override
an edge is an entity of co-dimension 1
Definition triangle.h:68
An alternative implementation of a hybrid2d mesh manager that uses Pointers to store sub-entity relat...
Definition hybrid2d.h:11