1 #include <libmesh/mesh.h> 2 #include <libmesh/mesh_generation.h> 3 #include <libmesh/boundary_info.h> 4 #include <libmesh/elem.h> 5 #include <libmesh/face_quad4_shell.h> 6 #include <libmesh/equation_systems.h> 7 #include <libmesh/zero_function.h> 8 #include <libmesh/dirichlet_boundaries.h> 9 #include <libmesh/dof_map.h> 10 #include <libmesh/parallel.h> 11 #include <libmesh/mesh_refinement.h> 27 CPPUNIT_TEST( testNameCopying );
30 CPPUNIT_TEST( testMesh );
31 CPPUNIT_TEST( testRenumber );
33 CPPUNIT_TEST( testSelectiveRenumber );
35 # ifdef LIBMESH_ENABLE_AMR 36 # ifdef LIBMESH_ENABLE_EXCEPTIONS 37 CPPUNIT_TEST( testBoundaryOnChildrenErrors );
39 CPPUNIT_TEST( testBoundaryIDs );
40 CPPUNIT_TEST( testBoundaryOnChildrenElementsRefineCoarsen );
41 CPPUNIT_TEST( testBoundaryOnChildrenBoundaryIDs );
42 CPPUNIT_TEST( testBoundaryOnChildrenBoundarySides );
44 CPPUNIT_TEST( testBuildNodeListFromSideList );
45 CPPUNIT_TEST( testBuildSideListFromNodeList );
46 # ifdef LIBMESH_ENABLE_DIRICHLET 47 CPPUNIT_TEST( testShellFaceConstraints );
51 CPPUNIT_TEST( testEdgeBoundaryConditions );
54 CPPUNIT_TEST_SUITE_END();
82 #ifdef LIBMESH_ENABLE_DEPRECATED 83 std::vector<dof_id_type> element_id_list;
84 std::vector<unsigned short int> side_list;
85 std::vector<boundary_id_type> bc_id_list;
93 CPPUNIT_ASSERT_EQUAL(static_cast<std::size_t>(4), bi.
n_boundary_ids());
100 bool has_bcid = bc_ids.count(i);
102 CPPUNIT_ASSERT(has_bcid);
107 #ifdef LIBMESH_ENABLE_DEPRECATED 118 #ifdef LIBMESH_ENABLE_DEPRECATED 119 CPPUNIT_ASSERT_EQUAL(static_cast<std::size_t>(8), element_id_list.size());
121 CPPUNIT_ASSERT_EQUAL(static_cast<std::size_t>(8), bc_triples.size());
126 std::unique_ptr<MeshBase> mesh_clone =
mesh.
clone();
127 CPPUNIT_ASSERT(mesh_clone->get_boundary_info() ==
133 CPPUNIT_ASSERT(mesh_clone->get_boundary_info() !=
138 CPPUNIT_ASSERT_EQUAL(static_cast<std::size_t>(3), bi.
n_boundary_ids());
142 CPPUNIT_ASSERT(!bc_ids.count(0));
145 bool has_bcid = bc_ids.count(i);
147 CPPUNIT_ASSERT(has_bcid);
152 #ifdef LIBMESH_ENABLE_DEPRECATED 161 #ifdef LIBMESH_ENABLE_DEPRECATED 162 CPPUNIT_ASSERT_EQUAL(static_cast<std::size_t>(6), element_id_list.size());
164 CPPUNIT_ASSERT_EQUAL(static_cast<std::size_t>(6), bc_triples.size());
168 #ifdef LIBMESH_ENABLE_DEPRECATED 169 CPPUNIT_ASSERT(std::find(bc_id_list.begin(), bc_id_list.end(), 0) == bc_id_list.end());
171 typedef std::tuple<dof_id_type, unsigned short int, boundary_id_type> Tuple;
172 CPPUNIT_ASSERT(std::find_if(bc_triples.begin(), bc_triples.end(),
173 [](
const Tuple & t)->
bool {
return std::get<2>(t) == 0; }) == bc_triples.end());
178 CPPUNIT_ASSERT_EQUAL(static_cast<std::size_t>(3), bi.
n_boundary_ids());
186 #ifdef LIBMESH_ENABLE_DEPRECATED 191 CPPUNIT_ASSERT_EQUAL(static_cast<std::size_t>(0), bi.
n_boundary_ids());
192 #ifdef LIBMESH_ENABLE_DEPRECATED 193 CPPUNIT_ASSERT_EQUAL(static_cast<std::size_t>(0), element_id_list.size());
195 CPPUNIT_ASSERT_EQUAL(static_cast<std::size_t>(0), bc_triples.size());
214 #ifdef LIBMESH_ENABLE_DEPRECATED 215 std::vector<dof_id_type> element_id_list;
216 std::vector<unsigned short int> side_list;
217 std::vector<boundary_id_type> bc_id_list;
227 const std::map<boundary_id_type, std::string> expected_names =
228 {{4,
"bottom"}, {5,
"right"}, {6,
"left"}};
232 CPPUNIT_ASSERT_EQUAL(static_cast<std::size_t>(3), bi.
n_boundary_ids());
240 bool has_bcid = bc_ids.count(i);
242 CPPUNIT_ASSERT(!has_bcid);
246 bool has_bcid = bc_ids.count(i);
248 bool bad_name =
false;
253 bad_name = (current_name != libmesh_map_find(expected_names, i));
258 CPPUNIT_ASSERT(has_bcid);
262 CPPUNIT_ASSERT(!bad_name);
272 CPPUNIT_ASSERT_EQUAL(static_cast<std::size_t>(8), bc_triples.size());
281 CPPUNIT_ASSERT_EQUAL(static_cast<std::size_t>(0), bi.
n_boundary_ids());
282 CPPUNIT_ASSERT_EQUAL(static_cast<std::size_t>(0), bc_triples.size());
328 const std::map<boundary_id_type, std::string> expected_basic_names =
329 {{1,
"bottom"}, {2,
"right"}, {3,
"top"}, {4,
"left"}};
331 std::map<boundary_id_type, std::string> expected_side_names =
332 expected_basic_names;
333 expected_side_names.insert({{6,
"back"}, {7,
"front"}});
335 std::map<boundary_id_type, std::string> expected_node_names =
336 expected_basic_names;
337 expected_node_names.insert({{6,
"front"}, {7,
"back"}});
339 const std::map<boundary_id_type, std::string> expected_edge_names =
340 {{3,
"firstedge"}, {4,
"secondedge"}};
344 CPPUNIT_ASSERT_EQUAL(static_cast<std::size_t>(6), bi.
n_boundary_ids());
356 bool has_bcid = bc_ids.count(noid) ||
357 side_bc_ids.count(noid) ||
358 edge_bc_ids.count(noid) ||
359 node_bc_ids.count(noid);
361 CPPUNIT_ASSERT(!has_bcid);
366 bool has_bcid = bc_ids.count(
id),
367 has_side_id = side_bc_ids.count(
id),
368 has_edge_id = edge_bc_ids.count(
id),
369 has_node_id = node_bc_ids.count(
id);
371 bool bad_name =
false;
375 bad_name = bad_name || (side_name != libmesh_map_find(expected_side_names,
id));
381 bad_name = bad_name || (edge_name != libmesh_map_find(expected_edge_names,
id));
387 bad_name = bad_name || (node_name != libmesh_map_find(expected_node_names,
id));
392 CPPUNIT_ASSERT(has_bcid);
395 CPPUNIT_ASSERT(has_side_id);
398 if (
id == 3 ||
id == 4)
399 CPPUNIT_ASSERT(has_edge_id);
401 CPPUNIT_ASSERT(!has_edge_id);
404 CPPUNIT_ASSERT(has_node_id);
408 CPPUNIT_ASSERT(!bad_name);
418 const unsigned int n_elem = 5;
419 const std::string mesh_filename =
"cube_mesh.xda";
433 CPPUNIT_ASSERT_EQUAL(static_cast<std::size_t>(0), bi.
n_edge_conds());
442 for (
const auto & elem :
mesh.element_ptr_range())
444 unsigned short side_max_x = 0, side_min_y = 0;
445 bool found_side_max_x =
false, found_side_min_y =
false;
447 for (
unsigned short side=0; side<elem->n_sides(); side++)
452 found_side_max_x =
true;
458 found_side_min_y =
true;
465 if (found_side_max_x && found_side_min_y)
466 for (
unsigned short e=0; e<elem->n_edges(); e++)
467 if (elem->is_edge_on_side(e, side_max_x) &&
468 elem->is_edge_on_side(e, side_min_y))
469 bi.
add_edge(elem, e, EDGE_BOUNDARY_ID);
478 std::unique_ptr<MeshBase> mesh_clone =
mesh.
clone();
479 CPPUNIT_ASSERT(mesh_clone->get_boundary_info() ==
518 CPPUNIT_ASSERT_EQUAL(bi2.get_sideset_name(0), std::string(
"zero"));
519 CPPUNIT_ASSERT_EQUAL(bi2.get_sideset_name(1), std::string(
"one"));
520 CPPUNIT_ASSERT_EQUAL(bi2.get_sideset_name(2), std::string(
"two"));
521 CPPUNIT_ASSERT_EQUAL(bi2.get_sideset_name(3), std::string(
"three"));
522 CPPUNIT_ASSERT_EQUAL(bi2.get_nodeset_name(0), std::string(
"ZERO"));
523 CPPUNIT_ASSERT_EQUAL(bi2.get_nodeset_name(1), std::string(
"ONE"));
527 CPPUNIT_ASSERT_EQUAL(bi3.get_sideset_name(0), std::string(
"zero"));
528 CPPUNIT_ASSERT_EQUAL(bi3.get_sideset_name(1), std::string(
"one"));
529 CPPUNIT_ASSERT_EQUAL(bi3.get_sideset_name(2), std::string(
"two"));
530 CPPUNIT_ASSERT_EQUAL(bi3.get_sideset_name(3), std::string(
"three"));
531 CPPUNIT_ASSERT_EQUAL(bi3.get_nodeset_name(0), std::string(
"ZERO"));
532 CPPUNIT_ASSERT_EQUAL(bi3.get_nodeset_name(1), std::string(
"ONE"));
535 #ifdef LIBMESH_ENABLE_DIRICHLET 587 std::unique_ptr<MeshBase> mesh_clone =
mesh.
clone();
588 CPPUNIT_ASSERT(mesh_clone->get_boundary_info() ==
594 System & system = es.add_system<
System> (
"SimpleSystem");
599 std::vector<unsigned int> variables;
600 variables.push_back(0);
601 std::set<boundary_id_type> shellface_ids;
602 shellface_ids.insert(20);
612 elem_bottom =
nullptr;
622 CPPUNIT_ASSERT_EQUAL(static_cast<std::size_t>(4), static_cast<std::size_t>(system.
n_constrained_dofs()));
629 std::vector<dof_id_type> dof_indices;
631 CPPUNIT_ASSERT_EQUAL(static_cast<std::size_t>(4), dof_indices.size());
633 for(
unsigned int i=0; i<dof_indices.size(); i++)
640 #endif // LIBMESH_ENABLE_DIRICHLET 642 #if LIBMESH_ENABLE_AMR 643 # if LIBMESH_ENABLE_EXCEPTIONS 654 auto mesh = std::make_unique<Mesh>(*TestCommWorld);
664 for (
auto & elem :
mesh->active_element_ptr_range())
673 bool threw_desired_exception =
false;
675 for (
auto & elem :
mesh->active_element_ptr_range())
677 const Point c = elem->vertex_average();
678 if (c(0) < 0.5 && c(1) > 0.5)
683 std::regex msg_regex(
"Trying to add boundary ID 3 which already exists on the ancestors");
684 CPPUNIT_ASSERT(std::regex_search(e.what(), msg_regex));
685 threw_desired_exception =
true;
691 CPPUNIT_ASSERT(threw_desired_exception);
693 threw_desired_exception =
false;
695 for (
auto & elem :
mesh->active_element_ptr_range())
697 const Point c = elem->vertex_average();
698 if (c(0) < 0.5 && c(1) > 0.5)
703 std::regex msg_regex(
"Trying to add boundary ID 3 which already exists on the ancestors");
704 CPPUNIT_ASSERT(std::regex_search(e.what(), msg_regex));
705 threw_desired_exception =
true;
712 CPPUNIT_ASSERT(threw_desired_exception);
716 threw_desired_exception =
false;
719 for (
auto & elem :
mesh->active_element_ptr_range())
721 const Point c = elem->vertex_average();
722 if (c(0) < 0.5 && c(1) > 0.5)
727 std::regex msg_regex(
"We cannot delete boundary ID 3 using a child because it is inherited from an ancestor");
728 CPPUNIT_ASSERT(std::regex_search(e.what(), msg_regex));
729 threw_desired_exception =
true;
736 CPPUNIT_ASSERT(threw_desired_exception);
738 # endif // LIBMESH_ENABLE_EXCEPTIONS 751 auto mesh = std::make_unique<Mesh>(*TestCommWorld);
769 std::vector<boundary_id_type> container;
772 CPPUNIT_ASSERT_EQUAL(static_cast<std::size_t>(2), container.size());
773 CPPUNIT_ASSERT_EQUAL(static_cast<boundary_id_type>(3), container[0]);
774 CPPUNIT_ASSERT_EQUAL(static_cast<boundary_id_type>(5), container[1]);
776 std::vector<std::vector<boundary_id_type>> all_bids_container;
778 CPPUNIT_ASSERT_EQUAL(static_cast<std::size_t>(elem->n_sides()), all_bids_container.size());
779 CPPUNIT_ASSERT_EQUAL(static_cast<std::size_t>(2), all_bids_container[3].size());
780 CPPUNIT_ASSERT_EQUAL(static_cast<boundary_id_type>(3), all_bids_container[3][0]);
781 CPPUNIT_ASSERT_EQUAL(static_cast<boundary_id_type>(5), all_bids_container[3][1]);
783 CPPUNIT_ASSERT_EQUAL(static_cast<std::size_t>(1), all_bids_container[0].size());
784 CPPUNIT_ASSERT_EQUAL(static_cast<boundary_id_type>(0), all_bids_container[0][0]);
785 CPPUNIT_ASSERT_EQUAL(static_cast<std::size_t>(1), all_bids_container[1].size());
786 CPPUNIT_ASSERT_EQUAL(static_cast<boundary_id_type>(1), all_bids_container[1][0]);
787 CPPUNIT_ASSERT_EQUAL(static_cast<std::size_t>(1), all_bids_container[1].size());
788 CPPUNIT_ASSERT_EQUAL(static_cast<boundary_id_type>(2), all_bids_container[2][0]);
802 auto mesh = std::make_unique<Mesh>(*TestCommWorld);
811 for (
auto & elem :
mesh->active_element_ptr_range())
813 const Point c = elem->vertex_average();
816 elem->subdomain_id() = 1;
820 elem->subdomain_id() = 2;
829 for (
auto & elem :
mesh->active_element_ptr_range())
831 const Point c = elem->vertex_average();
832 if (c(0) < 1 && c(0) > 0.5)
838 unsigned int count = 0;
839 for (
auto & elem :
mesh->active_element_ptr_range())
845 CPPUNIT_ASSERT_EQUAL(static_cast<unsigned int>(2), count);
852 for (
auto & elem :
mesh->active_element_ptr_range())
854 const Point c = elem->vertex_average();
865 for (
auto & elem :
mesh->active_element_ptr_range())
867 const Point c = elem->vertex_average();
884 for (
auto & elem :
mesh->active_element_ptr_range())
886 const Point c = elem->vertex_average();
889 if (c(0) > 0.5 && c(0) < 1 && c(1) < 0.5)
899 for (
auto & elem :
mesh->active_element_ptr_range())
901 const Point c = elem->vertex_average();
920 auto mesh = std::make_unique<Mesh>(*TestCommWorld);
930 for (
auto & elem :
mesh->active_element_ptr_range())
938 for (
auto & elem :
mesh->active_element_ptr_range())
940 const Point c = elem->vertex_average();
941 if (c(0) < 0.5 && c(1) > 0.5)
948 for (
auto & elem :
mesh->active_element_ptr_range())
950 const Point c = elem->vertex_average();
951 if (c(0) < 0.5 && c(1) > 0.5)
953 std::vector<boundary_id_type> container;
956 CPPUNIT_ASSERT_EQUAL(static_cast<std::size_t>(2), container.size());
957 CPPUNIT_ASSERT_EQUAL(static_cast<boundary_id_type>(5), container[0]);
958 CPPUNIT_ASSERT_EQUAL(static_cast<boundary_id_type>(3), container[1]);
960 std::vector<std::vector<boundary_id_type>> all_bids_container;
962 CPPUNIT_ASSERT_EQUAL(static_cast<std::size_t>(elem->n_sides()), all_bids_container.size());
963 CPPUNIT_ASSERT_EQUAL(static_cast<std::size_t>(2), all_bids_container[3].size());
964 CPPUNIT_ASSERT_EQUAL(static_cast<boundary_id_type>(5), all_bids_container[3][0]);
965 CPPUNIT_ASSERT_EQUAL(static_cast<boundary_id_type>(3), all_bids_container[3][1]);
966 CPPUNIT_ASSERT_EQUAL(static_cast<std::size_t>(1), all_bids_container[2].size());
967 CPPUNIT_ASSERT_EQUAL(static_cast<boundary_id_type>(2), all_bids_container[2][0]);
969 CPPUNIT_ASSERT_EQUAL(static_cast<std::size_t>(0), all_bids_container[0].size());
970 CPPUNIT_ASSERT_EQUAL(static_cast<std::size_t>(0), all_bids_container[1].size());
978 CPPUNIT_ASSERT_EQUAL(static_cast<std::size_t>(elem->n_sides()), all_bids_container.size());
979 CPPUNIT_ASSERT_EQUAL(static_cast<std::size_t>(1), all_bids_container[3].size());
980 CPPUNIT_ASSERT_EQUAL(static_cast<boundary_id_type>(3), all_bids_container[3][0]);
981 CPPUNIT_ASSERT_EQUAL(static_cast<std::size_t>(1), all_bids_container[2].size());
982 CPPUNIT_ASSERT_EQUAL(static_cast<boundary_id_type>(2), all_bids_container[2][0]);
999 auto mesh = std::make_unique<Mesh>(*TestCommWorld);
1010 for (
auto & elem :
mesh->active_element_ptr_range())
1017 for (
auto & elem :
mesh->active_element_ptr_range())
1019 const Point c = elem->vertex_average();
1020 if (c(0) < 0.5 && c(1) < 0.5)
1032 for (
auto & elem :
mesh->active_element_ptr_range())
1034 const Point c = elem->vertex_average();
1035 if (c(0) < 0.5 && c(0) > 0.25 && c(1) < 0.25)
1044 for (
auto & elem :
mesh->active_element_ptr_range())
1046 const Point c = elem->vertex_average();
1047 if (c(0) < 0.5 && c(0) > 0.25 && c(1) < 0.25)
1051 CPPUNIT_ASSERT_EQUAL(static_cast<unsigned int>(1), side_5);
1052 CPPUNIT_ASSERT_EQUAL(static_cast<unsigned int>(1), side_6);
1059 for (
auto & elem :
mesh->active_element_ptr_range())
1061 const Point c = elem->vertex_average();
1062 if (c(0) < 0.5 && c(0) > 0.25 && c(1) > 0.25 && c(1) < 0.5)
1065 CPPUNIT_ASSERT_EQUAL(static_cast<unsigned long>(2), sides.size());
1066 CPPUNIT_ASSERT_EQUAL(static_cast<unsigned int>(1), sides[0]);
1067 CPPUNIT_ASSERT_EQUAL(static_cast<unsigned int>(2), sides[1]);
1071 #endif //LIBMESH_ENABLE_AMR 1098 for (
const auto & elem :
mesh.element_ptr_range())
1100 for (
auto n : elem->node_index_range())
1102 const Node * node = elem->node_ptr(n);
1103 for (
auto s : {0,2})
1104 if (elem->is_node_on_side(n, s) && !elem->neighbor_ptr(s))
1106 for (
auto s : {1,3})
1137 for (
const auto & elem :
mesh.element_ptr_range())
1139 for (
auto s : {0,2})
1141 if (!elem->neighbor_ptr(s))
1149 for (
auto s : {1,3})
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...
A class to stub for features that should be in libMesh, but haven't been written yet, to be thrown by "libmesh_not_implemented();".
void allow_children_on_boundary_side(const bool children_on_boundary)
Whether or not to allow directly setting boundary sides on child elements.
This is the EquationSystems class.
virtual void read(const std::string &name, void *mesh_data=nullptr, bool skip_renumber_nodes_and_elements=false, bool skip_find_neighbors=false)=0
Interfaces for reading/writing a mesh to/from a file.
const std::set< boundary_id_type > & get_side_boundary_ids() const
virtual Node *& set_node(const unsigned int i)
A Node is like a Point, but with more information.
std::string & nodeset_name(boundary_id_type id)
bool has_boundary_id(const Node *const node, const boundary_id_type id) const
ConstFunction that simply returns 0.
std::vector< unsigned int > sides_with_boundary_id(const Elem *const elem, const boundary_id_type boundary_id) const
void testShellFaceConstraints()
void allow_renumbering(bool allow)
If false is passed in then this mesh will no longer be renumbered when being prepared for use...
void synchronize_global_id_set()
Synchronizes the boundary_ids set on each processor to determine global_boundary_ids.
std::size_t n_edge_conds() const
void dof_indices(const Elem *const elem, std::vector< dof_id_type > &di) const
void side_boundary_ids(const Elem *const elem, std::vector< std::vector< boundary_id_type >> &vec_to_fill) const
libMesh::Parallel::Communicator * TestCommWorld
bool refine_elements()
Only refines the user-requested elements.
std::size_t n_shellface_conds() const
void prepare_for_use(const bool skip_renumber_nodes_and_elements, const bool skip_find_neighbors)
Prepare a newly ecreated (or read) mesh for use.
void build_node_list_from_side_list(const std::set< boundary_id_type > &sideset_list={})
Adds nodes with boundary ids based on the side's boundary ids they are connected to.
CPPUNIT_TEST_SUITE_REGISTRATION(BoundaryInfoTest)
void remove_side_id(boundary_id_type id, bool global=false)
Removes all sides with boundary id id from the BoundaryInfo object, removes it from the set of side b...
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.
This class allows one to associate Dirichlet boundary values with a given set of mesh boundary ids an...
const Parallel::Communicator & comm() 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.
The libMesh namespace provides an interface to certain functionality in the library.
const BoundaryInfo & get_boundary_info() const
The information about boundary ids on the mesh.
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 ...
virtual std::unique_ptr< MeshBase > clone() const =0
Virtual "copy constructor".
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)=0
Add a new Node at Point p to the end of the vertex array, with processor_id procid.
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.
void build_side_list_from_node_list(const std::set< boundary_id_type > &nodeset_list={})
Adds sides to a sideset if every node on that side are in the same sideset.
bool coarsen_elements()
Only coarsens the user-requested elements.
const std::set< boundary_id_type > & get_node_boundary_ids() const
void renumber_side_id(boundary_id_type old_id, boundary_id_type new_id)
Changes all sides with boundary id old_id to instead be labeled by boundary id new_id.
void testBoundaryOnChildrenBoundaryIDs()
dof_id_type n_active_local_elem() const
virtual bool is_serial() const
void testEdgeBoundaryConditions()
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.
Implements (adaptive) mesh refinement algorithms for a MeshBase.
void testSelectiveRenumber()
Manages consistently variables, degrees of freedom, and coefficient vectors.
virtual Elem * add_elem(Elem *e)=0
Add elem e to the end of the element array.
static std::unique_ptr< Elem > build(const ElemType type, Elem *p=nullptr)
virtual dof_id_type max_elem_id() const =0
The BoundaryInfo class contains information relevant to boundary conditions including storing faces...
bool is_constrained_dof(const dof_id_type dof) const
void testBoundaryOnChildrenErrors()
unsigned int add_variable(std::string_view var, const FEType &type, const std::set< subdomain_id_type > *const active_subdomains=nullptr)
Adds the variable var to the list of variables for this system.
std::string & sideset_name(boundary_id_type id)
void renumber_node_id(boundary_id_type old_id, boundary_id_type new_id)
Changes all nodes with boundary id old_id to instead be labeled by boundary id new_id.
virtual void write(const std::string &name) const =0
const std::set< boundary_id_type > & get_boundary_ids() const
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...
virtual const Elem * query_elem_ptr(const dof_id_type i) const =0
void max(const T &r, T &o, Request &req) const
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...
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 ...
void testBuildNodeListFromSideList()
std::string & edgeset_name(boundary_id_type id)
void add_dirichlet_boundary(const DirichletBoundary &dirichlet_boundary)
Adds a copy of the specified Dirichlet boundary to the system.
void renumber_edge_id(boundary_id_type old_id, boundary_id_type new_id)
Changes all edges with boundary id old_id to instead be labeled by boundary id new_id.
bool is_children_on_boundary_side() const
void testBoundaryOnChildrenBoundarySides()
void testBuildSideListFromNodeList()
virtual const Node * node_ptr(const dof_id_type i) const =0
The Mesh class is a thin wrapper, around the ReplicatedMesh class by default.
processor_id_type processor_id() const
void remove_node_id(boundary_id_type id, bool global=false)
Removes all nodes with boundary id id from the BoundaryInfo object, removes it from the set of node b...
const DofMap & get_dof_map() const
processor_id_type processor_id() const
A Point defines a location in LIBMESH_DIM dimensional Real space.
const Point & point(const unsigned int i) const
void testBoundaryOnChildrenElementsRefineCoarsen()
dof_id_type n_constrained_dofs() const
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...