12#ifndef __VEM_DF_PCC_Utilities_HPP
13#define __VEM_DF_PCC_Utilities_HPP
16#include "Gedim_Macro.hpp"
40 Eigen::VectorXd interpolation_points_x(order + 1);
41 interpolation_points_x << 0.0, 1.0, edgeInternalPoints;
47 const unsigned int &Nkm1,
48 const Eigen::MatrixXd &vanderInternal,
49 const std::vector<Eigen::MatrixXd> &vanderInternalDerivatives,
50 const std::vector<Eigen::MatrixXd> &piNabla,
51 const std::vector<Eigen::MatrixXd> &pi0km1Der)
const
53 switch (projectionType)
56 std::vector<Eigen::MatrixXd> basisFunctionDerivativeValues(dimension * dimension);
58 for (
unsigned short j = 0; j < dimension; ++j)
59 for (
unsigned short i = 0; i < dimension; ++i)
60 basisFunctionDerivativeValues[dimension * j + i] = vanderInternalDerivatives[i] * piNabla[j];
62 return basisFunctionDerivativeValues;
65 std::vector<Eigen::MatrixXd> basisFunctionDerivativeValues(dimension * dimension);
67 for (
unsigned short j = 0; j < dimension; ++j)
68 for (
unsigned short i = 0; i < dimension; ++i)
69 basisFunctionDerivativeValues[dimension * j + i] =
70 vanderInternal.leftCols(Nkm1) * pi0km1Der[dimension * j + i];
72 return basisFunctionDerivativeValues;
75 throw std::runtime_error(
"Unknown projector type");
80 const Eigen::MatrixXd &vanderInternal,
81 const Eigen::MatrixXd &vmatrix)
const
83 return vanderInternal.leftCols(Nkm1) * vmatrix;
88 const unsigned int &Nkm2,
89 const std::vector<Eigen::MatrixXd> &pi0km2,
90 const std::vector<Eigen::MatrixXd> &pi0k,
91 const Eigen::MatrixXd &vanderInternal)
const
93 std::vector<Eigen::MatrixXd> basisFunctionValues(dimension);
94 switch (projectionType)
97 for (
unsigned short i = 0; i < dimension; ++i)
98 basisFunctionValues[i] = vanderInternal.leftCols(Nkm2) * pi0km2[i];
101 for (
unsigned short i = 0; i < dimension; ++i)
102 basisFunctionValues[i] = vanderInternal * pi0k[i];
105 throw std::runtime_error(
"Unknown projector type");
107 return basisFunctionValues;
111 template <
typename MonomialType>
114 return vanderInternal;
119 return vanderInternal;
123 template <
typename MonomialType>
125 const MonomialType &monomials,
126 const Eigen::Vector3d ¢roid,
127 const double &diameter,
128 const Eigen::MatrixXd &points)
const
130 return monomials.Vander(data, points, centroid, diameter);
134 template <
typename MonomialType>
136 const MonomialType &)
const
138 return vanderInternalDerivatives;
143 return vanderInternalDerivatives;
147 template <
typename MonomialType>
149 const MonomialType &monomials,
150 const double &diameter,
151 const Eigen::MatrixXd &vander)
const
153 return monomials.VanderDerivatives(data, vander, diameter);
156 template <
typename MonomialType>
158 const MonomialType &monomials,
159 const double &diameter,
160 const Eigen::MatrixXd &vander)
const
162 return monomials.VanderLaplacian(data, vander, diameter);
166 const unsigned int &order,
167 const Eigen::VectorXd &edgeBasisCoefficients,
168 const Eigen::VectorXd &pointsCurvilinearCoordinates)
const
170 Eigen::VectorXd interpolation_points_x(order + 1);
171 interpolation_points_x << 0.0, 1.0, edgeInternalPoints.transpose();
176 const std::vector<Eigen::MatrixXd> &projector,
177 const double &coefficient,
178 const std::vector<Eigen::MatrixXd> &dmatrix)
const
180 Eigen::MatrixXd staBmatrix = dmatrix[0] * projector[0];
182 for (
unsigned int d = 1; d < dimension; d++)
183 staBmatrix += dmatrix[d] * projector[d];
185 staBmatrix.diagonal().array() -= 1;
188 staBmatrix = coefficient * staBmatrix.transpose() * staBmatrix;
Eigen::VectorXd Lagrange_1D_coefficients(const Eigen::VectorXd &interpolation_points_x)
Compute the barycentric weights of the 1D Lagrange basis.
Definition lagrange_1D.cpp:21
Eigen::MatrixXd Lagrange_1D_values(const Eigen::VectorXd &interpolation_points_x, const Eigen::VectorXd &lagrange_1D_coefficients, const Eigen::VectorXd &evaluation_points_x)
Evaluate the 1D Lagrange basis functions at given points.
Definition lagrange_1D.cpp:55
ProjectionTypes
Definition VEM_DF_PCC_Utilities.hpp:28
Definition FEM_MCC_2D_LocalSpace.cpp:17
Definition Monomials_Data.hpp:23
Definition VEM_DF_PCC_Utilities.hpp:36
std::vector< Eigen::MatrixXd > ComputePolynomialsDerivativeValues(const std::vector< Eigen::MatrixXd > &vanderInternalDerivatives) const
Definition VEM_DF_PCC_Utilities.hpp:141
std::vector< Eigen::MatrixXd > ComputePolynomialsDerivativeValues(const Polydim::Utilities::Monomials_Data &data, const MonomialType &monomials, const double &diameter, const Eigen::MatrixXd &vander) const
Definition VEM_DF_PCC_Utilities.hpp:148
std::vector< Eigen::MatrixXd > ComputeBasisFunctionsValues(const unsigned int dimension, const Polydim::VEM::DF_PCC::ProjectionTypes &projectionType, const unsigned int &Nkm2, const std::vector< Eigen::MatrixXd > &pi0km2, const std::vector< Eigen::MatrixXd > &pi0k, const Eigen::MatrixXd &vanderInternal) const
Definition VEM_DF_PCC_Utilities.hpp:86
Eigen::MatrixXd ComputeDofiDofiStabilizationMatrix(const unsigned int dimension, const std::vector< Eigen::MatrixXd > &projector, const double &coefficient, const std::vector< Eigen::MatrixXd > &dmatrix) const
Definition VEM_DF_PCC_Utilities.hpp:175
Eigen::MatrixXd ComputePolynomialsLaplacianValues(const Polydim::Utilities::Monomials_Data &data, const MonomialType &monomials, const double &diameter, const Eigen::MatrixXd &vander) const
Definition VEM_DF_PCC_Utilities.hpp:157
Eigen::MatrixXd ComputeValuesOnEdge(const Eigen::RowVectorXd &edgeInternalPoints, const unsigned int &order, const Eigen::VectorXd &edgeBasisCoefficients, const Eigen::VectorXd &pointsCurvilinearCoordinates) const
Definition VEM_DF_PCC_Utilities.hpp:165
std::vector< Eigen::MatrixXd > ComputeBasisFunctionsDerivativeValues(const unsigned int dimension, const Polydim::VEM::DF_PCC::ProjectionTypes &projectionType, const unsigned int &Nkm1, const Eigen::MatrixXd &vanderInternal, const std::vector< Eigen::MatrixXd > &vanderInternalDerivatives, const std::vector< Eigen::MatrixXd > &piNabla, const std::vector< Eigen::MatrixXd > &pi0km1Der) const
Definition VEM_DF_PCC_Utilities.hpp:45
Eigen::MatrixXd ComputePolynomialsValues(const Polydim::Utilities::Monomials_Data &data, const MonomialType &monomials, const Eigen::Vector3d ¢roid, const double &diameter, const Eigen::MatrixXd &points) const
Definition VEM_DF_PCC_Utilities.hpp:124
Eigen::MatrixXd ComputePolynomialsValues(const Eigen::MatrixXd &vanderInternal) const
Definition VEM_DF_PCC_Utilities.hpp:117
Eigen::MatrixXd ComputeBasisFunctionsDivergenceValues(const unsigned int &Nkm1, const Eigen::MatrixXd &vanderInternal, const Eigen::MatrixXd &vmatrix) const
Definition VEM_DF_PCC_Utilities.hpp:79
Eigen::VectorXd ComputeEdgeBasisCoefficients(const unsigned int &order, const Eigen::VectorXd &edgeInternalPoints) const
Definition VEM_DF_PCC_Utilities.hpp:37