12#ifndef __FEM_Triangle_PCC_2D_LocalSpace_HPP
13#define __FEM_Triangle_PCC_2D_LocalSpace_HPP
33 const Eigen::MatrixXd &referenceValues)
const
35 return referenceValues(Eigen::all, local_space.
DofsMeshOrder);
39 const std::vector<Eigen::MatrixXd> &referenceDerivateValues)
const;
42 const std::array<Eigen::MatrixXd, 4> &referenceSecondDerivateValues)
const;
63 const unsigned int edge_local_index)
const
65 const auto &dof_coordinates = local_space.
Dofs;
67 const unsigned int cell1DStartingLocalIdex = local_space.
Dof1DsIndex.at(edge_local_index);
68 const unsigned int num_edge_dofs = reference_element_data.
NumDofs1D;
70 if (num_edge_dofs == 0)
71 return Eigen::MatrixXd(0, 0);
73 const Eigen::MatrixXd edge_dofs_coordinates = dof_coordinates.block(0, cell1DStartingLocalIdex, 3, num_edge_dofs);
75 return edge_dofs_coordinates;
81 const auto &dof_coordinates = local_space.
Dofs;
83 const unsigned int starting_index = local_space.
Dof2DsIndex.at(0);
84 const unsigned int num_internal_dofs = reference_element_data.
NumDofs2D;
86 if (num_internal_dofs == 0)
87 return Eigen::MatrixXd(0, 0);
89 const Eigen::MatrixXd face_dofs_coordinates = dof_coordinates.block(0, starting_index, 3, num_internal_dofs);
91 return face_dofs_coordinates;
97 if (local_space.
Order > 3)
98 throw std::runtime_error(
"Unsupported order");
112 const Eigen::MatrixXd &points)
const
114 const Eigen::MatrixXd referencePoints = mapTriangle.
FInv(local_space.
MapData, points);
116 return MapValues(local_space, reference_element.
EvaluateBasisFunctions(referencePoints, reference_element_data));
121 const Eigen::MatrixXd &points)
const
123 if (local_space.
Order > 3)
124 throw std::runtime_error(
"Unsupported order");
126 const Eigen::MatrixXd referencePoints = mapTriangle.
FInv(local_space.
MapData, points);
134 const Eigen::MatrixXd &points)
const
136 const Eigen::MatrixXd referencePoints = mapTriangle.
FInv(local_space.
MapData, points);
147 const Eigen::VectorXd &pointsCurvilinearCoordinates)
const
149 Eigen::MatrixXd points = Eigen::MatrixXd(3, pointsCurvilinearCoordinates.size());
150 points.row(0) = pointsCurvilinearCoordinates;
Definition MapTriangle.hpp:20
static Eigen::MatrixXd FInv(const MapTriangleData &mapData, const Eigen::MatrixXd &x)
Definition MapTriangle.hpp:76
Factory that builds the reference element data for a 1D PCC finite element.
Definition FEM_PCC_1D_ReferenceElement.hpp:67
Eigen::MatrixXd EvaluateBasisFunctions(const Eigen::MatrixXd &points, const Polydim::FEM::PCC::FEM_PCC_1D_ReferenceElement_Data &reference_element_data) const
Definition FEM_PCC_1D_ReferenceElement.hpp:199
Definition FEM_Triangle_PCC_2D_LocalSpace.hpp:27
Eigen::MatrixXd InternalDOFsCoordinates(const Polydim::FEM::PCC::FEM_Triangle_PCC_2D_ReferenceElement_Data &reference_element_data, const Polydim::FEM::PCC::FEM_Triangle_PCC_2D_LocalSpace_Data &local_space) const
Definition FEM_Triangle_PCC_2D_LocalSpace.hpp:78
std::vector< Eigen::MatrixXd > ComputeBasisFunctionsDerivativeValues(const Polydim::FEM::PCC::FEM_Triangle_PCC_2D_ReferenceElement_Data &reference_element_data, const Polydim::FEM::PCC::FEM_Triangle_PCC_2D_LocalSpace_Data &local_space) const
Definition FEM_Triangle_PCC_2D_LocalSpace.hpp:103
Eigen::MatrixXd ComputeBasisFunctionsLaplacianValues(const Polydim::FEM::PCC::FEM_Triangle_PCC_2D_ReferenceElement_Data &reference_element_data, const Polydim::FEM::PCC::FEM_Triangle_PCC_2D_LocalSpace_Data &local_space, const Eigen::MatrixXd &points) const
Definition FEM_Triangle_PCC_2D_LocalSpace.hpp:119
Eigen::MatrixXd ComputeBasisFunctionsValuesOnEdge(const Polydim::FEM::PCC::FEM_Triangle_PCC_2D_ReferenceElement_Data &reference_element_data) const
Definition FEM_Triangle_PCC_2D_LocalSpace.hpp:141
Eigen::MatrixXd ComputeBasisFunctionsLaplacianValues(const Polydim::FEM::PCC::FEM_Triangle_PCC_2D_ReferenceElement_Data &reference_element_data, const Polydim::FEM::PCC::FEM_Triangle_PCC_2D_LocalSpace_Data &local_space) const
Definition FEM_Triangle_PCC_2D_LocalSpace.hpp:94
Eigen::MatrixXd ComputeBasisFunctionsValues(const Polydim::FEM::PCC::FEM_Triangle_PCC_2D_ReferenceElement_Data &reference_element_data, const Polydim::FEM::PCC::FEM_Triangle_PCC_2D_LocalSpace_Data &local_space) const
Definition FEM_Triangle_PCC_2D_LocalSpace.hpp:55
Eigen::MatrixXd ComputeBasisFunctionsValuesOnEdge(const Polydim::FEM::PCC::FEM_Triangle_PCC_2D_ReferenceElement_Data &reference_element_data, const Eigen::VectorXd &pointsCurvilinearCoordinates) const
Definition FEM_Triangle_PCC_2D_LocalSpace.hpp:146
Eigen::MatrixXd EdgeDOFsCoordinates(const Polydim::FEM::PCC::FEM_Triangle_PCC_2D_ReferenceElement_Data &reference_element_data, const Polydim::FEM::PCC::FEM_Triangle_PCC_2D_LocalSpace_Data &local_space, const unsigned int edge_local_index) const
Definition FEM_Triangle_PCC_2D_LocalSpace.hpp:61
Polydim::FEM::PCC::FEM_Triangle_PCC_2D_LocalSpace_Data CreateLocalSpace(const Polydim::FEM::PCC::FEM_Triangle_PCC_2D_ReferenceElement_Data &reference_element_data, const Polydim::FEM::PCC::FEM_PCC_2D_Polygon_Geometry &polygon) const
Definition FEM_Triangle_PCC_2D_LocalSpace.cpp:23
std::vector< Eigen::MatrixXd > ComputeBasisFunctionsDerivativeValues(const Polydim::FEM::PCC::FEM_Triangle_PCC_2D_ReferenceElement_Data &reference_element_data, const Polydim::FEM::PCC::FEM_Triangle_PCC_2D_LocalSpace_Data &local_space, const Eigen::MatrixXd &points) const
Definition FEM_Triangle_PCC_2D_LocalSpace.hpp:131
Eigen::MatrixXd ComputeBasisFunctionsValues(const Polydim::FEM::PCC::FEM_Triangle_PCC_2D_ReferenceElement_Data &reference_element_data, const Polydim::FEM::PCC::FEM_Triangle_PCC_2D_LocalSpace_Data &local_space, const Eigen::MatrixXd &points) const
Definition FEM_Triangle_PCC_2D_LocalSpace.hpp:110
Definition FEM_Triangle_PCC_2D_ReferenceElement.hpp:52
Eigen::MatrixXd EvaluateBasisFunctions(const Eigen::MatrixXd &points, const Polydim::FEM::PCC::FEM_Triangle_PCC_2D_ReferenceElement_Data &reference_element_data) const
Definition FEM_Triangle_PCC_2D_ReferenceElement.hpp:173
std::vector< Eigen::MatrixXd > EvaluateBasisFunctionDerivatives(const Eigen::MatrixXd &points, const Polydim::FEM::PCC::FEM_Triangle_PCC_2D_ReferenceElement_Data &reference_element_data) const
Definition FEM_Triangle_PCC_2D_ReferenceElement.hpp:217
std::array< Eigen::MatrixXd, 4 > EvaluateBasisFunctionSecondDerivatives(const Eigen::MatrixXd &points, const Polydim::FEM::PCC::FEM_Triangle_PCC_2D_ReferenceElement_Data &reference_element_data) const
Definition FEM_Triangle_PCC_2D_ReferenceElement.hpp:293
Definition FEM_MCC_2D_LocalSpace.cpp:17
Definition MapTriangle.hpp:23
Definition QuadratureData.hpp:22
Eigen::MatrixXd ReferenceBasisFunctionValues
Definition FEM_PCC_1D_ReferenceElement.hpp:58
Definition FEM_PCC_2D_LocalSpace_Data.hpp:38
Definition FEM_PCC_2D_LocalSpace_Data.hpp:49
std::array< unsigned int, 2 > Dof2DsIndex
Definition FEM_PCC_2D_LocalSpace_Data.hpp:60
unsigned int Order
Definition FEM_PCC_2D_LocalSpace_Data.hpp:52
std::array< unsigned int, 4 > Dof1DsIndex
Definition FEM_PCC_2D_LocalSpace_Data.hpp:59
Gedim::MapTriangle::MapTriangleData MapData
Definition FEM_PCC_2D_LocalSpace_Data.hpp:50
std::vector< unsigned int > DofsMeshOrder
Definition FEM_PCC_2D_LocalSpace_Data.hpp:57
Eigen::MatrixXd Dofs
Definition FEM_PCC_2D_LocalSpace_Data.hpp:56
Definition FEM_Triangle_PCC_2D_ReferenceElement.hpp:28
Polydim::FEM::PCC::FEM_PCC_1D_ReferenceElement_Data BoundaryReferenceElement_Data
Definition FEM_Triangle_PCC_2D_ReferenceElement.hpp:45
unsigned int NumDofs2D
Definition FEM_Triangle_PCC_2D_ReferenceElement.hpp:33
unsigned int NumDofs1D
Definition FEM_Triangle_PCC_2D_ReferenceElement.hpp:32
std::array< Eigen::MatrixXd, 4 > ReferenceBasisFunctionSecondDerivativeValues
Definition FEM_Triangle_PCC_2D_ReferenceElement.hpp:43
std::vector< Eigen::MatrixXd > ReferenceBasisFunctionDerivativeValues
Definition FEM_Triangle_PCC_2D_ReferenceElement.hpp:42
Eigen::MatrixXd ReferenceBasisFunctionValues
Definition FEM_Triangle_PCC_2D_ReferenceElement.hpp:41