Go to the documentation of this file.
20 #ifndef LIBMESH_DISTRIBUTED_MESH_H
21 #define LIBMESH_DISTRIBUTED_MESH_H
24 #include "libmesh/mapvector.h"
25 #include "libmesh/unstructured_mesh.h"
26 #include "libmesh/auto_ptr.h"
89 virtual std::unique_ptr<MeshBase>
clone ()
const override
90 {
return libmesh_make_unique<DistributedMesh>(*
this); }
100 virtual void clear()
override;
149 template <
typename T>
177 template <
typename T>
246 #ifdef LIBMESH_ENABLE_UNIQUE_ID
307 virtual const_element_iterator
elements_end()
const override;
383 virtual const_element_iterator
level_elements_end (
unsigned int level)
const override;
462 virtual element_iterator
466 virtual element_iterator
470 virtual const_element_iterator
474 virtual const_element_iterator
478 #ifdef LIBMESH_ENABLE_AMR
492 #endif // LIBMESH_ENABLE_AMR
498 virtual node_iterator
nodes_end ()
override;
499 virtual const_node_iterator
nodes_begin ()
const override;
500 virtual const_node_iterator
nodes_end ()
const override;
531 virtual node_iterator
534 virtual node_iterator
537 virtual const_node_iterator
540 virtual const_node_iterator
581 #ifdef LIBMESH_ENABLE_UNIQUE_ID
614 #endif // LIBMESH_DISTRIBUTED_MESH_H
mapvector< Node *, dof_id_type > _nodes
The vertices (spatial coordinates) of the mesh.
virtual element_iterator not_ancestor_elements_begin() override
virtual element_iterator active_local_subdomain_elements_end(subdomain_id_type subdomain_id) override
virtual element_iterator active_type_elements_begin(ElemType type) override
const unsigned int invalid_uint
A number which is used quite often to represent an invalid or uninitialized value.
virtual element_iterator local_level_elements_end(unsigned int level) override
virtual element_iterator not_active_elements_end() override
std::set< Elem * > _extra_ghost_elems
These are extra ghost elements that we want to make sure not to delete when we call delete_remote_ele...
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 element_iterator facelocal_elements_begin() override
Iterate over elements which are on or have a neighbor on the current processor.
virtual element_iterator active_not_local_elements_begin() override
virtual SimpleRange< element_iterator > active_local_element_ptr_range() override
virtual void delete_node(Node *n) override
Removes the Node n from the mesh.
virtual element_iterator active_elements_end() override
virtual dof_id_type max_elem_id() const override
The SimpleRange templated class is intended to make it easy to construct ranges from pairs of iterato...
virtual SimpleRange< element_iterator > active_subdomain_elements_ptr_range(subdomain_id_type subdomain_id) override
mapvector< Elem *, dof_id_type >::veclike_iterator elem_iterator_imp
Typedefs for the container implementation.
virtual element_iterator elements_end() override
dof_id_type parallel_max_elem_id() const
virtual const Node * query_node_ptr(const dof_id_type i) const override
virtual element_iterator active_subdomain_set_elements_begin(std::set< subdomain_id_type > ss) override
virtual SimpleRange< const_element_iterator > active_local_element_ptr_range() const override
dof_id_type parallel_max_node_id() const
virtual element_iterator not_active_elements_begin() override
mapvector< Node *, dof_id_type >::const_veclike_iterator const_node_iterator_imp
virtual element_iterator pid_elements_begin(processor_id_type proc_id) override
Iterate over all elements with a specified processor id.
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 SimpleRange< const_node_iterator > node_ptr_range() const override
void libmesh_assert_valid_parallel_object_ids(const mapvector< T *, dof_id_type > &) const
Verify id, processor_id, and if applicable unique_id consistency of a parallel objects container.
virtual unique_id_type parallel_max_unique_id() const override
virtual void fix_broken_node_and_element_numbering() override
There is no reason for a user to ever call this function.
The libMesh namespace provides an interface to certain functionality in the library.
virtual void own_node(Node &n) override
Takes ownership of node n on this partition of a distributed mesh, by setting n.processor_id() to thi...
virtual element_iterator active_pid_elements_end(processor_id_type proc_id) override
virtual SimpleRange< element_iterator > active_element_ptr_range() override
virtual node_iterator local_nodes_end() override
virtual element_iterator active_type_elements_end(ElemType type) override
virtual element_iterator active_local_subdomain_elements_begin(subdomain_id_type subdomain_id) override
virtual dof_id_type max_node_id() const override
virtual element_iterator semilocal_elements_end() override
virtual element_iterator local_level_elements_begin(unsigned int level) override
virtual node_iterator pid_nodes_begin(processor_id_type proc_id) override
Iterate over nodes with processor_id() == proc_id.
virtual element_iterator flagged_pid_elements_end(unsigned char rflag, processor_id_type pid) override
virtual SimpleRange< node_iterator > node_ptr_range() override
virtual bool is_serial_on_zero() const override
virtual element_iterator active_subdomain_set_elements_end(std::set< subdomain_id_type > ss) override
virtual SimpleRange< const_element_iterator > active_subdomain_elements_ptr_range(subdomain_id_type subdomain_id) const override
virtual element_iterator active_pid_elements_begin(processor_id_type proc_id) override
virtual element_iterator not_subactive_elements_end() override
virtual element_iterator ghost_elements_begin() override
Iterate over "ghost" elements in the Mesh.
virtual element_iterator not_local_elements_begin() override
virtual element_iterator not_level_elements_end(unsigned int level) override
virtual element_iterator not_level_elements_begin(unsigned int level) override
virtual node_iterator bid_nodes_end(boundary_id_type bndry_id) override
void libmesh_assert_valid_parallel_flags() const
Verify refinement_flag and p_refinement_flag consistency of our elements containers.
DistributedMesh & operator=(const DistributedMesh &)=delete
Copy and move assignment are not allowed.
virtual node_iterator nodes_begin() override
Node iterator accessor functions.
virtual element_iterator active_local_elements_end() override
dof_id_type _next_free_unpartitioned_node_id
virtual SimpleRange< const_node_iterator > local_node_ptr_range() const override
virtual dof_id_type parallel_n_elem() const override
virtual void renumber_nodes_and_elements() override
Remove nullptr elements from arrays.
virtual void redistribute() override
Redistribute elements between processors.
virtual dof_id_type n_nodes() const 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_elements_begin() override
Active, local, and negation forms of the element iterators described above.
virtual element_iterator not_subactive_elements_begin() override
virtual void clear() override
Clear all internal data.
virtual element_iterator active_semilocal_elements_end() 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 void delete_elem(Elem *e) override
Removes element e from the mesh.
virtual void allgather() override
Gathers all elements and nodes of the mesh onto every processor.
bool _is_serial
A boolean remembering whether we're serialized or not.
virtual dof_id_type n_elem() const override
virtual void clear_extra_ghost_elems()
Clears extra ghost elements.
virtual void gather_to_zero() override
Gathers all elements and nodes of the mesh onto processor zero.
static const dof_id_type invalid_id
An invalid id to distinguish an uninitialized DofObject.
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 element_iterator type_elements_end(ElemType type) override
virtual node_iterator local_nodes_begin() override
Iterate over local nodes (nodes whose processor_id() matches the current processor).
A Point defines a location in LIBMESH_DIM dimensional Real space.
uint8_t processor_id_type
virtual element_iterator ancestor_elements_begin() override
Iterate over elements for which elem->ancestor() is true.
virtual void add_extra_ghost_elem(Elem *e)
Inserts the element and adds it to a list of elements that should not get deleted or have their desce...
virtual void set_distributed() override
Asserts that not all elements and nodes of the mesh necessarily exist on the current processor.
virtual Elem * add_elem(Elem *e) override
Add elem e to the end of the element array.
A Node is like a Point, but with more information.
virtual void update_post_partitioning() override
Recalculate cached data after elements and nodes have been repartitioned.
dof_id_type _next_free_local_elem_id
virtual node_iterator bnd_nodes_begin() override
Iterate over nodes for which BoundaryInfo::n_boundary_ids(node) > 0.
virtual void delete_remote_elements() override
Deletes all nonlocal elements of the mesh except for "ghosts" which touch a local element,...
virtual element_iterator local_not_level_elements_begin(unsigned int level) override
DistributedMesh(const Parallel::Communicator &comm_in, unsigned char dim=1)
Constructor.
virtual element_iterator level_elements_end(unsigned int level) override
virtual node_iterator pid_nodes_end(processor_id_type proc_id) 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 evaluable_elements_end(const DofMap &dof_map, unsigned int var_num=libMesh::invalid_uint) override
virtual node_iterator nodes_end() override
This mapvector templated class is intended to provide the performance characteristics of a std::map w...
virtual element_iterator facelocal_elements_end() override
virtual element_iterator active_local_elements_begin() override
virtual ~DistributedMesh()
Destructor.
virtual SimpleRange< const_element_iterator > active_local_subdomain_elements_ptr_range(subdomain_id_type subdomain_id) const override
virtual element_iterator pid_elements_end(processor_id_type proc_id) override
virtual SimpleRange< const_element_iterator > element_ptr_range() const override
virtual bool is_replicated() const override
virtual element_iterator unpartitioned_elements_begin() override
Iterate over unpartitioned elements in the Mesh.
The UnstructuredMesh class is derived from the MeshBase class.
dof_id_type _next_free_unpartitioned_elem_id
dof_id_type _n_nodes
Cached data from the last renumber_nodes_and_elements call.
virtual element_iterator local_elements_end() override
mapvector< Elem *, dof_id_type >::const_veclike_iterator const_elem_iterator_imp
virtual element_iterator flagged_elements_begin(unsigned char rflag) override
Iterate over all elements with a specified refinement flag.
dof_id_type renumber_dof_objects(mapvector< T *, dof_id_type > &)
Renumber a parallel objects container.
virtual element_iterator active_unpartitioned_elements_begin() override
Iterate over active unpartitioned elements in the Mesh.
virtual void reserve_elem(const dof_id_type) override
Reserves space for a known number of elements.
virtual const Elem * query_elem_ptr(const dof_id_type i) const override
virtual element_iterator type_elements_begin(ElemType type) override
Iterate over all elements with a specified geometric type.
virtual const Elem * elem_ptr(const dof_id_type i) const override
virtual SimpleRange< const_element_iterator > active_element_ptr_range() const override
virtual element_iterator active_subdomain_elements_begin(subdomain_id_type subdomain_id) override
virtual std::unique_ptr< MeshBase > clone() const override
Virtual copy-constructor, creates a copy of this mesh.
virtual node_iterator active_nodes_begin() override
Iterate over only the active nodes in the Mesh.
virtual element_iterator active_semilocal_elements_begin() override
This class handles the numbering of degrees of freedom on a mesh.
virtual SimpleRange< element_iterator > element_ptr_range() override
void libmesh_assert_valid_parallel_p_levels() const
Verify p_level consistency of our elements containers.
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 void libmesh_assert_valid_parallel_ids() const override
Verify id and processor_id consistency of our elements and nodes containers.
const std::set< Elem * > & extra_ghost_elems() const
Const accessor to the ghosted elements.
virtual SimpleRange< element_iterator > active_local_subdomain_elements_ptr_range(subdomain_id_type subdomain_id) override
virtual element_iterator semilocal_elements_begin() override
Iterate over elements for which elem->is_semilocal() is true for the current processor.
virtual element_iterator ancestor_elements_end() 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_local_elements_end() override
This is the base class from which all geometric element types are derived.
virtual const Point & point(const dof_id_type i) const 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 void update_parallel_id_counts() override
Updates parallel caches so that methods like n_elem() accurately reflect changes on other processors.
virtual bool is_serial() const override
virtual element_iterator active_unpartitioned_elements_end() override
virtual element_iterator elements_begin() override
Elem iterator accessor functions.
unique_id_type _next_unpartitioned_unique_id
The next available unique id for assigning ids to unpartitioned DOF objects.
bool _is_serial_on_proc_0
A boolean remembering whether we're serialized to proc 0 or not.
virtual element_iterator active_not_local_elements_end() override
virtual element_iterator active_subdomain_elements_end(subdomain_id_type subdomain_id) override
virtual element_iterator subactive_elements_begin() override
Iterate over elements for which elem->subactive() is true.
mapvector< Elem *, dof_id_type > _elements
The elements in the mesh.
virtual SimpleRange< node_iterator > local_node_ptr_range() override
virtual element_iterator local_not_level_elements_end(unsigned int level) override
virtual element_iterator not_ancestor_elements_end() override
virtual Node * add_node(Node *n) override
Add Node n to the end of the vertex array.
virtual node_iterator bnd_nodes_end() override
virtual node_iterator evaluable_nodes_end(const DofMap &dof_map, unsigned int var_num=libMesh::invalid_uint) override
virtual dof_id_type parallel_n_nodes() const override
virtual Node * insert_node(Node *n) override
Calls add_node().
virtual SimpleRange< const_element_iterator > active_subdomain_set_elements_ptr_range(std::set< subdomain_id_type > ss) const override
virtual element_iterator local_elements_begin() override
dof_id_type _next_free_local_node_id
Guaranteed globally unused IDs for use when adding new nodes or elements.
virtual element_iterator unpartitioned_elements_end() override
virtual node_iterator active_nodes_end() override
The DistributedMesh class is derived from the MeshBase class, and is intended to provide identical fu...
virtual element_iterator subactive_elements_end() override
virtual void reserve_nodes(const dof_id_type) override
Reserves space for a known number of nodes.
virtual element_iterator flagged_elements_end(unsigned char rflag) override
virtual dof_id_type n_active_elem() const override
virtual element_iterator level_elements_begin(unsigned int level) override
Iterate over elements of a given level.
virtual element_iterator ghost_elements_end() override
ElemType
Defines an enum for geometric element types.
virtual const Node * node_ptr(const dof_id_type i) const override
mapvector< Node *, dof_id_type >::veclike_iterator node_iterator_imp
Typedefs for the container implementation.