]> https://gitweb.dealii.org/ - dealii.git/commitdiff
Perform p-refinement during 'Triangulation::execute_coarsening_and_refinement()'. 7822/head
authormarcfehling <marc.fehling@gmx.net>
Mon, 18 Mar 2019 12:24:03 +0000 (13:24 +0100)
committerMarc Fehling <marc.fehling@gmx.net>
Thu, 9 May 2019 07:14:27 +0000 (09:14 +0200)
12 files changed:
doc/news/changes/major/20190318Fehling [new file with mode: 0644]
doc/news/changes/minor/20190318Fehling [new file with mode: 0644]
include/deal.II/dofs/dof_accessor.h
include/deal.II/dofs/dof_accessor.templates.h
include/deal.II/hp/dof_handler.h
source/hp/dof_handler.cc
tests/hp/p_refinement_and_coarsening.cc [new file with mode: 0644]
tests/hp/p_refinement_and_coarsening.output [new file with mode: 0644]
tests/mpi/p_refinement_and_coarsening.cc [new file with mode: 0644]
tests/mpi/p_refinement_and_coarsening.with_p4est=true.mpirun=1.output [new file with mode: 0644]
tests/mpi/p_refinement_and_coarsening.with_p4est=true.mpirun=3.output [new file with mode: 0644]
tests/mpi/p_refinement_and_coarsening.with_p4est=true.mpirun=8.output [new file with mode: 0644]

diff --git a/doc/news/changes/major/20190318Fehling b/doc/news/changes/major/20190318Fehling
new file mode 100644 (file)
index 0000000..49e67ca
--- /dev/null
@@ -0,0 +1,4 @@
+New: Triangulation::execute_coarsening_and_refinement() now also performs
+p-coarsening and p-refinement on all attached hp::DoFHandler objects.
+<br>
+(Marc Fehling, 2019/03/18)
diff --git a/doc/news/changes/minor/20190318Fehling b/doc/news/changes/minor/20190318Fehling
new file mode 100644 (file)
index 0000000..9d7de3b
--- /dev/null
@@ -0,0 +1,5 @@
+New: Function DoFCellAccessor::active_fe_index_after_p_refinement_and_coarsening()
+returns the active fe index that a cell (of a hp::DoFHandler) will have if
+p-refinement would be performed.
+<br>
+(Marc Fehling, 2019/03/18)
index 98280ee71017170910aaa27a58338a77523c6467..8ee1d5df26a069d0fc8513f674d2f5af8608776c 100644 (file)
@@ -1973,6 +1973,7 @@ public:
    * Return whether the p-refinement flag is set or not.
    *
    * @note The DoFHandler in use has to be of type hp::DoFHandler.
+   * An exception is thrown otherwise.
    */
   bool
   p_refine_flag_set() const;
@@ -1982,6 +1983,7 @@ public:
    * for active cells.
    *
    * @note The DoFHandler in use has to be of type hp::DoFHandler.
+   * An exception is thrown otherwise.
    */
   void
   set_p_refine_flag() const;
@@ -1990,6 +1992,7 @@ public:
    * Clear the p-refinement flag.
    *
    * @note The DoFHandler in use has to be of type hp::DoFHandler.
+   * An exception is thrown otherwise.
    */
   void
   clear_p_refine_flag() const;
@@ -1998,6 +2001,7 @@ public:
    * Return whether the p-coarsening flag is set or not.
    *
    * @note The DoFHandler in use has to be of type hp::DoFHandler.
+   * An exception is thrown otherwise.
    */
   bool
   p_coarsen_flag_set() const;
@@ -2007,6 +2011,7 @@ public:
    * for active cells.
    *
    * @note The DoFHandler in use has to be of type hp::DoFHandler.
+   * An exception is thrown otherwise.
    */
   void
   set_p_coarsen_flag() const;
@@ -2015,10 +2020,32 @@ public:
    * Clear the p-coarsening flag.
    *
    * @note The DoFHandler in use has to be of type hp::DoFHandler.
+   * An exception is thrown otherwise.
    */
   void
   clear_p_coarsen_flag() const;
 
