From: Oliver Sutton Date: Fri, 17 Nov 2017 15:07:33 +0000 (+0000) Subject: Fix EXC_BAD_ACCESS occurring when marking all elements for refinement or coarsening... X-Git-Tag: v9.0.0-rc1~755^2~3 X-Git-Url: https://gitweb.dealii.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=441da20d7ca1d90a73887961205ffdf60b802620;p=dealii.git Fix EXC_BAD_ACCESS occurring when marking all elements for refinement or coarsening using refine_and_coarsen_fixed_number. --- diff --git a/source/grid/grid_refinement.cc b/source/grid/grid_refinement.cc index 338bdf9b6a..683031d9bc 100644 --- a/source/grid/grid_refinement.cc +++ b/source/grid/grid_refinement.cc @@ -306,19 +306,29 @@ GridRefinement::refine_and_coarsen_fixed_number (Triangulation &tr Vector tmp (criteria); if (refine_cells) { - std::nth_element (tmp.begin(), tmp.begin()+refine_cells, - tmp.end(), - std::greater()); - refine (tria, criteria, *(tmp.begin() + refine_cells)); + if (static_cast(refine_cells) == criteria.size()) + refine (tria, criteria, -std::numeric_limits::max()); + else + { + std::nth_element (tmp.begin(), tmp.begin()+refine_cells, + tmp.end(), + std::greater()); + refine (tria, criteria, *(tmp.begin() + refine_cells)); + } } if (coarsen_cells) { - std::nth_element (tmp.begin(), tmp.begin()+tmp.size()-coarsen_cells, - tmp.end(), - std::greater()); - coarsen (tria, criteria, - *(tmp.begin() + tmp.size() - coarsen_cells)); + if (static_cast(coarsen_cells) == criteria.size()) + coarsen (tria, criteria, std::numeric_limits::max()); + else + { + std::nth_element (tmp.begin(), tmp.begin()+tmp.size()-coarsen_cells, + tmp.end(), + std::greater()); + coarsen (tria, criteria, + *(tmp.begin() + tmp.size() - coarsen_cells)); + } } } }