From 2d8f80c4638aead5de0a1a567a6dcc84317fa858 Mon Sep 17 00:00:00 2001 From: Wolfgang Bangerth Date: Fri, 10 Apr 2015 17:37:34 -0500 Subject: [PATCH] Test that active cell indices are correct after serialization. --- ...ne_and_coarsen_for_active_cell_index_05.cc | 175 ++++++++++++++++++ ...nd_coarsen_for_active_cell_index_05.output | 4 + 2 files changed, 179 insertions(+) create mode 100644 tests/bits/refine_and_coarsen_for_active_cell_index_05.cc create mode 100644 tests/bits/refine_and_coarsen_for_active_cell_index_05.output diff --git a/tests/bits/refine_and_coarsen_for_active_cell_index_05.cc b/tests/bits/refine_and_coarsen_for_active_cell_index_05.cc new file mode 100644 index 0000000000..e6b3041f50 --- /dev/null +++ b/tests/bits/refine_and_coarsen_for_active_cell_index_05.cc @@ -0,0 +1,175 @@ +// --------------------------------------------------------------------- +// +// 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 triangulation restored from serialization + + +#include "../tests.h" + +#include +#include +#include +#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; + + // save data to archive + std::ostringstream oss; + { + boost::archive::text_oarchive oa(oss, boost::archive::no_header); + oa << tria; + } + { + std::istringstream iss(oss.str()); + boost::archive::text_iarchive ia(iss, boost::archive::no_header); + + // restore triangulation + ia >> x; + } + + 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; + + // save data to archive + std::ostringstream oss; + { + boost::archive::text_oarchive oa(oss, boost::archive::no_header); + oa << tria; + } + { + std::istringstream iss(oss.str()); + boost::archive::text_iarchive ia(iss, boost::archive::no_header); + + // restore triangulation + ia >> x; + } + + 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_05.output b/tests/bits/refine_and_coarsen_for_active_cell_index_05.output new file mode 100644 index 0000000000..292df5f812 --- /dev/null +++ b/tests/bits/refine_and_coarsen_for_active_cell_index_05.output @@ -0,0 +1,4 @@ + +DEAL::OK for 1d +DEAL::OK for 2d +DEAL::OK for 3d -- 2.39.5