+  /**
+   * Returns the active_fe_index that this cell would have if refinement would
+   * happen.
+   *
+   * Prediction is based on the current p-refinement flags set on this cell,
+   * returning FECollection::next_in_hierarchy() for p-refinement,
+   * FECollection::previous_in_hierarchy() for p-coarsening,
+   * or the current active_fe_index otherwise.
+   *
+   * If this cell is additionally flagged for h-refinement or h-coarsening,
+   * these predicted active_fe_indices will be used to determine the finite
+   * elements on the refined and coarsened cells. For h-refinement, the
+   * predicted active_fe_index will be distributed on its children. For
+   * h-coarsening, the predicted active_fe_index of this cell and its siblings
+   * will be used to determine the active_fe_index on parent cell.
+   *
+   * @note The DoFHandler in use has to be of type hp::DoFHandler.
+   * An exception is thrown otherwise.
+   */
+  unsigned int
+  active_fe_index_after_p_refinement_and_coarsening() const;
   /**
    * @}
    */
index 4f8585ab19152ac53183a82581f17300965c489d..d8f976a6e64443ae18438e9243facda8b32a08fb 100644 (file)
@@ -4300,6 +4300,29 @@ DoFCellAccessor<DoFHandlerType, level_dof_access>::clear_p_coarsen_flag() const
 }
 
 
+
+template <typename DoFHandlerType, bool level_dof_access>
+inline unsigned int
+DoFCellAccessor<DoFHandlerType, level_dof_access>::
+  active_fe_index_after_p_refinement_and_coarsening() const
+{
+  if (p_refine_flag_set())
+    {
+      Assert(!p_coarsen_flag_set(), ExcInternalError());
+      return this->get_dof_handler().get_fe_collection().next_in_hierarchy(
+        active_fe_index());
+    }
+  else if (p_coarsen_flag_set())
+    {
+      Assert(!p_refine_flag_set(), ExcInternalError());
+      return this->get_dof_handler().get_fe_collection().previous_in_hierarchy(
+        active_fe_index());
+    }
+
+  return active_fe_index();
+}
+
+
 DEAL_II_NAMESPACE_CLOSE
 
 #endif
index 8ac961eb0d0a0fb33de95bc63bb142b25dd77f74..6a11be2f7abeb07bdffb7adab593bfaaaca97428 100644 (file)
@@ -1256,21 +1256,28 @@ namespace hp
 
     /**
      * Whenever the underlying triangulation changes by either
-     * refinement/coarsening and serialization, the active_fe_index of cells
+     * h/p refinement/coarsening and serialization, the active_fe_index of cells
      * needs to be transferred. This structure stores all temporary information
      * required during that process.
      */
     struct ActiveFEIndexTransfer
     {
       /**
-       * Container to temporarily store the iterator and active FE index of
-       * cells that will be refined.
+       * Container to temporarily store the iterator and future active FE index
+       * of cells that persist.
+       */
+      std::map<const cell_iterator, const unsigned int>
+        persisting_cells_fe_index;
+
+      /**
+       * Container to temporarily store the iterator and future active FE index
+       * of cells that will be refined.
        */
       std::map<const cell_iterator, const unsigned int> refined_cells_fe_index;
 
       /**
-       * Container to temporarily store the iterator and active FE index of
-       * parent cells that will remain after coarsening.
+       * Container to temporarily store the iterator and future active FE index
+       * of parent cells that will remain after coarsening.
        */
       std::map<const cell_iterator, const unsigned int>
         coarsened_cells_fe_index;
index d6905af1dc9a15d645a0a1976dafeefa134c68bf..78d5017b2238dabf81ca8c56caf8f1582feba58a 100644 (file)
@@ -1068,6 +1068,10 @@ namespace internal
          * the parent cell. See documentation of
          * hp::FECollection::find_common_subspace() and
          * hp::FECollection::find_dominated_fe() for further information.
+         *
+         * On cells intended for p-refinement or p-coarsening, those
+         * active_fe_indices will be determined by the corresponding flags that
+         * have been set on the relevant cells.
          */
         template <int dim, int spacedim>
         static void
@@ -1083,8 +1087,11 @@ namespace internal
                   {
                     // Store the active_fe_index of each cell that will be
                     // refined to and distribute it later on its children.
+                    // Pick their future index if flagged for p-refinement.
                     fe_transfer->refined_cells_fe_index.insert(
-                      {cell, cell->active_fe_index()});
+                      {cell,
+                       cell
+                         ->active_fe_index_after_p_refinement_and_coarsening()});
                   }
                 else if (cell->coarsen_flag_set())
                   {
@@ -1099,6 +1106,10 @@ namespace internal
                     if (fe_transfer->coarsened_cells_fe_index.find(parent) ==
                         fe_transfer->coarsened_cells_fe_index.end())
                       {
+                        // Find a suitable active_fe_index for the parent cell
+                        // based on the least dominating finite element of its
+                        // children. Consider the childrens' hypothetical future
+                        // index when they have been flagged for p-refinement.
                         std::set<unsigned int> fe_indices_children;
                         for (unsigned int child_index = 0;
                              child_index < parent->n_children();
@@ -1108,7 +1119,8 @@ namespace internal
                                    ExcInternalError());
 
                             fe_indices_children.insert(
-                              parent->child(child_index)->active_fe_index());
+                              parent->child(child_index)
+                                ->active_fe_index_after_p_refinement_and_coarsening());
                           }
                         Assert(!fe_indices_children.empty(),
                                ExcInternalError());
