51 #define MESH_CRITICAL_VOLUME 1.0E-12
58 #define FOR_NODES(_mesh_, i) \
59 for( NodeFullIter i( (_mesh_)->node_vector.begin() ); \
60 i != (_mesh_)->node_vector.end(); \
66 #define NODE_FULL_ITER(_mesh_,i) \
67 (_mesh_)->node_vector.full_iter(i)
72 #define NODE_FULL_ITER_NULL(_mesh_) \
73 NodeFullIter((_mesh_)->node_vector)
78 #define ELEM_FULL_ITER(_mesh_,i) \
79 (_mesh_)->element.full_iter(i)
82 #define FOR_NODE_ELEMENTS(i,j) for((j)=0;(j)<(i)->n_elements();(j)++)
83 #define FOR_NODE_SIDES(i,j) for((j)=0;(j)<(i)->n_sides;(j)++)
102 <<
"Duplicate boundary elements! \n"
103 <<
"Element id: " << EI_ElemLast::val <<
" on region name: " << EI_RegLast::val <<
"\n"
104 <<
"Element id: " << EI_ElemNew::val <<
" on region name: " << EI_RegNew::val <<
"\n");
370 std::shared_ptr<Partitioning>
part_;
410 #define FOR_ELEMENTS(_mesh_,__i) \
411 for( ElementFullIter __i( (_mesh_)->element.begin() ); \
412 __i != (_mesh_)->element.end(); \
418 #define ELEMENT_FULL_ITER(_mesh_,i) \
419 (_mesh_)->element.full_iter(i)
424 #define ELEMENT_FULL_ITER_NULL(_mesh_) \
425 ElementFullIter((_mesh_)->element)
428 #define FOR_BOUNDARIES(_mesh_,i) \
429 for( std::vector<Boundary>::iterator i= (_mesh_)->boundary_.begin(); \
430 i != (_mesh_)->boundary_.end(); \
436 #define BOUNDARY_FULL_ITER(_mesh_,i) \
437 (_mesh_)->boundary.full_iter(i)
442 #define BOUNDARY_NULL(_mesh_) \
443 BoundaryFullIter((_mesh_)->boundary)
449 #define FOR_EDGES(_mesh_,__i) \
450 for( vector<Edge>::iterator __i = (_mesh_)->edges.begin(); \
451 __i !=(_mesh_)->edges.end(); \
454 #define FOR_SIDES(_mesh_, it) \
455 FOR_ELEMENTS((_mesh_), ele) \
456 for(SideIter it = ele->side(0); it->el_idx() < ele->n_sides(); ++it)
458 #define FOR_SIDE_NODES(i,j) for((j)=0;(j)<(i)->n_nodes;(j)++)
461 #define FOR_NEIGHBOURS(_mesh_, it) \
462 for( std::vector<Neighbour>::iterator it = (_mesh_)->vb_neighbours_.begin(); \
463 (it)!= (_mesh_)->vb_neighbours_.end(); ++it)
465 #define FOR_NEIGH_ELEMENTS(i,j) for((j)=0;(j)<(i)->n_elements;(j)++)
466 #define FOR_NEIGH_SIDES(i,j) for((j)=0;(j)<(i)->n_sides;(j)++)
Distribution * el_ds
Parallel distribution of elements.
Class for the mesh partitioning. This should provide:
Mesh(const std::string &input_str="{mesh_file=\"\"}", MPI_Comm com=MPI_COMM_WORLD)
vector< vector< unsigned int > > node_elements
void make_intersec_elements()
static Input::Type::Record input_type
static const unsigned int undef_idx
void create_node_element_lists()
static const Input::Type::Record & get_input_type()
unsigned int max_edge_sides_[3]
Maximal number of sides per one edge in the actual mesh (set in make_neighbours_and_edges()).
int * get_el_4_loc() const
vector< vector< vector< unsigned int > > > side_nodes
const RegionDB & region_db() const
ElementAccessor< 3 > element_accessor(unsigned int idx, bool boundary=false)
vector< Boundary > boundary_
Partitioning * get_part()
int * el_4_loc
Index set assigning to local element index its global index.
int * row_4_el
Index set assigning to global element index the local index used in parallel vectors.
unsigned int size() const
Returns size of the container. This is independent of the allocated space.
unsigned int n_vb_neighbours() const
void read_regions_from_input(Input::Array region_list)
unsigned int n_elements() const
bool same_sides(const SideIter &si, vector< unsigned int > &side_nodes)
MPI_Comm get_comm() const
vector< int > const & elements_id_maps(bool boundary_domain) const
unsigned int n_boundaries() const
Class for O(log N) lookup for intersections with a set of bounding boxes.
ElementVector bc_elements
std::shared_ptr< BIHTree > bih_tree_
Distribution * get_el_ds() const
vector< int > boundary_elements_id_
void count_element_types()
const BIHTree & get_bih_tree()
void read_gmsh_from_stream(istream &in)
vector< vector< unsigned int > > master_elements
vector< Neighbour > vb_neighbours_
unsigned int n_all_input_elements_
Number of elements read from input.
unsigned int max_edge_sides(unsigned int dim) const
int * get_row_4_el() const
std::vector< Edge > edges
Vector of MH edges, this should not be part of the geometrical mesh.
vector< Intersection > intersections
void intersect_element_lists(vector< unsigned int > const &nodes_list, vector< unsigned int > &intersection_element_list)
void modify_element_ids(const RegionDB::MapElementIDToRegionID &map)
void make_edge_permutations()
unsigned int n_nodes() const
unsigned int n_edges() const
void element_to_neigh_vb()
TYPEDEF_ERR_INFO(EI_ElemLast, int)
void reinit(Input::Record in_record)
bool find_lower_dim_element(ElementVector &elements, vector< unsigned int > &element_list, unsigned int dim, unsigned int &element_idx)
DECLARE_EXCEPTION(ExcDuplicateBoundary,<< "Duplicate boundary elements! \n"<< "Element id: "<< EI_ElemLast::val<< " on region name: "<< EI_RegLast::val<< "\n"<< "Element id: "<< EI_ElemNew::val<< " on region name: "<< EI_RegNew::val<< "\n")
vector< int > bulk_elements_id_
std::shared_ptr< Partitioning > part_
void make_neighbours_and_edges()
NodeVector node_vector
Vector of nodes of the mesh.
ElementVector element
Vector of elements of the mesh.