PolyFEM
Loading...
Searching...
No Matches
LagrangeBasis3d.hpp
Go to the documentation of this file.
1#pragma once
2
10
11#include <Eigen/Dense>
12#include <vector>
13
14namespace polyfem
15{
16 namespace basis
17 {
19 {
20 public:
42 static int build_bases(
43 const mesh::Mesh3D &mesh,
44 const std::string &assembler,
45 const int quadrature_order,
46 const int mass_quadrature_order,
47 const int discr_order,
48 const bool serendipity,
49 const bool has_polys,
50 const bool is_geom_bases,
51 const bool use_corner_quadrature,
52 std::vector<ElementBases> &bases,
53 std::vector<mesh::LocalBoundary> &local_boundary,
54 std::map<int, InterfaceData> &poly_face_to_data,
55 std::shared_ptr<mesh::MeshNodes> &mesh_nodes);
56
78 static int build_bases(
79 const mesh::Mesh3D &mesh,
80 const std::string &assembler,
81 const int quadrature_order,
82 const int mass_quadrature_order,
83 const Eigen::VectorXi &discr_order,
84 const bool serendipity,
85 const bool has_polys,
86 const bool is_geom_bases,
87 const bool use_corner_quadrature,
88 std::vector<ElementBases> &bases,
89 std::vector<mesh::LocalBoundary> &local_boundary,
90 std::map<int, InterfaceData> &poly_face_to_data,
91 std::shared_ptr<mesh::MeshNodes> &mesh_nodes);
92
93 // return the local faces nodes for a tet or a hex of order p, index points to a face
94 static Eigen::VectorXi tet_face_local_nodes(const int p, const mesh::Mesh3D &mesh, mesh::Navigation3D::Index index);
95 static Eigen::VectorXi hex_face_local_nodes(const bool serendipity, const int q, const mesh::Mesh3D &mesh, mesh::Navigation3D::Index index);
96
97 private:
99
100 static Eigen::RowVector3d quadr_hex_local_node_coordinates(int local_index);
101 };
102 } // namespace basis
103} // namespace polyfem
static Eigen::VectorXi hex_face_local_nodes(const bool serendipity, const int q, const mesh::Mesh3D &mesh, mesh::Navigation3D::Index index)
static int build_bases(const mesh::Mesh3D &mesh, const std::string &assembler, const int quadrature_order, const int mass_quadrature_order, const Eigen::VectorXi &discr_order, const bool serendipity, const bool has_polys, const bool is_geom_bases, const bool use_corner_quadrature, std::vector< ElementBases > &bases, std::vector< mesh::LocalBoundary > &local_boundary, std::map< int, InterfaceData > &poly_face_to_data, std::shared_ptr< mesh::MeshNodes > &mesh_nodes)
Builds FE basis functions over the entire mesh (P1, P2 over tets, Q1, Q2 over hex).
static Eigen::MatrixXd linear_hex_face_local_nodes_coordinates(const mesh::Mesh3D &mesh, mesh::Navigation3D::Index index)
static int build_bases(const mesh::Mesh3D &mesh, const std::string &assembler, const int quadrature_order, const int mass_quadrature_order, const int discr_order, const bool serendipity, const bool has_polys, const bool is_geom_bases, const bool use_corner_quadrature, std::vector< ElementBases > &bases, std::vector< mesh::LocalBoundary > &local_boundary, std::map< int, InterfaceData > &poly_face_to_data, std::shared_ptr< mesh::MeshNodes > &mesh_nodes)
Builds FE basis functions over the entire mesh (P1, P2 over tets, Q1, Q2 over hes).
static Eigen::VectorXi tet_face_local_nodes(const int p, const mesh::Mesh3D &mesh, mesh::Navigation3D::Index index)
static Eigen::RowVector3d quadr_hex_local_node_coordinates(int local_index)