Skip to content

Commit

Permalink
Merge pull request dealii#14150 from luca-heltai/fix-has-hanging-nodes
Browse files Browse the repository at this point in the history
  • Loading branch information
masterleinad committed Jul 28, 2022
2 parents 644d2de + 1971cc0 commit 2bc4ee1
Show file tree
Hide file tree
Showing 3 changed files with 57 additions and 4 deletions.
17 changes: 13 additions & 4 deletions source/grid/tria.cc
Original file line number Diff line number Diff line change
Expand Up @@ -13979,10 +13979,19 @@ template <int dim, int spacedim>
bool
Triangulation<dim, spacedim>::has_hanging_nodes() const
{
for (unsigned int lvl = 0; lvl < n_global_levels() - 1; ++lvl)
if (n_active_cells(lvl) != 0)
return true;

if (anisotropic_refinement == false)
{
for (unsigned int lvl = 0; lvl < n_global_levels() - 1; ++lvl)
if (n_active_cells(lvl) != 0)
return true;
}
else
{
for (const auto &cell : active_cell_iterators())
for (const auto &i : cell->face_indices())
if (cell->face(i)->has_children())
return true;
}
return false;
}

Expand Down
42 changes: 42 additions & 0 deletions tests/grid/grid_has_hanging_nodes.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
// ---------------------------------------------------------------------
//
// Copyright (C) 2022 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 that has hanging nodes works correctly for anysotropic refinement

#include <deal.II/grid/grid_generator.h>
#include <deal.II/grid/tria.h>

#include "../tests.h"

int
main()
{
initlog();
Triangulation<2> tria;
GridGenerator::hyper_cube(tria);
tria.begin_active()->set_refine_flag(RefinementCase<2>::cut_x);
tria.execute_coarsening_and_refinement();
tria.begin_active()->set_refine_flag(RefinementCase<2>::cut_x);
tria.execute_coarsening_and_refinement();

if (tria.has_hanging_nodes() == false)
{
deallog << "OK" << std::endl;
}
else
{
deallog << "NOT OK" << std::endl;
}
}
2 changes: 2 additions & 0 deletions tests/grid/grid_has_hanging_nodes.output
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@

DEAL::OK

0 comments on commit 2bc4ee1

Please sign in to comment.