]> https://gitweb.dealii.org/ - dealii.git/commitdiff
Test p global coarsening for locally refined meshes 11745/head
authorPeter Munch <peterrmuench@gmail.com>
Sun, 14 Feb 2021 11:35:29 +0000 (12:35 +0100)
committerPeter Munch <peterrmuench@gmail.com>
Tue, 16 Feb 2021 09:46:55 +0000 (10:46 +0100)
tests/multigrid-global-coarsening/multigrid_p_01.cc
tests/multigrid-global-coarsening/multigrid_p_01.mpirun=1.with_trilinos=true.with_simplex_support=on.output

index 6f4227b04d341366b14f6b0931d022c038f9b428..bcd3e39ba19c4421ff1c45d9c10049a1aa258142 100644 (file)
@@ -15,8 +15,8 @@
 
 
 /**
- * Test p-multigrid for a uniformly refined mesh both for simplex and
- * hypercube mesh.
+ * Test p-multigrid for a uniformly and locally refined meshes both for
+ * simplex and hypercube mesh.
  */
 
 #include "multigrid_util.h"
@@ -25,7 +25,8 @@ template <int dim, typename Number = double>
 void
 test(const unsigned int n_refinements,
      const unsigned int fe_degree_fine,
-     const bool         do_simplex_mesh)
+     const bool         do_simplex_mesh,
+     const unsigned int mesh_type)
 {
   using VectorType = LinearAlgebra::distributed::Vector<Number>;
 
@@ -34,7 +35,30 @@ test(const unsigned int n_refinements,
     GridGenerator::subdivided_hyper_cube_with_simplices(tria, 2);
   else
     GridGenerator::subdivided_hyper_cube(tria, 2);
-  tria.refine_global(n_refinements);
+
+  if (mesh_type == 0)
+    {
+      tria.refine_global(n_refinements);
+    }
+  else if (mesh_type == 1)
+    {
+      for (unsigned int i = 1; i < n_refinements; i++)
+        {
+          for (auto cell : tria.active_cell_iterators())
+            if (cell->is_locally_owned())
+              {
+                bool flag = true;
+                for (int d = 0; d < dim; d++)
+                  if (cell->center()[d] > 0.5)
+                    flag = false;
+                if (flag)
+                  cell->set_refine_flag();
+              }
+          tria.execute_coarsening_and_refinement();
+        }
+    }
+  else
+    AssertThrow(false, ExcNotImplemented());
 
   const auto level_degrees =
     MGTransferGlobalCoarseningTools::create_polynomial_coarsening_sequence(
@@ -90,6 +114,7 @@ test(const unsigned int n_refinements,
       constraint.reinit(locally_relevant_dofs);
       VectorTools::interpolate_boundary_values(
         *mapping, dof_handler, 0, Functions::ZeroFunction<dim>(), constraint);
+      DoFTools::make_hanging_node_constraints(dof_handler, constraint);
       constraint.close();
 
       // set up operator
@@ -127,6 +152,8 @@ test(const unsigned int n_refinements,
            operators,
            transfer);
 
+  constraints[max_level].distribute(dst);
+
   deallog << dim << " " << fe_degree_fine << " " << n_refinements << " "
           << (do_simplex_mesh ? "tri " : "quad") << " "
           << solver_control.last_step() << std::endl;
@@ -151,11 +178,14 @@ main(int argc, char **argv)
 
   deallog.precision(8);
 
-  for (unsigned int n_refinements = 2; n_refinements <= 4; ++n_refinements)
-    for (unsigned int degree = 2; degree <= 4; ++degree)
-      test<2>(n_refinements, degree, false /*quadrilateral*/);
+  for (unsigned int mesh_type = 0; mesh_type < 2; ++mesh_type)
+    {
+      for (unsigned int n_refinements = 2; n_refinements <= 4; ++n_refinements)
+        for (unsigned int degree = 2; degree <= 4; ++degree)
+          test<2>(n_refinements, degree, false /*quadrilateral*/, mesh_type);
 
-  for (unsigned int n_refinements = 2; n_refinements <= 4; ++n_refinements)
-    for (unsigned int degree = 2; degree <= 2; ++degree)
-      test<2>(n_refinements, degree, true /*triangle*/);
+      for (unsigned int n_refinements = 2; n_refinements <= 4; ++n_refinements)
+        for (unsigned int degree = 2; degree <= 2; ++degree)
+          test<2>(n_refinements, degree, true /*triangle*/, mesh_type);
+    }
 }
index 2dd1841f723118b81bc88f6bf03d77d30684fcbb..b8fc47e0d2671fe55a2c6fcb3660a57f40a9dcdd 100644 (file)
@@ -11,3 +11,15 @@ DEAL:0::2 4 4 quad 3
 DEAL:0::2 2 2 tri  3
 DEAL:0::2 2 3 tri  3
 DEAL:0::2 2 4 tri  3
+DEAL:0::2 2 2 quad 2
+DEAL:0::2 3 2 quad 3
+DEAL:0::2 4 2 quad 3
+DEAL:0::2 2 3 quad 3
+DEAL:0::2 3 3 quad 3
+DEAL:0::2 4 3 quad 3
+DEAL:0::2 2 4 quad 3
+DEAL:0::2 3 4 quad 3
+DEAL:0::2 4 4 quad 3
+DEAL:0::2 2 2 tri  3
+DEAL:0::2 2 3 tri  3
+DEAL:0::2 2 4 tri  4

In the beginning the Universe was created. This has made a lot of people very angry and has been widely regarded as a bad move.

Douglas Adams


Typeset in Trocchi and Trocchi Bold Sans Serif.