]> https://gitweb.dealii.org/ - dealii-svn.git/commitdiff
Added a template argument to the Function classes. branch_boundary_to_manifold
authorheltai <heltai@0785d39b-7218-0410-832d-ea1e28bc413d>
Fri, 18 Jul 2014 13:18:57 +0000 (13:18 +0000)
committerheltai <heltai@0785d39b-7218-0410-832d-ea1e28bc413d>
Fri, 18 Jul 2014 13:18:57 +0000 (13:18 +0000)
git-svn-id: https://svn.dealii.org/branches/branch_boundary_to_manifold@33196 0785d39b-7218-0410-832d-ea1e28bc413d

deal.II/include/deal.II/grid/tria.h
deal.II/include/deal.II/grid/tria_accessor.h
deal.II/include/deal.II/grid/tria_accessor.templates.h
deal.II/source/grid/grid_tools.cc
deal.II/source/grid/tria.cc

index 5af6ef9b2959496fb1db200940348a856cbbf62e..abb950789322288f4f3bac36632f812333780d28 100644 (file)
@@ -43,6 +43,9 @@ DEAL_II_NAMESPACE_OPEN
 template <int dim, int spacedim> class Boundary;
 template <int dim, int spacedim> class StraightBoundary;
 
+template <int spacedim> class Manifold;
+template <int spacedim> class FlatManifold;
+
 template <int, int, int> class TriaAccessor;
 template <int spacedim> class TriaAccessor<0,1,spacedim>;
 
@@ -1235,12 +1238,18 @@ private:
 
 public:
   /**
-   * Default manifold object. This is used
-   * for those objects for which no
-   * boundary description has been explicitly
-   * set using set_manifold().
+   * Default manifold object. This is used for those objects for which
+   * no manifold description has been explicitly set using
+   * set_manifold().
+   */
+  static const FlatManifold<spacedim> flat_manifold;
+
+  /**
+   * Default boundary object. This is used for those objects for which
+   * no boundary description has been explicitly set using
+   * set_boundary().
    */
-    static const StraightBoundary<dim,spacedim> straight_boundary;
+  static const StraightBoundary<dim,spacedim> straight_boundary;
 
   /**
    * Declare some symbolic names
@@ -1840,7 +1849,7 @@ public:
    * @see @ref GlossBoundaryIndicator "Glossary entry on boundary indicators"
    */
   void set_boundary (const types::manifold_id   number,
-                     const Boundary<dim,spacedim> &boundary_object);
+                     const Manifold<spacedim> &boundary_object);
 
 
   /**
@@ -1875,7 +1884,7 @@ public:
    *
    * @see @ref GlossBoundaryIndicator "Glossary entry on boundary indicators"
    */
-  const Boundary<dim,spacedim> &get_boundary (const types::manifold_id number) const;
+  const Manifold<spacedim> &get_boundary (const types::manifold_id number) const;
 
   /**
    * Return a constant reference to a Manifold object used for this
@@ -1885,7 +1894,7 @@ public:
    *
    * @see @ref GlossManifoldIndicator "Glossary entry on manifold indicators"
    */    
-  const Boundary<dim,spacedim> &get_manifold (const types::manifold_id number) const;
+  const Manifold<spacedim> &get_manifold (const types::manifold_id number) const;
 
   /**
    * Returns a vector containing all boundary indicators assigned to
@@ -3319,7 +3328,8 @@ private:
    *  Collection of manifold objects. We store only objects, which are
    *  not of type FlatManifold.
    */
