45 const std::vector<int> &volume_selection)
47 auto &mesh = state.
mesh;
49 std::set<int> node_ids{};
50 for (
int e = 0; e < mesh->n_elements(); ++e)
52 int body_id = mesh->get_body_id(e);
53 if (!is_selected(volume_selection, body_id))
58 for (
int i = 0; i < mesh->dimension() + 1; ++i)
60 const int vid = mesh->element_vertex(e, i);
61 if (!mesh->is_boundary_vertex(vid))
68 Eigen::VectorXi nodes = eigen_vec_from_iterable(node_ids);
69 std::sort(nodes.begin(), nodes.end());
75 const std::vector<int> &surface_selection)
77 auto &mesh = state.
mesh;
79 std::set<int> node_ids{};
82 for (
int i = 0; i < lb.size(); ++i)
84 int primitive_global_id = lb.global_primitive_id(i);
85 int boundary_id = mesh->get_boundary_id(primitive_global_id);
87 if (!is_selected(surface_selection, boundary_id))
92 for (
int n = 0; n < mesh->dimension(); ++n)
94 node_ids.insert(mesh->boundary_element_vertex(primitive_global_id, n));
99 Eigen::VectorXi nodes = eigen_vec_from_iterable(node_ids);
100 std::sort(nodes.begin(), nodes.end());
106 const std::vector<int> &exclude_surface_selections)
108 auto &mesh = state.
mesh;
110 if (!mesh->is_simplicial())
115 std::set<int> excluded_node_ids{};
116 std::set<int> all_node_ids{};
119 int e = lb.element_id();
120 for (
int i = 0; i < lb.size(); ++i)
122 int primitive_global_id = lb.global_primitive_id(i);
123 int boundary_id = mesh->get_boundary_id(primitive_global_id);
125 assert(mesh->is_simplex(e));
126 if (std::count(exclude_surface_selections.begin(), exclude_surface_selections.end(), boundary_id) != 0)
128 for (
int n = 0; n < mesh->dimension(); ++n)
130 excluded_node_ids.insert(mesh->boundary_element_vertex(primitive_global_id, n));
134 for (
int n = 0; n < mesh->dimension(); ++n)
136 all_node_ids.insert(mesh->boundary_element_vertex(primitive_global_id, n));
141 std::vector<int> node_ids;
142 std::set_difference(all_node_ids.begin(), all_node_ids.end(),
143 excluded_node_ids.begin(), excluded_node_ids.end(),
144 std::back_inserter(node_ids));
146 std::sort(node_ids.begin(), node_ids.end());
147 return eigen_vec_from_iterable(node_ids);