libMesh
boundary_info.h
Go to the documentation of this file.
1 // The libMesh Finite Element Library.
2 // Copyright (C) 2002-2024 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_BOUNDARY_INFO_H
21 #define LIBMESH_BOUNDARY_INFO_H
22 
23 // Local includes
24 #include "libmesh/libmesh_common.h"
25 #include "libmesh/id_types.h"
26 #include "libmesh/parallel_object.h"
27 
28 // C++ includes
29 #include <cstddef>
30 #include <map>
31 #include <set>
32 #include <vector>
33 #include <tuple>
34 
35 namespace libMesh
36 {
37 
38 
39 // Forward declarations
40 class Elem;
41 class Node;
42 class MeshBase;
43 class UnstructuredMesh;
44 
45 
58 {
59 protected:
60  friend class MeshBase;
61 
68  BoundaryInfo (MeshBase & m);
69 
70  void set_mesh (MeshBase & m) { _mesh = &m; }
71 
72 public:
81  BoundaryInfo & operator=(const BoundaryInfo & other_boundary_info);
82 
86  bool operator== (const BoundaryInfo & other_boundary_info) const;
87 
88  bool operator!= (const BoundaryInfo & other_boundary_info) const
89  {
90  return !(*this == other_boundary_info);
91  }
92 
96  ~BoundaryInfo ();
97 
102  void clear ();
103 
111  void regenerate_id_sets ();
112 
113 
121  void sync (UnstructuredMesh & boundary_mesh);
122 
134  void sync (const std::set<boundary_id_type> & requested_boundary_ids,
135  UnstructuredMesh & boundary_mesh);
136 
147  void sync (const std::set<boundary_id_type> & requested_boundary_ids,
148  UnstructuredMesh & boundary_mesh,
149  const std::set<subdomain_id_type> & subdomains_relative_to);
150 
162  void get_side_and_node_maps (UnstructuredMesh & boundary_mesh,
163  std::map<dof_id_type, dof_id_type> & node_id_map,
164  std::map<dof_id_type, unsigned char> & side_id_map,
165  Real tolerance=1.e-6);
166 
177  void add_elements (const std::set<boundary_id_type> & requested_boundary_ids,
178  UnstructuredMesh & boundary_mesh,
179  bool store_parent_side_ids = false);
180 
187  void add_elements(const std::set<boundary_id_type> & requested_boundary_ids,
188  UnstructuredMesh & boundary_mesh,
189  const std::set<subdomain_id_type> & subdomains_relative_to,
190  bool store_parent_side_ids = false);
191 
196  void add_node (const Node * node,
197  const boundary_id_type id);
198 
203  void add_node (const dof_id_type node,
204  const boundary_id_type id);
205 
210  void add_node (const Node * node,
211  const std::vector<boundary_id_type> & ids);
212 
217 
223  void add_edge (const dof_id_type elem,
224  const unsigned short int edge,
225  const boundary_id_type id);
226 
232  void add_edge (const Elem * elem,
233  const unsigned short int edge,
234  const boundary_id_type id);
235 
241  void add_edge (const Elem * elem,
242  const unsigned short int edge,
243  const std::vector<boundary_id_type> & ids);
244 
250  void add_shellface (const dof_id_type elem,
251  const unsigned short int shellface,
252  const boundary_id_type id);
253 
259  void add_shellface (const Elem * elem,
260  const unsigned short int shellface,
261  const boundary_id_type id);
262 
268  void add_shellface (const Elem * elem,
269  const unsigned short int shellface,
270  const std::vector<boundary_id_type> & ids);
271 
276  void add_side (const dof_id_type elem,
277  const unsigned short int side,
278  const boundary_id_type id);
279 
284  void add_side (const Elem * elem,
285  const unsigned short int side,
286  const boundary_id_type id);
287 
292  void add_side (const Elem * elem,
293  const unsigned short int side,
294  const std::vector<boundary_id_type> & ids);
295 
300  void remove (const Node * node);
301 
306  void remove (const Elem * elem);
307 
311  void remove_node (const Node * node,
312  const boundary_id_type id);
313 
318  void remove_edge (const Elem * elem,
319  const unsigned short int edge);
320 
325  void remove_edge (const Elem * elem,
326  const unsigned short int edge,
327  const boundary_id_type id);
328 
333  void remove_shellface (const Elem * elem,
334  const unsigned short int shellface);
335 
340  void remove_shellface (const Elem * elem,
341  const unsigned short int shellface,
342  const boundary_id_type id);
343 
348  void remove_side (const Elem * elem,
349  const unsigned short int side);
350 
355  void remove_side (const Elem * elem,
356  const unsigned short int side,
357  const boundary_id_type id);
358 
367  boundary_id_type other_sideset_id,
368  bool clear_nodeset_data = false);
369 
381  void remove_id (boundary_id_type id, bool global = false);
382 
387  void renumber_id (boundary_id_type old_id, boundary_id_type new_id);
388 
396  std::size_t n_boundary_ids () const { return _boundary_ids.size(); }
397 
401  bool has_boundary_id (const Node * const node,
402  const boundary_id_type id) const;
403 
408  void boundary_ids (const Node * node,
409  std::vector<boundary_id_type> & vec_to_fill) const;
410 
414  unsigned int n_boundary_ids (const Node * node) const;
415 
422  unsigned int n_edge_boundary_ids (const Elem * const elem,
423  const unsigned short int edge) const;
424 
431  void edge_boundary_ids (const Elem * const elem,
432  const unsigned short int edge,
433  std::vector<boundary_id_type> & vec_to_fill) const;
434 
444  void raw_edge_boundary_ids (const Elem * const elem,
445  const unsigned short int edge,
446  std::vector<boundary_id_type> & vec_to_fill) const;
447 
454  unsigned int n_shellface_boundary_ids (const Elem * const elem,
455  const unsigned short int shellface) const;
456 
463  void shellface_boundary_ids (const Elem * const elem,
464  const unsigned short int shellface,
465  std::vector<boundary_id_type> & vec_to_fill) const;
466 
476  void raw_shellface_boundary_ids (const Elem * const elem,
477  const unsigned short int shellface,
478  std::vector<boundary_id_type> & vec_to_fill) const;
479 
484  bool has_boundary_id (const Elem * const elem,
485  const unsigned short int side,
486  const boundary_id_type id) const;
487 
492  unsigned int n_boundary_ids (const Elem * const elem,
493  const unsigned short int side) const;
494 
499  unsigned int n_raw_boundary_ids (const Elem * const elem,
500  const unsigned short int side) const;
501 
506  void boundary_ids (const Elem * const elem,
507  const unsigned short int side,
508  std::vector<boundary_id_type> & vec_to_fill) const;
509 
517  void raw_boundary_ids (const Elem * const elem,
518  const unsigned short int side,
519  std::vector<boundary_id_type> & vec_to_fill) const;
520 
521  /*
522  * Copy boundary ids associated with old_elem (but not its nodes)
523  * from old_boundary_info (which may be this) into this boundary
524  * info, associating them with new_elem.
525  */
526  void copy_boundary_ids (const BoundaryInfo & old_boundary_info,
527  const Elem * const old_elem,
528  const Elem * const new_elem);
529 
537  unsigned int side_with_boundary_id(const Elem * const elem,
538  const boundary_id_type boundary_id) const;
539 
544  std::vector<unsigned int>
545  sides_with_boundary_id(const Elem * const elem,
546  const boundary_id_type boundary_id) const;
547 
554  void build_node_boundary_ids(std::vector<boundary_id_type> & b_ids) const;
555 
562  void build_side_boundary_ids(std::vector<boundary_id_type> & b_ids) const;
563 
570  void build_shellface_boundary_ids(std::vector<boundary_id_type> & b_ids) const;
571 
572 #ifdef LIBMESH_ENABLE_AMR
573 
584  void transfer_boundary_ids_from_children(const Elem * const parent);
585 #endif
586 
592  std::size_t n_boundary_conds () const;
593 
600  std::size_t n_edge_conds () const;
601 
608  std::size_t n_shellface_conds () const;
609 
615  std::size_t n_nodeset_conds () const;
616 
626 #ifdef LIBMESH_ENABLE_DEPRECATED
627  void build_node_list (std::vector<dof_id_type> & node_id_list,
628  std::vector<boundary_id_type> & bc_id_list) const;
629 #endif
630 
643  typedef std::tuple<dof_id_type, boundary_id_type> NodeBCTuple;
645  std::vector<NodeBCTuple> build_node_list(NodeBCTupleSortBy sort_by = NodeBCTupleSortBy::NODE_ID) const;
646 
652 
658 
669 #ifdef LIBMESH_ENABLE_DEPRECATED
670  void build_side_list (std::vector<dof_id_type> & element_id_list,
671  std::vector<unsigned short int> & side_list,
672  std::vector<boundary_id_type> & bc_id_list) const;
673 #endif
674 
686  typedef std::tuple<dof_id_type, unsigned short int, boundary_id_type> BCTuple;
688  std::vector<BCTuple> build_side_list(BCTupleSortBy sort_by = BCTupleSortBy::ELEM_ID) const;
689 
700 #ifdef LIBMESH_ENABLE_DEPRECATED
701  void build_active_side_list (std::vector<dof_id_type> & element_id_list,
702  std::vector<unsigned short int> & side_list,
703  std::vector<boundary_id_type> & bc_id_list) const;
704 #endif
705 
711  std::vector<BCTuple> build_active_side_list () const;
712 
723 #ifdef LIBMESH_ENABLE_DEPRECATED
724  void build_edge_list (std::vector<dof_id_type> & element_id_list,
725  std::vector<unsigned short int> & edge_list,
726  std::vector<boundary_id_type> & bc_id_list) const;
727 #endif
728 
734  std::vector<BCTuple> build_edge_list() const;
735 
746 #ifdef LIBMESH_ENABLE_DEPRECATED
747  void build_shellface_list (std::vector<dof_id_type> & element_id_list,
748  std::vector<unsigned short int> & shellface_list,
749  std::vector<boundary_id_type> & bc_id_list) const;
750 #endif
751 
757  std::vector<BCTuple> build_shellface_list() const;
758 
766  void parallel_sync_side_ids();
767  void parallel_sync_node_ids();
768 
776  const std::set<boundary_id_type> & get_boundary_ids () const
777  { return _boundary_ids; }
778 
783  const std::set<boundary_id_type> & get_global_boundary_ids () const;
784 
789  const std::set<boundary_id_type> & get_side_boundary_ids () const
790  { return _side_boundary_ids; }
791 
798  const std::set<boundary_id_type> & get_edge_boundary_ids () const
799  { return _edge_boundary_ids; }
800 
807  const std::set<boundary_id_type> & get_shellface_boundary_ids () const
808  { return _shellface_boundary_ids; }
809 
814  const std::set<boundary_id_type> & get_node_boundary_ids () const
815  { return _node_boundary_ids; }
816 
817 
821  void print_info (std::ostream & out_stream=libMesh::out) const;
822 
826  void print_summary (std::ostream & out_stream=libMesh::out) const;
827 
831  const std::string & get_sideset_name(boundary_id_type id) const;
832 
837  std::string & sideset_name(boundary_id_type id);
838 
842  const std::string & get_nodeset_name(boundary_id_type id) const;
843 
848  std::string & nodeset_name(boundary_id_type id);
849 
853  const std::string & get_edgeset_name(boundary_id_type id) const;
854 
858  std::string & edgeset_name(boundary_id_type id);
859 
864  boundary_id_type get_id_by_name(std::string_view name) const;
865 
869  std::map<boundary_id_type, std::string> & set_sideset_name_map ()
870  { return _ss_id_to_name; }
871  const std::map<boundary_id_type, std::string> & get_sideset_name_map () const
872  { return _ss_id_to_name; }
873 
877  std::map<boundary_id_type, std::string> & set_nodeset_name_map ()
878  { return _ns_id_to_name; }
879  const std::map<boundary_id_type, std::string> & get_nodeset_name_map () const
880  { return _ns_id_to_name; }
881 
885  std::map<boundary_id_type, std::string> & set_edgeset_name_map ()
886  { return _es_id_to_name; }
887  const std::map<boundary_id_type, std::string> & get_edgeset_name_map () const
888  { return _es_id_to_name; }
889 
895 
899  const std::multimap<const Node *, boundary_id_type> & get_nodeset_map () const
900  { return _boundary_node_id; }
901 
905  const std::multimap<const Elem *, std::pair<unsigned short int, boundary_id_type>> & get_edgeset_map () const
906  { return _boundary_edge_id; }
907 
911  const std::multimap<const Elem *, std::pair<unsigned short int, boundary_id_type>> & get_sideset_map() const
912  { return _boundary_side_id; }
913 
918  { return _children_on_boundary; }
919 
923  void allow_children_on_boundary_side(const bool children_on_boundary)
924  { _children_on_boundary = children_on_boundary; }
925 
926 private:
927 
934  void libmesh_assert_valid_multimaps() const;
935 
941  void _find_id_maps (const std::set<boundary_id_type> & requested_boundary_ids,
942  dof_id_type first_free_node_id,
943  std::map<dof_id_type, dof_id_type> * node_id_map,
944  dof_id_type first_free_elem_id,
945  std::map<std::pair<dof_id_type, unsigned char>, dof_id_type> * side_id_map,
946  const std::set<subdomain_id_type> & subdomains_relative_to);
947 
952 
957  std::multimap<const Node *,
959 
964  std::multimap<const Elem *,
965  std::pair<unsigned short int, boundary_id_type>>
967 
972  std::multimap<const Elem *,
973  std::pair<unsigned short int, boundary_id_type>>
975 
980  std::multimap<const Elem *,
981  std::pair<unsigned short int, boundary_id_type>>
983 
984  /*
985  * Whether or not children elements are associated with any boundary
986  * It is false by default. The flag will be turned on if `add_side`
987  * function is called with a child element
988  */
990 
1000  std::set<boundary_id_type> _boundary_ids;
1001 
1012  std::set<boundary_id_type> _global_boundary_ids;
1013 
1023  std::set<boundary_id_type> _side_boundary_ids;
1024 
1034  std::set<boundary_id_type> _edge_boundary_ids;
1035 
1045  std::set<boundary_id_type> _node_boundary_ids;
1046 
1057  std::set<boundary_id_type> _shellface_boundary_ids;
1058 
1066  std::map<boundary_id_type, std::string> _ss_id_to_name;
1067 
1075  std::map<boundary_id_type, std::string> _ns_id_to_name;
1076 
1084  std::map<boundary_id_type, std::string> _es_id_to_name;
1085 };
1086 
1087 } // namespace libMesh
1088 
1089 #endif // LIBMESH_BOUNDARY_INFO_H
std::string name(const ElemQuality q)
This function returns a string containing some name for q.
Definition: elem_quality.C:42
void remove_id(boundary_id_type id, bool global=false)
Removes all entities (nodes, sides, edges, shellfaces) with boundary id id from their respective cont...
void libmesh_assert_valid_multimaps() const
Helper method for ensuring that our multimaps don&#39;t contain entries with duplicate keys and values...
std::size_t n_boundary_conds() const
void allow_children_on_boundary_side(const bool children_on_boundary)
Whether or not to allow directly setting boundary sides on child elements.
std::map< boundary_id_type, std::string > _ns_id_to_name
This structure maintains the mapping of named node sets for file formats (Exodus, Gmsh) that support ...
std::tuple< dof_id_type, unsigned short int, boundary_id_type > BCTuple
As above, but the library creates and fills in a vector of (elem-id, side-id, bc-id) triplets and ret...
std::set< boundary_id_type > _node_boundary_ids
Set of user-specified boundary IDs for nodes only.
const std::set< boundary_id_type > & get_side_boundary_ids() const
std::vector< BCTuple > build_shellface_list() const
As above, but the library creates and fills in a vector of (elem-id, side-id, bc-id) triplets and ret...
void raw_boundary_ids(const Elem *const elem, const unsigned short int side, std::vector< boundary_id_type > &vec_to_fill) const
std::vector< BCTuple > build_active_side_list() const
As above, but the library creates and fills in a vector of (elem-id, side-id, bc-id) triplets and ret...
void remove_edge(const Elem *elem, const unsigned short int edge)
Removes all boundary conditions associated with edge edge of element elem, if any exist...
A Node is like a Point, but with more information.
Definition: node.h:52
std::string & nodeset_name(boundary_id_type id)
bool has_boundary_id(const Node *const node, const boundary_id_type id) const
std::set< boundary_id_type > _edge_boundary_ids
Set of user-specified boundary IDs for edges only.
void sync(UnstructuredMesh &boundary_mesh)
Generates boundary_mesh data structures corresponding to the mesh data structures.
void build_node_list_from_side_list()
Adds nodes with boundary ids based on the side&#39;s boundary ids they are connected to.
void add_elements(const std::set< boundary_id_type > &requested_boundary_ids, UnstructuredMesh &boundary_mesh, bool store_parent_side_ids=false)
Generates elements along the boundary of our _mesh, which use pre-existing nodes on the boundary_mesh...
~BoundaryInfo()
Destructor.
std::vector< unsigned int > sides_with_boundary_id(const Elem *const elem, const boundary_id_type boundary_id) const
void remove_node(const Node *node, const boundary_id_type id)
Removes boundary id id from node node, if it exists.
std::size_t n_edge_conds() const
BoundaryInfo(MeshBase &m)
Constructor.
bool operator==(const BoundaryInfo &other_boundary_info) const
This tests for data equality via element ids.
void remove_shellface(const Elem *elem, const unsigned short int shellface)
Removes all boundary conditions associated with shell face shellface of element elem, if any exist.
std::size_t n_shellface_conds() const
void raw_edge_boundary_ids(const Elem *const elem, const unsigned short int edge, std::vector< boundary_id_type > &vec_to_fill) const
unsigned int n_shellface_boundary_ids(const Elem *const elem, const unsigned short int shellface) const
std::set< boundary_id_type > _boundary_ids
A collection of user-specified boundary ids for sides, edges, nodes, and shell faces.
const std::map< boundary_id_type, std::string > & get_sideset_name_map() const
unsigned int side_with_boundary_id(const Elem *const elem, const boundary_id_type boundary_id) const
This is the base class from which all geometric element types are derived.
Definition: elem.h:94
std::set< boundary_id_type > _side_boundary_ids
Set of user-specified boundary IDs for sides only.
void build_side_boundary_ids(std::vector< boundary_id_type > &b_ids) const
Builds the list of unique side boundary ids.
void shellface_boundary_ids(const Elem *const elem, const unsigned short int shellface, std::vector< boundary_id_type > &vec_to_fill) const
void boundary_ids(const Node *node, std::vector< boundary_id_type > &vec_to_fill) const
Fills a user-provided std::vector with the boundary ids associated with Node node.
MeshBase * _mesh
A pointer to the Mesh this boundary info pertains to.
The libMesh namespace provides an interface to certain functionality in the library.
void renumber_id(boundary_id_type old_id, boundary_id_type new_id)
Changes all entities (nodes, sides, edges, shellfaces) with boundary id old_id to instead be labeled ...
std::multimap< const Elem *, std::pair< unsigned short int, boundary_id_type > > _boundary_side_id
Data structure that maps sides of elements to boundary ids.
std::set< boundary_id_type > _global_boundary_ids
A collection of user-specified boundary ids for sides, edges, nodes, and shell faces.
This is the MeshBase class.
Definition: mesh_base.h:74
std::size_t n_boundary_ids() const
void build_side_list(std::vector< dof_id_type > &element_id_list, std::vector< unsigned short int > &side_list, std::vector< boundary_id_type > &bc_id_list) const
Creates a list of element numbers, sides, and ids for those sides.
const std::set< boundary_id_type > & get_node_boundary_ids() const
std::map< boundary_id_type, std::string > _ss_id_to_name
This structure maintains the mapping of named side sets for file formats (Exodus, Gmsh) that support ...
std::tuple< dof_id_type, boundary_id_type > NodeBCTuple
As above, but the library creates and fills in a vector of (node-id, bc-id) pairs and returns it to t...
boundary_id_type get_id_by_name(std::string_view name) const
void clear_boundary_node_ids()
Clears all the boundary information from all of the nodes in the mesh.
std::map< boundary_id_type, std::string > & set_sideset_name_map()
void build_node_list(std::vector< dof_id_type > &node_id_list, std::vector< boundary_id_type > &bc_id_list) const
Creates a list of nodes and ids for those nodes.
void add_node(const Node *node, const boundary_id_type id)
Add Node node with boundary id id to the boundary information data structures.
const std::map< boundary_id_type, std::string > & get_nodeset_name_map() const
const std::string & get_edgeset_name(boundary_id_type id) const
int8_t boundary_id_type
Definition: id_types.h:51
static const boundary_id_type invalid_id
Number used for internal use.
unsigned int n_raw_boundary_ids(const Elem *const elem, const unsigned short int side) const
std::map< boundary_id_type, std::string > _es_id_to_name
This structure maintains the mapping of named edge sets for file formats (Exodus, Gmsh) that support ...
std::multimap< const Node *, boundary_id_type > _boundary_node_id
Data structure that maps nodes in the mesh to boundary ids.
The UnstructuredMesh class is derived from the MeshBase class.
void print_info(std::ostream &out_stream=libMesh::out) const
Prints the boundary information data structure.
void build_side_list_from_node_list()
Adds sides to a sideset if every node on that side are in the same sideset.
void raw_shellface_boundary_ids(const Elem *const elem, const unsigned short int shellface, std::vector< boundary_id_type > &vec_to_fill) const
const std::map< boundary_id_type, std::string > & get_edgeset_name_map() const
void parallel_sync_side_ids()
Synchronize the boundary element side and node across processors.
The BoundaryInfo class contains information relevant to boundary conditions including storing faces...
Definition: boundary_info.h:57
std::vector< BCTuple > build_edge_list() const
As above, but the library creates and fills in a vector of (elem-id, side-id, bc-id) triplets and ret...
An object whose state is distributed along a set of processors.
void regenerate_id_sets()
Clears and regenerates the cached sets of ids.
const std::string & get_nodeset_name(boundary_id_type id) const
void clear()
Clears the underlying data structures and restores the object to a pristine state with no data stored...
const std::multimap< const Elem *, std::pair< unsigned short int, boundary_id_type > > & get_sideset_map() const
std::string & sideset_name(boundary_id_type id)
BoundaryInfo & operator=(const BoundaryInfo &other_boundary_info)
Copy assignment operator.
const std::set< boundary_id_type > & get_boundary_ids() const
void build_node_boundary_ids(std::vector< boundary_id_type > &b_ids) const
Builds the list of unique node boundary ids.
void remove_side(const Elem *elem, const unsigned short int side)
Removes all boundary conditions associated with side side of element elem, if any exist...
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
unsigned int n_edge_boundary_ids(const Elem *const elem, const unsigned short int edge) const
void copy_boundary_ids(const BoundaryInfo &old_boundary_info, const Elem *const old_elem, const Elem *const new_elem)
std::map< boundary_id_type, std::string > & set_nodeset_name_map()
void clear_stitched_boundary_side_ids(boundary_id_type sideset_id, boundary_id_type other_sideset_id, bool clear_nodeset_data=false)
Clear sideset information along a stitched mesh interface.
OStreamProxy out
const std::set< boundary_id_type > & get_edge_boundary_ids() const
void add_side(const dof_id_type elem, const unsigned short int side, const boundary_id_type id)
Add side side of element number elem with boundary id id to the boundary information data structure...
const std::string & get_sideset_name(boundary_id_type id) const
const std::set< boundary_id_type > & get_global_boundary_ids() const
void add_shellface(const dof_id_type elem, const unsigned short int shellface, const boundary_id_type id)
Add shell face shellface of element number elem with boundary id id to the boundary information data ...
std::size_t n_nodeset_conds() const
std::string & edgeset_name(boundary_id_type id)
const std::set< boundary_id_type > & get_shellface_boundary_ids() const
void set_mesh(MeshBase &m)
Definition: boundary_info.h:70
bool operator!=(const BoundaryInfo &other_boundary_info) const
Definition: boundary_info.h:88
void edge_boundary_ids(const Elem *const elem, const unsigned short int edge, std::vector< boundary_id_type > &vec_to_fill) const
std::set< boundary_id_type > _shellface_boundary_ids
Set of user-specified boundary IDs for shellfaces only.
bool is_children_on_boundary_side() const
void _find_id_maps(const std::set< boundary_id_type > &requested_boundary_ids, dof_id_type first_free_node_id, std::map< dof_id_type, dof_id_type > *node_id_map, dof_id_type first_free_elem_id, std::map< std::pair< dof_id_type, unsigned char >, dof_id_type > *side_id_map, const std::set< subdomain_id_type > &subdomains_relative_to)
Helper method for finding consistent maps of interior to boundary dof_object ids. ...
std::multimap< const Elem *, std::pair< unsigned short int, boundary_id_type > > _boundary_shellface_id
Data structure that maps faces of shell elements to boundary ids.
void print_summary(std::ostream &out_stream=libMesh::out) const
Prints a summary of the boundary information.
const std::multimap< const Node *, boundary_id_type > & get_nodeset_map() const
void build_shellface_boundary_ids(std::vector< boundary_id_type > &b_ids) const
Builds the list of unique shellface boundary ids.
std::multimap< const Elem *, std::pair< unsigned short int, boundary_id_type > > _boundary_edge_id
Data structure that maps edges of elements to boundary ids.
void get_side_and_node_maps(UnstructuredMesh &boundary_mesh, std::map< dof_id_type, dof_id_type > &node_id_map, std::map< dof_id_type, unsigned char > &side_id_map, Real tolerance=1.e-6)
Suppose we have used sync to create boundary_mesh.
const std::multimap< const Elem *, std::pair< unsigned short int, boundary_id_type > > & get_edgeset_map() const
uint8_t dof_id_type
Definition: id_types.h:67
std::map< boundary_id_type, std::string > & set_edgeset_name_map()
void add_edge(const dof_id_type elem, const unsigned short int edge, const boundary_id_type id)
Add edge edge of element number elem with boundary id id to the boundary information data structure...
void transfer_boundary_ids_from_children(const Elem *const parent)
Update parent&#39;s boundary id list so that this information is consistent with its children.