-  std::map<types::manifold_id, SmartPointer<const Boundary<dim,spacedim> , Triangulation<dim, spacedim> > >  manifold;
+  std::map<types::manifold_id, SmartPointer<const Manifold<spacedim> , 
+                                           Triangulation<dim, spacedim> > >  manifold;
 
 
   /**
index 122090bc63ddb8703b6a45083bde6d9ab713cbad..83cb8fed548666cde542e97cebb093e71c1f6ae2 100644 (file)
@@ -1187,9 +1187,13 @@ public:
   /**
    * Return a constant reference to the manifold object used for this
    * object. This function exists for backward compatibility and calls
-   * get_manifold() internally.
+   * get_manifold() internally, casting the result to a
+   * Boundary<dim,spacedim>. If the object cannot be casted, it checks
+   * if the Manifold was actually a FlatManifold, in which case it
+   * returns a StraightBoundary<dim, spacedim>.
    */
-  const Boundary<dim,spacedim> &get_boundary () const;
+  //  const Boundary<dim,spacedim> &get_boundary () const;
+  const Manifold<spacedim> &get_boundary () const;
     
   /**
    * Return a constant reference to the manifold object used for this object.
@@ -1200,7 +1204,7 @@ public:
    * involves querying both the manifold or boundary indicators. See there
    * for more information.
    */
