12#ifndef __VEM_PCC_2D_Inertia_LocalSpace_HPP
13#define __VEM_PCC_2D_Inertia_LocalSpace_HPP
34 const Eigen::MatrixXd &polygonVertices,
35 const Eigen::Vector3d &polygonCentroid,
36 const double &polygonDiameter,
37 const Eigen::MatrixXd &internalQuadraturePoints,
38 const Eigen::VectorXd &internalQuadratureWeights,
39 const Eigen::MatrixXd &boundaryQuadraturePoints,
43 const double &polygonMeasure,
44 const double &polygonDiameter,
45 const Eigen::VectorXd &internalQuadratureWeights,
46 const Eigen::VectorXd &boundaryQuadratureWeights,
47 const std::vector<Eigen::VectorXd> &boundaryQuadratureWeightsTimesNormal,
51 const double &polygonMeasure,
52 const double &polygonDiameter,
53 const std::vector<Eigen::VectorXd> &boundaryQuadratureWeightsTimesNormal,
88 switch (projectionType)
95 throw std::runtime_error(
"not valid projection type");
112 std::vector<Eigen::MatrixXd> basisFunctionsDerivativeValues(localSpace.
Dimension);
114 switch (projectionType)
117 for (
unsigned short i = 0; i < localSpace.
Dimension; ++i)
122 for (
unsigned short i = 0; i < localSpace.
Dimension; ++i)
127 throw std::runtime_error(
"Unknown projector type");
130 std::vector<Eigen::MatrixXd> fmatrixInvTranspTimesBasisFunctionDerivativeValues2D(
132 Eigen::MatrixXd::Zero(basisFunctionsDerivativeValues[0].rows(), basisFunctionsDerivativeValues[1].cols()));
133 for (
unsigned int d1 = 0; d1 < localSpace.
Dimension; d1++)
135 for (
unsigned int d2 = 0; d2 < localSpace.
Dimension; d2++)
137 fmatrixInvTranspTimesBasisFunctionDerivativeValues2D[d1] +=
138 FmatrixInvTransp(d1, d2) * basisFunctionsDerivativeValues[d2];
142 return fmatrixInvTranspTimesBasisFunctionDerivativeValues2D;
148 const Eigen::MatrixXd &points)
const
161 const Eigen::MatrixXd &points)
const
165 std::vector<Eigen::MatrixXd> basisFunctionsDerivativeValues(localSpace.
Dimension);
167 switch (projectionType)
170 const std::vector<Eigen::MatrixXd> VanderDerivatives =
176 basisFunctionsDerivativeValues.resize(localSpace.
Dimension);
177 for (
unsigned short i = 0; i < localSpace.
Dimension; ++i)
178 basisFunctionsDerivativeValues[i] = VanderDerivatives[i] * localSpace.
PiNabla;
182 basisFunctionsDerivativeValues.resize(localSpace.
Dimension);
183 for (
unsigned short i = 0; i < localSpace.
Dimension; ++i)
184 basisFunctionsDerivativeValues[i] = vander.leftCols(localSpace.
Nkm1) * localSpace.
Pi0km1Der[i];
188 throw std::runtime_error(
"Unknown projector type");
191 std::vector<Eigen::MatrixXd> fmatrixInvTranspTimesBasisFunctionDerivativeValues2D(
193 Eigen::MatrixXd::Zero(basisFunctionsDerivativeValues[0].rows(), basisFunctionsDerivativeValues[1].cols()));
194 for (
unsigned int d1 = 0; d1 < localSpace.
Dimension; d1++)
196 for (
unsigned int d2 = 0; d2 < localSpace.
Dimension; d2++)
198 fmatrixInvTranspTimesBasisFunctionDerivativeValues2D[d1] +=
199 FmatrixInvTransp(d1, d2) * basisFunctionsDerivativeValues[d2];
203 return fmatrixInvTranspTimesBasisFunctionDerivativeValues2D;
219 const Eigen::MatrixXd &points)
const
221 const Eigen::MatrixXd referencePoints =
235 std::vector<Eigen::MatrixXd> fmatrixInvTranspTimesPolynomialDerivatives(
237 Eigen::MatrixXd::Zero(polynomialDerivatives[0].rows(), polynomialDerivatives[1].cols()));
238 for (
unsigned int d1 = 0; d1 < localSpace.
Dimension; d1++)
240 for (
unsigned int d2 = 0; d2 < localSpace.
Dimension; d2++)
242 fmatrixInvTranspTimesPolynomialDerivatives[d1] += FmatrixInvTransp(d1, d2) * polynomialDerivatives[d2];
245 return fmatrixInvTranspTimesPolynomialDerivatives;
250 const Eigen::MatrixXd &points)
const
252 const std::vector<Eigen::MatrixXd> polynomialDerivatives =
260 std::vector<Eigen::MatrixXd> fmatrixInvTranspTimesPolynomialDerivatives(
262 Eigen::MatrixXd::Zero(polynomialDerivatives[0].rows(), polynomialDerivatives[1].cols()));
263 for (
unsigned int d1 = 0; d1 < localSpace.
Dimension; d1++)
265 for (
unsigned int d2 = 0; d2 < localSpace.
Dimension; d2++)
267 fmatrixInvTranspTimesPolynomialDerivatives[d1] += FmatrixInvTransp(d1, d2) * polynomialDerivatives[d2];
270 return fmatrixInvTranspTimesPolynomialDerivatives;
274 const Eigen::VectorXd &pointsCurvilinearCoordinates)
const
276 Eigen::VectorXd edgeInternalPoints;
279 const Eigen::VectorXd edgeBasisCoefficients =
282 return utilities.
ComputeValuesOnEdge(edgeInternalPoints.transpose(), reference_element_data.
Order, edgeBasisCoefficients, pointsCurvilinearCoordinates);
288 const Eigen::MatrixXd FmatrixInvTimesFmatrixInvTransp =
291 switch (projectionType)
294 Eigen::MatrixXd basisFunctionsLaplacianValues =
297 for (
unsigned short d1 = 0; d1 < localSpace.
Dimension; d1++)
298 for (
unsigned short d2 = 0; d2 < localSpace.
Dimension; d2++)
299 basisFunctionsLaplacianValues += FmatrixInvTimesFmatrixInvTransp(d2, d1) *
303 return basisFunctionsLaplacianValues;
306 throw std::runtime_error(
"Unknown projector type");
313 const Eigen::MatrixXd &)
const
315 throw std::runtime_error(
"Unimplemented method");
319 const Eigen::MatrixXd &)
const
321 throw std::runtime_error(
"Unimplemented method");
The GeometryUtilities class intersects 3D segments.
Definition GeometryUtilities.hpp:37
Definition Monomials_2D.hpp:22
Interface class for Primal Conforming Constant degree 2D Virtual Element Methods .
Definition I_VEM_PCC_2D_LocalSpace.hpp:30
Primal Conforming Constant degree Virtual Element Methods 2D with improvements for high-order .
Definition VEM_PCC_2D_Inertia_LocalSpace.hpp:28
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_Inertia_LocalSpace.hpp:85
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_Inertia_LocalSpace.hpp:230
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_Inertia_LocalSpace.cpp:120
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_Inertia_LocalSpace.hpp:273
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_Inertia_LocalSpace.hpp:145
Eigen::MatrixXd ComputePolynomialsLaplacianValues(const Polydim::VEM::PCC::VEM_PCC_2D_ReferenceElement_Data &, const Polydim::VEM::PCC::VEM_PCC_2D_LocalSpace_Data &, const Eigen::MatrixXd &) const
Compute values of the laplacian of the polynomial basis at given points.
Definition VEM_PCC_2D_Inertia_LocalSpace.hpp:317
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_Inertia_LocalSpace.hpp:99
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_Inertia_LocalSpace.hpp:285
Eigen::MatrixXd ComputeBasisFunctionsLaplacianValues(const Polydim::VEM::PCC::VEM_PCC_2D_ReferenceElement_Data &, const Polydim::VEM::PCC::VEM_PCC_2D_LocalSpace_Data &, const Polydim::VEM::PCC::ProjectionTypes &, const Eigen::MatrixXd &) const
Compute values of a suitable projection of laplacian of basis functions at default quadrature points.
Definition VEM_PCC_2D_Inertia_LocalSpace.hpp:310
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_Inertia_LocalSpace.hpp:248
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_Inertia_LocalSpace.cpp:24
Eigen::MatrixXd ComputeScaledPolynomialsValues(const Polydim::VEM::PCC::VEM_PCC_2D_LocalSpace_Data &localSpace) const
Definition VEM_PCC_2D_Inertia_LocalSpace.hpp:211
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_Inertia_LocalSpace.hpp:157
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_Inertia_LocalSpace.hpp:217
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_Inertia_LocalSpace.hpp:109
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_Inertia_LocalSpace.hpp:206
Definition VEM_PCC_2D_LocalSpace_Data.hpp:44
Polydim::Utilities::Inertia_Data inertia_data
Definition VEM_PCC_2D_LocalSpace_Data.hpp:98
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
Polydim::VEM::PCC::VEM_PCC_2D_Polygon_Geometry inertia_polygon
Definition VEM_PCC_2D_LocalSpace_Data.hpp:99
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
unsigned int NumBasisFunctions
Definition VEM_PCC_2D_LocalSpace_Data.hpp:55
double constantMass
Definition VEM_PCC_2D_LocalSpace_Data.hpp:101
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 constantStiff
Definition VEM_PCC_2D_LocalSpace_Data.hpp:100
std::vector< Eigen::MatrixXd > Pi0km1Der
Definition VEM_PCC_2D_LocalSpace_Data.hpp:83
Eigen::MatrixXd Pi0km1
Definition VEM_PCC_2D_LocalSpace_Data.hpp:80
unsigned int Order
Definition VEM_PCC_2D_LocalSpace_Data.hpp:47
std::vector< Eigen::MatrixXd > VanderInternalDerivatives
Definition VEM_PCC_2D_LocalSpace_Data.hpp:74
Definition VEM_PCC_2D_LocalSpace_Data.hpp:27
Eigen::Vector3d Centroid
Definition VEM_PCC_2D_LocalSpace_Data.hpp:33
double Diameter
Definition VEM_PCC_2D_LocalSpace_Data.hpp:35
double Measure
Definition VEM_PCC_2D_LocalSpace_Data.hpp:34
ProjectionTypes
Definition VEM_PCC_Utilities.hpp:28
Definition FEM_MCC_2D_LocalSpace.cpp:17
Affine map data aligning a polytope with its principal axes of inertia.
Definition Inertia_Utilities.hpp:30
Eigen::Matrix3d FmatrixInv
Definition Inertia_Utilities.hpp:32
Eigen::Vector3d translation
Definition Inertia_Utilities.hpp:33
double absDetFmatrix
Definition Inertia_Utilities.hpp:34
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 > 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 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