]> https://gitweb.dealii.org/ - dealii.git/commitdiff
Make partition_zoltan the default choice for p::s::Triangulation
authorDaniel Arndt <daniel.arndt@iwr.uni-heidelberg.de>
Tue, 28 Nov 2017 20:38:24 +0000 (21:38 +0100)
committerDaniel Arndt <daniel.arndt@iwr.uni-heidelberg.de>
Wed, 29 Nov 2017 00:15:44 +0000 (01:15 +0100)
22 files changed:
doc/news/changes/incompatibilities/20171128DanielArndt [new file with mode: 0644]
include/deal.II/distributed/shared_tria.h
source/distributed/shared_tria.cc
tests/distributed_grids/copy_tria_01.cc
tests/grid/grid_out_per_processor_vtu_02.cc
tests/sharedtria/communicate_active_fe_indices_01.cc
tests/sharedtria/communicate_active_fe_indices_01.with_trilinos=false.with_metis=false.mpirun=3.output [moved from tests/sharedtria/communicate_active_fe_indices_01.mpirun=3.output with 100% similarity]
tests/sharedtria/communicate_active_fe_indices_01.with_trilinos=false.with_metis=true.mpirun=3.output [new file with mode: 0644]
tests/sharedtria/communicate_active_fe_indices_01.with_trilinos=true.with_trilinos_with_zoltan=true.mpirun=3.output [new file with mode: 0644]
tests/sharedtria/copy_tria_01.cc
tests/sharedtria/dof_01.cc
tests/sharedtria/dof_02.cc
tests/sharedtria/dof_03.cc
tests/sharedtria/dof_04.cc
tests/sharedtria/dof_06.cc
tests/sharedtria/hp_dof_01.cc
tests/sharedtria/hp_dof_02.cc
tests/sharedtria/hp_dof_03.cc
tests/sharedtria/hp_dof_04.cc
tests/sharedtria/tria_01.cc
tests/sharedtria/tria_02.cc
tests/sharedtria/tria_load_01.cc

diff --git a/doc/news/changes/incompatibilities/20171128DanielArndt b/doc/news/changes/incompatibilities/20171128DanielArndt
new file mode 100644 (file)
index 0000000..a14f327
--- /dev/null
@@ -0,0 +1,4 @@
+Changed: The default partitioner for parallel::shared::Triangulation
+is Zoltan.
+<br>
+(Daniel Arndt, 2017/11/28)
index 833a54035af8828a84187e886bd066fcd58580b6..defd14a5a953bf600dc7941478f7ff50b6b4f049 100644 (file)
@@ -108,16 +108,27 @@ namespace parallel
        * Configuration flags for distributed Triangulations to be set in the
        * constructor. Settings can be combined using bitwise OR.
        *
