libMesh
distributed_mesh.h
Go to the documentation of this file.
1 // The libMesh Finite Element Library.
2 // Copyright (C) 2002-2019 Benjamin S. Kirk, John W. Peterson, Roy H. Stogner
3 
4 // This library is free software; you can redistribute it and/or
5 // modify it under the terms of the GNU Lesser General Public
6 // License as published by the Free Software Foundation; either
7 // version 2.1 of the License, or (at your option) any later version.
8 
9 // This library is distributed in the hope that it will be useful,
10 // but WITHOUT ANY WARRANTY; without even the implied warranty of
11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 // Lesser General Public License for more details.
13 
14 // You should have received a copy of the GNU Lesser General Public
15 // License along with this library; if not, write to the Free Software
16 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17 
18 
19 
20 #ifndef LIBMESH_DISTRIBUTED_MESH_H
21 #define LIBMESH_DISTRIBUTED_MESH_H
22 
23 // Local Includes
24 #include "libmesh/mapvector.h"
25 #include "libmesh/unstructured_mesh.h"
26 #include "libmesh/auto_ptr.h" // libmesh_make_unique
27 
28 // C++ Includes
29 #include <cstddef>
30 #include <set>
31 
32 namespace libMesh
33 {
34 
35 // Forward declarations
36 class Elem;
37 class Node;
38 
39 
51 {
52 public:
53 
59  explicit
60  DistributedMesh (const Parallel::Communicator & comm_in,
61  unsigned char dim=1);
62 
67  DistributedMesh (const UnstructuredMesh & other_mesh);
68 
73  DistributedMesh (const DistributedMesh & other_mesh);
74 
78  DistributedMesh(DistributedMesh &&) = default;
79 
83  DistributedMesh & operator= (const DistributedMesh &) = delete;
85 
89  virtual std::unique_ptr<MeshBase> clone () const override
90  { return libmesh_make_unique<DistributedMesh>(*this); }
91 
95  virtual ~DistributedMesh();
96 
100  virtual void clear() override;
101 
107  virtual void redistribute () override;
108 
113  virtual void update_post_partitioning () override;
114 
119  virtual bool is_serial () const override
120  { return _is_serial; }
121 
126  virtual bool is_serial_on_zero () const override
127  { return _is_serial || _is_serial_on_proc_0; }
128 
133  virtual void set_distributed () override
134  { _is_serial = false;
135  _is_serial_on_proc_0 = false; }
136 
141  virtual bool is_replicated () const override
142  { return false; }
143 
149  template <typename T>
151 
157  virtual void libmesh_assert_valid_parallel_ids() const override;
158 
164 
171 
177  template <typename T>
179 
183  virtual void renumber_nodes_and_elements () override;
184 
189  virtual void allgather() override;
190 
195  virtual void gather_to_zero() override;
196 
202  virtual void delete_remote_elements() override;
203 
211  virtual void add_extra_ghost_elem(Elem * e);
212 
216  virtual void clear_extra_ghost_elems() { _extra_ghost_elems.clear(); }
217 
221  virtual void clear_extra_ghost_elems(const std::set<Elem *> & extra_ghost_elems);
222 
226  const std::set<Elem *> & extra_ghost_elems() const { return _extra_ghost_elems; }
227 
228  // Cached methods that can be called in serial
229  virtual dof_id_type n_nodes () const override { return _n_nodes; }
230  virtual dof_id_type max_node_id () const override { return _max_node_id; }
231  virtual void reserve_nodes (const dof_id_type) override {}
232  virtual dof_id_type n_elem () const override { return _n_elem; }
233  virtual dof_id_type n_active_elem () const override;
234  virtual dof_id_type max_elem_id () const override { return _max_elem_id; }
235  virtual void reserve_elem (const dof_id_type) override {}
236 
237  // Parallel only method to update the caches
238  virtual void update_parallel_id_counts () override;
239 
240  // And more parallel only methods to test non-cached values
241  virtual dof_id_type parallel_n_nodes () const override;
243  virtual dof_id_type parallel_n_elem () const override;
245 
246 #ifdef LIBMESH_ENABLE_UNIQUE_ID
247  virtual unique_id_type parallel_max_unique_id () const override;
248 #endif
249 
250  virtual const Point & point (const dof_id_type i) const override;
251 
252  virtual const Node * node_ptr (const dof_id_type i) const override;
253  virtual Node * node_ptr (const dof_id_type i) override;
254 
255  virtual const Node * query_node_ptr (const dof_id_type i) const override;
256  virtual Node * query_node_ptr (const dof_id_type i) override;
257 
258  virtual const Elem * elem_ptr (const dof_id_type i) const override;
259  virtual Elem * elem_ptr (const dof_id_type i) override;
260 
261  virtual const Elem * query_elem_ptr (const dof_id_type i) const override;
262  virtual Elem * query_elem_ptr (const dof_id_type i) override;
263 
267  virtual Node * add_point (const Point & p,
269  const processor_id_type proc_id = DofObject::invalid_processor_id) override;
270  virtual Node * add_node (Node * n) override;
271 
275  virtual Node * insert_node(Node * n) override;
276 
283  virtual void own_node (Node & n) override;
284 
285  virtual void delete_node (Node * n) override;
286  virtual void renumber_node (dof_id_type old_id, dof_id_type new_id) override;
287  virtual Elem * add_elem (Elem * e) override;
288  virtual Elem * insert_elem (Elem * e) override;
289  virtual void delete_elem (Elem * e) override;
290  virtual void renumber_elem (dof_id_type old_id, dof_id_type new_id) override;
291 
298  virtual void fix_broken_node_and_element_numbering () override;
299 
300 public:
304  virtual element_iterator elements_begin () override;
305  virtual element_iterator elements_end () override;
306  virtual const_element_iterator elements_begin() const override;
307  virtual const_element_iterator elements_end() const override;
310 
311  virtual element_iterator active_elements_begin () override;
312  virtual element_iterator active_elements_end () override;
313  virtual const_element_iterator active_elements_begin() const override;
314  virtual const_element_iterator active_elements_end() const override;
317 
318  virtual element_iterator ancestor_elements_begin () override;
319  virtual element_iterator ancestor_elements_end () override;
320  virtual const_element_iterator ancestor_elements_begin() const override;
321  virtual const_element_iterator ancestor_elements_end() const override;
322 
323  virtual element_iterator subactive_elements_begin () override;
324  virtual element_iterator subactive_elements_end () override;
325  virtual const_element_iterator subactive_elements_begin() const override;
326  virtual const_element_iterator subactive_elements_end() const override;
327 
328  virtual element_iterator not_active_elements_begin () override;
329  virtual element_iterator not_active_elements_end () override;
330  virtual const_element_iterator not_active_elements_begin() const override;
331  virtual const_element_iterator not_active_elements_end() const override;
332 
333  virtual element_iterator not_ancestor_elements_begin () override;
334  virtual element_iterator not_ancestor_elements_end () override;
335  virtual const_element_iterator not_ancestor_elements_begin() const override;
336  virtual const_element_iterator not_ancestor_elements_end() const override;
337 
338  virtual element_iterator not_subactive_elements_begin () override;
339  virtual element_iterator not_subactive_elements_end () override;
340  virtual const_element_iterator not_subactive_elements_begin() const override;
341  virtual const_element_iterator not_subactive_elements_end() const override;
342 
343  virtual element_iterator local_elements_begin () override;
344  virtual element_iterator local_elements_end () override;
345  virtual const_element_iterator local_elements_begin () const override;
346  virtual const_element_iterator local_elements_end () const override;
347 
348  virtual element_iterator semilocal_elements_begin () override;
349  virtual element_iterator semilocal_elements_end () override;
350  virtual const_element_iterator semilocal_elements_begin () const override;
351  virtual const_element_iterator semilocal_elements_end () const override;
352 
353  virtual element_iterator active_semilocal_elements_begin () override;
354  virtual element_iterator active_semilocal_elements_end () override;
355  virtual const_element_iterator active_semilocal_elements_begin () const override;
356  virtual const_element_iterator active_semilocal_elements_end () const override;
357 
358  virtual element_iterator facelocal_elements_begin () override;
359  virtual element_iterator facelocal_elements_end () override;
360  virtual const_element_iterator facelocal_elements_begin () const override;
361  virtual const_element_iterator facelocal_elements_end () const override;
362 
363  virtual element_iterator not_local_elements_begin () override;
364  virtual element_iterator not_local_elements_end () override;
365  virtual const_element_iterator not_local_elements_begin () const override;
366  virtual const_element_iterator not_local_elements_end () const override;
367 
368  virtual element_iterator active_local_elements_begin () override;
369  virtual element_iterator active_local_elements_end () override;
370  virtual const_element_iterator active_local_elements_begin () const override;
371  virtual const_element_iterator active_local_elements_end () const override;
374 
375  virtual element_iterator active_not_local_elements_begin () override;
376  virtual element_iterator active_not_local_elements_end () override;
377  virtual const_element_iterator active_not_local_elements_begin () const override;
378  virtual const_element_iterator active_not_local_elements_end () const override;
379 
380  virtual element_iterator level_elements_begin (unsigned int level) override;
381  virtual element_iterator level_elements_end (unsigned int level) override;
382  virtual const_element_iterator level_elements_begin (unsigned int level) const override;
383  virtual const_element_iterator level_elements_end (unsigned int level) const override;
384 
385  virtual element_iterator not_level_elements_begin (unsigned int level) override;
386  virtual element_iterator not_level_elements_end (unsigned int level) override;
387  virtual const_element_iterator not_level_elements_begin (unsigned int level) const override;
388  virtual const_element_iterator not_level_elements_end (unsigned int level) const override;
389 
390  virtual element_iterator local_level_elements_begin (unsigned int level) override;
391  virtual element_iterator local_level_elements_end (unsigned int level) override;
392  virtual const_element_iterator local_level_elements_begin (unsigned int level) const override;
393  virtual const_element_iterator local_level_elements_end (unsigned int level) const override;
394 
395  virtual element_iterator local_not_level_elements_begin (unsigned int level) override;
396  virtual element_iterator local_not_level_elements_end (unsigned int level) override;
397  virtual const_element_iterator local_not_level_elements_begin (unsigned int level) const override;
398  virtual const_element_iterator local_not_level_elements_end (unsigned int level) const override;
399 
400  virtual element_iterator pid_elements_begin (processor_id_type proc_id) override;
401  virtual element_iterator pid_elements_end (processor_id_type proc_id) override;
402  virtual const_element_iterator pid_elements_begin (processor_id_type proc_id) const override;
403  virtual const_element_iterator pid_elements_end (processor_id_type proc_id) const override;
404 
405  virtual element_iterator type_elements_begin (ElemType type) override;
406  virtual element_iterator type_elements_end (ElemType type) override;
407  virtual const_element_iterator type_elements_begin (ElemType type) const override;
408  virtual const_element_iterator type_elements_end (ElemType type) const override;
409 
410  virtual element_iterator active_type_elements_begin (ElemType type) override;
411  virtual element_iterator active_type_elements_end (ElemType type) override;
412  virtual const_element_iterator active_type_elements_begin (ElemType type) const override;
413  virtual const_element_iterator active_type_elements_end (ElemType type) const override;
414 
415  virtual element_iterator active_pid_elements_begin (processor_id_type proc_id) override;
416  virtual element_iterator active_pid_elements_end (processor_id_type proc_id) override;
417  virtual const_element_iterator active_pid_elements_begin (processor_id_type proc_id) const override;
418  virtual const_element_iterator active_pid_elements_end (processor_id_type proc_id) const override;
419 
420  virtual element_iterator unpartitioned_elements_begin () override;
421  virtual element_iterator unpartitioned_elements_end () override;
422  virtual const_element_iterator unpartitioned_elements_begin () const override;
423  virtual const_element_iterator unpartitioned_elements_end () const override;
424 
425  virtual element_iterator active_unpartitioned_elements_begin () override;
426  virtual element_iterator active_unpartitioned_elements_end () override;
427  virtual const_element_iterator active_unpartitioned_elements_begin () const override;
428  virtual const_element_iterator active_unpartitioned_elements_end () const override;
429 
430  virtual element_iterator active_local_subdomain_elements_begin (subdomain_id_type subdomain_id) override;
431  virtual element_iterator active_local_subdomain_elements_end (subdomain_id_type subdomain_id) override;
432  virtual const_element_iterator active_local_subdomain_elements_begin (subdomain_id_type subdomain_id) const override;
433  virtual const_element_iterator active_local_subdomain_elements_end (subdomain_id_type subdomain_id) const override;
435  { return {active_local_subdomain_elements_begin(subdomain_id), active_local_subdomain_elements_end(subdomain_id)}; }
437  { return {active_local_subdomain_elements_begin(subdomain_id), active_local_subdomain_elements_end(subdomain_id)}; }
438 
439  virtual element_iterator active_subdomain_elements_begin (subdomain_id_type subdomain_id) override;
440  virtual element_iterator active_subdomain_elements_end (subdomain_id_type subdomain_id) override;
441  virtual const_element_iterator active_subdomain_elements_begin (subdomain_id_type subdomain_id) const override;
442  virtual const_element_iterator active_subdomain_elements_end (subdomain_id_type subdomain_id) const override;
444  { return {active_subdomain_elements_begin(subdomain_id), active_subdomain_elements_end(subdomain_id)}; }
446  { return {active_subdomain_elements_begin(subdomain_id), active_subdomain_elements_end(subdomain_id)}; }
447 
448  virtual element_iterator active_subdomain_set_elements_begin (std::set<subdomain_id_type> ss) override;
449  virtual element_iterator active_subdomain_set_elements_end (std::set<subdomain_id_type> ss) override;
450  virtual const_element_iterator active_subdomain_set_elements_begin (std::set<subdomain_id_type> ss) const override;
451  virtual const_element_iterator active_subdomain_set_elements_end (std::set<subdomain_id_type> ss) const override;
452  virtual SimpleRange<element_iterator> active_subdomain_set_elements_ptr_range(std::set<subdomain_id_type> ss) override
454  virtual SimpleRange<const_element_iterator> active_subdomain_set_elements_ptr_range(std::set<subdomain_id_type> ss) const override
456 
457  virtual element_iterator ghost_elements_begin () override;
458  virtual element_iterator ghost_elements_end () override;
459  virtual const_element_iterator ghost_elements_begin () const override;
460  virtual const_element_iterator ghost_elements_end () const override;
461 
462  virtual element_iterator
463  evaluable_elements_begin (const DofMap & dof_map,
464  unsigned int var_num = libMesh::invalid_uint) override;
465 
466  virtual element_iterator
467  evaluable_elements_end (const DofMap & dof_map,
468  unsigned int var_num = libMesh::invalid_uint) override;
469 
470  virtual const_element_iterator
471  evaluable_elements_begin (const DofMap & dof_map,
472  unsigned int var_num = libMesh::invalid_uint) const override;
473 
474  virtual const_element_iterator
475  evaluable_elements_end (const DofMap & dof_map,
476  unsigned int var_num = libMesh::invalid_uint) const override;
477 
478 #ifdef LIBMESH_ENABLE_AMR
479  virtual element_iterator flagged_elements_begin (unsigned char rflag) override;
480  virtual element_iterator flagged_elements_end (unsigned char rflag) override;
481  virtual const_element_iterator flagged_elements_begin (unsigned char rflag) const override;
482  virtual const_element_iterator flagged_elements_end (unsigned char rflag) const override;
483 
484  virtual element_iterator flagged_pid_elements_begin (unsigned char rflag,
485  processor_id_type pid) override;
486  virtual element_iterator flagged_pid_elements_end (unsigned char rflag,
487  processor_id_type pid) override;
488  virtual const_element_iterator flagged_pid_elements_begin (unsigned char rflag,
489  processor_id_type pid) const override;
490  virtual const_element_iterator flagged_pid_elements_end (unsigned char rflag,
491  processor_id_type pid) const override;
492 #endif // LIBMESH_ENABLE_AMR
493 
497  virtual node_iterator nodes_begin () override;
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;
501  virtual SimpleRange<node_iterator> node_ptr_range() override { return {nodes_begin(), nodes_end()}; }
502  virtual SimpleRange<const_node_iterator> node_ptr_range() const override { return {nodes_begin(), nodes_end()}; }
503 
504  virtual node_iterator active_nodes_begin () override;
505  virtual node_iterator active_nodes_end () override;
506  virtual const_node_iterator active_nodes_begin () const override;
507  virtual const_node_iterator active_nodes_end () const override;
508 
509  virtual node_iterator local_nodes_begin () override;
510  virtual node_iterator local_nodes_end () override;
511  virtual const_node_iterator local_nodes_begin () const override;
512  virtual const_node_iterator local_nodes_end () const override;
515 
516  virtual node_iterator pid_nodes_begin (processor_id_type proc_id) override;
517  virtual node_iterator pid_nodes_end (processor_id_type proc_id) override;
518  virtual const_node_iterator pid_nodes_begin (processor_id_type proc_id) const override;
519  virtual const_node_iterator pid_nodes_end (processor_id_type proc_id) const override;
520 
521  virtual node_iterator bid_nodes_begin (boundary_id_type bndry_id) override;
522  virtual node_iterator bid_nodes_end (boundary_id_type bndry_id) override;
523  virtual const_node_iterator bid_nodes_begin (boundary_id_type bndry_id) const override;
524  virtual const_node_iterator bid_nodes_end (boundary_id_type bndry_id) const override;
525 
526  virtual node_iterator bnd_nodes_begin () override;
527  virtual node_iterator bnd_nodes_end () override;
528  virtual const_node_iterator bnd_nodes_begin () const override;
529  virtual const_node_iterator bnd_nodes_end () const override;
530 
531  virtual node_iterator
532  evaluable_nodes_begin (const DofMap & dof_map,
533  unsigned int var_num = libMesh::invalid_uint) override;
534  virtual node_iterator
535  evaluable_nodes_end (const DofMap & dof_map,
536  unsigned int var_num = libMesh::invalid_uint) override;
537  virtual const_node_iterator
538  evaluable_nodes_begin (const DofMap & dof_map,
539  unsigned int var_num = libMesh::invalid_uint) const override;
540  virtual const_node_iterator
541  evaluable_nodes_end (const DofMap & dof_map,
542  unsigned int var_num = libMesh::invalid_uint) const override;
543 
544 
545 protected:
546 
551 
556 
561 
566 
571 
580 
581 #ifdef LIBMESH_ENABLE_UNIQUE_ID
582 
586 #endif
587 
592  std::set<Elem *> _extra_ghost_elems;
593 
594 private:
595 
602 
609 };
610 
611 
612 } // namespace libMesh
613 
614 #endif // LIBMESH_DISTRIBUTED_MESH_H
libMesh::DistributedMesh::_nodes
mapvector< Node *, dof_id_type > _nodes
The vertices (spatial coordinates) of the mesh.
Definition: distributed_mesh.h:550
libMesh::DistributedMesh::not_ancestor_elements_begin
virtual element_iterator not_ancestor_elements_begin() override
libMesh::DistributedMesh::active_local_subdomain_elements_end
virtual element_iterator active_local_subdomain_elements_end(subdomain_id_type subdomain_id) override
libMesh::dof_id_type
uint8_t dof_id_type
Definition: id_types.h:67
libMesh::DistributedMesh::active_type_elements_begin
virtual element_iterator active_type_elements_begin(ElemType type) override
libMesh::invalid_uint
const unsigned int invalid_uint
A number which is used quite often to represent an invalid or uninitialized value.
Definition: libmesh.h:249
libMesh::DistributedMesh::_max_elem_id
dof_id_type _max_elem_id
Definition: distributed_mesh.h:570
libMesh::DistributedMesh::local_level_elements_end
virtual element_iterator local_level_elements_end(unsigned int level) override
libMesh::DistributedMesh::not_active_elements_end
virtual element_iterator not_active_elements_end() override
libMesh::DistributedMesh::_extra_ghost_elems
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...
Definition: distributed_mesh.h:592
libMesh::mapvector::veclike_iterator
Definition: mapvector.h:54
libMesh::DistributedMesh::evaluable_nodes_begin
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...
libMesh::DistributedMesh::facelocal_elements_begin
virtual element_iterator facelocal_elements_begin() override
Iterate over elements which are on or have a neighbor on the current processor.
libMesh::DistributedMesh::active_not_local_elements_begin
virtual element_iterator active_not_local_elements_begin() override
libMesh::DistributedMesh::active_local_element_ptr_range
virtual SimpleRange< element_iterator > active_local_element_ptr_range() override
Definition: distributed_mesh.h:372
libMesh::DistributedMesh::delete_node
virtual void delete_node(Node *n) override
Removes the Node n from the mesh.
Definition: distributed_mesh.C:768
libMesh::DistributedMesh::active_elements_end
virtual element_iterator active_elements_end() override
libMesh::unique_id_type
uint8_t unique_id_type
Definition: id_types.h:86
libMesh::DistributedMesh::max_elem_id
virtual dof_id_type max_elem_id() const override
Definition: distributed_mesh.h:234
libMesh::SimpleRange
The SimpleRange templated class is intended to make it easy to construct ranges from pairs of iterato...
Definition: simple_range.h:36
libMesh::DistributedMesh::active_subdomain_elements_ptr_range
virtual SimpleRange< element_iterator > active_subdomain_elements_ptr_range(subdomain_id_type subdomain_id) override
Definition: distributed_mesh.h:443
libMesh::DistributedMesh::elem_iterator_imp
mapvector< Elem *, dof_id_type >::veclike_iterator elem_iterator_imp
Typedefs for the container implementation.
Definition: distributed_mesh.h:600
libMesh::DistributedMesh::elements_end
virtual element_iterator elements_end() override
libMesh::DistributedMesh::parallel_max_elem_id
dof_id_type parallel_max_elem_id() const
Definition: distributed_mesh.C:233
libMesh::DistributedMesh::query_node_ptr
virtual const Node * query_node_ptr(const dof_id_type i) const override
Definition: distributed_mesh.C:350
libMesh::DistributedMesh::active_subdomain_set_elements_begin
virtual element_iterator active_subdomain_set_elements_begin(std::set< subdomain_id_type > ss) override
libMesh::DistributedMesh::active_local_element_ptr_range
virtual SimpleRange< const_element_iterator > active_local_element_ptr_range() const override
Definition: distributed_mesh.h:373
libMesh::DistributedMesh::parallel_max_node_id
dof_id_type parallel_max_node_id() const
Definition: distributed_mesh.C:291
libMesh::DistributedMesh::not_active_elements_begin
virtual element_iterator not_active_elements_begin() override
libMesh::DistributedMesh::const_node_iterator_imp
mapvector< Node *, dof_id_type >::const_veclike_iterator const_node_iterator_imp
Definition: distributed_mesh.h:608
libMesh::DistributedMesh::pid_elements_begin
virtual element_iterator pid_elements_begin(processor_id_type proc_id) override
Iterate over all elements with a specified processor id.
libMesh::DistributedMesh::add_point
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.
Definition: distributed_mesh.C:625
libMesh::DistributedMesh::node_ptr_range
virtual SimpleRange< const_node_iterator > node_ptr_range() const override
Definition: distributed_mesh.h:502
libMesh::DistributedMesh::_max_node_id
dof_id_type _max_node_id
Definition: distributed_mesh.h:570
libMesh::DistributedMesh::libmesh_assert_valid_parallel_object_ids
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.
Definition: distributed_mesh.C:912
libMesh::DistributedMesh::parallel_max_unique_id
virtual unique_id_type parallel_max_unique_id() const override
Definition: distributed_mesh.C:264
libMesh::DistributedMesh::fix_broken_node_and_element_numbering
virtual void fix_broken_node_and_element_numbering() override
There is no reason for a user to ever call this function.
Definition: distributed_mesh.C:1365
libMesh
The libMesh namespace provides an interface to certain functionality in the library.
Definition: factoryfunction.C:55
libMesh::DistributedMesh::own_node
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...
Definition: distributed_mesh.C:649
libMesh::DistributedMesh::active_pid_elements_end
virtual element_iterator active_pid_elements_end(processor_id_type proc_id) override
libMesh::DistributedMesh::active_element_ptr_range
virtual SimpleRange< element_iterator > active_element_ptr_range() override
Definition: distributed_mesh.h:315
libMesh::DistributedMesh::local_nodes_end
virtual node_iterator local_nodes_end() override
libMesh::DistributedMesh::active_type_elements_end
virtual element_iterator active_type_elements_end(ElemType type) override
libMesh::DistributedMesh::active_local_subdomain_elements_begin
virtual element_iterator active_local_subdomain_elements_begin(subdomain_id_type subdomain_id) override
libMesh::DistributedMesh::max_node_id
virtual dof_id_type max_node_id() const override
Definition: distributed_mesh.h:230
libMesh::DistributedMesh::semilocal_elements_end
virtual element_iterator semilocal_elements_end() override
libMesh::DistributedMesh::local_level_elements_begin
virtual element_iterator local_level_elements_begin(unsigned int level) override
libMesh::DistributedMesh::pid_nodes_begin
virtual node_iterator pid_nodes_begin(processor_id_type proc_id) override
Iterate over nodes with processor_id() == proc_id.
libMesh::DistributedMesh::flagged_pid_elements_end
virtual element_iterator flagged_pid_elements_end(unsigned char rflag, processor_id_type pid) override
libMesh::DistributedMesh::node_ptr_range
virtual SimpleRange< node_iterator > node_ptr_range() override
Definition: distributed_mesh.h:501
libMesh::DistributedMesh::is_serial_on_zero
virtual bool is_serial_on_zero() const override
Definition: distributed_mesh.h:126
libMesh::DistributedMesh::active_subdomain_set_elements_end
virtual element_iterator active_subdomain_set_elements_end(std::set< subdomain_id_type > ss) override
libMesh::DistributedMesh::active_subdomain_elements_ptr_range
virtual SimpleRange< const_element_iterator > active_subdomain_elements_ptr_range(subdomain_id_type subdomain_id) const override
Definition: distributed_mesh.h:445
libMesh::boundary_id_type
int8_t boundary_id_type
Definition: id_types.h:51
libMesh::DistributedMesh::active_pid_elements_begin
virtual element_iterator active_pid_elements_begin(processor_id_type proc_id) override
libMesh::DistributedMesh::not_subactive_elements_end
virtual element_iterator not_subactive_elements_end() override
libMesh::DistributedMesh::ghost_elements_begin
virtual element_iterator ghost_elements_begin() override
Iterate over "ghost" elements in the Mesh.
libMesh::DistributedMesh::not_local_elements_begin
virtual element_iterator not_local_elements_begin() override
dim
unsigned int dim
Definition: adaptivity_ex3.C:113
libMesh::DistributedMesh::not_level_elements_end
virtual element_iterator not_level_elements_end(unsigned int level) override
libMesh::DistributedMesh::not_level_elements_begin
virtual element_iterator not_level_elements_begin(unsigned int level) override
libMesh::DistributedMesh::bid_nodes_end
virtual node_iterator bid_nodes_end(boundary_id_type bndry_id) override
libMesh::DistributedMesh::libmesh_assert_valid_parallel_flags
void libmesh_assert_valid_parallel_flags() const
Verify refinement_flag and p_refinement_flag consistency of our elements containers.
Definition: distributed_mesh.C:999
libMesh::DistributedMesh::operator=
DistributedMesh & operator=(const DistributedMesh &)=delete
Copy and move assignment are not allowed.
libMesh::DistributedMesh::nodes_begin
virtual node_iterator nodes_begin() override
Node iterator accessor functions.
libMesh::DistributedMesh::active_local_elements_end
virtual element_iterator active_local_elements_end() override
libMesh::DistributedMesh::_next_free_unpartitioned_node_id
dof_id_type _next_free_unpartitioned_node_id
Definition: distributed_mesh.h:578
libMesh::DistributedMesh::local_node_ptr_range
virtual SimpleRange< const_node_iterator > local_node_ptr_range() const override
Definition: distributed_mesh.h:514
libMesh::DistributedMesh::parallel_n_elem
virtual dof_id_type parallel_n_elem() const override
Definition: distributed_mesh.C:220
libMesh::DistributedMesh::renumber_nodes_and_elements
virtual void renumber_nodes_and_elements() override
Remove nullptr elements from arrays.
Definition: distributed_mesh.C:1279
libMesh::DistributedMesh::redistribute
virtual void redistribute() override
Redistribute elements between processors.
Definition: distributed_mesh.C:871
libMesh::DistributedMesh::n_nodes
virtual dof_id_type n_nodes() const override
Definition: distributed_mesh.h:229
libMesh::DistributedMesh::renumber_elem
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...
Definition: distributed_mesh.C:610
libMesh::DistributedMesh::active_elements_begin
virtual element_iterator active_elements_begin() override
Active, local, and negation forms of the element iterators described above.
libMesh::DistributedMesh::not_subactive_elements_begin
virtual element_iterator not_subactive_elements_begin() override
libMesh::DistributedMesh::clear
virtual void clear() override
Clear all internal data.
Definition: distributed_mesh.C:832
libMesh::DistributedMesh::active_semilocal_elements_end
virtual element_iterator active_semilocal_elements_end() override
libMesh::DistributedMesh::renumber_node
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 ...
Definition: distributed_mesh.C:797
libMesh::DistributedMesh::delete_elem
virtual void delete_elem(Elem *e) override
Removes element e from the mesh.
Definition: distributed_mesh.C:582
libMesh::DistributedMesh::allgather
virtual void allgather() override
Gathers all elements and nodes of the mesh onto every processor.
Definition: distributed_mesh.C:1495
libMesh::DistributedMesh::_is_serial
bool _is_serial
A boolean remembering whether we're serialized or not.
Definition: distributed_mesh.h:560
libMesh::DistributedMesh::n_elem
virtual dof_id_type n_elem() const override
Definition: distributed_mesh.h:232
libMesh::DistributedMesh::clear_extra_ghost_elems
virtual void clear_extra_ghost_elems()
Clears extra ghost elements.
Definition: distributed_mesh.h:216
libMesh::DistributedMesh::gather_to_zero
virtual void gather_to_zero() override
Gathers all elements and nodes of the mesh onto processor zero.
Definition: distributed_mesh.C:1526
libMesh::DofObject::invalid_id
static const dof_id_type invalid_id
An invalid id to distinguish an uninitialized DofObject.
Definition: dof_object.h:421
libMesh::DistributedMesh::insert_elem
virtual Elem * insert_elem(Elem *e) override
Insert elem e to the element array, preserving its id and replacing/deleting any existing element wit...
Definition: distributed_mesh.C:540
libMesh::DistributedMesh::type_elements_end
virtual element_iterator type_elements_end(ElemType type) override
libMesh::DistributedMesh::local_nodes_begin
virtual node_iterator local_nodes_begin() override
Iterate over local nodes (nodes whose processor_id() matches the current processor).
libMesh::Point
A Point defines a location in LIBMESH_DIM dimensional Real space.
Definition: point.h:38
libMesh::processor_id_type
uint8_t processor_id_type
Definition: id_types.h:104
libMesh::DistributedMesh::ancestor_elements_begin
virtual element_iterator ancestor_elements_begin() override
Iterate over elements for which elem->ancestor() is true.
libMesh::DistributedMesh::add_extra_ghost_elem
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...
Definition: distributed_mesh.C:1475
libMesh::DistributedMesh::set_distributed
virtual void set_distributed() override
Asserts that not all elements and nodes of the mesh necessarily exist on the current processor.
Definition: distributed_mesh.h:133
libMesh::DistributedMesh::add_elem
virtual Elem * add_elem(Elem *e) override
Add elem e to the end of the element array.
Definition: distributed_mesh.C:436
libMesh::Node
A Node is like a Point, but with more information.
Definition: node.h:52
libMesh::DistributedMesh::update_post_partitioning
virtual void update_post_partitioning() override
Recalculate cached data after elements and nodes have been repartitioned.
Definition: distributed_mesh.C:901
libMesh::DistributedMesh::_next_free_local_elem_id
dof_id_type _next_free_local_elem_id
Definition: distributed_mesh.h:576
libMesh::DistributedMesh::bnd_nodes_begin
virtual node_iterator bnd_nodes_begin() override
Iterate over nodes for which BoundaryInfo::n_boundary_ids(node) > 0.
libMesh::DistributedMesh::delete_remote_elements
virtual void delete_remote_elements() override
Deletes all nonlocal elements of the mesh except for "ghosts" which touch a local element,...
Definition: distributed_mesh.C:1406
libMesh::DistributedMesh::local_not_level_elements_begin
virtual element_iterator local_not_level_elements_begin(unsigned int level) override
libMesh::DistributedMesh::DistributedMesh
DistributedMesh(const Parallel::Communicator &comm_in, unsigned char dim=1)
Constructor.
Definition: distributed_mesh.C:40
libMesh::DistributedMesh::level_elements_end
virtual element_iterator level_elements_end(unsigned int level) override
libMesh::DistributedMesh::pid_nodes_end
virtual node_iterator pid_nodes_end(processor_id_type proc_id) override
libMesh::DistributedMesh::flagged_pid_elements_begin
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.
libMesh::DistributedMesh::evaluable_elements_end
virtual element_iterator evaluable_elements_end(const DofMap &dof_map, unsigned int var_num=libMesh::invalid_uint) override
libMesh::DistributedMesh::nodes_end
virtual node_iterator nodes_end() override
libMesh::mapvector
This mapvector templated class is intended to provide the performance characteristics of a std::map w...
Definition: mapvector.h:39
libMesh::DistributedMesh::facelocal_elements_end
virtual element_iterator facelocal_elements_end() override
libMesh::DistributedMesh::active_local_elements_begin
virtual element_iterator active_local_elements_begin() override
libMesh::DistributedMesh::~DistributedMesh
virtual ~DistributedMesh()
Destructor.
libMesh::DistributedMesh::active_local_subdomain_elements_ptr_range
virtual SimpleRange< const_element_iterator > active_local_subdomain_elements_ptr_range(subdomain_id_type subdomain_id) const override
Definition: distributed_mesh.h:436
libMesh::DistributedMesh::pid_elements_end
virtual element_iterator pid_elements_end(processor_id_type proc_id) override
libMesh::DistributedMesh::element_ptr_range
virtual SimpleRange< const_element_iterator > element_ptr_range() const override
Definition: distributed_mesh.h:309
libMesh::DistributedMesh::is_replicated
virtual bool is_replicated() const override
Definition: distributed_mesh.h:141
libMesh::DistributedMesh::unpartitioned_elements_begin
virtual element_iterator unpartitioned_elements_begin() override
Iterate over unpartitioned elements in the Mesh.
libMesh::UnstructuredMesh
The UnstructuredMesh class is derived from the MeshBase class.
Definition: unstructured_mesh.h:48
libMesh::DistributedMesh::_next_free_unpartitioned_elem_id
dof_id_type _next_free_unpartitioned_elem_id
Definition: distributed_mesh.h:578
libMesh::DistributedMesh::_n_nodes
dof_id_type _n_nodes
Cached data from the last renumber_nodes_and_elements call.
Definition: distributed_mesh.h:570
libMesh::DistributedMesh::local_elements_end
virtual element_iterator local_elements_end() override
libMesh::DistributedMesh::const_elem_iterator_imp
mapvector< Elem *, dof_id_type >::const_veclike_iterator const_elem_iterator_imp
Definition: distributed_mesh.h:601
libMesh::DistributedMesh::flagged_elements_begin
virtual element_iterator flagged_elements_begin(unsigned char rflag) override
Iterate over all elements with a specified refinement flag.
libMesh::DistributedMesh::renumber_dof_objects
dof_id_type renumber_dof_objects(mapvector< T *, dof_id_type > &)
Renumber a parallel objects container.
Definition: distributed_mesh.C:1029
libMesh::DistributedMesh::active_unpartitioned_elements_begin
virtual element_iterator active_unpartitioned_elements_begin() override
Iterate over active unpartitioned elements in the Mesh.
libMesh::DistributedMesh::reserve_elem
virtual void reserve_elem(const dof_id_type) override
Reserves space for a known number of elements.
Definition: distributed_mesh.h:235
libMesh::DistributedMesh::query_elem_ptr
virtual const Elem * query_elem_ptr(const dof_id_type i) const override
Definition: distributed_mesh.C:404
libMesh::DistributedMesh::type_elements_begin
virtual element_iterator type_elements_begin(ElemType type) override
Iterate over all elements with a specified geometric type.
libMesh::DistributedMesh::elem_ptr
virtual const Elem * elem_ptr(const dof_id_type i) const override
Definition: distributed_mesh.C:382
libMesh::DistributedMesh::active_element_ptr_range
virtual SimpleRange< const_element_iterator > active_element_ptr_range() const override
Definition: distributed_mesh.h:316
libMesh::DistributedMesh::active_subdomain_elements_begin
virtual element_iterator active_subdomain_elements_begin(subdomain_id_type subdomain_id) override
libMesh::DistributedMesh::clone
virtual std::unique_ptr< MeshBase > clone() const override
Virtual copy-constructor, creates a copy of this mesh.
Definition: distributed_mesh.h:89
libMesh::DistributedMesh::active_nodes_begin
virtual node_iterator active_nodes_begin() override
Iterate over only the active nodes in the Mesh.
libMesh::DistributedMesh::active_semilocal_elements_begin
virtual element_iterator active_semilocal_elements_begin() override
libMesh::DofMap
This class handles the numbering of degrees of freedom on a mesh.
Definition: dof_map.h:176
libMesh::DistributedMesh::element_ptr_range
virtual SimpleRange< element_iterator > element_ptr_range() override
Definition: distributed_mesh.h:308
libMesh::DistributedMesh::libmesh_assert_valid_parallel_p_levels
void libmesh_assert_valid_parallel_p_levels() const
Verify p_level consistency of our elements containers.
Definition: distributed_mesh.C:976
libMesh::DistributedMesh::evaluable_elements_begin
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...
libMesh::DistributedMesh::libmesh_assert_valid_parallel_ids
virtual void libmesh_assert_valid_parallel_ids() const override
Verify id and processor_id consistency of our elements and nodes containers.
Definition: distributed_mesh.C:968
libMesh::DistributedMesh::extra_ghost_elems
const std::set< Elem * > & extra_ghost_elems() const
Const accessor to the ghosted elements.
Definition: distributed_mesh.h:226
libMesh::DistributedMesh::active_local_subdomain_elements_ptr_range
virtual SimpleRange< element_iterator > active_local_subdomain_elements_ptr_range(subdomain_id_type subdomain_id) override
Definition: distributed_mesh.h:434
libMesh::DistributedMesh::semilocal_elements_begin
virtual element_iterator semilocal_elements_begin() override
Iterate over elements for which elem->is_semilocal() is true for the current processor.
libMesh::DistributedMesh::ancestor_elements_end
virtual element_iterator ancestor_elements_end() override
libMesh::DistributedMesh::active_subdomain_set_elements_ptr_range
virtual SimpleRange< element_iterator > active_subdomain_set_elements_ptr_range(std::set< subdomain_id_type > ss) override
Definition: distributed_mesh.h:452
libMesh::DofObject::invalid_processor_id
static const processor_id_type invalid_processor_id
An invalid processor_id to distinguish DoFs that have not been assigned to a processor.
Definition: dof_object.h:432
libMesh::DistributedMesh::not_local_elements_end
virtual element_iterator not_local_elements_end() override
libMesh::Elem
This is the base class from which all geometric element types are derived.
Definition: elem.h:100
libMesh::DistributedMesh::point
virtual const Point & point(const dof_id_type i) const override
Definition: distributed_mesh.C:321
libMesh::DistributedMesh::bid_nodes_begin
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.
libMesh::DistributedMesh::update_parallel_id_counts
virtual void update_parallel_id_counts() override
Updates parallel caches so that methods like n_elem() accurately reflect changes on other processors.
Definition: distributed_mesh.C:178
libMesh::DistributedMesh::is_serial
virtual bool is_serial() const override
Definition: distributed_mesh.h:119
libMesh::DistributedMesh::active_unpartitioned_elements_end
virtual element_iterator active_unpartitioned_elements_end() override
libMesh::DistributedMesh::elements_begin
virtual element_iterator elements_begin() override
Elem iterator accessor functions.
libMesh::DistributedMesh::_next_unpartitioned_unique_id
unique_id_type _next_unpartitioned_unique_id
The next available unique id for assigning ids to unpartitioned DOF objects.
Definition: distributed_mesh.h:585
libMesh::DistributedMesh::_is_serial_on_proc_0
bool _is_serial_on_proc_0
A boolean remembering whether we're serialized to proc 0 or not.
Definition: distributed_mesh.h:565
libMesh::DistributedMesh::active_not_local_elements_end
virtual element_iterator active_not_local_elements_end() override
libMesh::DistributedMesh::active_subdomain_elements_end
virtual element_iterator active_subdomain_elements_end(subdomain_id_type subdomain_id) override
libMesh::DistributedMesh::subactive_elements_begin
virtual element_iterator subactive_elements_begin() override
Iterate over elements for which elem->subactive() is true.
libMesh::TestClass
Definition: id_types.h:33
libMesh::DistributedMesh::_elements
mapvector< Elem *, dof_id_type > _elements
The elements in the mesh.
Definition: distributed_mesh.h:555
libMesh::DistributedMesh::local_node_ptr_range
virtual SimpleRange< node_iterator > local_node_ptr_range() override
Definition: distributed_mesh.h:513
libMesh::DistributedMesh::local_not_level_elements_end
virtual element_iterator local_not_level_elements_end(unsigned int level) override
libMesh::DistributedMesh::not_ancestor_elements_end
virtual element_iterator not_ancestor_elements_end() override
libMesh::DistributedMesh::add_node
virtual Node * add_node(Node *n) override
Add Node n to the end of the vertex array.
Definition: distributed_mesh.C:663
libMesh::DistributedMesh::bnd_nodes_end
virtual node_iterator bnd_nodes_end() override
libMesh::DistributedMesh::evaluable_nodes_end
virtual node_iterator evaluable_nodes_end(const DofMap &dof_map, unsigned int var_num=libMesh::invalid_uint) override
libMesh::DistributedMesh::parallel_n_nodes
virtual dof_id_type parallel_n_nodes() const override
Definition: distributed_mesh.C:278
libMesh::DistributedMesh::insert_node
virtual Node * insert_node(Node *n) override
Calls add_node().
Definition: distributed_mesh.C:761
libMesh::DistributedMesh::active_subdomain_set_elements_ptr_range
virtual SimpleRange< const_element_iterator > active_subdomain_set_elements_ptr_range(std::set< subdomain_id_type > ss) const override
Definition: distributed_mesh.h:454
libMesh::DistributedMesh::local_elements_begin
virtual element_iterator local_elements_begin() override
libMesh::mapvector::const_veclike_iterator
Definition: mapvector.h:83
libMesh::DistributedMesh::_next_free_local_node_id
dof_id_type _next_free_local_node_id
Guaranteed globally unused IDs for use when adding new nodes or elements.
Definition: distributed_mesh.h:576
libMesh::DistributedMesh::unpartitioned_elements_end
virtual element_iterator unpartitioned_elements_end() override
libMesh::DistributedMesh::active_nodes_end
virtual node_iterator active_nodes_end() override
libMesh::DistributedMesh
The DistributedMesh class is derived from the MeshBase class, and is intended to provide identical fu...
Definition: distributed_mesh.h:50
libMesh::DistributedMesh::subactive_elements_end
virtual element_iterator subactive_elements_end() override
libMesh::DistributedMesh::reserve_nodes
virtual void reserve_nodes(const dof_id_type) override
Reserves space for a known number of nodes.
Definition: distributed_mesh.h:231
libMesh::DistributedMesh::flagged_elements_end
virtual element_iterator flagged_elements_end(unsigned char rflag) override
libMesh::DistributedMesh::n_active_elem
virtual dof_id_type n_active_elem() const override
Definition: distributed_mesh.C:1385
libMesh::DistributedMesh::_n_elem
dof_id_type _n_elem
Definition: distributed_mesh.h:570
libMesh::DistributedMesh::level_elements_begin
virtual element_iterator level_elements_begin(unsigned int level) override
Iterate over elements of a given level.
libMesh::DistributedMesh::ghost_elements_end
virtual element_iterator ghost_elements_end() override
libMesh::ElemType
ElemType
Defines an enum for geometric element types.
Definition: enum_elem_type.h:33
libMesh::DistributedMesh::node_ptr
virtual const Node * node_ptr(const dof_id_type i) const override
Definition: distributed_mesh.C:328
libMesh::DistributedMesh::node_iterator_imp
mapvector< Node *, dof_id_type >::veclike_iterator node_iterator_imp
Typedefs for the container implementation.
Definition: distributed_mesh.h:607