From 30cc017df541be1105afecaf33fdc4c400d8e024 Mon Sep 17 00:00:00 2001 From: bangerth Date: Tue, 2 Jul 2013 15:29:20 +0000 Subject: [PATCH] Patch by Martin Steigemann: implement parallel::distributed::Triangulation::copy_triangulation. Add corresponding test. git-svn-id: https://svn.dealii.org/trunk@29910 0785d39b-7218-0410-832d-ea1e28bc413d --- tests/mpi/tria_copy_triangulation.cc | 140 ++++++++++++++++++ .../ncpu_1/cmp/generic | 97 ++++++++++++ .../ncpu_2/cmp/generic | 65 ++++++++ .../ncpu_4/cmp/generic | 49 ++++++ 4 files changed, 351 insertions(+) create mode 100644 tests/mpi/tria_copy_triangulation.cc create mode 100644 tests/mpi/tria_copy_triangulation/ncpu_1/cmp/generic create mode 100644 tests/mpi/tria_copy_triangulation/ncpu_2/cmp/generic create mode 100644 tests/mpi/tria_copy_triangulation/ncpu_4/cmp/generic diff --git a/tests/mpi/tria_copy_triangulation.cc b/tests/mpi/tria_copy_triangulation.cc new file mode 100644 index 0000000000..49aff9d425 --- /dev/null +++ b/tests/mpi/tria_copy_triangulation.cc @@ -0,0 +1,140 @@ +//--------------------------------------------------------------------------- +// $Id$ +// Version: $Name$ +// +// Copyright (C) 2008, 2009 by the deal.II authors +// +// This file is subject to QPL and may not be distributed +// without copyright and license information. Please refer +// to the file deal.II/doc/license.html for the text and +// further information on this license. +// +//--------------------------------------------------------------------------- + + +// Test interaction with p4est with a simple grid in 2d. here, we test +// that refining a mesh actually works, where we refine several times +// more or less randomly by choosing a single cell for refinement + +// in addition to just refining, have a parallel triangulation that should +// look the same but isn't attached to a distribution manager, and compare +// with it in each step + +// note that due to the way we set up triangulations in parallel, we +// can't expect that cells on the two meshes have the same numbers (or +// are in the same order, for that matter). we therefore use an +// IntergridMap. there should be matching cells, however + +// note that p4est refines meshes in a way that is equivalent to +// specifying Triangulation::limit_level_difference_at_vertices, +// so this is what we also give as argument to the mesh with which we +// compare + +#include "../tests.h" +#include "coarse_grid_common.h" +#include +#include +#include +#include +#include +#include +#include + +#include +#include + + +template +void test() +{ + unsigned int myid = Utilities::MPI::this_mpi_process (MPI_COMM_WORLD); + + parallel::distributed::Triangulation tr(MPI_COMM_WORLD); + + GridGenerator::subdivided_hyper_cube(tr, 6-dim); + + parallel::distributed::Triangulation new_tr(MPI_COMM_WORLD); + + new_tr.copy_triangulation (tr); + + typename Triangulation::active_cell_iterator cell1, cell2; + + for (cell1 = tr.begin_active(), cell2 = new_tr.begin_active(); + cell1 != tr.end(), cell2 != new_tr.end(); + ++cell1, ++cell2) + { + if (cell1->is_locally_owned ()) + { + if (myid == 0) + { + deallog << "triangulation::cell " << cell1 << ": locally owned, subdomain_id = " << cell1->subdomain_id () << std::endl; + deallog << "new_triangulation::cell " << cell2 << ": locally owned, subdomain_id = " << cell2->subdomain_id () << std::endl; + }; + + Assert (cell2->is_locally_owned (), ExcInternalError()); + Assert (cell1->subdomain_id () == cell2->subdomain_id (), ExcInternalError()); + + for (unsigned int vertex=0; + vertex::vertices_per_cell; + ++vertex) + { + Assert (cell1->vertex(vertex).distance (cell2->vertex(vertex)) < 1.e-14, ExcInternalError()); + + if (myid == 0) + deallog << " vertices " << vertex << " coincide" << std::endl; + }; + } + else if (cell1->is_ghost()) + { + if (myid == 0) + { + deallog << "triangulation::cell " << cell1 << ": ghost, subdomain_id = " << cell1->subdomain_id () << std::endl; + deallog << "new_triangulation::cell " << cell2 << ": ghost, subdomain_id = " << cell2->subdomain_id () << std::endl; + }; + + Assert (cell2->is_ghost (), ExcInternalError()); + } + else if (cell1->is_artificial()) + { + if (myid == 0) + { + deallog << "triangulation::cell " << cell1 << ": artificial" << std::endl; + deallog << "new_triangulation::cell " << cell2 << ": artificial" << std::endl; + }; + + Assert (cell2->is_artificial (), ExcInternalError()); + } + else + Assert (false, ExcInternalError()); + }; + +// assert_tria_equal("tria_copy_triangulation", tr, new_tr); + + Assert (tr.n_active_cells() == new_tr.n_active_cells(), ExcInternalError()); + Assert (tr.n_levels() == new_tr.n_levels(), ExcInternalError()); +} + + +int main(int argc, char *argv[]) +{ + Utilities::MPI::MPI_InitFinalize mpi_initialization(argc, argv, 1); + + unsigned int myid = Utilities::MPI::this_mpi_process (MPI_COMM_WORLD); + + deallog.push(Utilities::int_to_string(myid)); + + if (myid == 0) + { + std::ofstream logfile(output_file_for_mpi("tria_copy_triangulation").c_str()); + deallog.attach(logfile); + deallog.depth_console(0); + deallog.threshold_double(1.e-10); + + deallog.push("2d"); + test<2>(); + deallog.pop(); + } + else + test<2>(); + +} diff --git a/tests/mpi/tria_copy_triangulation/ncpu_1/cmp/generic b/tests/mpi/tria_copy_triangulation/ncpu_1/cmp/generic new file mode 100644 index 0000000000..92494a70d9 --- /dev/null +++ b/tests/mpi/tria_copy_triangulation/ncpu_1/cmp/generic @@ -0,0 +1,97 @@ + +DEAL:0:2d::triangulation::cell 0.0: locally owned, subdomain_id = 0 +DEAL:0:2d::new_triangulation::cell 0.0: locally owned, subdomain_id = 0 +DEAL:0:2d:: vertices 0 coincide +DEAL:0:2d:: vertices 1 coincide +DEAL:0:2d:: vertices 2 coincide +DEAL:0:2d:: vertices 3 coincide +DEAL:0:2d::triangulation::cell 0.1: locally owned, subdomain_id = 0 +DEAL:0:2d::new_triangulation::cell 0.1: locally owned, subdomain_id = 0 +DEAL:0:2d:: vertices 0 coincide +DEAL:0:2d:: vertices 1 coincide +DEAL:0:2d:: vertices 2 coincide +DEAL:0:2d:: vertices 3 coincide +DEAL:0:2d::triangulation::cell 0.2: locally owned, subdomain_id = 0 +DEAL:0:2d::new_triangulation::cell 0.2: locally owned, subdomain_id = 0 +DEAL:0:2d:: vertices 0 coincide +DEAL:0:2d:: vertices 1 coincide +DEAL:0:2d:: vertices 2 coincide +DEAL:0:2d:: vertices 3 coincide +DEAL:0:2d::triangulation::cell 0.3: locally owned, subdomain_id = 0 +DEAL:0:2d::new_triangulation::cell 0.3: locally owned, subdomain_id = 0 +DEAL:0:2d:: vertices 0 coincide +DEAL:0:2d:: vertices 1 coincide +DEAL:0:2d:: vertices 2 coincide +DEAL:0:2d:: vertices 3 coincide +DEAL:0:2d::triangulation::cell 0.4: locally owned, subdomain_id = 0 +DEAL:0:2d::new_triangulation::cell 0.4: locally owned, subdomain_id = 0 +DEAL:0:2d:: vertices 0 coincide +DEAL:0:2d:: vertices 1 coincide +DEAL:0:2d:: vertices 2 coincide +DEAL:0:2d:: vertices 3 coincide +DEAL:0:2d::triangulation::cell 0.5: locally owned, subdomain_id = 0 +DEAL:0:2d::new_triangulation::cell 0.5: locally owned, subdomain_id = 0 +DEAL:0:2d:: vertices 0 coincide +DEAL:0:2d:: vertices 1 coincide +DEAL:0:2d:: vertices 2 coincide +DEAL:0:2d:: vertices 3 coincide +DEAL:0:2d::triangulation::cell 0.6: locally owned, subdomain_id = 0 +DEAL:0:2d::new_triangulation::cell 0.6: locally owned, subdomain_id = 0 +DEAL:0:2d:: vertices 0 coincide +DEAL:0:2d:: vertices 1 coincide +DEAL:0:2d:: vertices 2 coincide +DEAL:0:2d:: vertices 3 coincide +DEAL:0:2d::triangulation::cell 0.7: locally owned, subdomain_id = 0 +DEAL:0:2d::new_triangulation::cell 0.7: locally owned, subdomain_id = 0 +DEAL:0:2d:: vertices 0 coincide +DEAL:0:2d:: vertices 1 coincide +DEAL:0:2d:: vertices 2 coincide +DEAL:0:2d:: vertices 3 coincide +DEAL:0:2d::triangulation::cell 0.8: locally owned, subdomain_id = 0 +DEAL:0:2d::new_triangulation::cell 0.8: locally owned, subdomain_id = 0 +DEAL:0:2d:: vertices 0 coincide +DEAL:0:2d:: vertices 1 coincide +DEAL:0:2d:: vertices 2 coincide +DEAL:0:2d:: vertices 3 coincide +DEAL:0:2d::triangulation::cell 0.9: locally owned, subdomain_id = 0 +DEAL:0:2d::new_triangulation::cell 0.9: locally owned, subdomain_id = 0 +DEAL:0:2d:: vertices 0 coincide +DEAL:0:2d:: vertices 1 coincide +DEAL:0:2d:: vertices 2 coincide +DEAL:0:2d:: vertices 3 coincide +DEAL:0:2d::triangulation::cell 0.10: locally owned, subdomain_id = 0 +DEAL:0:2d::new_triangulation::cell 0.10: locally owned, subdomain_id = 0 +DEAL:0:2d:: vertices 0 coincide +DEAL:0:2d:: vertices 1 coincide +DEAL:0:2d:: vertices 2 coincide +DEAL:0:2d:: vertices 3 coincide +DEAL:0:2d::triangulation::cell 0.11: locally owned, subdomain_id = 0 +DEAL:0:2d::new_triangulation::cell 0.11: locally owned, subdomain_id = 0 +DEAL:0:2d:: vertices 0 coincide +DEAL:0:2d:: vertices 1 coincide +DEAL:0:2d:: vertices 2 coincide +DEAL:0:2d:: vertices 3 coincide +DEAL:0:2d::triangulation::cell 0.12: locally owned, subdomain_id = 0 +DEAL:0:2d::new_triangulation::cell 0.12: locally owned, subdomain_id = 0 +DEAL:0:2d:: vertices 0 coincide +DEAL:0:2d:: vertices 1 coincide +DEAL:0:2d:: vertices 2 coincide +DEAL:0:2d:: vertices 3 coincide +DEAL:0:2d::triangulation::cell 0.13: locally owned, subdomain_id = 0 +DEAL:0:2d::new_triangulation::cell 0.13: locally owned, subdomain_id = 0 +DEAL:0:2d:: vertices 0 coincide +DEAL:0:2d:: vertices 1 coincide +DEAL:0:2d:: vertices 2 coincide +DEAL:0:2d:: vertices 3 coincide +DEAL:0:2d::triangulation::cell 0.14: locally owned, subdomain_id = 0 +DEAL:0:2d::new_triangulation::cell 0.14: locally owned, subdomain_id = 0 +DEAL:0:2d:: vertices 0 coincide +DEAL:0:2d:: vertices 1 coincide +DEAL:0:2d:: vertices 2 coincide +DEAL:0:2d:: vertices 3 coincide +DEAL:0:2d::triangulation::cell 0.15: locally owned, subdomain_id = 0 +DEAL:0:2d::new_triangulation::cell 0.15: locally owned, subdomain_id = 0 +DEAL:0:2d:: vertices 0 coincide +DEAL:0:2d:: vertices 1 coincide +DEAL:0:2d:: vertices 2 coincide +DEAL:0:2d:: vertices 3 coincide diff --git a/tests/mpi/tria_copy_triangulation/ncpu_2/cmp/generic b/tests/mpi/tria_copy_triangulation/ncpu_2/cmp/generic new file mode 100644 index 0000000000..db8a187770 --- /dev/null +++ b/tests/mpi/tria_copy_triangulation/ncpu_2/cmp/generic @@ -0,0 +1,65 @@ + +DEAL:0:2d::triangulation::cell 0.0: locally owned, subdomain_id = 0 +DEAL:0:2d::new_triangulation::cell 0.0: locally owned, subdomain_id = 0 +DEAL:0:2d:: vertices 0 coincide +DEAL:0:2d:: vertices 1 coincide +DEAL:0:2d:: vertices 2 coincide +DEAL:0:2d:: vertices 3 coincide +DEAL:0:2d::triangulation::cell 0.1: locally owned, subdomain_id = 0 +DEAL:0:2d::new_triangulation::cell 0.1: locally owned, subdomain_id = 0 +DEAL:0:2d:: vertices 0 coincide +DEAL:0:2d:: vertices 1 coincide +DEAL:0:2d:: vertices 2 coincide +DEAL:0:2d:: vertices 3 coincide +DEAL:0:2d::triangulation::cell 0.2: locally owned, subdomain_id = 0 +DEAL:0:2d::new_triangulation::cell 0.2: locally owned, subdomain_id = 0 +DEAL:0:2d:: vertices 0 coincide +DEAL:0:2d:: vertices 1 coincide +DEAL:0:2d:: vertices 2 coincide +DEAL:0:2d:: vertices 3 coincide +DEAL:0:2d::triangulation::cell 0.3: locally owned, subdomain_id = 0 +DEAL:0:2d::new_triangulation::cell 0.3: locally owned, subdomain_id = 0 +DEAL:0:2d:: vertices 0 coincide +DEAL:0:2d:: vertices 1 coincide +DEAL:0:2d:: vertices 2 coincide +DEAL:0:2d:: vertices 3 coincide +DEAL:0:2d::triangulation::cell 0.4: locally owned, subdomain_id = 0 +DEAL:0:2d::new_triangulation::cell 0.4: locally owned, subdomain_id = 0 +DEAL:0:2d:: vertices 0 coincide +DEAL:0:2d:: vertices 1 coincide +DEAL:0:2d:: vertices 2 coincide +DEAL:0:2d:: vertices 3 coincide +DEAL:0:2d::triangulation::cell 0.5: locally owned, subdomain_id = 0 +DEAL:0:2d::new_triangulation::cell 0.5: locally owned, subdomain_id = 0 +DEAL:0:2d:: vertices 0 coincide +DEAL:0:2d:: vertices 1 coincide +DEAL:0:2d:: vertices 2 coincide +DEAL:0:2d:: vertices 3 coincide +DEAL:0:2d::triangulation::cell 0.6: ghost, subdomain_id = 1 +DEAL:0:2d::new_triangulation::cell 0.6: ghost, subdomain_id = 1 +DEAL:0:2d::triangulation::cell 0.7: ghost, subdomain_id = 1 +DEAL:0:2d::new_triangulation::cell 0.7: ghost, subdomain_id = 1 +DEAL:0:2d::triangulation::cell 0.8: locally owned, subdomain_id = 0 +DEAL:0:2d::new_triangulation::cell 0.8: locally owned, subdomain_id = 0 +DEAL:0:2d:: vertices 0 coincide +DEAL:0:2d:: vertices 1 coincide +DEAL:0:2d:: vertices 2 coincide +DEAL:0:2d:: vertices 3 coincide +DEAL:0:2d::triangulation::cell 0.9: ghost, subdomain_id = 1 +DEAL:0:2d::new_triangulation::cell 0.9: ghost, subdomain_id = 1 +DEAL:0:2d::triangulation::cell 0.10: ghost, subdomain_id = 1 +DEAL:0:2d::new_triangulation::cell 0.10: ghost, subdomain_id = 1 +DEAL:0:2d::triangulation::cell 0.11: artificial +DEAL:0:2d::new_triangulation::cell 0.11: artificial +DEAL:0:2d::triangulation::cell 0.12: locally owned, subdomain_id = 0 +DEAL:0:2d::new_triangulation::cell 0.12: locally owned, subdomain_id = 0 +DEAL:0:2d:: vertices 0 coincide +DEAL:0:2d:: vertices 1 coincide +DEAL:0:2d:: vertices 2 coincide +DEAL:0:2d:: vertices 3 coincide +DEAL:0:2d::triangulation::cell 0.13: ghost, subdomain_id = 1 +DEAL:0:2d::new_triangulation::cell 0.13: ghost, subdomain_id = 1 +DEAL:0:2d::triangulation::cell 0.14: artificial +DEAL:0:2d::new_triangulation::cell 0.14: artificial +DEAL:0:2d::triangulation::cell 0.15: artificial +DEAL:0:2d::new_triangulation::cell 0.15: artificial diff --git a/tests/mpi/tria_copy_triangulation/ncpu_4/cmp/generic b/tests/mpi/tria_copy_triangulation/ncpu_4/cmp/generic new file mode 100644 index 0000000000..398dcc482f --- /dev/null +++ b/tests/mpi/tria_copy_triangulation/ncpu_4/cmp/generic @@ -0,0 +1,49 @@ + +DEAL:0:2d::triangulation::cell 0.0: locally owned, subdomain_id = 0 +DEAL:0:2d::new_triangulation::cell 0.0: locally owned, subdomain_id = 0 +DEAL:0:2d:: vertices 0 coincide +DEAL:0:2d:: vertices 1 coincide +DEAL:0:2d:: vertices 2 coincide +DEAL:0:2d:: vertices 3 coincide +DEAL:0:2d::triangulation::cell 0.1: locally owned, subdomain_id = 0 +DEAL:0:2d::new_triangulation::cell 0.1: locally owned, subdomain_id = 0 +DEAL:0:2d:: vertices 0 coincide +DEAL:0:2d:: vertices 1 coincide +DEAL:0:2d:: vertices 2 coincide +DEAL:0:2d:: vertices 3 coincide +DEAL:0:2d::triangulation::cell 0.2: locally owned, subdomain_id = 0 +DEAL:0:2d::new_triangulation::cell 0.2: locally owned, subdomain_id = 0 +DEAL:0:2d:: vertices 0 coincide +DEAL:0:2d:: vertices 1 coincide +DEAL:0:2d:: vertices 2 coincide +DEAL:0:2d:: vertices 3 coincide +DEAL:0:2d::triangulation::cell 0.3: ghost, subdomain_id = 1 +DEAL:0:2d::new_triangulation::cell 0.3: ghost, subdomain_id = 1 +DEAL:0:2d::triangulation::cell 0.4: locally owned, subdomain_id = 0 +DEAL:0:2d::new_triangulation::cell 0.4: locally owned, subdomain_id = 0 +DEAL:0:2d:: vertices 0 coincide +DEAL:0:2d:: vertices 1 coincide +DEAL:0:2d:: vertices 2 coincide +DEAL:0:2d:: vertices 3 coincide +DEAL:0:2d::triangulation::cell 0.5: ghost, subdomain_id = 1 +DEAL:0:2d::new_triangulation::cell 0.5: ghost, subdomain_id = 1 +DEAL:0:2d::triangulation::cell 0.6: ghost, subdomain_id = 2 +DEAL:0:2d::new_triangulation::cell 0.6: ghost, subdomain_id = 2 +DEAL:0:2d::triangulation::cell 0.7: ghost, subdomain_id = 2 +DEAL:0:2d::new_triangulation::cell 0.7: ghost, subdomain_id = 2 +DEAL:0:2d::triangulation::cell 0.8: ghost, subdomain_id = 1 +DEAL:0:2d::new_triangulation::cell 0.8: ghost, subdomain_id = 1 +DEAL:0:2d::triangulation::cell 0.9: ghost, subdomain_id = 2 +DEAL:0:2d::new_triangulation::cell 0.9: ghost, subdomain_id = 2 +DEAL:0:2d::triangulation::cell 0.10: artificial +DEAL:0:2d::new_triangulation::cell 0.10: artificial +DEAL:0:2d::triangulation::cell 0.11: artificial +DEAL:0:2d::new_triangulation::cell 0.11: artificial +DEAL:0:2d::triangulation::cell 0.12: artificial +DEAL:0:2d::new_triangulation::cell 0.12: artificial +DEAL:0:2d::triangulation::cell 0.13: artificial +DEAL:0:2d::new_triangulation::cell 0.13: artificial +DEAL:0:2d::triangulation::cell 0.14: artificial +DEAL:0:2d::new_triangulation::cell 0.14: artificial +DEAL:0:2d::triangulation::cell 0.15: artificial +DEAL:0:2d::new_triangulation::cell 0.15: artificial -- 2.39.5