12#ifndef __FEM_Quadrilateral_PCC_2D_LocalSpace_HPP
13#define __FEM_Quadrilateral_PCC_2D_LocalSpace_HPP
31 const Eigen::MatrixXd &referenceValues)
const
33 return referenceValues(Eigen::all, local_space.
DofsMeshOrder);
37 const std::vector<Eigen::MatrixXd> &referenceDerivateValues,
38 const Eigen::MatrixXd &referencePoints)
const;
41 const std::array<Eigen::MatrixXd, 4> &referenceSecondDerivateValues,
42 const Eigen::MatrixXd &referencePoints)
const;
64 return MapLaplacianValues(local_space,
73 return MapDerivativeValues(local_space,
80 const Eigen::MatrixXd &points)
const
83 Eigen::MatrixXd referencePoints;
88 referencePoints = mapQuadrilateral.
FInv(local_space.
MapData, points);
93 referencePoints = mapQuadrilateral.
FInv(local_space.
Vertices, points);
97 throw std::runtime_error(
"not valid quadrilateral");
102 return MapValues(local_space, reference_element.
EvaluateBasisFunctions(referencePoints, reference_element_data));
107 const Eigen::MatrixXd &points)
const
109 Eigen::MatrixXd referencePoints;
114 referencePoints = mapQuadrilateral.
FInv(local_space.
MapData, points);
119 referencePoints = mapQuadrilateral.
FInv(local_space.
Vertices, points);
123 throw std::runtime_error(
"not valid quadrilateral");
127 return MapLaplacianValues(local_space,
135 const Eigen::MatrixXd &points)
const
137 Eigen::MatrixXd referencePoints;
142 referencePoints = mapQuadrilateral.
FInv(local_space.
MapData, points);
147 referencePoints = mapQuadrilateral.
FInv(local_space.
Vertices, points);
151 throw std::runtime_error(
"not valid quadrilateral");
156 return MapDerivativeValues(local_space,
163 const unsigned int edge_local_index)
const
165 const auto &dof_coordinates = local_space.
Dofs;
167 const unsigned int cell1DStartingLocalIdex = local_space.
Dof1DsIndex.at(edge_local_index);
168 const unsigned int num_edge_dofs = reference_element_data.
NumDofs1D;
170 if (num_edge_dofs == 0)
171 return Eigen::MatrixXd(0, 0);
173 const Eigen::MatrixXd edge_dofs_coordinates = dof_coordinates.block(0, cell1DStartingLocalIdex, 3, num_edge_dofs);
175 return edge_dofs_coordinates;
181 const auto &dof_coordinates = local_space.
Dofs;
183 const unsigned int starting_index = local_space.
Dof2DsIndex.at(0);
184 const unsigned int num_internal_dofs = reference_element_data.
NumDofs2D;
186 if (num_internal_dofs == 0)
187 return Eigen::MatrixXd(0, 0);
189 const Eigen::MatrixXd face_dofs_coordinates = dof_coordinates.block(0, starting_index, 3, num_internal_dofs);
191 return face_dofs_coordinates;
200 const Eigen::VectorXd &pointsCurvilinearCoordinates)
const
202 Eigen::MatrixXd points = Eigen::MatrixXd(3, pointsCurvilinearCoordinates.size());
203 points.row(0) = pointsCurvilinearCoordinates;
Definition MapParallelogram.hpp:20
static Eigen::MatrixXd FInv(const MapParallelogramData &mapData, const Eigen::MatrixXd &x)
Definition MapParallelogram.hpp:70
Definition MapQuadrilateral.hpp:20
Eigen::MatrixXd FInv(const Eigen::MatrixXd &vertices, const Eigen::MatrixXd &points) const
Definition MapQuadrilateral.cpp:51
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_Quadrilateral_PCC_2D_LocalSpace.hpp:28
Eigen::MatrixXd EdgeDOFsCoordinates(const Polydim::FEM::PCC::FEM_Quadrilateral_PCC_2D_ReferenceElement_Data &reference_element_data, const Polydim::FEM::PCC::FEM_Quadrilateral_PCC_2D_LocalSpace_Data &local_space, const unsigned int edge_local_index) const
Definition FEM_Quadrilateral_PCC_2D_LocalSpace.hpp:161
Eigen::MatrixXd ComputeBasisFunctionsValuesOnEdge(const Polydim::FEM::PCC::FEM_Quadrilateral_PCC_2D_ReferenceElement_Data &reference_element_data) const
Definition FEM_Quadrilateral_PCC_2D_LocalSpace.hpp:194
Eigen::MatrixXd ComputeBasisFunctionsLaplacianValues(const Polydim::FEM::PCC::FEM_Quadrilateral_PCC_2D_ReferenceElement_Data &reference_element_data, const Polydim::FEM::PCC::FEM_Quadrilateral_PCC_2D_LocalSpace_Data &local_space) const
Definition FEM_Quadrilateral_PCC_2D_LocalSpace.hpp:61
Polydim::FEM::PCC::FEM_Quadrilateral_PCC_2D_LocalSpace_Data CreateLocalSpace(const Polydim::FEM::PCC::FEM_Quadrilateral_PCC_2D_ReferenceElement_Data &reference_element_data, const Polydim::FEM::PCC::FEM_PCC_2D_Polygon_Geometry &polygon) const
Definition FEM_Quadrilateral_PCC_2D_LocalSpace.cpp:25
Eigen::MatrixXd ComputeBasisFunctionsValues(const Polydim::FEM::PCC::FEM_Quadrilateral_PCC_2D_ReferenceElement_Data &reference_element_data, const Polydim::FEM::PCC::FEM_Quadrilateral_PCC_2D_LocalSpace_Data &local_space) const
Definition FEM_Quadrilateral_PCC_2D_LocalSpace.hpp:55
Eigen::MatrixXd ComputeBasisFunctionsLaplacianValues(const Polydim::FEM::PCC::FEM_Quadrilateral_PCC_2D_ReferenceElement_Data &reference_element_data, const Polydim::FEM::PCC::FEM_Quadrilateral_PCC_2D_LocalSpace_Data &local_space, const Eigen::MatrixXd &points) const
Definition FEM_Quadrilateral_PCC_2D_LocalSpace.hpp:105
std::vector< Eigen::MatrixXd > ComputeBasisFunctionsDerivativeValues(const Polydim::FEM::PCC::FEM_Quadrilateral_PCC_2D_ReferenceElement_Data &reference_element_data, const Polydim::FEM::PCC::FEM_Quadrilateral_PCC_2D_LocalSpace_Data &local_space) const
Definition FEM_Quadrilateral_PCC_2D_LocalSpace.hpp:69
std::vector< Eigen::MatrixXd > ComputeBasisFunctionsDerivativeValues(const Polydim::FEM::PCC::FEM_Quadrilateral_PCC_2D_ReferenceElement_Data &reference_element_data, const Polydim::FEM::PCC::FEM_Quadrilateral_PCC_2D_LocalSpace_Data &local_space, const Eigen::MatrixXd &points) const
Definition FEM_Quadrilateral_PCC_2D_LocalSpace.hpp:132
Eigen::MatrixXd ComputeBasisFunctionsValuesOnEdge(const Polydim::FEM::PCC::FEM_Quadrilateral_PCC_2D_ReferenceElement_Data &reference_element_data, const Eigen::VectorXd &pointsCurvilinearCoordinates) const
Definition FEM_Quadrilateral_PCC_2D_LocalSpace.hpp:199
Eigen::MatrixXd ComputeBasisFunctionsValues(const Polydim::FEM::PCC::FEM_Quadrilateral_PCC_2D_ReferenceElement_Data &reference_element_data, const Polydim::FEM::PCC::FEM_Quadrilateral_PCC_2D_LocalSpace_Data &local_space, const Eigen::MatrixXd &points) const
Definition FEM_Quadrilateral_PCC_2D_LocalSpace.hpp:78
Eigen::MatrixXd InternalDOFsCoordinates(const Polydim::FEM::PCC::FEM_Quadrilateral_PCC_2D_ReferenceElement_Data &reference_element_data, const Polydim::FEM::PCC::FEM_Quadrilateral_PCC_2D_LocalSpace_Data &local_space) const
Definition FEM_Quadrilateral_PCC_2D_LocalSpace.hpp:178
Definition FEM_MCC_2D_LocalSpace.cpp:17
Definition QuadratureData.hpp:22
Eigen::MatrixXd Points
Definition QuadratureData.hpp:23
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:66
std::vector< unsigned int > DofsMeshOrder
Definition FEM_PCC_2D_LocalSpace_Data.hpp:73
std::array< unsigned int, 5 > Dof1DsIndex
Definition FEM_PCC_2D_LocalSpace_Data.hpp:75
Eigen::MatrixXd Vertices
Definition FEM_PCC_2D_LocalSpace_Data.hpp:67
Gedim::MapParallelogram::MapParallelogramData MapData
Definition FEM_PCC_2D_LocalSpace_Data.hpp:68
std::array< unsigned int, 2 > Dof2DsIndex
Definition FEM_PCC_2D_LocalSpace_Data.hpp:76
Eigen::MatrixXd Dofs
Definition FEM_PCC_2D_LocalSpace_Data.hpp:72
Polydim::FEM::PCC::QuadrilateralType quadrilateral_type
Definition FEM_PCC_2D_LocalSpace_Data.hpp:79
Definition FEM_Quadrilateral_PCC_2D_ReferenceElement.hpp:28
Eigen::MatrixXd ReferenceBasisFunctionValues
Definition FEM_Quadrilateral_PCC_2D_ReferenceElement.hpp:44
std::array< Eigen::MatrixXd, 4 > ReferenceBasisFunctionSecondDerivativeValues
Definition FEM_Quadrilateral_PCC_2D_ReferenceElement.hpp:46
Gedim::Quadrature::QuadratureData ReferenceSquareQuadrature
Definition FEM_Quadrilateral_PCC_2D_ReferenceElement.hpp:42
std::vector< Eigen::MatrixXd > ReferenceBasisFunctionDerivativeValues
Definition FEM_Quadrilateral_PCC_2D_ReferenceElement.hpp:45
unsigned int NumDofs2D
Definition FEM_Quadrilateral_PCC_2D_ReferenceElement.hpp:33
unsigned int NumDofs1D
Definition FEM_Quadrilateral_PCC_2D_ReferenceElement.hpp:32
Polydim::FEM::PCC::FEM_PCC_1D_ReferenceElement_Data BoundaryReferenceElement_Data
Definition FEM_Quadrilateral_PCC_2D_ReferenceElement.hpp:48
Definition FEM_Quadrilateral_PCC_2D_ReferenceElement.hpp:52
std::vector< Eigen::MatrixXd > EvaluateBasisFunctionDerivatives(const Eigen::MatrixXd &points, const Polydim::FEM::PCC::FEM_Quadrilateral_PCC_2D_ReferenceElement_Data &reference_element_data) const
Definition FEM_Quadrilateral_PCC_2D_ReferenceElement.hpp:206
std::array< Eigen::MatrixXd, 4 > EvaluateBasisFunctionSecondDerivatives(const Eigen::MatrixXd &, const Polydim::FEM::PCC::FEM_Quadrilateral_PCC_2D_ReferenceElement_Data &) const
Definition FEM_Quadrilateral_PCC_2D_ReferenceElement.hpp:239
Eigen::MatrixXd EvaluateBasisFunctions(const Eigen::MatrixXd &points, const Polydim::FEM::PCC::FEM_Quadrilateral_PCC_2D_ReferenceElement_Data &reference_element_data) const
Definition FEM_Quadrilateral_PCC_2D_ReferenceElement.hpp:179