--- /dev/null
+//---------------------------------------------------------------------------
+// $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<dim>::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 <deal.II/base/logstream.h>
+#include <deal.II/base/tensor.h>
+#include <deal.II/grid/tria.h>
+#include <deal.II/distributed/tria.h>
+#include <deal.II/grid/tria_accessor.h>
+#include <deal.II/grid/tria_iterator.h>
+#include <deal.II/grid/grid_generator.h>
+
+#include <fstream>
+#include <cstdlib>
+
+
+template<int dim>
+void test()
+{
+ unsigned int myid = Utilities::MPI::this_mpi_process (MPI_COMM_WORLD);
+
+ parallel::distributed::Triangulation<dim> tr(MPI_COMM_WORLD);
+
+ GridGenerator::subdivided_hyper_cube(tr, 6-dim);
+
+ parallel::distributed::Triangulation<dim> new_tr(MPI_COMM_WORLD);
+
+ new_tr.copy_triangulation (tr);
+
+ typename Triangulation<dim,dim>::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<GeometryInfo<dim>::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>();
+
+}
--- /dev/null
+
+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
--- /dev/null
+
+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
--- /dev/null
+
+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