]> https://gitweb.dealii.org/ - dealii.git/commitdiff
Fix EXC_BAD_ACCESS occurring when marking all elements for refinement or coarsening...
authorOliver Sutton <oliversutton@me.com>
Fri, 17 Nov 2017 15:07:33 +0000 (15:07 +0000)
committerOliver Sutton <oliversutton@me.com>
Fri, 17 Nov 2017 15:07:33 +0000 (15:07 +0000)
source/grid/grid_refinement.cc

index 338bdf9b6a7877c772838f9d252589594028abeb..683031d9bc4ede10747959a546270aa3d7505e58 100644 (file)
@@ -306,19 +306,29 @@ GridRefinement::refine_and_coarsen_fixed_number (Triangulation<dim,spacedim> &tr
       Vector<typename VectorType::value_type> tmp (criteria);
       if (refine_cells)
         {
-          std::nth_element (tmp.begin(), tmp.begin()+refine_cells,
-                            tmp.end(),
-                            std::greater<double>());
-          refine (tria, criteria, *(tmp.begin() + refine_cells));
+          if (static_cast<size_t>(refine_cells) == criteria.size())
+              refine (tria, criteria, -std::numeric_limits<double>::max());
+          else
+            {
+              std::nth_element (tmp.begin(), tmp.begin()+refine_cells,
+                                tmp.end(),
+                                std::greater<double>());
+              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<double>());
-          coarsen (tria, criteria,
-                   *(tmp.begin() + tmp.size() - coarsen_cells));
+          if (static_cast<size_t>(coarsen_cells) == criteria.size())
+            coarsen (tria, criteria, std::numeric_limits<double>::max());
+          else
+            {
+              std::nth_element (tmp.begin(), tmp.begin()+tmp.size()-coarsen_cells,
+                                tmp.end(),
+                                std::greater<double>());
+              coarsen (tria, criteria,
+                       *(tmp.begin() + tmp.size() - coarsen_cells));
+            }
         }
     }
 }

In the beginning the Universe was created. This has made a lot of people very angry and has been widely regarded as a bad move.

Douglas Adams


Typeset in Trocchi and Trocchi Bold Sans Serif.