From: Lei Qiao Date: Thu, 15 Oct 2015 15:21:25 +0000 (-0500) Subject: add test case mpi/tria_signals_02: count cell number via signals X-Git-Tag: v8.4.0-rc2~285^2~4 X-Git-Url: https://gitweb.dealii.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=86dbabb63394a5675ad824927385f1c3ad91cf49;p=dealii.git add test case mpi/tria_signals_02: count cell number via signals --- diff --git a/tests/mpi/tria_signals_02.cc b/tests/mpi/tria_signals_02.cc new file mode 100644 index 0000000000..c2cfb7bd80 --- /dev/null +++ b/tests/mpi/tria_signals_02.cc @@ -0,0 +1,148 @@ +// --------------------------------------------------------------------- +// +// 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. + +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); + + GridGenerator::hyper_cube(tria); + SignalListener count_cell_via_signal(tria); + + tria.refine_global(2); + + deallog << "n_cell_gap after refine : " + << count_cell_via_signal.n_active_cell_gap() << std::endl; + + // Test signal on coarsening + { + typename TriaType::active_cell_iterator cell = tria.begin_active(); + const typename TriaType::active_cell_iterator endc = tria.end(); + + for (; cell != endc; ++cell) + { + cell->set_coarsen_flag(); + } + tria.execute_coarsening_and_refinement(); + } + + deallog << "n_cell_gap after coarsen : " + << 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 (); + } + + { + const int dim = 2; + const int spacedim = 3; + test (); + } + + { + const int dim = 3; + const int spacedim = 3; + test (); + } + + return (0); +} + diff --git a/tests/mpi/tria_signals_02.mpirun=1.output b/tests/mpi/tria_signals_02.mpirun=1.output new file mode 100644 index 0000000000..3cd0b480f3 --- /dev/null +++ b/tests/mpi/tria_signals_02.mpirun=1.output @@ -0,0 +1,7 @@ + +DEAL:0:2d-2d::n_cell_gap after refine : 0 +DEAL:0:2d-2d::n_cell_gap after coarsen : 0 +DEAL:0:2d-3d::n_cell_gap after refine : 0 +DEAL:0:2d-3d::n_cell_gap after coarsen : 0 +DEAL:0:3d-3d::n_cell_gap after refine : 0 +DEAL:0:3d-3d::n_cell_gap after coarsen : 0 diff --git a/tests/mpi/tria_signals_02.mpirun=11.output b/tests/mpi/tria_signals_02.mpirun=11.output new file mode 100644 index 0000000000..02486dfd33 --- /dev/null +++ b/tests/mpi/tria_signals_02.mpirun=11.output @@ -0,0 +1,87 @@ + +DEAL:0:2d-2d::n_cell_gap after refine : 0 +DEAL:0:2d-2d::n_cell_gap after coarsen : 0 +DEAL:0:2d-3d::n_cell_gap after refine : 0 +DEAL:0:2d-3d::n_cell_gap after coarsen : 0 +DEAL:0:3d-3d::n_cell_gap after refine : 0 +DEAL:0:3d-3d::n_cell_gap after coarsen : 0 + +DEAL:1:2d-2d::n_cell_gap after refine : 0 +DEAL:1:2d-2d::n_cell_gap after coarsen : 0 +DEAL:1:2d-3d::n_cell_gap after refine : 0 +DEAL:1:2d-3d::n_cell_gap after coarsen : 0 +DEAL:1:3d-3d::n_cell_gap after refine : 0 +DEAL:1:3d-3d::n_cell_gap after coarsen : 0 + + +DEAL:2:2d-2d::n_cell_gap after refine : 0 +DEAL:2:2d-2d::n_cell_gap after coarsen : 0 +DEAL:2:2d-3d::n_cell_gap after refine : 0 +DEAL:2:2d-3d::n_cell_gap after coarsen : 0 +DEAL:2:3d-3d::n_cell_gap after refine : 0 +DEAL:2:3d-3d::n_cell_gap after coarsen : 0 + + +DEAL:3:2d-2d::n_cell_gap after refine : 0 +DEAL:3:2d-2d::n_cell_gap after coarsen : 0 +DEAL:3:2d-3d::n_cell_gap after refine : 0 +DEAL:3:2d-3d::n_cell_gap after coarsen : 0 +DEAL:3:3d-3d::n_cell_gap after refine : 0 +DEAL:3:3d-3d::n_cell_gap after coarsen : 0 + + +DEAL:4:2d-2d::n_cell_gap after refine : 0 +DEAL:4:2d-2d::n_cell_gap after coarsen : 0 +DEAL:4:2d-3d::n_cell_gap after refine : 0 +DEAL:4:2d-3d::n_cell_gap after coarsen : 0 +DEAL:4:3d-3d::n_cell_gap after refine : 0 +DEAL:4:3d-3d::n_cell_gap after coarsen : 0 + + +DEAL:5:2d-2d::n_cell_gap after refine : 0 +DEAL:5:2d-2d::n_cell_gap after coarsen : 0 +DEAL:5:2d-3d::n_cell_gap after refine : 0 +DEAL:5:2d-3d::n_cell_gap after coarsen : 0 +DEAL:5:3d-3d::n_cell_gap after refine : 0 +DEAL:5:3d-3d::n_cell_gap after coarsen : 0 + + +DEAL:6:2d-2d::n_cell_gap after refine : 0 +DEAL:6:2d-2d::n_cell_gap after coarsen : 0 +DEAL:6:2d-3d::n_cell_gap after refine : 0 +DEAL:6:2d-3d::n_cell_gap after coarsen : 0 +DEAL:6:3d-3d::n_cell_gap after refine : 0 +DEAL:6:3d-3d::n_cell_gap after coarsen : 0 + + +DEAL:7:2d-2d::n_cell_gap after refine : 0 +DEAL:7:2d-2d::n_cell_gap after coarsen : 0 +DEAL:7:2d-3d::n_cell_gap after refine : 0 +DEAL:7:2d-3d::n_cell_gap after coarsen : 0 +DEAL:7:3d-3d::n_cell_gap after refine : 0 +DEAL:7:3d-3d::n_cell_gap after coarsen : 0 + + +DEAL:8:2d-2d::n_cell_gap after refine : 0 +DEAL:8:2d-2d::n_cell_gap after coarsen : 0 +DEAL:8:2d-3d::n_cell_gap after refine : 0 +DEAL:8:2d-3d::n_cell_gap after coarsen : 0 +DEAL:8:3d-3d::n_cell_gap after refine : 0 +DEAL:8:3d-3d::n_cell_gap after coarsen : 0 + + +DEAL:9:2d-2d::n_cell_gap after refine : 0 +DEAL:9:2d-2d::n_cell_gap after coarsen : 0 +DEAL:9:2d-3d::n_cell_gap after refine : 0 +DEAL:9:2d-3d::n_cell_gap after coarsen : 0 +DEAL:9:3d-3d::n_cell_gap after refine : 0 +DEAL:9:3d-3d::n_cell_gap after coarsen : 0 + + +DEAL:10:2d-2d::n_cell_gap after refine : 0 +DEAL:10:2d-2d::n_cell_gap after coarsen : 0 +DEAL:10:2d-3d::n_cell_gap after refine : 0 +DEAL:10:2d-3d::n_cell_gap after coarsen : 0 +DEAL:10:3d-3d::n_cell_gap after refine : 0 +DEAL:10:3d-3d::n_cell_gap after coarsen : 0 + diff --git a/tests/mpi/tria_signals_02.mpirun=4.output b/tests/mpi/tria_signals_02.mpirun=4.output new file mode 100644 index 0000000000..91621df899 --- /dev/null +++ b/tests/mpi/tria_signals_02.mpirun=4.output @@ -0,0 +1,31 @@ + +DEAL:0:2d-2d::n_cell_gap after refine : 0 +DEAL:0:2d-2d::n_cell_gap after coarsen : 0 +DEAL:0:2d-3d::n_cell_gap after refine : 0 +DEAL:0:2d-3d::n_cell_gap after coarsen : 0 +DEAL:0:3d-3d::n_cell_gap after refine : 0 +DEAL:0:3d-3d::n_cell_gap after coarsen : 0 + +DEAL:1:2d-2d::n_cell_gap after refine : 0 +DEAL:1:2d-2d::n_cell_gap after coarsen : 0 +DEAL:1:2d-3d::n_cell_gap after refine : 0 +DEAL:1:2d-3d::n_cell_gap after coarsen : 0 +DEAL:1:3d-3d::n_cell_gap after refine : 0 +DEAL:1:3d-3d::n_cell_gap after coarsen : 0 + + +DEAL:2:2d-2d::n_cell_gap after refine : 0 +DEAL:2:2d-2d::n_cell_gap after coarsen : 0 +DEAL:2:2d-3d::n_cell_gap after refine : 0 +DEAL:2:2d-3d::n_cell_gap after coarsen : 0 +DEAL:2:3d-3d::n_cell_gap after refine : 0 +DEAL:2:3d-3d::n_cell_gap after coarsen : 0 + + +DEAL:3:2d-2d::n_cell_gap after refine : 0 +DEAL:3:2d-2d::n_cell_gap after coarsen : 0 +DEAL:3:2d-3d::n_cell_gap after refine : 0 +DEAL:3:2d-3d::n_cell_gap after coarsen : 0 +DEAL:3:3d-3d::n_cell_gap after refine : 0 +DEAL:3:3d-3d::n_cell_gap after coarsen : 0 +