PolyDiM
C++ library for POLYtopal DIscretization Methods
Loading...
Searching...
No Matches
VEM_PCC_3D_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 __VEM_PCC_3D_LocalSpace_HPP
13#define __VEM_PCC_3D_LocalSpace_HPP
14
15#include "Eigen/Eigen"
19#include "Monomials_3D.hpp"
23#include "VEM_PCC_Utilities.hpp"
24#include <vector>
25
26namespace Polydim
27{
28namespace VEM
29{
30namespace PCC
31{
33{
34 private:
37
38 void InitializeProjectorsComputation(const Polydim::VEM::PCC::VEM_PCC_3D_ReferenceElement_Data &reference_element_data,
39 const Eigen::MatrixXd &polyhedronVertices,
40 const Eigen::MatrixXi &polyhedronEdges,
41 const std::vector<Eigen::MatrixXi> &polyhedronFaces,
42 const Eigen::Vector3d &polyhedronCentroid,
43 const double &polyhedronMeasure,
44 const double &polyhedronDiameter,
45 const Eigen::MatrixXd &internalQuadraturePoints,
46 const Eigen::VectorXd &internalQuadratureWeights,
47 const Eigen::MatrixXd &boundaryQuadraturePoints,
48 const Eigen::MatrixXd &edgeInternalQuadraturePoints,
50
51 void ComputePiNabla(const Polydim::VEM::PCC::VEM_PCC_3D_ReferenceElement_Data &reference_element_data,
52 const double &polyhedronMeasure,
53 const double &polyhedronDiameter,
54 const Eigen::VectorXd &internalQuadratureWeights,
55 const Eigen::VectorXd &boundaryQuadratureWeights,
56 const std::vector<Eigen::VectorXd> &boundaryQuadratureWeightsTimesNormal,
58
59 void ComputeL2ProjectorsOfDerivatives(const Polydim::VEM::PCC::VEM_PCC_3D_ReferenceElement_Data &reference_element_data,
60 const double &polyhedronMeasure,
61 const double &polyhedronDiameter,
62 const std::vector<Eigen::VectorXd> &boundaryQuadratureWeightsTimesNormal,
64
65 void ComputeL2Projectors(const double &polyhedronMeasure, Polydim::VEM::PCC::VEM_PCC_3D_LocalSpace_Data &localSpace) const
66 {
67 utilities.ComputeL2Projectors(polyhedronMeasure,
68 localSpace.Order,
69 localSpace.Nkm1,
72 localSpace.NumBasisFunctions,
73 localSpace.Hmatrix,
74 localSpace.PiNabla,
75 localSpace.Cmatrix,
76 localSpace.Pi0km1,
77 localSpace.Pi0k);
78 };
79
80 void ComputeFaceProjectors(const VEM_PCC_2D_LocalSpace &faceVemValues,
81 const std::vector<Eigen::MatrixXi> &polyhedronFaces,
82 const std::vector<VEM_PCC_2D_Polygon_Geometry> &polygonalFaces,
83 const Eigen::MatrixXd &boundaryQuadraturePoints,
84 const Eigen::VectorXd &boundaryQuadratureWeights,
86
87 void ComputePolynomialsDofs(const double &polytopeMeasure, Polydim::VEM::PCC::VEM_PCC_3D_LocalSpace_Data &localSpace) const;
88
89 public:
91 const Polydim::VEM::PCC::VEM_PCC_2D_ReferenceElement_Data &reference_element_data_2D,
92 const Polydim::VEM::PCC::VEM_PCC_3D_ReferenceElement_Data &reference_element_data_3D,
94
96 const Polydim::VEM::PCC::ProjectionTypes &projectionType) const
97 {
98 switch (projectionType)
99 {
101 return utilities.ComputeDofiDofiStabilizationMatrix(localSpace.PiNabla, localSpace.Diameter, localSpace.Dmatrix);
103 return utilities.ComputeDofiDofiStabilizationMatrix(localSpace.Pi0k, localSpace.Measure, localSpace.Dmatrix);
104 default:
105 throw std::runtime_error("not valid projection type");
106 }
107 }
108
110 const Polydim::VEM::PCC::ProjectionTypes &projectionType,
111 const Eigen::MatrixXd &coercivity_matrix,
112 const Eigen::VectorXd &vector_coefficients) const
113 {
114 switch (projectionType)
115 {
117 return utilities.ComputeDRecipeStabilizationMatrix(localSpace.PiNabla,
118 coercivity_matrix,
119 vector_coefficients,
120 localSpace.Dmatrix);
122 return utilities.ComputeDRecipeStabilizationMatrix(localSpace.Pi0k,
123 coercivity_matrix,
124 vector_coefficients,
125 localSpace.Dmatrix);
126 default:
127 throw std::runtime_error("not valid projection type");
128 }
129 }
130
132 const Polydim::VEM::PCC::ProjectionTypes &projectionType) const
133 {
134 return utilities.ComputeBasisFunctionsValues(projectionType,
135 localSpace.Nkm1,
136 localSpace.Pi0km1,
137 localSpace.Pi0k,
138 localSpace.VanderInternal);
139 }
140
142 const Polydim::VEM::PCC::ProjectionTypes &projectionType) const
143 {
144 return utilities.ComputeBasisFunctionsDerivativeValues(localSpace.Dimension,
145 projectionType,
146 localSpace.Nkm1,
147 localSpace.VanderInternal,
148 localSpace.VanderInternalDerivatives,
149 localSpace.PiNabla,
150 localSpace.Pi0km1Der);
151 }
152
154 const Polydim::VEM::PCC::ProjectionTypes &projectionType) const
155 {
156 return utilities.ComputeBasisFunctionsLaplacianValues(localSpace.Dimension,
157 projectionType,
158 localSpace.Nkm1,
159 localSpace.VanderInternalDerivatives,
160 localSpace.Pi0km1Der);
161 }
162
163 inline Eigen::MatrixXd ComputeBasisFunctionsValues(const Polydim::VEM::PCC::VEM_PCC_3D_ReferenceElement_Data &reference_element_data,
165 const Polydim::VEM::PCC::ProjectionTypes &projectionType,
166 const Eigen::MatrixXd &points) const
167 {
168 return utilities.ComputeBasisFunctionsValues(projectionType,
169 localSpace.Nkm1,
170 localSpace.Pi0km1,
171 localSpace.Pi0k,
172 ComputePolynomialsValues(reference_element_data, localSpace, points));
173 }
174
175 inline std::vector<Eigen::MatrixXd> ComputeBasisFunctionsDerivativeValues(
176 const Polydim::VEM::PCC::VEM_PCC_3D_ReferenceElement_Data &reference_element_data,
178 const Polydim::VEM::PCC::ProjectionTypes &projectionType,
179 const Eigen::MatrixXd &points) const
180 {
182 localSpace.Dimension,
183 projectionType,
184 localSpace.Nkm1,
185 ComputePolynomialsValues(reference_element_data, localSpace, points),
186 ComputePolynomialsDerivativeValues(reference_element_data, localSpace, points),
187 localSpace.PiNabla,
188 localSpace.Pi0km1Der);
189 }
190
193 const Polydim::VEM::PCC::ProjectionTypes &projectionType,
194 const Eigen::MatrixXd &points) const
195 {
197 localSpace.Dimension,
198 projectionType,
199 localSpace.Nkm1,
200 localSpace.Pi0km1Der,
201 ComputePolynomialsDerivativeValues(reference_element_data, localSpace, points));
202 }
203
204 inline Eigen::MatrixXd ComputePolynomialsValues(const Polydim::VEM::PCC::VEM_PCC_3D_LocalSpace_Data &localSpace) const
205 {
206#if PYBIND == 1
207 return utilities.ComputePolynomialsValues(localSpace.VanderInternal, monomials);
208#else
209 return utilities.ComputePolynomialsValues(localSpace.VanderInternal);
210#endif
211 }
212
213 inline Eigen::MatrixXd ComputePolynomialsValues(const Polydim::VEM::PCC::VEM_PCC_3D_ReferenceElement_Data &reference_element_data,
215 const Eigen::MatrixXd &points) const
216 {
217 return utilities.ComputePolynomialsValues(reference_element_data.Monomials,
218 monomials,
219 localSpace.Centroid,
220 localSpace.Diameter,
221 points);
222 }
223
224 inline std::vector<Eigen::MatrixXd> ComputePolynomialsDerivativeValues(const Polydim::VEM::PCC::VEM_PCC_3D_LocalSpace_Data &localSpace) const
225 {
226#if PYBIND == 1
227 return utilities.ComputePolynomialsDerivativeValues(localSpace.VanderInternalDerivatives, monomials);
228#else
230#endif
231 }
232
233 inline std::vector<Eigen::MatrixXd> ComputePolynomialsDerivativeValues(const Polydim::VEM::PCC::VEM_PCC_3D_ReferenceElement_Data &reference_element_data,
235 const Eigen::MatrixXd &points) const
236 {
237 return utilities.ComputePolynomialsDerivativeValues(reference_element_data.Monomials,
238 monomials,
239 localSpace.Diameter,
240 ComputePolynomialsValues(reference_element_data, localSpace, points));
241 }
242
245 const Eigen::MatrixXd &points) const
246 {
247 return utilities.ComputePolynomialsLaplacianValues(reference_element_data.Monomials,
248 monomials,
249 localSpace.Diameter,
250 ComputePolynomialsValues(reference_element_data, localSpace, points));
251 }
252
253 inline Eigen::MatrixXd ComputeValuesOnEdge(const Polydim::VEM::PCC::VEM_PCC_3D_ReferenceElement_Data &reference_element_data,
255 const Eigen::VectorXd &pointsCurvilinearCoordinates) const
256 {
257 return utilities.ComputeValuesOnEdge(localSpace.EdgeInternalPoints.transpose(),
258 reference_element_data.Order,
259 localSpace.EdgeBasisCoefficients,
260 pointsCurvilinearCoordinates);
261 }
262
264 const unsigned int edge_local_index) const
265 {
266 return localSpace.EdgesDOFsCoordinates[edge_local_index];
267 }
268};
269} // namespace PCC
270} // namespace VEM
271} // namespace Polydim
272
273#endif
Definition Monomials_3D.hpp:22
Interface class for Primal Conforming Constant degree 3D Virtual Element Methods .
Definition I_VEM_PCC_3D_LocalSpace.hpp:31
Definition VEM_PCC_2D_LocalSpace.hpp:26
Definition VEM_PCC_3D_LocalSpace_Data.hpp:53
std::vector< Eigen::MatrixXd > Pi0km1Der
Definition VEM_PCC_3D_LocalSpace_Data.hpp:89
Eigen::MatrixXd PiNabla
Definition VEM_PCC_3D_LocalSpace_Data.hpp:85
Eigen::MatrixXd Dmatrix
Definition VEM_PCC_3D_LocalSpace_Data.hpp:96
unsigned int Dimension
Definition VEM_PCC_3D_LocalSpace_Data.hpp:60
Eigen::MatrixXd Cmatrix
Definition VEM_PCC_3D_LocalSpace_Data.hpp:93
std::vector< Eigen::MatrixXd > EdgesDOFsCoordinates
Definition VEM_PCC_3D_LocalSpace_Data.hpp:84
Eigen::MatrixXd Pi0km1
Definition VEM_PCC_3D_LocalSpace_Data.hpp:86
unsigned int Nkm1
Definition VEM_PCC_3D_LocalSpace_Data.hpp:73
Eigen::MatrixXd Hmatrix
Definition VEM_PCC_3D_LocalSpace_Data.hpp:92
unsigned int NumInternalBasisFunctions
Definition VEM_PCC_3D_LocalSpace_Data.hpp:66
Eigen::VectorXd EdgeBasisCoefficients
Definition VEM_PCC_3D_LocalSpace_Data.hpp:83
Eigen::Vector3d Centroid
Definition VEM_PCC_3D_LocalSpace_Data.hpp:80
unsigned int Order
Definition VEM_PCC_3D_LocalSpace_Data.hpp:61
unsigned int NumBasisFunctions
Definition VEM_PCC_3D_LocalSpace_Data.hpp:67
Eigen::MatrixXd Pi0k
Definition VEM_PCC_3D_LocalSpace_Data.hpp:87
std::vector< Eigen::MatrixXd > VanderInternalDerivatives
Definition VEM_PCC_3D_LocalSpace_Data.hpp:77
double Diameter
Definition VEM_PCC_3D_LocalSpace_Data.hpp:79
Eigen::MatrixXd VanderInternal
Definition VEM_PCC_3D_LocalSpace_Data.hpp:76
Eigen::RowVectorXd EdgeInternalPoints
Definition VEM_PCC_3D_LocalSpace_Data.hpp:120
double Measure
Definition VEM_PCC_3D_LocalSpace_Data.hpp:81
unsigned int NumProjectorBasisFunctions
Definition VEM_PCC_3D_LocalSpace_Data.hpp:71
Definition VEM_PCC_3D_LocalSpace.hpp:33
Eigen::MatrixXd ComputeDofiDofiStabilizationMatrix(const Polydim::VEM::PCC::VEM_PCC_3D_LocalSpace_Data &localSpace, const Polydim::VEM::PCC::ProjectionTypes &projectionType) const
Compute matrix representation of dofi-dofi stabilization.
Definition VEM_PCC_3D_LocalSpace.hpp:95
Eigen::MatrixXd ComputePolynomialsValues(const Polydim::VEM::PCC::VEM_PCC_3D_LocalSpace_Data &localSpace) const
Compute values of the polynomial basis at default quadrature points.
Definition VEM_PCC_3D_LocalSpace.hpp:204
Eigen::MatrixXd ComputePolynomialsValues(const Polydim::VEM::PCC::VEM_PCC_3D_ReferenceElement_Data &reference_element_data, const Polydim::VEM::PCC::VEM_PCC_3D_LocalSpace_Data &localSpace, const Eigen::MatrixXd &points) const
Compute values of the polynomial basis at given points.
Definition VEM_PCC_3D_LocalSpace.hpp:213
Eigen::MatrixXd ComputePolynomialsLaplacianValues(const Polydim::VEM::PCC::VEM_PCC_3D_ReferenceElement_Data &reference_element_data, const Polydim::VEM::PCC::VEM_PCC_3D_LocalSpace_Data &localSpace, const Eigen::MatrixXd &points) const
Compute values of the laplacian of the polynomial basis at given points.
Definition VEM_PCC_3D_LocalSpace.hpp:243
Eigen::MatrixXd ComputeValuesOnEdge(const Polydim::VEM::PCC::VEM_PCC_3D_ReferenceElement_Data &reference_element_data, const Polydim::VEM::PCC::VEM_PCC_3D_LocalSpace_Data &localSpace, const Eigen::VectorXd &pointsCurvilinearCoordinates) const
Compute values of the trace of VEM basis functions at given points on an edge.
Definition VEM_PCC_3D_LocalSpace.hpp:253
Eigen::MatrixXd ComputeBasisFunctionsValues(const Polydim::VEM::PCC::VEM_PCC_3D_LocalSpace_Data &localSpace, const Polydim::VEM::PCC::ProjectionTypes &projectionType) const
Compute values of a suitable projection of basis functions at default quadrature points.
Definition VEM_PCC_3D_LocalSpace.hpp:131
Eigen::MatrixXd ComputeBasisFunctionsLaplacianValues(const Polydim::VEM::PCC::VEM_PCC_3D_ReferenceElement_Data &reference_element_data, const Polydim::VEM::PCC::VEM_PCC_3D_LocalSpace_Data &localSpace, const Polydim::VEM::PCC::ProjectionTypes &projectionType, const Eigen::MatrixXd &points) const
Compute values of a suitable projection of laplacian of basis functions at default quadrature points.
Definition VEM_PCC_3D_LocalSpace.hpp:191
Eigen::MatrixXd EdgeDOFsCoordinates(const Polydim::VEM::PCC::VEM_PCC_3D_LocalSpace_Data &localSpace, const unsigned int edge_local_index) const
Definition VEM_PCC_3D_LocalSpace.hpp:263
Eigen::MatrixXd ComputeDRecipeStabilizationMatrix(const Polydim::VEM::PCC::VEM_PCC_3D_LocalSpace_Data &localSpace, const Polydim::VEM::PCC::ProjectionTypes &projectionType, const Eigen::MatrixXd &coercivity_matrix, const Eigen::VectorXd &vector_coefficients) const
Definition VEM_PCC_3D_LocalSpace.hpp:109
std::vector< Eigen::MatrixXd > ComputePolynomialsDerivativeValues(const Polydim::VEM::PCC::VEM_PCC_3D_ReferenceElement_Data &reference_element_data, const Polydim::VEM::PCC::VEM_PCC_3D_LocalSpace_Data &localSpace, const Eigen::MatrixXd &points) const
Compute values of the derivatives of the polynomial basis at given points.
Definition VEM_PCC_3D_LocalSpace.hpp:233
Polydim::VEM::PCC::VEM_PCC_3D_LocalSpace_Data CreateLocalSpace(const Polydim::VEM::PCC::VEM_PCC_2D_ReferenceElement_Data &reference_element_data_2D, const Polydim::VEM::PCC::VEM_PCC_3D_ReferenceElement_Data &reference_element_data_3D, const Polydim::VEM::PCC::VEM_PCC_3D_Polyhedron_Geometry &polyhedron) const
Compute data of VEM space on a polygon.
Definition VEM_PCC_3D_LocalSpace.cpp:24
Eigen::MatrixXd ComputeBasisFunctionsValues(const Polydim::VEM::PCC::VEM_PCC_3D_ReferenceElement_Data &reference_element_data, const Polydim::VEM::PCC::VEM_PCC_3D_LocalSpace_Data &localSpace, const Polydim::VEM::PCC::ProjectionTypes &projectionType, const Eigen::MatrixXd &points) const
Compute values of a suitable projection of basis functions at given points.
Definition VEM_PCC_3D_LocalSpace.hpp:163
std::vector< Eigen::MatrixXd > ComputeBasisFunctionsDerivativeValues(const Polydim::VEM::PCC::VEM_PCC_3D_ReferenceElement_Data &reference_element_data, const Polydim::VEM::PCC::VEM_PCC_3D_LocalSpace_Data &localSpace, const Polydim::VEM::PCC::ProjectionTypes &projectionType, const Eigen::MatrixXd &points) const
Compute values of a suitable projection of derivatives of basis functions at given points.
Definition VEM_PCC_3D_LocalSpace.hpp:175
std::vector< Eigen::MatrixXd > ComputePolynomialsDerivativeValues(const Polydim::VEM::PCC::VEM_PCC_3D_LocalSpace_Data &localSpace) const
Compute values of the derivatives of the polynomial basis at default quadrature points.
Definition VEM_PCC_3D_LocalSpace.hpp:224
std::vector< Eigen::MatrixXd > ComputeBasisFunctionsDerivativeValues(const Polydim::VEM::PCC::VEM_PCC_3D_LocalSpace_Data &localSpace, const Polydim::VEM::PCC::ProjectionTypes &projectionType) const
Compute values of a suitable projection of derivatives of basis functions at default quadrature point...
Definition VEM_PCC_3D_LocalSpace.hpp:141
Eigen::MatrixXd ComputeBasisFunctionsLaplacianValues(const Polydim::VEM::PCC::VEM_PCC_3D_LocalSpace_Data &localSpace, const Polydim::VEM::PCC::ProjectionTypes &projectionType) const
Compute values of a suitable projection of laplacian of basis functions at default quadrature points.
Definition VEM_PCC_3D_LocalSpace.hpp:153
Definition VEM_PCC_3D_LocalSpace_Data.hpp:27
ProjectionTypes
Definition VEM_PCC_Utilities.hpp:28
Definition FEM_MCC_2D_LocalSpace.cpp:17
Definition I_VEM_PCC_2D_ReferenceElement.hpp:26
Definition I_VEM_PCC_3D_ReferenceElement.hpp:25
unsigned int Order
Definition I_VEM_PCC_3D_ReferenceElement.hpp:27
Utilities::Monomials_Data Monomials
Definition I_VEM_PCC_3D_ReferenceElement.hpp:33
Definition VEM_PCC_Utilities.hpp:37
Eigen::MatrixXd ComputePolynomialsValues(const Eigen::MatrixXd &vanderInternal) const
Definition VEM_PCC_Utilities.hpp:176
std::vector< Eigen::MatrixXd > ComputeBasisFunctionsDerivativeValues(const unsigned int dimension, const Polydim::VEM::PCC::ProjectionTypes &projectionType, const unsigned int &Nkm1, const Eigen::MatrixXd &vanderInternal, const std::vector< Eigen::MatrixXd > &vanderInternalDerivatives, const Eigen::MatrixXd &piNabla, const std::vector< Eigen::MatrixXd > &pi0km1Der) const
Definition VEM_PCC_Utilities.hpp:101
Eigen::MatrixXd ComputeBasisFunctionsLaplacianValues(const unsigned int dimension, const Polydim::VEM::PCC::ProjectionTypes &projectionType, const unsigned int &Nkm1, const std::vector< Eigen::MatrixXd > &vanderInternalDerivatives, const std::vector< Eigen::MatrixXd > &pi0km1Der) const
Definition VEM_PCC_Utilities.hpp:132
std::vector< Eigen::MatrixXd > ComputePolynomialsDerivativeValues(const std::vector< Eigen::MatrixXd > &vanderInternalDerivatives) const
Definition VEM_PCC_Utilities.hpp:200
void ComputeL2Projectors(const double &measure, const unsigned int &order, const unsigned int &Nkm1, const unsigned int &Nk, const unsigned int &NumInternalBasisFunctions, const unsigned int &NumBasisFunctions, const Eigen::MatrixXd &Hmatrix, const Eigen::MatrixXd &PiNabla, Eigen::MatrixXd &Cmatrix, Eigen::MatrixXd &Pi0km1, Eigen::MatrixXd &Pi0k) const
Definition VEM_PCC_Utilities.hpp:46
Eigen::MatrixXd ComputeBasisFunctionsValues(const Polydim::VEM::PCC::ProjectionTypes &projectionType, const unsigned int &Nkm1, const Eigen::MatrixXd &pi0km1, const Eigen::MatrixXd &pi0k, const Eigen::MatrixXd &vanderInternal) const
Definition VEM_PCC_Utilities.hpp:152
Eigen::MatrixXd ComputeDRecipeStabilizationMatrix(const Eigen::MatrixXd &projector, const Eigen::MatrixXd &coercivity_matrix, const Eigen::VectorXd &vector_coefficients, const Eigen::MatrixXd &Dmatrix) const
Definition VEM_PCC_Utilities.hpp:245
Eigen::MatrixXd ComputeValuesOnEdge(const Eigen::RowVectorXd &edgeInternalPoints, const unsigned int &order, const Eigen::VectorXd &edgeBasisCoefficients, const Eigen::VectorXd &pointsCurvilinearCoordinates) const
Definition VEM_PCC_Utilities.hpp:224
Eigen::MatrixXd ComputePolynomialsLaplacianValues(const Polydim::Utilities::Monomials_Data &data, const MonomialType &monomials, const double &diameter, const Eigen::MatrixXd &vander) const
Definition VEM_PCC_Utilities.hpp:216
Eigen::MatrixXd ComputeDofiDofiStabilizationMatrix(const Eigen::MatrixXd &projector, const double &coefficient, const Eigen::MatrixXd &Dmatrix) const
Definition VEM_PCC_Utilities.hpp:234