]> https://gitweb.dealii.org/ - dealii.git/commitdiff
Fix the same bug as before but in a similar function.
authorWolfgang Bangerth <bangerth@math.tamu.edu>
Wed, 4 Jul 2012 14:02:53 +0000 (14:02 +0000)
committerWolfgang Bangerth <bangerth@math.tamu.edu>
Wed, 4 Jul 2012 14:02:53 +0000 (14:02 +0000)
git-svn-id: https://svn.dealii.org/trunk@25685 0785d39b-7218-0410-832d-ea1e28bc413d

deal.II/source/grid/grid_tools.cc

index ac8ff47efd544acca7cdbe4b5a7ce821cbd5b287..e81c6eb272b641405b2118a6b22a4d816c6a1e7a 100644 (file)
@@ -910,24 +910,41 @@ namespace GridTools
 
         for(; cell != endc; ++cell)
           {
-            const Point<dim> p_cell
-              = mapping[(*cell)->active_fe_index()].transform_real_to_unit_cell(*cell, p);
-
-                                             // calculate the infinity norm of
-                                             // the distance vector to the unit cell.
-            const double dist = GeometryInfo<dim>::distance_to_unit_cell(p_cell);
-
-                                             // We compare if the point is inside the
-                                             // unit cell (or at least not too far
-                                             // outside). If it is, it is also checked
-                                             // that the cell has a more refined state
-            if (dist < best_distance ||
-                (dist == best_distance && (*cell)->level() > best_level))
-              {
-                best_distance = dist;
-                best_level    = (*cell)->level();
-                best_cell     = std::make_pair(*cell, p_cell);
-              }
+           try
+             {
+               const Point<dim> p_cell
+                 = mapping[(*cell)->active_fe_index()].transform_real_to_unit_cell(*cell, p);
+
+                                                // calculate the infinity norm of
+                                                // the distance vector to the unit cell.
+               const double dist = GeometryInfo<dim>::distance_to_unit_cell(p_cell);
+
+                                                // We compare if the point is inside the
+                                                // unit cell (or at least not too far
+                                                // outside). If it is, it is also checked
+                                                // that the cell has a more refined state
+               if (dist < best_distance ||
+                   (dist == best_distance && (*cell)->level() > best_level))
+                 {
+                   best_distance = dist;
+                   best_level    = (*cell)->level();
+                   best_cell     = std::make_pair(*cell, p_cell);
+                 }
+             }
+           catch (typename MappingQ1<dim,spacedim>::ExcTransformationFailed &)
+             {
+                                                // ok, the transformation
+                                                // failed presumably
+                                                // because the point we
+                                                // are looking for lies
+                                                // outside the current
+                                                // cell. this means that
+                                                // the current cell can't
+                                                // be the cell around the
+                                                // point, so just ignore
+                                                // this cell and move on
+                                                // to the next
+             }
           }
 
         Assert (best_cell.first.state() == IteratorState::valid,

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.