]> https://gitweb.dealii.org/ - dealii.git/commitdiff
Move add_periodicity and member variables to the base class
authorDaniel Arndt <daniel.arndt@iwr.uni-heidelberg.de>
Thu, 25 Feb 2016 10:20:34 +0000 (11:20 +0100)
committerDaniel Arndt <daniel.arndt@iwr.uni-heidelberg.de>
Tue, 29 Mar 2016 11:24:08 +0000 (13:24 +0200)
include/deal.II/distributed/tria.h
include/deal.II/grid/tria.h
source/distributed/tria.cc
source/grid/tria.cc

index 5e0afca59d9bd7898e740fa347d770977f03677d..95e5859e657439d4322e2d85bac7832c307aa150 100644 (file)
@@ -757,7 +757,8 @@ namespace parallel
       get_coarse_cell_to_p4est_tree_permutation() const;
 
       /**
-       * Join faces in the p4est forest for periodic boundary conditions. As a
+       * In addition to the action in the base class Triangulation, this function
+       * joins faces in the p4est forest for periodic boundary conditions. As a
        * result, each pair of faces will differ by at most one refinement
        * level and ghost neighbors will be available across these faces.
        *
@@ -773,7 +774,7 @@ namespace parallel
        * once is possible, but not recommended: The function destroys and
        * rebuilds the p4est forest each time it is called.
        */
-      void
+      virtual void
       add_periodicity
       (const std::vector<GridTools::PeriodicFacePair<cell_iterator> > &);
 
index ba093313276400b2400f4b78b7708947a9e0991e..0678a6abfb3961b6dd1ea7df3d4111a1081bfb89 100644 (file)
@@ -1465,6 +1465,18 @@ public:
     distorted_cells;
   };
 
+  /**
+   * If add_periodicity() is called, this variable stores the given
+   * periodic face pairs on level 0 for later access during the
+   * identification of ghost cells for the multigrid hierarchy.
+   */
+  std::vector<GridTools::PeriodicFacePair<cell_iterator> > periodic_face_pairs_level_0;
+
+  /**
+   * If add_periodicity() is called, this variable stores the active periodic face pairs.
+   * The variable is updated on refinement.
+   */
+  std::map<GridTools::PeriodicFacePair<cell_iterator>, GridTools::PeriodicFacePair<cell_iterator> > periodic_face_map;
 
   /**
    * Make the dimension available in function templates.
@@ -2961,6 +2973,28 @@ public:
   void load (Archive &ar,
              const unsigned int version);
 
+
+  /**
+    * Declare the (coarse) face pairs given in the argument of this function
+    * as periodic. This way it it possible to obtain neighbors across periodic
+    * boundaries.
+    * This function initializes ActivePeriodicFacePairs and on refinement this
+    *
+    * The vector can be filled by the function
+    * GridTools::collect_periodic_faces.
+    *
+    * For more information on periodic boundary conditions see
+    * GridTools::collect_periodic_faces,
+    * DoFTools::make_periodicity_constraints and step-45.
+    *
+    * @note Before this function can be used the Triangulation has to be
+    * initialized and must not be refined.
+    */
+  virtual void
+  add_periodicity
+  (const std::vector<GridTools::PeriodicFacePair<cell_iterator> > &);
+
+
   BOOST_SERIALIZATION_SPLIT_MEMBER()
 
   /**
index 59f9f93504dc9d38b070af5484e67b37e9a5752f..3423854a295c524f75275509190d61c18ab8ed1e 100644 (file)
@@ -4861,10 +4861,8 @@ namespace parallel
           AssertThrow (false, ExcInternalError());
         }
 
-      periodic_face_pairs_level_0.insert(periodic_face_pairs_level_0.end(),
-                                         periodicity_vector.begin(),
-                                         periodicity_vector.end());
-
+      //finally call the base class for storing the periodicity information
+      Triangulation<dim, spacedim>::add_periodicity(periodicity_vector);
 #else
       Assert(false, ExcMessage ("Need p4est version >= 0.3.4.1!"));
 #endif
index 5e37a357c4131db5994d7fa851fa5d37ab560d88..78c065079c5ca2036d05a02e5b0067e04522eecc 100644 (file)
@@ -11587,6 +11587,14 @@ Triangulation<dim,spacedim>::get_triangulation () const
 }
 
 
+template <int dim, int spacedim>
+virtual void
+Triangulation<dim, spacedim>::add_periodicity()
+{
+  periodic_face_pairs_level_0.insert(periodic_face_pairs_level_0.end(),
+                                     periodicity_vector.begin(),
+                                     periodicity_vector.end());
+}
 
 template <int dim, int spacedim>
 void

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.