9#include <geogram/mesh/mesh.h>
27 int n_cells()
const override {
return 0; }
37 virtual std::pair<RowVectorNd, int>
face_node(
const Navigation::Index &index,
const int n_new_nodes,
const int i,
const int j)
const = 0;
45 void compute_face_jacobian(
const int el_id,
const Eigen::MatrixXd &reference_map, Eigen::MatrixXd &jacobian)
const;
58 void elements_boxes(std::vector<std::array<Eigen::Vector3d, 2>> &boxes)
const override;
64 void get_edges(Eigen::MatrixXd &p0, Eigen::MatrixXd &p1)
const override;
65 void get_edges(Eigen::MatrixXd &p0, Eigen::MatrixXd &p1,
const std::vector<bool> &valid_elements)
const override;
Mesh2D & operator=(const Mesh2D &)=default
bool is_boundary_face(const int face_global_id) const override
is face boundary
void elements_boxes(std::vector< std::array< Eigen::Vector3d, 2 > > &boxes) const override
constructs a box around every element (3d cell, 2d face)
virtual Navigation::Index switch_edge(Navigation::Index idx) const =0
virtual std::pair< RowVectorNd, int > edge_node(const Navigation::Index &index, const int n_new_nodes, const int i) const =0
virtual std::pair< RowVectorNd, int > face_node(const Navigation::Index &index, const int n_new_nodes, const int i, const int j) const =0
RowVectorNd cell_barycenter(const int index) const override
cell barycenter
Mesh2D(const Mesh2D &)=default
RowVectorNd face_barycenter(const int index) const override
face barycenter
Navigation::Index next_around_vertex(Navigation::Index idx) const
Navigation::Index next_around_face(Navigation::Index idx) const
void barycentric_coords(const RowVectorNd &p, const int el_id, Eigen::MatrixXd &coord) const override
constructs barycentric coodiantes for a point p.
void get_edges(Eigen::MatrixXd &p0, Eigen::MatrixXd &p1) const override
Get all the edges.
bool is_volume() const override
checks if mesh is volume
virtual Navigation::Index switch_vertex(Navigation::Index idx) const =0
Mesh2D(Mesh2D &&)=default
int n_cells() const override
number of cells
Mesh2D & operator=(Mesh2D &&)=default
int n_cell_vertices(const int c_id) const override
number of vertices of a cell
virtual ~Mesh2D()=default
virtual Navigation::Index get_index_from_face(int f, int lv=0) const =0
void compute_element_barycenters(Eigen::MatrixXd &barycenters) const override
utility for 2d/3d.
void compute_face_jacobian(const int el_id, const Eigen::MatrixXd &reference_map, Eigen::MatrixXd &jacobian) const
virtual Navigation::Index switch_face(Navigation::Index idx) const =0
Abstract mesh class to capture 2d/3d conforming and non-conforming meshes.
void face_barycenters(Eigen::MatrixXd &barycenters) const
all face barycenters
virtual int n_face_vertices(const int f_id) const =0
number of vertices of a face
Eigen::Matrix< double, 1, Eigen::Dynamic, Eigen::RowMajor, 1, 3 > RowVectorNd