-       * The constructor requires that exactly one of <code>partition_metis</code>,
-       * <code>partition_zorder</code>, and <code>partition_custom_signal</code> be set.
-       * If no setting is given to the constructor, it will set <code>partition_metis</code>
-       * by default.
+       * The constructor requires that exactly one of
+       * <code>partition_auto</code>, <code>partition_metis</code>,
+       * <code>partition_zorder</code>, <code>partition_zoltan> and
+       * <code>partition_custom_signal</code> is set. If
+       * <code>partition_auto</code> is chosen, it will use
+       * <code>partition_zoltan</code> (if available), then
+       * <code>partition_metis</code> (if available) and finally
+       * <code>partition_zorder>.
        */
       enum Settings
       {
         /**
-         * Use METIS partitioner to partition active cells. This is the
-         * default partioning method.
+         * Choose the partitioner depending on the enabled dependencies.
+         * If Zoltan is available, partition_zoltan is used. If METIS is
+         * supported partition_metis is chosen afterwards, else
+         * partition_zorder is taken as partitioning strategy.
+         */
+        partition_auto = 0x0,
+
+        /**
+         * Use METIS partitioner to partition active cells.
          */
         partition_metis = 0x1,
 
@@ -127,6 +138,11 @@ namespace parallel
          */
         partition_zorder = 0x2,
 
+        /**
+         * Use Zoltan to partition active cells.
+         */
+        partition_zoltan = 0x3,
+
         /**
          * Partition cells using a custom, user defined function. This is
          * accomplished by connecting the post_refinement signal to the
@@ -202,7 +218,7 @@ namespace parallel
                      const typename dealii::Triangulation<dim,spacedim>::MeshSmoothing =
                        (dealii::Triangulation<dim,spacedim>::none),
                      const bool allow_artificial_cells = false,
-                     const Settings settings = partition_metis);
+                     const Settings settings = partition_auto);
 
       /**
        * Destructor.
index f43519283660a711392d10336c5297febaacf844..1cb8ce2030037de390a23a2bcda587ee3c39afa4 100644 (file)
@@ -21,6 +21,7 @@
 #include <deal.II/grid/tria_iterator.h>
 #include <deal.II/grid/grid_tools.h>
 #include <deal.II/grid/filtered_iterator.h>
+#include <deal.II/lac/sparsity_tools.h>
 #include <deal.II/distributed/shared_tria.h>
 #include <deal.II/distributed/tria.h>
 
@@ -42,10 +43,15 @@ namespace parallel
       settings (settings),
       allow_artificial_cells(allow_artificial_cells)
     {
-      Assert((settings & (partition_metis | partition_zorder | partition_custom_signal)) == partition_metis ||
-             (settings & (partition_metis | partition_zorder | partition_custom_signal)) == partition_zorder ||
-             (settings & (partition_metis | partition_zorder | partition_custom_signal)) == partition_custom_signal,
-             ExcMessage ("Settings must contain exactly one type of active cell partitioning scheme."))
+      const auto partition_settings
+        = (partition_zoltan | partition_metis |
+           partition_zorder | partition_custom_signal) & settings;
+      Assert(partition_settings == partition_auto ||
+             partition_settings == partition_metis ||
+             partition_settings == partition_zoltan ||
+             partition_settings == partition_zorder ||
+             partition_settings == partition_custom_signal,
+             ExcMessage ("Settings must contain exactly one type of the active cell partitioning scheme."))
 
       if (settings & construct_multigrid_hierarchy)
         Assert(allow_artificial_cells,
@@ -68,16 +74,51 @@ namespace parallel
                         "agree on the number of active cells."))
 #endif
 
+      auto partition_settings
+        = (partition_zoltan | partition_metis |
+           partition_zorder | partition_custom_signal) & settings;
+      if (partition_settings == partition_auto)
+#ifdef DEAL_II_WITH_ZOLTAN
+        partition_settings = partition_zoltan;
+#elif defined DEAL_II_WITH_METIS
+        partition_settings = partition_metis;
+#else
+        partition_settings = partition_zorder;
+#endif
 
-      if (settings & partition_metis)
+      if (partition_settings == partition_zoltan)
+        {
+#ifndef DEAL_II_WITH_ZOLTAN
+          AssertThrow (false,
+                       ExcMessage("Choosing 'partition_zoltan' requires the library "
+                                  "to be compiled with support for Zoltan! "
+                                  "Instead, you might use 'partition_auto' to select "
+                                  "a partitioning algorithm that is supported "
+                                  "by your current configuration."));
+#else
+          GridTools::partition_triangulation (this->n_subdomains, *this,
+                                              SparsityTools::Partitioner::zoltan);
+#endif
+        }
+      else if (partition_settings == partition_metis)
         {
-          dealii::GridTools::partition_triangulation (this->n_subdomains, *this);
+#ifndef DEAL_II_WITH_METIS
+          AssertThrow (false,
+                       ExcMessage("Choosing 'partition_metis' requires the library "
+                                  "to be compiled with support for METIS! "
+                                  "Instead, you might use 'partition_auto' to select "
+                                  "a partitioning algorithm that is supported "
+                                  "by your current configuration."));
+#else
+          GridTools::partition_triangulation (this->n_subdomains, *this,
+                                              SparsityTools::Partitioner::metis);
+#endif
         }
-      else if (settings & partition_zorder)
+      else if (partition_settings == partition_zorder)
         {
-          dealii::GridTools::partition_triangulation_zorder (this->n_subdomains, *this);
+          GridTools::partition_triangulation_zorder (this->n_subdomains, *this);
         }
-      else if (settings & partition_custom_signal)
+      else if (partition_settings == partition_custom_signal)
         {
           // User partitions mesh manually
         }
index a4af1eb9ec54c1f623e7147cf8fa9aa7dee2d1a9..435853c754d9a18384838ccc5d3d12836889974b 100644 (file)
@@ -33,7 +33,10 @@ void test()
       << " n_active_cells: " << tr1.n_active_cells() << "\n"
       << std::endl;
 
-  parallel::shared::Triangulation<dim> tr2(MPI_COMM_WORLD);
+  parallel::shared::Triangulation<dim> tr2(MPI_COMM_WORLD,
+                                           ::Triangulation<dim>::none,
+                                           false,
+                                           parallel::shared::Triangulation<dim>::partition_metis);
   tr2.copy_triangulation(tr1);
 
   deallog
index 02f38ef8cc611d06cb35aa35411f2589b1e87349..ce7a20b63ae8a2fee34442f43dacbef4b6a147fb 100644 (file)
@@ -65,7 +65,10 @@ void test()
   if (myid == 0)
     deallog << "hyper_cube" << std::endl;
 
-  parallel::shared::Triangulation<dim> tr(MPI_COMM_WORLD);
+  parallel::shared::Triangulation<dim> tr(MPI_COMM_WORLD,
+                                          ::Triangulation<dim>::none,
+                                          false,
+                                          parallel::shared::Triangulation<dim>::partition_metis);
   GridGenerator::hyper_cube(tr);
   tr.refine_global(1);
   typename Triangulation<dim>::active_cell_iterator
index 72c4fd46a710387cb9202b9fb4ef6c8c2979bc5b..e39435f4e8603c689661acde7416f7fee1d4183a 100644 (file)
@@ -40,10 +40,7 @@ template <int dim>
 void test()
 {
   parallel::shared::Triangulation<dim>
-  triangulation (MPI_COMM_WORLD,
-                 ::Triangulation<dim>::none,
-                 false,
-                 parallel::shared::Triangulation<dim>::partition_zorder);
+  triangulation (MPI_COMM_WORLD);
 
   GridGenerator::hyper_cube(triangulation);
   triangulation.refine_global (3);
diff --git a/tests/sharedtria/communicate_active_fe_indices_01.with_trilinos=false.with_metis=true.mpirun=3.output b/tests/sharedtria/communicate_active_fe_indices_01.with_trilinos=false.with_metis=true.mpirun=3.output
new file mode 100644 (file)
index 0000000..8a0dde9
--- /dev/null
@@ -0,0 +1,23 @@
+
+DEAL:0:1d::n_dofs: 9
+DEAL:0:1d::n_locally_owned_dofs: 3
+DEAL:0:2d::n_dofs: 81
+DEAL:0:2d::n_locally_owned_dofs: 31
+DEAL:0:3d::n_dofs: 729
+DEAL:0:3d::n_locally_owned_dofs: 297
+
+DEAL:1:1d::n_dofs: 9
+DEAL:1:1d::n_locally_owned_dofs: 4
+DEAL:1:2d::n_dofs: 81
+DEAL:1:2d::n_locally_owned_dofs: 30
+DEAL:1:3d::n_dofs: 729
+DEAL:1:3d::n_locally_owned_dofs: 240
+
+
+DEAL:2:1d::n_dofs: 9
+DEAL:2:1d::n_locally_owned_dofs: 2
+DEAL:2:2d::n_dofs: 81
+DEAL:2:2d::n_locally_owned_dofs: 20
+DEAL:2:3d::n_dofs: 729
+DEAL:2:3d::n_locally_owned_dofs: 192
+
diff --git a/tests/sharedtria/communicate_active_fe_indices_01.with_trilinos=true.with_trilinos_with_zoltan=true.mpirun=3.output b/tests/sharedtria/communicate_active_fe_indices_01.with_trilinos=true.with_trilinos_with_zoltan=true.mpirun=3.output
new file mode 100644 (file)
index 0000000..8a0dde9
--- /dev/null
@@ -0,0 +1,23 @@
+
+DEAL:0:1d::n_dofs: 9
+DEAL:0:1d::n_locally_owned_dofs: 3
+DEAL:0:2d::n_dofs: 81
+DEAL:0:2d::n_locally_owned_dofs: 31
+DEAL:0:3d::n_dofs: 729
+DEAL:0:3d::n_locally_owned_dofs: 297
+
+DEAL:1:1d::n_dofs: 9
+DEAL:1:1d::n_locally_owned_dofs: 4
+DEAL:1:2d::n_dofs: 81
+DEAL:1:2d::n_locally_owned_dofs: 30
+DEAL:1:3d::n_dofs: 729
+DEAL:1:3d::n_locally_owned_dofs: 240
+
+
+DEAL:2:1d::n_dofs: 9
+DEAL:2:1d::n_locally_owned_dofs: 2
+DEAL:2:2d::n_dofs: 81
+DEAL:2:2d::n_locally_owned_dofs: 20
+DEAL:2:3d::n_dofs: 729
+DEAL:2:3d::n_locally_owned_dofs: 192
+
index a732bd5da832a027ed7ddfa7a2617bd3629006c4..eefaf3269c58c7ebc31555856b3cf33f3ef786a0 100644 (file)
@@ -33,7 +33,10 @@ void test()
       << " n_active_cells: " << tr1.n_active_cells() << "\n"
       << std::endl;
 
-  parallel::shared::Triangulation<dim> tr2(MPI_COMM_WORLD);
+  parallel::shared::Triangulation<dim> tr2(MPI_COMM_WORLD,
+                                           ::Triangulation<dim>::none,
+                                           false,
+                                           parallel::shared::Triangulation<dim>::partition_metis);
   tr2.copy_triangulation(tr1);
 
   deallog
@@ -43,7 +46,10 @@ void test()
       << " n_global_active_cells: " << tr2.n_global_active_cells() << "\n"
       << std::endl;
 
-  parallel::shared::Triangulation<dim> tr3(MPI_COMM_WORLD);
+  parallel::shared::Triangulation<dim> tr3(MPI_COMM_WORLD,
+                                           ::Triangulation<dim>::none,
+                                           false,
+                                           parallel::shared::Triangulation<dim>::partition_metis);
   tr3.copy_triangulation(tr2);
 
   deallog
index 9367a583bb93290fd868663c1e57c8c93e24be1b..5a968d3f62fe7fa82a1bc00cbafa10139f9825cf 100644 (file)
@@ -37,7 +37,10 @@ template <int dim>
 void test()
 {
   parallel::shared::Triangulation<dim>
-  triangulation (MPI_COMM_WORLD);
+  triangulation (MPI_COMM_WORLD,
+                 ::Triangulation<dim>::none,
+                 false,
+                 parallel::shared::Triangulation<dim>::partition_metis);
 
   FESystem<dim> fe (FE_Q<dim>(3),2,
                     FE_DGQ<dim>(1),1);
index 274d142aad8714d66d31b482dfc722367eba7ba8..1a9cd2411a0ed2e95b8805374af314b3c5f3487c 100644 (file)
@@ -38,7 +38,10 @@ template <int dim>
 void test()
 {
   parallel::shared::Triangulation<dim>
-  triangulation (MPI_COMM_WORLD);
+  triangulation (MPI_COMM_WORLD,
+                 ::Triangulation<dim>::none,
+                 false,
+                 parallel::shared::Triangulation<dim>::partition_metis);
 
   FESystem<dim> fe (FE_Q<dim>(3),2,
                     FE_DGQ<dim>(1),1);
index c9f8502a6cb036a3f196fdade4cf5ce9bf2ecc53..dbf94fca69917ae51426a4342911d0200594765c 100644 (file)
@@ -38,8 +38,9 @@ void test()
 {
   parallel::shared::Triangulation<dim>
   triangulation (MPI_COMM_WORLD,
-                 Triangulation<dim>::none,
-                 /*artificial*/true);
+                 ::Triangulation<dim>::none,
+                 /*artificial*/true,
+                 parallel::shared::Triangulation<dim>::partition_metis);
 
   FESystem<dim> fe (FE_Q<dim>(3),2,
                     FE_DGQ<dim>(1),1);
