Go to the documentation of this file.
20 #ifndef LIBMESH_REPLICATED_MESH_H
21 #define LIBMESH_REPLICATED_MESH_H
24 #include "libmesh/unstructured_mesh.h"
25 #include "libmesh/boundary_info.h"
26 #include "libmesh/auto_ptr.h"
30 #include <unordered_map>
86 virtual std::unique_ptr<MeshBase>
clone ()
const override
87 {
return libmesh_make_unique<ReplicatedMesh>(*
this); }
97 virtual void clear()
override;
105 {
return cast_int<dof_id_type>(
_nodes.size()); }
108 {
return cast_int<dof_id_type>(
_nodes.size()); }
111 {
return cast_int<dof_id_type>(
_nodes.size()); }
117 {
return cast_int<dof_id_type>(
_elements.size()); }
120 {
return cast_int<dof_id_type>(
_elements.size()); }
125 {
return cast_int<dof_id_type>(
_elements.size()); }
127 #ifdef LIBMESH_ENABLE_UNIQUE_ID
216 bool clear_stitched_boundary_ids=
false,
218 bool use_binary_search=
true,
219 bool enforce_all_nodes_match_on_boundaries=
false);
227 bool clear_stitched_boundary_ids=
false,
229 bool use_binary_search=
true,
230 bool enforce_all_nodes_match_on_boundaries=
false);
256 std::unordered_map<dof_id_type, std::vector<std::vector<Point>>>
get_boundary_points()
const;
265 virtual const_element_iterator
elements_end()
const override;
341 virtual const_element_iterator
level_elements_end (
unsigned int level)
const override;
420 virtual element_iterator
424 virtual element_iterator
428 virtual const_element_iterator
432 virtual const_element_iterator
436 #ifdef LIBMESH_ENABLE_AMR
450 #endif // LIBMESH_ENABLE_AMR
456 virtual node_iterator
nodes_end ()
override;
457 virtual const_node_iterator
nodes_begin ()
const override;
458 virtual const_node_iterator
nodes_end ()
const override;
489 virtual node_iterator
492 virtual node_iterator
495 virtual const_node_iterator
498 virtual const_node_iterator
525 bool clear_stitched_boundary_ids,
527 bool use_binary_search,
528 bool enforce_all_nodes_match_on_boundaries,
529 bool skip_find_neighbors);
550 #endif // LIBMESH_REPLICATED_MESH_H
virtual element_iterator not_subactive_elements_begin() override
virtual element_iterator active_pid_elements_end(processor_id_type proc_id) override
virtual void update_parallel_id_counts() override
Updates parallel caches so that methods like n_elem() accurately reflect changes on other processors.
virtual SimpleRange< element_iterator > element_ptr_range() override
virtual element_iterator subactive_elements_end() override
const unsigned int invalid_uint
A number which is used quite often to represent an invalid or uninitialized value.
virtual dof_id_type max_node_id() const override
virtual SimpleRange< const_element_iterator > active_local_element_ptr_range() const override
virtual element_iterator flagged_elements_begin(unsigned char rflag) override
Iterate over all elements with a specified refinement flag.
std::vector< Node * > _nodes
The vertices (spatial coordinates) of the mesh.
virtual SimpleRange< const_node_iterator > local_node_ptr_range() const override
std::vector< Elem * > _elements
The elements in the mesh.
virtual element_iterator active_type_elements_begin(ElemType type) override
virtual element_iterator local_level_elements_end(unsigned int level) override
virtual node_iterator nodes_end() override
virtual void delete_elem(Elem *e) override
Removes element e from the mesh.
The SimpleRange templated class is intended to make it easy to construct ranges from pairs of iterato...
virtual unique_id_type parallel_max_unique_id() const override
virtual Elem * insert_elem(Elem *e) override
Insert elem e to the element array, preserving its id and replacing/deleting any existing element wit...
virtual const Node * node_ptr(const dof_id_type i) const override
virtual element_iterator pid_elements_end(processor_id_type proc_id) override
virtual void renumber_node(dof_id_type old_id, dof_id_type new_id) override
Changes the id of node old_id, both by changing node(old_id)->id() and by moving node(old_id) in the ...
virtual element_iterator not_active_elements_end() override
virtual element_iterator active_subdomain_elements_begin(subdomain_id_type subdomain_id) override
virtual node_iterator active_nodes_begin() override
Iterate over only the active nodes in the Mesh.
virtual node_iterator pid_nodes_begin(processor_id_type proc_id) override
Iterate over nodes with processor_id() == proc_id.
virtual void delete_node(Node *n) override
Removes the Node n from the mesh.
The libMesh namespace provides an interface to certain functionality in the library.
virtual element_iterator active_elements_begin() override
Active, local, and negation forms of the element iterators described above.
static const Real TOLERANCE
virtual Elem * add_elem(Elem *e) override
Add elem e to the end of the element array.
virtual node_iterator bnd_nodes_end() override
virtual element_iterator active_semilocal_elements_end() override
virtual SimpleRange< const_element_iterator > active_element_ptr_range() const override
virtual SimpleRange< element_iterator > active_local_element_ptr_range() override
virtual SimpleRange< node_iterator > local_node_ptr_range() override
virtual element_iterator ghost_elements_begin() override
Iterate over "ghost" elements in the Mesh.
void stitching_helper(const ReplicatedMesh *other_mesh, boundary_id_type boundary_id_1, boundary_id_type boundary_id_2, Real tol, bool clear_stitched_boundary_ids, bool verbose, bool use_binary_search, bool enforce_all_nodes_match_on_boundaries, bool skip_find_neighbors)
Helper function for stitch_meshes and stitch_surfaces that does the mesh stitching.
virtual element_iterator not_local_elements_end() override
virtual void clear() override
Clear all internal data.
std::vector< Elem * >::const_iterator const_elem_iterator_imp
virtual SimpleRange< const_element_iterator > element_ptr_range() const override
virtual void reserve_elem(const dof_id_type ne) override
Reserves space for a known number of elements.
virtual element_iterator not_active_elements_begin() override
virtual node_iterator bid_nodes_end(boundary_id_type bndry_id) override
virtual SimpleRange< const_node_iterator > node_ptr_range() const override
virtual element_iterator active_local_elements_begin() override
virtual element_iterator level_elements_end(unsigned int level) override
virtual element_iterator unpartitioned_elements_end() override
The ReplicatedMesh class is derived from the MeshBase class, and is used to store identical copies of...
virtual SimpleRange< element_iterator > active_subdomain_elements_ptr_range(subdomain_id_type subdomain_id) override
virtual SimpleRange< element_iterator > active_element_ptr_range() override
virtual SimpleRange< node_iterator > node_ptr_range() override
virtual node_iterator active_nodes_end() override
virtual node_iterator bid_nodes_begin(boundary_id_type bndry_id) override
Iterate over nodes for which BoundaryInfo::has_boundary_id(node, bndry_id) is true.
virtual element_iterator semilocal_elements_begin() override
Iterate over elements for which elem->is_semilocal() is true for the current processor.
virtual element_iterator subactive_elements_begin() override
Iterate over elements for which elem->subactive() is true.
virtual dof_id_type max_elem_id() const override
void subdomain_ids(std::set< subdomain_id_type > &ids) const
Constructs a list of all subdomain identifiers in the global mesh.
virtual element_iterator active_pid_elements_begin(processor_id_type proc_id) override
virtual element_iterator flagged_pid_elements_end(unsigned char rflag, processor_id_type pid) override
virtual element_iterator local_not_level_elements_begin(unsigned int level) override
virtual node_iterator evaluable_nodes_end(const DofMap &dof_map, unsigned int var_num=libMesh::invalid_uint) override
virtual node_iterator evaluable_nodes_begin(const DofMap &dof_map, unsigned int var_num=libMesh::invalid_uint) override
Iterate over nodes in the Mesh where the solution (as distributed by the given DofMap) can be evaluat...
virtual void renumber_nodes_and_elements() override
Remove nullptr elements from arrays.
virtual const Node * query_node_ptr(const dof_id_type i) const override
static const dof_id_type invalid_id
An invalid id to distinguish an uninitialized DofObject.
virtual element_iterator facelocal_elements_end() override
A Point defines a location in LIBMESH_DIM dimensional Real space.
std::vector< Node * >::const_iterator const_node_iterator_imp
uint8_t processor_id_type
virtual const Point & point(const dof_id_type i) const override
virtual node_iterator bnd_nodes_begin() override
Iterate over nodes for which BoundaryInfo::n_boundary_ids(node) > 0.
virtual SimpleRange< element_iterator > active_local_subdomain_elements_ptr_range(subdomain_id_type subdomain_id) override
virtual dof_id_type n_nodes() const override
A Node is like a Point, but with more information.
virtual element_iterator local_not_level_elements_end(unsigned int level) override
virtual node_iterator local_nodes_begin() override
Iterate over local nodes (nodes whose processor_id() matches the current processor).
virtual element_iterator pid_elements_begin(processor_id_type proc_id) override
Iterate over all elements with a specified processor id.
virtual element_iterator not_ancestor_elements_end() override
virtual void renumber_elem(dof_id_type old_id, dof_id_type new_id) override
Changes the id of element old_id, both by changing elem(old_id)->id() and by moving elem(old_id) in t...
virtual element_iterator active_type_elements_end(ElemType type) override
void stitch_surfaces(boundary_id_type boundary_id_1, boundary_id_type boundary_id_2, Real tol=TOLERANCE, bool clear_stitched_boundary_ids=false, bool verbose=true, bool use_binary_search=true, bool enforce_all_nodes_match_on_boundaries=false)
Similar to stitch_meshes, except that we stitch two adjacent surfaces within this mesh.
virtual element_iterator active_local_elements_end() override
virtual element_iterator evaluable_elements_end(const DofMap &dof_map, unsigned int var_num=libMesh::invalid_uint) override
virtual void reserve_nodes(const dof_id_type nn) override
Reserves space for a known number of nodes.
virtual dof_id_type parallel_n_elem() const override
virtual Node * add_node(Node *n) override
Add Node n to the end of the vertex array.
virtual node_iterator pid_nodes_end(processor_id_type proc_id) override
The UnstructuredMesh class is derived from the MeshBase class.
ReplicatedMesh & operator=(const ReplicatedMesh &)=delete
Copy and move assignment are not allowed.
virtual element_iterator level_elements_begin(unsigned int level) override
Iterate over elements of a given level.
virtual SimpleRange< const_element_iterator > active_subdomain_set_elements_ptr_range(std::set< subdomain_id_type > ss) const override
virtual element_iterator ghost_elements_end() override
virtual ~ReplicatedMesh()
Destructor.
virtual dof_id_type n_elem() const override
virtual std::unique_ptr< MeshBase > clone() const override
Virtual copy-constructor, creates a copy of this mesh.
virtual const Elem * query_elem_ptr(const dof_id_type i) const override
virtual element_iterator flagged_elements_end(unsigned char rflag) override
virtual void fix_broken_node_and_element_numbering() override
There is no reason for a user to ever call this function.
std::vector< Elem * >::iterator elem_iterator_imp
Typedefs for the container implementation.
virtual element_iterator active_not_local_elements_begin() override
virtual dof_id_type parallel_n_nodes() const override
std::vector< Node * >::iterator node_iterator_imp
Typedefs for the container implementation.
virtual element_iterator active_local_subdomain_elements_end(subdomain_id_type subdomain_id) override
virtual element_iterator not_local_elements_begin() override
This class handles the numbering of degrees of freedom on a mesh.
virtual element_iterator not_ancestor_elements_begin() override
virtual node_iterator local_nodes_end() override
virtual node_iterator nodes_begin() override
Node iterator accessor functions.
virtual const Elem * elem_ptr(const dof_id_type i) const override
virtual element_iterator type_elements_end(ElemType type) override
virtual element_iterator active_not_local_elements_end() override
virtual SimpleRange< const_element_iterator > active_local_subdomain_elements_ptr_range(subdomain_id_type subdomain_id) const override
virtual element_iterator ancestor_elements_end() override
virtual element_iterator active_unpartitioned_elements_begin() override
Iterate over active unpartitioned elements in the Mesh.
virtual element_iterator not_level_elements_begin(unsigned int level) override
virtual SimpleRange< element_iterator > active_subdomain_set_elements_ptr_range(std::set< subdomain_id_type > ss) override
static const processor_id_type invalid_processor_id
An invalid processor_id to distinguish DoFs that have not been assigned to a processor.
virtual element_iterator not_subactive_elements_end() override
This is the base class from which all geometric element types are derived.
virtual element_iterator active_subdomain_set_elements_end(std::set< subdomain_id_type > ss) override
virtual element_iterator flagged_pid_elements_begin(unsigned char rflag, processor_id_type pid) override
Iterate over all elements with a specified refinement flag on a specified processor.
virtual element_iterator semilocal_elements_end() override
virtual element_iterator ancestor_elements_begin() override
Iterate over elements for which elem->ancestor() is true.
virtual element_iterator elements_begin() override
Elem iterator accessor functions.
virtual element_iterator active_unpartitioned_elements_end() override
virtual element_iterator active_subdomain_set_elements_begin(std::set< subdomain_id_type > ss) override
ReplicatedMesh(const Parallel::Communicator &comm_in, unsigned char dim=1)
Constructor.
virtual element_iterator facelocal_elements_begin() override
Iterate over elements which are on or have a neighbor on the current processor.
virtual element_iterator local_level_elements_begin(unsigned int level) override
std::vector< dof_id_type > get_disconnected_subdomains(std::vector< subdomain_id_type > *subdomain_ids=nullptr) const
Return IDs of representative elements of all disconnected subdomains.
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
virtual element_iterator local_elements_end() override
void stitch_meshes(const ReplicatedMesh &other_mesh, boundary_id_type this_mesh_boundary, boundary_id_type other_mesh_boundary, Real tol=TOLERANCE, bool clear_stitched_boundary_ids=false, bool verbose=true, bool use_binary_search=true, bool enforce_all_nodes_match_on_boundaries=false)
Stitch other_mesh to this mesh so that this mesh is the union of the two meshes.
virtual element_iterator not_level_elements_end(unsigned int level) override
virtual element_iterator active_local_subdomain_elements_begin(subdomain_id_type subdomain_id) override
virtual element_iterator active_subdomain_elements_end(subdomain_id_type subdomain_id) override
virtual element_iterator type_elements_begin(ElemType type) override
Iterate over all elements with a specified geometric type.
virtual element_iterator active_semilocal_elements_begin() override
virtual SimpleRange< const_element_iterator > active_subdomain_elements_ptr_range(subdomain_id_type subdomain_id) const override
virtual element_iterator evaluable_elements_begin(const DofMap &dof_map, unsigned int var_num=libMesh::invalid_uint) override
Iterate over elements in the Mesh where the solution (as distributed by the given DofMap) can be eval...
virtual element_iterator unpartitioned_elements_begin() override
Iterate over unpartitioned elements in the Mesh.
virtual element_iterator elements_end() override
virtual element_iterator active_elements_end() override
virtual Node * add_point(const Point &p, const dof_id_type id=DofObject::invalid_id, const processor_id_type proc_id=DofObject::invalid_processor_id) override
functions for adding /deleting nodes elements.
virtual dof_id_type n_active_elem() const override
ElemType
Defines an enum for geometric element types.
std::unordered_map< dof_id_type, std::vector< std::vector< Point > > > get_boundary_points() const
Return all points on boundary.
virtual Node * insert_node(Node *n) override
Insert Node n into the Mesh at a location consistent with n->id(), allocating extra storage if necess...
virtual element_iterator local_elements_begin() override