]> https://gitweb.dealii.org/ - dealii.git/commitdiff
move p4est wrappers
authorDaniel Arndt <d.arndt@math.uni-goettingen.de>
Fri, 2 Sep 2016 21:09:14 +0000 (23:09 +0200)
committerDaniel Arndt <d.arndt@math.uni-goettingen.de>
Mon, 3 Oct 2016 16:20:57 +0000 (18:20 +0200)
include/deal.II/distributed/p4est_wrappers.h [new file with mode: 0644]
include/deal.II/distributed/tria.h
source/distributed/CMakeLists.txt
source/distributed/p4est_wrappers.cc [new file with mode: 0644]
source/distributed/p4est_wrappers.inst.in [new file with mode: 0644]
source/distributed/tria.cc
source/distributed/tria.inst.in

diff --git a/include/deal.II/distributed/p4est_wrappers.h b/include/deal.II/distributed/p4est_wrappers.h
new file mode 100644 (file)
index 0000000..1bbad8f
--- /dev/null
@@ -0,0 +1,534 @@
+#ifndef P4EST_WRAPPERS_H
+#define P4EST_WRAPPERS_H
+
+#include <deal.II/base/geometry_info.h>
+
+#ifdef DEAL_II_WITH_P4EST
+#  include <p4est_bits.h>
+#  include <p4est_extended.h>
+#  include <p4est_vtk.h>
+#  include <p4est_ghost.h>
+#  include <p4est_communication.h>
+#  include <p4est_iterate.h>
+
+#  include <p8est_bits.h>
+#  include <p8est_extended.h>
+#  include <p8est_vtk.h>
+#  include <p8est_ghost.h>
+#  include <p8est_communication.h>
+#  include <p8est_iterate.h>
+
+DEAL_II_NAMESPACE_OPEN
+
+namespace internal
+{
+  namespace p4est
+  {
+    /**
+    * A structure whose explicit specializations contain typedefs to the
+    * relevant p4est_* and p8est_* types. Using this structure, for example
+    * by saying <tt>types<dim>::connectivity</tt> we can write code in a
+    * dimension independent way, either referring to p4est_connectivity_t or
+    * p8est_connectivity_t, depending on template argument.
+    */
+    template <int> struct types;
+
+    template <>
+    struct types<2>
+    {
+      typedef p4est_connectivity_t connectivity;
+      typedef p4est_t              forest;
+      typedef p4est_tree_t         tree;
+      typedef p4est_quadrant_t     quadrant;
+      typedef p4est_topidx_t       topidx;
+      typedef p4est_locidx_t       locidx;
+#if DEAL_II_P4EST_VERSION_GTE(0,3,4,3)
+      typedef p4est_connect_type_t balance_type;
+#else
+      typedef p4est_balance_type_t balance_type;
+#endif
+      typedef p4est_ghost_t        ghost;
+    };
+
+    template <>
+    struct types<3>
+    {
+      typedef p8est_connectivity_t connectivity;
+      typedef p8est_t              forest;
+      typedef p8est_tree_t         tree;
+      typedef p8est_quadrant_t     quadrant;
+      typedef p4est_topidx_t       topidx;
+      typedef p4est_locidx_t       locidx;
+#if DEAL_II_P4EST_VERSION_GTE(0,3,4,3)
+      typedef p8est_connect_type_t balance_type;
+#else
+      typedef p8est_balance_type_t balance_type;
+#endif
+      typedef p8est_ghost_t        ghost;
+    };
+
+
+
+    /**
+     * A structure whose explicit specializations contain pointers to the
+     * relevant p4est_* and p8est_* functions. Using this structure, for
+     * example by saying functions<dim>::quadrant_compare, we can write code
+     * in a dimension independent way, either calling p4est_quadrant_compare
+     * or p8est_quadrant_compare, depending on template argument.
+     */
+    template <int dim> struct functions;
+
+    template <> struct functions<2>
+    {
+      static
+      int (&quadrant_compare) (const void *v1, const void *v2);
+
+      static
+      void (&quadrant_childrenv) (const types<2>::quadrant *q,
+                                  types<2>::quadrant c[]);
+
+      static
+      int (&quadrant_overlaps_tree) (types<2>::tree *tree,
+                                     const types<2>::quadrant *q);
+
+      static
+      void (&quadrant_set_morton) (types<2>::quadrant *quadrant,
+                                   int level,
+                                   uint64_t id);
+
+      static
+      int (&quadrant_is_equal) (const types<2>::quadrant *q1,
+                                const types<2>::quadrant *q2);
+
+      static
+      int (&quadrant_is_sibling) (const types<2>::quadrant *q1,
+                                  const types<2>::quadrant *q2);
+
+      static
+      int (&quadrant_is_ancestor) (const types<2>::quadrant *q1,
+                                   const types<2>::quadrant *q2);
+
+      static
+      int (&quadrant_ancestor_id) (const types<2>::quadrant *q,
+                                   int level);
+
+      static
+      int (&comm_find_owner) (types<2>::forest *p4est,
+                              const types<2>::locidx which_tree,
+                              const types<2>::quadrant *q,
+                              const int guess);
+
+      static
+      types<2>::connectivity *(&connectivity_new) (types<2>::topidx num_vertices,
+                                                   types<2>::topidx num_trees,
+                                                   types<2>::topidx num_corners,
+                                                   types<2>::topidx num_vtt);
+      static
+      void (&connectivity_join_faces) (types<2>::connectivity *conn,
+                                       types<2>::topidx tree_left,
+                                       types<2>::topidx tree_right,
+                                       int face_left,
+                                       int face_right,
+                                       int orientation);
+
+
+
+      static
+      void (&connectivity_destroy) (p4est_connectivity_t *connectivity);
+
+      static
+      types<2>::forest *(&new_forest) (MPI_Comm mpicomm,
+                                       types<2>::connectivity *connectivity,
+                                       types<2>::locidx min_quadrants,
+                                       int min_level,
+                                       int fill_uniform,
+                                       size_t data_size,
+                                       p4est_init_t init_fn,
+                                       void *user_pointer);
+
+      static
+      void (&destroy) (types<2>::forest *p4est);
+
+      static
+      void (&refine) (types<2>::forest *p4est,
+                      int refine_recursive,
+                      p4est_refine_t refine_fn,
+                      p4est_init_t init_fn);
+
+      static
+      void (&coarsen) (types<2>::forest *p4est,
+                       int coarsen_recursive,
+                       p4est_coarsen_t coarsen_fn,
+                       p4est_init_t init_fn);
+
+      static
+      void (&balance) (types<2>::forest *p4est,
+                       types<2>::balance_type btype,
+                       p4est_init_t init_fn);
+
+#if DEAL_II_P4EST_VERSION_GTE(0,3,4,3)
+      static
+      p4est_gloidx_t (&partition) (types<2>::forest *p4est,
+                                   int partition_for_coarsening,
+                                   p4est_weight_t weight_fn);
+#else
+      static
+      void (&partition) (types<2>::forest *p4est,
+                         int partition_for_coarsening,
+                         p4est_weight_t weight_fn);
+#endif
+
+      static
+      void (&save) (const char *filename,
+                    types<2>::forest *p4est,
+                    int save_data);
+
+#if DEAL_II_P4EST_VERSION_GTE(0,3,4,3)
+      static
+      types<2>::forest *(&load_ext) (const char *filename,
+                                     MPI_Comm mpicomm,
+                                     size_t data_size,
+                                     int load_data,
+                                     int autopartition,
+                                     int broadcasthead,
+                                     void *user_pointer,
+                                     types<2>::connectivity **p4est);
+#else
+      static
+      types<2>::forest *(&load) (const char *filename,
+                                 MPI_Comm mpicomm,
+                                 size_t data_size,
+                                 int load_data,
+                                 void *user_pointer,
+                                 types<2>::connectivity **p4est);
+#endif
+
+#if DEAL_II_P4EST_VERSION_GTE(0,3,4,3)
+      static
+      int (&connectivity_save) (const char *filename,
+                                types<2>::connectivity *connectivity);
+#else
+      static
+      void (&connectivity_save) (const char *filename,
+                                 types<2>::connectivity *connectivity);
+#endif
+
+      static
+      int (&connectivity_is_valid) (types<2>::connectivity *connectivity);
+
+#if DEAL_II_P4EST_VERSION_GTE(1,0,0,0)
+      static
+      types<2>::connectivity *(&connectivity_load) (const char *filename,
+                                                    size_t *length);
+#elif DEAL_II_P4EST_VERSION_GTE(0,3,4,3)
+      static
+      types<2>::connectivity *(&connectivity_load) (const char *filename,
+                                                    long unsigned *length);
+#else
+      static
+      types<2>::connectivity *(&connectivity_load) (const char *filename,
+                                                    long *length);
+#endif
+
+      static
+      unsigned int (&checksum) (types<2>::forest *p4est);
+
+      static
+      void (&vtk_write_file) (types<2>::forest *p4est,
+                              p4est_geometry_t *,
+                              const char *baseName);
+
+      static
+      types<2>::ghost *(&ghost_new) (types<2>::forest *p4est,
+                                     types<2>::balance_type btype);
+
+      static
+      void (&ghost_destroy) (types<2>::ghost *ghost);
+
+      static
+      void (&reset_data) (types<2>::forest *p4est,
+                          size_t data_size,
+                          p4est_init_t init_fn,
+                          void *user_pointer);
+
+      static
+      size_t (&forest_memory_used) (types<2>::forest *p4est);
+
+      static
+      size_t (&connectivity_memory_used) (types<2>::connectivity *p4est);
+
+      static const unsigned max_level;
+    };
+
+
+    template <> struct functions<3>
+    {
+      static
+      int (&quadrant_compare) (const void *v1, const void *v2);
+
+      static
+      void (&quadrant_childrenv) (const types<3>::quadrant *q,
+                                  types<3>::quadrant c[]);
+
+      static
+      int (&quadrant_overlaps_tree) (types<3>::tree *tree,
+                                     const types<3>::quadrant *q);
+
+      static
+      void (&quadrant_set_morton) (types<3>::quadrant *quadrant,
+                                   int level,
+                                   uint64_t id);
+
+      static
+      int (&quadrant_is_equal) (const types<3>::quadrant *q1,
+                                const types<3>::quadrant *q2);
+
+      static
+      int (&quadrant_is_sibling) (const types<3>::quadrant *q1,
+                                  const types<3>::quadrant *q2);
+
+      static
+      int (&quadrant_is_ancestor) (const types<3>::quadrant *q1,
+                                   const types<3>::quadrant *q2);
+      static
+      int (&quadrant_ancestor_id) (const types<3>::quadrant *q,
+                                   int level);
+
+      static
+      int (&comm_find_owner) (types<3>::forest *p4est,
+                              const types<3>::locidx which_tree,
+                              const types<3>::quadrant *q,
+                              const int guess);
+
+      static
+      types<3>::connectivity *(&connectivity_new) (types<3>::topidx num_vertices,
+                                                   types<3>::topidx num_trees,
+                                                   types<3>::topidx num_edges,
+                                                   types<3>::topidx num_ett,
+                                                   types<3>::topidx num_corners,
+                                                   types<3>::topidx num_ctt);
+
+      static
+      void (&connectivity_join_faces) (types<3>::connectivity *conn,
+                                       types<3>::topidx tree_left,
+                                       types<3>::topidx tree_right,
+                                       int face_left,
+                                       int face_right,
+                                       int orientation);
+
+      static
+      void (&connectivity_destroy) (p8est_connectivity_t *connectivity);
+
+      static
+      types<3>::forest *(&new_forest) (MPI_Comm mpicomm,
+                                       types<3>::connectivity *connectivity,
+                                       types<3>::locidx min_quadrants,
+                                       int min_level,
+                                       int fill_uniform,
+                                       size_t data_size,
+                                       p8est_init_t init_fn,
+                                       void *user_pointer);
+
+      static
+      void (&destroy) (types<3>::forest *p8est);
+
+      static
+      void (&refine) (types<3>::forest *p8est,
+                      int refine_recursive,
+                      p8est_refine_t refine_fn,
+                      p8est_init_t init_fn);
+
+      static
+      void (&coarsen) (types<3>::forest *p8est,
+                       int coarsen_recursive,
+                       p8est_coarsen_t coarsen_fn,
+                       p8est_init_t init_fn);
+
+      static
+      void (&balance) (types<3>::forest *p8est,
+                       types<3>::balance_type btype,
+                       p8est_init_t init_fn);
+
+#if DEAL_II_P4EST_VERSION_GTE(0,3,4,3)
+      static
+      p4est_gloidx_t (&partition) (types<3>::forest *p8est,
+                                   int partition_for_coarsening,
+                                   p8est_weight_t weight_fn);
+#else
+      static
+      void (&partition) (types<3>::forest *p8est,
+                         int partition_for_coarsening,
+                         p8est_weight_t weight_fn);
+#endif
+
+      static
+      void (&save) (const char *filename,
+                    types<3>::forest *p4est,
+                    int save_data);
+
+#if DEAL_II_P4EST_VERSION_GTE(0,3,4,3)
+      static
+      types<3>::forest *(&load_ext) (const char *filename,
+                                     MPI_Comm mpicomm,
+                                     std::size_t data_size,
+                                     int load_data,
+                                     int autopartition,
+                                     int broadcasthead,
+                                     void *user_pointer,
+                                     types<3>::connectivity **p4est);
+#else
+      static
+      types<3>::forest *(&load) (const char *filename,
+                                 MPI_Comm mpicomm,
+                                 std::size_t data_size,
+                                 int load_data,
+                                 void *user_pointer,
+                                 types<3>::connectivity **p4est);
+#endif
+
+#if DEAL_II_P4EST_VERSION_GTE(0,3,4,3)
+      static
+      int (&connectivity_save) (const char *filename,
+                                types<3>::connectivity *connectivity);
+#else
+      static
+      void (&connectivity_save) (const char *filename,
+                                 types<3>::connectivity *connectivity);
+#endif
+
+      static
+      int (&connectivity_is_valid) (types<3>::connectivity *connectivity);
+
+#if DEAL_II_P4EST_VERSION_GTE(1,0,0,0)
+      static
+      types<3>::connectivity *(&connectivity_load) (const char *filename,
+                                                    size_t *length);
+#elif DEAL_II_P4EST_VERSION_GTE(0,3,4,3)
+      static
+      types<3>::connectivity *(&connectivity_load) (const char *filename,
+                                                    long unsigned *length);
+#else
+      static
+      types<3>::connectivity *(&connectivity_load) (const char *filename,
+                                                    long *length);
+#endif
+
+      static
+      unsigned int (&checksum) (types<3>::forest *p8est);
+
+      static
+      void (&vtk_write_file) (types<3>::forest *p8est,
+                              p8est_geometry_t *,
+                              const char *baseName);
+      static
+      types<3>::ghost *(&ghost_new) (types<3>::forest *p4est,
+                                     types<3>::balance_type btype);
+
+      static
+      void (&ghost_destroy) (types<3>::ghost *ghost);
+
+      static
+      void (&reset_data) (types<3>::forest *p4est,
+                          size_t data_size,
+                          p8est_init_t init_fn,
+                          void *user_pointer);
+
+      static
+      size_t (&forest_memory_used) (types<3>::forest *p4est);
+
+      static
+      size_t (&connectivity_memory_used) (types<3>::connectivity *p4est);
+
+      static const unsigned max_level;
+    };
+
+
+
+    /**
+     * This struct templatizes the p4est iterate structs and function
+     * prototypes, which are used to execute callback functions for faces,
+     * edges, and corners that require local neighborhood information, i.e.
+     * the neighboring cells */
+    template <int dim> struct iter;
+
+    template <> struct iter<2>
+    {
+      typedef p4est_iter_corner_info_t corner_info;
+      typedef p4est_iter_corner_side_t corner_side;
+      typedef p4est_iter_corner_t      corner_iter;
+      typedef p4est_iter_face_info_t face_info;
+      typedef p4est_iter_face_side_t face_side;
+      typedef p4est_iter_face_t      face_iter;
+    };
+
+    template <> struct iter<3>
+    {
+      typedef p8est_iter_corner_info_t corner_info;
+      typedef p8est_iter_corner_side_t corner_side;
+      typedef p8est_iter_corner_t      corner_iter;
+      typedef p8est_iter_edge_info_t edge_info;
+      typedef p8est_iter_edge_side_t edge_side;
+      typedef p8est_iter_edge_t      edge_iter;
+      typedef p8est_iter_face_info_t face_info;
+      typedef p8est_iter_face_side_t face_side;
+      typedef p8est_iter_face_t      face_iter;
+    };
+
+
+
+    /**
+    * Initialize the GeometryInfo<dim>::max_children_per_cell children of the
+    * cell p4est_cell.
+    */
+    template <int dim>
+    void
+    init_quadrant_children
+    (const typename types<dim>::quadrant &p4est_cell,
+     typename types<dim>::quadrant (&p4est_children)[dealii::GeometryInfo<dim>::max_children_per_cell]);
+
+
+
+    /**
+     * Initialize quadrant to represent a coarse cell.
+     */
+    template <int dim>
+    void
+    init_coarse_quadrant(typename types<dim>::quadrant &quad);
+
+
+
+    /**
+     * Returns whether q1 and q2 are equal
+     */
+    template <int dim>
+    bool
+    quadrant_is_equal (const typename types<dim>::quadrant &q1,
+                       const typename types<dim>::quadrant &q2);
+
+
+
+    /**
+     * Returns whether q1 is an ancestor of q2
+     */
+    template <int dim>
+    bool
+    quadrant_is_ancestor (const typename types<dim>::quadrant &q1,
+                          const typename types<dim>::quadrant &q2);
+
+
+
+    /**
+     * Returns whether the children of a coarse cell are stored locally
+     */
+    template <int dim>
+    bool
+    tree_exists_locally (const typename types<dim>::forest *parallel_forest,
+                         const typename types<dim>::topidx coarse_grid_cell);
+  }
+}
+
+DEAL_II_NAMESPACE_CLOSE
+
+#endif //DEAL_II_WITH_P4EST
+
+#endif //P4EST_WRAPPERS_H
index 1873b0198e62bb640faa66fe804e29a33497792f..6047b034f21ec3eae9b3c618e828bddf56f3281e 100644 (file)
@@ -27,6 +27,7 @@
 #include <deal.II/base/std_cxx11/tuple.h>
 
 #include <deal.II/distributed/tria_base.h>
