From 63358ea440cbaced5971090079065d5444e1d5b4 Mon Sep 17 00:00:00 2001 From: marcfehling Date: Mon, 18 Mar 2019 13:24:03 +0100 Subject: [PATCH] Perform p-refinement during 'Triangulation::execute_coarsening_and_refinement()'. --- doc/news/changes/major/20190318Fehling | 4 + doc/news/changes/minor/20190318Fehling | 5 + include/deal.II/dofs/dof_accessor.h | 27 +++++ include/deal.II/dofs/dof_accessor.templates.h | 23 ++++ include/deal.II/hp/dof_handler.h | 17 ++- source/hp/dof_handler.cc | 62 +++++++++-- tests/hp/p_refinement_and_coarsening.cc | 90 +++++++++++++++ tests/hp/p_refinement_and_coarsening.output | 16 +++ tests/mpi/p_refinement_and_coarsening.cc | 99 +++++++++++++++++ ...coarsening.with_p4est=true.mpirun=1.output | 82 ++++++++++++++ ...coarsening.with_p4est=true.mpirun=3.output | 88 +++++++++++++++ ...coarsening.with_p4est=true.mpirun=8.output | 103 ++++++++++++++++++ 12 files changed, 603 insertions(+), 13 deletions(-) create mode 100644 doc/news/changes/major/20190318Fehling create mode 100644 doc/news/changes/minor/20190318Fehling create mode 100644 tests/hp/p_refinement_and_coarsening.cc create mode 100644 tests/hp/p_refinement_and_coarsening.output create mode 100644 tests/mpi/p_refinement_and_coarsening.cc create mode 100644 tests/mpi/p_refinement_and_coarsening.with_p4est=true.mpirun=1.output create mode 100644 tests/mpi/p_refinement_and_coarsening.with_p4est=true.mpirun=3.output create mode 100644 tests/mpi/p_refinement_and_coarsening.with_p4est=true.mpirun=8.output diff --git a/doc/news/changes/major/20190318Fehling b/doc/news/changes/major/20190318Fehling new file mode 100644 index 0000000000..49e67ca780 --- /dev/null +++ b/doc/news/changes/major/20190318Fehling @@ -0,0 +1,4 @@ +New: Triangulation::execute_coarsening_and_refinement() now also performs +p-coarsening and p-refinement on all attached hp::DoFHandler objects. +
+(Marc Fehling, 2019/03/18) diff --git a/doc/news/changes/minor/20190318Fehling b/doc/news/changes/minor/20190318Fehling new file mode 100644 index 0000000000..9d7de3beed --- /dev/null +++ b/doc/news/changes/minor/20190318Fehling @@ -0,0 +1,5 @@ +New: Function DoFCellAccessor::active_fe_index_after_p_refinement_and_coarsening() +returns the active fe index that a cell (of a hp::DoFHandler) will have if +p-refinement would be performed. +
+(Marc Fehling, 2019/03/18) diff --git a/include/deal.II/dofs/dof_accessor.h b/include/deal.II/dofs/dof_accessor.h index 98280ee710..8ee1d5df26 100644 --- a/include/deal.II/dofs/dof_accessor.h +++ b/include/deal.II/dofs/dof_accessor.h @@ -1973,6 +1973,7 @@ public: * Return whether the p-refinement flag is set or not. * * @note The DoFHandler in use has to be of type hp::DoFHandler. + * An exception is thrown otherwise. */ bool p_refine_flag_set() const; @@ -1982,6 +1983,7 @@ public: * for active cells. * * @note The DoFHandler in use has to be of type hp::DoFHandler. + * An exception is thrown otherwise. */ void set_p_refine_flag() const; @@ -1990,6 +1992,7 @@ public: * Clear the p-refinement flag. * * @note The DoFHandler in use has to be of type hp::DoFHandler. + * An exception is thrown otherwise. */ void clear_p_refine_flag() const; @@ -1998,6 +2001,7 @@ public: * Return whether the p-coarsening flag is set or not. * * @note The DoFHandler in use has to be of type hp::DoFHandler. + * An exception is thrown otherwise. */ bool p_coarsen_flag_set() const; @@ -2007,6 +2011,7 @@ public: * for active cells. * * @note The DoFHandler in use has to be of type hp::DoFHandler. + * An exception is thrown otherwise. */ void set_p_coarsen_flag() const; @@ -2015,10 +2020,32 @@ public: * Clear the p-coarsening flag. * * @note The DoFHandler in use has to be of type hp::DoFHandler. + * An exception is thrown otherwise. */ void clear_p_coarsen_flag() const; + /** + * Returns the active_fe_index that this cell would have if refinement would + * happen. + * + * Prediction is based on the current p-refinement flags set on this cell, + * returning FECollection::next_in_hierarchy() for p-refinement, + * FECollection::previous_in_hierarchy() for p-coarsening, + * or the current active_fe_index otherwise. + * + * If this cell is additionally flagged for h-refinement or h-coarsening, + * these predicted active_fe_indices will be used to determine the finite + * elements on the refined and coarsened cells. For h-refinement, the + * predicted active_fe_index will be distributed on its children. For + * h-coarsening, the predicted active_fe_index of this cell and its siblings + * will be used to determine the active_fe_index on parent cell. + * + * @note The DoFHandler in use has to be of type hp::DoFHandler. + * An exception is thrown otherwise. + */ + unsigned int + active_fe_index_after_p_refinement_and_coarsening() const; /** * @} */ diff --git a/include/deal.II/dofs/dof_accessor.templates.h b/include/deal.II/dofs/dof_accessor.templates.h index 4f8585ab19..d8f976a6e6 100644 --- a/include/deal.II/dofs/dof_accessor.templates.h +++ b/include/deal.II/dofs/dof_accessor.templates.h @@ -4300,6 +4300,29 @@ DoFCellAccessor::clear_p_coarsen_flag() const } + +template +inline unsigned int +DoFCellAccessor:: + active_fe_index_after_p_refinement_and_coarsening() const +{ + if (p_refine_flag_set()) + { + Assert(!p_coarsen_flag_set(), ExcInternalError()); + return this->get_dof_handler().get_fe_collection().next_in_hierarchy( + active_fe_index()); + } + else if (p_coarsen_flag_set()) + { + Assert(!p_refine_flag_set(), ExcInternalError()); + return this->get_dof_handler().get_fe_collection().previous_in_hierarchy( + active_fe_index()); + } + + return active_fe_index(); +} + + DEAL_II_NAMESPACE_CLOSE #endif diff --git a/include/deal.II/hp/dof_handler.h b/include/deal.II/hp/dof_handler.h index 8ac961eb0d..6a11be2f7a 100644 --- a/include/deal.II/hp/dof_handler.h +++ b/include/deal.II/hp/dof_handler.h @@ -1256,21 +1256,28 @@ namespace hp /** * Whenever the underlying triangulation changes by either - * refinement/coarsening and serialization, the active_fe_index of cells + * h/p refinement/coarsening and serialization, the active_fe_index of cells * needs to be transferred. This structure stores all temporary information * required during that process. */ struct ActiveFEIndexTransfer { /** - * Container to temporarily store the iterator and active FE index of - * cells that will be refined. + * Container to temporarily store the iterator and future active FE index + * of cells that persist. + */ + std::map + persisting_cells_fe_index; + + /** + * Container to temporarily store the iterator and future active FE index + * of cells that will be refined. */ std::map refined_cells_fe_index; /** - * Container to temporarily store the iterator and active FE index of - * parent cells that will remain after coarsening. + * Container to temporarily store the iterator and future active FE index + * of parent cells that will remain after coarsening. */ std::map coarsened_cells_fe_index; diff --git a/source/hp/dof_handler.cc b/source/hp/dof_handler.cc index d6905af1dc..78d5017b22 100644 --- a/source/hp/dof_handler.cc +++ b/source/hp/dof_handler.cc @@ -1068,6 +1068,10 @@ namespace internal * the parent cell. See documentation of * hp::FECollection::find_common_subspace() and * hp::FECollection::find_dominated_fe() for further information. + * + * On cells intended for p-refinement or p-coarsening, those + * active_fe_indices will be determined by the corresponding flags that + * have been set on the relevant cells. */ template static void @@ -1083,8 +1087,11 @@ namespace internal { // Store the active_fe_index of each cell that will be // refined to and distribute it later on its children. + // Pick their future index if flagged for p-refinement. fe_transfer->refined_cells_fe_index.insert( - {cell, cell->active_fe_index()}); + {cell, + cell + ->active_fe_index_after_p_refinement_and_coarsening()}); } else if (cell->coarsen_flag_set()) { @@ -1099,6 +1106,10 @@ namespace internal if (fe_transfer->coarsened_cells_fe_index.find(parent) == fe_transfer->coarsened_cells_fe_index.end()) { + // Find a suitable active_fe_index for the parent cell + // based on the least dominating finite element of its + // children. Consider the childrens' hypothetical future + // index when they have been flagged for p-refinement. std::set fe_indices_children; for (unsigned int child_index = 0; child_index < parent->n_children(); @@ -1108,7 +1119,8 @@ namespace internal ExcInternalError()); fe_indices_children.insert( - parent->child(child_index)->active_fe_index()); + parent->child(child_index) + ->active_fe_index_after_p_refinement_and_coarsening()); } Assert(!fe_indices_children.empty(), ExcInternalError()); @@ -1129,6 +1141,17 @@ namespace internal {parent, fe_index}); } } + else + { + // No h-refinement is scheduled for this cell. + // However, it may have p-refinement indicators, so we + // choose a new active_fe_index based on its flags. + if (cell->p_refine_flag_set() || cell->p_coarsen_flag_set()) + fe_transfer->persisting_cells_fe_index.insert( + {cell, + cell + ->active_fe_index_after_p_refinement_and_coarsening()}); + } } } @@ -1145,6 +1168,18 @@ namespace internal { const auto &fe_transfer = dof_handler.active_fe_index_transfer; + // Set active_fe_indices on persisting cells. + for (const auto &pair : fe_transfer->persisting_cells_fe_index) + { + const auto &cell = pair.first; + + if (cell->is_locally_owned()) + { + Assert(cell->active(), ExcInternalError()); + cell->set_active_fe_index(pair.second); + } + } + // Distribute active_fe_indices from all refined cells on their // respective children. for (const auto &pair : fe_transfer->refined_cells_fe_index) @@ -1953,13 +1988,14 @@ namespace hp } Assert(levels.size() == tria->n_levels(), ExcInternalError()); - - // Resize active_fe_indices vectors. use zero indicator to extend for (unsigned int i = 0; i < levels.size(); ++i) { + // Resize active_fe_indices vectors. Use zero indicator to extend. levels[i]->active_fe_indices.resize(tria->n_raw_cells(i), 0); - levels[i]->p_refine_flags.resize(tria->n_raw_cells(i), false); - levels[i]->p_coarsen_flags.resize(tria->n_raw_cells(i), false); + + // Resize p-flags vectors. Clear all flags after refinement finished. + levels[i]->p_refine_flags.assign(tria->n_raw_cells(i), false); + levels[i]->p_coarsen_flags.assign(tria->n_raw_cells(i), false); } } @@ -2080,8 +2116,18 @@ namespace hp // Gather all current active_fe_indices. get_active_fe_indices(active_fe_index_transfer->active_fe_indices); - // Overwrite values of cells that will be coarsened with the - // active_fe_index determined beforehand for their parent. + // Overwrite active_fe_indices of cells that change by either + // h/p refinement/coarsening. + for (const auto &pair : + active_fe_index_transfer->persisting_cells_fe_index) + active_fe_index_transfer + ->active_fe_indices[pair.first->active_cell_index()] = pair.second; + + for (const auto &pair : + active_fe_index_transfer->refined_cells_fe_index) + active_fe_index_transfer + ->active_fe_indices[pair.first->active_cell_index()] = pair.second; + for (const auto &pair : active_fe_index_transfer->coarsened_cells_fe_index) for (unsigned int child_index = 0; diff --git a/tests/hp/p_refinement_and_coarsening.cc b/tests/hp/p_refinement_and_coarsening.cc new file mode 100644 index 0000000000..8d171b5e60 --- /dev/null +++ b/tests/hp/p_refinement_and_coarsening.cc @@ -0,0 +1,90 @@ +// --------------------------------------------------------------------- +// +// Copyright (C) 2019 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.md at +// the top level directory of deal.II. +// +// --------------------------------------------------------------------- + + + +// Check execution of p-refinement and p-coarsening via +// Triangulation::execute_coarsening_and_refinement() + + +#include + +#include +#include + +#include +#include + +#include "../tests.h" + + + +template +void +test() +{ + Triangulation tria; + GridGenerator::hyper_cube(tria); + tria.refine_global(1); + + hp::FECollection fe; + for (unsigned int i = 0; i < 3; ++i) + fe.push_back(FE_Q(i + 1)); + + hp::DoFHandler dh(tria); + dh.set_fe(fe); + + // set default active_fe_index + for (const auto &cell : dh.active_cell_iterators()) + cell->set_active_fe_index(1); + + // set refine flags at least once + auto cell = dh.begin_active(); + cell->set_p_refine_flag(); + (++cell)->set_p_coarsen_flag(); + + tria.execute_coarsening_and_refinement(); + + // check if all flags were cleared and verify fe_indices + for (const auto &cell : dh.active_cell_iterators()) + { + Assert(!cell->p_refine_flag_set() && !cell->p_coarsen_flag_set(), + ExcInternalError()); + + deallog << "cell:" << cell->id().to_string() + << ", fe_index:" << cell->active_fe_index() << std::endl; + } +} + + +int +main() +{ + initlog(); + + deallog.push("1d"); + test<1>(); + deallog.pop(); + + deallog.push("2d"); + test<2>(); + deallog.pop(); + + deallog.push("3d"); + test<3>(); + deallog.pop(); + + deallog << "OK" << std::endl; +} diff --git a/tests/hp/p_refinement_and_coarsening.output b/tests/hp/p_refinement_and_coarsening.output new file mode 100644 index 0000000000..1cdb8f16ab --- /dev/null +++ b/tests/hp/p_refinement_and_coarsening.output @@ -0,0 +1,16 @@ + +DEAL:1d::cell:0_1:0, fe_index:2 +DEAL:1d::cell:0_1:1, fe_index:0 +DEAL:2d::cell:0_1:0, fe_index:2 +DEAL:2d::cell:0_1:1, fe_index:0 +DEAL:2d::cell:0_1:2, fe_index:1 +DEAL:2d::cell:0_1:3, fe_index:1 +DEAL:3d::cell:0_1:0, fe_index:2 +DEAL:3d::cell:0_1:1, fe_index:0 +DEAL:3d::cell:0_1:2, fe_index:1 +DEAL:3d::cell:0_1:3, fe_index:1 +DEAL:3d::cell:0_1:4, fe_index:1 +DEAL:3d::cell:0_1:5, fe_index:1 +DEAL:3d::cell:0_1:6, fe_index:1 +DEAL:3d::cell:0_1:7, fe_index:1 +DEAL::OK diff --git a/tests/mpi/p_refinement_and_coarsening.cc b/tests/mpi/p_refinement_and_coarsening.cc new file mode 100644 index 0000000000..2a11847d40 --- /dev/null +++ b/tests/mpi/p_refinement_and_coarsening.cc @@ -0,0 +1,99 @@ +// --------------------------------------------------------------------- +// +// Copyright (C) 2019 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.md at +// the top level directory of deal.II. +// +// --------------------------------------------------------------------- + + + +// Check execution of p-refinement and p-coarsening via +// parallel::distributed::Triangulation::execute_coarsening_and_refinement() + + +#include + +#include + +#include + +#include +#include + +#include "../tests.h" + + + +template +void +test() +{ + parallel::distributed::Triangulation tria(MPI_COMM_WORLD); + GridGenerator::subdivided_hyper_cube(tria, 2); + tria.refine_global(1); + + hp::FECollection fe; + for (unsigned int i = 0; i < 3; ++i) + fe.push_back(FE_Q(i + 1)); + + hp::DoFHandler dh(tria); + dh.set_fe(fe); + + // set default active_fe_index and refine flags + bool flag = false; + for (const auto &cell : dh.active_cell_iterators()) + if (cell->is_locally_owned()) + { + cell->set_active_fe_index(1); + + if (flag) + { + cell->set_p_refine_flag(); + flag = false; + } + else + { + cell->set_p_coarsen_flag(); + flag = true; + } + } + + tria.execute_coarsening_and_refinement(); + + // check if all flags were cleared and verify fe_indices + for (const auto &cell : dh.active_cell_iterators()) + if (cell->is_locally_owned()) + { + Assert(!cell->p_refine_flag_set() && !cell->p_coarsen_flag_set(), + ExcInternalError()); + + deallog << "cell:" << cell->id().to_string() + << ", fe_index:" << cell->active_fe_index() << std::endl; + } +} + + +int +main(int argc, char *argv[]) +{ + Utilities::MPI::MPI_InitFinalize mpi_initialization(argc, argv, 1); + MPILogInitAll log; + + deallog.push("2d"); + test<2>(); + deallog.pop(); + + deallog.push("3d"); + test<3>(); + deallog.pop(); + + deallog << "OK" << std::endl; +} diff --git a/tests/mpi/p_refinement_and_coarsening.with_p4est=true.mpirun=1.output b/tests/mpi/p_refinement_and_coarsening.with_p4est=true.mpirun=1.output new file mode 100644 index 0000000000..1a8e750cd5 --- /dev/null +++ b/tests/mpi/p_refinement_and_coarsening.with_p4est=true.mpirun=1.output @@ -0,0 +1,82 @@ + +DEAL:0:2d::cell:0_1:0, fe_index:0 +DEAL:0:2d::cell:0_1:1, fe_index:2 +DEAL:0:2d::cell:0_1:2, fe_index:0 +DEAL:0:2d::cell:0_1:3, fe_index:2 +DEAL:0:2d::cell:1_1:0, fe_index:0 +DEAL:0:2d::cell:1_1:1, fe_index:2 +DEAL:0:2d::cell:1_1:2, fe_index:0 +DEAL:0:2d::cell:1_1:3, fe_index:2 +DEAL:0:2d::cell:2_1:0, fe_index:0 +DEAL:0:2d::cell:2_1:1, fe_index:2 +DEAL:0:2d::cell:2_1:2, fe_index:0 +DEAL:0:2d::cell:2_1:3, fe_index:2 +DEAL:0:2d::cell:3_1:0, fe_index:0 +DEAL:0:2d::cell:3_1:1, fe_index:2 +DEAL:0:2d::cell:3_1:2, fe_index:0 +DEAL:0:2d::cell:3_1:3, fe_index:2 +DEAL:0:3d::cell:0_1:0, fe_index:0 +DEAL:0:3d::cell:0_1:1, fe_index:2 +DEAL:0:3d::cell:0_1:2, fe_index:0 +DEAL:0:3d::cell:0_1:3, fe_index:2 +DEAL:0:3d::cell:0_1:4, fe_index:0 +DEAL:0:3d::cell:0_1:5, fe_index:2 +DEAL:0:3d::cell:0_1:6, fe_index:0 +DEAL:0:3d::cell:0_1:7, fe_index:2 +DEAL:0:3d::cell:1_1:0, fe_index:0 +DEAL:0:3d::cell:1_1:1, fe_index:2 +DEAL:0:3d::cell:1_1:2, fe_index:0 +DEAL:0:3d::cell:1_1:3, fe_index:2 +DEAL:0:3d::cell:1_1:4, fe_index:0 +DEAL:0:3d::cell:1_1:5, fe_index:2 +DEAL:0:3d::cell:1_1:6, fe_index:0 +DEAL:0:3d::cell:1_1:7, fe_index:2 +DEAL:0:3d::cell:2_1:0, fe_index:0 +DEAL:0:3d::cell:2_1:1, fe_index:2 +DEAL:0:3d::cell:2_1:2, fe_index:0 +DEAL:0:3d::cell:2_1:3, fe_index:2 +DEAL:0:3d::cell:2_1:4, fe_index:0 +DEAL:0:3d::cell:2_1:5, fe_index:2 +DEAL:0:3d::cell:2_1:6, fe_index:0 +DEAL:0:3d::cell:2_1:7, fe_index:2 +DEAL:0:3d::cell:3_1:0, fe_index:0 +DEAL:0:3d::cell:3_1:1, fe_index:2 +DEAL:0:3d::cell:3_1:2, fe_index:0 +DEAL:0:3d::cell:3_1:3, fe_index:2 +DEAL:0:3d::cell:3_1:4, fe_index:0 +DEAL:0:3d::cell:3_1:5, fe_index:2 +DEAL:0:3d::cell:3_1:6, fe_index:0 +DEAL:0:3d::cell:3_1:7, fe_index:2 +DEAL:0:3d::cell:4_1:0, fe_index:0 +DEAL:0:3d::cell:4_1:1, fe_index:2 +DEAL:0:3d::cell:4_1:2, fe_index:0 +DEAL:0:3d::cell:4_1:3, fe_index:2 +DEAL:0:3d::cell:4_1:4, fe_index:0 +DEAL:0:3d::cell:4_1:5, fe_index:2 +DEAL:0:3d::cell:4_1:6, fe_index:0 +DEAL:0:3d::cell:4_1:7, fe_index:2 +DEAL:0:3d::cell:5_1:0, fe_index:0 +DEAL:0:3d::cell:5_1:1, fe_index:2 +DEAL:0:3d::cell:5_1:2, fe_index:0 +DEAL:0:3d::cell:5_1:3, fe_index:2 +DEAL:0:3d::cell:5_1:4, fe_index:0 +DEAL:0:3d::cell:5_1:5, fe_index:2 +DEAL:0:3d::cell:5_1:6, fe_index:0 +DEAL:0:3d::cell:5_1:7, fe_index:2 +DEAL:0:3d::cell:6_1:0, fe_index:0 +DEAL:0:3d::cell:6_1:1, fe_index:2 +DEAL:0:3d::cell:6_1:2, fe_index:0 +DEAL:0:3d::cell:6_1:3, fe_index:2 +DEAL:0:3d::cell:6_1:4, fe_index:0 +DEAL:0:3d::cell:6_1:5, fe_index:2 +DEAL:0:3d::cell:6_1:6, fe_index:0 +DEAL:0:3d::cell:6_1:7, fe_index:2 +DEAL:0:3d::cell:7_1:0, fe_index:0 +DEAL:0:3d::cell:7_1:1, fe_index:2 +DEAL:0:3d::cell:7_1:2, fe_index:0 +DEAL:0:3d::cell:7_1:3, fe_index:2 +DEAL:0:3d::cell:7_1:4, fe_index:0 +DEAL:0:3d::cell:7_1:5, fe_index:2 +DEAL:0:3d::cell:7_1:6, fe_index:0 +DEAL:0:3d::cell:7_1:7, fe_index:2 +DEAL:0::OK diff --git a/tests/mpi/p_refinement_and_coarsening.with_p4est=true.mpirun=3.output b/tests/mpi/p_refinement_and_coarsening.with_p4est=true.mpirun=3.output new file mode 100644 index 0000000000..f5282ac06f --- /dev/null +++ b/tests/mpi/p_refinement_and_coarsening.with_p4est=true.mpirun=3.output @@ -0,0 +1,88 @@ + +DEAL:0:2d::cell:0_1:0, fe_index:0 +DEAL:0:2d::cell:0_1:1, fe_index:2 +DEAL:0:2d::cell:0_1:2, fe_index:0 +DEAL:0:2d::cell:0_1:3, fe_index:2 +DEAL:0:3d::cell:0_1:0, fe_index:0 +DEAL:0:3d::cell:0_1:1, fe_index:2 +DEAL:0:3d::cell:0_1:2, fe_index:0 +DEAL:0:3d::cell:0_1:3, fe_index:2 +DEAL:0:3d::cell:0_1:4, fe_index:0 +DEAL:0:3d::cell:0_1:5, fe_index:2 +DEAL:0:3d::cell:0_1:6, fe_index:0 +DEAL:0:3d::cell:0_1:7, fe_index:2 +DEAL:0:3d::cell:1_1:0, fe_index:0 +DEAL:0:3d::cell:1_1:1, fe_index:2 +DEAL:0:3d::cell:1_1:2, fe_index:0 +DEAL:0:3d::cell:1_1:3, fe_index:2 +DEAL:0:3d::cell:1_1:4, fe_index:0 +DEAL:0:3d::cell:1_1:5, fe_index:2 +DEAL:0:3d::cell:1_1:6, fe_index:0 +DEAL:0:3d::cell:1_1:7, fe_index:2 +DEAL:0:3d::cell:2_1:0, fe_index:0 +DEAL:0:3d::cell:2_1:1, fe_index:2 +DEAL:0:3d::cell:2_1:2, fe_index:0 +DEAL:0:3d::cell:2_1:3, fe_index:2 +DEAL:0:3d::cell:2_1:4, fe_index:0 +DEAL:0:3d::cell:2_1:5, fe_index:2 +DEAL:0:3d::cell:2_1:6, fe_index:0 +DEAL:0:3d::cell:2_1:7, fe_index:2 +DEAL:0::OK + +DEAL:1:2d::cell:1_1:0, fe_index:0 +DEAL:1:2d::cell:1_1:1, fe_index:2 +DEAL:1:2d::cell:1_1:2, fe_index:0 +DEAL:1:2d::cell:1_1:3, fe_index:2 +DEAL:1:2d::cell:2_1:0, fe_index:0 +DEAL:1:2d::cell:2_1:1, fe_index:2 +DEAL:1:2d::cell:2_1:2, fe_index:0 +DEAL:1:2d::cell:2_1:3, fe_index:2 +DEAL:1:3d::cell:3_1:0, fe_index:0 +DEAL:1:3d::cell:3_1:1, fe_index:2 +DEAL:1:3d::cell:3_1:2, fe_index:0 +DEAL:1:3d::cell:3_1:3, fe_index:2 +DEAL:1:3d::cell:3_1:4, fe_index:0 +DEAL:1:3d::cell:3_1:5, fe_index:2 +DEAL:1:3d::cell:3_1:6, fe_index:0 +DEAL:1:3d::cell:3_1:7, fe_index:2 +DEAL:1:3d::cell:4_1:0, fe_index:0 +DEAL:1:3d::cell:4_1:1, fe_index:2 +DEAL:1:3d::cell:4_1:2, fe_index:0 +DEAL:1:3d::cell:4_1:3, fe_index:2 +DEAL:1:3d::cell:4_1:4, fe_index:0 +DEAL:1:3d::cell:4_1:5, fe_index:2 +DEAL:1:3d::cell:4_1:6, fe_index:0 +DEAL:1:3d::cell:4_1:7, fe_index:2 +DEAL:1::OK + + +DEAL:2:2d::cell:3_1:0, fe_index:0 +DEAL:2:2d::cell:3_1:1, fe_index:2 +DEAL:2:2d::cell:3_1:2, fe_index:0 +DEAL:2:2d::cell:3_1:3, fe_index:2 +DEAL:2:3d::cell:5_1:0, fe_index:0 +DEAL:2:3d::cell:5_1:1, fe_index:2 +DEAL:2:3d::cell:5_1:2, fe_index:0 +DEAL:2:3d::cell:5_1:3, fe_index:2 +DEAL:2:3d::cell:5_1:4, fe_index:0 +DEAL:2:3d::cell:5_1:5, fe_index:2 +DEAL:2:3d::cell:5_1:6, fe_index:0 +DEAL:2:3d::cell:5_1:7, fe_index:2 +DEAL:2:3d::cell:6_1:0, fe_index:0 +DEAL:2:3d::cell:6_1:1, fe_index:2 +DEAL:2:3d::cell:6_1:2, fe_index:0 +DEAL:2:3d::cell:6_1:3, fe_index:2 +DEAL:2:3d::cell:6_1:4, fe_index:0 +DEAL:2:3d::cell:6_1:5, fe_index:2 +DEAL:2:3d::cell:6_1:6, fe_index:0 +DEAL:2:3d::cell:6_1:7, fe_index:2 +DEAL:2:3d::cell:7_1:0, fe_index:0 +DEAL:2:3d::cell:7_1:1, fe_index:2 +DEAL:2:3d::cell:7_1:2, fe_index:0 +DEAL:2:3d::cell:7_1:3, fe_index:2 +DEAL:2:3d::cell:7_1:4, fe_index:0 +DEAL:2:3d::cell:7_1:5, fe_index:2 +DEAL:2:3d::cell:7_1:6, fe_index:0 +DEAL:2:3d::cell:7_1:7, fe_index:2 +DEAL:2::OK + diff --git a/tests/mpi/p_refinement_and_coarsening.with_p4est=true.mpirun=8.output b/tests/mpi/p_refinement_and_coarsening.with_p4est=true.mpirun=8.output new file mode 100644 index 0000000000..d195197d9d --- /dev/null +++ b/tests/mpi/p_refinement_and_coarsening.with_p4est=true.mpirun=8.output @@ -0,0 +1,103 @@ + +DEAL:0:2d::cell:0_1:0, fe_index:0 +DEAL:0:2d::cell:0_1:1, fe_index:2 +DEAL:0:2d::cell:0_1:2, fe_index:0 +DEAL:0:2d::cell:0_1:3, fe_index:2 +DEAL:0:3d::cell:0_1:0, fe_index:0 +DEAL:0:3d::cell:0_1:1, fe_index:2 +DEAL:0:3d::cell:0_1:2, fe_index:0 +DEAL:0:3d::cell:0_1:3, fe_index:2 +DEAL:0:3d::cell:0_1:4, fe_index:0 +DEAL:0:3d::cell:0_1:5, fe_index:2 +DEAL:0:3d::cell:0_1:6, fe_index:0 +DEAL:0:3d::cell:0_1:7, fe_index:2 +DEAL:0::OK + +DEAL:1:3d::cell:1_1:0, fe_index:0 +DEAL:1:3d::cell:1_1:1, fe_index:2 +DEAL:1:3d::cell:1_1:2, fe_index:0 +DEAL:1:3d::cell:1_1:3, fe_index:2 +DEAL:1:3d::cell:1_1:4, fe_index:0 +DEAL:1:3d::cell:1_1:5, fe_index:2 +DEAL:1:3d::cell:1_1:6, fe_index:0 +DEAL:1:3d::cell:1_1:7, fe_index:2 +DEAL:1::OK + + +DEAL:2:2d::cell:1_1:0, fe_index:0 +DEAL:2:2d::cell:1_1:1, fe_index:2 +DEAL:2:2d::cell:1_1:2, fe_index:0 +DEAL:2:2d::cell:1_1:3, fe_index:2 +DEAL:2:3d::cell:2_1:0, fe_index:0 +DEAL:2:3d::cell:2_1:1, fe_index:2 +DEAL:2:3d::cell:2_1:2, fe_index:0 +DEAL:2:3d::cell:2_1:3, fe_index:2 +DEAL:2:3d::cell:2_1:4, fe_index:0 +DEAL:2:3d::cell:2_1:5, fe_index:2 +DEAL:2:3d::cell:2_1:6, fe_index:0 +DEAL:2:3d::cell:2_1:7, fe_index:2 +DEAL:2::OK + + +DEAL:3:3d::cell:3_1:0, fe_index:0 +DEAL:3:3d::cell:3_1:1, fe_index:2 +DEAL:3:3d::cell:3_1:2, fe_index:0 +DEAL:3:3d::cell:3_1:3, fe_index:2 +DEAL:3:3d::cell:3_1:4, fe_index:0 +DEAL:3:3d::cell:3_1:5, fe_index:2 +DEAL:3:3d::cell:3_1:6, fe_index:0 +DEAL:3:3d::cell:3_1:7, fe_index:2 +DEAL:3::OK + + +DEAL:4:2d::cell:2_1:0, fe_index:0 +DEAL:4:2d::cell:2_1:1, fe_index:2 +DEAL:4:2d::cell:2_1:2, fe_index:0 +DEAL:4:2d::cell:2_1:3, fe_index:2 +DEAL:4:3d::cell:4_1:0, fe_index:0 +DEAL:4:3d::cell:4_1:1, fe_index:2 +DEAL:4:3d::cell:4_1:2, fe_index:0 +DEAL:4:3d::cell:4_1:3, fe_index:2 +DEAL:4:3d::cell:4_1:4, fe_index:0 +DEAL:4:3d::cell:4_1:5, fe_index:2 +DEAL:4:3d::cell:4_1:6, fe_index:0 +DEAL:4:3d::cell:4_1:7, fe_index:2 +DEAL:4::OK + + +DEAL:5:3d::cell:5_1:0, fe_index:0 +DEAL:5:3d::cell:5_1:1, fe_index:2 +DEAL:5:3d::cell:5_1:2, fe_index:0 +DEAL:5:3d::cell:5_1:3, fe_index:2 +DEAL:5:3d::cell:5_1:4, fe_index:0 +DEAL:5:3d::cell:5_1:5, fe_index:2 +DEAL:5:3d::cell:5_1:6, fe_index:0 +DEAL:5:3d::cell:5_1:7, fe_index:2 +DEAL:5::OK + + +DEAL:6:2d::cell:3_1:0, fe_index:0 +DEAL:6:2d::cell:3_1:1, fe_index:2 +DEAL:6:2d::cell:3_1:2, fe_index:0 +DEAL:6:2d::cell:3_1:3, fe_index:2 +DEAL:6:3d::cell:6_1:0, fe_index:0 +DEAL:6:3d::cell:6_1:1, fe_index:2 +DEAL:6:3d::cell:6_1:2, fe_index:0 +DEAL:6:3d::cell:6_1:3, fe_index:2 +DEAL:6:3d::cell:6_1:4, fe_index:0 +DEAL:6:3d::cell:6_1:5, fe_index:2 +DEAL:6:3d::cell:6_1:6, fe_index:0 +DEAL:6:3d::cell:6_1:7, fe_index:2 +DEAL:6::OK + + +DEAL:7:3d::cell:7_1:0, fe_index:0 +DEAL:7:3d::cell:7_1:1, fe_index:2 +DEAL:7:3d::cell:7_1:2, fe_index:0 +DEAL:7:3d::cell:7_1:3, fe_index:2 +DEAL:7:3d::cell:7_1:4, fe_index:0 +DEAL:7:3d::cell:7_1:5, fe_index:2 +DEAL:7:3d::cell:7_1:6, fe_index:0 +DEAL:7:3d::cell:7_1:7, fe_index:2 +DEAL:7::OK + -- 2.39.5