From: Lei Qiao Date: Thu, 15 Oct 2015 17:08:03 +0000 (-0500) Subject: add test case mpi/tria_signals_05: tria_signals_02 -> p4est balance X-Git-Tag: v8.4.0-rc2~285^2~1 X-Git-Url: https://gitweb.dealii.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=459eeb64d3deaae2c26c8a2a708800e1bf5f7417;p=dealii.git add test case mpi/tria_signals_05: tria_signals_02 -> p4est balance --- diff --git a/tests/mpi/tria_signals_05.cc b/tests/mpi/tria_signals_05.cc new file mode 100644 index 0000000000..59d1daf54a --- /dev/null +++ b/tests/mpi/tria_signals_05.cc @@ -0,0 +1,169 @@ +// --------------------------------------------------------------------- +// +// Copyright (C) 2015 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. +// +// --------------------------------------------------------------------- + + +#include "../tests.h" +#include +#include +#include +#include + +#include +#include + +// Test on whether signals post_refinement_on_cell and pre_coarsening_on_cell +// could catch all cell changes. +// The test is designed to count cell number increase and decrease in signal +// calls and then compare the result against n_active_cells reported by Tria +// object. Absolute value change in n_active_cells is not concerned in this test. + +// This test is based on tria_signals_02. The difference is in this case we know +// that p4est is doing mesh smoothing beyond class Triangulation. The case setup +// is borrowed from tests/distributed_grids/2d_refinement_10. + +template +class SignalListener +{ +public: + SignalListener(Triangulation &tria_in) + : + n_active_cells(tria_in.n_active_cells()), + tria(tria_in) + { + tria_in.signals.post_refinement_on_cell.connect + (std_cxx11::bind (&SignalListener::count_on_refine, + this, + std_cxx11::placeholders::_1)); + + tria_in.signals.pre_coarsening_on_cell.connect + (std_cxx11::bind (&SignalListener::count_on_coarsen, + this, + std_cxx11::placeholders::_1)); + } + + int n_active_cell_gap() + { + return (n_active_cells - + static_cast (tria.n_active_cells())); + } + +private: + void count_on_refine(const typename Triangulation::cell_iterator &cell) + { + n_active_cells += cell->n_children(); + --n_active_cells; + + return; + } + + void count_on_coarsen(const typename Triangulation::cell_iterator &cell) + { + ++n_active_cells; + n_active_cells -= cell->n_children(); + + return; + } + + int n_active_cells; + const Triangulation &tria; +}; + + +template +void test() +{ + typedef parallel::distributed::Triangulation TriaType; + + { + const std::string prefix = Utilities::int_to_string (dim, 1) + + "d-" + + Utilities::int_to_string (spacedim, 1) + + "d"; + deallog.push(prefix.c_str()); + } + + TriaType tria(MPI_COMM_WORLD); + + { + std::vector repetitions; + Point p1; + Point p2; + + for (unsigned int d=0; d count_cell_via_signal(tria); + + for (unsigned int n_loop = 1; n_loop < 5; ++n_loop) + { + { + Point p; + for (unsigned int d=0; dis_locally_owned() && ((cell->center()).distance(p) < 1e-4)) + { + cell->set_refine_flag(); + } + } + + tria.execute_coarsening_and_refinement (); + + deallog << "n_loop: " << n_loop + << ", n_cell_gap: " + << count_cell_via_signal.n_active_cell_gap() << std::endl; + } + + deallog.pop(); + return; +} + +int main(int argc, char *argv[]) +{ + Utilities::MPI::MPI_InitFinalize mpi_initialization (argc, argv, /* int max_num_threads */ 1); + MPILogInitAll log; + + // parallel::distributed::Triangulation<1, spacedim> is not valid. + { + const int dim = 2; + const int spacedim = 2; + test (); + } + + // GridGenerator::subdivided_hyper_rectangle do not accept + // parallel::distributed::Triangulation<2, 3>. + + { + const int dim = 3; + const int spacedim = 3; + test (); + } + + return (0); +} + diff --git a/tests/mpi/tria_signals_05.mpirun=1.output b/tests/mpi/tria_signals_05.mpirun=1.output new file mode 100644 index 0000000000..3f164b526b --- /dev/null +++ b/tests/mpi/tria_signals_05.mpirun=1.output @@ -0,0 +1,9 @@ + +DEAL:0:2d-2d::n_loop: 1, n_cell_gap: 0 +DEAL:0:2d-2d::n_loop: 2, n_cell_gap: 0 +DEAL:0:2d-2d::n_loop: 3, n_cell_gap: 0 +DEAL:0:2d-2d::n_loop: 4, n_cell_gap: 0 +DEAL:0:3d-3d::n_loop: 1, n_cell_gap: 0 +DEAL:0:3d-3d::n_loop: 2, n_cell_gap: 0 +DEAL:0:3d-3d::n_loop: 3, n_cell_gap: 0 +DEAL:0:3d-3d::n_loop: 4, n_cell_gap: 0 diff --git a/tests/mpi/tria_signals_05.mpirun=11.output b/tests/mpi/tria_signals_05.mpirun=11.output new file mode 100644 index 0000000000..69f2731ca0 --- /dev/null +++ b/tests/mpi/tria_signals_05.mpirun=11.output @@ -0,0 +1,109 @@ + +DEAL:0:2d-2d::n_loop: 1, n_cell_gap: 0 +DEAL:0:2d-2d::n_loop: 2, n_cell_gap: 0 +DEAL:0:2d-2d::n_loop: 3, n_cell_gap: 0 +DEAL:0:2d-2d::n_loop: 4, n_cell_gap: 0 +DEAL:0:3d-3d::n_loop: 1, n_cell_gap: 0 +DEAL:0:3d-3d::n_loop: 2, n_cell_gap: 0 +DEAL:0:3d-3d::n_loop: 3, n_cell_gap: 0 +DEAL:0:3d-3d::n_loop: 4, n_cell_gap: 0 + +DEAL:1:2d-2d::n_loop: 1, n_cell_gap: 0 +DEAL:1:2d-2d::n_loop: 2, n_cell_gap: 0 +DEAL:1:2d-2d::n_loop: 3, n_cell_gap: 0 +DEAL:1:2d-2d::n_loop: 4, n_cell_gap: 0 +DEAL:1:3d-3d::n_loop: 1, n_cell_gap: 0 +DEAL:1:3d-3d::n_loop: 2, n_cell_gap: 0 +DEAL:1:3d-3d::n_loop: 3, n_cell_gap: 0 +DEAL:1:3d-3d::n_loop: 4, n_cell_gap: 0 + + +DEAL:2:2d-2d::n_loop: 1, n_cell_gap: 0 +DEAL:2:2d-2d::n_loop: 2, n_cell_gap: 0 +DEAL:2:2d-2d::n_loop: 3, n_cell_gap: 0 +DEAL:2:2d-2d::n_loop: 4, n_cell_gap: 0 +DEAL:2:3d-3d::n_loop: 1, n_cell_gap: 0 +DEAL:2:3d-3d::n_loop: 2, n_cell_gap: 0 +DEAL:2:3d-3d::n_loop: 3, n_cell_gap: 0 +DEAL:2:3d-3d::n_loop: 4, n_cell_gap: 0 + + +DEAL:3:2d-2d::n_loop: 1, n_cell_gap: 0 +DEAL:3:2d-2d::n_loop: 2, n_cell_gap: 0 +DEAL:3:2d-2d::n_loop: 3, n_cell_gap: 0 +DEAL:3:2d-2d::n_loop: 4, n_cell_gap: 0 +DEAL:3:3d-3d::n_loop: 1, n_cell_gap: 0 +DEAL:3:3d-3d::n_loop: 2, n_cell_gap: 0 +DEAL:3:3d-3d::n_loop: 3, n_cell_gap: 0 +DEAL:3:3d-3d::n_loop: 4, n_cell_gap: 0 + + +DEAL:4:2d-2d::n_loop: 1, n_cell_gap: 0 +DEAL:4:2d-2d::n_loop: 2, n_cell_gap: 0 +DEAL:4:2d-2d::n_loop: 3, n_cell_gap: 0 +DEAL:4:2d-2d::n_loop: 4, n_cell_gap: 0 +DEAL:4:3d-3d::n_loop: 1, n_cell_gap: 0 +DEAL:4:3d-3d::n_loop: 2, n_cell_gap: 0 +DEAL:4:3d-3d::n_loop: 3, n_cell_gap: 0 +DEAL:4:3d-3d::n_loop: 4, n_cell_gap: 0 + + +DEAL:5:2d-2d::n_loop: 1, n_cell_gap: 0 +DEAL:5:2d-2d::n_loop: 2, n_cell_gap: 0 +DEAL:5:2d-2d::n_loop: 3, n_cell_gap: 0 +DEAL:5:2d-2d::n_loop: 4, n_cell_gap: 0 +DEAL:5:3d-3d::n_loop: 1, n_cell_gap: 0 +DEAL:5:3d-3d::n_loop: 2, n_cell_gap: 0 +DEAL:5:3d-3d::n_loop: 3, n_cell_gap: 0 +DEAL:5:3d-3d::n_loop: 4, n_cell_gap: 0 + + +DEAL:6:2d-2d::n_loop: 1, n_cell_gap: 0 +DEAL:6:2d-2d::n_loop: 2, n_cell_gap: 0 +DEAL:6:2d-2d::n_loop: 3, n_cell_gap: 0 +DEAL:6:2d-2d::n_loop: 4, n_cell_gap: 0 +DEAL:6:3d-3d::n_loop: 1, n_cell_gap: 0 +DEAL:6:3d-3d::n_loop: 2, n_cell_gap: 0 +DEAL:6:3d-3d::n_loop: 3, n_cell_gap: 0 +DEAL:6:3d-3d::n_loop: 4, n_cell_gap: 0 + + +DEAL:7:2d-2d::n_loop: 1, n_cell_gap: 0 +DEAL:7:2d-2d::n_loop: 2, n_cell_gap: 0 +DEAL:7:2d-2d::n_loop: 3, n_cell_gap: 0 +DEAL:7:2d-2d::n_loop: 4, n_cell_gap: 0 +DEAL:7:3d-3d::n_loop: 1, n_cell_gap: 0 +DEAL:7:3d-3d::n_loop: 2, n_cell_gap: 0 +DEAL:7:3d-3d::n_loop: 3, n_cell_gap: 0 +DEAL:7:3d-3d::n_loop: 4, n_cell_gap: 0 + + +DEAL:8:2d-2d::n_loop: 1, n_cell_gap: 0 +DEAL:8:2d-2d::n_loop: 2, n_cell_gap: 0 +DEAL:8:2d-2d::n_loop: 3, n_cell_gap: 0 +DEAL:8:2d-2d::n_loop: 4, n_cell_gap: 0 +DEAL:8:3d-3d::n_loop: 1, n_cell_gap: 0 +DEAL:8:3d-3d::n_loop: 2, n_cell_gap: 0 +DEAL:8:3d-3d::n_loop: 3, n_cell_gap: 0 +DEAL:8:3d-3d::n_loop: 4, n_cell_gap: 0 + + +DEAL:9:2d-2d::n_loop: 1, n_cell_gap: 0 +DEAL:9:2d-2d::n_loop: 2, n_cell_gap: 0 +DEAL:9:2d-2d::n_loop: 3, n_cell_gap: 0 +DEAL:9:2d-2d::n_loop: 4, n_cell_gap: 0 +DEAL:9:3d-3d::n_loop: 1, n_cell_gap: 0 +DEAL:9:3d-3d::n_loop: 2, n_cell_gap: 0 +DEAL:9:3d-3d::n_loop: 3, n_cell_gap: 0 +DEAL:9:3d-3d::n_loop: 4, n_cell_gap: 0 + + +DEAL:10:2d-2d::n_loop: 1, n_cell_gap: 0 +DEAL:10:2d-2d::n_loop: 2, n_cell_gap: 0 +DEAL:10:2d-2d::n_loop: 3, n_cell_gap: 0 +DEAL:10:2d-2d::n_loop: 4, n_cell_gap: 0 +DEAL:10:3d-3d::n_loop: 1, n_cell_gap: 0 +DEAL:10:3d-3d::n_loop: 2, n_cell_gap: 0 +DEAL:10:3d-3d::n_loop: 3, n_cell_gap: 0 +DEAL:10:3d-3d::n_loop: 4, n_cell_gap: 0 + diff --git a/tests/mpi/tria_signals_05.mpirun=4.output b/tests/mpi/tria_signals_05.mpirun=4.output new file mode 100644 index 0000000000..0df6a22299 --- /dev/null +++ b/tests/mpi/tria_signals_05.mpirun=4.output @@ -0,0 +1,39 @@ + +DEAL:0:2d-2d::n_loop: 1, n_cell_gap: 0 +DEAL:0:2d-2d::n_loop: 2, n_cell_gap: 0 +DEAL:0:2d-2d::n_loop: 3, n_cell_gap: 0 +DEAL:0:2d-2d::n_loop: 4, n_cell_gap: 0 +DEAL:0:3d-3d::n_loop: 1, n_cell_gap: 0 +DEAL:0:3d-3d::n_loop: 2, n_cell_gap: 0 +DEAL:0:3d-3d::n_loop: 3, n_cell_gap: 0 +DEAL:0:3d-3d::n_loop: 4, n_cell_gap: 0 + +DEAL:1:2d-2d::n_loop: 1, n_cell_gap: 0 +DEAL:1:2d-2d::n_loop: 2, n_cell_gap: 0 +DEAL:1:2d-2d::n_loop: 3, n_cell_gap: 0 +DEAL:1:2d-2d::n_loop: 4, n_cell_gap: 0 +DEAL:1:3d-3d::n_loop: 1, n_cell_gap: 0 +DEAL:1:3d-3d::n_loop: 2, n_cell_gap: 0 +DEAL:1:3d-3d::n_loop: 3, n_cell_gap: 0 +DEAL:1:3d-3d::n_loop: 4, n_cell_gap: 0 + + +DEAL:2:2d-2d::n_loop: 1, n_cell_gap: 0 +DEAL:2:2d-2d::n_loop: 2, n_cell_gap: 0 +DEAL:2:2d-2d::n_loop: 3, n_cell_gap: 0 +DEAL:2:2d-2d::n_loop: 4, n_cell_gap: 0 +DEAL:2:3d-3d::n_loop: 1, n_cell_gap: 0 +DEAL:2:3d-3d::n_loop: 2, n_cell_gap: 0 +DEAL:2:3d-3d::n_loop: 3, n_cell_gap: 0 +DEAL:2:3d-3d::n_loop: 4, n_cell_gap: 0 + + +DEAL:3:2d-2d::n_loop: 1, n_cell_gap: 0 +DEAL:3:2d-2d::n_loop: 2, n_cell_gap: 0 +DEAL:3:2d-2d::n_loop: 3, n_cell_gap: 0 +DEAL:3:2d-2d::n_loop: 4, n_cell_gap: 0 +DEAL:3:3d-3d::n_loop: 1, n_cell_gap: 0 +DEAL:3:3d-3d::n_loop: 2, n_cell_gap: 0 +DEAL:3:3d-3d::n_loop: 3, n_cell_gap: 0 +DEAL:3:3d-3d::n_loop: 4, n_cell_gap: 0 +