From: Daniel Arndt Date: Tue, 28 Nov 2017 20:38:24 +0000 (+0100) Subject: Make partition_zoltan the default choice for p::s::Triangulation X-Git-Tag: v9.0.0-rc1~704^2~1 X-Git-Url: https://gitweb.dealii.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b89833a38239537ef50afda6905e5e67f181c410;p=dealii.git Make partition_zoltan the default choice for p::s::Triangulation --- diff --git a/doc/news/changes/incompatibilities/20171128DanielArndt b/doc/news/changes/incompatibilities/20171128DanielArndt new file mode 100644 index 0000000000..a14f327a61 --- /dev/null +++ b/doc/news/changes/incompatibilities/20171128DanielArndt @@ -0,0 +1,4 @@ +Changed: The default partitioner for parallel::shared::Triangulation +is Zoltan. +
+(Daniel Arndt, 2017/11/28) diff --git a/include/deal.II/distributed/shared_tria.h b/include/deal.II/distributed/shared_tria.h index 833a54035a..defd14a5a9 100644 --- a/include/deal.II/distributed/shared_tria.h +++ b/include/deal.II/distributed/shared_tria.h @@ -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 partition_metis, - * partition_zorder, and partition_custom_signal be set. - * If no setting is given to the constructor, it will set partition_metis - * by default. + * The constructor requires that exactly one of + * partition_auto, partition_metis, + * partition_zorder, partition_zoltan> and + * partition_custom_signal is set. If + * partition_auto is chosen, it will use + * partition_zoltan (if available), then + * partition_metis (if available) and finally + * 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::MeshSmoothing = (dealii::Triangulation::none), const bool allow_artificial_cells = false, - const Settings settings = partition_metis); + const Settings settings = partition_auto); /** * Destructor. diff --git a/source/distributed/shared_tria.cc b/source/distributed/shared_tria.cc index f435192836..1cb8ce2030 100644 --- a/source/distributed/shared_tria.cc +++ b/source/distributed/shared_tria.cc @@ -21,6 +21,7 @@ #include #include #include +#include #include #include @@ -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 } diff --git a/tests/distributed_grids/copy_tria_01.cc b/tests/distributed_grids/copy_tria_01.cc index a4af1eb9ec..435853c754 100644 --- a/tests/distributed_grids/copy_tria_01.cc +++ b/tests/distributed_grids/copy_tria_01.cc @@ -33,7 +33,10 @@ void test() << " n_active_cells: " << tr1.n_active_cells() << "\n" << std::endl; - parallel::shared::Triangulation tr2(MPI_COMM_WORLD); + parallel::shared::Triangulation tr2(MPI_COMM_WORLD, + ::Triangulation::none, + false, + parallel::shared::Triangulation::partition_metis); tr2.copy_triangulation(tr1); deallog diff --git a/tests/grid/grid_out_per_processor_vtu_02.cc b/tests/grid/grid_out_per_processor_vtu_02.cc index 02f38ef8cc..ce7a20b63a 100644 --- a/tests/grid/grid_out_per_processor_vtu_02.cc +++ b/tests/grid/grid_out_per_processor_vtu_02.cc @@ -65,7 +65,10 @@ void test() if (myid == 0) deallog << "hyper_cube" << std::endl; - parallel::shared::Triangulation tr(MPI_COMM_WORLD); + parallel::shared::Triangulation tr(MPI_COMM_WORLD, + ::Triangulation::none, + false, + parallel::shared::Triangulation::partition_metis); GridGenerator::hyper_cube(tr); tr.refine_global(1); typename Triangulation::active_cell_iterator diff --git a/tests/sharedtria/communicate_active_fe_indices_01.cc b/tests/sharedtria/communicate_active_fe_indices_01.cc index 72c4fd46a7..e39435f4e8 100644 --- a/tests/sharedtria/communicate_active_fe_indices_01.cc +++ b/tests/sharedtria/communicate_active_fe_indices_01.cc @@ -40,10 +40,7 @@ template void test() { parallel::shared::Triangulation - triangulation (MPI_COMM_WORLD, - ::Triangulation::none, - false, - parallel::shared::Triangulation::partition_zorder); + triangulation (MPI_COMM_WORLD); GridGenerator::hyper_cube(triangulation); triangulation.refine_global (3); diff --git a/tests/sharedtria/communicate_active_fe_indices_01.mpirun=3.output b/tests/sharedtria/communicate_active_fe_indices_01.with_trilinos=false.with_metis=false.mpirun=3.output similarity index 100% rename from tests/sharedtria/communicate_active_fe_indices_01.mpirun=3.output rename to tests/sharedtria/communicate_active_fe_indices_01.with_trilinos=false.with_metis=false.mpirun=3.output 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 index 0000000000..8a0dde9022 --- /dev/null +++ b/tests/sharedtria/communicate_active_fe_indices_01.with_trilinos=false.with_metis=true.mpirun=3.output @@ -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 index 0000000000..8a0dde9022 --- /dev/null +++ b/tests/sharedtria/communicate_active_fe_indices_01.with_trilinos=true.with_trilinos_with_zoltan=true.mpirun=3.output @@ -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/copy_tria_01.cc b/tests/sharedtria/copy_tria_01.cc index a732bd5da8..eefaf3269c 100644 --- a/tests/sharedtria/copy_tria_01.cc +++ b/tests/sharedtria/copy_tria_01.cc @@ -33,7 +33,10 @@ void test() << " n_active_cells: " << tr1.n_active_cells() << "\n" << std::endl; - parallel::shared::Triangulation tr2(MPI_COMM_WORLD); + parallel::shared::Triangulation tr2(MPI_COMM_WORLD, + ::Triangulation::none, + false, + parallel::shared::Triangulation::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 tr3(MPI_COMM_WORLD); + parallel::shared::Triangulation tr3(MPI_COMM_WORLD, + ::Triangulation::none, + false, + parallel::shared::Triangulation::partition_metis); tr3.copy_triangulation(tr2); deallog diff --git a/tests/sharedtria/dof_01.cc b/tests/sharedtria/dof_01.cc index 9367a583bb..5a968d3f62 100644 --- a/tests/sharedtria/dof_01.cc +++ b/tests/sharedtria/dof_01.cc @@ -37,7 +37,10 @@ template void test() { parallel::shared::Triangulation - triangulation (MPI_COMM_WORLD); + triangulation (MPI_COMM_WORLD, + ::Triangulation::none, + false, + parallel::shared::Triangulation::partition_metis); FESystem fe (FE_Q(3),2, FE_DGQ(1),1); diff --git a/tests/sharedtria/dof_02.cc b/tests/sharedtria/dof_02.cc index 274d142aad..1a9cd2411a 100644 --- a/tests/sharedtria/dof_02.cc +++ b/tests/sharedtria/dof_02.cc @@ -38,7 +38,10 @@ template void test() { parallel::shared::Triangulation - triangulation (MPI_COMM_WORLD); + triangulation (MPI_COMM_WORLD, + ::Triangulation::none, + false, + parallel::shared::Triangulation::partition_metis); FESystem fe (FE_Q(3),2, FE_DGQ(1),1); diff --git a/tests/sharedtria/dof_03.cc b/tests/sharedtria/dof_03.cc index c9f8502a6c..dbf94fca69 100644 --- a/tests/sharedtria/dof_03.cc +++ b/tests/sharedtria/dof_03.cc @@ -38,8 +38,9 @@ void test() { parallel::shared::Triangulation triangulation (MPI_COMM_WORLD, - Triangulation::none, - /*artificial*/true); + ::Triangulation::none, + /*artificial*/true, + parallel::shared::Triangulation::partition_metis); FESystem fe (FE_Q(3),2, FE_DGQ(1),1); diff --git a/tests/sharedtria/dof_04.cc b/tests/sharedtria/dof_04.cc index 3478dda427..8bb5ad957a 100644 --- a/tests/sharedtria/dof_04.cc +++ b/tests/sharedtria/dof_04.cc @@ -39,8 +39,9 @@ void test() { parallel::shared::Triangulation triangulation (MPI_COMM_WORLD, - Triangulation::none, - /*artificial*/true); + ::Triangulation::none, + /*artificial*/true, + parallel::shared::Triangulation::partition_zorder); FESystem fe (FE_Q(3),2, FE_DGQ(1),1); diff --git a/tests/sharedtria/dof_06.cc b/tests/sharedtria/dof_06.cc index a2e2decca0..a7376c778c 100644 --- a/tests/sharedtria/dof_06.cc +++ b/tests/sharedtria/dof_06.cc @@ -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 diff --git a/tests/sharedtria/hp_dof_01.cc b/tests/sharedtria/hp_dof_01.cc index 807a14c75d..1b379e6db6 100644 --- a/tests/sharedtria/hp_dof_01.cc +++ b/tests/sharedtria/hp_dof_01.cc @@ -41,7 +41,10 @@ template void test() { parallel::shared::Triangulation - triangulation (MPI_COMM_WORLD); + triangulation (MPI_COMM_WORLD, + ::Triangulation::none, + false, + parallel::shared::Triangulation::partition_zorder); hp::FECollection fe; fe.push_back (FESystem (FE_Q(3),2, diff --git a/tests/sharedtria/hp_dof_02.cc b/tests/sharedtria/hp_dof_02.cc index b7348e21ae..0189f18f16 100644 --- a/tests/sharedtria/hp_dof_02.cc +++ b/tests/sharedtria/hp_dof_02.cc @@ -42,7 +42,10 @@ template void test() { parallel::shared::Triangulation - triangulation (MPI_COMM_WORLD); + triangulation (MPI_COMM_WORLD, + ::Triangulation::none, + false, + parallel::shared::Triangulation::partition_zorder); hp::FECollection fe; fe.push_back (FESystem (FE_Q(3),2, diff --git a/tests/sharedtria/hp_dof_03.cc b/tests/sharedtria/hp_dof_03.cc index bf8a60bddd..dc9471b450 100644 --- a/tests/sharedtria/hp_dof_03.cc +++ b/tests/sharedtria/hp_dof_03.cc @@ -42,8 +42,9 @@ void test() { parallel::shared::Triangulation triangulation (MPI_COMM_WORLD, - Triangulation::none, - /*artificial*/true); + ::Triangulation::none, + /*artificial*/true, + parallel::shared::Triangulation::partition_zorder); hp::FECollection fe; fe.push_back(FESystem (FE_Q(3),2, diff --git a/tests/sharedtria/hp_dof_04.cc b/tests/sharedtria/hp_dof_04.cc index 5ecf66e039..565e8188c9 100644 --- a/tests/sharedtria/hp_dof_04.cc +++ b/tests/sharedtria/hp_dof_04.cc @@ -43,8 +43,9 @@ void test() { parallel::shared::Triangulation triangulation (MPI_COMM_WORLD, - Triangulation::none, - /*artificial*/true); + ::Triangulation::none, + /*artificial*/true, + parallel::shared::Triangulation::partition_zorder); hp::FECollection fe; fe.push_back (FESystem (FE_Q(3),2, diff --git a/tests/sharedtria/tria_01.cc b/tests/sharedtria/tria_01.cc index 4522b72161..3e9d0b2a1c 100644 --- a/tests/sharedtria/tria_01.cc +++ b/tests/sharedtria/tria_01.cc @@ -53,7 +53,11 @@ void write_mesh (const parallel::shared::Triangulation &tria, template void test() { - parallel::shared::Triangulation tr(MPI_COMM_WORLD); + parallel::shared::Triangulation + tr (MPI_COMM_WORLD, + ::Triangulation::none, + false, + parallel::shared::Triangulation::partition_metis); AssertThrow( tr.with_artificial_cells() == false, ExcInternalError()); diff --git a/tests/sharedtria/tria_02.cc b/tests/sharedtria/tria_02.cc index 82b07cfcb4..062cc94e8d 100644 --- a/tests/sharedtria/tria_02.cc +++ b/tests/sharedtria/tria_02.cc @@ -55,9 +55,11 @@ void write_mesh (const parallel::shared::Triangulation &tria, template void test() { - parallel::shared::Triangulation tr(MPI_COMM_WORLD, - Triangulation::none, - /*artificial*/true); + parallel::shared::Triangulation + tr (MPI_COMM_WORLD, + ::Triangulation::none, + /*artificial*/true, + parallel::shared::Triangulation::partition_metis); AssertThrow( tr.with_artificial_cells() == true, ExcInternalError()); diff --git a/tests/sharedtria/tria_load_01.cc b/tests/sharedtria/tria_load_01.cc index 5e351e5911..7c0394d518 100644 --- a/tests/sharedtria/tria_load_01.cc +++ b/tests/sharedtria/tria_load_01.cc @@ -44,7 +44,11 @@ void test() tr1.save(oa, 0); } - parallel::shared::Triangulation tr2(MPI_COMM_WORLD); + parallel::shared::Triangulation + tr2 (MPI_COMM_WORLD, + ::Triangulation::none, + false, + parallel::shared::Triangulation::partition_metis); { std::istringstream iss(oss.str()); boost::archive::text_iarchive ia(iss, boost::archive::no_header);