-  const Boundary<dim,spacedim> &get_manifold () const;
+  const Manifold<spacedim> &get_manifold () const;
 
   /**
    * @}
index b208e361eb8f094bef124bb7470b957e0c5528f7..b77ca261dc97b3f57727a7ae36d24a0e47d6264b 100644 (file)
@@ -1910,15 +1910,30 @@ TriaAccessor<structdim, dim, spacedim>::at_boundary () const
 
 
 template <int structdim, int dim, int spacedim>
-const Boundary<dim,spacedim> &
+const Manifold<spacedim> &
 TriaAccessor<structdim, dim, spacedim>::get_boundary () const
 {
+//   const Boundary<dim,spacedim> * ptr = 
+//     dynamic_cast<const Boundary<dim,spacedim> *>(&get_manifold());
+//   if(ptr)
+//     return *ptr;
+//   else
+//     { 
+//       // Check if the object returned was a FlatManifold...
+//       if(dynamic_cast<const FlatManifold<spacedim> *>(&get_manifold()))
+//     return Triangulation<dim,spacedim>::straight_boundary;
+//       else 
+//     Assert(false, 
+//            ExcMessage("Requested object is not a Boundary."));
+//       return Triangulation<dim,spacedim>::straight_boundary;
+//     }
+//   return Triangulation<dim,spacedim>::straight_boundary;
   return get_manifold();
 }
 
 
 template <int structdim, int dim, int spacedim>
-const Boundary<dim,spacedim> &
+const Manifold<spacedim> &
 TriaAccessor<structdim, dim, spacedim>::get_manifold () const
 {                                
   Assert (this->used(), TriaAccessorExceptions::ExcCellNotUsed());
@@ -1935,8 +1950,8 @@ TriaAccessor<structdim, dim, spacedim>::get_manifold () const
                                    dim < spacedim ? 
                                    this->objects().boundary_or_material_id[this->present_index].material_id:
                                    numbers::invalid_manifold_id);
-  else
-    return this->tria->get_manifold(mi);
+
+  return this->tria->get_manifold(mi);
 }
 
 
index 8a1e931f9274e282e25b89e60478074fa4b08510..9e754916f07fe50ef074a5a63be22766672a5fbc 100644 (file)
@@ -1755,7 +1755,8 @@ next_cell:
         const Boundary<Iterator::AccessorType::dimension,
               Iterator::AccessorType::space_dimension>
               *manifold = (respect_manifold ?
-                           &object->get_boundary() :
+                           dynamic_cast<const Boundary<Iterator::AccessorType::dimension,
+                          Iterator::AccessorType::space_dimension>* >(&object->get_boundary()) :
                            0);
 
         const unsigned int structdim = Iterator::AccessorType::structure_dimension;
index 3ed89fc573caf7f392f325372b60cc63f386abdb..b96bb1c3218549d81630250786f25d88e53cae4a 100644 (file)
@@ -24,6 +24,7 @@
 #include <deal.II/grid/tria_levels.h>
 #include <deal.II/grid/tria_faces.h>
 #include <deal.II/grid/tria_boundary.h>
+#include <deal.II/grid/manifold.h>
 #include <deal.II/grid/tria_accessor.h>
 #include <deal.II/grid/tria_iterator.h>
 #include <deal.II/grid/grid_tools.h>
@@ -4055,7 +4056,7 @@ namespace internal
                 // to the information
                 // stored in the
                 // boundary class
-               const Boundary<dim,spacedim> &manifold = cell->get_manifold();
+               const Manifold<spacedim> &manifold = cell->get_manifold();
                
                 triangulation.vertices[next_unused_vertex] =
                   manifold.get_new_point_on_quad (cell);
@@ -9484,6 +9485,12 @@ namespace internal
 }
 
 
+template <int dim, int spacedim>
+const FlatManifold<spacedim>
+Triangulation<dim, spacedim>::flat_manifold = FlatManifold<spacedim>();
+
+
+
 template <int dim, int spacedim>
 const StraightBoundary<dim,spacedim>
 Triangulation<dim, spacedim>::straight_boundary = StraightBoundary<dim,spacedim>();
@@ -9590,7 +9597,7 @@ Triangulation<dim, spacedim>::set_mesh_smoothing(const MeshSmoothing mesh_smooth
 template <int dim, int spacedim>
 void
 Triangulation<dim, spacedim>::set_boundary (const types::manifold_id m_number,
-                                            const Boundary<dim, spacedim> &boundary_object)
+                                            const Manifold<spacedim> &boundary_object)
 {
   Assert(m_number < numbers::invalid_manifold_id,
         ExcIndexRange(m_number,0,numbers::invalid_manifold_id));
@@ -9621,7 +9628,7 @@ Triangulation<dim, spacedim>::set_manifold (const types::manifold_id m_number)
 
 
 template <int dim, int spacedim>
-const Boundary<dim,spacedim> &
+const Manifold<spacedim> &
 Triangulation<dim, spacedim>::get_boundary (const types::manifold_id m_number) const
 {
   return get_manifold(m_number);
@@ -9629,12 +9636,12 @@ Triangulation<dim, spacedim>::get_boundary (const types::manifold_id m_number) c
 
 
 template <int dim, int spacedim>
-const Boundary<dim,spacedim> &
+const Manifold<spacedim> &
 Triangulation<dim, spacedim>::get_manifold (const types::manifold_id m_number) const
 {
                                   //look, if there is a manifold stored at
                                   //manifold_id number.
-  typename std::map<types::manifold_id, SmartPointer<const Boundary<dim,spacedim>, Triangulation<dim, spacedim> > >::const_iterator it
+  typename std::map<types::manifold_id, SmartPointer<const Manifold<spacedim>, Triangulation<dim, spacedim> > >::const_iterator it
     = manifold.find(m_number);
 
   if (it != manifold.end())
@@ -9646,8 +9653,8 @@ Triangulation<dim, spacedim>::get_manifold (const types::manifold_id m_number) c
     {
       //if we have not found an entry
       //connected with number, we return
-      //straight_boundary
-      return straight_boundary;
+      //flat_manifold
+      return flat_manifold;
     }
 }
 
@@ -9728,7 +9735,7 @@ copy_triangulation (const Triangulation<dim, spacedim> &old_tria)
   faces         = new internal::Triangulation::TriaFaces<dim>(*old_tria.faces);
 
   typename std::map<types::manifold_id,
-    SmartPointer<const Boundary<dim,spacedim> , Triangulation<dim, spacedim> > >::const_iterator
+    SmartPointer<const Manifold<spacedim>, Triangulation<dim, spacedim> > >::const_iterator
   bdry_iterator = old_tria.manifold.begin();
   for (; bdry_iterator != old_tria.manifold.end() ; bdry_iterator++)
     manifold[bdry_iterator->first] = bdry_iterator->second;

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.