]> https://gitweb.dealii.org/ - dealii.git/commitdiff
Extend test
authorPeter Munch <peterrmuench@gmail.com>
Sat, 22 May 2021 13:05:11 +0000 (15:05 +0200)
committerPeter Munch <peterrmuench@gmail.com>
Sat, 22 May 2021 13:05:11 +0000 (15:05 +0200)
tests/multigrid-global-coarsening/multigrid_p_02.cc
tests/multigrid-global-coarsening/multigrid_util.h

index 3bdfca8875f44e86dfafa410a3544e86fee949a4..2a3b197cff604004102249a9440588bb6d42b2c3 100644 (file)
@@ -72,17 +72,24 @@ test(const unsigned int n_refinements, const unsigned int fe_degree_fine)
       dof_handler.distribute_mg_dofs();
 
       // set up constraints
-      IndexSet locally_relevant_dofs;
-      DoFTools::extract_locally_relevant_dofs(dof_handler,
-                                              locally_relevant_dofs);
-      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);
+      std::set<types::boundary_id> dirichlet_boundary;
+      dirichlet_boundary.insert(0);
+      MGConstrainedDoFs mg_constrained_dofs;
+      mg_constrained_dofs.initialize(dof_handler);
+      mg_constrained_dofs.make_zero_boundary_constraints(dof_handler,
+                                                         dirichlet_boundary);
+
+      IndexSet relevant_dofs;
+      DoFTools::extract_locally_relevant_level_dofs(dof_handler,
+                                                    0 /*level*/,
+                                                    relevant_dofs);
+      constraint.reinit(relevant_dofs);
+      constraint.add_lines(
+        mg_constrained_dofs.get_boundary_indices(0 /*level*/));
       constraint.close();
 
       // set up operator
-      op.reinit(*mapping, dof_handler, *quad, constraint);
+      op.reinit(*mapping, dof_handler, *quad, constraint, 0 /*level*/);
     }
 
   // set up transfer operator
@@ -91,8 +98,8 @@ test(const unsigned int n_refinements, const unsigned int fe_degree_fine)
                                                 dof_handlers[l],
                                                 constraints[l + 1],
                                                 constraints[l],
-                                                0,
-                                                0);
+                                                0 /*level*/,
+                                                0 /*level*/);
 
   MGTransferGlobalCoarsening<dim, VectorType> transfer(
     transfers,
index 91f56af076d156f48517f4a9cbeee299e3ef8bd8..a4168d07da2dfd83dde37d65205349946c8c5dea 100644 (file)
@@ -73,7 +73,8 @@ public:
   reinit(const Mapping<dim> &             mapping,
          const DoFHandler<dim> &          dof_handler,
          const Quadrature<dim> &          quad,
-         const AffineConstraints<number> &constraints)
+         const AffineConstraints<number> &constraints,
+         const unsigned int mg_level = numbers::invalid_unsigned_int)
   {
     // Clear internal data structures (if operator is reused).
     this->system_matrix.clear();
@@ -87,6 +88,7 @@ public:
     // functions so that we only need to set the flag `update_gradients`.
     typename MatrixFree<dim, number>::AdditionalData data;
     data.mapping_update_flags = update_gradients;
+    data.mg_level             = mg_level;
 
     matrix_free.reinit(mapping, dof_handler, constraints, quad, data);
   }

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.