PolyDiM
C++ library for POLYtopal DIscretization Methods
Loading...
Searching...
No Matches
VEM_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 __VEM_PCC_2D_LocalSpace_HPP
13#define __VEM_PCC_2D_LocalSpace_HPP
14
16#include "Monomials_2D.hpp"
17
18namespace Polydim
19{
20namespace VEM
21{
22namespace PCC
23{
24
26{
27 private:
30
31 void InitializeProjectorsComputation(const Polydim::VEM::PCC::VEM_PCC_2D_ReferenceElement_Data &reference_element_data,
32 const Eigen::MatrixXd &polygonVertices,
33 const Eigen::Vector3d &polygonCentroid,
34 const double &polygonMeasure,
35 const double &polygonDiameter,
36 const Eigen::MatrixXd &internalQuadraturePoints,
37 const Eigen::VectorXd &internalQuadratureWeights,
38 const Eigen::MatrixXd &boundaryQuadraturePoints,
40
41 void ComputePiNabla(const Polydim::VEM::PCC::VEM_PCC_2D_ReferenceElement_Data &reference_element_data,
42 const double &polygonMeasure,
43 const double &polygonDiameter,
44 const Eigen::VectorXd &internalQuadratureWeights,
45 const Eigen::VectorXd &boundaryQuadratureWeights,
46 const std::vector<Eigen::VectorXd> &boundaryQuadratureWeightsTimesNormal,
48
49 void ComputeL2ProjectorsOfDerivatives(const Polydim::VEM::PCC::VEM_PCC_2D_ReferenceElement_Data &reference_element_data,
50 const double &polygonMeasure,
51 const double &polygonDiameter,
52 const std::vector<Eigen::VectorXd> &boundaryQuadratureWeightsTimesNormal,
54
55 void ComputeL2Projectors(const double &polygonMeasure, Polydim::VEM::PCC::VEM_PCC_2D_LocalSpace_Data &localSpace) const
56 {
57 utilities.ComputeL2Projectors(polygonMeasure,
58 localSpace.Order,
59 localSpace.Nkm1,
62 localSpace.NumBasisFunctions,
63 localSpace.Hmatrix,
64 localSpace.PiNabla,
65 localSpace.Cmatrix,
66 localSpace.Pi0km1,
67 localSpace.Pi0k);
68 };
69
70 void ComputePolynomialsDofs(const double &polytopeMeasure, Polydim::VEM::PCC::VEM_PCC_2D_LocalSpace_Data &localSpace) const;
71
72 void InitializeE2ProjectorsComputation(const Polydim::VEM::PCC::VEM_PCC_2D_ReferenceElement_Data &reference_element_data,
73 const unsigned int &l,
74 const Eigen::MatrixXd &polygonVertices,
75 const Eigen::Vector3d &polygonCentroid,
76 const double &polygonMeasure,
77 const double &polygonDiameter,
78 const Eigen::MatrixXd &internalQuadraturePoints,
79 const Eigen::VectorXd &internalQuadratureWeights,
80 const Eigen::MatrixXd &internalQuadratureKLPoints,
81 const Eigen::VectorXd &internalQuadratureKLWeights,
82 const Eigen::MatrixXd &boundaryQuadraturePoints,
84
85 void ComputeL2ProjectorsKL(Polydim::VEM::PCC::VEM_PCC_2D_LocalSpace_Data &localSpace) const;
86
87 public:
90
92 const Polydim::VEM::PCC::ProjectionTypes &projectionType) const
93 {
94 switch (projectionType)
95 {
97 return utilities.ComputeDofiDofiStabilizationMatrix(localSpace.PiNabla, 1.0, localSpace.Dmatrix);
99 return utilities.ComputeDofiDofiStabilizationMatrix(localSpace.Pi0k, localSpace.Measure, localSpace.Dmatrix);
100 default:
101 throw std::runtime_error("not valid projection type");
102 }
103 }
104
107
109 const Polydim::VEM::PCC::VEM_PCC_2D_ReferenceElement_Data &reference_element_data,
111
113 const Polydim::VEM::PCC::ProjectionTypes &projectionType) const
114 {
116 return localSpace.VanderInternalKL * localSpace.Pi0klm1;
117
118 return utilities.ComputeBasisFunctionsValues(projectionType,
119 localSpace.Nkm1,
120 localSpace.Pi0km1,
121 localSpace.Pi0k,
122 localSpace.VanderInternal);
123 }
124
126 const Polydim::VEM::PCC::ProjectionTypes &projectionType) const
127 {
128 return utilities.ComputeBasisFunctionsDerivativeValues(localSpace.Dimension,
129 projectionType,
130 localSpace.Nkm1,
131 localSpace.VanderInternal,
132 localSpace.VanderInternalDerivatives,
133 localSpace.PiNabla,
134 localSpace.Pi0km1Der);
135 }
136
137 inline Eigen::MatrixXd ComputeBasisFunctionsValues(const Polydim::VEM::PCC::VEM_PCC_2D_ReferenceElement_Data &reference_element_data,
139 const Polydim::VEM::PCC::ProjectionTypes &projectionType,
140 const Eigen::MatrixXd &points) const
141 {
142 return utilities.ComputeBasisFunctionsValues(projectionType,
143 localSpace.Nkm1,
144 localSpace.Pi0km1,
145 localSpace.Pi0k,
146 ComputePolynomialsValues(reference_element_data, localSpace, points));
147 }
148
149 inline std::vector<Eigen::MatrixXd> ComputeBasisFunctionsDerivativeValues(
150 const Polydim::VEM::PCC::VEM_PCC_2D_ReferenceElement_Data &reference_element_data,
152 const Polydim::VEM::PCC::ProjectionTypes &projectionType,
153 const Eigen::MatrixXd &points) const
154 {
156 localSpace.Dimension,
157 projectionType,
158 localSpace.Nkm1,
159 ComputePolynomialsValues(reference_element_data, localSpace, points),
160 ComputePolynomialsDerivativeValues(reference_element_data, localSpace, points),
161 localSpace.PiNabla,
162 localSpace.Pi0km1Der);
163 }
164
166 const Polydim::VEM::PCC::ProjectionTypes &projectionType) const
167 {
168 return utilities.ComputeBasisFunctionsLaplacianValues(localSpace.Dimension,
169 projectionType,
170 localSpace.Nkm1,
171 localSpace.VanderInternalDerivatives,
172 localSpace.Pi0km1Der);
173 }
174
177 const Polydim::VEM::PCC::ProjectionTypes &projectionType,
178 const Eigen::MatrixXd &points) const
179 {
181 localSpace.Dimension,
182 projectionType,
183 localSpace.Nkm1,
184 localSpace.Pi0km1Der,
185 ComputePolynomialsDerivativeValues(reference_element_data, localSpace, points));
186 }
187
188 inline Eigen::MatrixXd ComputePolynomialsValues(const Polydim::VEM::PCC::VEM_PCC_2D_LocalSpace_Data &localSpace) const
189 {
190#if PYBIND == 1
191 return utilities.ComputePolynomialsValues(localSpace.VanderInternal, monomials);
192#else
193 return utilities.ComputePolynomialsValues(localSpace.VanderInternal);
194#endif
195 }
196
198 {
199 return (1.0 / localSpace.Measure) * localSpace.VanderInternal.leftCols(localSpace.Nkm2);
200 }
201
202 inline Eigen::MatrixXd ComputePolynomialsValues(const Polydim::VEM::PCC::VEM_PCC_2D_ReferenceElement_Data &reference_element_data,
204 const Eigen::MatrixXd &points) const
205 {
206 return utilities.ComputePolynomialsValues(reference_element_data.Monomials,
207 monomials,
208 localSpace.Centroid,
209 localSpace.Diameter,
210 points);
211 }
212
213 inline std::vector<Eigen::MatrixXd> ComputePolynomialsDerivativeValues(const Polydim::VEM::PCC::VEM_PCC_2D_LocalSpace_Data &localSpace) const
214 {
215#if PYBIND == 1
216 return utilities.ComputePolynomialsDerivativeValues(localSpace.VanderInternalDerivatives, monomials);
217#else
219#endif
220 }
221 inline std::vector<Eigen::MatrixXd> ComputePolynomialsDerivativeValues(const Polydim::VEM::PCC::VEM_PCC_2D_ReferenceElement_Data &reference_element_data,
223 const Eigen::MatrixXd &points) const
224 {
225 return utilities.ComputePolynomialsDerivativeValues(reference_element_data.Monomials,
226 monomials,
227 localSpace.Diameter,
228 ComputePolynomialsValues(reference_element_data, localSpace, points));
229 }
232 const Eigen::MatrixXd &points) const
233 {
234 return utilities.ComputePolynomialsLaplacianValues(reference_element_data.Monomials,
235 monomials,
236 localSpace.Diameter,
237 ComputePolynomialsValues(reference_element_data, localSpace, points));
238 }
239
240 inline Eigen::MatrixXd ComputeValuesOnEdge(const Polydim::VEM::PCC::VEM_PCC_2D_ReferenceElement_Data &reference_element_data,
241 const Eigen::VectorXd &pointsCurvilinearCoordinates) const
242 {
243 Eigen::RowVectorXd edgeInternalPoints;
244 if (reference_element_data.Quadrature.ReferenceEdgeDOFsInternalPoints.rows() > 0)
245 edgeInternalPoints = reference_element_data.Quadrature.ReferenceEdgeDOFsInternalPoints.row(0);
246 const Eigen::VectorXd edgeBasisCoefficients =
247 utilities.ComputeEdgeBasisCoefficients(reference_element_data.Order, edgeInternalPoints);
248
249 return utilities.ComputeValuesOnEdge(edgeInternalPoints, reference_element_data.Order, edgeBasisCoefficients, pointsCurvilinearCoordinates);
250 }
251};
252} // namespace PCC
253} // namespace VEM
254} // namespace Polydim
255
256#endif
Definition Monomials_2D.hpp:22
Interface class for Primal Conforming Constant degree 2D Virtual Element Methods .
Definition I_VEM_PCC_2D_LocalSpace.hpp:30
Definition VEM_PCC_2D_LocalSpace_Data.hpp:44
unsigned int Dimension
Definition VEM_PCC_2D_LocalSpace_Data.hpp:46
unsigned int Nkm2
Definition VEM_PCC_2D_LocalSpace_Data.hpp:59
Eigen::MatrixXd VanderInternal
Definition VEM_PCC_2D_LocalSpace_Data.hpp:72
Eigen::MatrixXd PiNabla
Definition VEM_PCC_2D_LocalSpace_Data.hpp:79
Eigen::MatrixXd Hmatrix
Definition VEM_PCC_2D_LocalSpace_Data.hpp:85
Eigen::MatrixXd Cmatrix
Definition VEM_PCC_2D_LocalSpace_Data.hpp:88
unsigned int NumInternalBasisFunctions
Definition VEM_PCC_2D_LocalSpace_Data.hpp:54
unsigned int Nkm1
Definition VEM_PCC_2D_LocalSpace_Data.hpp:58
Eigen::Vector3d Centroid
Definition VEM_PCC_2D_LocalSpace_Data.hpp:70
Eigen::MatrixXd Pi0klm1
Definition VEM_PCC_2D_LocalSpace_Data.hpp:82
unsigned int NumBasisFunctions
Definition VEM_PCC_2D_LocalSpace_Data.hpp:55
unsigned int NumProjectorBasisFunctions
Definition VEM_PCC_2D_LocalSpace_Data.hpp:57
Eigen::MatrixXd Dmatrix
Definition VEM_PCC_2D_LocalSpace_Data.hpp:91
Eigen::MatrixXd Pi0k
Definition VEM_PCC_2D_LocalSpace_Data.hpp:81
double Diameter
Definition VEM_PCC_2D_LocalSpace_Data.hpp:68
std::vector< Eigen::MatrixXd > Pi0km1Der
Definition VEM_PCC_2D_LocalSpace_Data.hpp:83
Eigen::MatrixXd VanderInternalKL
Definition VEM_PCC_2D_LocalSpace_Data.hpp:73
Eigen::MatrixXd Pi0km1
Definition VEM_PCC_2D_LocalSpace_Data.hpp:80
unsigned int Order
Definition VEM_PCC_2D_LocalSpace_Data.hpp:47
double Measure
Definition VEM_PCC_2D_LocalSpace_Data.hpp:69
std::vector< Eigen::MatrixXd > VanderInternalDerivatives
Definition VEM_PCC_2D_LocalSpace_Data.hpp:74
Definition VEM_PCC_2D_LocalSpace.hpp:26
Eigen::MatrixXd ComputePolynomialsValues(const Polydim::VEM::PCC::VEM_PCC_2D_ReferenceElement_Data &reference_element_data, const Polydim::VEM::PCC::VEM_PCC_2D_LocalSpace_Data &localSpace, const Eigen::MatrixXd &points) const
Compute values of the polynomial basis at given points.
Definition VEM_PCC_2D_LocalSpace.hpp:202
Eigen::MatrixXd ComputeBasisFunctionsLaplacianValues(const Polydim::VEM::PCC::VEM_PCC_2D_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_2D_LocalSpace.hpp:165
Eigen::MatrixXd ComputeValuesOnEdge(const Polydim::VEM::PCC::VEM_PCC_2D_ReferenceElement_Data &reference_element_data, const Eigen::VectorXd &pointsCurvilinearCoordinates) const
Compute values of the trace of VEM basis functions at given points on an edge.
Definition VEM_PCC_2D_LocalSpace.hpp:240
Polydim::VEM::PCC::VEM_PCC_2D_LocalSpace_Data Compute3DUtilities(const Polydim::VEM::PCC::VEM_PCC_2D_ReferenceElement_Data &reference_element_data, const Polydim::VEM::PCC::VEM_PCC_2D_Polygon_Geometry &polygon) const
Definition VEM_PCC_2D_LocalSpace.cpp:74
Eigen::MatrixXd ComputeScaledPolynomialsValues(const Polydim::VEM::PCC::VEM_PCC_2D_LocalSpace_Data &localSpace) const
Definition VEM_PCC_2D_LocalSpace.hpp:197
Polydim::VEM::PCC::VEM_PCC_2D_LocalSpace_Data CreateLocalSpace(const Polydim::VEM::PCC::VEM_PCC_2D_ReferenceElement_Data &reference_element_data, const Polydim::VEM::PCC::VEM_PCC_2D_Polygon_Geometry &polygon) const
Compute data of VEM space on a polygon.
Definition VEM_PCC_2D_LocalSpace.cpp:24
std::vector< Eigen::MatrixXd > ComputeBasisFunctionsDerivativeValues(const Polydim::VEM::PCC::VEM_PCC_2D_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_2D_LocalSpace.hpp:125
std::vector< Eigen::MatrixXd > ComputePolynomialsDerivativeValues(const Polydim::VEM::PCC::VEM_PCC_2D_ReferenceElement_Data &reference_element_data, const Polydim::VEM::PCC::VEM_PCC_2D_LocalSpace_Data &localSpace, const Eigen::MatrixXd &points) const
Compute values of the derivatives of the polynomial basis at given points.
Definition VEM_PCC_2D_LocalSpace.hpp:221
std::vector< Eigen::MatrixXd > ComputePolynomialsDerivativeValues(const Polydim::VEM::PCC::VEM_PCC_2D_LocalSpace_Data &localSpace) const
Compute values of the derivatives of the polynomial basis at default quadrature points.
Definition VEM_PCC_2D_LocalSpace.hpp:213
Eigen::MatrixXd ComputePolynomialsValues(const Polydim::VEM::PCC::VEM_PCC_2D_LocalSpace_Data &localSpace) const
Compute values of the polynomial basis at default quadrature points.
Definition VEM_PCC_2D_LocalSpace.hpp:188
Polydim::VEM::PCC::VEM_PCC_2D_LocalSpace_Data Compute3DUtilities_DF_PCC(const Polydim::VEM::PCC::VEM_PCC_2D_ReferenceElement_Data &reference_element_data, const Polydim::VEM::PCC::VEM_PCC_2D_Polygon_Geometry &polygon) const
Definition VEM_PCC_2D_LocalSpace.cpp:116
std::vector< Eigen::MatrixXd > ComputeBasisFunctionsDerivativeValues(const Polydim::VEM::PCC::VEM_PCC_2D_ReferenceElement_Data &reference_element_data, const Polydim::VEM::PCC::VEM_PCC_2D_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_2D_LocalSpace.hpp:149
Eigen::MatrixXd ComputeDofiDofiStabilizationMatrix(const Polydim::VEM::PCC::VEM_PCC_2D_LocalSpace_Data &localSpace, const Polydim::VEM::PCC::ProjectionTypes &projectionType) const
Compute matrix representation of dofi-dofi stabilization.
Definition VEM_PCC_2D_LocalSpace.hpp:91
Eigen::MatrixXd ComputeBasisFunctionsLaplacianValues(const Polydim::VEM::PCC::VEM_PCC_2D_ReferenceElement_Data &reference_element_data, const Polydim::VEM::PCC::VEM_PCC_2D_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_2D_LocalSpace.hpp:175
Eigen::MatrixXd ComputeBasisFunctionsValues(const Polydim::VEM::PCC::VEM_PCC_2D_ReferenceElement_Data &reference_element_data, const Polydim::VEM::PCC::VEM_PCC_2D_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_2D_LocalSpace.hpp:137
Eigen::MatrixXd ComputeBasisFunctionsValues(const Polydim::VEM::PCC::VEM_PCC_2D_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_2D_LocalSpace.hpp:112
Eigen::MatrixXd ComputePolynomialsLaplacianValues(const Polydim::VEM::PCC::VEM_PCC_2D_ReferenceElement_Data &reference_element_data, const Polydim::VEM::PCC::VEM_PCC_2D_LocalSpace_Data &localSpace, const Eigen::MatrixXd &points) const
Compute values of the laplacian of the polynomial basis at given points.
Definition VEM_PCC_2D_LocalSpace.hpp:230
Definition VEM_PCC_2D_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
Quadrature::VEM_QuadratureData_2D Quadrature
Definition I_VEM_PCC_2D_ReferenceElement.hpp:34
Utilities::Monomials_Data Monomials
Definition I_VEM_PCC_2D_ReferenceElement.hpp:33
unsigned int Order
Definition I_VEM_PCC_2D_ReferenceElement.hpp:28
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::VectorXd ComputeEdgeBasisCoefficients(const unsigned int &order, const Eigen::VectorXd &edgeInternalPoints) const
Definition VEM_PCC_Utilities.hpp:38
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
Eigen::MatrixXd ReferenceEdgeDOFsInternalPoints
Definition VEM_Quadrature_2D.hpp:34