@@ -1129,6 +1141,17 @@ namespace internal
                           {parent, fe_index});
                       }
                   }
+                else
+                  {
+                    // No h-refinement is scheduled for this cell.
+                    // However, it may have p-refinement indicators, so we
+                    // choose a new active_fe_index based on its flags.
+                    if (cell->p_refine_flag_set() || cell->p_coarsen_flag_set())
+                      fe_transfer->persisting_cells_fe_index.insert(
+                        {cell,
+                         cell
+                           ->active_fe_index_after_p_refinement_and_coarsening()});
+                  }
               }
         }
 
@@ -1145,6 +1168,18 @@ namespace internal
         {
           const auto &fe_transfer = dof_handler.active_fe_index_transfer;
 
+          // Set active_fe_indices on persisting cells.
+          for (const auto &pair : fe_transfer->persisting_cells_fe_index)
+            {
+              const auto &cell = pair.first;
+
+              if (cell->is_locally_owned())
+                {
+                  Assert(cell->active(), ExcInternalError());
+                  cell->set_active_fe_index(pair.second);
+                }
+            }
+
           // Distribute active_fe_indices from all refined cells on their
           // respective children.
           for (const auto &pair : fe_transfer->refined_cells_fe_index)
@@ -1953,13 +1988,14 @@ namespace hp
       }
 
     Assert(levels.size() == tria->n_levels(), ExcInternalError());
-
-    // Resize active_fe_indices vectors. use zero indicator to extend
     for (unsigned int i = 0; i < levels.size(); ++i)
       {
+        // Resize active_fe_indices vectors. Use zero indicator to extend.
         levels[i]->active_fe_indices.resize(tria->n_raw_cells(i), 0);
-        levels[i]->p_refine_flags.resize(tria->n_raw_cells(i), false);
-        levels[i]->p_coarsen_flags.resize(tria->n_raw_cells(i), false);
+
+        // Resize p-flags vectors. Clear all flags after refinement finished.
+        levels[i]->p_refine_flags.assign(tria->n_raw_cells(i), false);
+        levels[i]->p_coarsen_flags.assign(tria->n_raw_cells(i), false);
       }
   }
 
@@ -2080,8 +2116,18 @@ namespace hp
         // Gather all current active_fe_indices.
         get_active_fe_indices(active_fe_index_transfer->active_fe_indices);
 
