12#ifndef __VEM_MCC_2D_Velocity_LocalSpace_HPP
13#define __VEM_MCC_2D_Velocity_LocalSpace_HPP
39 const unsigned int &numEdges,
40 const Eigen::Vector3d &polygonCentroid,
41 const double &polygonMeasure,
42 const double &polygonDiameter,
43 const Eigen::MatrixXd &internalQuadraturePoints,
44 const Eigen::VectorXd &internalQuadratureWeights,
45 const Eigen::MatrixXd &boundaryQuadraturePoints,
48 void ComputeL2Projectors(
const double &polygonMeasure,
49 const Eigen::VectorXd &internalQuadratureWeights,
50 const Eigen::MatrixXd &B2Nabla,
53 void ComputeDivergenceCoefficients(
const double &polytopeMeasure,
54 const Eigen::MatrixXd &W2,
57 void ComputeValuesOnBoundary(
const Eigen::MatrixXd &polytopeVertices,
58 const Eigen::MatrixXd &edgeNormals,
59 const std::vector<bool> &edgeDirections,
60 const Eigen::VectorXd &boundaryQuadratureWeights,
62 Eigen::MatrixXd &B2Nabla,
87 switch (projectionType)
92 throw std::runtime_error(
"not valid projection type");
99 switch (projectionType)
104 throw std::runtime_error(
"not valid projectors");
112 const Eigen::MatrixXd &points)
const
114 switch (projectionType)
118 const unsigned int numQuadrature = points.cols();
120 const Eigen::MatrixXd VanderInternalKp1 =
122 const Eigen::MatrixXd VanderInternal = VanderInternalKp1.leftCols(localSpace.
Nk);
123 Eigen::MatrixXd VanderInternal2k(localSpace.
Dimension * localSpace.
Nk, localSpace.
Dimension * points.cols());
124 VanderInternal2k << VanderInternal.transpose(),
125 Eigen::MatrixXd::Zero(VanderInternal.cols(), VanderInternal.rows()),
126 Eigen::MatrixXd::Zero(VanderInternal.cols(), VanderInternal.rows()), VanderInternal.transpose();
128 const Eigen::MatrixXd GkNablaVanderInternal = localSpace.
TkNabla * VanderInternal2k;
129 const Eigen::MatrixXd GkBigOPlusVanderInternal = localSpace.
TkBigOPlus * VanderInternal2k;
131 Eigen::MatrixXd GkVanderInternal =
132 Eigen::MatrixXd::Zero(localSpace.
Dimension * localSpace.
Nk, localSpace.
Dimension * numQuadrature);
134 GkVanderInternal << GkNablaVanderInternal, GkBigOPlusVanderInternal;
136 const Eigen::MatrixXd temp = GkVanderInternal.transpose() * localSpace.
Pi0k;
137 std::vector<Eigen::MatrixXd> result(localSpace.
Dimension,
138 Eigen::MatrixXd::Zero(localSpace.
Dimension, localSpace.
Pi0k.cols()));
140 for (
unsigned int d = 0; d < localSpace.
Dimension; d++)
141 result[d] = temp.middleRows(numQuadrature * d, numQuadrature);
146 throw std::runtime_error(
"not valid projector type");
162 const Eigen::MatrixXd &points)
const
165 .leftCols(localSpace.
Nk);
Definition Monomials_2D.hpp:22
Eigen::MatrixXd Vander(const Polydim::Utilities::Monomials_Data &data, const Eigen::MatrixXd &points, const Eigen::Vector3d ¢roid, const double &diam) const
Definition Monomials_2D.hpp:55
Interface class for the velocity space of 2D Mixed Conforming Constant degree Virtual Element Methods...
Definition I_VEM_MCC_2D_Velocity_LocalSpace.hpp:30
Interface class for the velocity space of 2D Mixed Conforming Constant degree Virtual Element Methods...
Definition VEM_MCC_2D_Velocity_LocalSpace.hpp:33
Polydim::VEM::MCC::VEM_MCC_2D_Velocity_LocalSpace_Data CreateLocalSpace(const Polydim::VEM::MCC::VEM_MCC_2D_Velocity_ReferenceElement_Data &reference_element_data, const Polydim::VEM::MCC::VEM_MCC_2D_Polygon_Geometry &polygon) const
Compute data of VEM space on a polygon.
Definition VEM_MCC_2D_Velocity_LocalSpace.cpp:25
Eigen::MatrixXd ComputePolynomialsValues(const Polydim::VEM::MCC::VEM_MCC_2D_Velocity_LocalSpace_Data &localSpace) const
Compute values of the polynomial basis at default quadrature points.
Definition VEM_MCC_2D_Velocity_LocalSpace.hpp:155
std::vector< Eigen::MatrixXd > ComputeBasisFunctionsValues(const Polydim::VEM::MCC::VEM_MCC_2D_Velocity_LocalSpace_Data &localSpace, const Polydim::VEM::MCC::ProjectionTypes &projectionType) const
Compute values of a suitable projection of basis functions at default quadrature points.
Definition VEM_MCC_2D_Velocity_LocalSpace.hpp:96
Eigen::MatrixXd ComputePolynomialsValues(const Polydim::VEM::MCC::VEM_MCC_2D_Velocity_ReferenceElement_Data &reference_element_data, const Polydim::VEM::MCC::VEM_MCC_2D_Velocity_LocalSpace_Data &localSpace, const Eigen::MatrixXd &points) const
Compute values of the polynomial basis at given points.
Definition VEM_MCC_2D_Velocity_LocalSpace.hpp:160
Eigen::MatrixXd ComputeDofiDofiStabilizationMatrix(const Polydim::VEM::MCC::VEM_MCC_2D_Velocity_LocalSpace_Data &localSpace, const Polydim::VEM::MCC::ProjectionTypes &projectionType) const
Compute matrix representation of dofi-dofi stabilization.
Definition VEM_MCC_2D_Velocity_LocalSpace.hpp:84
Eigen::MatrixXd ComputeBasisFunctionsDivergenceValues(const Polydim::VEM::MCC::VEM_MCC_2D_Velocity_LocalSpace_Data &localSpace) const
Compute values of the divergence of basis functions at default quadrature points.
Definition VEM_MCC_2D_Velocity_LocalSpace.hpp:150
std::vector< Eigen::MatrixXd > ComputeBasisFunctionsValues(const Polydim::VEM::MCC::VEM_MCC_2D_Velocity_ReferenceElement_Data &reference_element_data, const Polydim::VEM::MCC::VEM_MCC_2D_Velocity_LocalSpace_Data &localSpace, const Polydim::VEM::MCC::ProjectionTypes &projectionType, const Eigen::MatrixXd &points) const
Definition VEM_MCC_2D_Velocity_LocalSpace.hpp:108
ProjectionTypes
Definition VEM_MCC_Utilities.hpp:25
Definition FEM_MCC_2D_LocalSpace.cpp:17
Definition VEM_MCC_2D_LocalSpace_Data.hpp:26
Definition VEM_MCC_2D_LocalSpace_Data.hpp:42
Eigen::MatrixXd VanderInternal
Definition VEM_MCC_2D_LocalSpace_Data.hpp:58
double Measure
Definition VEM_MCC_2D_LocalSpace_Data.hpp:70
unsigned int Dimension
Definition VEM_MCC_2D_LocalSpace_Data.hpp:45
unsigned int NumNablaInternalBasisFunctions
Definition VEM_MCC_2D_LocalSpace_Data.hpp:49
unsigned int NumBasisFunctions
Definition VEM_MCC_2D_LocalSpace_Data.hpp:53
Eigen::MatrixXd TkBigOPlus
Definition VEM_MCC_2D_LocalSpace_Data.hpp:82
Eigen::MatrixXd Dmatrix
Definition VEM_MCC_2D_LocalSpace_Data.hpp:94
unsigned int NumBigOPlusInternalBasisFunctions
Definition VEM_MCC_2D_LocalSpace_Data.hpp:51
Eigen::Vector3d Centroid
Definition VEM_MCC_2D_LocalSpace_Data.hpp:71
Eigen::MatrixXd Gmatrix
Definition VEM_MCC_2D_LocalSpace_Data.hpp:95
unsigned int Nk
Definition VEM_MCC_2D_LocalSpace_Data.hpp:78
unsigned int Order
Definition VEM_MCC_2D_LocalSpace_Data.hpp:43
Eigen::MatrixXd GkVanderBoundaryTimesNormal
Definition VEM_MCC_2D_LocalSpace_Data.hpp:84
double Diameter
Definition VEM_MCC_2D_LocalSpace_Data.hpp:69
Eigen::MatrixXd TkNabla
Definition VEM_MCC_2D_LocalSpace_Data.hpp:81
Eigen::MatrixXd GkVanderInternal
Definition VEM_MCC_2D_LocalSpace_Data.hpp:83
Eigen::MatrixXd Pi0k
Definition VEM_MCC_2D_LocalSpace_Data.hpp:65
unsigned int NumBoundaryBasisFunctions
Definition VEM_MCC_2D_LocalSpace_Data.hpp:47
Eigen::MatrixXd Vmatrix
Definition VEM_MCC_2D_LocalSpace_Data.hpp:97
Definition I_VEM_MCC_2D_ReferenceElement.hpp:45
Utilities::Monomials_Data MonomialsKp1
Definition I_VEM_MCC_2D_ReferenceElement.hpp:54
Definition VEM_MCC_Utilities.hpp:30
Eigen::MatrixXd ComputePolynomialBasisDofs(const unsigned int dimension, const double &polytopeMeasure, const unsigned int &order, const unsigned int &Nk, const unsigned int &NumBoundaryBasisFunctions, const unsigned int &NumNablaInternalBasisFunctions, const unsigned int &NumBigOPlusInternalBasisFunctions, const unsigned int &NumBasisFunctions, const Eigen::MatrixXd &GkVanderBoundaryTimesNormal, const Eigen::MatrixXd &Gmatrix) const
Definition VEM_MCC_Utilities.hpp:31
std::vector< Eigen::MatrixXd > ComputeBasisFunctionsValues(const unsigned int dimension, const Eigen::MatrixXd &projector, const Eigen::MatrixXd &GVander) const
Definition VEM_MCC_Utilities.hpp:226
Eigen::MatrixXd ComputeDofiDofiStabilizationMatrix(const Eigen::MatrixXd &projector, const double &coefficient, const Eigen::MatrixXd &DMatrix) const
Definition VEM_MCC_Utilities.hpp:57