libMesh
replicated_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_REPLICATED_MESH_H
21 #define LIBMESH_REPLICATED_MESH_H
22 
23 // Local Includes
24 #include "libmesh/unstructured_mesh.h"
25 #include "libmesh/boundary_info.h"
26 #include "libmesh/auto_ptr.h" // libmesh_make_unique
27 
28 // C++ Includes
29 #include <cstddef>
30 #include <unordered_map>
31 
32 namespace libMesh
33 {
34 
48 {
49 public:
50 
56  explicit
57  ReplicatedMesh (const Parallel::Communicator & comm_in,
58  unsigned char dim=1);
59 
64  ReplicatedMesh (const UnstructuredMesh & other_mesh);
65 
70  ReplicatedMesh (const ReplicatedMesh & other_mesh);
71 
75  ReplicatedMesh(ReplicatedMesh &&) = default;
76 
80  ReplicatedMesh & operator= (const ReplicatedMesh &) = delete;
82 
86  virtual std::unique_ptr<MeshBase> clone () const override
87  { return libmesh_make_unique<ReplicatedMesh>(*this); }
88 
92  virtual ~ReplicatedMesh();
93 
97  virtual void clear() override;
98 
102  virtual void renumber_nodes_and_elements () override;
103 
104  virtual dof_id_type n_nodes () const override
105  { return cast_int<dof_id_type>(_nodes.size()); }
106 
107  virtual dof_id_type parallel_n_nodes () const override
108  { return cast_int<dof_id_type>(_nodes.size()); }
109 
110  virtual dof_id_type max_node_id () const override
111  { return cast_int<dof_id_type>(_nodes.size()); }
112 
113  virtual void reserve_nodes (const dof_id_type nn) override
114  { _nodes.reserve (nn); }
115 
116  virtual dof_id_type n_elem () const override
117  { return cast_int<dof_id_type>(_elements.size()); }
118 
119  virtual dof_id_type parallel_n_elem () const override
120  { return cast_int<dof_id_type>(_elements.size()); }
121 
122  virtual dof_id_type n_active_elem () const override;
123 
124  virtual dof_id_type max_elem_id () const override
125  { return cast_int<dof_id_type>(_elements.size()); }
126 
127 #ifdef LIBMESH_ENABLE_UNIQUE_ID
128  virtual unique_id_type parallel_max_unique_id () const override;
129 #endif
130 
131  virtual void reserve_elem (const dof_id_type ne) override
132  { _elements.reserve (ne); }
133 
134  virtual void update_parallel_id_counts () override;
135 
136  virtual const Point & point (const dof_id_type i) const override;
137 
138  virtual const Node * node_ptr (const dof_id_type i) const override;
139  virtual Node * node_ptr (const dof_id_type i) override;
140 
141  virtual const Node * query_node_ptr (const dof_id_type i) const override;
142  virtual Node * query_node_ptr (const dof_id_type i) override;
143 
144  virtual const Elem * elem_ptr (const dof_id_type i) const override;
145  virtual Elem * elem_ptr (const dof_id_type i) override;
146 
147  virtual const Elem * query_elem_ptr (const dof_id_type i) const override;
148  virtual Elem * query_elem_ptr (const dof_id_type i) override;
149 
153  virtual Node * add_point (const Point & p,
155  const processor_id_type proc_id = DofObject::invalid_processor_id) override;
156  virtual Node * add_node (Node * n) override;
157 
169  virtual Node * insert_node(Node * n) override;
170 
171  virtual void delete_node (Node * n) override;
172  virtual void renumber_node (dof_id_type old_id, dof_id_type new_id) override;
173  virtual Elem * add_elem (Elem * e) override;
174  virtual Elem * insert_elem (Elem * e) override;
175  virtual void delete_elem (Elem * e) override;
176  virtual void renumber_elem (dof_id_type old_id, dof_id_type new_id) override;
177 
184  virtual void fix_broken_node_and_element_numbering () override;
185 
212  void stitch_meshes (const ReplicatedMesh & other_mesh,
213  boundary_id_type this_mesh_boundary,
214  boundary_id_type other_mesh_boundary,
215  Real tol=TOLERANCE,
216  bool clear_stitched_boundary_ids=false,
217  bool verbose=true,
218  bool use_binary_search=true,
219  bool enforce_all_nodes_match_on_boundaries=false);
220 
224  void stitch_surfaces (boundary_id_type boundary_id_1,
225  boundary_id_type boundary_id_2,
226  Real tol=TOLERANCE,
227  bool clear_stitched_boundary_ids=false,
228  bool verbose=true,
229  bool use_binary_search=true,
230  bool enforce_all_nodes_match_on_boundaries=false);
231 
242  std::vector<dof_id_type> get_disconnected_subdomains(std::vector<subdomain_id_type> * subdomain_ids = nullptr) const;
243 
256  std::unordered_map<dof_id_type, std::vector<std::vector<Point>>> get_boundary_points() const;
257 
258 public:
262  virtual element_iterator elements_begin () override;
263  virtual element_iterator elements_end () override;
264  virtual const_element_iterator elements_begin() const override;
265  virtual const_element_iterator elements_end() const override;
268 
269  virtual element_iterator active_elements_begin () override;
270  virtual element_iterator active_elements_end () override;
271  virtual const_element_iterator active_elements_begin() const override;
272  virtual const_element_iterator active_elements_end() const override;
275 
276  virtual element_iterator ancestor_elements_begin () override;
277  virtual element_iterator ancestor_elements_end () override;
278  virtual const_element_iterator ancestor_elements_begin() const override;
279  virtual const_element_iterator ancestor_elements_end() const override;
280 
281  virtual element_iterator subactive_elements_begin () override;
282  virtual element_iterator subactive_elements_end () override;
283  virtual const_element_iterator subactive_elements_begin() const override;
284  virtual const_element_iterator subactive_elements_end() const override;
285 
286  virtual element_iterator not_active_elements_begin () override;
287  virtual element_iterator not_active_elements_end () override;
288  virtual const_element_iterator not_active_elements_begin() const override;
289  virtual const_element_iterator not_active_elements_end() const override;
290 
291  virtual element_iterator not_ancestor_elements_begin () override;
292  virtual element_iterator not_ancestor_elements_end () override;
293  virtual const_element_iterator not_ancestor_elements_begin() const override;
294  virtual const_element_iterator not_ancestor_elements_end() const override;
295 
296  virtual element_iterator not_subactive_elements_begin () override;
297  virtual element_iterator not_subactive_elements_end () override;
298  virtual const_element_iterator not_subactive_elements_begin() const override;
299  virtual const_element_iterator not_subactive_elements_end() const override;
300 
301  virtual element_iterator local_elements_begin () override;
302  virtual element_iterator local_elements_end () override;
303  virtual const_element_iterator local_elements_begin () const override;
304  virtual const_element_iterator local_elements_end () const override;
305 
306  virtual element_iterator semilocal_elements_begin () override;
307  virtual element_iterator semilocal_elements_end () override;
308  virtual const_element_iterator semilocal_elements_begin () const override;
309  virtual const_element_iterator semilocal_elements_end () const override;
310 
311  virtual element_iterator active_semilocal_elements_begin () override;
312  virtual element_iterator active_semilocal_elements_end () override;
313  virtual const_element_iterator active_semilocal_elements_begin () const override;
314  virtual const_element_iterator active_semilocal_elements_end () const override;
315 
316  virtual element_iterator facelocal_elements_begin () override;
317  virtual element_iterator facelocal_elements_end () override;
318  virtual const_element_iterator facelocal_elements_begin () const override;
319  virtual const_element_iterator facelocal_elements_end () const override;
320 
321  virtual element_iterator not_local_elements_begin () override;
322  virtual element_iterator not_local_elements_end () override;
323  virtual const_element_iterator not_local_elements_begin () const override;
324  virtual const_element_iterator not_local_elements_end () const override;
325 
326  virtual element_iterator active_local_elements_begin () override;
327  virtual element_iterator active_local_elements_end () override;
328  virtual const_element_iterator active_local_elements_begin () const override;
329  virtual const_element_iterator active_local_elements_end () const override;
332 
333  virtual element_iterator active_not_local_elements_begin () override;
334  virtual element_iterator active_not_local_elements_end () override;
335  virtual const_element_iterator active_not_local_elements_begin () const override;
336  virtual const_element_iterator active_not_local_elements_end () const override;
337 
338  virtual element_iterator level_elements_begin (unsigned int level) override;
339  virtual element_iterator level_elements_end (unsigned int level) override;
340  virtual const_element_iterator level_elements_begin (unsigned int level) const override;
341  virtual const_element_iterator level_elements_end (unsigned int level) const override;
342 
343  virtual element_iterator not_level_elements_begin (unsigned int level) override;
344  virtual element_iterator not_level_elements_end (unsigned int level) override;
345  virtual const_element_iterator not_level_elements_begin (unsigned int level) const override;
346  virtual const_element_iterator not_level_elements_end (unsigned int level) const override;
347 
348  virtual element_iterator local_level_elements_begin (unsigned int level) override;
349  virtual element_iterator local_level_elements_end (unsigned int level) override;
350  virtual const_element_iterator local_level_elements_begin (unsigned int level) const override;
351  virtual const_element_iterator local_level_elements_end (unsigned int level) const override;
352 
353  virtual element_iterator local_not_level_elements_begin (unsigned int level) override;
354  virtual element_iterator local_not_level_elements_end (unsigned int level) override;
355  virtual const_element_iterator local_not_level_elements_begin (unsigned int level) const override;
356  virtual const_element_iterator local_not_level_elements_end (unsigned int level) const override;
357 
358  virtual element_iterator pid_elements_begin (processor_id_type proc_id) override;
359  virtual element_iterator pid_elements_end (processor_id_type proc_id) override;
360  virtual const_element_iterator pid_elements_begin (processor_id_type proc_id) const override;
361  virtual const_element_iterator pid_elements_end (processor_id_type proc_id) const override;
362 
363  virtual element_iterator type_elements_begin (ElemType type) override;
364  virtual element_iterator type_elements_end (ElemType type) override;
365  virtual const_element_iterator type_elements_begin (ElemType type) const override;
366  virtual const_element_iterator type_elements_end (ElemType type) const override;
367 
368  virtual element_iterator active_type_elements_begin (ElemType type) override;
369  virtual element_iterator active_type_elements_end (ElemType type) override;
370  virtual const_element_iterator active_type_elements_begin (ElemType type) const override;
371  virtual const_element_iterator active_type_elements_end (ElemType type) const override;
372 
373  virtual element_iterator active_pid_elements_begin (processor_id_type proc_id) override;
374  virtual element_iterator active_pid_elements_end (processor_id_type proc_id) override;
375  virtual const_element_iterator active_pid_elements_begin (processor_id_type proc_id) const override;
376  virtual const_element_iterator active_pid_elements_end (processor_id_type proc_id) const override;
377 
378  virtual element_iterator unpartitioned_elements_begin () override;
379  virtual element_iterator unpartitioned_elements_end () override;
380  virtual const_element_iterator unpartitioned_elements_begin () const override;
381  virtual const_element_iterator unpartitioned_elements_end () const override;
382 
383  virtual element_iterator active_unpartitioned_elements_begin () override;
384  virtual element_iterator active_unpartitioned_elements_end () override;
385  virtual const_element_iterator active_unpartitioned_elements_begin () const override;
386  virtual const_element_iterator active_unpartitioned_elements_end () const override;
387 
388  virtual element_iterator active_local_subdomain_elements_begin (subdomain_id_type subdomain_id) override;
389  virtual element_iterator active_local_subdomain_elements_end (subdomain_id_type subdomain_id) override;
390  virtual const_element_iterator active_local_subdomain_elements_begin (subdomain_id_type subdomain_id) const override;
391  virtual const_element_iterator active_local_subdomain_elements_end (subdomain_id_type subdomain_id) const override;
393  { return {active_local_subdomain_elements_begin(subdomain_id), active_local_subdomain_elements_end(subdomain_id)}; }
395  { return {active_local_subdomain_elements_begin(subdomain_id), active_local_subdomain_elements_end(subdomain_id)}; }
396 
397  virtual element_iterator active_subdomain_elements_begin (subdomain_id_type subdomain_id) override;
398  virtual element_iterator active_subdomain_elements_end (subdomain_id_type subdomain_id) override;
399  virtual const_element_iterator active_subdomain_elements_begin (subdomain_id_type subdomain_id) const override;
400  virtual const_element_iterator active_subdomain_elements_end (subdomain_id_type subdomain_id) const override;
402  { return {active_subdomain_elements_begin(subdomain_id), active_subdomain_elements_end(subdomain_id)}; }
404  { return {active_subdomain_elements_begin(subdomain_id), active_subdomain_elements_end(subdomain_id)}; }
405 
406  virtual element_iterator active_subdomain_set_elements_begin (std::set<subdomain_id_type> ss) override;
407  virtual element_iterator active_subdomain_set_elements_end (std::set<subdomain_id_type> ss) override;
408  virtual const_element_iterator active_subdomain_set_elements_begin (std::set<subdomain_id_type> ss) const override;
409  virtual const_element_iterator active_subdomain_set_elements_end (std::set<subdomain_id_type> ss) const override;
410  virtual SimpleRange<element_iterator> active_subdomain_set_elements_ptr_range(std::set<subdomain_id_type> ss) override
412  virtual SimpleRange<const_element_iterator> active_subdomain_set_elements_ptr_range(std::set<subdomain_id_type> ss) const override
414 
415  virtual element_iterator ghost_elements_begin () override;
416  virtual element_iterator ghost_elements_end () override;
417  virtual const_element_iterator ghost_elements_begin () const override;
418  virtual const_element_iterator ghost_elements_end () const override;
419 
420  virtual element_iterator
421  evaluable_elements_begin (const DofMap & dof_map,
422  unsigned int var_num = libMesh::invalid_uint) override;
423 
424  virtual element_iterator
425  evaluable_elements_end (const DofMap & dof_map,
426  unsigned int var_num = libMesh::invalid_uint) override;
427 
428  virtual const_element_iterator
429  evaluable_elements_begin (const DofMap & dof_map,
430  unsigned int var_num = libMesh::invalid_uint) const override;
431 
432  virtual const_element_iterator
433  evaluable_elements_end (const DofMap & dof_map,
434  unsigned int var_num = libMesh::invalid_uint) const override;
435 
436 #ifdef LIBMESH_ENABLE_AMR
437  virtual element_iterator flagged_elements_begin (unsigned char rflag) override;
438  virtual element_iterator flagged_elements_end (unsigned char rflag) override;
439  virtual const_element_iterator flagged_elements_begin (unsigned char rflag) const override;
440  virtual const_element_iterator flagged_elements_end (unsigned char rflag) const override;
441 
442  virtual element_iterator flagged_pid_elements_begin (unsigned char rflag,
443  processor_id_type pid) override;
444  virtual element_iterator flagged_pid_elements_end (unsigned char rflag,
445  processor_id_type pid) override;
446  virtual const_element_iterator flagged_pid_elements_begin (unsigned char rflag,
447  processor_id_type pid) const override;
448  virtual const_element_iterator flagged_pid_elements_end (unsigned char rflag,
449  processor_id_type pid) const override;
450 #endif // LIBMESH_ENABLE_AMR
451 
455  virtual node_iterator nodes_begin () override;
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;
459  virtual SimpleRange<node_iterator> node_ptr_range() override { return {nodes_begin(), nodes_end()}; }
460  virtual SimpleRange<const_node_iterator> node_ptr_range() const override { return {nodes_begin(), nodes_end()}; }
461 
462  virtual node_iterator active_nodes_begin () override;
463  virtual node_iterator active_nodes_end () override;
464  virtual const_node_iterator active_nodes_begin () const override;
465  virtual const_node_iterator active_nodes_end () const override;
466 
467  virtual node_iterator local_nodes_begin () override;
468  virtual node_iterator local_nodes_end () override;
469  virtual const_node_iterator local_nodes_begin () const override;
470  virtual const_node_iterator local_nodes_end () const override;
473 
474  virtual node_iterator pid_nodes_begin (processor_id_type proc_id) override;
475  virtual node_iterator pid_nodes_end (processor_id_type proc_id) override;
476  virtual const_node_iterator pid_nodes_begin (processor_id_type proc_id) const override;
477  virtual const_node_iterator pid_nodes_end (processor_id_type proc_id) const override;
478 
479  virtual node_iterator bid_nodes_begin (boundary_id_type bndry_id) override;
480  virtual node_iterator bid_nodes_end (boundary_id_type bndry_id) override;
481  virtual const_node_iterator bid_nodes_begin (boundary_id_type bndry_id) const override;
482  virtual const_node_iterator bid_nodes_end (boundary_id_type bndry_id) const override;
483 
484  virtual node_iterator bnd_nodes_begin () override;
485  virtual node_iterator bnd_nodes_end () override;
486  virtual const_node_iterator bnd_nodes_begin () const override;
487  virtual const_node_iterator bnd_nodes_end () const override;
488 
489  virtual node_iterator
490  evaluable_nodes_begin (const DofMap & dof_map,
491  unsigned int var_num = libMesh::invalid_uint) override;
492  virtual node_iterator
493  evaluable_nodes_end (const DofMap & dof_map,
494  unsigned int var_num = libMesh::invalid_uint) override;
495  virtual const_node_iterator
496  evaluable_nodes_begin (const DofMap & dof_map,
497  unsigned int var_num = libMesh::invalid_uint) const override;
498  virtual const_node_iterator
499  evaluable_nodes_end (const DofMap & dof_map,
500  unsigned int var_num = libMesh::invalid_uint) const override;
501 
502 
503 protected:
504 
508  std::vector<Node *> _nodes;
509 
513  std::vector<Elem *> _elements;
514 
515 private:
516 
521  void stitching_helper (const ReplicatedMesh * other_mesh,
522  boundary_id_type boundary_id_1,
523  boundary_id_type boundary_id_2,
524  Real tol,
525  bool clear_stitched_boundary_ids,
526  bool verbose,
527  bool use_binary_search,
528  bool enforce_all_nodes_match_on_boundaries,
529  bool skip_find_neighbors);
530 
535  typedef std::vector<Elem *>::iterator elem_iterator_imp;
536  typedef std::vector<Elem *>::const_iterator const_elem_iterator_imp;
537 
542  typedef std::vector<Node *>::iterator node_iterator_imp;
543  typedef std::vector<Node *>::const_iterator const_node_iterator_imp;
544 };
545 
546 } // namespace libMesh
547 
548 
549 
550 #endif // LIBMESH_REPLICATED_MESH_H
libMesh::ReplicatedMesh::not_subactive_elements_begin
virtual element_iterator not_subactive_elements_begin() override
libMesh::ReplicatedMesh::active_pid_elements_end
virtual element_iterator active_pid_elements_end(processor_id_type proc_id) override
libMesh::ReplicatedMesh::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: replicated_mesh.C:619
libMesh::dof_id_type
uint8_t dof_id_type
Definition: id_types.h:67
libMesh::ReplicatedMesh::element_ptr_range
virtual SimpleRange< element_iterator > element_ptr_range() override
Definition: replicated_mesh.h:266
libMesh::ReplicatedMesh::subactive_elements_end
virtual element_iterator subactive_elements_end() 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::ReplicatedMesh::max_node_id
virtual dof_id_type max_node_id() const override
Definition: replicated_mesh.h:110
libMesh::ReplicatedMesh::active_local_element_ptr_range
virtual SimpleRange< const_element_iterator > active_local_element_ptr_range() const override
Definition: replicated_mesh.h:331
libMesh::ReplicatedMesh::flagged_elements_begin
virtual element_iterator flagged_elements_begin(unsigned char rflag) override
Iterate over all elements with a specified refinement flag.
libMesh::ReplicatedMesh::_nodes
std::vector< Node * > _nodes
The vertices (spatial coordinates) of the mesh.
Definition: replicated_mesh.h:508
libMesh::ReplicatedMesh::local_node_ptr_range
virtual SimpleRange< const_node_iterator > local_node_ptr_range() const override
Definition: replicated_mesh.h:472
libMesh::ReplicatedMesh::_elements
std::vector< Elem * > _elements
The elements in the mesh.
Definition: replicated_mesh.h:513
libMesh::ReplicatedMesh::active_type_elements_begin
virtual element_iterator active_type_elements_begin(ElemType type) override
libMesh::unique_id_type
uint8_t unique_id_type
Definition: id_types.h:86
libMesh::ReplicatedMesh::local_level_elements_end
virtual element_iterator local_level_elements_end(unsigned int level) override
libMesh::ReplicatedMesh::nodes_end
virtual node_iterator nodes_end() override
libMesh::ReplicatedMesh::delete_elem
virtual void delete_elem(Elem *e) override
Removes element e from the mesh.
Definition: replicated_mesh.C:360
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::ReplicatedMesh::parallel_max_unique_id
virtual unique_id_type parallel_max_unique_id() const override
Definition: replicated_mesh.C:629
libMesh::ReplicatedMesh::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: replicated_mesh.C:328
libMesh::ReplicatedMesh::node_ptr
virtual const Node * node_ptr(const dof_id_type i) const override
Definition: replicated_mesh.C:182
libMesh::ReplicatedMesh::pid_elements_end
virtual element_iterator pid_elements_end(processor_id_type proc_id) override
libMesh::ReplicatedMesh::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: replicated_mesh.C:578
libMesh::ReplicatedMesh::not_active_elements_end
virtual element_iterator not_active_elements_end() override
libMesh::ReplicatedMesh::active_subdomain_elements_begin
virtual element_iterator active_subdomain_elements_begin(subdomain_id_type subdomain_id) override
libMesh::ReplicatedMesh::active_nodes_begin
virtual node_iterator active_nodes_begin() override
Iterate over only the active nodes in the Mesh.
libMesh::ReplicatedMesh::pid_nodes_begin
virtual node_iterator pid_nodes_begin(processor_id_type proc_id) override
Iterate over nodes with processor_id() == proc_id.
libMesh::ReplicatedMesh::delete_node
virtual void delete_node(Node *n) override
Removes the Node n from the mesh.
Definition: replicated_mesh.C:539
libMesh
The libMesh namespace provides an interface to certain functionality in the library.
Definition: factoryfunction.C:55
libMesh::ReplicatedMesh::active_elements_begin
virtual element_iterator active_elements_begin() override
Active, local, and negation forms of the element iterators described above.
libMesh::TOLERANCE
static const Real TOLERANCE
Definition: libmesh_common.h:128
libMesh::ReplicatedMesh::add_elem
virtual Elem * add_elem(Elem *e) override
Add elem e to the end of the element array.
Definition: replicated_mesh.C:282
libMesh::ReplicatedMesh::bnd_nodes_end
virtual node_iterator bnd_nodes_end() override
libMesh::ReplicatedMesh::active_semilocal_elements_end
virtual element_iterator active_semilocal_elements_end() override
libMesh::ReplicatedMesh::active_element_ptr_range
virtual SimpleRange< const_element_iterator > active_element_ptr_range() const override
Definition: replicated_mesh.h:274
libMesh::ReplicatedMesh::active_local_element_ptr_range
virtual SimpleRange< element_iterator > active_local_element_ptr_range() override
Definition: replicated_mesh.h:330
libMesh::ReplicatedMesh::local_node_ptr_range
virtual SimpleRange< node_iterator > local_node_ptr_range() override
Definition: replicated_mesh.h:471
libMesh::ReplicatedMesh::ghost_elements_begin
virtual element_iterator ghost_elements_begin() override
Iterate over "ghost" elements in the Mesh.
libMesh::ReplicatedMesh::stitching_helper
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.
Definition: replicated_mesh.C:852
libMesh::ReplicatedMesh::not_local_elements_end
virtual element_iterator not_local_elements_end() override
libMesh::ReplicatedMesh::clear
virtual void clear() override
Clear all internal data.
Definition: replicated_mesh.C:593
libMesh::ReplicatedMesh::const_elem_iterator_imp
std::vector< Elem * >::const_iterator const_elem_iterator_imp
Definition: replicated_mesh.h:536
libMesh::boundary_id_type
int8_t boundary_id_type
Definition: id_types.h:51
dim
unsigned int dim
Definition: adaptivity_ex3.C:113
libMesh::ReplicatedMesh::element_ptr_range
virtual SimpleRange< const_element_iterator > element_ptr_range() const override
Definition: replicated_mesh.h:267
libMesh::ReplicatedMesh::reserve_elem
virtual void reserve_elem(const dof_id_type ne) override
Reserves space for a known number of elements.
Definition: replicated_mesh.h:131
libMesh::ReplicatedMesh::not_active_elements_begin
virtual element_iterator not_active_elements_begin() override
libMesh::ReplicatedMesh::bid_nodes_end
virtual node_iterator bid_nodes_end(boundary_id_type bndry_id) override
libMesh::ReplicatedMesh::node_ptr_range
virtual SimpleRange< const_node_iterator > node_ptr_range() const override
Definition: replicated_mesh.h:460
libMesh::ReplicatedMesh::active_local_elements_begin
virtual element_iterator active_local_elements_begin() override
libMesh::ReplicatedMesh::level_elements_end
virtual element_iterator level_elements_end(unsigned int level) override
libMesh::ReplicatedMesh::unpartitioned_elements_end
virtual element_iterator unpartitioned_elements_end() override
libMesh::ReplicatedMesh
The ReplicatedMesh class is derived from the MeshBase class, and is used to store identical copies of...
Definition: replicated_mesh.h:47
libMesh::ReplicatedMesh::active_subdomain_elements_ptr_range
virtual SimpleRange< element_iterator > active_subdomain_elements_ptr_range(subdomain_id_type subdomain_id) override
Definition: replicated_mesh.h:401
libMesh::ReplicatedMesh::active_element_ptr_range
virtual SimpleRange< element_iterator > active_element_ptr_range() override
Definition: replicated_mesh.h:273
libMesh::ReplicatedMesh::node_ptr_range
virtual SimpleRange< node_iterator > node_ptr_range() override
Definition: replicated_mesh.h:459
libMesh::ReplicatedMesh::active_nodes_end
virtual node_iterator active_nodes_end() override
libMesh::ReplicatedMesh::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::ReplicatedMesh::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::ReplicatedMesh::subactive_elements_begin
virtual element_iterator subactive_elements_begin() override
Iterate over elements for which elem->subactive() is true.
libMesh::ReplicatedMesh::max_elem_id
virtual dof_id_type max_elem_id() const override
Definition: replicated_mesh.h:124
libMesh::MeshBase::subdomain_ids
void subdomain_ids(std::set< subdomain_id_type > &ids) const
Constructs a list of all subdomain identifiers in the global mesh.
Definition: mesh_base.C:461
libMesh::ReplicatedMesh::active_pid_elements_begin
virtual element_iterator active_pid_elements_begin(processor_id_type proc_id) override
libMesh::ReplicatedMesh::flagged_pid_elements_end
virtual element_iterator flagged_pid_elements_end(unsigned char rflag, processor_id_type pid) override
libMesh::ReplicatedMesh::local_not_level_elements_begin
virtual element_iterator local_not_level_elements_begin(unsigned int level) override
libMesh::ReplicatedMesh::evaluable_nodes_end
virtual node_iterator evaluable_nodes_end(const DofMap &dof_map, unsigned int var_num=libMesh::invalid_uint) override
libMesh::ReplicatedMesh::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::ReplicatedMesh::renumber_nodes_and_elements
virtual void renumber_nodes_and_elements() override
Remove nullptr elements from arrays.
Definition: replicated_mesh.C:642
libMesh::ReplicatedMesh::query_node_ptr
virtual const Node * query_node_ptr(const dof_id_type i) const override
Definition: replicated_mesh.C:206
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::ReplicatedMesh::facelocal_elements_end
virtual element_iterator facelocal_elements_end() override
libMesh::Point
A Point defines a location in LIBMESH_DIM dimensional Real space.
Definition: point.h:38
libMesh::ReplicatedMesh::const_node_iterator_imp
std::vector< Node * >::const_iterator const_node_iterator_imp
Definition: replicated_mesh.h:543
libMesh::processor_id_type
uint8_t processor_id_type
Definition: id_types.h:104
libMesh::ReplicatedMesh::point
virtual const Point & point(const dof_id_type i) const override
Definition: replicated_mesh.C:174
libMesh::ReplicatedMesh::bnd_nodes_begin
virtual node_iterator bnd_nodes_begin() override
Iterate over nodes for which BoundaryInfo::n_boundary_ids(node) > 0.
libMesh::ReplicatedMesh::active_local_subdomain_elements_ptr_range
virtual SimpleRange< element_iterator > active_local_subdomain_elements_ptr_range(subdomain_id_type subdomain_id) override
Definition: replicated_mesh.h:392
libMesh::ReplicatedMesh::n_nodes
virtual dof_id_type n_nodes() const override
Definition: replicated_mesh.h:104
libMesh::Node
A Node is like a Point, but with more information.
Definition: node.h:52
libMesh::ReplicatedMesh::local_not_level_elements_end
virtual element_iterator local_not_level_elements_end(unsigned int level) override
libMesh::ReplicatedMesh::local_nodes_begin
virtual node_iterator local_nodes_begin() override
Iterate over local nodes (nodes whose processor_id() matches the current processor).
libMesh::ReplicatedMesh::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::ReplicatedMesh::not_ancestor_elements_end
virtual element_iterator not_ancestor_elements_end() override
libMesh::ReplicatedMesh::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: replicated_mesh.C:402
libMesh::ReplicatedMesh::active_type_elements_end
virtual element_iterator active_type_elements_end(ElemType type) override
libMesh::ReplicatedMesh::stitch_surfaces
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.
Definition: replicated_mesh.C:833
libMesh::ReplicatedMesh::active_local_elements_end
virtual element_iterator active_local_elements_end() override
libMesh::ReplicatedMesh::evaluable_elements_end
virtual element_iterator evaluable_elements_end(const DofMap &dof_map, unsigned int var_num=libMesh::invalid_uint) override
libMesh::ReplicatedMesh::reserve_nodes
virtual void reserve_nodes(const dof_id_type nn) override
Reserves space for a known number of nodes.
Definition: replicated_mesh.h:113
libMesh::ReplicatedMesh::parallel_n_elem
virtual dof_id_type parallel_n_elem() const override
Definition: replicated_mesh.h:119
libMesh::ReplicatedMesh::add_node
virtual Node * add_node(Node *n) override
Add Node n to the end of the vertex array.
Definition: replicated_mesh.C:472
libMesh::ReplicatedMesh::pid_nodes_end
virtual node_iterator pid_nodes_end(processor_id_type proc_id) override
libMesh::UnstructuredMesh
The UnstructuredMesh class is derived from the MeshBase class.
Definition: unstructured_mesh.h:48
libMesh::ReplicatedMesh::operator=
ReplicatedMesh & operator=(const ReplicatedMesh &)=delete
Copy and move assignment are not allowed.
libMesh::ReplicatedMesh::level_elements_begin
virtual element_iterator level_elements_begin(unsigned int level) override
Iterate over elements of a given level.
libMesh::ReplicatedMesh::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: replicated_mesh.h:412
libMesh::ReplicatedMesh::ghost_elements_end
virtual element_iterator ghost_elements_end() override
libMesh::ReplicatedMesh::~ReplicatedMesh
virtual ~ReplicatedMesh()
Destructor.
Definition: replicated_mesh.C:99
libMesh::ReplicatedMesh::n_elem
virtual dof_id_type n_elem() const override
Definition: replicated_mesh.h:116
libMesh::ReplicatedMesh::clone
virtual std::unique_ptr< MeshBase > clone() const override
Virtual copy-constructor, creates a copy of this mesh.
Definition: replicated_mesh.h:86
libMesh::ReplicatedMesh::query_elem_ptr
virtual const Elem * query_elem_ptr(const dof_id_type i) const override
Definition: replicated_mesh.C:256
libMesh::ReplicatedMesh::flagged_elements_end
virtual element_iterator flagged_elements_end(unsigned char rflag) override
libMesh::ReplicatedMesh::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: replicated_mesh.C:798
libMesh::ReplicatedMesh::elem_iterator_imp
std::vector< Elem * >::iterator elem_iterator_imp
Typedefs for the container implementation.
Definition: replicated_mesh.h:535
libMesh::ReplicatedMesh::active_not_local_elements_begin
virtual element_iterator active_not_local_elements_begin() override
libMesh::ReplicatedMesh::parallel_n_nodes
virtual dof_id_type parallel_n_nodes() const override
Definition: replicated_mesh.h:107
libMesh::ReplicatedMesh::node_iterator_imp
std::vector< Node * >::iterator node_iterator_imp
Typedefs for the container implementation.
Definition: replicated_mesh.h:542
libMesh::ReplicatedMesh::active_local_subdomain_elements_end
virtual element_iterator active_local_subdomain_elements_end(subdomain_id_type subdomain_id) override
libMesh::ReplicatedMesh::not_local_elements_begin
virtual element_iterator not_local_elements_begin() override
libMesh::DofMap
This class handles the numbering of degrees of freedom on a mesh.
Definition: dof_map.h:176
libMesh::ReplicatedMesh::not_ancestor_elements_begin
virtual element_iterator not_ancestor_elements_begin() override
libMesh::ReplicatedMesh::local_nodes_end
virtual node_iterator local_nodes_end() override
libMesh::ReplicatedMesh::nodes_begin
virtual node_iterator nodes_begin() override
Node iterator accessor functions.
libMesh::ReplicatedMesh::elem_ptr
virtual const Elem * elem_ptr(const dof_id_type i) const override
Definition: replicated_mesh.C:232
libMesh::ReplicatedMesh::type_elements_end
virtual element_iterator type_elements_end(ElemType type) override
libMesh::ReplicatedMesh::active_not_local_elements_end
virtual element_iterator active_not_local_elements_end() override
libMesh::ReplicatedMesh::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: replicated_mesh.h:394
libMesh::ReplicatedMesh::ancestor_elements_end
virtual element_iterator ancestor_elements_end() override
libMesh::ReplicatedMesh::active_unpartitioned_elements_begin
virtual element_iterator active_unpartitioned_elements_begin() override
Iterate over active unpartitioned elements in the Mesh.
libMesh::ReplicatedMesh::not_level_elements_begin
virtual element_iterator not_level_elements_begin(unsigned int level) override
libMesh::ReplicatedMesh::active_subdomain_set_elements_ptr_range
virtual SimpleRange< element_iterator > active_subdomain_set_elements_ptr_range(std::set< subdomain_id_type > ss) override
Definition: replicated_mesh.h:410
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::ReplicatedMesh::not_subactive_elements_end
virtual element_iterator not_subactive_elements_end() override
libMesh::Elem
This is the base class from which all geometric element types are derived.
Definition: elem.h:100
libMesh::ReplicatedMesh::active_subdomain_set_elements_end
virtual element_iterator active_subdomain_set_elements_end(std::set< subdomain_id_type > ss) override
libMesh::ReplicatedMesh::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::ReplicatedMesh::semilocal_elements_end
virtual element_iterator semilocal_elements_end() override
libMesh::ReplicatedMesh::ancestor_elements_begin
virtual element_iterator ancestor_elements_begin() override
Iterate over elements for which elem->ancestor() is true.
libMesh::ReplicatedMesh::elements_begin
virtual element_iterator elements_begin() override
Elem iterator accessor functions.
libMesh::ReplicatedMesh::active_unpartitioned_elements_end
virtual element_iterator active_unpartitioned_elements_end() override
libMesh::ReplicatedMesh::active_subdomain_set_elements_begin
virtual element_iterator active_subdomain_set_elements_begin(std::set< subdomain_id_type > ss) override
libMesh::ReplicatedMesh::ReplicatedMesh
ReplicatedMesh(const Parallel::Communicator &comm_in, unsigned char dim=1)
Constructor.
Definition: replicated_mesh.C:85
libMesh::ReplicatedMesh::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::TestClass
Definition: id_types.h:33
libMesh::ReplicatedMesh::local_level_elements_begin
virtual element_iterator local_level_elements_begin(unsigned int level) override
libMesh::ReplicatedMesh::get_disconnected_subdomains
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.
Definition: replicated_mesh.C:1431
libMesh::Real
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
Definition: libmesh_common.h:121
libMesh::ReplicatedMesh::local_elements_end
virtual element_iterator local_elements_end() override
libMesh::ReplicatedMesh::stitch_meshes
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.
Definition: replicated_mesh.C:812
libMesh::ReplicatedMesh::not_level_elements_end
virtual element_iterator not_level_elements_end(unsigned int level) override
libMesh::ReplicatedMesh::active_local_subdomain_elements_begin
virtual element_iterator active_local_subdomain_elements_begin(subdomain_id_type subdomain_id) override
libMesh::ReplicatedMesh::active_subdomain_elements_end
virtual element_iterator active_subdomain_elements_end(subdomain_id_type subdomain_id) override
libMesh::ReplicatedMesh::type_elements_begin
virtual element_iterator type_elements_begin(ElemType type) override
Iterate over all elements with a specified geometric type.
libMesh::ReplicatedMesh::active_semilocal_elements_begin
virtual element_iterator active_semilocal_elements_begin() override
libMesh::ReplicatedMesh::active_subdomain_elements_ptr_range
virtual SimpleRange< const_element_iterator > active_subdomain_elements_ptr_range(subdomain_id_type subdomain_id) const override
Definition: replicated_mesh.h:403
libMesh::ReplicatedMesh::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::ReplicatedMesh::unpartitioned_elements_begin
virtual element_iterator unpartitioned_elements_begin() override
Iterate over unpartitioned elements in the Mesh.
libMesh::ReplicatedMesh::elements_end
virtual element_iterator elements_end() override
libMesh::ReplicatedMesh::active_elements_end
virtual element_iterator active_elements_end() override
libMesh::ReplicatedMesh::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: replicated_mesh.C:417
libMesh::ReplicatedMesh::n_active_elem
virtual dof_id_type n_active_elem() const override
Definition: replicated_mesh.C:1424
libMesh::ElemType
ElemType
Defines an enum for geometric element types.
Definition: enum_elem_type.h:33
libMesh::ReplicatedMesh::get_boundary_points
std::unordered_map< dof_id_type, std::vector< std::vector< Point > > > get_boundary_points() const
Return all points on boundary.
Definition: replicated_mesh.C:1498
libMesh::ReplicatedMesh::insert_node
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...
Definition: replicated_mesh.C:494
libMesh::ReplicatedMesh::local_elements_begin
virtual element_iterator local_elements_begin() override