@@ -3876,7 +3876,8 @@ void CpGrid::populateRefinedCells(std::vector<Dune::cpgrid::EntityVariableBase<c
38763876 const int & preAdaptMaxLevel,
38773877 const std::map<std::array<int ,2 >,int >& markedElemAndEquivRefinedCorn_to_corner,
38783878 const std::vector<std::vector<std::array<int ,2 >>>& cornerInMarkedElemWithEquivRefinedCorner,
3879- const std::vector<std::array<int ,3 >>& cells_per_dim_vec) const
3879+ const std::vector<std::array<int ,3 >>& cells_per_dim_vec,
3880+ const std::vector<Dune::cpgrid::EntityVariableBase<cpgrid::Geometry<0 ,3 >>>& refined_corners_vec) const
38803881{
38813882 // --- Refined cells ---
38823883 for (std::size_t shiftedLevel = 0 ; shiftedLevel < refined_cell_count_vec.size (); ++shiftedLevel) {
@@ -3885,7 +3886,9 @@ void CpGrid::populateRefinedCells(std::vector<Dune::cpgrid::EntityVariableBase<c
38853886 refined_cell_to_point_vec[shiftedLevel].resize (refined_cell_count_vec[shiftedLevel]);
38863887 refined_global_cell_vec[shiftedLevel].resize (refined_cell_count_vec[shiftedLevel]);
38873888
3888- const auto & allLevelCorners = refined_geometries_vec[shiftedLevel].geomVector (std::integral_constant<int ,3 >());
3889+ auto copyCorners = refined_corners_vec[shiftedLevel];
3890+ auto allLevelCorners = *refined_geometries_vec[shiftedLevel].geomVector (std::integral_constant<int ,3 >());
3891+ allLevelCorners.swap (copyCorners);
38893892
38903893 for (int cell = 0 ; cell < refined_cell_count_vec[shiftedLevel]; ++cell) {
38913894
@@ -3972,7 +3975,7 @@ void CpGrid::populateRefinedCells(std::vector<Dune::cpgrid::EntityVariableBase<c
39723975
39733976 // Create a pointer to the first element of "refined_cell_to_point" (required as the fourth argement to construct a Geometry<3,3> type object).
39743977 int * indices_storage_ptr = refined_cell_to_point_vec[shiftedLevel][cell].data ();
3975- refined_cells_vec[shiftedLevel][cell] = cpgrid::Geometry<3 ,3 >(elemLgrGeom.center (), elemLgrGeom.volume (), allLevelCorners. get () , indices_storage_ptr);
3978+ refined_cells_vec[shiftedLevel][cell] = cpgrid::Geometry<3 ,3 >(elemLgrGeom.center (), elemLgrGeom.volume (), & allLevelCorners, indices_storage_ptr);
39763979 } // refined_cells
39773980 // Refined face to cell.
39783981 refined_cell_to_face_vec[shiftedLevel].makeInverseRelation (refined_face_to_cell_vec[shiftedLevel]);
@@ -4048,7 +4051,8 @@ void CpGrid::setRefinedLevelGridsGeometries( /* Refined corner arguments */
40484051 preAdaptMaxLevel,
40494052 markedElemAndEquivRefinedCorn_to_corner,
40504053 cornerInMarkedElemWithEquivRefinedCorner,
4051- cells_per_dim_vec);
4054+ cells_per_dim_vec,
4055+ refined_corners_vec);
40524056
40534057}
40544058
0 commit comments