PolyDiM
C++ library for POLYtopal DIscretization Methods
Loading...
Searching...
No Matches
VEM_MCC_3D_Velocity_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_MCC_3D_Velocity_LocalSpace_HPP
13#define __VEM_MCC_3D_Velocity_LocalSpace_HPP
14
15#include "Eigen/Eigen"
18#include "Monomials_2D.hpp"
19#include "Monomials_3D.hpp"
21#include "VEM_MCC_Utilities.hpp"
22#include <vector>
23
24namespace Polydim
25{
26namespace VEM
27{
28namespace MCC
29{
31{
32 private:
36
37 void InitializeProjectorsComputation(const Polydim::VEM::MCC::VEM_MCC_3D_Velocity_ReferenceElement_Data &reference_element_data,
38 const unsigned int &numFaces,
39 const Eigen::Vector3d &polyhedronCentroid,
40 const double &polyhedronMeasure,
41 const double &polyhedronDiameter,
42 const Eigen::MatrixXd &internalQuadraturePoints,
43 const Eigen::VectorXd &internalQuadratureWeights,
44 const Eigen::MatrixXd &boundaryQuadraturePoints,
46
47 void ComputeL2Projectors(const double &polyhedronMeasure,
48 const Eigen::VectorXd &internalQuadratureWeights,
49 const Eigen::MatrixXd &B2Nabla,
51
52 void ComputeDivergenceCoefficients(const double &polytopeMeasure,
53 const Eigen::MatrixXd &W2,
55
56 void ComputeValuesOnBoundary(const Polydim::VEM::MCC::VEM_MCC_3D_Velocity_ReferenceElement_Data &reference_element_data,
57 const unsigned int &numFaces,
58 const std::vector<Eigen::Vector3d> &facesNormals,
59 const std::vector<bool> &facesNormalDirections,
60 const std::vector<bool> &faceNormalGlobalDirections,
61 const std::vector<Eigen::Vector3d> &facesCentroids,
62 const std::vector<double> &facesAreas,
63 const std::vector<double> &facesDiameters,
64 const std::vector<Gedim::Quadrature::QuadratureData> &facesQuadrature,
65 const Eigen::VectorXd &boundaryQuadratureWeights,
66 Eigen::MatrixXd &W2,
67 Eigen::MatrixXd &B2Nabla,
69
70 void ComputePolynomialBasisDofs(const double &polytopeMeasure, Polydim::VEM::MCC::VEM_MCC_3D_Velocity_LocalSpace_Data &localSpace) const
71 {
72 localSpace.Dmatrix = utilities.ComputePolynomialBasisDofs(localSpace.Dimension,
73 polytopeMeasure,
74 localSpace.Order,
75 localSpace.Nk,
79 localSpace.NumBasisFunctions,
81 localSpace.Gmatrix);
82 };
83
84 public:
88
90 const Polydim::VEM::MCC::ProjectionTypes &projectionType) const
91 {
92 switch (projectionType)
93 {
95 return utilities.ComputeDofiDofiStabilizationMatrix(localSpace.Pi0k, localSpace.Measure, localSpace.Dmatrix);
96 default:
97 throw std::runtime_error("not valid projection type");
98 }
99 }
100
101 inline std::vector<Eigen::MatrixXd> ComputeBasisFunctionsValues(const Polydim::VEM::MCC::VEM_MCC_3D_Velocity_LocalSpace_Data &localSpace,
102 const Polydim::VEM::MCC::ProjectionTypes &projectionType) const
103 {
104 switch (projectionType)
105 {
107 return utilities.ComputeBasisFunctionsValues(localSpace.Dimension, localSpace.Pi0k, localSpace.GkVanderInternal);
108 default:
109 throw std::runtime_error("not valid projectors");
110 }
111 }
112
114 {
115 return localSpace.VanderInternal * localSpace.Vmatrix;
116 }
117
119 {
120 return localSpace.VanderInternal;
121 }
122
125 const Eigen::MatrixXd &points) const
126 {
127 return monomials3D.Vander(reference_element_data.MonomialsKp1, points, localSpace.Centroid, localSpace.Diameter)
128 .leftCols(localSpace.Nk);
129 }
130};
131} // namespace MCC
132} // namespace VEM
133} // namespace Polydim
134
135#endif
Definition Monomials_2D.hpp:22
Definition Monomials_3D.hpp:22
Eigen::MatrixXd Vander(const Polydim::Utilities::Monomials_Data &data, const Eigen::MatrixXd &points, const Eigen::Vector3d &centroid, const double &diam) const
Definition Monomials_3D.hpp:58
Interface class for the velocity space of 3D Mixed Conforming Constant degree Virtual Element Methods...
Definition I_VEM_MCC_3D_Velocity_LocalSpace.hpp:29
Definition VEM_MCC_3D_Velocity_LocalSpace.hpp:31
Eigen::MatrixXd ComputeBasisFunctionsDivergenceValues(const Polydim::VEM::MCC::VEM_MCC_3D_Velocity_LocalSpace_Data &localSpace) const
Compute values of the divergence of basis functions at default quadrature points.
Definition VEM_MCC_3D_Velocity_LocalSpace.hpp:113
Eigen::MatrixXd ComputeDofiDofiStabilizationMatrix(const Polydim::VEM::MCC::VEM_MCC_3D_Velocity_LocalSpace_Data &localSpace, const Polydim::VEM::MCC::ProjectionTypes &projectionType) const
Compute matrix representation of dofi-dofi stabilization.
Definition VEM_MCC_3D_Velocity_LocalSpace.hpp:89
Eigen::MatrixXd ComputePolynomialsValues(const Polydim::VEM::MCC::VEM_MCC_3D_Velocity_LocalSpace_Data &localSpace) const
Compute values of the polynomial basis at default quadrature points.
Definition VEM_MCC_3D_Velocity_LocalSpace.hpp:118
Polydim::VEM::MCC::VEM_MCC_3D_Velocity_LocalSpace_Data CreateLocalSpace(const Polydim::VEM::MCC::VEM_MCC_3D_Velocity_ReferenceElement_Data &reference_element_data, const Polydim::VEM::MCC::VEM_MCC_3D_Polyhedron_Geometry &polyhedron) const
Compute data of VEM space on a polygon.
Definition VEM_MCC_3D_Velocity_LocalSpace.cpp:25
std::vector< Eigen::MatrixXd > ComputeBasisFunctionsValues(const Polydim::VEM::MCC::VEM_MCC_3D_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_3D_Velocity_LocalSpace.hpp:101
Eigen::MatrixXd ComputePolynomialsValues(const Polydim::VEM::MCC::VEM_MCC_3D_Velocity_ReferenceElement_Data &reference_element_data, const Polydim::VEM::MCC::VEM_MCC_3D_Velocity_LocalSpace_Data &localSpace, const Eigen::MatrixXd &points) const
Compute values of the polynomial basis at given points.
Definition VEM_MCC_3D_Velocity_LocalSpace.hpp:123
ProjectionTypes
Definition VEM_MCC_Utilities.hpp:25
Definition FEM_MCC_2D_LocalSpace.cpp:17
Definition VEM_MCC_3D_LocalSpace_Data.hpp:27
Definition VEM_MCC_3D_LocalSpace_Data.hpp:50
unsigned int Order
Definition VEM_MCC_3D_LocalSpace_Data.hpp:51
Eigen::MatrixXd Dmatrix
Definition VEM_MCC_3D_LocalSpace_Data.hpp:102
unsigned int Nk
Definition VEM_MCC_3D_LocalSpace_Data.hpp:82
Eigen::MatrixXd GkVanderInternal
Definition VEM_MCC_3D_LocalSpace_Data.hpp:87
unsigned int NumBoundaryBasisFunctions
Definition VEM_MCC_3D_LocalSpace_Data.hpp:55
unsigned int Dimension
Definition VEM_MCC_3D_LocalSpace_Data.hpp:53
Eigen::MatrixXd GkVanderBoundaryTimesNormal
Definition VEM_MCC_3D_LocalSpace_Data.hpp:88
Eigen::MatrixXd VanderInternal
Definition VEM_MCC_3D_LocalSpace_Data.hpp:66
unsigned int NumNablaInternalBasisFunctions
Definition VEM_MCC_3D_LocalSpace_Data.hpp:57
unsigned int NumBasisFunctions
Definition VEM_MCC_3D_LocalSpace_Data.hpp:61
Eigen::MatrixXd Vmatrix
Definition VEM_MCC_3D_LocalSpace_Data.hpp:105
double Diameter
Definition VEM_MCC_3D_LocalSpace_Data.hpp:95
Eigen::MatrixXd Gmatrix
Definition VEM_MCC_3D_LocalSpace_Data.hpp:103
Eigen::Vector3d Centroid
Definition VEM_MCC_3D_LocalSpace_Data.hpp:97
Eigen::MatrixXd Pi0k
Definition VEM_MCC_3D_LocalSpace_Data.hpp:73
unsigned int NumBigOPlusInternalBasisFunctions
Definition VEM_MCC_3D_LocalSpace_Data.hpp:59
double Measure
Definition VEM_MCC_3D_LocalSpace_Data.hpp:96
Definition I_VEM_MCC_3D_ReferenceElement.hpp:39
Utilities::Monomials_Data MonomialsKp1
Definition I_VEM_MCC_3D_ReferenceElement.hpp:48
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