]> https://gitweb.dealii.org/ - dealii-svn.git/commitdiff
Use get_new_point_on_quad as optimization of get_intermediate_points_on_quad in case...
authorhartmann <hartmann@0785d39b-7218-0410-832d-ea1e28bc413d>
Wed, 22 Jun 2005 08:33:59 +0000 (08:33 +0000)
committerhartmann <hartmann@0785d39b-7218-0410-832d-ea1e28bc413d>
Wed, 22 Jun 2005 08:33:59 +0000 (08:33 +0000)
git-svn-id: https://svn.dealii.org/trunk@10920 0785d39b-7218-0410-832d-ea1e28bc413d

deal.II/deal.II/source/grid/tria_boundary_lib.cc

index 0117fc8934ab65dbc6939ae4f8b1a6e07090bc51..119237eb44cbc6b0b829ee6fa056079d1b5c2f7d 100644 (file)
@@ -145,22 +145,27 @@ CylinderBoundary<3>::get_intermediate_points_on_quad (
   const Triangulation<3>::quad_iterator &quad,
   std::vector<Point<3> > &points) const
 {
-  unsigned int m=static_cast<unsigned int> (std::sqrt(static_cast<double>(points.size())));
-  Assert(points.size()==m*m, ExcInternalError());
-
-  std::vector<Point<3> > lp3(m);
-  std::vector<Point<3> > lp1(m);
-  
-  get_intermediate_points_on_line(quad->line(3), lp3);
-  get_intermediate_points_on_line(quad->line(1), lp1);
-  
-  std::vector<Point<3> > lps(m);
-  for (unsigned int i=0; i<m; ++i)
+  if (points.size()==1)
+    points[0]=get_new_point_on_quad(quad);
+  else
     {
-      get_intermediate_points_between_points(lp3[i], lp1[i], lps);
+      unsigned int m=static_cast<unsigned int> (std::sqrt(static_cast<double>(points.size())));
+      Assert(points.size()==m*m, ExcInternalError());
+      
+      std::vector<Point<3> > lp3(m);
+      std::vector<Point<3> > lp1(m);
+
+      get_intermediate_points_on_line(quad->line(3), lp3);
+      get_intermediate_points_on_line(quad->line(1), lp1);
       
-      for (unsigned int j=0; j<m; ++j)
-       points[i*m+j]=lps[j];
+      std::vector<Point<3> > lps(m);
+      for (unsigned int i=0; i<m; ++i)
+       {
+         get_intermediate_points_between_points(lp3[i], lp1[i], lps);
+         
+         for (unsigned int j=0; j<m; ++j)
+           points[i*m+j]=lps[j];
+       }
     }
 }
 
@@ -407,22 +412,27 @@ HyperBallBoundary<3>::get_intermediate_points_on_quad (
   const Triangulation<3>::quad_iterator &quad,
   std::vector<Point<3> > &points) const
 {
-  unsigned int m=static_cast<unsigned int> (std::sqrt(static_cast<double>(points.size())));
-  Assert(points.size()==m*m, ExcInternalError());
-
-  std::vector<Point<3> > lp3(m);
-  std::vector<Point<3> > lp1(m);
-  
-  get_intermediate_points_on_line(quad->line(3), lp3);
-  get_intermediate_points_on_line(quad->line(1), lp1);
-  
-  std::vector<Point<3> > lps(m);
-  for (unsigned int i=0; i<m; ++i)
+  if (points.size()==1)
+    points[0]=get_new_point_on_quad(quad);
+  else
     {
-      get_intermediate_points_between_points(lp3[i], lp1[i], lps);
+      unsigned int m=static_cast<unsigned int> (std::sqrt(static_cast<double>(points.size())));
+      Assert(points.size()==m*m, ExcInternalError());
+      
+      std::vector<Point<3> > lp3(m);
+      std::vector<Point<3> > lp1(m);
       
-      for (unsigned int j=0; j<m; ++j)
-       points[i*m+j]=lps[j];
+      get_intermediate_points_on_line(quad->line(3), lp3);
+      get_intermediate_points_on_line(quad->line(1), lp1);
+      
+      std::vector<Point<3> > lps(m);
+      for (unsigned int i=0; i<m; ++i)
+       {
+         get_intermediate_points_between_points(lp3[i], lp1[i], lps);
+         
+         for (unsigned int j=0; j<m; ++j)
+           points[i*m+j]=lps[j];
+       }
     }
 }
 
@@ -567,19 +577,23 @@ HalfHyperBallBoundary<dim>::
 get_intermediate_points_on_quad (const typename Triangulation<dim>::quad_iterator &quad,
                                 std::vector<Point<dim> > &points) const
 {
-                                  // check whether center of object is
-                                  // at x==0, since then it belongs
-                                  // to the plane part of the
-                                  // boundary
-  const Point<dim> quad_center = quad->center();
-  if (quad_center(0) == this->center(0))
-    StraightBoundary<dim>::get_intermediate_points_on_quad (quad, points);
+  if (points.size()==1)
+    points[0]=get_new_point_on_quad(quad);
   else
-    HyperBallBoundary<dim>::get_intermediate_points_on_quad (quad, points);
+    {
+                                      // check whether center of
+                                      // object is at x==0, since
+                                      // then it belongs to the plane
+                                      // part of the boundary
+      const Point<dim> quad_center = quad->center();
+      if (quad_center(0) == this->center(0))
+       StraightBoundary<dim>::get_intermediate_points_on_quad (quad, points);
+      else
+       HyperBallBoundary<dim>::get_intermediate_points_on_quad (quad, points);
+    }
 }
 
 
-
 #if deal_II_dimension == 1
 
 template <>

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.