Program Listing for File element.h¶
↰ Return to documentation for file (src/bitrl/utils/geometry/mesh/element.h)
#ifndef ELEMENT_H
#define ELEMENT_H
#include "bitrl/bitrl_types.h"
#include "bitrl/bitrl_consts.h"
#include "bitrl/utils/geometry/mesh/mesh_entity.h"
#include "bitrl/utils/geometry/mesh/edge_face_selector.h"
#include "bitrl/utils/geometry/mesh/element_traits.h"
#include "bitrl/utils/geometry/geom_point.h"
#include <any>
#include <functional>
#include <map>
#include <string>
namespace bitrl{
namespace utils{
namespace geom{
template<int dim> class Node;
template<int dim>
class Element: public MeshEntity
{
public:
typedef Element<dim>* neighbor_ptr_t;
typedef Element<dim>& neighbor_ref_t;
typedef const Element<dim>& cneighbor_ref_t;
typedef Node<dim>* node_ptr_t;
typedef typename element_traits<Element<dim>>::edge_ptr_t edge_ptr_t;
typedef typename element_traits<Element<dim>>::cedge_ptr_t cedge_ptr_t;
typedef typename element_traits<Element<dim>>::edge_ref_t edge_ref_t;
typedef typename element_traits<Element<dim>>::cedge_ref_t cedge_ref_t;
typedef typename element_traits<Element<dim>>::face_ptr_t face_ptr_t;
typedef typename element_traits<Element<dim>>::cface_ptr_t cface_ptr_t;
typedef typename element_traits<Element<dim>>::face_ref_t face_ref_t;
typedef typename element_traits<Element<dim>>::cface_ref_t cface_ref_t;
virtual ~Element();
virtual uint_t n_vertices()const=0;
virtual uint_t n_nodes()const=0;
virtual void set_node(uint_t i, node_ptr_t node);
virtual void append_node(node_ptr_t node);
virtual void resize_nodes();
virtual node_ptr_t get_node(uint_t n);
virtual uint_t n_edges()const=0;
virtual uint_t n_faces()const=0;
virtual void resize_faces()=0;
virtual cface_ref_t get_face(uint_t f)const=0;
virtual face_ref_t get_face(uint_t f)=0;
virtual void set_face(uint_t f, face_ptr_t face)=0;
virtual void set_neighbor(uint_t n, neighbor_ptr_t neigh);
virtual uint_t n_neighbors()const=0;
virtual void resize_neighbors();
virtual cneighbor_ref_t get_neighbor(uint_t n)const;
virtual neighbor_ptr_t neighbor_ptr(uint_t n);
virtual const neighbor_ptr_t neighbor_ptr(uint_t n)const;
virtual void face_vertices(uint_t f, std::vector<uint_t>& ids)const=0;
virtual real_t volume()const=0;
virtual GeomPoint<dim> centroid()const;
virtual uint_t which_face_am_i(cface_ref_t face)const = 0;
virtual const DynVec<real_t> face_normal_vector(uint_t f)const=0;
uint_t which_neighbor_am_i(const Element<dim>& element)const;
std::vector<node_ptr_t> get_vertices()const;
protected:
Element();
Element(uint_t id, uint_t pid);
Element(uint_t id, uint_t pid, const std::any& data);
std::vector<neighbor_ptr_t> neginbors_;
std::vector<node_ptr_t> nodes_;
};
}
}
}
#endif // ELEMENT_H