Skip to content

Commit 43fa597

Browse files
authored
Merge pull request #4268 from roystgnr/boundary_info_updates
BoundaryInfo method additions
2 parents 0bbd247 + a01b148 commit 43fa597

3 files changed

Lines changed: 584 additions & 30 deletions

File tree

include/mesh/boundary_info.h

Lines changed: 92 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -103,13 +103,22 @@ class BoundaryInfo : public ParallelObject
103103

104104
/**
105105
* Clears and regenerates the cached sets of ids.
106-
* This is necessary after use of remove_*() functions, which remove
107-
* individual id associations (an O(1) process) without checking to
108-
* see whether that is the last association with the id (an O(N)
109-
* process.
106+
* This is in general necessary after use of remove_*() functions,
107+
* which remove individual id associations (an O(1) process) without
108+
* checking to see whether that is the last association with the id
109+
* (an O(N) process).
110110
*/
111111
void regenerate_id_sets ();
112112

113+
/**
114+
* Synchronizes the boundary_ids set on each processor to determine
115+
* global_boundary_ids.
116+
*
117+
* This may be necessary after use of renumber_*() functions, which
118+
* perform only local operations, if \p get_global_boundary_ids() is
119+
* to be used without a full regenerate_id_sets() call first.
120+
*/
121+
void synchronize_global_id_set ();
113122

114123
/**
115124
* Generates \p boundary_mesh data structures corresponding to the
@@ -373,19 +382,89 @@ class BoundaryInfo : public ParallelObject
373382
* \p id's existence from the BoundaryInfo object. That is, after
374383
* calling remove_id(), \p id will no longer be in the sets returned by
375384
* get_boundary_ids(), get_side_boundary_ids(), etc., and will not
376-
* be in the bc_id_list vector returned by build_side_list(), etc. Set
377-
* the \p global parameter to true if this is being called for all processes
378-
* in the object's communicator, in which case we will remove the id from
379-
* the global boundary ID container
385+
* be in the bc_id_list vector returned by build_side_list(), etc.
386+
*
387+
* Set the \p global parameter to true if this is being called for
388+
* all processes in the object's communicator, in which case we will
389+
* remove the id from the global boundary ID container
380390
*/
381391
void remove_id (boundary_id_type id, bool global = false);
382392

393+
/**
394+
* Removes all sides with boundary id \p id from the BoundaryInfo
395+
* object, removes it from the set of side boundary ids, and removes
396+
* it from the set of boundary ids if no other boundary type uses it.
397+
*
398+
* Set the \p global parameter to true if this is being called for
399+
* all processes in the object's communicator, in which case we will
400+
* remove the id from the global boundary ID container
401+
*/
402+
void remove_side_id (boundary_id_type id, bool global = false);
403+
404+
/**
405+
* Removes all edges with boundary id \p id from the BoundaryInfo
406+
* object, removes it from the set of edge boundary ids, and removes
407+
* it from the set of boundary ids if no other boundary type uses it.
408+
*
409+
* Set the \p global parameter to true if this is being called for
410+
* all processes in the object's communicator, in which case we will
411+
* remove the id from the global boundary ID container
412+
*/
413+
void remove_edge_id (boundary_id_type id, bool global = false);
414+
415+
/**
416+
* Removes all shellfaces with boundary id \p id from the
417+
* BoundaryInfo object, removes it from the set of shellface
418+
* boundary ids, and removes it from the set of boundary ids if no
419+
* other boundary type uses it.
420+
*
421+
* Set the \p global parameter to true if this is being called for
422+
* all processes in the object's communicator, in which case we will
423+
* remove the id from the global boundary ID container
424+
*/
425+
void remove_shellface_id (boundary_id_type id, bool global = false);
426+
427+
/**
428+
* Removes all nodes with boundary id \p id from the BoundaryInfo
429+
* object, removes it from the set of node boundary ids, and removes
430+
* it from the set of boundary ids if no other boundary type uses it.
431+
*
432+
* Set the \p global parameter to true if this is being called for
433+
* all processes in the object's communicator, in which case we will
434+
* remove the id from the global boundary ID container
435+
*/
436+
void remove_node_id (boundary_id_type id, bool global = false);
437+
383438
/**
384439
* Changes all entities (nodes, sides, edges, shellfaces) with boundary
385440
* id \p old_id to instead be labeled by boundary id \p new_id.
386441
*/
387442
void renumber_id (boundary_id_type old_id, boundary_id_type new_id);
388443

444+
/**
445+
* Changes all sides with boundary id \p old_id to instead be
446+
* labeled by boundary id \p new_id.
447+
*/
448+
void renumber_side_id (boundary_id_type old_id, boundary_id_type new_id);
449+
450+
/**
451+
* Changes all edges with boundary id \p old_id to instead be
452+
* labeled by boundary id \p new_id.
453+
*/
454+
void renumber_edge_id (boundary_id_type old_id, boundary_id_type new_id);
455+
456+
/**
457+
* Changes all shellfaces with boundary id \p old_id to instead be
458+
* labeled by boundary id \p new_id.
459+
*/
460+
void renumber_shellface_id (boundary_id_type old_id, boundary_id_type new_id);
461+
462+
/**
463+
* Changes all nodes with boundary id \p old_id to instead be
464+
* labeled by boundary id \p new_id.
465+
*/
466+
void renumber_node_id (boundary_id_type old_id, boundary_id_type new_id);
467+
389468
/**
390469
* \returns The number of user-specified boundary ids on the
391470
* semilocal part of the mesh.
@@ -654,8 +733,12 @@ class BoundaryInfo : public ParallelObject
654733
/**
655734
* Adds nodes with boundary ids based on the side's boundary
656735
* ids they are connected to.
736+
*
737+
* @param sideset_list sidesets to build nodesets from.
738+
* If empty (default), builds from all existing
739+
* sidesets
657740
*/
658-
void build_node_list_from_side_list();
741+
void build_node_list_from_side_list(const std::set<boundary_id_type> & sideset_list = {});
659742

660743
/**
661744
* Adds sides to a sideset if every node on that side are in the same

0 commit comments

Comments
 (0)