index 3478dda427d8438bc444df10f4f99434320dda86..8bb5ad957a247d6d63d7e47bc75f8a12f1430ed0 100644 (file)
@@ -39,8 +39,9 @@ void test()
 {
   parallel::shared::Triangulation<dim>
   triangulation (MPI_COMM_WORLD,
-                 Triangulation<dim>::none,
-                 /*artificial*/true);
+                 ::Triangulation<dim>::none,
+                 /*artificial*/true,
+                 parallel::shared::Triangulation<dim>::partition_zorder);
 
   FESystem<dim> fe (FE_Q<dim>(3),2,
                     FE_DGQ<dim>(1),1);
index a2e2decca0acc3b7db5cc3f90a83f21f1b9d5479..a7376c778c1ebfff2d94827987e5f1fdc6fd7afc 100644 (file)
@@ -14,7 +14,7 @@
 // ---------------------------------------------------------------------
 
 
-// distibute dofs on a shared triangulation. Tests the change
+// distribute dofs on a shared triangulation. Tests the change
 // from coin_flip to smallest proc index method of distribution
 // along partition interface
 
index 807a14c75d9a3879e8a43f1cfb705dfdbe034456..1b379e6db65c62c34a109d9213c797cc365f17f7 100644 (file)
@@ -41,7 +41,10 @@ template <int dim>
 void test()
 {
   parallel::shared::Triangulation<dim>
-  triangulation (MPI_COMM_WORLD);
+  triangulation (MPI_COMM_WORLD,
+                 ::Triangulation<dim>::none,
+                 false,
+                 parallel::shared::Triangulation<dim>::partition_zorder);
 
   hp::FECollection<dim> fe;
   fe.push_back (FESystem<dim> (FE_Q<dim>(3),2,
index b7348e21ae9cf734270a9a528055d4fd489461fd..0189f18f16fc2160ae1da3a75e10d5575d397830 100644 (file)
@@ -42,7 +42,10 @@ template <int dim>
 void test()
 {
   parallel::shared::Triangulation<dim>
-  triangulation (MPI_COMM_WORLD);
+  triangulation (MPI_COMM_WORLD,
+                 ::Triangulation<dim>::none,
+                 false,
+                 parallel::shared::Triangulation<dim>::partition_zorder);
 
   hp::FECollection<dim> fe;
   fe.push_back (FESystem<dim> (FE_Q<dim>(3),2,
index bf8a60bddddbb7e968c3cc91d4066ab476bb2a40..dc9471b45005af565687cc5b6dc2fa2234ef0b8c 100644 (file)
@@ -42,8 +42,9 @@ void test()
 {
   parallel::shared::Triangulation<dim>
   triangulation (MPI_COMM_WORLD,
-                 Triangulation<dim>::none,
-                 /*artificial*/true);
+                 ::Triangulation<dim>::none,
+                 /*artificial*/true,
+                 parallel::shared::Triangulation<dim>::partition_zorder);
 
   hp::FECollection<dim> fe;
   fe.push_back(FESystem<dim> (FE_Q<dim>(3),2,
index 5ecf66e039a9af47fe9e0f2aeb125aaf0dd5c6ce..565e8188c92ada23aa3b7b0fe2d00eff9f337cd4 100644 (file)
@@ -43,8 +43,9 @@ void test()
 {
   parallel::shared::Triangulation<dim>
   triangulation (MPI_COMM_WORLD,
-                 Triangulation<dim>::none,
-                 /*artificial*/true);
+                 ::Triangulation<dim>::none,
+                 /*artificial*/true,
+                 parallel::shared::Triangulation<dim>::partition_zorder);
 
   hp::FECollection<dim> fe;
   fe.push_back (FESystem<dim> (FE_Q<dim>(3),2,
index 4522b72161f25469ea785dcac8870432aee3b313..3e9d0b2a1ccefd038e09135cf514b471f518846a 100644 (file)
@@ -53,7 +53,11 @@ void write_mesh (const parallel::shared::Triangulation<dim,spacedim> &tria,
 template <int dim>
 void test()
 {
-  parallel::shared::Triangulation<dim> tr(MPI_COMM_WORLD);
+  parallel::shared::Triangulation<dim>
+  tr (MPI_COMM_WORLD,
+      ::Triangulation<dim>::none,
+      false,
+      parallel::shared::Triangulation<dim>::partition_metis);
 
   AssertThrow( tr.with_artificial_cells() == false,
                ExcInternalError());
index 82b07cfcb4c94c429cb1ed829d8840fd14ab54c5..062cc94e8d5b74ee6cd1ef876187a023c5904b9b 100644 (file)
@@ -55,9 +55,11 @@ void write_mesh (const parallel::shared::Triangulation<dim,spacedim> &tria,
 template <int dim>
 void test()
 {
-  parallel::shared::Triangulation<dim> tr(MPI_COMM_WORLD,
-                                          Triangulation<dim>::none,
-                                          /*artificial*/true);
+  parallel::shared::Triangulation<dim>
+  tr (MPI_COMM_WORLD,
+      ::Triangulation<dim>::none,
+      /*artificial*/true,
+      parallel::shared::Triangulation<dim>::partition_metis);
 
   AssertThrow( tr.with_artificial_cells() == true,
                ExcInternalError());
index 5e351e59118f0914d5d6ae4ebe9a6e692e3aed8d..7c0394d518a92c6fe3111f9cc4d169e02685f19b 100644 (file)
@@ -44,7 +44,11 @@ void test()
     tr1.save(oa, 0);
   }
 
-  parallel::shared::Triangulation<dim> tr2(MPI_COMM_WORLD);
+  parallel::shared::Triangulation<dim>
+  tr2 (MPI_COMM_WORLD,
+       ::Triangulation<dim>::none,
+       false,
+       parallel::shared::Triangulation<dim>::partition_metis);
   {
     std::istringstream iss(oss.str());
     boost::archive::text_iarchive ia(iss, boost::archive::no_header);

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.