PolyDiM
C++ library for POLYtopal DIscretization Methods
Loading...
Searching...
No Matches
FEM_PCC_2D_LocalSpace.hpp
Go to the documentation of this file.
1// _LICENSE_HEADER_
2//
3// Copyright (C) 2019 - 2025.
4// Terms register on the GPL-3.0 license.
5//
6// This file can be redistributed and/or modified under the license terms.
7//
8// See top level LICENSE file for more details.
9//
10// This file can be used citing references in CITATION.cff file.
11
12#ifndef __FEM_PCC_2D_LocalSpace_HPP
13#define __FEM_PCC_2D_LocalSpace_HPP
14
19
20namespace Polydim
21{
22namespace FEM
23{
24namespace PCC
25{
26
28{
29 private:
32
33 public:
36
38 const Polydim::FEM::PCC::FEM_PCC_2D_LocalSpace_Data &local_space) const
39 {
40 switch (local_space.fem_type)
41 {
43
44 return triangle_local_space.ComputeBasisFunctionsValues(reference_element_data.triangle_reference_element_data,
45 local_space.triangle_local_space_data);
46 }
48 return quadrilateral_local_space.ComputeBasisFunctionsValues(reference_element_data.quadrilateral_reference_element_data,
50 }
51 default:
52 throw std::runtime_error("not valid fem type");
53 }
54 }
55
57 const Polydim::FEM::PCC::FEM_PCC_2D_LocalSpace_Data &local_space) const
58 {
59 switch (local_space.fem_type)
60 {
62
63 return triangle_local_space.ComputeBasisFunctionsLaplacianValues(reference_element_data.triangle_reference_element_data,
64 local_space.triangle_local_space_data);
65 }
67 return quadrilateral_local_space.ComputeBasisFunctionsLaplacianValues(reference_element_data.quadrilateral_reference_element_data,
69 }
70 default:
71 throw std::runtime_error("not valid fem type");
72 }
73 }
74
75 std::vector<Eigen::MatrixXd> ComputeBasisFunctionsDerivativeValues(const Polydim::FEM::PCC::FEM_PCC_2D_ReferenceElement_Data &reference_element_data,
76 const Polydim::FEM::PCC::FEM_PCC_2D_LocalSpace_Data &local_space) const
77 {
78 switch (local_space.fem_type)
79 {
81
82 return triangle_local_space.ComputeBasisFunctionsDerivativeValues(reference_element_data.triangle_reference_element_data,
83 local_space.triangle_local_space_data);
84 }
86 return quadrilateral_local_space.ComputeBasisFunctionsDerivativeValues(reference_element_data.quadrilateral_reference_element_data,
88 }
89 default:
90 throw std::runtime_error("not valid fem type");
91 }
92 }
93
96 const Eigen::MatrixXd &points) const
97 {
98 switch (local_space.fem_type)
99 {
101
102 return triangle_local_space.ComputeBasisFunctionsValues(reference_element_data.triangle_reference_element_data,
103 local_space.triangle_local_space_data,
104 points);
105 }
107 return quadrilateral_local_space.ComputeBasisFunctionsValues(reference_element_data.quadrilateral_reference_element_data,
109 points);
110 }
111 default:
112 throw std::runtime_error("not valid fem type");
113 }
114 }
115
118 const Eigen::MatrixXd &points) const
119 {
120 switch (local_space.fem_type)
121 {
123
124 return triangle_local_space.ComputeBasisFunctionsLaplacianValues(reference_element_data.triangle_reference_element_data,
125 local_space.triangle_local_space_data,
126 points);
127 }
129 return quadrilateral_local_space.ComputeBasisFunctionsLaplacianValues(reference_element_data.quadrilateral_reference_element_data,
131 points);
132 }
133 default:
134 throw std::runtime_error("not valid fem type");
135 }
136 }
137
138 std::vector<Eigen::MatrixXd> ComputeBasisFunctionsDerivativeValues(const Polydim::FEM::PCC::FEM_PCC_2D_ReferenceElement_Data &reference_element_data,
140 const Eigen::MatrixXd &points) const
141 {
142 switch (local_space.fem_type)
143 {
145
146 return triangle_local_space.ComputeBasisFunctionsDerivativeValues(reference_element_data.triangle_reference_element_data,
147 local_space.triangle_local_space_data,
148 points);
149 }
151 return quadrilateral_local_space.ComputeBasisFunctionsDerivativeValues(reference_element_data.quadrilateral_reference_element_data,
153 points);
154 }
155 default:
156 throw std::runtime_error("not valid fem type");
157 }
158 }
159
161 const Polydim::FEM::PCC::FEM_PCC_2D_LocalSpace_Data &local_space) const
162 {
163 switch (local_space.fem_type)
164 {
166
167 return triangle_local_space.ComputeBasisFunctionsValuesOnEdge(reference_element_data.triangle_reference_element_data);
168 }
170 return quadrilateral_local_space.ComputeBasisFunctionsValuesOnEdge(reference_element_data.quadrilateral_reference_element_data);
171 }
172 default:
173 throw std::runtime_error("not valid fem type");
174 }
175 }
176
179 const Eigen::VectorXd &pointsCurvilinearCoordinates) const
180 {
181 switch (local_space.fem_type)
182 {
184
185 return triangle_local_space.ComputeBasisFunctionsValuesOnEdge(reference_element_data.triangle_reference_element_data,
186 pointsCurvilinearCoordinates);
187 }
189 return quadrilateral_local_space.ComputeBasisFunctionsValuesOnEdge(reference_element_data.quadrilateral_reference_element_data,
190 pointsCurvilinearCoordinates);
191 }
192 default:
193 throw std::runtime_error("not valid fem type");
194 }
195 }
196
199 const unsigned int edge_local_index) const
200 {
201 switch (local_space.fem_type)
202 {
204 return triangle_local_space.EdgeDOFsCoordinates(reference_element_data.triangle_reference_element_data,
205 local_space.triangle_local_space_data,
206 edge_local_index);
207 }
209 return quadrilateral_local_space.EdgeDOFsCoordinates(reference_element_data.quadrilateral_reference_element_data,
211 edge_local_index);
212 }
213 default:
214 throw std::runtime_error("not valid fem type");
215 }
216 }
217
219 const Polydim::FEM::PCC::FEM_PCC_2D_LocalSpace_Data &local_space) const
220 {
221 switch (local_space.fem_type)
222 {
224 return triangle_local_space.InternalDOFsCoordinates(reference_element_data.triangle_reference_element_data,
225 local_space.triangle_local_space_data);
226 }
228 return quadrilateral_local_space.InternalDOFsCoordinates(reference_element_data.quadrilateral_reference_element_data,
230 }
231 default:
232 throw std::runtime_error("not valid fem type");
233 }
234 }
235};
236} // namespace PCC
237} // namespace FEM
238} // namespace Polydim
239
240#endif
Definition FEM_PCC_2D_LocalSpace.hpp:28
Eigen::MatrixXd ComputeBasisFunctionsValuesOnEdge(const Polydim::FEM::PCC::FEM_PCC_2D_ReferenceElement_Data &reference_element_data, const Polydim::FEM::PCC::FEM_PCC_2D_LocalSpace_Data &local_space) const
Definition FEM_PCC_2D_LocalSpace.hpp:160
Polydim::FEM::PCC::FEM_PCC_2D_LocalSpace_Data CreateLocalSpace(const Polydim::FEM::PCC::FEM_PCC_2D_ReferenceElement_Data &reference_element_data, const Polydim::FEM::PCC::FEM_PCC_2D_Polygon_Geometry &polygon) const
Definition FEM_PCC_2D_LocalSpace.cpp:23
Eigen::MatrixXd EdgeDOFsCoordinates(const Polydim::FEM::PCC::FEM_PCC_2D_ReferenceElement_Data &reference_element_data, const Polydim::FEM::PCC::FEM_PCC_2D_LocalSpace_Data &local_space, const unsigned int edge_local_index) const
Definition FEM_PCC_2D_LocalSpace.hpp:197
Eigen::MatrixXd ComputeBasisFunctionsLaplacianValues(const Polydim::FEM::PCC::FEM_PCC_2D_ReferenceElement_Data &reference_element_data, const Polydim::FEM::PCC::FEM_PCC_2D_LocalSpace_Data &local_space) const
Definition FEM_PCC_2D_LocalSpace.hpp:56
Eigen::MatrixXd ComputeBasisFunctionsValues(const Polydim::FEM::PCC::FEM_PCC_2D_ReferenceElement_Data &reference_element_data, const Polydim::FEM::PCC::FEM_PCC_2D_LocalSpace_Data &local_space) const
Definition FEM_PCC_2D_LocalSpace.hpp:37
Eigen::MatrixXd InternalDOFsCoordinates(const Polydim::FEM::PCC::FEM_PCC_2D_ReferenceElement_Data &reference_element_data, const Polydim::FEM::PCC::FEM_PCC_2D_LocalSpace_Data &local_space) const
Definition FEM_PCC_2D_LocalSpace.hpp:218
std::vector< Eigen::MatrixXd > ComputeBasisFunctionsDerivativeValues(const Polydim::FEM::PCC::FEM_PCC_2D_ReferenceElement_Data &reference_element_data, const Polydim::FEM::PCC::FEM_PCC_2D_LocalSpace_Data &local_space, const Eigen::MatrixXd &points) const
Definition FEM_PCC_2D_LocalSpace.hpp:138
Eigen::MatrixXd ComputeBasisFunctionsLaplacianValues(const Polydim::FEM::PCC::FEM_PCC_2D_ReferenceElement_Data &reference_element_data, const Polydim::FEM::PCC::FEM_PCC_2D_LocalSpace_Data &local_space, const Eigen::MatrixXd &points) const
Definition FEM_PCC_2D_LocalSpace.hpp:116
std::vector< Eigen::MatrixXd > ComputeBasisFunctionsDerivativeValues(const Polydim::FEM::PCC::FEM_PCC_2D_ReferenceElement_Data &reference_element_data, const Polydim::FEM::PCC::FEM_PCC_2D_LocalSpace_Data &local_space) const
Definition FEM_PCC_2D_LocalSpace.hpp:75
Eigen::MatrixXd ComputeBasisFunctionsValues(const Polydim::FEM::PCC::FEM_PCC_2D_ReferenceElement_Data &reference_element_data, const Polydim::FEM::PCC::FEM_PCC_2D_LocalSpace_Data &local_space, const Eigen::MatrixXd &points) const
Definition FEM_PCC_2D_LocalSpace.hpp:94
Eigen::MatrixXd ComputeBasisFunctionsValuesOnEdge(const Polydim::FEM::PCC::FEM_PCC_2D_ReferenceElement_Data &reference_element_data, const Polydim::FEM::PCC::FEM_PCC_2D_LocalSpace_Data &local_space, const Eigen::VectorXd &pointsCurvilinearCoordinates) const
Definition FEM_PCC_2D_LocalSpace.hpp:177
Definition FEM_Quadrilateral_PCC_2D_LocalSpace.hpp:28
Eigen::MatrixXd EdgeDOFsCoordinates(const Polydim::FEM::PCC::FEM_Quadrilateral_PCC_2D_ReferenceElement_Data &reference_element_data, const Polydim::FEM::PCC::FEM_Quadrilateral_PCC_2D_LocalSpace_Data &local_space, const unsigned int edge_local_index) const
Definition FEM_Quadrilateral_PCC_2D_LocalSpace.hpp:161
Eigen::MatrixXd ComputeBasisFunctionsValuesOnEdge(const Polydim::FEM::PCC::FEM_Quadrilateral_PCC_2D_ReferenceElement_Data &reference_element_data) const
Definition FEM_Quadrilateral_PCC_2D_LocalSpace.hpp:194
Eigen::MatrixXd ComputeBasisFunctionsLaplacianValues(const Polydim::FEM::PCC::FEM_Quadrilateral_PCC_2D_ReferenceElement_Data &reference_element_data, const Polydim::FEM::PCC::FEM_Quadrilateral_PCC_2D_LocalSpace_Data &local_space) const
Definition FEM_Quadrilateral_PCC_2D_LocalSpace.hpp:61
Eigen::MatrixXd ComputeBasisFunctionsValues(const Polydim::FEM::PCC::FEM_Quadrilateral_PCC_2D_ReferenceElement_Data &reference_element_data, const Polydim::FEM::PCC::FEM_Quadrilateral_PCC_2D_LocalSpace_Data &local_space) const
Definition FEM_Quadrilateral_PCC_2D_LocalSpace.hpp:55
std::vector< Eigen::MatrixXd > ComputeBasisFunctionsDerivativeValues(const Polydim::FEM::PCC::FEM_Quadrilateral_PCC_2D_ReferenceElement_Data &reference_element_data, const Polydim::FEM::PCC::FEM_Quadrilateral_PCC_2D_LocalSpace_Data &local_space) const
Definition FEM_Quadrilateral_PCC_2D_LocalSpace.hpp:69
Eigen::MatrixXd InternalDOFsCoordinates(const Polydim::FEM::PCC::FEM_Quadrilateral_PCC_2D_ReferenceElement_Data &reference_element_data, const Polydim::FEM::PCC::FEM_Quadrilateral_PCC_2D_LocalSpace_Data &local_space) const
Definition FEM_Quadrilateral_PCC_2D_LocalSpace.hpp:178
Definition FEM_Triangle_PCC_2D_LocalSpace.hpp:27
Eigen::MatrixXd InternalDOFsCoordinates(const Polydim::FEM::PCC::FEM_Triangle_PCC_2D_ReferenceElement_Data &reference_element_data, const Polydim::FEM::PCC::FEM_Triangle_PCC_2D_LocalSpace_Data &local_space) const
Definition FEM_Triangle_PCC_2D_LocalSpace.hpp:78
std::vector< Eigen::MatrixXd > ComputeBasisFunctionsDerivativeValues(const Polydim::FEM::PCC::FEM_Triangle_PCC_2D_ReferenceElement_Data &reference_element_data, const Polydim::FEM::PCC::FEM_Triangle_PCC_2D_LocalSpace_Data &local_space) const
Definition FEM_Triangle_PCC_2D_LocalSpace.hpp:103
Eigen::MatrixXd ComputeBasisFunctionsValuesOnEdge(const Polydim::FEM::PCC::FEM_Triangle_PCC_2D_ReferenceElement_Data &reference_element_data) const
Definition FEM_Triangle_PCC_2D_LocalSpace.hpp:141
Eigen::MatrixXd ComputeBasisFunctionsLaplacianValues(const Polydim::FEM::PCC::FEM_Triangle_PCC_2D_ReferenceElement_Data &reference_element_data, const Polydim::FEM::PCC::FEM_Triangle_PCC_2D_LocalSpace_Data &local_space) const
Definition FEM_Triangle_PCC_2D_LocalSpace.hpp:94
Eigen::MatrixXd ComputeBasisFunctionsValues(const Polydim::FEM::PCC::FEM_Triangle_PCC_2D_ReferenceElement_Data &reference_element_data, const Polydim::FEM::PCC::FEM_Triangle_PCC_2D_LocalSpace_Data &local_space) const
Definition FEM_Triangle_PCC_2D_LocalSpace.hpp:55
Eigen::MatrixXd EdgeDOFsCoordinates(const Polydim::FEM::PCC::FEM_Triangle_PCC_2D_ReferenceElement_Data &reference_element_data, const Polydim::FEM::PCC::FEM_Triangle_PCC_2D_LocalSpace_Data &local_space, const unsigned int edge_local_index) const
Definition FEM_Triangle_PCC_2D_LocalSpace.hpp:61
Definition FEM_MCC_2D_LocalSpace.cpp:17
Definition FEM_PCC_2D_LocalSpace_Data.hpp:83
Polydim::FEM::PCC::FEM_Triangle_PCC_2D_LocalSpace_Data triangle_local_space_data
Definition FEM_PCC_2D_LocalSpace_Data.hpp:84
Polydim::FEM::PCC::FEM_Quadrilateral_PCC_2D_LocalSpace_Data quadrilateral_local_space_data
Definition FEM_PCC_2D_LocalSpace_Data.hpp:85
Polydim::FEM::PCC::FEM_PCC_2D_Types fem_type
Definition FEM_PCC_2D_LocalSpace_Data.hpp:86
Definition FEM_PCC_2D_LocalSpace_Data.hpp:38
Definition FEM_PCC_2D_ReferenceElement.hpp:27
Polydim::FEM::PCC::FEM_Quadrilateral_PCC_2D_ReferenceElement_Data quadrilateral_reference_element_data
Definition FEM_PCC_2D_ReferenceElement.hpp:33
Polydim::FEM::PCC::FEM_Triangle_PCC_2D_ReferenceElement_Data triangle_reference_element_data
Definition FEM_PCC_2D_ReferenceElement.hpp:32