12#ifndef __VEM_PCC_3D_Inertia_LocalSpace_HPP
13#define __VEM_PCC_3D_Inertia_LocalSpace_HPP
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 &polyhedronDiameter,
44 const Eigen::MatrixXd &internalQuadraturePoints,
45 const Eigen::VectorXd &internalQuadratureWeights,
46 const Eigen::MatrixXd &boundaryQuadraturePoints,
47 const Eigen::MatrixXd &edgeInternalQuadraturePoints,
51 const double &polyhedronMeasure,
52 const double &polyhedronDiameter,
53 const Eigen::VectorXd &internalQuadratureWeights,
54 const Eigen::VectorXd &boundaryQuadratureWeights,
55 const std::vector<Eigen::VectorXd> &boundaryQuadratureWeightsTimesNormal,
59 const double &polyhedronMeasure,
60 const double &polyhedronDiameter,
61 const std::vector<Eigen::VectorXd> &boundaryQuadratureWeightsTimesNormal,
80 const std::vector<Eigen::MatrixXi> &polyhedronFaces,
81 const std::vector<double> &polygonalFaces,
82 const Eigen::MatrixXd &boundaryQuadraturePoints,
83 const Eigen::VectorXd &boundaryQuadratureWeights,
92 std::vector<double> &inertia_faces_measure)
const;
103 switch (projectionType)
110 throw std::runtime_error(
"not valid projection type");
116 const Eigen::MatrixXd &coercivity_matrix,
117 const Eigen::VectorXd &vector_coefficients)
const
119 switch (projectionType)
132 throw std::runtime_error(
"not valid projection type");
149 std::vector<Eigen::MatrixXd> basisFunctionsDerivativeValues(localSpace.
Dimension);
151 switch (projectionType)
154 basisFunctionsDerivativeValues.resize(localSpace.
Dimension);
155 for (
unsigned short i = 0; i < localSpace.
Dimension; ++i)
160 basisFunctionsDerivativeValues.resize(localSpace.
Dimension);
161 for (
unsigned short i = 0; i < localSpace.
Dimension; ++i)
166 throw std::runtime_error(
"Unknown projector type");
169 std::vector<Eigen::MatrixXd> fmatrixInvTranspTimesBasisFunctionDerivativeValues(
171 Eigen::MatrixXd::Zero(basisFunctionsDerivativeValues[0].rows(), basisFunctionsDerivativeValues[1].cols()));
172 for (
unsigned int d1 = 0; d1 < localSpace.
Dimension; d1++)
174 for (
unsigned int d2 = 0; d2 < localSpace.
Dimension; d2++)
176 fmatrixInvTranspTimesBasisFunctionDerivativeValues[d1] +=
177 FmatrixInvTransp(d1, d2) * basisFunctionsDerivativeValues[d2];
181 return fmatrixInvTranspTimesBasisFunctionDerivativeValues;
187 throw std::runtime_error(
"Unimplemented method");
193 const Eigen::MatrixXd &points)
const
195 const Eigen::MatrixXd referencePoints =
208 const Eigen::MatrixXd &points)
const
210 const Eigen::MatrixXd referencePoints =
215 std::vector<Eigen::MatrixXd> basisFunctionsDerivativeValues(localSpace.
Dimension);
217 switch (projectionType)
220 const std::vector<Eigen::MatrixXd> VanderDerivatives =
226 basisFunctionsDerivativeValues.resize(localSpace.
Dimension);
227 for (
unsigned short i = 0; i < localSpace.
Dimension; ++i)
228 basisFunctionsDerivativeValues[i] = VanderDerivatives[i] * localSpace.
PiNabla;
232 basisFunctionsDerivativeValues.resize(localSpace.
Dimension);
233 for (
unsigned short i = 0; i < localSpace.
Dimension; ++i)
234 basisFunctionsDerivativeValues[i] = vander.leftCols(localSpace.
Nkm1) * localSpace.
Pi0km1Der[i];
238 throw std::runtime_error(
"Unknown projector type");
241 std::vector<Eigen::MatrixXd> fmatrixInvTranspTimesBasisFunctionDerivativeValues(
243 Eigen::MatrixXd::Zero(basisFunctionsDerivativeValues[0].rows(), basisFunctionsDerivativeValues[1].cols()));
244 for (
unsigned int d1 = 0; d1 < localSpace.
Dimension; d1++)
246 for (
unsigned int d2 = 0; d2 < localSpace.
Dimension; d2++)
248 fmatrixInvTranspTimesBasisFunctionDerivativeValues[d1] +=
249 FmatrixInvTransp(d1, d2) * basisFunctionsDerivativeValues[d2];
253 return fmatrixInvTranspTimesBasisFunctionDerivativeValues;
259 const Eigen::MatrixXd &)
const
261 throw std::runtime_error(
"Unimplemented method");
271 const Eigen::MatrixXd &points)
const
273 const Eigen::MatrixXd referencePoints =
287 std::vector<Eigen::MatrixXd> fmatrixInvTranspTimesPolynomialDerivatives(
289 Eigen::MatrixXd::Zero(polynomialDerivatives[0].rows(), polynomialDerivatives[1].cols()));
290 for (
unsigned int d1 = 0; d1 < localSpace.
Dimension; d1++)
292 for (
unsigned int d2 = 0; d2 < localSpace.
Dimension; d2++)
294 fmatrixInvTranspTimesPolynomialDerivatives[d1] += FmatrixInvTransp(d1, d2) * polynomialDerivatives[d2];
297 return fmatrixInvTranspTimesPolynomialDerivatives;
302 const Eigen::MatrixXd &points)
const
304 const Eigen::MatrixXd referencePoints =
315 std::vector<Eigen::MatrixXd> fmatrixInvTranspTimesPolynomialDerivatives(
317 Eigen::MatrixXd::Zero(polynomialDerivatives[0].rows(), polynomialDerivatives[1].cols()));
318 for (
unsigned int d1 = 0; d1 < localSpace.
Dimension; d1++)
320 for (
unsigned int d2 = 0; d2 < localSpace.
Dimension; d2++)
322 fmatrixInvTranspTimesPolynomialDerivatives[d1] += FmatrixInvTransp(d1, d2) * polynomialDerivatives[d2];
325 return fmatrixInvTranspTimesPolynomialDerivatives;
330 const Eigen::MatrixXd &)
const
332 throw std::runtime_error(
"Unimplemented method");
337 const Eigen::VectorXd &pointsCurvilinearCoordinates)
const
340 reference_element_data.
Order,
342 pointsCurvilinearCoordinates);
346 const unsigned int edge_local_index)
const
The GeometryUtilities class intersects 3D segments.
Definition GeometryUtilities.hpp:37
Definition Monomials_3D.hpp:22
Interface class for Primal Conforming Constant degree 3D Virtual Element Methods .
Definition I_VEM_PCC_3D_LocalSpace.hpp:31
Primal Conforming Constant degree Virtual Element Methods 2D with improvements for high-order .
Definition VEM_PCC_2D_Inertia_LocalSpace.hpp:28
Interface class for Primal Conforming Constant degree 3D Virtual Element Methods .
Definition VEM_PCC_3D_Inertia_LocalSpace.hpp:33
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_Inertia_LocalSpace.hpp:136
Eigen::MatrixXd ComputePolynomialsLaplacianValues(const Polydim::VEM::PCC::VEM_PCC_3D_ReferenceElement_Data &, const Polydim::VEM::PCC::VEM_PCC_3D_LocalSpace_Data &, const Eigen::MatrixXd &) const
Compute values of the laplacian of the polynomial basis at given points.
Definition VEM_PCC_3D_Inertia_LocalSpace.hpp:328
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_Inertia_LocalSpace.hpp:300
Eigen::MatrixXd EdgeDOFsCoordinates(const Polydim::VEM::PCC::VEM_PCC_3D_LocalSpace_Data &localSpace, const unsigned int edge_local_index) const
Definition VEM_PCC_3D_Inertia_LocalSpace.hpp:345
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_Inertia_LocalSpace.hpp:335
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_Inertia_LocalSpace.hpp:282
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_Inertia_LocalSpace.hpp:114
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_Inertia_LocalSpace.hpp:100
Eigen::MatrixXd ComputeBasisFunctionsLaplacianValues(const Polydim::VEM::PCC::VEM_PCC_3D_ReferenceElement_Data &, const Polydim::VEM::PCC::VEM_PCC_3D_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_3D_Inertia_LocalSpace.hpp:256
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_Inertia_LocalSpace.hpp:204
Eigen::MatrixXd ComputeBasisFunctionsLaplacianValues(const Polydim::VEM::PCC::VEM_PCC_3D_LocalSpace_Data &, const Polydim::VEM::PCC::ProjectionTypes &) const
Compute values of a suitable projection of laplacian of basis functions at default quadrature points.
Definition VEM_PCC_3D_Inertia_LocalSpace.hpp:184
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_Inertia_LocalSpace.hpp:146
Polydim::VEM::PCC::VEM_PCC_3D_LocalSpace_Data CreateLocalSpace(const 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_Inertia_LocalSpace.cpp:24
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_Inertia_LocalSpace.hpp:269
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_Inertia_LocalSpace.hpp:190
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_Inertia_LocalSpace.hpp:264
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
Polydim::VEM::PCC::VEM_PCC_3D_Polyhedron_Geometry inertia_polyhedron
Definition VEM_PCC_3D_LocalSpace_Data.hpp:116
double constantMass
Definition VEM_PCC_3D_LocalSpace_Data.hpp:118
Polydim::Utilities::Inertia_Data inertia_data
Definition VEM_PCC_3D_LocalSpace_Data.hpp:115
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
double constantStiff
Definition VEM_PCC_3D_LocalSpace_Data.hpp:117
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
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
Eigen::MatrixXd VanderInternal
Definition VEM_PCC_3D_LocalSpace_Data.hpp:76
Eigen::RowVectorXd EdgeInternalPoints
Definition VEM_PCC_3D_LocalSpace_Data.hpp:120
unsigned int NumProjectorBasisFunctions
Definition VEM_PCC_3D_LocalSpace_Data.hpp:71
Definition VEM_PCC_3D_LocalSpace_Data.hpp:27
Eigen::Vector3d Centroid
Definition VEM_PCC_3D_LocalSpace_Data.hpp:36
double Diameter
Definition VEM_PCC_3D_LocalSpace_Data.hpp:38
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
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 > 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 ComputeDofiDofiStabilizationMatrix(const Eigen::MatrixXd &projector, const double &coefficient, const Eigen::MatrixXd &Dmatrix) const
Definition VEM_PCC_Utilities.hpp:234