From: Wolfgang Bangerth Date: Fri, 10 Apr 2015 22:26:55 +0000 (-0500) Subject: Test that active cell indices are correct after copy_triangulation(). X-Git-Tag: v8.3.0-rc1~274^2~8 X-Git-Url: https://gitweb.dealii.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2e19ea5c4388c1227146b081bb78a380875bda6d;p=dealii.git Test that active cell indices are correct after copy_triangulation(). --- diff --git a/tests/bits/refine_and_coarsen_for_active_cell_index_04.cc b/tests/bits/refine_and_coarsen_for_active_cell_index_04.cc new file mode 100644 index 0000000000..a746f73798 --- /dev/null +++ b/tests/bits/refine_and_coarsen_for_active_cell_index_04.cc @@ -0,0 +1,144 @@ +// --------------------------------------------------------------------- +// +// Copyright (C) 2010 - 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. +// +// --------------------------------------------------------------------- + + + +// check that cell->active_cell_index() works as advertised +// +// like _03, but with a copied triangulation + + +#include "../tests.h" + +#include +#include +#include +#include +#include +#include +#include + +#include + + + +template +void check (const Triangulation &tria) +{ + unsigned int index = 0; + for (typename Triangulation::active_cell_iterator cell=tria.begin_active(); + cell!=tria.end(); ++cell, ++index) + Assert (cell->active_cell_index() == index, ExcInternalError()); +} + + + +void do_refine (Triangulation<1> &tria) +{ + tria.refine_global (2); + tria.begin_active()->set_refine_flag(); + tria.execute_coarsening_and_refinement (); +} + + +void do_refine (Triangulation<2> &tria) +{ + const int dim = 2; + + tria.refine_global (2); + tria.begin_active()->set_refine_flag(); + tria.execute_coarsening_and_refinement (); + tria.begin_active ()->set_refine_flag (RefinementPossibilities::cut_x); + tria.execute_coarsening_and_refinement (); + tria.begin_active ()->set_refine_flag (RefinementPossibilities::cut_y); + tria.execute_coarsening_and_refinement (); +} + + +void do_refine (Triangulation<3> &tria) +{ + const int dim = 3; + + tria.refine_global (2); + tria.begin_active()->set_refine_flag(); + tria.execute_coarsening_and_refinement (); + tria.begin_active()->set_refine_flag(RefinementPossibilities::cut_x); + tria.execute_coarsening_and_refinement (); + tria.begin_active()->set_refine_flag(RefinementPossibilities::cut_y); + tria.execute_coarsening_and_refinement (); + tria.begin_active()->set_refine_flag(RefinementPossibilities::cut_z); + tria.execute_coarsening_and_refinement (); + tria.begin_active()->set_refine_flag(RefinementPossibilities::cut_xy); + tria.execute_coarsening_and_refinement (); + tria.begin_active()->set_refine_flag(RefinementPossibilities::cut_xz); + tria.execute_coarsening_and_refinement (); + tria.begin_active()->set_refine_flag(RefinementPossibilities::cut_yz); + tria.execute_coarsening_and_refinement (); +} + + +template +void check () +{ + Triangulation tria; + GridGenerator::hyper_cube (tria); + do_refine (tria); + // refine the mesh globally and + // verify that the parent relation + // holds + tria.refine_global (1); + + DoFHandler dof_handler (tria); + + check (tria); + { + Triangulation x; + x.copy_triangulation (tria); + check(x); + } + + // coarsen the mesh globally and + // verify again + for (typename Triangulation::active_cell_iterator cell = tria.begin_active (); + cell != tria.end (); ++cell) + cell->set_coarsen_flag (); + + tria.execute_coarsening_and_refinement (); + + check (tria); + { + Triangulation x; + x.copy_triangulation (tria); + check(x); + } + + deallog << "OK for " << dim << "d" << std::endl; +} + + +int main () +{ + std::ofstream logfile("output"); + deallog.attach(logfile); + deallog.depth_console(0); + deallog.threshold_double(1.e-10); + + check<1> (); + check<2> (); + check<3> (); +} + + + diff --git a/tests/bits/refine_and_coarsen_for_active_cell_index_04.output b/tests/bits/refine_and_coarsen_for_active_cell_index_04.output new file mode 100644 index 0000000000..292df5f812 --- /dev/null +++ b/tests/bits/refine_and_coarsen_for_active_cell_index_04.output @@ -0,0 +1,4 @@ + +DEAL::OK for 1d +DEAL::OK for 2d +DEAL::OK for 3d