diff --git a/cpp/dolfinx/refinement/interval.h b/cpp/dolfinx/refinement/interval.h index 664af7282ad..05b49e836ea 100644 --- a/cpp/dolfinx/refinement/interval.h +++ b/cpp/dolfinx/refinement/interval.h @@ -34,7 +34,7 @@ namespace dolfinx::refinement::interval template std::tuple, std::vector, std::array, std::optional>, - std::vector> + std::optional>> compute_refinement_data(const mesh::Mesh& mesh, std::optional> cells, Option option) @@ -182,7 +182,7 @@ compute_refinement_data(const mesh::Mesh& mesh, graph::AdjacencyList cell_adj(std::move(cell_topology), std::move(offsets)); return {std::move(cell_adj), std::move(new_vertex_coords), xshape, - std::move(parent_cell), {}}; + std::move(parent_cell), std::nullopt}; } } // namespace dolfinx::refinement::interval diff --git a/cpp/dolfinx/refinement/plaza.h b/cpp/dolfinx/refinement/plaza.h index b625360a83c..c4e042622fd 100644 --- a/cpp/dolfinx/refinement/plaza.h +++ b/cpp/dolfinx/refinement/plaza.h @@ -286,7 +286,7 @@ face_long_edge(const mesh::Mesh& mesh) template std::tuple, std::vector, std::array, std::optional>, - std::vector> + std::optional>> compute_refinement(MPI_Comm neighbor_comm, std::span marked_edges, const graph::AdjacencyList& shared_edges, @@ -309,7 +309,10 @@ compute_refinement(MPI_Comm neighbor_comm, if (compute_parent_cell) parent_cell.emplace(); - std::vector parent_facet; + std::optional> parent_facet(std::nullopt); + if (compute_facets) + parent_facet.emplace(); + std::vector indices(num_cell_vertices + num_cell_edges); std::vector simplex_set; @@ -371,9 +374,9 @@ compute_refinement(MPI_Comm neighbor_comm, if (compute_facets) { if (tdim == 3) - parent_facet.insert(parent_facet.end(), {0, 1, 2, 3}); + parent_facet->insert(parent_facet->end(), {0, 1, 2, 3}); else - parent_facet.insert(parent_facet.end(), {0, 1, 2}); + parent_facet->insert(parent_facet->end(), {0, 1, 2}); } } else @@ -416,14 +419,14 @@ compute_refinement(MPI_Comm neighbor_comm, if (tdim == 3) { auto npf = compute_parent_facets<3>(simplex_set); - parent_facet.insert(parent_facet.end(), npf.begin(), - std::next(npf.begin(), simplex_set.size())); + parent_facet->insert(parent_facet->end(), npf.begin(), + std::next(npf.begin(), simplex_set.size())); } else { auto npf = compute_parent_facets<2>(simplex_set); - parent_facet.insert(parent_facet.end(), npf.begin(), - std::next(npf.begin(), simplex_set.size())); + parent_facet->insert(parent_facet->end(), npf.begin(), + std::next(npf.begin(), simplex_set.size())); } } @@ -457,7 +460,7 @@ compute_refinement(MPI_Comm neighbor_comm, template std::tuple, std::vector, std::array, std::optional>, - std::vector> + std::optional>> compute_refinement_data(const mesh::Mesh& mesh, std::optional> edges, Option option) diff --git a/cpp/dolfinx/refinement/refine.h b/cpp/dolfinx/refinement/refine.h index 0b73ef2f4ad..42753c434ab 100644 --- a/cpp/dolfinx/refinement/refine.h +++ b/cpp/dolfinx/refinement/refine.h @@ -62,7 +62,7 @@ create_refined_mesh(const mesh::Mesh& mesh, /// @return New Mesh and optional parent cell index, parent facet indices template std::tuple, std::optional>, - std::vector> + std::optional>> refine(const mesh::Mesh& mesh, std::optional> edges, bool redistribute, mesh::GhostMode ghost_mode = mesh::GhostMode::shared_facet, diff --git a/python/dolfinx/wrappers/refinement.cpp b/python/dolfinx/wrappers/refinement.cpp index dfcc4077c75..f91907ad5f3 100644 --- a/python/dolfinx/wrappers/refinement.cpp +++ b/python/dolfinx/wrappers/refinement.cpp @@ -56,8 +56,13 @@ void export_refinement_with_variable_mesh_type(nb::module_& m) if (cell.has_value()) python_cell.emplace(as_nbarray(std::move(cell.value()))); + std::optional> python_facet( + std::nullopt); + if (facet.has_value()) + python_facet.emplace(as_nbarray(std::move(facet.value()))); + return std::tuple{std::move(mesh1), std::move(python_cell), - as_nbarray(std::move(facet))}; + std::move(python_facet)}; }, nb::arg("mesh"), nb::arg("edges") = nb::none(), nb::arg("redistribute"), nb::arg("ghost_mode"), nb::arg("option"));