]> https://gitweb.dealii.org/ - dealii-svn.git/commitdiff
Add HalfHyperBallBoundary and move implementation of constructors of HyperBallBoundar...
authorwolf <wolf@0785d39b-7218-0410-832d-ea1e28bc413d>
Thu, 16 Dec 1999 14:27:00 +0000 (14:27 +0000)
committerwolf <wolf@0785d39b-7218-0410-832d-ea1e28bc413d>
Thu, 16 Dec 1999 14:27:00 +0000 (14:27 +0000)
git-svn-id: https://svn.dealii.org/trunk@2073 0785d39b-7218-0410-832d-ea1e28bc413d

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

index 5f4839d907b3512ecfbf496e6520089abba01dd9..11453234496d01fa59b1c2b42429a751e713ba03 100644 (file)
@@ -31,8 +31,8 @@ class HyperBallBoundary : public StraightBoundary<dim> {
                                     /**
                                      * Constructor
                                      */
-    HyperBallBoundary (const Point<dim> p=Point<dim>(), const double radius=1.0) :
-                   center(p), radius(radius) {};
+    HyperBallBoundary (const Point<dim> p      = Point<dim>(),
+                      const double     radius = 1.0);
 
                                     /**
                                      * Refer to the general documentation of
@@ -51,7 +51,7 @@ class HyperBallBoundary : public StraightBoundary<dim> {
     get_new_point_on_quad (const typename Triangulation<dim>::quad_iterator &quad) const;
 
 
-  private:
+  protected:
                                     /**
                                      * Center point of the hyperball.
                                      */
@@ -63,6 +63,42 @@ class HyperBallBoundary : public StraightBoundary<dim> {
     const double radius;
 };
 
+
+
+/**
+ * Variant of #HyperBallBoundary# which denotes a half hyper ball
+ * where the first coordinate is restricted to the range $x>=0$ (or
+ * $x>=center(0)$). In two dimensions, this equals the right half
+ * circle, in three space dimensions it is a half ball.
+ *
+ * @author Wolfgang Bangerth, 1999
+ */
+template <int dim>
+class HalfHyperBallBoundary : public HyperBallBoundary<dim> {
+  public:
+                                    /**
+                                     * Constructor
+                                     */
+    HalfHyperBallBoundary (const Point<dim> p      = Point<dim>(),
+                          const double     radius = 1.0);
+
+                                    /**
+                                     * Check if on the line #x==0#,
+                                     * otherwise pass to the base
+                                     * class.
+                                     */
+    virtual Point<dim>
+    get_new_point_on_line (const typename Triangulation<dim>::line_iterator &line) const;
+
+                                    /**
+                                     * Check if on the line #x==0#,
+                                     * otherwise pass to the base
+                                     * class.
+                                     */
+    virtual Point<dim>
+    get_new_point_on_quad (const typename Triangulation<dim>::quad_iterator &quad) const;
+};
+
     
 
 
index d2d012b320c2915242742e075851e694f270d340..2aed965181f7489058713954abdc61a991a25250 100644 (file)
 
 
 
+template <int dim>
+HyperBallBoundary<dim>::HyperBallBoundary (const Point<dim> p,
+                                          const double     radius) :
+               center(p), radius(radius)
+{};
+
+
+
 template <int dim>
 Point<dim>
 HyperBallBoundary<dim>::get_new_point_on_line (const typename Triangulation<dim>::line_iterator &line) const
@@ -59,6 +67,42 @@ get_new_point_on_quad (const typename Triangulation<dim>::quad_iterator &quad) c
 
 
 
+template <int dim>
+HalfHyperBallBoundary<dim>::HalfHyperBallBoundary (const Point<dim> center,
+                                                  const double     radius) :
+               HyperBallBoundary<dim> (center, radius)
+{};
+
+
+
+template <int dim>
+Point<dim>
+HalfHyperBallBoundary<dim>::
+get_new_point_on_line (const typename Triangulation<dim>::line_iterator &line) const 
+{
+  const Point<dim> line_center = line->center();
+  if (line_center(0) == center(0))
+    return line_center;
+  else
+    return HyperBallBoundary<dim>::get_new_point_on_line (line);
+};
+
+
+
+
+template <int dim>
+Point<dim>
+HalfHyperBallBoundary<dim>::
+get_new_point_on_quad (const typename Triangulation<dim>::quad_iterator &quad) const 
+{
+  const Point<dim> quad_center = quad->center();
+  if (quad_center(0) == center(0))
+    return quad_center;
+  else
+    return HyperBallBoundary<dim>::get_new_point_on_quad (quad);
+};
+
+
 
 template <int dim>
 HyperShellBoundary<dim>::HyperShellBoundary (const Point<dim> &center) :
@@ -129,4 +173,5 @@ get_new_point_on_quad (const typename Triangulation<dim>::quad_iterator &quad) c
 
 // explicit instantiations
 template class HyperBallBoundary<deal_II_dimension>;
+template class HalfHyperBallBoundary<deal_II_dimension>;
 template class HyperShellBoundary<deal_II_dimension>;

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.