PolyDiM
C++ library for POLYtopal DIscretization Methods
Loading...
Searching...
No Matches
ZFEM_PCC_2D_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 __ZFEM_PCC_2D_LocalSpace_HPP
13#define __ZFEM_PCC_2D_LocalSpace_HPP
14
17#include "Monomials_2D.hpp"
19
20namespace Polydim
21{
22namespace ZFEM
23{
24namespace PCC
25{
26
29{
30 private:
34
35 public:
36 void PolygonFineNodes(const unsigned int num_vertices,
37 const unsigned int &NumBasisFunctions,
38 const unsigned int &NumTotalBasisFunctions,
39 const unsigned int &NumVirtualBasisFunctions,
40 const std::vector<Polydim::FEM::PCC::FEM_Triangle_PCC_2D_LocalSpace_Data> &fem_local_space_data,
41 const Eigen::MatrixXi &local_to_total,
42 Eigen::MatrixXd &CoarseNodes,
43 Eigen::MatrixXd &VirtualNodes,
44 Eigen::MatrixXd &FinerNodes) const;
45
48
50 const Eigen::Vector3d &internal_points,
51 const double &diameter,
53
55 {
56 return localSpace.ZFEM_basis_functions_values;
57 }
58
59 inline std::vector<Eigen::MatrixXd> ComputeBasisFunctionsDerivativeValues(const Polydim::ZFEM::PCC::ZFEM_PCC_2D_LocalSpace_Data &localSpace) const
60 {
62 }
63
64 inline Eigen::MatrixXd ComputeBasisFunctionsValues(const Polydim::ZFEM::PCC::ZFEM_PCC_2D_ReferenceElement_Data &reference_element_data,
66 const std::vector<Eigen::MatrixXd> &points) const
67 {
68 const Eigen::MatrixXd total_fem_basis_functions_values =
69 ZFEM_utilities.ComputeFEMBasisFunctionsValues(reference_element_data,
70 localSpace.NumBasisFunctions,
71 localSpace.NumVirtualBasisFunctions,
72 localSpace.fem_local_space_data,
73 localSpace.local_to_total,
74 points);
75
76 return ZFEM_utilities.ComputeBasisFunctionsValues(localSpace.NumBasisFunctions,
77 localSpace.NumVirtualBasisFunctions,
78 total_fem_basis_functions_values,
79 localSpace.VirtualWeights);
80 }
81
82 inline std::vector<Eigen::MatrixXd> ComputeBasisFunctionsDerivativeValues(
85 const std::vector<Eigen::MatrixXd> &points) const
86 {
87
88 const std::vector<Eigen::MatrixXd> total_fem_basis_functions_derivative_values =
90 reference_element_data,
91 localSpace.NumBasisFunctions,
92 localSpace.NumVirtualBasisFunctions,
93 localSpace.fem_local_space_data,
94 localSpace.local_to_total,
95 points);
96
97 return ZFEM_utilities.ComputeBasisFunctionsDerivativeValues(localSpace.Dimension,
98 localSpace.NumBasisFunctions,
99 localSpace.NumVirtualBasisFunctions,
100 total_fem_basis_functions_derivative_values,
101 localSpace.VirtualWeights);
102 }
103
104 inline Eigen::MatrixXd ComputeValuesOnEdge(const Polydim::ZFEM::PCC::ZFEM_PCC_2D_ReferenceElement_Data &reference_element_data,
106 const Eigen::VectorXd &pointsCurvilinearCoordinates) const
107 {
108
109 return ZFEM_utilities.ComputeValuesOnEdge(localSpace.ReferenceEdgeDOFsInternalPoints,
110 reference_element_data.Order,
111 localSpace.EdgeBasisCoefficients,
112 pointsCurvilinearCoordinates);
113 }
114};
115} // namespace PCC
116} // namespace ZFEM
117} // namespace Polydim
118
119#endif
Definition FEM_Triangle_PCC_2D_LocalSpace.hpp:27
Definition Monomials_2D.hpp:22
Abstract interface for a 2D primal conforming ZFEM (Zipped FEM) local space.
Definition I_ZFEM_PCC_2D_LocalSpace.hpp:29
This local space implements .
Definition ZFEM_PCC_2D_LocalSpace.hpp:29
Eigen::MatrixXd ComputeBasisFunctionsValues(const Polydim::ZFEM::PCC::ZFEM_PCC_2D_ReferenceElement_Data &reference_element_data, const Polydim::ZFEM::PCC::ZFEM_PCC_2D_LocalSpace_Data &localSpace, const std::vector< Eigen::MatrixXd > &points) const
Definition ZFEM_PCC_2D_LocalSpace.hpp:64
Eigen::MatrixXd ComputeBasisFunctionsValues(const Polydim::ZFEM::PCC::ZFEM_PCC_2D_LocalSpace_Data &localSpace) const
Evaluate the basis functions at the cell's internal quadrature points.
Definition ZFEM_PCC_2D_LocalSpace.hpp:54
Eigen::MatrixXd ComputeValuesOnEdge(const Polydim::ZFEM::PCC::ZFEM_PCC_2D_ReferenceElement_Data &reference_element_data, const Polydim::ZFEM::PCC::ZFEM_PCC_2D_LocalSpace_Data &localSpace, const Eigen::VectorXd &pointsCurvilinearCoordinates) const
Evaluate the basis functions on a given edge.
Definition ZFEM_PCC_2D_LocalSpace.hpp:104
void ComputePolynomialsDofs(const Polydim::ZFEM::PCC::ZFEM_PCC_2D_ReferenceElement_Data &reference_element_data, const Eigen::Vector3d &internal_points, const double &diameter, Polydim::ZFEM::PCC::ZFEM_PCC_2D_LocalSpace_Data &localSpace) const
Definition ZFEM_PCC_2D_LocalSpace.cpp:135
std::vector< Eigen::MatrixXd > ComputeBasisFunctionsDerivativeValues(const Polydim::ZFEM::PCC::ZFEM_PCC_2D_LocalSpace_Data &localSpace) const
Evaluate the basis-function derivatives at the cell's internal quadrature points.
Definition ZFEM_PCC_2D_LocalSpace.hpp:59
void PolygonFineNodes(const unsigned int num_vertices, const unsigned int &NumBasisFunctions, const unsigned int &NumTotalBasisFunctions, const unsigned int &NumVirtualBasisFunctions, const std::vector< Polydim::FEM::PCC::FEM_Triangle_PCC_2D_LocalSpace_Data > &fem_local_space_data, const Eigen::MatrixXi &local_to_total, Eigen::MatrixXd &CoarseNodes, Eigen::MatrixXd &VirtualNodes, Eigen::MatrixXd &FinerNodes) const
Definition ZFEM_PCC_2D_LocalSpace.cpp:146
std::vector< Eigen::MatrixXd > ComputeBasisFunctionsDerivativeValues(const Polydim::ZFEM::PCC::ZFEM_PCC_2D_ReferenceElement_Data &reference_element_data, const Polydim::ZFEM::PCC::ZFEM_PCC_2D_LocalSpace_Data &localSpace, const std::vector< Eigen::MatrixXd > &points) const
Definition ZFEM_PCC_2D_LocalSpace.hpp:82
ZFEM_PCC_2D_LocalSpace_Data CreateLocalSpace(const Polydim::ZFEM::PCC::ZFEM_PCC_2D_ReferenceElement_Data &reference_element_data, const Polydim::ZFEM::PCC::ZFEM_PCC_2D_Polygon_Geometry &polygon) const
Build the ZFEM local space on a given polygon.
Definition ZFEM_PCC_2D_LocalSpace.cpp:26
Definition FEM_MCC_2D_LocalSpace.cpp:17
Definition ZFEM_PCC_2D_LocalSpace_Data.hpp:43
unsigned int NumBasisFunctions
Definition ZFEM_PCC_2D_LocalSpace_Data.hpp:67
unsigned int Dimension
Definition ZFEM_PCC_2D_LocalSpace_Data.hpp:44
Eigen::RowVectorXd ReferenceEdgeDOFsInternalPoints
Definition ZFEM_PCC_2D_LocalSpace_Data.hpp:76
Eigen::MatrixXd ZFEM_basis_functions_values
Definition ZFEM_PCC_2D_LocalSpace_Data.hpp:60
unsigned int NumVirtualBasisFunctions
Definition ZFEM_PCC_2D_LocalSpace_Data.hpp:69
Eigen::VectorXd EdgeBasisCoefficients
Definition ZFEM_PCC_2D_LocalSpace_Data.hpp:77
Eigen::MatrixXd VirtualWeights
Definition ZFEM_PCC_2D_LocalSpace_Data.hpp:80
std::vector< Eigen::MatrixXd > ZFEM_basis_functions_derivative_values
Definition ZFEM_PCC_2D_LocalSpace_Data.hpp:61
Eigen::MatrixXi local_to_total
Definition ZFEM_PCC_2D_LocalSpace_Data.hpp:49
std::vector< Polydim::FEM::PCC::FEM_Triangle_PCC_2D_LocalSpace_Data > fem_local_space_data
Definition ZFEM_PCC_2D_LocalSpace_Data.hpp:54
Definition ZFEM_PCC_2D_LocalSpace_Data.hpp:26
Reference-element data for the 2D primal conforming ZFEM (Zipped FEM) space.
Definition I_ZFEM_PCC_2D_ReferenceElement.hpp:36
unsigned int Order
Definition I_ZFEM_PCC_2D_ReferenceElement.hpp:38
Definition ZFEM_PCC_Utilities.hpp:29
Eigen::MatrixXd ComputeBasisFunctionsValues(const unsigned int &NumBasisFunctions, const unsigned int &NumVirtualBasisFunctions, const Eigen::MatrixXd &fem_basis_functions_values, const Eigen::MatrixXd &VirtualWeights) const
Definition ZFEM_PCC_Utilities.hpp:48
Eigen::MatrixXd ComputeValuesOnEdge(const Eigen::RowVectorXd &edgeInternalPoints, const unsigned int &order, const Eigen::VectorXd &edgeBasisCoefficients, const Eigen::VectorXd &pointsCurvilinearCoordinates) const
Definition ZFEM_PCC_Utilities.hpp:38
std::vector< Eigen::MatrixXd > ComputeFEMBasisFunctionsDerivativeValues(unsigned int dimension, const ZFEM_PCC_2D_ReferenceElement_Data &reference_element_data, const unsigned int &num_basis_functions, const unsigned int &num_virtual_basis_functions, const std::vector< Polydim::FEM::PCC::FEM_Triangle_PCC_2D_LocalSpace_Data > &fem_local_space_data, const Eigen::MatrixXi &local_to_global) const
Definition ZFEM_PCC_Utilities.hpp:128
Eigen::MatrixXd ComputeFEMBasisFunctionsValues(const ZFEM_PCC_2D_ReferenceElement_Data &reference_element_data, const unsigned int &num_basis_functions, const unsigned int &num_virtual_basis_functions, const std::vector< Polydim::FEM::PCC::FEM_Triangle_PCC_2D_LocalSpace_Data > &fem_local_space_data, const Eigen::MatrixXi &local_to_global) const
Definition ZFEM_PCC_Utilities.hpp:57
std::vector< Eigen::MatrixXd > ComputeBasisFunctionsDerivativeValues(const unsigned int &Dimension, const unsigned int &NumBasisFunctions, const unsigned int &NumVirtualBasisFunctions, const std::vector< Eigen::MatrixXd > &fem_basis_functions_derivative_values, const Eigen::MatrixXd &VirtualWeights) const
Definition ZFEM_PCC_Utilities.hpp:215