Program Listing for File mesh.h¶
↰ Return to documentation for file (src/rlenvs/utils/geometry/mesh/mesh.h)
#ifndef MESH_H
#define MESH_H
#include "rlenvs/rlenvs_types_v2.h"
#include "rlenvs/rlenvs_consts.h"
#include "rlenvs/utils/filtered_iterator.h"
#include "rlenvs/utils/geometry/mesh/mesh_topology.h"
#include "rlenvs/utils/geometry/mesh/element_type.h"
#include "boost/noncopyable.hpp"
namespace rlenvscpp{
namespace utils{
namespace geom{
// forward declarations
template<int dim, typename T> class GeomPoint;
template<int spacedim>
class Mesh: private boost::noncopyable
{
public:
typedef typename MeshTopology<spacedim>::edge_ptr_t edge_ptr_t;
typedef typename MeshTopology<spacedim>::face_ptr_t face_ptr_t;
typedef typename MeshTopology<spacedim>::cedge_ptr_t cedge_ptr_t;
typedef typename MeshTopology<spacedim>::cface_ptr_t cface_ptr_t;
typedef typename std::vector<Node<spacedim>* >::iterator node_iterator_impl;
typedef typename std::vector<Node<spacedim>* >::const_iterator cnode_iterator_impl;
typedef typename std::vector<Element<spacedim>* >::iterator element_iterator_impl;
typedef typename std::vector<Element<spacedim>* >::const_iterator celement_iterator_impl;
typedef typename std::vector<edge_ptr_t >::iterator edge_iterator_impl;
typedef typename std::vector<edge_ptr_t >::const_iterator cedge_iterator_impl;
typedef typename std::vector<face_ptr_t>::iterator face_iterator_impl;
typedef typename std::vector<face_ptr_t>::const_iterator cface_iterator_impl;
const static int dimension = spacedim;
Mesh();
virtual ~Mesh();
void reserve_n_nodes(uint_t n){topology_.reserve_n_nodes(n);}
void reserve_n_elements(uint_t n){topology_.reserve_n_elements(n);}
void reserve_n_edges(uint_t n){topology_.reserve_n_edges(n);}
void reserve_n_faces(uint_t n){topology_.reserve_n_faces(n);}
Node<spacedim>* create_vertex(const GeomPoint<spacedim, real_t>& point,
uint_t global_id=rlenvscpp::consts::INVALID_ID,
uint_t pid = 0);
Node<spacedim>* create_node(const GeomPoint<spacedim, real_t>& point,
uint_t global_id=rlenvscpp::consts::INVALID_ID,
uint_t pid = 0);
Element<spacedim>* create_element(ElementType::sub_type t,
uint_t global_id=rlenvscpp::consts::INVALID_ID,
uint_t pid = 0);
edge_ptr_t create_edge(ElementType::sub_type t,
uint_t global_id=rlenvscpp::consts::INVALID_ID,
uint_t pid = 0);
face_ptr_t create_face(ElementType::sub_type t,
uint_t global_id=rlenvscpp::consts::INVALID_ID,
uint_t pid=0);
void set_n_boundaries(uint_t nb){n_boundaries_ = nb;}
Node<spacedim>* node(uint_t n){return topology_.node(n);}
const Node<spacedim>* node(uint_t n)const{return topology_.node(n);}
Element<spacedim>* element(uint_t e){return topology_.element(e);}
const Element<spacedim>* element(uint_t e)const{return topology_.element(e);}
uint_t n_vertices()const;
uint_t n_nodes()const{return topology_.n_nodes();}
uint_t n_elements()const{return topology_.n_elements();}
uint_t n_edges()const;
uint_t n_faces()const;
uint_t n_active_faces()const;
MeshTopology<spacedim>* topology(){return &topology_;}
const MeshTopology<spacedim>* topology()const{return &topology_;}
void faces(const MeshConnectivity& faces_idx,std::vector<cface_ptr_t>& faces_ptr)const
{topology_.faces(faces_idx,faces_ptr);}
uint_t n_boundaries()const{return n_boundaries_;}
node_iterator_impl nodes_begin(){return topology_.nodes_begin();}
node_iterator_impl nodes_end(){return topology_.nodes_end();}
cnode_iterator_impl nodes_begin()const{return topology_.nodes_begin();}
cnode_iterator_impl nodes_end()const{return topology_.nodes_end();}
element_iterator_impl elements_begin(){return topology_.elements_begin();}
element_iterator_impl elements_end(){return topology_.elements_end();}
celement_iterator_impl elements_begin()const{return topology_.elements_begin();}
celement_iterator_impl elements_end()const{return topology_.elements_end();}
edge_iterator_impl edges_begin(){return topology_.edges_begin();}
edge_iterator_impl edges_end(){return topology_.edges_end();}
cedge_iterator_impl edges_begin()const{return topology_.edges_begin();}
cedge_iterator_impl edges_end()const{return topology_.edges_end();}
face_iterator_impl faces_begin(){return topology_.faces_begin();}
face_iterator_impl faces_end(){return topology_.faces_end();}
cface_iterator_impl faces_begin()const{return topology_.faces_begin();}
cface_iterator_impl faces_end()const{return topology_.faces_end();}
private:
uint_t n_boundaries_;
MeshTopology<spacedim> topology_;
};
template<int spacedim>
inline
uint_t
Mesh<spacedim>::n_edges()const{
return topology_.n_edges();
}
template<int spacedim>
inline
uint_t
Mesh<spacedim>::n_faces()const{
return topology_.n_faces();
}
template<>
inline
uint_t
Mesh<1>::n_edges()const{
return n_vertices();
}
template<>
inline
uint_t
Mesh<1>::n_faces()const{
return n_edges();
}
}
}
}
#endif // MESH_H