+#include <deal.II/distributed/p4est_wrappers.h>
 
 #include <set>
 #include <vector>
@@ -71,95 +72,6 @@ namespace FETools
   }
 }
 
-namespace internal
-{
-  namespace p4est
-  {
-    /**
-     * A structure whose explicit specializations contain typedefs to the
-     * relevant p4est_* and p8est_* types. Using this structure, for example
-     * by saying <tt>types<dim>::connectivity</tt> we can write code in a
-     * dimension independent way, either referring to p4est_connectivity_t or
-     * p8est_connectivity_t, depending on template argument.
-     */
-    template <int> struct types;
-
-    template <>
-    struct types<2>
-    {
-      typedef p4est_connectivity_t connectivity;
-      typedef p4est_t              forest;
-      typedef p4est_tree_t         tree;
-      typedef p4est_quadrant_t     quadrant;
-      typedef p4est_topidx_t       topidx;
-      typedef p4est_locidx_t       locidx;
-#if DEAL_II_P4EST_VERSION_GTE(0,3,4,3)
-      typedef p4est_connect_type_t balance_type;
-#else
-      typedef p4est_balance_type_t balance_type;
-#endif
-      typedef p4est_ghost_t        ghost;
-    };
-
-    template <>
-    struct types<3>
-    {
-      typedef p8est_connectivity_t connectivity;
-      typedef p8est_t              forest;
-      typedef p8est_tree_t         tree;
-      typedef p8est_quadrant_t     quadrant;
-      typedef p4est_topidx_t       topidx;
-      typedef p4est_locidx_t       locidx;
-#if DEAL_II_P4EST_VERSION_GTE(0,3,4,3)
-      typedef p8est_connect_type_t balance_type;
-#else
-      typedef p8est_balance_type_t balance_type;
-#endif
-      typedef p8est_ghost_t        ghost;
-    };
-
-
-    /**
-     * Initialize the GeometryInfo<dim>::max_children_per_cell children of the
-     * cell p4est_cell.
-     */
-    template <int dim>
-    void
-    init_quadrant_children
-    (const typename types<dim>::quadrant &p4est_cell,
-     typename types<dim>::quadrant (&p4est_children)[GeometryInfo<dim>::max_children_per_cell]);
-
-
-    /**
-     * Initialize quadrant to represent a coarse cell.
-     */
-    template <int dim>
-    void
-    init_coarse_quadrant(typename types<dim>::quadrant &quad);
-
-
-
-    /**
-     * Return whether q1 and q2 are equal
-     */
-    template <int dim>
-    bool
-    quadrant_is_equal (const typename types<dim>::quadrant &q1,
-                       const typename types<dim>::quadrant &q2);
-
-    //TODO: remove these functions from
-    //public interface somehow? [TH]
-
-    /**
-     * returns whether q1 is an ancestor of q2
-     */
-    template <int dim>
-    bool
-    quadrant_is_ancestor (const typename types<dim>::quadrant &q1,
-                          const typename types<dim>::quadrant &q2);
-  }
-}
-
 //forward declaration of the data type for periodic face pairs
 namespace GridTools
 {
index b52d2055df59ad1539e184b263ee39c138b59a50..7065f150d178a8f36d98f39094b104284504d699 100644 (file)
@@ -21,6 +21,7 @@ SET(_src
   tria.cc
   tria_base.cc
   shared_tria.cc
+  p4est_wrappers.cc
   )
 
 SET(_inst
@@ -29,6 +30,7 @@ SET(_inst
   tria.inst.in
   shared_tria.inst.in
   tria_base.inst.in
+  p4est_wrappers.inst.in
   )
 
 FILE(GLOB _header
diff --git a/source/distributed/p4est_wrappers.cc b/source/distributed/p4est_wrappers.cc
new file mode 100644 (file)
index 0000000..77abbfc
--- /dev/null
@@ -0,0 +1,469 @@
+#include <deal.II/distributed/p4est_wrappers.h>
+
+DEAL_II_NAMESPACE_OPEN
+
+#ifdef DEAL_II_WITH_P4EST
+
+namespace internal
+{
+  namespace p4est
+  {
+    int (&functions<2>::quadrant_compare) (const void *v1, const void *v2)
+      = p4est_quadrant_compare;
+
+    void (&functions<2>::quadrant_childrenv) (const types<2>::quadrant *q,
+                                              types<2>::quadrant c[])
+      = p4est_quadrant_childrenv;
+
+    int (&functions<2>::quadrant_overlaps_tree) (types<2>::tree *tree,
+                                                 const types<2>::quadrant *q)
+      = p4est_quadrant_overlaps_tree;
+
+    void (&functions<2>::quadrant_set_morton) (types<2>::quadrant *quadrant,
+                                               int level,
+                                               uint64_t id)
+      = p4est_quadrant_set_morton;
+
+    int (&functions<2>::quadrant_is_equal) (const types<2>::quadrant *q1,
+                                            const types<2>::quadrant *q2)
+      = p4est_quadrant_is_equal;
+
+    int (&functions<2>::quadrant_is_sibling) (const types<2>::quadrant *q1,
+                                              const types<2>::quadrant *q2)
+      = p4est_quadrant_is_sibling;
+
+    int (&functions<2>::quadrant_is_ancestor) (const types<2>::quadrant *q1,
+                                               const types<2>::quadrant *q2)
+      = p4est_quadrant_is_ancestor;
+
+    int (&functions<2>::quadrant_ancestor_id) (const types<2>::quadrant *q,
+                                               int level)
+      = p4est_quadrant_ancestor_id;
+
+    int (&functions<2>::comm_find_owner) (types<2>::forest *p4est,
+                                          const types<2>::locidx which_tree,
+                                          const types<2>::quadrant *q,
+                                          const int guess)
+      = p4est_comm_find_owner;
+
+    types<2>::connectivity *(&functions<2>::connectivity_new) (types<2>::topidx num_vertices,
+                                                               types<2>::topidx num_trees,
+                                                               types<2>::topidx num_corners,
+                                                               types<2>::topidx num_vtt)
+      = p4est_connectivity_new;
+
+#if DEAL_II_P4EST_VERSION_GTE(0,3,4,1)
+    void (&functions<2>::connectivity_join_faces) (types<2>::connectivity *conn,
+                                                   types<2>::topidx tree_left,
+                                                   types<2>::topidx tree_right,
+                                                   int face_left,
+                                                   int face_right,
+                                                   int orientation)
+      = p4est_connectivity_join_faces;
+#endif
+
+    void (&functions<2>::connectivity_destroy) (p4est_connectivity_t *connectivity)
+      = p4est_connectivity_destroy;
+
+    types<2>::forest *(&functions<2>::new_forest) (MPI_Comm mpicomm,
+                                                   types<2>::connectivity *connectivity,
+                                                   types<2>::locidx min_quadrants,
+                                                   int min_level,
+                                                   int fill_uniform,
+                                                   size_t data_size,
+                                                   p4est_init_t init_fn,
+                                                   void *user_pointer)
+      = p4est_new_ext;
+
+    void (&functions<2>::destroy) (types<2>::forest *p4est)
+      = p4est_destroy;
+
+    void (&functions<2>::refine) (types<2>::forest *p4est,
+                                  int refine_recursive,
+                                  p4est_refine_t refine_fn,
+                                  p4est_init_t init_fn)
+      = p4est_refine;
+
+    void (&functions<2>::coarsen) (types<2>::forest *p4est,
+                                   int coarsen_recursive,
+                                   p4est_coarsen_t coarsen_fn,
+                                   p4est_init_t init_fn)
+      = p4est_coarsen;
+
+    void (&functions<2>::balance) (types<2>::forest *p4est,
+                                   types<2>::balance_type btype,
+                                   p4est_init_t init_fn)
+      = p4est_balance;
+#if DEAL_II_P4EST_VERSION_GTE(0,3,4,3)
+    p4est_gloidx_t (&functions<2>::partition) (types<2>::forest *p4est,
+                                               int partition_for_coarsening,
+                                               p4est_weight_t weight_fn)
+      = p4est_partition_ext;
+#else
+
+    void (&functions<2>::partition) (types<2>::forest *p4est,
+                                     int partition_for_coarsening,
+                                     p4est_weight_t weight_fn)
+      = p4est_partition_ext;
+#endif
+
+    void (&functions<2>::save) (const char *filename,
+                                types<2>::forest *p4est,
+                                int save_data)
+      = p4est_save;
+
+#if DEAL_II_P4EST_VERSION_GTE(0,3,4,3)
+    types<2>::forest *
+    (&functions<2>::load_ext) (const char *filename,
+                               MPI_Comm mpicomm,
+                               std::size_t data_size,
+                               int load_data,
+                               int autopartition,
+                               int broadcasthead,
+                               void *user_pointer,
+                               types<2>::connectivity **p4est)
+      = p4est_load_ext;
+#else
+    types<2>::forest *
+    (&functions<2>::load) (const char *filename,
+                           MPI_Comm mpicomm,
+                           std::size_t data_size,
+                           int load_data,
+                           void *user_pointer,
+                           types<2>::connectivity **p4est)
+      = p4est_load;
+#endif
+
+#if DEAL_II_P4EST_VERSION_GTE(0,3,4,3)
+    int (&functions<2>::connectivity_save) (const char *filename,
+                                            types<2>::connectivity *connectivity)
+      = p4est_connectivity_save;
+#else
+    void (&functions<2>::connectivity_save) (const char *filename,
+                                             types<2>::connectivity *connectivity)
+      = p4est_connectivity_save;
+#endif
+
+    int (&functions<2>::connectivity_is_valid) (types<2>::connectivity
+                                                *connectivity)
+      = p4est_connectivity_is_valid;
+#if DEAL_II_P4EST_VERSION_GTE(1,0,0,0)
+    types<2>::connectivity *
+    (&functions<2>::connectivity_load) (const char *filename,
+                                        size_t *length)
+      = p4est_connectivity_load;
+#elif DEAL_II_P4EST_VERSION_GTE(0,3,4,3)
+    types<2>::connectivity *
+    (&functions<2>::connectivity_load) (const char *filename,
+                                        long unsigned *length)
+      = p4est_connectivity_load;
+#else
+    types<2>::connectivity *
+    (&functions<2>::connectivity_load) (const char *filename,
+                                        long *length)
+      = p4est_connectivity_load;
+#endif
+
+    unsigned int (&functions<2>::checksum) (types<2>::forest *p4est)
+      = p4est_checksum;
+
+    void (&functions<2>::vtk_write_file) (types<2>::forest *p4est,
+                                          p4est_geometry_t *,
+                                          const char *baseName)
+      = p4est_vtk_write_file;
+
+    types<2>::ghost *(&functions<2>::ghost_new) (types<2>::forest *p4est,
+                                                 types<2>::balance_type btype)
+      = p4est_ghost_new;
+
+    void (&functions<2>::ghost_destroy) (types<2>::ghost *ghost)
+      = p4est_ghost_destroy;
+
+    void (&functions<2>::reset_data) (types<2>::forest *p4est,
+                                      size_t data_size,
+                                      p4est_init_t init_fn,
+                                      void *user_pointer)
+      = p4est_reset_data;
+
+    size_t (&functions<2>::forest_memory_used) (types<2>::forest *p4est)
+      = p4est_memory_used;
+
+    size_t (&functions<2>::connectivity_memory_used) (types<2>::connectivity *p4est)
+      = p4est_connectivity_memory_used;
+
+    const unsigned int functions<2>::max_level = P4EST_MAXLEVEL;
+
+    int (&functions<3>::quadrant_compare) (const void *v1, const void *v2)
+      = p8est_quadrant_compare;
+
+    void (&functions<3>::quadrant_childrenv) (const types<3>::quadrant *q,
+                                              types<3>::quadrant c[])
+      = p8est_quadrant_childrenv;
+
+    int (&functions<3>::quadrant_overlaps_tree) (types<3>::tree *tree,
+                                                 const types<3>::quadrant *q)
+      = p8est_quadrant_overlaps_tree;
+
+    void (&functions<3>::quadrant_set_morton) (types<3>::quadrant *quadrant,
+                                               int level,
+                                               uint64_t id)
+      = p8est_quadrant_set_morton;
+
+    int (&functions<3>::quadrant_is_equal) (const types<3>::quadrant *q1,
+                                            const types<3>::quadrant *q2)
+      = p8est_quadrant_is_equal;
+
+    int (&functions<3>::quadrant_is_sibling) (const types<3>::quadrant *q1,
+                                              const types<3>::quadrant *q2)
+      = p8est_quadrant_is_sibling;
+
+    int (&functions<3>::quadrant_is_ancestor) (const types<3>::quadrant *q1,
+                                               const types<3>::quadrant *q2)
+      = p8est_quadrant_is_ancestor;
+
+    int (&functions<3>::quadrant_ancestor_id) (const types<3>::quadrant *q,
+                                               int level)
+      = p8est_quadrant_ancestor_id;
+
+    int (&functions<3>::comm_find_owner) (types<3>::forest *p4est,
+                                          const types<3>::locidx which_tree,
+                                          const types<3>::quadrant *q,
+                                          const int guess)
+      = p8est_comm_find_owner;
+
+    types<3>::connectivity *(&functions<3>::connectivity_new) (types<3>::topidx num_vertices,
+                                                               types<3>::topidx num_trees,
+                                                               types<3>::topidx num_edges,
+                                                               types<3>::topidx num_ett,
+                                                               types<3>::topidx num_corners,
+                                                               types<3>::topidx num_ctt)
+      = p8est_connectivity_new;
+
+    void (&functions<3>::connectivity_destroy) (p8est_connectivity_t *connectivity)
+      = p8est_connectivity_destroy;
+
+#if DEAL_II_P4EST_VERSION_GTE(0,3,4,1)
+    void (&functions<3>::connectivity_join_faces) (types<3>::connectivity *conn,
+                                                   types<3>::topidx tree_left,
+                                                   types<3>::topidx tree_right,
+                                                   int face_left,
+                                                   int face_right,
+                                                   int orientation)
+      = p8est_connectivity_join_faces;
+#endif
+
+    types<3>::forest *(&functions<3>::new_forest) (MPI_Comm mpicomm,
+                                                   types<3>::connectivity *connectivity,
+                                                   types<3>::locidx min_quadrants,
+                                                   int min_level,
+                                                   int fill_uniform,
+                                                   size_t data_size,
+                                                   p8est_init_t init_fn,
+                                                   void *user_pointer)
+      = p8est_new_ext;
+
+    void (&functions<3>::destroy) (types<3>::forest *p8est)
+      = p8est_destroy;
+
+    void (&functions<3>::refine) (types<3>::forest *p8est,
+                                  int refine_recursive,
+                                  p8est_refine_t refine_fn,
+                                  p8est_init_t init_fn)
+      = p8est_refine;
+
+    void (&functions<3>::coarsen) (types<3>::forest *p8est,
+                                   int coarsen_recursive,
+                                   p8est_coarsen_t coarsen_fn,
+                                   p8est_init_t init_fn)
+      = p8est_coarsen;
+
+    void (&functions<3>::balance) (types<3>::forest *p8est,
+                                   types<3>::balance_type btype,
+                                   p8est_init_t init_fn)
+      = p8est_balance;
+
+#if DEAL_II_P4EST_VERSION_GTE(0,3,4,3)
+    p4est_gloidx_t (&functions<3>::partition) (types<3>::forest *p8est,
+                                               int partition_for_coarsening,
+                                               p8est_weight_t weight_fn)
+      = p8est_partition_ext;
+#else
+    void (&functions<3>::partition) (types<3>::forest *p8est,
+                                     int partition_for_coarsening,
+                                     p8est_weight_t weight_fn)
+      = p8est_partition_ext;
+#endif
+
+    void (&functions<3>::save) (const char *filename,
+                                types<3>::forest *p4est,
+                                int save_data)
+      = p8est_save;
+
+#if DEAL_II_P4EST_VERSION_GTE(0,3,4,3)
+    types<3>::forest *
+    (&functions<3>::load_ext) (const char *filename,
+                               MPI_Comm mpicomm,
+                               std::size_t data_size,
+                               int load_data,
+                               int autopartition,
+                               int broadcasthead,
+                               void *user_pointer,
+                               types<3>::connectivity **p4est)
+      = p8est_load_ext;
+#else
+    types<3>::forest *
+    (&functions<3>::load) (const char *filename,
+                           MPI_Comm mpicomm,
+                           std::size_t data_size,
+                           int load_data,
+                           void *user_pointer,
+                           types<3>::connectivity **p4est)
+      = p8est_load;
+#endif
+
+#if DEAL_II_P4EST_VERSION_GTE(0,3,4,3)
+    int (&functions<3>::connectivity_save) (const char *filename,
+                                            types<3>::connectivity *connectivity)
+      = p8est_connectivity_save;
+#else
+    void (&functions<3>::connectivity_save) (const char *filename,
+                                             types<3>::connectivity *connectivity)
+      = p8est_connectivity_save;
+#endif
+
+    int (&functions<3>::connectivity_is_valid) (types<3>::connectivity
+                                                *connectivity)
+      = p8est_connectivity_is_valid;
+
+#if DEAL_II_P4EST_VERSION_GTE(1,0,0,0)
+    types<3>::connectivity *
+    (&functions<3>::connectivity_load) (const char *filename,
+                                        size_t *length)
+      = p8est_connectivity_load;
+#elif DEAL_II_P4EST_VERSION_GTE(0,3,4,3)
+    types<3>::connectivity *
+    (&functions<3>::connectivity_load) (const char *filename,
+                                        long unsigned *length)
+      = p8est_connectivity_load;
+#else
+    types<3>::connectivity *
+    (&functions<3>::connectivity_load) (const char *filename,
+                                        long *length)
+      = p8est_connectivity_load;
+#endif
+
+    unsigned int (&functions<3>::checksum) (types<3>::forest *p8est)
+      = p8est_checksum;
+
+    void (&functions<3>::vtk_write_file) (types<3>::forest *p8est,
+                                          p8est_geometry_t *,
+                                          const char *baseName)
+      = p8est_vtk_write_file;
+
+    types<3>::ghost *(&functions<3>::ghost_new) (types<3>::forest *p4est,
+                                                 types<3>::balance_type btype)
+      = p8est_ghost_new;
+
+    void (&functions<3>::ghost_destroy) (types<3>::ghost *ghost)
+      = p8est_ghost_destroy;
+
+    void (&functions<3>::reset_data) (types<3>::forest *p4est,
+                                      size_t data_size,
+                                      p8est_init_t init_fn,
+                                      void *user_pointer)
+      = p8est_reset_data;
+
+    size_t (&functions<3>::forest_memory_used) (types<3>::forest *p4est)
+      = p8est_memory_used;
+
+    size_t (&functions<3>::connectivity_memory_used) (types<3>::connectivity *p4est)
+      = p8est_connectivity_memory_used;
+
+    const unsigned int functions<3>::max_level = P8EST_MAXLEVEL;
+
+    template <int dim>
+    void
+    init_quadrant_children
+    (const typename types<dim>::quadrant &p4est_cell,
+     typename types<dim>::quadrant (&p4est_children)[dealii::GeometryInfo<dim>::max_children_per_cell])
+    {
+
+      for (unsigned int c=0;
+           c<dealii::GeometryInfo<dim>::max_children_per_cell; ++c)
+        switch (dim)
+          {
+          case 2:
+            P4EST_QUADRANT_INIT(&p4est_children[c]);
+            break;
+          case 3:
+            P8EST_QUADRANT_INIT(&p4est_children[c]);
+            break;
+          default:
+            Assert (false, ExcNotImplemented());
+          }
+
+
+      functions<dim>::quadrant_childrenv (&p4est_cell,
+                                          p4est_children);
+
+    }
+
+    template <int dim>
+    void
+    init_coarse_quadrant(typename types<dim>::quadrant &quad)
+    {
+      switch (dim)
+        {
+        case 2:
+          P4EST_QUADRANT_INIT(&quad);
+          break;
+        case 3:
+          P8EST_QUADRANT_INIT(&quad);
+          break;
+        default:
+          Assert (false, ExcNotImplemented());
+        }
+      functions<dim>::quadrant_set_morton (&quad,
+                                           /*level=*/0,
+                                           /*index=*/0);
+    }
+
+    template <int dim>
+    bool
+    quadrant_is_equal (const typename types<dim>::quadrant &q1,
+                       const typename types<dim>::quadrant &q2)
+    {
+      return functions<dim>::quadrant_is_equal(&q1, &q2);
+    }
+
+
+
+    template <int dim>
+    bool
+    quadrant_is_ancestor (const typename types<dim>::quadrant &q1,
+                          const typename types<dim>::quadrant &q2)
+    {
+      return functions<dim>::quadrant_is_ancestor(&q1, &q2);
+    }
+
+    template <int dim>
+    bool
+    tree_exists_locally (const typename types<dim>::forest *parallel_forest,
+                         const typename types<dim>::topidx coarse_grid_cell)
+    {
+      Assert (coarse_grid_cell < parallel_forest->connectivity->num_trees,
+              ExcInternalError());
+      return ((coarse_grid_cell >= parallel_forest->first_local_tree)
+              &&
+              (coarse_grid_cell <= parallel_forest->last_local_tree));
+    }
+  }
+}
+
+#endif //DEAL_II_WITH_P4EST
+
+/*-------------- Explicit Instantiations -------------------------------*/
+#include "p4est_wrappers.inst"
+
+
+DEAL_II_NAMESPACE_CLOSE
diff --git a/source/distributed/p4est_wrappers.inst.in b/source/distributed/p4est_wrappers.inst.in
new file mode 100644 (file)
index 0000000..ec5547c
--- /dev/null
@@ -0,0 +1,60 @@
+// ---------------------------------------------------------------------
+//
+// Copyright (C) 2010 - 2014 by the deal.II authors
+//
+// This file is part of the deal.II library.
+//
+// The deal.II library is free software; you can use it, redistribute
+// it, and/or modify it under the terms of the GNU Lesser General
+// Public License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+// The full text of the license can be found in the file LICENSE at
+// the top level of the deal.II distribution.
+//
+// ---------------------------------------------------------------------
+
+
+for (deal_II_dimension : DIMENSIONS)
+{
+#   ifdef DEAL_II_WITH_P4EST
+
+    namespace internal
+    \{
+    namespace p4est
+    \{
+#if     deal_II_dimension > 1
+
+    template
+    void
+    init_quadrant_children<deal_II_dimension>
+    (const types<deal_II_dimension>::quadrant & p4est_cell,
+     types<deal_II_dimension>::quadrant (&p4est_children)[GeometryInfo<deal_II_dimension>::max_children_per_cell]);
+
+    template
+    void
+    init_coarse_quadrant<deal_II_dimension>
+    (types<deal_II_dimension>::quadrant & quad);
+
+    template
+    bool
+    quadrant_is_equal<deal_II_dimension>
+    (const types<deal_II_dimension>::quadrant & q1,
+     const types<deal_II_dimension>::quadrant & q2);
+
+    template
+    bool
+    quadrant_is_ancestor<deal_II_dimension>
+    (const types<deal_II_dimension>::quadrant & q1,
+     const types<deal_II_dimension>::quadrant & q2);
+
+    template
+    bool
+    tree_exists_locally<deal_II_dimension>
+    (const types<deal_II_dimension>::forest *parallel_forest,
+     const types<deal_II_dimension>::topidx coarse_grid_cell);
+
+#      endif
+    \}
+    \}
+#   endif // DEAL_II_WITH_P4EST
+}
index 0787af97fc3afe4b76014083b79f307d86ab67f1..2712756b45c5dbe93e8c38b61778ea50d0bc5cf4 100644 (file)
 #include <deal.II/grid/tria_iterator.h>
 #include <deal.II/grid/grid_tools.h>
 #include <deal.II/distributed/tria.h>
-
-#ifdef DEAL_II_WITH_P4EST
-#  include <p4est_bits.h>
-#  include <p4est_extended.h>
-#  include <p4est_vtk.h>
-#  include <p4est_ghost.h>
-#  include <p4est_communication.h>
-#  include <p4est_iterate.h>
-
-#  include <p8est_bits.h>
-#  include <p8est_extended.h>
-#  include <p8est_vtk.h>
-#  include <p8est_ghost.h>
-#  include <p8est_communication.h>
-#  include <p8est_iterate.h>
-#endif
+#include <deal.II/distributed/p4est_wrappers.h>
 
 #include <algorithm>
 #include <numeric>
@@ -52,862 +37,6 @@ DEAL_II_NAMESPACE_OPEN
 
 #ifdef DEAL_II_WITH_P4EST
 
-namespace internal
-{
-  namespace p4est
-  {
-    /**
-     * A structure whose explicit specializations contain pointers to the
-     * relevant p4est_* and p8est_* functions. Using this structure, for
-     * example by saying functions<dim>::quadrant_compare, we can write code
-     * in a dimension independent way, either calling p4est_quadrant_compare
-     * or p8est_quadrant_compare, depending on template argument.
-     */
-    template <int dim> struct functions;
-
-    template <> struct functions<2>
-    {
-      static
-      int (&quadrant_compare) (const void *v1, const void *v2);
-
-      static
-      void (&quadrant_childrenv) (const types<2>::quadrant *q,
-                                  types<2>::quadrant c[]);
-
-      static
-      int (&quadrant_overlaps_tree) (types<2>::tree *tree,
-                                     const types<2>::quadrant *q);
-
-      static
-      void (&quadrant_set_morton) (types<2>::quadrant *quadrant,
-                                   int level,
-                                   uint64_t id);
-
-      static
-      int (&quadrant_is_equal) (const types<2>::quadrant *q1,
-                                const types<2>::quadrant *q2);
-
-      static
-      int (&quadrant_is_sibling) (const types<2>::quadrant *q1,
-                                  const types<2>::quadrant *q2);
-
-      static
-      int (&quadrant_is_ancestor) (const types<2>::quadrant *q1,
-                                   const types<2>::quadrant *q2);
-
-      static
-      int (&quadrant_ancestor_id) (const types<2>::quadrant *q,
-                                   int level);
-
-      static
-      int (&comm_find_owner) (types<2>::forest *p4est,
-                              const types<2>::locidx which_tree,
-                              const types<2>::quadrant *q,
-                              const int guess);
-
-      static
-      types<2>::connectivity *(&connectivity_new) (types<2>::topidx num_vertices,
-                                                   types<2>::topidx num_trees,
-                                                   types<2>::topidx num_corners,
-                                                   types<2>::topidx num_vtt);
-
-      static
-      void (&connectivity_join_faces) (types<2>::connectivity *conn,
-                                       types<2>::topidx tree_left,
-                                       types<2>::topidx tree_right,
-                                       int face_left,
-                                       int face_right,
-                                       int orientation);
-
-
-
-      static
-      void (&connectivity_destroy) (p4est_connectivity_t *connectivity);
-
-      static
-      types<2>::forest *(&new_forest) (MPI_Comm mpicomm,
-                                       types<2>::connectivity *connectivity,
-                                       types<2>::locidx min_quadrants,
-                                       int min_level,
-                                       int fill_uniform,
-                                       size_t data_size,
-                                       p4est_init_t init_fn,
-                                       void *user_pointer);
-
-      static
-      void (&destroy) (types<2>::forest *p4est);
-
-      static
-      void (&refine) (types<2>::forest *p4est,
-                      int refine_recursive,
-                      p4est_refine_t refine_fn,
-                      p4est_init_t init_fn);
-
-      static
-      void (&coarsen) (types<2>::forest *p4est,
-                       int coarsen_recursive,
-                       p4est_coarsen_t coarsen_fn,
-                       p4est_init_t init_fn);
-
-      static
-      void (&balance) (types<2>::forest *p4est,
-                       types<2>::balance_type btype,
-                       p4est_init_t init_fn);
-
-#if DEAL_II_P4EST_VERSION_GTE(0,3,4,3)
-      static
-      p4est_gloidx_t (&partition) (types<2>::forest *p4est,
-                                   int partition_for_coarsening,
-                                   p4est_weight_t weight_fn);
-#else
-      static
-      void (&partition) (types<2>::forest *p4est,
-                         int partition_for_coarsening,
-                         p4est_weight_t weight_fn);
-#endif
-
-      static
-      void (&save) (const char *filename,
-                    types<2>::forest *p4est,
-                    int save_data);
-
-#if DEAL_II_P4EST_VERSION_GTE(0,3,4,3)
-      static
-      types<2>::forest *(&load_ext) (const char *filename,
-                                     MPI_Comm mpicomm,
-                                     size_t data_size,
-                                     int load_data,
-                                     int autopartition,
-                                     int broadcasthead,
-                                     void *user_pointer,
-                                     types<2>::connectivity **p4est);
-#else
-      static
-      types<2>::forest *(&load) (const char *filename,
-                                 MPI_Comm mpicomm,
-                                 size_t data_size,
-                                 int load_data,
-                                 void *user_pointer,
-                                 types<2>::connectivity **p4est);
-#endif
-
-#if DEAL_II_P4EST_VERSION_GTE(0,3,4,3)
-      static
-      int (&connectivity_save) (const char *filename,
-                                types<2>::connectivity *connectivity);
-#else
-      static
-      void (&connectivity_save) (const char *filename,
-                                 types<2>::connectivity *connectivity);
-#endif
-
-      static
-      int (&connectivity_is_valid) (types<2>::connectivity *connectivity);
-
-#if DEAL_II_P4EST_VERSION_GTE(1,0,0,0)
-      static
-      types<2>::connectivity *(&connectivity_load) (const char *filename,
-                                                    size_t *length);
-#elif DEAL_II_P4EST_VERSION_GTE(0,3,4,3)
-      static
-      types<2>::connectivity *(&connectivity_load) (const char *filename,
-                                                    long unsigned *length);
-#else
-      static
-      types<2>::connectivity *(&connectivity_load) (const char *filename,
-                                                    long *length);
-#endif
-
-      static
-      unsigned int (&checksum) (types<2>::forest *p4est);
-
-      static
-      void (&vtk_write_file) (types<2>::forest *p4est,
-                              p4est_geometry_t *,
-                              const char *baseName);
-
-      static
-      types<2>::ghost *(&ghost_new) (types<2>::forest *p4est,
-                                     types<2>::balance_type btype);
-
-      static
-      void (&ghost_destroy) (types<2>::ghost *ghost);
-
-      static
-      void (&reset_data) (types<2>::forest *p4est,
-                          size_t data_size,
-                          p4est_init_t init_fn,
-                          void *user_pointer);
-
-      static
-      size_t (&forest_memory_used) (types<2>::forest *p4est);
-
-      static
-      size_t (&connectivity_memory_used) (types<2>::connectivity *p4est);
-
-      static const unsigned max_level;
-    };
-
-    int (&functions<2>::quadrant_compare) (const void *v1, const void *v2)
-      = p4est_quadrant_compare;
-
-    void (&functions<2>::quadrant_childrenv) (const types<2>::quadrant *q,
-                                              types<2>::quadrant c[])
-      = p4est_quadrant_childrenv;
-
-    int (&functions<2>::quadrant_overlaps_tree) (types<2>::tree *tree,
-                                                 const types<2>::quadrant *q)
-      = p4est_quadrant_overlaps_tree;
-
-    void (&functions<2>::quadrant_set_morton) (types<2>::quadrant *quadrant,
-                                               int level,
-                                               uint64_t id)
-      = p4est_quadrant_set_morton;
-
-    int (&functions<2>::quadrant_is_equal) (const types<2>::quadrant *q1,
-                                            const types<2>::quadrant *q2)
-      = p4est_quadrant_is_equal;
-
-    int (&functions<2>::quadrant_is_sibling) (const types<2>::quadrant *q1,
-                                              const types<2>::quadrant *q2)
-      = p4est_quadrant_is_sibling;
-
-    int (&functions<2>::quadrant_is_ancestor) (const types<2>::quadrant *q1,
-                                               const types<2>::quadrant *q2)
-      = p4est_quadrant_is_ancestor;
-
-    int (&functions<2>::quadrant_ancestor_id) (const types<2>::quadrant *q,
-                                               int level)
-      = p4est_quadrant_ancestor_id;
-
-    int (&functions<2>::comm_find_owner) (types<2>::forest *p4est,
-                                          const types<2>::locidx which_tree,
-                                          const types<2>::quadrant *q,
-                                          const int guess)
-      = p4est_comm_find_owner;
-
-    types<2>::connectivity *(&functions<2>::connectivity_new) (types<2>::topidx num_vertices,
-                                                               types<2>::topidx num_trees,
-                                                               types<2>::topidx num_corners,
-                                                               types<2>::topidx num_vtt)
-      = p4est_connectivity_new;
-
-#if DEAL_II_P4EST_VERSION_GTE(0,3,4,1)
-    void (&functions<2>::connectivity_join_faces) (types<2>::connectivity *conn,
-                                                   types<2>::topidx tree_left,
-                                                   types<2>::topidx tree_right,
-                                                   int face_left,
-                                                   int face_right,
-                                                   int orientation)
-      = p4est_connectivity_join_faces;
-#endif
-
-    void (&functions<2>::connectivity_destroy) (p4est_connectivity_t *connectivity)
-      = p4est_connectivity_destroy;
-
-    types<2>::forest *(&functions<2>::new_forest) (MPI_Comm mpicomm,
-                                                   types<2>::connectivity *connectivity,
-                                                   types<2>::locidx min_quadrants,
-                                                   int min_level,
-                                                   int fill_uniform,
-                                                   size_t data_size,
-                                                   p4est_init_t init_fn,
-                                                   void *user_pointer)
-      = p4est_new_ext;
-
-    void (&functions<2>::destroy) (types<2>::forest *p4est)
-      = p4est_destroy;
-
-    void (&functions<2>::refine) (types<2>::forest *p4est,
-                                  int refine_recursive,
-                                  p4est_refine_t refine_fn,
-                                  p4est_init_t init_fn)
-      = p4est_refine;
-
-    void (&functions<2>::coarsen) (types<2>::forest *p4est,
-                                   int coarsen_recursive,
-                                   p4est_coarsen_t coarsen_fn,
-                                   p4est_init_t init_fn)
-      = p4est_coarsen;
-
-    void (&functions<2>::balance) (types<2>::forest *p4est,
-                                   types<2>::balance_type btype,
-                                   p4est_init_t init_fn)
-      = p4est_balance;
-
-#if DEAL_II_P4EST_VERSION_GTE(0,3,4,3)
-    p4est_gloidx_t (&functions<2>::partition) (types<2>::forest *p4est,
-                                               int partition_for_coarsening,
-                                               p4est_weight_t weight_fn)
-      = p4est_partition_ext;
-#else
-    void (&functions<2>::partition) (types<2>::forest *p4est,
-                                     int partition_for_coarsening,
-                                     p4est_weight_t weight_fn)
-      = p4est_partition_ext;
-#endif
-
-    void (&functions<2>::save) (const char *filename,
-                                types<2>::forest *p4est,
-                                int save_data)
-      = p4est_save;
-
-#if DEAL_II_P4EST_VERSION_GTE(0,3,4,3)
-    types<2>::forest *
-    (&functions<2>::load_ext) (const char *filename,
-                               MPI_Comm mpicomm,
-                               std::size_t data_size,
-                               int load_data,
-                               int autopartition,
-                               int broadcasthead,
-                               void *user_pointer,
-                               types<2>::connectivity **p4est)
-      = p4est_load_ext;
-#else
-    types<2>::forest *
-    (&functions<2>::load) (const char *filename,
-                           MPI_Comm mpicomm,
-                           std::size_t data_size,
-                           int load_data,
-                           void *user_pointer,
-                           types<2>::connectivity **p4est)
-      = p4est_load;
-#endif
-
-#if DEAL_II_P4EST_VERSION_GTE(0,3,4,3)
-    int (&functions<2>::connectivity_save) (const char *filename,
-                                            types<2>::connectivity *connectivity)
-      = p4est_connectivity_save;
-#else
-    void (&functions<2>::connectivity_save) (const char *filename,
-                                             types<2>::connectivity *connectivity)
-      = p4est_connectivity_save;
-#endif
-
-    int (&functions<2>::connectivity_is_valid) (types<2>::connectivity
-                                                *connectivity)
-      = p4est_connectivity_is_valid;
-
-#if DEAL_II_P4EST_VERSION_GTE(1,0,0,0)
-    types<2>::connectivity *
-    (&functions<2>::connectivity_load) (const char *filename,
-                                        size_t *length)
-      = p4est_connectivity_load;
-#elif DEAL_II_P4EST_VERSION_GTE(0,3,4,3)
-    types<2>::connectivity *
-    (&functions<2>::connectivity_load) (const char *filename,
-                                        long unsigned *length)
-      = p4est_connectivity_load;
-#else
-    types<2>::connectivity *
-    (&functions<2>::connectivity_load) (const char *filename,
-                                        long *length)
-      = p4est_connectivity_load;
-#endif
-
-    unsigned int (&functions<2>::checksum) (types<2>::forest *p4est)
-      = p4est_checksum;
-
-    void (&functions<2>::vtk_write_file) (types<2>::forest *p4est,
-                                          p4est_geometry_t *,
-                                          const char *baseName)
-      = p4est_vtk_write_file;
-
-    types<2>::ghost *(&functions<2>::ghost_new) (types<2>::forest *p4est,
-                                                 types<2>::balance_type btype)
-      = p4est_ghost_new;
-
-    void (&functions<2>::ghost_destroy) (types<2>::ghost *ghost)
-      = p4est_ghost_destroy;
-
-    void (&functions<2>::reset_data) (types<2>::forest *p4est,
-                                      size_t data_size,
-                                      p4est_init_t init_fn,
-                                      void *user_pointer)
-      = p4est_reset_data;
-
-    size_t (&functions<2>::forest_memory_used) (types<2>::forest *p4est)
-      = p4est_memory_used;
-
-    size_t (&functions<2>::connectivity_memory_used) (types<2>::connectivity *p4est)
-      = p4est_connectivity_memory_used;
-
-    const unsigned int functions<2>::max_level = P4EST_MAXLEVEL;
-
-    template <> struct functions<3>
-    {
-      static
-      int (&quadrant_compare) (const void *v1, const void *v2);
-
-      static
-      void (&quadrant_childrenv) (const types<3>::quadrant *q,
-                                  types<3>::quadrant c[]);
-
-      static
-      int (&quadrant_overlaps_tree) (types<3>::tree *tree,
-                                     const types<3>::quadrant *q);
-
-      static
-      void (&quadrant_set_morton) (types<3>::quadrant *quadrant,
-                                   int level,
-                                   uint64_t id);
-
-      static
-      int (&quadrant_is_equal) (const types<3>::quadrant *q1,
-                                const types<3>::quadrant *q2);
-
-      static
-      int (&quadrant_is_sibling) (const types<3>::quadrant *q1,
-                                  const types<3>::quadrant *q2);
-
-      static
-      int (&quadrant_is_ancestor) (const types<3>::quadrant *q1,
-                                   const types<3>::quadrant *q2);
-
-      static
-      int (&quadrant_ancestor_id) (const types<3>::quadrant *q,
-                                   int level);
-
-      static
-      int (&comm_find_owner) (types<3>::forest *p4est,
-                              const types<3>::locidx which_tree,
-                              const types<3>::quadrant *q,
-                              const int guess);
-
-      static
-      types<3>::connectivity *(&connectivity_new) (types<3>::topidx num_vertices,
-                                                   types<3>::topidx num_trees,
-                                                   types<3>::topidx num_edges,
-                                                   types<3>::topidx num_ett,
-                                                   types<3>::topidx num_corners,
-                                                   types<3>::topidx num_ctt);
-
-      static
-      void (&connectivity_join_faces) (types<3>::connectivity *conn,
-                                       types<3>::topidx tree_left,
-                                       types<3>::topidx tree_right,
-                                       int face_left,
-                                       int face_right,
-                                       int orientation);
-
-      static
-      void (&connectivity_destroy) (p8est_connectivity_t *connectivity);
-
-      static
-      types<3>::forest *(&new_forest) (MPI_Comm mpicomm,
-                                       types<3>::connectivity *connectivity,
-                                       types<3>::locidx min_quadrants,
-                                       int min_level,
-                                       int fill_uniform,
-                                       size_t data_size,
-                                       p8est_init_t init_fn,
-                                       void *user_pointer);
-
-      static
-      void (&destroy) (types<3>::forest *p8est);
-
-      static
-      void (&refine) (types<3>::forest *p8est,
-                      int refine_recursive,
-                      p8est_refine_t refine_fn,
-                      p8est_init_t init_fn);
-
-      static
-      void (&coarsen) (types<3>::forest *p8est,
-                       int coarsen_recursive,
-                       p8est_coarsen_t coarsen_fn,
-                       p8est_init_t init_fn);
-
-      static
-      void (&balance) (types<3>::forest *p8est,
-                       types<3>::balance_type btype,
-                       p8est_init_t init_fn);
-
-#if DEAL_II_P4EST_VERSION_GTE(0,3,4,3)
-      static
-      p4est_gloidx_t (&partition) (types<3>::forest *p8est,
-                                   int partition_for_coarsening,
-                                   p8est_weight_t weight_fn);
-#else
-      static
-      void (&partition) (types<3>::forest *p8est,
-                         int partition_for_coarsening,
-                         p8est_weight_t weight_fn);
-#endif
-
-      static
-      void (&save) (const char *filename,
-                    types<3>::forest *p4est,
-                    int save_data);
-
-#if DEAL_II_P4EST_VERSION_GTE(0,3,4,3)
-      static
-      types<3>::forest *(&load_ext) (const char *filename,
-                                     MPI_Comm mpicomm,
-                                     std::size_t data_size,
-                                     int load_data,
-                                     int autopartition,
-                                     int broadcasthead,
-                                     void *user_pointer,
-                                     types<3>::connectivity **p4est);
-#else
-      static
-      types<3>::forest *(&load) (const char *filename,
-                                 MPI_Comm mpicomm,
-                                 std::size_t data_size,
-                                 int load_data,
-                                 void *user_pointer,
-                                 types<3>::connectivity **p4est);
-#endif
-
-#if DEAL_II_P4EST_VERSION_GTE(0,3,4,3)
-      static
-      int (&connectivity_save) (const char *filename,
-                                types<3>::connectivity *connectivity);
-#else
-      static
-      void (&connectivity_save) (const char *filename,
-                                 types<3>::connectivity *connectivity);
-#endif
-
-      static
-      int (&connectivity_is_valid) (types<3>::connectivity *connectivity);
-
-#if DEAL_II_P4EST_VERSION_GTE(1,0,0,0)
-      static
-      types<3>::connectivity *(&connectivity_load) (const char *filename,
-                                                    size_t *length);
-#elif DEAL_II_P4EST_VERSION_GTE(0,3,4,3)
-      static
-      types<3>::connectivity *(&connectivity_load) (const char *filename,
-                                                    long unsigned *length);
-#else
-      static
-      types<3>::connectivity *(&connectivity_load) (const char *filename,
-                                                    long *length);
-#endif
-
-      static
-      unsigned int (&checksum) (types<3>::forest *p8est);
-
-      static
-      void (&vtk_write_file) (types<3>::forest *p8est,
-                              p8est_geometry_t *,
-                              const char *baseName);
-
-      static
-      types<3>::ghost *(&ghost_new) (types<3>::forest *p4est,
-                                     types<3>::balance_type btype);
-
-      static
-      void (&ghost_destroy) (types<3>::ghost *ghost);
-
-      static
-      void (&reset_data) (types<3>::forest *p4est,
-                          size_t data_size,
-                          p8est_init_t init_fn,
-                          void *user_pointer);
-
-      static
-      size_t (&forest_memory_used) (types<3>::forest *p4est);
-
-      static
-      size_t (&connectivity_memory_used) (types<3>::connectivity *p4est);
-
-      static const unsigned max_level;
-    };
-
-
-    int (&functions<3>::quadrant_compare) (const void *v1, const void *v2)
-      = p8est_quadrant_compare;
-
-    void (&functions<3>::quadrant_childrenv) (const types<3>::quadrant *q,
-                                              types<3>::quadrant c[])
-      = p8est_quadrant_childrenv;
-
-    int (&functions<3>::quadrant_overlaps_tree) (types<3>::tree *tree,
-                                                 const types<3>::quadrant *q)
-      = p8est_quadrant_overlaps_tree;
-
-    void (&functions<3>::quadrant_set_morton) (types<3>::quadrant *quadrant,
-                                               int level,
-                                               uint64_t id)
-      = p8est_quadrant_set_morton;
-
-    int (&functions<3>::quadrant_is_equal) (const types<3>::quadrant *q1,
-                                            const types<3>::quadrant *q2)
-      = p8est_quadrant_is_equal;
-
-    int (&functions<3>::quadrant_is_sibling) (const types<3>::quadrant *q1,
-                                              const types<3>::quadrant *q2)
-      = p8est_quadrant_is_sibling;
-
-    int (&functions<3>::quadrant_is_ancestor) (const types<3>::quadrant *q1,
-                                               const types<3>::quadrant *q2)
-      = p8est_quadrant_is_ancestor;
-
-    int (&functions<3>::quadrant_ancestor_id) (const types<3>::quadrant *q,
-                                               int level)
-      = p8est_quadrant_ancestor_id;
-
-    int (&functions<3>::comm_find_owner) (types<3>::forest *p4est,
-                                          const types<3>::locidx which_tree,
-                                          const types<3>::quadrant *q,
-                                          const int guess)
-      = p8est_comm_find_owner;
-
-    types<3>::connectivity *(&functions<3>::connectivity_new) (types<3>::topidx num_vertices,
-                                                               types<3>::topidx num_trees,
-                                                               types<3>::topidx num_edges,
-                                                               types<3>::topidx num_ett,
-                                                               types<3>::topidx num_corners,
-                                                               types<3>::topidx num_ctt)
-      = p8est_connectivity_new;
-
-    void (&functions<3>::connectivity_destroy) (p8est_connectivity_t *connectivity)
-      = p8est_connectivity_destroy;
-
-#if DEAL_II_P4EST_VERSION_GTE(0,3,4,1)
-    void (&functions<3>::connectivity_join_faces) (types<3>::connectivity *conn,
-                                                   types<3>::topidx tree_left,
-                                                   types<3>::topidx tree_right,
-                                                   int face_left,
-                                                   int face_right,
-                                                   int orientation)
-      = p8est_connectivity_join_faces;
-#endif
-
-    types<3>::forest *(&functions<3>::new_forest) (MPI_Comm mpicomm,
-                                                   types<3>::connectivity *connectivity,
-                                                   types<3>::locidx min_quadrants,
-                                                   int min_level,
-                                                   int fill_uniform,
-                                                   size_t data_size,
-                                                   p8est_init_t init_fn,
-                                                   void *user_pointer)
-      = p8est_new_ext;
-
-    void (&functions<3>::destroy) (types<3>::forest *p8est)
-      = p8est_destroy;
-
-    void (&functions<3>::refine) (types<3>::forest *p8est,
-                                  int refine_recursive,
-                                  p8est_refine_t refine_fn,
-                                  p8est_init_t init_fn)
-      = p8est_refine;
-
-    void (&functions<3>::coarsen) (types<3>::forest *p8est,
-                                   int coarsen_recursive,
-                                   p8est_coarsen_t coarsen_fn,
-                                   p8est_init_t init_fn)
-      = p8est_coarsen;
-
-    void (&functions<3>::balance) (types<3>::forest *p8est,
-                                   types<3>::balance_type btype,
-                                   p8est_init_t init_fn)
-      = p8est_balance;
-
-#if DEAL_II_P4EST_VERSION_GTE(0,3,4,3)
-    p4est_gloidx_t (&functions<3>::partition) (types<3>::forest *p8est,
-                                               int partition_for_coarsening,
-                                               p8est_weight_t weight_fn)
-      = p8est_partition_ext;
-#else
-    void (&functions<3>::partition) (types<3>::forest *p8est,
-                                     int partition_for_coarsening,
-                                     p8est_weight_t weight_fn)
-      = p8est_partition_ext;
-#endif
-
-    void (&functions<3>::save) (const char *filename,
-                                types<3>::forest *p4est,
-                                int save_data)
-      = p8est_save;
-
-#if DEAL_II_P4EST_VERSION_GTE(0,3,4,3)
-    types<3>::forest *
-    (&functions<3>::load_ext) (const char *filename,
-                               MPI_Comm mpicomm,
-                               std::size_t data_size,
-                               int load_data,
-                               int autopartition,
-                               int broadcasthead,
-                               void *user_pointer,
-                               types<3>::connectivity **p4est)
-      = p8est_load_ext;
-#else
-    types<3>::forest *
-    (&functions<3>::load) (const char *filename,
-                           MPI_Comm mpicomm,
-                           std::size_t data_size,
-                           int load_data,
-                           void *user_pointer,
-                           types<3>::connectivity **p4est)
-      = p8est_load;
-#endif
-
-#if DEAL_II_P4EST_VERSION_GTE(0,3,4,3)
-    int (&functions<3>::connectivity_save) (const char *filename,
-                                            types<3>::connectivity *connectivity)
-      = p8est_connectivity_save;
-#else
-    void (&functions<3>::connectivity_save) (const char *filename,
-                                             types<3>::connectivity *connectivity)
-      = p8est_connectivity_save;
-#endif
-
-    int (&functions<3>::connectivity_is_valid) (types<3>::connectivity
-                                                *connectivity)
-      = p8est_connectivity_is_valid;
-
-#if DEAL_II_P4EST_VERSION_GTE(1,0,0,0)
-    types<3>::connectivity *
-    (&functions<3>::connectivity_load) (const char *filename,
-                                        size_t *length)
-      = p8est_connectivity_load;
-#elif DEAL_II_P4EST_VERSION_GTE(0,3,4,3)
-    types<3>::connectivity *
-    (&functions<3>::connectivity_load) (const char *filename,
-                                        long unsigned *length)
-      = p8est_connectivity_load;
-#else
-    types<3>::connectivity *
-    (&functions<3>::connectivity_load) (const char *filename,
-                                        long *length)
-      = p8est_connectivity_load;
-#endif
-
-    unsigned int (&functions<3>::checksum) (types<3>::forest *p8est)
-      = p8est_checksum;
-
-    void (&functions<3>::vtk_write_file) (types<3>::forest *p8est,
-                                          p8est_geometry_t *,
-                                          const char *baseName)
-      = p8est_vtk_write_file;
-
-    types<3>::ghost *(&functions<3>::ghost_new) (types<3>::forest *p4est,
-                                                 types<3>::balance_type btype)
-      = p8est_ghost_new;
-
-    void (&functions<3>::ghost_destroy) (types<3>::ghost *ghost)
-      = p8est_ghost_destroy;
-
-    void (&functions<3>::reset_data) (types<3>::forest *p4est,
-                                      size_t data_size,
-                                      p8est_init_t init_fn,
-                                      void *user_pointer)
-      = p8est_reset_data;
-
-    size_t (&functions<3>::forest_memory_used) (types<3>::forest *p4est)
-      = p8est_memory_used;
-
-    size_t (&functions<3>::connectivity_memory_used) (types<3>::connectivity *p4est)
-      = p8est_connectivity_memory_used;
-
-    const unsigned int functions<3>::max_level = P8EST_MAXLEVEL;
-
-
-    template <int dim>
-    void
-    init_quadrant_children
-    (const typename types<dim>::quadrant &p4est_cell,
-     typename types<dim>::quadrant (&p4est_children)[GeometryInfo<dim>::max_children_per_cell])
-    {
-
-      for (unsigned int c=0;
-           c<GeometryInfo<dim>::max_children_per_cell; ++c)
-        switch (dim)
-          {
-          case 2:
-            P4EST_QUADRANT_INIT(&p4est_children[c]);
-            break;
-          case 3:
-            P8EST_QUADRANT_INIT(&p4est_children[c]);
-            break;
-          default:
-            Assert (false, ExcNotImplemented());
-          }
-
-
-      functions<dim>::quadrant_childrenv (&p4est_cell,
-                                          p4est_children);
-
-    }
-
-
-    template <int dim>
-    void
-    init_coarse_quadrant(typename types<dim>::quadrant &quad)
-    {
-      switch (dim)
-        {
-        case 2:
-          P4EST_QUADRANT_INIT(&quad);
-          break;
-        case 3:
-          P8EST_QUADRANT_INIT(&quad);
-          break;
-        default:
-          Assert (false, ExcNotImplemented());
-        }
-      functions<dim>::quadrant_set_morton (&quad,
-                                           /*level=*/0,
-                                           /*index=*/0);
-    }
-
-
-    template <int dim>
-    bool
-    quadrant_is_equal (const typename types<dim>::quadrant &q1,
-                       const typename types<dim>::quadrant &q2)
-    {
-      return functions<dim>::quadrant_is_equal(&q1, &q2);
-    }
-
-
-
-    template <int dim>
-    bool
-    quadrant_is_ancestor (const typename types<dim>::quadrant &q1,
-                          const typename types<dim>::quadrant &q2)
-    {
-      return functions<dim>::quadrant_is_ancestor(&q1, &q2);
-    }
-
-    /**
-     * This struct templatizes the p4est iterate structs and function
-     * prototypes, which are used to execute callback functions for faces,
-     * edges, and corners that require local neighborhood information, i.e.
-     * the neighboring cells */
-    template <int dim> struct iter;
-
-    template <> struct iter<2>
-    {
-      typedef p4est_iter_corner_info_t corner_info;
-      typedef p4est_iter_corner_side_t corner_side;
-      typedef p4est_iter_corner_t      corner_iter;
-      typedef p4est_iter_face_info_t face_info;
-      typedef p4est_iter_face_side_t face_side;
-      typedef p4est_iter_face_t      face_iter;
-    };
-
-    template <> struct iter<3>
-    {
-      typedef p8est_iter_corner_info_t corner_info;
-      typedef p8est_iter_corner_side_t corner_side;
-      typedef p8est_iter_corner_t      corner_iter;
-      typedef p8est_iter_edge_info_t edge_info;
-      typedef p8est_iter_edge_side_t edge_side;
-      typedef p8est_iter_edge_t      edge_iter;
-      typedef p8est_iter_face_info_t face_info;
-      typedef p8est_iter_face_side_t face_side;
-      typedef p8est_iter_face_t      face_iter;
-    };
-
-  }
-}
-
-
 namespace
 {
   template <int dim, int spacedim>
index 97de2c1487b52f6300932146951977e3edd68452..c9cf19e513516ecbb935408f1f8ecca8ae869595 100644 (file)
 
 for (deal_II_dimension : DIMENSIONS)
 {
-
-#   ifdef DEAL_II_WITH_P4EST
-
-    namespace internal
-    \{
-    namespace p4est
-    \{
-#if     deal_II_dimension > 1
-    template
-    void
-    init_quadrant_children<deal_II_dimension>
-    (const types<deal_II_dimension>::quadrant & p4est_cell,
-     types<deal_II_dimension>::quadrant (&p4est_children)[GeometryInfo<deal_II_dimension>::max_children_per_cell]);
-
-    template
-    void
-    init_coarse_quadrant<deal_II_dimension>
-    (types<deal_II_dimension>::quadrant & quad);
-
-    template
-    bool
-    quadrant_is_equal<deal_II_dimension>
-    (const types<deal_II_dimension>::quadrant & q1,
-     const types<deal_II_dimension>::quadrant & q2);
-
-    template
-    bool
-    quadrant_is_ancestor<deal_II_dimension>
-    (const types<deal_II_dimension>::quadrant & q1,
-     const types<deal_II_dimension>::quadrant & q2);
-#      endif
-    \}
-    \}
-#   endif // DEAL_II_WITH_P4EST
-
     namespace parallel
     \{
     namespace distributed

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.