-        // Overwrite values of cells that will be coarsened with the
-        // active_fe_index determined beforehand for their parent.
+        // Overwrite active_fe_indices of cells that change by either
+        // h/p refinement/coarsening.
+        for (const auto &pair :
+             active_fe_index_transfer->persisting_cells_fe_index)
+          active_fe_index_transfer
+            ->active_fe_indices[pair.first->active_cell_index()] = pair.second;
+
+        for (const auto &pair :
+             active_fe_index_transfer->refined_cells_fe_index)
+          active_fe_index_transfer
+            ->active_fe_indices[pair.first->active_cell_index()] = pair.second;
+
         for (const auto &pair :
              active_fe_index_transfer->coarsened_cells_fe_index)
           for (unsigned int child_index = 0;
diff --git a/tests/hp/p_refinement_and_coarsening.cc b/tests/hp/p_refinement_and_coarsening.cc
new file mode 100644 (file)
index 0000000..8d171b5
--- /dev/null
@@ -0,0 +1,90 @@
+// ---------------------------------------------------------------------
+//
+// Copyright (C) 2019 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.md at
+// the top level directory of deal.II.
+//
+// ---------------------------------------------------------------------
+
+
+
+// Check execution of p-refinement and p-coarsening via
+// Triangulation::execute_coarsening_and_refinement()
+
+
+#include <deal.II/fe/fe_q.h>
+
+#include <deal.II/grid/grid_generator.h>
+#include <deal.II/grid/tria.h>
+
+#include <deal.II/hp/dof_handler.h>
+#include <deal.II/hp/fe_collection.h>
+
+#include "../tests.h"
+
+
+
+template <int dim>
+void
+test()
+{
+  Triangulation<dim> tria;
+  GridGenerator::hyper_cube(tria);
+  tria.refine_global(1);
+
+  hp::FECollection<dim> fe;
+  for (unsigned int i = 0; i < 3; ++i)
+    fe.push_back(FE_Q<dim>(i + 1));
+
+  hp::DoFHandler<dim> dh(tria);
+  dh.set_fe(fe);
+
+  // set default active_fe_index
+  for (const auto &cell : dh.active_cell_iterators())
+    cell->set_active_fe_index(1);
+
+  // set refine flags at least once
+  auto cell = dh.begin_active();
+  cell->set_p_refine_flag();
+  (++cell)->set_p_coarsen_flag();
+
+  tria.execute_coarsening_and_refinement();
+
+  // check if all flags were cleared and verify fe_indices
+  for (const auto &cell : dh.active_cell_iterators())
+    {
+      Assert(!cell->p_refine_flag_set() && !cell->p_coarsen_flag_set(),
+             ExcInternalError());
+
+      deallog << "cell:" << cell->id().to_string()
+              << ", fe_index:" << cell->active_fe_index() << std::endl;
+    }
+}
+
+
+int
+main()
+{
+  initlog();
+
+  deallog.push("1d");
+  test<1>();
+  deallog.pop();
+
+  deallog.push("2d");
+  test<2>();
+  deallog.pop();
+
+  deallog.push("3d");
+  test<3>();
+  deallog.pop();
+
+  deallog << "OK" << std::endl;
+}
diff --git a/tests/hp/p_refinement_and_coarsening.output b/tests/hp/p_refinement_and_coarsening.output
new file mode 100644 (file)
index 0000000..1cdb8f1
--- /dev/null
@@ -0,0 +1,16 @@
+
+DEAL:1d::cell:0_1:0, fe_index:2
+DEAL:1d::cell:0_1:1, fe_index:0
+DEAL:2d::cell:0_1:0, fe_index:2
+DEAL:2d::cell:0_1:1, fe_index:0
+DEAL:2d::cell:0_1:2, fe_index:1
+DEAL:2d::cell:0_1:3, fe_index:1
+DEAL:3d::cell:0_1:0, fe_index:2
+DEAL:3d::cell:0_1:1, fe_index:0
+DEAL:3d::cell:0_1:2, fe_index:1
+DEAL:3d::cell:0_1:3, fe_index:1
+DEAL:3d::cell:0_1:4, fe_index:1
+DEAL:3d::cell:0_1:5, fe_index:1
+DEAL:3d::cell:0_1:6, fe_index:1
+DEAL:3d::cell:0_1:7, fe_index:1
+DEAL::OK
diff --git a/tests/mpi/p_refinement_and_coarsening.cc b/tests/mpi/p_refinement_and_coarsening.cc
new file mode 100644 (file)
index 0000000..2a11847
--- /dev/null
@@ -0,0 +1,99 @@
+// ---------------------------------------------------------------------
+//
+// Copyright (C) 2019 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.md at
+// the top level directory of deal.II.
+//
+// ---------------------------------------------------------------------
+
+
+
+// Check execution of p-refinement and p-coarsening via
+// parallel::distributed::Triangulation::execute_coarsening_and_refinement()
+
+
+#include <deal.II/distributed/tria.h>
+
+#include <deal.II/fe/fe_q.h>
+
+#include <deal.II/grid/grid_generator.h>
+
+#include <deal.II/hp/dof_handler.h>
+#include <deal.II/hp/fe_collection.h>
+
+#include "../tests.h"
+
+
+
+template <int dim>
+void
+test()
+{
+  parallel::distributed::Triangulation<dim> tria(MPI_COMM_WORLD);
+  GridGenerator::subdivided_hyper_cube(tria, 2);
+  tria.refine_global(1);
+
+  hp::FECollection<dim> fe;
+  for (unsigned int i = 0; i < 3; ++i)
+    fe.push_back(FE_Q<dim>(i + 1));
+
+  hp::DoFHandler<dim> dh(tria);
+  dh.set_fe(fe);
+
+  // set default active_fe_index and refine flags
+  bool flag = false;
+  for (const auto &cell : dh.active_cell_iterators())
+    if (cell->is_locally_owned())
+      {
+        cell->set_active_fe_index(1);
+
+        if (flag)
+          {
+            cell->set_p_refine_flag();
+            flag = false;
+          }
+        else
+          {
+            cell->set_p_coarsen_flag();
+            flag = true;
+          }
+      }
+
+  tria.execute_coarsening_and_refinement();
+
+  // check if all flags were cleared and verify fe_indices
+  for (const auto &cell : dh.active_cell_iterators())
+    if (cell->is_locally_owned())
+      {
+        Assert(!cell->p_refine_flag_set() && !cell->p_coarsen_flag_set(),
+               ExcInternalError());
+
+        deallog << "cell:" << cell->id().to_string()
+                << ", fe_index:" << cell->active_fe_index() << std::endl;
+      }
+}
+
+
+int
+main(int argc, char *argv[])
+{
+  Utilities::MPI::MPI_InitFinalize mpi_initialization(argc, argv, 1);
+  MPILogInitAll                    log;
+
+  deallog.push("2d");
+  test<2>();
+  deallog.pop();
+
+  deallog.push("3d");
+  test<3>();
+  deallog.pop();
+
+  deallog << "OK" << std::endl;
+}
diff --git a/tests/mpi/p_refinement_and_coarsening.with_p4est=true.mpirun=1.output b/tests/mpi/p_refinement_and_coarsening.with_p4est=true.mpirun=1.output
new file mode 100644 (file)
index 0000000..1a8e750
--- /dev/null
@@ -0,0 +1,82 @@
+
+DEAL:0:2d::cell:0_1:0, fe_index:0
+DEAL:0:2d::cell:0_1:1, fe_index:2
+DEAL:0:2d::cell:0_1:2, fe_index:0
+DEAL:0:2d::cell:0_1:3, fe_index:2
+DEAL:0:2d::cell:1_1:0, fe_index:0
+DEAL:0:2d::cell:1_1:1, fe_index:2
+DEAL:0:2d::cell:1_1:2, fe_index:0
+DEAL:0:2d::cell:1_1:3, fe_index:2
+DEAL:0:2d::cell:2_1:0, fe_index:0
+DEAL:0:2d::cell:2_1:1, fe_index:2
+DEAL:0:2d::cell:2_1:2, fe_index:0
+DEAL:0:2d::cell:2_1:3, fe_index:2
+DEAL:0:2d::cell:3_1:0, fe_index:0
+DEAL:0:2d::cell:3_1:1, fe_index:2
+DEAL:0:2d::cell:3_1:2, fe_index:0
+DEAL:0:2d::cell:3_1:3, fe_index:2
+DEAL:0:3d::cell:0_1:0, fe_index:0
+DEAL:0:3d::cell:0_1:1, fe_index:2
+DEAL:0:3d::cell:0_1:2, fe_index:0
+DEAL:0:3d::cell:0_1:3, fe_index:2
+DEAL:0:3d::cell:0_1:4, fe_index:0
+DEAL:0:3d::cell:0_1:5, fe_index:2
+DEAL:0:3d::cell:0_1:6, fe_index:0
+DEAL:0:3d::cell:0_1:7, fe_index:2
+DEAL:0:3d::cell:1_1:0, fe_index:0
+DEAL:0:3d::cell:1_1:1, fe_index:2
+DEAL:0:3d::cell:1_1:2, fe_index:0
+DEAL:0:3d::cell:1_1:3, fe_index:2
+DEAL:0:3d::cell:1_1:4, fe_index:0
+DEAL:0:3d::cell:1_1:5, fe_index:2
+DEAL:0:3d::cell:1_1:6, fe_index:0
+DEAL:0:3d::cell:1_1:7, fe_index:2
+DEAL:0:3d::cell:2_1:0, fe_index:0
+DEAL:0:3d::cell:2_1:1, fe_index:2
+DEAL:0:3d::cell:2_1:2, fe_index:0
+DEAL:0:3d::cell:2_1:3, fe_index:2
+DEAL:0:3d::cell:2_1:4, fe_index:0
+DEAL:0:3d::cell:2_1:5, fe_index:2
+DEAL:0:3d::cell:2_1:6, fe_index:0
+DEAL:0:3d::cell:2_1:7, fe_index:2
+DEAL:0:3d::cell:3_1:0, fe_index:0
+DEAL:0:3d::cell:3_1:1, fe_index:2
+DEAL:0:3d::cell:3_1:2, fe_index:0
+DEAL:0:3d::cell:3_1:3, fe_index:2
+DEAL:0:3d::cell:3_1:4, fe_index:0
+DEAL:0:3d::cell:3_1:5, fe_index:2
+DEAL:0:3d::cell:3_1:6, fe_index:0
+DEAL:0:3d::cell:3_1:7, fe_index:2
+DEAL:0:3d::cell:4_1:0, fe_index:0
+DEAL:0:3d::cell:4_1:1, fe_index:2
+DEAL:0:3d::cell:4_1:2, fe_index:0
+DEAL:0:3d::cell:4_1:3, fe_index:2
+DEAL:0:3d::cell:4_1:4, fe_index:0
+DEAL:0:3d::cell:4_1:5, fe_index:2
+DEAL:0:3d::cell:4_1:6, fe_index:0
+DEAL:0:3d::cell:4_1:7, fe_index:2
+DEAL:0:3d::cell:5_1:0, fe_index:0
+DEAL:0:3d::cell:5_1:1, fe_index:2
+DEAL:0:3d::cell:5_1:2, fe_index:0
+DEAL:0:3d::cell:5_1:3, fe_index:2
+DEAL:0:3d::cell:5_1:4, fe_index:0
+DEAL:0:3d::cell:5_1:5, fe_index:2
+DEAL:0:3d::cell:5_1:6, fe_index:0
+DEAL:0:3d::cell:5_1:7, fe_index:2
+DEAL:0:3d::cell:6_1:0, fe_index:0
+DEAL:0:3d::cell:6_1:1, fe_index:2
+DEAL:0:3d::cell:6_1:2, fe_index:0
+DEAL:0:3d::cell:6_1:3, fe_index:2
+DEAL:0:3d::cell:6_1:4, fe_index:0
+DEAL:0:3d::cell:6_1:5, fe_index:2
+DEAL:0:3d::cell:6_1:6, fe_index:0
+DEAL:0:3d::cell:6_1:7, fe_index:2
+DEAL:0:3d::cell:7_1:0, fe_index:0
+DEAL:0:3d::cell:7_1:1, fe_index:2
+DEAL:0:3d::cell:7_1:2, fe_index:0
+DEAL:0:3d::cell:7_1:3, fe_index:2
+DEAL:0:3d::cell:7_1:4, fe_index:0
+DEAL:0:3d::cell:7_1:5, fe_index:2
+DEAL:0:3d::cell:7_1:6, fe_index:0
+DEAL:0:3d::cell:7_1:7, fe_index:2
+DEAL:0::OK
diff --git a/tests/mpi/p_refinement_and_coarsening.with_p4est=true.mpirun=3.output b/tests/mpi/p_refinement_and_coarsening.with_p4est=true.mpirun=3.output
new file mode 100644 (file)
index 0000000..f5282ac
--- /dev/null
@@ -0,0 +1,88 @@
+
+DEAL:0:2d::cell:0_1:0, fe_index:0
+DEAL:0:2d::cell:0_1:1, fe_index:2
+DEAL:0:2d::cell:0_1:2, fe_index:0
+DEAL:0:2d::cell:0_1:3, fe_index:2
+DEAL:0:3d::cell:0_1:0, fe_index:0
+DEAL:0:3d::cell:0_1:1, fe_index:2
+DEAL:0:3d::cell:0_1:2, fe_index:0
+DEAL:0:3d::cell:0_1:3, fe_index:2
+DEAL:0:3d::cell:0_1:4, fe_index:0
+DEAL:0:3d::cell:0_1:5, fe_index:2
+DEAL:0:3d::cell:0_1:6, fe_index:0
+DEAL:0:3d::cell:0_1:7, fe_index:2
+DEAL:0:3d::cell:1_1:0, fe_index:0
+DEAL:0:3d::cell:1_1:1, fe_index:2
+DEAL:0:3d::cell:1_1:2, fe_index:0
+DEAL:0:3d::cell:1_1:3, fe_index:2
+DEAL:0:3d::cell:1_1:4, fe_index:0
+DEAL:0:3d::cell:1_1:5, fe_index:2
+DEAL:0:3d::cell:1_1:6, fe_index:0
+DEAL:0:3d::cell:1_1:7, fe_index:2
+DEAL:0:3d::cell:2_1:0, fe_index:0
+DEAL:0:3d::cell:2_1:1, fe_index:2
+DEAL:0:3d::cell:2_1:2, fe_index:0
+DEAL:0:3d::cell:2_1:3, fe_index:2
+DEAL:0:3d::cell:2_1:4, fe_index:0
+DEAL:0:3d::cell:2_1:5, fe_index:2
+DEAL:0:3d::cell:2_1:6, fe_index:0
+DEAL:0:3d::cell:2_1:7, fe_index:2
+DEAL:0::OK
+
+DEAL:1:2d::cell:1_1:0, fe_index:0
+DEAL:1:2d::cell:1_1:1, fe_index:2
+DEAL:1:2d::cell:1_1:2, fe_index:0
+DEAL:1:2d::cell:1_1:3, fe_index:2
+DEAL:1:2d::cell:2_1:0, fe_index:0
+DEAL:1:2d::cell:2_1:1, fe_index:2
+DEAL:1:2d::cell:2_1:2, fe_index:0
+DEAL:1:2d::cell:2_1:3, fe_index:2
+DEAL:1:3d::cell:3_1:0, fe_index:0
+DEAL:1:3d::cell:3_1:1, fe_index:2
+DEAL:1:3d::cell:3_1:2, fe_index:0
+DEAL:1:3d::cell:3_1:3, fe_index:2
+DEAL:1:3d::cell:3_1:4, fe_index:0
+DEAL:1:3d::cell:3_1:5, fe_index:2
+DEAL:1:3d::cell:3_1:6, fe_index:0
+DEAL:1:3d::cell:3_1:7, fe_index:2
+DEAL:1:3d::cell:4_1:0, fe_index:0
+DEAL:1:3d::cell:4_1:1, fe_index:2
+DEAL:1:3d::cell:4_1:2, fe_index:0
+DEAL:1:3d::cell:4_1:3, fe_index:2
+DEAL:1:3d::cell:4_1:4, fe_index:0
+DEAL:1:3d::cell:4_1:5, fe_index:2
+DEAL:1:3d::cell:4_1:6, fe_index:0
+DEAL:1:3d::cell:4_1:7, fe_index:2
+DEAL:1::OK
+
+
+DEAL:2:2d::cell:3_1:0, fe_index:0
+DEAL:2:2d::cell:3_1:1, fe_index:2
+DEAL:2:2d::cell:3_1:2, fe_index:0
+DEAL:2:2d::cell:3_1:3, fe_index:2
+DEAL:2:3d::cell:5_1:0, fe_index:0
+DEAL:2:3d::cell:5_1:1, fe_index:2
+DEAL:2:3d::cell:5_1:2, fe_index:0
+DEAL:2:3d::cell:5_1:3, fe_index:2
+DEAL:2:3d::cell:5_1:4, fe_index:0
+DEAL:2:3d::cell:5_1:5, fe_index:2
+DEAL:2:3d::cell:5_1:6, fe_index:0
+DEAL:2:3d::cell:5_1:7, fe_index:2
+DEAL:2:3d::cell:6_1:0, fe_index:0
+DEAL:2:3d::cell:6_1:1, fe_index:2
+DEAL:2:3d::cell:6_1:2, fe_index:0
+DEAL:2:3d::cell:6_1:3, fe_index:2
+DEAL:2:3d::cell:6_1:4, fe_index:0
+DEAL:2:3d::cell:6_1:5, fe_index:2
+DEAL:2:3d::cell:6_1:6, fe_index:0
+DEAL:2:3d::cell:6_1:7, fe_index:2
+DEAL:2:3d::cell:7_1:0, fe_index:0
+DEAL:2:3d::cell:7_1:1, fe_index:2
+DEAL:2:3d::cell:7_1:2, fe_index:0
+DEAL:2:3d::cell:7_1:3, fe_index:2
+DEAL:2:3d::cell:7_1:4, fe_index:0
+DEAL:2:3d::cell:7_1:5, fe_index:2
+DEAL:2:3d::cell:7_1:6, fe_index:0
+DEAL:2:3d::cell:7_1:7, fe_index:2
+DEAL:2::OK
+
diff --git a/tests/mpi/p_refinement_and_coarsening.with_p4est=true.mpirun=8.output b/tests/mpi/p_refinement_and_coarsening.with_p4est=true.mpirun=8.output
new file mode 100644 (file)
index 0000000..d195197
--- /dev/null
@@ -0,0 +1,103 @@
+
+DEAL:0:2d::cell:0_1:0, fe_index:0
+DEAL:0:2d::cell:0_1:1, fe_index:2
+DEAL:0:2d::cell:0_1:2, fe_index:0
+DEAL:0:2d::cell:0_1:3, fe_index:2
+DEAL:0:3d::cell:0_1:0, fe_index:0
+DEAL:0:3d::cell:0_1:1, fe_index:2
+DEAL:0:3d::cell:0_1:2, fe_index:0
+DEAL:0:3d::cell:0_1:3, fe_index:2
+DEAL:0:3d::cell:0_1:4, fe_index:0
+DEAL:0:3d::cell:0_1:5, fe_index:2
+DEAL:0:3d::cell:0_1:6, fe_index:0
+DEAL:0:3d::cell:0_1:7, fe_index:2
+DEAL:0::OK
+
+DEAL:1:3d::cell:1_1:0, fe_index:0
+DEAL:1:3d::cell:1_1:1, fe_index:2
+DEAL:1:3d::cell:1_1:2, fe_index:0
+DEAL:1:3d::cell:1_1:3, fe_index:2
+DEAL:1:3d::cell:1_1:4, fe_index:0
+DEAL:1:3d::cell:1_1:5, fe_index:2
+DEAL:1:3d::cell:1_1:6, fe_index:0
+DEAL:1:3d::cell:1_1:7, fe_index:2
+DEAL:1::OK
+
+
+DEAL:2:2d::cell:1_1:0, fe_index:0
+DEAL:2:2d::cell:1_1:1, fe_index:2
+DEAL:2:2d::cell:1_1:2, fe_index:0
+DEAL:2:2d::cell:1_1:3, fe_index:2
+DEAL:2:3d::cell:2_1:0, fe_index:0
+DEAL:2:3d::cell:2_1:1, fe_index:2
+DEAL:2:3d::cell:2_1:2, fe_index:0
+DEAL:2:3d::cell:2_1:3, fe_index:2
+DEAL:2:3d::cell:2_1:4, fe_index:0
+DEAL:2:3d::cell:2_1:5, fe_index:2
+DEAL:2:3d::cell:2_1:6, fe_index:0
+DEAL:2:3d::cell:2_1:7, fe_index:2
+DEAL:2::OK
+
+
+DEAL:3:3d::cell:3_1:0, fe_index:0
+DEAL:3:3d::cell:3_1:1, fe_index:2
+DEAL:3:3d::cell:3_1:2, fe_index:0
+DEAL:3:3d::cell:3_1:3, fe_index:2
+DEAL:3:3d::cell:3_1:4, fe_index:0
+DEAL:3:3d::cell:3_1:5, fe_index:2
+DEAL:3:3d::cell:3_1:6, fe_index:0
+DEAL:3:3d::cell:3_1:7, fe_index:2
+DEAL:3::OK
+
+
+DEAL:4:2d::cell:2_1:0, fe_index:0
+DEAL:4:2d::cell:2_1:1, fe_index:2
+DEAL:4:2d::cell:2_1:2, fe_index:0
+DEAL:4:2d::cell:2_1:3, fe_index:2
+DEAL:4:3d::cell:4_1:0, fe_index:0
+DEAL:4:3d::cell:4_1:1, fe_index:2
+DEAL:4:3d::cell:4_1:2, fe_index:0
+DEAL:4:3d::cell:4_1:3, fe_index:2
+DEAL:4:3d::cell:4_1:4, fe_index:0
+DEAL:4:3d::cell:4_1:5, fe_index:2
+DEAL:4:3d::cell:4_1:6, fe_index:0
+DEAL:4:3d::cell:4_1:7, fe_index:2
+DEAL:4::OK
+
+
+DEAL:5:3d::cell:5_1:0, fe_index:0
+DEAL:5:3d::cell:5_1:1, fe_index:2
+DEAL:5:3d::cell:5_1:2, fe_index:0
+DEAL:5:3d::cell:5_1:3, fe_index:2
+DEAL:5:3d::cell:5_1:4, fe_index:0
+DEAL:5:3d::cell:5_1:5, fe_index:2
+DEAL:5:3d::cell:5_1:6, fe_index:0
+DEAL:5:3d::cell:5_1:7, fe_index:2
+DEAL:5::OK
+
+
+DEAL:6:2d::cell:3_1:0, fe_index:0
+DEAL:6:2d::cell:3_1:1, fe_index:2
+DEAL:6:2d::cell:3_1:2, fe_index:0
+DEAL:6:2d::cell:3_1:3, fe_index:2
+DEAL:6:3d::cell:6_1:0, fe_index:0
+DEAL:6:3d::cell:6_1:1, fe_index:2
+DEAL:6:3d::cell:6_1:2, fe_index:0
+DEAL:6:3d::cell:6_1:3, fe_index:2
+DEAL:6:3d::cell:6_1:4, fe_index:0
+DEAL:6:3d::cell:6_1:5, fe_index:2
+DEAL:6:3d::cell:6_1:6, fe_index:0
+DEAL:6:3d::cell:6_1:7, fe_index:2
+DEAL:6::OK
+
+
+DEAL:7:3d::cell:7_1:0, fe_index:0
+DEAL:7:3d::cell:7_1:1, fe_index:2
+DEAL:7:3d::cell:7_1:2, fe_index:0
+DEAL:7:3d::cell:7_1:3, fe_index:2
+DEAL:7:3d::cell:7_1:4, fe_index:0
+DEAL:7:3d::cell:7_1:5, fe_index:2
+DEAL:7:3d::cell:7_1:6, fe_index:0
+DEAL:7:3d::cell:7_1:7, fe_index:2
+DEAL:7::OK
+

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.