--- /dev/null
+// ---------------------------------------------------------------------
+//
+// 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.
+//
+// ---------------------------------------------------------------------
+
+
+
+// tests matrix-free get_cell_iterator and get_face_iterator for
+// a globally refined mesh
+
+
+#include <deal.II/base/mpi.h>
+#include <deal.II/base/quadrature_lib.h>
+
+#include <deal.II/dofs/dof_handler.h>
+
+#include <deal.II/fe/fe_dgq.h>
+#include <deal.II/fe/mapping_q.h>
+
+#include <deal.II/grid/grid_generator.h>
+
+#include <deal.II/matrix_free/matrix_free.h>
+
+#include <deal.II/multigrid/mg_constrained_dofs.h>
+
+#include <set>
+
+#include "../tests.h"
+
+using namespace dealii;
+
+template <int dim,
+ typename Number = double,
+ typename VectorizedArrayType = VectorizedArray<Number>>
+class Test
+{
+public:
+ using VectorType = LinearAlgebra::distributed::Vector<Number>;
+
+ void
+ run(unsigned int fe_degree)
+ {
+ Triangulation<dim> tria(
+ Triangulation<dim>::limit_level_difference_at_vertices);
+ GridGenerator::hyper_cube(tria);
+
+ tria.refine_global(2);
+
+ FE_DGQ<dim> fe(fe_degree);
+ DoFHandler<dim> dof_handler(tria);
+ dof_handler.distribute_dofs(fe);
+ dof_handler.distribute_mg_dofs();
+
+ MappingQ<dim> mapping(1);
+
+ QGauss<1> quad(fe_degree + 1);
+
+
+
+ for (unsigned int level = numbers::invalid_unsigned_int;
+ level < tria.n_global_levels() ||
+ level == numbers::invalid_unsigned_int;
+ level++)
+ {
+ if (level == numbers::invalid_unsigned_int)
+ deallog << "Active level (with max_level="
+ << tria.n_global_levels() - 1 << "):" << std::endl;
+ else
+ deallog << "Multigrid level " << level << ":" << std::endl;
+
+ AffineConstraints<Number> constraint;
+
+ typename MatrixFree<dim, Number, VectorizedArrayType>::AdditionalData
+ additional_data;
+ additional_data.mapping_update_flags = update_values;
+ additional_data.mapping_update_flags_inner_faces = update_values;
+ additional_data.mapping_update_flags_boundary_faces = update_values;
+ additional_data.mg_level = level;
+
+ MatrixFree<dim, Number, VectorizedArrayType> matrix_free;
+ matrix_free.reinit(
+ mapping, dof_handler, constraint, quad, additional_data);
+
+ VectorType src, dst;
+
+ matrix_free.initialize_dof_vector(src);
+ matrix_free.initialize_dof_vector(dst);
+
+ matrix_free.loop(&Test::cell_operation,
+ &Test::face_operation,
+ &Test::boundary_operation,
+ this,
+ dst,
+ src);
+
+ for (const auto cell : cells)
+ deallog << "cell: " << cell.to_string() << std::endl;
+
+ for (const auto face : faces)
+ deallog << "face: " << face.first.to_string() << " "
+ << face.second.to_string() << std::endl;
+
+ for (const auto boundary : boundaries)
+ deallog << "boundary: " << boundary.to_string() << std::endl;
+
+ cells.clear();
+ faces.clear();
+ boundaries.clear();
+
+ deallog << std::endl;
+ }
+ }
+
+private:
+ void
+ cell_operation(const MatrixFree<dim, Number, VectorizedArrayType> &data,
+ VectorType &,
+ const VectorType &,
+ const std::pair<unsigned int, unsigned int> &pair) const
+ {
+ for (auto cell = pair.first; cell < pair.second; cell++)
+ for (auto lane = 0u; lane < data.n_active_entries_per_cell_batch(cell);
+ lane++)
+ cells.emplace(data.get_cell_iterator(cell, lane)->id());
+ }
+
+ void
+ face_operation(const MatrixFree<dim, Number, VectorizedArrayType> &data,
+ VectorType &,
+ const VectorType &,
+ const std::pair<unsigned int, unsigned int> &pair) const
+ {
+ for (auto face = pair.first; face < pair.second; face++)
+ for (auto lane = 0u; lane < data.n_active_entries_per_face_batch(face);
+ lane++)
+ {
+ const auto face_0 =
+ data.get_face_iterator(face, lane, true).first->id();
+ const auto face_1 =
+ data.get_face_iterator(face, lane, false).first->id();
+ if (face_0 < face_1)
+ faces.emplace(face_0, face_1);
+ else
+ faces.emplace(face_1, face_0);
+ }
+ }
+
+
+ void
+ boundary_operation(const MatrixFree<dim, Number, VectorizedArrayType> &data,
+ VectorType &,
+ const VectorType &,
+ const std::pair<unsigned int, unsigned int> &pair) const
+ {
+ for (auto face = pair.first; face < pair.second; face++)
+ for (auto lane = 0u; lane < data.n_active_entries_per_face_batch(face);
+ lane++)
+ boundaries.emplace(
+ data.get_face_iterator(face, lane, true).first->id());
+ }
+
+ mutable std::set<CellId> cells;
+ mutable std::set<std::pair<CellId, CellId>> faces;
+ mutable std::set<CellId> boundaries;
+};
+
+
+int
+main()
+{
+ initlog();
+ {
+ deallog.push("2d");
+ Test<2> runner;
+ runner.run(1);
+ deallog.pop();
+ }
+ {
+ deallog.push("3d");
+ Test<3> runner;
+ runner.run(1);
+ deallog.pop();
+ }
+}
--- /dev/null
+
+DEAL:2d::Active level (with max_level=2):
+DEAL:2d::cell: 0_2:00
+DEAL:2d::cell: 0_2:01
+DEAL:2d::cell: 0_2:02
+DEAL:2d::cell: 0_2:03
+DEAL:2d::cell: 0_2:10
+DEAL:2d::cell: 0_2:11
+DEAL:2d::cell: 0_2:12
+DEAL:2d::cell: 0_2:13
+DEAL:2d::cell: 0_2:20
+DEAL:2d::cell: 0_2:21
+DEAL:2d::cell: 0_2:22
+DEAL:2d::cell: 0_2:23
+DEAL:2d::cell: 0_2:30
+DEAL:2d::cell: 0_2:31
+DEAL:2d::cell: 0_2:32
+DEAL:2d::cell: 0_2:33
+DEAL:2d::face: 0_2:00 0_2:01
+DEAL:2d::face: 0_2:00 0_2:02
+DEAL:2d::face: 0_2:01 0_2:03
+DEAL:2d::face: 0_2:01 0_2:10
+DEAL:2d::face: 0_2:02 0_2:03
+DEAL:2d::face: 0_2:02 0_2:20
+DEAL:2d::face: 0_2:03 0_2:12
+DEAL:2d::face: 0_2:03 0_2:21
+DEAL:2d::face: 0_2:10 0_2:11
+DEAL:2d::face: 0_2:10 0_2:12
+DEAL:2d::face: 0_2:11 0_2:13
+DEAL:2d::face: 0_2:12 0_2:13
+DEAL:2d::face: 0_2:12 0_2:30
+DEAL:2d::face: 0_2:13 0_2:31
+DEAL:2d::face: 0_2:20 0_2:21
+DEAL:2d::face: 0_2:20 0_2:22
+DEAL:2d::face: 0_2:21 0_2:23
+DEAL:2d::face: 0_2:21 0_2:30
+DEAL:2d::face: 0_2:22 0_2:23
+DEAL:2d::face: 0_2:23 0_2:32
+DEAL:2d::face: 0_2:30 0_2:31
+DEAL:2d::face: 0_2:30 0_2:32
+DEAL:2d::face: 0_2:31 0_2:33
+DEAL:2d::face: 0_2:32 0_2:33
+DEAL:2d::boundary: 0_2:00
+DEAL:2d::boundary: 0_2:01
+DEAL:2d::boundary: 0_2:02
+DEAL:2d::boundary: 0_2:10
+DEAL:2d::boundary: 0_2:11
+DEAL:2d::boundary: 0_2:13
+DEAL:2d::boundary: 0_2:20
+DEAL:2d::boundary: 0_2:22
+DEAL:2d::boundary: 0_2:23
+DEAL:2d::boundary: 0_2:31
+DEAL:2d::boundary: 0_2:32
+DEAL:2d::boundary: 0_2:33
+DEAL:2d::
+DEAL:2d::Multigrid level 0:
+DEAL:2d::cell: 0_0:
+DEAL:2d::boundary: 0_0:
+DEAL:2d::
+DEAL:2d::Multigrid level 1:
+DEAL:2d::cell: 0_1:0
+DEAL:2d::cell: 0_1:1
+DEAL:2d::cell: 0_1:2
+DEAL:2d::cell: 0_1:3
+DEAL:2d::face: 0_1:0 0_1:1
+DEAL:2d::face: 0_1:0 0_1:2
+DEAL:2d::face: 0_1:1 0_1:3
+DEAL:2d::face: 0_1:2 0_1:3
+DEAL:2d::boundary: 0_1:0
+DEAL:2d::boundary: 0_1:1
+DEAL:2d::boundary: 0_1:2
+DEAL:2d::boundary: 0_1:3
+DEAL:2d::
+DEAL:2d::Multigrid level 2:
+DEAL:2d::cell: 0_2:00
+DEAL:2d::cell: 0_2:01
+DEAL:2d::cell: 0_2:02
+DEAL:2d::cell: 0_2:03
+DEAL:2d::cell: 0_2:10
+DEAL:2d::cell: 0_2:11
+DEAL:2d::cell: 0_2:12
+DEAL:2d::cell: 0_2:13
+DEAL:2d::cell: 0_2:20
+DEAL:2d::cell: 0_2:21
+DEAL:2d::cell: 0_2:22
+DEAL:2d::cell: 0_2:23
+DEAL:2d::cell: 0_2:30
+DEAL:2d::cell: 0_2:31
+DEAL:2d::cell: 0_2:32
+DEAL:2d::cell: 0_2:33
+DEAL:2d::face: 0_2:00 0_2:01
+DEAL:2d::face: 0_2:00 0_2:02
+DEAL:2d::face: 0_2:01 0_2:03
+DEAL:2d::face: 0_2:01 0_2:10
+DEAL:2d::face: 0_2:02 0_2:03
+DEAL:2d::face: 0_2:02 0_2:20
+DEAL:2d::face: 0_2:03 0_2:12
+DEAL:2d::face: 0_2:03 0_2:21
+DEAL:2d::face: 0_2:10 0_2:11
+DEAL:2d::face: 0_2:10 0_2:12
+DEAL:2d::face: 0_2:11 0_2:13
+DEAL:2d::face: 0_2:12 0_2:13
+DEAL:2d::face: 0_2:12 0_2:30
+DEAL:2d::face: 0_2:13 0_2:31
+DEAL:2d::face: 0_2:20 0_2:21
+DEAL:2d::face: 0_2:20 0_2:22
+DEAL:2d::face: 0_2:21 0_2:23
+DEAL:2d::face: 0_2:21 0_2:30
+DEAL:2d::face: 0_2:22 0_2:23
+DEAL:2d::face: 0_2:23 0_2:32
+DEAL:2d::face: 0_2:30 0_2:31
+DEAL:2d::face: 0_2:30 0_2:32
+DEAL:2d::face: 0_2:31 0_2:33
+DEAL:2d::face: 0_2:32 0_2:33
+DEAL:2d::boundary: 0_2:00
+DEAL:2d::boundary: 0_2:01
+DEAL:2d::boundary: 0_2:02
+DEAL:2d::boundary: 0_2:10
+DEAL:2d::boundary: 0_2:11
+DEAL:2d::boundary: 0_2:13
+DEAL:2d::boundary: 0_2:20
+DEAL:2d::boundary: 0_2:22
+DEAL:2d::boundary: 0_2:23
+DEAL:2d::boundary: 0_2:31
+DEAL:2d::boundary: 0_2:32
+DEAL:2d::boundary: 0_2:33
+DEAL:2d::
+DEAL:3d::Active level (with max_level=2):
+DEAL:3d::cell: 0_2:00
+DEAL:3d::cell: 0_2:01
+DEAL:3d::cell: 0_2:02
+DEAL:3d::cell: 0_2:03
+DEAL:3d::cell: 0_2:04
+DEAL:3d::cell: 0_2:05
+DEAL:3d::cell: 0_2:06
+DEAL:3d::cell: 0_2:07
+DEAL:3d::cell: 0_2:10
+DEAL:3d::cell: 0_2:11
+DEAL:3d::cell: 0_2:12
+DEAL:3d::cell: 0_2:13
+DEAL:3d::cell: 0_2:14
+DEAL:3d::cell: 0_2:15
+DEAL:3d::cell: 0_2:16
+DEAL:3d::cell: 0_2:17
+DEAL:3d::cell: 0_2:20
+DEAL:3d::cell: 0_2:21
+DEAL:3d::cell: 0_2:22
+DEAL:3d::cell: 0_2:23
+DEAL:3d::cell: 0_2:24
+DEAL:3d::cell: 0_2:25
+DEAL:3d::cell: 0_2:26
+DEAL:3d::cell: 0_2:27
+DEAL:3d::cell: 0_2:30
+DEAL:3d::cell: 0_2:31
+DEAL:3d::cell: 0_2:32
+DEAL:3d::cell: 0_2:33
+DEAL:3d::cell: 0_2:34
+DEAL:3d::cell: 0_2:35
+DEAL:3d::cell: 0_2:36
+DEAL:3d::cell: 0_2:37
+DEAL:3d::cell: 0_2:40
+DEAL:3d::cell: 0_2:41
+DEAL:3d::cell: 0_2:42
+DEAL:3d::cell: 0_2:43
+DEAL:3d::cell: 0_2:44
+DEAL:3d::cell: 0_2:45
+DEAL:3d::cell: 0_2:46
+DEAL:3d::cell: 0_2:47
+DEAL:3d::cell: 0_2:50
+DEAL:3d::cell: 0_2:51
+DEAL:3d::cell: 0_2:52
+DEAL:3d::cell: 0_2:53
+DEAL:3d::cell: 0_2:54
+DEAL:3d::cell: 0_2:55
+DEAL:3d::cell: 0_2:56
+DEAL:3d::cell: 0_2:57
+DEAL:3d::cell: 0_2:60
+DEAL:3d::cell: 0_2:61
+DEAL:3d::cell: 0_2:62
+DEAL:3d::cell: 0_2:63
+DEAL:3d::cell: 0_2:64
+DEAL:3d::cell: 0_2:65
+DEAL:3d::cell: 0_2:66
+DEAL:3d::cell: 0_2:67
+DEAL:3d::cell: 0_2:70
+DEAL:3d::cell: 0_2:71
+DEAL:3d::cell: 0_2:72
+DEAL:3d::cell: 0_2:73
+DEAL:3d::cell: 0_2:74
+DEAL:3d::cell: 0_2:75
+DEAL:3d::cell: 0_2:76
+DEAL:3d::cell: 0_2:77
+DEAL:3d::face: 0_2:00 0_2:01
+DEAL:3d::face: 0_2:00 0_2:02
+DEAL:3d::face: 0_2:00 0_2:04
+DEAL:3d::face: 0_2:01 0_2:03
+DEAL:3d::face: 0_2:01 0_2:05
+DEAL:3d::face: 0_2:01 0_2:10
+DEAL:3d::face: 0_2:02 0_2:03
+DEAL:3d::face: 0_2:02 0_2:06
+DEAL:3d::face: 0_2:02 0_2:20
+DEAL:3d::face: 0_2:03 0_2:07
+DEAL:3d::face: 0_2:03 0_2:12
+DEAL:3d::face: 0_2:03 0_2:21
+DEAL:3d::face: 0_2:04 0_2:05
+DEAL:3d::face: 0_2:04 0_2:06
+DEAL:3d::face: 0_2:04 0_2:40
+DEAL:3d::face: 0_2:05 0_2:07
+DEAL:3d::face: 0_2:05 0_2:14
+DEAL:3d::face: 0_2:05 0_2:41
+DEAL:3d::face: 0_2:06 0_2:07
+DEAL:3d::face: 0_2:06 0_2:24
+DEAL:3d::face: 0_2:06 0_2:42
+DEAL:3d::face: 0_2:07 0_2:16
+DEAL:3d::face: 0_2:07 0_2:25
+DEAL:3d::face: 0_2:07 0_2:43
+DEAL:3d::face: 0_2:10 0_2:11
+DEAL:3d::face: 0_2:10 0_2:12
+DEAL:3d::face: 0_2:10 0_2:14
+DEAL:3d::face: 0_2:11 0_2:13
+DEAL:3d::face: 0_2:11 0_2:15
+DEAL:3d::face: 0_2:12 0_2:13
+DEAL:3d::face: 0_2:12 0_2:16
+DEAL:3d::face: 0_2:12 0_2:30
+DEAL:3d::face: 0_2:13 0_2:17
+DEAL:3d::face: 0_2:13 0_2:31
+DEAL:3d::face: 0_2:14 0_2:15
+DEAL:3d::face: 0_2:14 0_2:16
+DEAL:3d::face: 0_2:14 0_2:50
+DEAL:3d::face: 0_2:15 0_2:17
+DEAL:3d::face: 0_2:15 0_2:51
+DEAL:3d::face: 0_2:16 0_2:17
+DEAL:3d::face: 0_2:16 0_2:34
+DEAL:3d::face: 0_2:16 0_2:52
+DEAL:3d::face: 0_2:17 0_2:35
+DEAL:3d::face: 0_2:17 0_2:53
+DEAL:3d::face: 0_2:20 0_2:21
+DEAL:3d::face: 0_2:20 0_2:22
+DEAL:3d::face: 0_2:20 0_2:24
+DEAL:3d::face: 0_2:21 0_2:23
+DEAL:3d::face: 0_2:21 0_2:25
+DEAL:3d::face: 0_2:21 0_2:30
+DEAL:3d::face: 0_2:22 0_2:23
+DEAL:3d::face: 0_2:22 0_2:26
+DEAL:3d::face: 0_2:23 0_2:27
+DEAL:3d::face: 0_2:23 0_2:32
+DEAL:3d::face: 0_2:24 0_2:25
+DEAL:3d::face: 0_2:24 0_2:26
+DEAL:3d::face: 0_2:24 0_2:60
+DEAL:3d::face: 0_2:25 0_2:27
+DEAL:3d::face: 0_2:25 0_2:34
+DEAL:3d::face: 0_2:25 0_2:61
+DEAL:3d::face: 0_2:26 0_2:27
+DEAL:3d::face: 0_2:26 0_2:62
+DEAL:3d::face: 0_2:27 0_2:36
+DEAL:3d::face: 0_2:27 0_2:63
+DEAL:3d::face: 0_2:30 0_2:31
+DEAL:3d::face: 0_2:30 0_2:32
+DEAL:3d::face: 0_2:30 0_2:34
+DEAL:3d::face: 0_2:31 0_2:33
+DEAL:3d::face: 0_2:31 0_2:35
+DEAL:3d::face: 0_2:32 0_2:33
+DEAL:3d::face: 0_2:32 0_2:36
+DEAL:3d::face: 0_2:33 0_2:37
+DEAL:3d::face: 0_2:34 0_2:35
+DEAL:3d::face: 0_2:34 0_2:36
+DEAL:3d::face: 0_2:34 0_2:70
+DEAL:3d::face: 0_2:35 0_2:37
+DEAL:3d::face: 0_2:35 0_2:71
+DEAL:3d::face: 0_2:36 0_2:37
+DEAL:3d::face: 0_2:36 0_2:72
+DEAL:3d::face: 0_2:37 0_2:73
+DEAL:3d::face: 0_2:40 0_2:41
+DEAL:3d::face: 0_2:40 0_2:42
+DEAL:3d::face: 0_2:40 0_2:44
+DEAL:3d::face: 0_2:41 0_2:43
+DEAL:3d::face: 0_2:41 0_2:45
+DEAL:3d::face: 0_2:41 0_2:50
+DEAL:3d::face: 0_2:42 0_2:43
+DEAL:3d::face: 0_2:42 0_2:46
+DEAL:3d::face: 0_2:42 0_2:60
+DEAL:3d::face: 0_2:43 0_2:47
+DEAL:3d::face: 0_2:43 0_2:52
+DEAL:3d::face: 0_2:43 0_2:61
+DEAL:3d::face: 0_2:44 0_2:45
+DEAL:3d::face: 0_2:44 0_2:46
+DEAL:3d::face: 0_2:45 0_2:47
+DEAL:3d::face: 0_2:45 0_2:54
+DEAL:3d::face: 0_2:46 0_2:47
+DEAL:3d::face: 0_2:46 0_2:64
+DEAL:3d::face: 0_2:47 0_2:56
+DEAL:3d::face: 0_2:47 0_2:65
+DEAL:3d::face: 0_2:50 0_2:51
+DEAL:3d::face: 0_2:50 0_2:52
+DEAL:3d::face: 0_2:50 0_2:54
+DEAL:3d::face: 0_2:51 0_2:53
+DEAL:3d::face: 0_2:51 0_2:55
+DEAL:3d::face: 0_2:52 0_2:53
+DEAL:3d::face: 0_2:52 0_2:56
+DEAL:3d::face: 0_2:52 0_2:70
+DEAL:3d::face: 0_2:53 0_2:57
+DEAL:3d::face: 0_2:53 0_2:71
+DEAL:3d::face: 0_2:54 0_2:55
+DEAL:3d::face: 0_2:54 0_2:56
+DEAL:3d::face: 0_2:55 0_2:57
+DEAL:3d::face: 0_2:56 0_2:57
+DEAL:3d::face: 0_2:56 0_2:74
+DEAL:3d::face: 0_2:57 0_2:75
+DEAL:3d::face: 0_2:60 0_2:61
+DEAL:3d::face: 0_2:60 0_2:62
+DEAL:3d::face: 0_2:60 0_2:64
+DEAL:3d::face: 0_2:61 0_2:63
+DEAL:3d::face: 0_2:61 0_2:65
+DEAL:3d::face: 0_2:61 0_2:70
+DEAL:3d::face: 0_2:62 0_2:63
+DEAL:3d::face: 0_2:62 0_2:66
+DEAL:3d::face: 0_2:63 0_2:67
+DEAL:3d::face: 0_2:63 0_2:72
+DEAL:3d::face: 0_2:64 0_2:65
+DEAL:3d::face: 0_2:64 0_2:66
+DEAL:3d::face: 0_2:65 0_2:67
+DEAL:3d::face: 0_2:65 0_2:74
+DEAL:3d::face: 0_2:66 0_2:67
+DEAL:3d::face: 0_2:67 0_2:76
+DEAL:3d::face: 0_2:70 0_2:71
+DEAL:3d::face: 0_2:70 0_2:72
+DEAL:3d::face: 0_2:70 0_2:74
+DEAL:3d::face: 0_2:71 0_2:73
+DEAL:3d::face: 0_2:71 0_2:75
+DEAL:3d::face: 0_2:72 0_2:73
+DEAL:3d::face: 0_2:72 0_2:76
+DEAL:3d::face: 0_2:73 0_2:77
+DEAL:3d::face: 0_2:74 0_2:75
+DEAL:3d::face: 0_2:74 0_2:76
+DEAL:3d::face: 0_2:75 0_2:77
+DEAL:3d::face: 0_2:76 0_2:77
+DEAL:3d::boundary: 0_2:00
+DEAL:3d::boundary: 0_2:01
+DEAL:3d::boundary: 0_2:02
+DEAL:3d::boundary: 0_2:03
+DEAL:3d::boundary: 0_2:04
+DEAL:3d::boundary: 0_2:05
+DEAL:3d::boundary: 0_2:06
+DEAL:3d::boundary: 0_2:10
+DEAL:3d::boundary: 0_2:11
+DEAL:3d::boundary: 0_2:12
+DEAL:3d::boundary: 0_2:13
+DEAL:3d::boundary: 0_2:14
+DEAL:3d::boundary: 0_2:15
+DEAL:3d::boundary: 0_2:17
+DEAL:3d::boundary: 0_2:20
+DEAL:3d::boundary: 0_2:21
+DEAL:3d::boundary: 0_2:22
+DEAL:3d::boundary: 0_2:23
+DEAL:3d::boundary: 0_2:24
+DEAL:3d::boundary: 0_2:26
+DEAL:3d::boundary: 0_2:27
+DEAL:3d::boundary: 0_2:30
+DEAL:3d::boundary: 0_2:31
+DEAL:3d::boundary: 0_2:32
+DEAL:3d::boundary: 0_2:33
+DEAL:3d::boundary: 0_2:35
+DEAL:3d::boundary: 0_2:36
+DEAL:3d::boundary: 0_2:37
+DEAL:3d::boundary: 0_2:40
+DEAL:3d::boundary: 0_2:41
+DEAL:3d::boundary: 0_2:42
+DEAL:3d::boundary: 0_2:44
+DEAL:3d::boundary: 0_2:45
+DEAL:3d::boundary: 0_2:46
+DEAL:3d::boundary: 0_2:47
+DEAL:3d::boundary: 0_2:50
+DEAL:3d::boundary: 0_2:51
+DEAL:3d::boundary: 0_2:53
+DEAL:3d::boundary: 0_2:54
+DEAL:3d::boundary: 0_2:55
+DEAL:3d::boundary: 0_2:56
+DEAL:3d::boundary: 0_2:57
+DEAL:3d::boundary: 0_2:60
+DEAL:3d::boundary: 0_2:62
+DEAL:3d::boundary: 0_2:63
+DEAL:3d::boundary: 0_2:64
+DEAL:3d::boundary: 0_2:65
+DEAL:3d::boundary: 0_2:66
+DEAL:3d::boundary: 0_2:67
+DEAL:3d::boundary: 0_2:71
+DEAL:3d::boundary: 0_2:72
+DEAL:3d::boundary: 0_2:73
+DEAL:3d::boundary: 0_2:74
+DEAL:3d::boundary: 0_2:75
+DEAL:3d::boundary: 0_2:76
+DEAL:3d::boundary: 0_2:77
+DEAL:3d::
+DEAL:3d::Multigrid level 0:
+DEAL:3d::cell: 0_0:
+DEAL:3d::boundary: 0_0:
+DEAL:3d::
+DEAL:3d::Multigrid level 1:
+DEAL:3d::cell: 0_1:0
+DEAL:3d::cell: 0_1:1
+DEAL:3d::cell: 0_1:2
+DEAL:3d::cell: 0_1:3
+DEAL:3d::cell: 0_1:4
+DEAL:3d::cell: 0_1:5
+DEAL:3d::cell: 0_1:6
+DEAL:3d::cell: 0_1:7
+DEAL:3d::face: 0_1:0 0_1:1
+DEAL:3d::face: 0_1:0 0_1:2
+DEAL:3d::face: 0_1:0 0_1:4
+DEAL:3d::face: 0_1:1 0_1:3
+DEAL:3d::face: 0_1:1 0_1:5
+DEAL:3d::face: 0_1:2 0_1:3
+DEAL:3d::face: 0_1:2 0_1:6
+DEAL:3d::face: 0_1:3 0_1:7
+DEAL:3d::face: 0_1:4 0_1:5
+DEAL:3d::face: 0_1:4 0_1:6
+DEAL:3d::face: 0_1:5 0_1:7
+DEAL:3d::face: 0_1:6 0_1:7
+DEAL:3d::boundary: 0_1:0
+DEAL:3d::boundary: 0_1:1
+DEAL:3d::boundary: 0_1:2
+DEAL:3d::boundary: 0_1:3
+DEAL:3d::boundary: 0_1:4
+DEAL:3d::boundary: 0_1:5
+DEAL:3d::boundary: 0_1:6
+DEAL:3d::boundary: 0_1:7
+DEAL:3d::
+DEAL:3d::Multigrid level 2:
+DEAL:3d::cell: 0_2:00
+DEAL:3d::cell: 0_2:01
+DEAL:3d::cell: 0_2:02
+DEAL:3d::cell: 0_2:03
+DEAL:3d::cell: 0_2:04
+DEAL:3d::cell: 0_2:05
+DEAL:3d::cell: 0_2:06
+DEAL:3d::cell: 0_2:07
+DEAL:3d::cell: 0_2:10
+DEAL:3d::cell: 0_2:11
+DEAL:3d::cell: 0_2:12
+DEAL:3d::cell: 0_2:13
+DEAL:3d::cell: 0_2:14
+DEAL:3d::cell: 0_2:15
+DEAL:3d::cell: 0_2:16
+DEAL:3d::cell: 0_2:17
+DEAL:3d::cell: 0_2:20
+DEAL:3d::cell: 0_2:21
+DEAL:3d::cell: 0_2:22
+DEAL:3d::cell: 0_2:23
+DEAL:3d::cell: 0_2:24
+DEAL:3d::cell: 0_2:25
+DEAL:3d::cell: 0_2:26
+DEAL:3d::cell: 0_2:27
+DEAL:3d::cell: 0_2:30
+DEAL:3d::cell: 0_2:31
+DEAL:3d::cell: 0_2:32
+DEAL:3d::cell: 0_2:33
+DEAL:3d::cell: 0_2:34
+DEAL:3d::cell: 0_2:35
+DEAL:3d::cell: 0_2:36
+DEAL:3d::cell: 0_2:37
+DEAL:3d::cell: 0_2:40
+DEAL:3d::cell: 0_2:41
+DEAL:3d::cell: 0_2:42
+DEAL:3d::cell: 0_2:43
+DEAL:3d::cell: 0_2:44
+DEAL:3d::cell: 0_2:45
+DEAL:3d::cell: 0_2:46
+DEAL:3d::cell: 0_2:47
+DEAL:3d::cell: 0_2:50
+DEAL:3d::cell: 0_2:51
+DEAL:3d::cell: 0_2:52
+DEAL:3d::cell: 0_2:53
+DEAL:3d::cell: 0_2:54
+DEAL:3d::cell: 0_2:55
+DEAL:3d::cell: 0_2:56
+DEAL:3d::cell: 0_2:57
+DEAL:3d::cell: 0_2:60
+DEAL:3d::cell: 0_2:61
+DEAL:3d::cell: 0_2:62
+DEAL:3d::cell: 0_2:63
+DEAL:3d::cell: 0_2:64
+DEAL:3d::cell: 0_2:65
+DEAL:3d::cell: 0_2:66
+DEAL:3d::cell: 0_2:67
+DEAL:3d::cell: 0_2:70
+DEAL:3d::cell: 0_2:71
+DEAL:3d::cell: 0_2:72
+DEAL:3d::cell: 0_2:73
+DEAL:3d::cell: 0_2:74
+DEAL:3d::cell: 0_2:75
+DEAL:3d::cell: 0_2:76
+DEAL:3d::cell: 0_2:77
+DEAL:3d::face: 0_2:00 0_2:01
+DEAL:3d::face: 0_2:00 0_2:02
+DEAL:3d::face: 0_2:00 0_2:04
+DEAL:3d::face: 0_2:01 0_2:03
+DEAL:3d::face: 0_2:01 0_2:05
+DEAL:3d::face: 0_2:01 0_2:10
+DEAL:3d::face: 0_2:02 0_2:03
+DEAL:3d::face: 0_2:02 0_2:06
+DEAL:3d::face: 0_2:02 0_2:20
+DEAL:3d::face: 0_2:03 0_2:07
+DEAL:3d::face: 0_2:03 0_2:12
+DEAL:3d::face: 0_2:03 0_2:21
+DEAL:3d::face: 0_2:04 0_2:05
+DEAL:3d::face: 0_2:04 0_2:06
+DEAL:3d::face: 0_2:04 0_2:40
+DEAL:3d::face: 0_2:05 0_2:07
+DEAL:3d::face: 0_2:05 0_2:14
+DEAL:3d::face: 0_2:05 0_2:41
+DEAL:3d::face: 0_2:06 0_2:07
+DEAL:3d::face: 0_2:06 0_2:24
+DEAL:3d::face: 0_2:06 0_2:42
+DEAL:3d::face: 0_2:07 0_2:16
+DEAL:3d::face: 0_2:07 0_2:25
+DEAL:3d::face: 0_2:07 0_2:43
+DEAL:3d::face: 0_2:10 0_2:11
+DEAL:3d::face: 0_2:10 0_2:12
+DEAL:3d::face: 0_2:10 0_2:14
+DEAL:3d::face: 0_2:11 0_2:13
+DEAL:3d::face: 0_2:11 0_2:15
+DEAL:3d::face: 0_2:12 0_2:13
+DEAL:3d::face: 0_2:12 0_2:16
+DEAL:3d::face: 0_2:12 0_2:30
+DEAL:3d::face: 0_2:13 0_2:17
+DEAL:3d::face: 0_2:13 0_2:31
+DEAL:3d::face: 0_2:14 0_2:15
+DEAL:3d::face: 0_2:14 0_2:16
+DEAL:3d::face: 0_2:14 0_2:50
+DEAL:3d::face: 0_2:15 0_2:17
+DEAL:3d::face: 0_2:15 0_2:51
+DEAL:3d::face: 0_2:16 0_2:17
+DEAL:3d::face: 0_2:16 0_2:34
+DEAL:3d::face: 0_2:16 0_2:52
+DEAL:3d::face: 0_2:17 0_2:35
+DEAL:3d::face: 0_2:17 0_2:53
+DEAL:3d::face: 0_2:20 0_2:21
+DEAL:3d::face: 0_2:20 0_2:22
+DEAL:3d::face: 0_2:20 0_2:24
+DEAL:3d::face: 0_2:21 0_2:23
+DEAL:3d::face: 0_2:21 0_2:25
+DEAL:3d::face: 0_2:21 0_2:30
+DEAL:3d::face: 0_2:22 0_2:23
+DEAL:3d::face: 0_2:22 0_2:26
+DEAL:3d::face: 0_2:23 0_2:27
+DEAL:3d::face: 0_2:23 0_2:32
+DEAL:3d::face: 0_2:24 0_2:25
+DEAL:3d::face: 0_2:24 0_2:26
+DEAL:3d::face: 0_2:24 0_2:60
+DEAL:3d::face: 0_2:25 0_2:27
+DEAL:3d::face: 0_2:25 0_2:34
+DEAL:3d::face: 0_2:25 0_2:61
+DEAL:3d::face: 0_2:26 0_2:27
+DEAL:3d::face: 0_2:26 0_2:62
+DEAL:3d::face: 0_2:27 0_2:36
+DEAL:3d::face: 0_2:27 0_2:63
+DEAL:3d::face: 0_2:30 0_2:31
+DEAL:3d::face: 0_2:30 0_2:32
+DEAL:3d::face: 0_2:30 0_2:34
+DEAL:3d::face: 0_2:31 0_2:33
+DEAL:3d::face: 0_2:31 0_2:35
+DEAL:3d::face: 0_2:32 0_2:33
+DEAL:3d::face: 0_2:32 0_2:36
+DEAL:3d::face: 0_2:33 0_2:37
+DEAL:3d::face: 0_2:34 0_2:35
+DEAL:3d::face: 0_2:34 0_2:36
+DEAL:3d::face: 0_2:34 0_2:70
+DEAL:3d::face: 0_2:35 0_2:37
+DEAL:3d::face: 0_2:35 0_2:71
+DEAL:3d::face: 0_2:36 0_2:37
+DEAL:3d::face: 0_2:36 0_2:72
+DEAL:3d::face: 0_2:37 0_2:73
+DEAL:3d::face: 0_2:40 0_2:41
+DEAL:3d::face: 0_2:40 0_2:42
+DEAL:3d::face: 0_2:40 0_2:44
+DEAL:3d::face: 0_2:41 0_2:43
+DEAL:3d::face: 0_2:41 0_2:45
+DEAL:3d::face: 0_2:41 0_2:50
+DEAL:3d::face: 0_2:42 0_2:43
+DEAL:3d::face: 0_2:42 0_2:46
+DEAL:3d::face: 0_2:42 0_2:60
+DEAL:3d::face: 0_2:43 0_2:47
+DEAL:3d::face: 0_2:43 0_2:52
+DEAL:3d::face: 0_2:43 0_2:61
+DEAL:3d::face: 0_2:44 0_2:45
+DEAL:3d::face: 0_2:44 0_2:46
+DEAL:3d::face: 0_2:45 0_2:47
+DEAL:3d::face: 0_2:45 0_2:54
+DEAL:3d::face: 0_2:46 0_2:47
+DEAL:3d::face: 0_2:46 0_2:64
+DEAL:3d::face: 0_2:47 0_2:56
+DEAL:3d::face: 0_2:47 0_2:65
+DEAL:3d::face: 0_2:50 0_2:51
+DEAL:3d::face: 0_2:50 0_2:52
+DEAL:3d::face: 0_2:50 0_2:54
+DEAL:3d::face: 0_2:51 0_2:53
+DEAL:3d::face: 0_2:51 0_2:55
+DEAL:3d::face: 0_2:52 0_2:53
+DEAL:3d::face: 0_2:52 0_2:56
+DEAL:3d::face: 0_2:52 0_2:70
+DEAL:3d::face: 0_2:53 0_2:57
+DEAL:3d::face: 0_2:53 0_2:71
+DEAL:3d::face: 0_2:54 0_2:55
+DEAL:3d::face: 0_2:54 0_2:56
+DEAL:3d::face: 0_2:55 0_2:57
+DEAL:3d::face: 0_2:56 0_2:57
+DEAL:3d::face: 0_2:56 0_2:74
+DEAL:3d::face: 0_2:57 0_2:75
+DEAL:3d::face: 0_2:60 0_2:61
+DEAL:3d::face: 0_2:60 0_2:62
+DEAL:3d::face: 0_2:60 0_2:64
+DEAL:3d::face: 0_2:61 0_2:63
+DEAL:3d::face: 0_2:61 0_2:65
+DEAL:3d::face: 0_2:61 0_2:70
+DEAL:3d::face: 0_2:62 0_2:63
+DEAL:3d::face: 0_2:62 0_2:66
+DEAL:3d::face: 0_2:63 0_2:67
+DEAL:3d::face: 0_2:63 0_2:72
+DEAL:3d::face: 0_2:64 0_2:65
+DEAL:3d::face: 0_2:64 0_2:66
+DEAL:3d::face: 0_2:65 0_2:67
+DEAL:3d::face: 0_2:65 0_2:74
+DEAL:3d::face: 0_2:66 0_2:67
+DEAL:3d::face: 0_2:67 0_2:76
+DEAL:3d::face: 0_2:70 0_2:71
+DEAL:3d::face: 0_2:70 0_2:72
+DEAL:3d::face: 0_2:70 0_2:74
+DEAL:3d::face: 0_2:71 0_2:73
+DEAL:3d::face: 0_2:71 0_2:75
+DEAL:3d::face: 0_2:72 0_2:73
+DEAL:3d::face: 0_2:72 0_2:76
+DEAL:3d::face: 0_2:73 0_2:77
+DEAL:3d::face: 0_2:74 0_2:75
+DEAL:3d::face: 0_2:74 0_2:76
+DEAL:3d::face: 0_2:75 0_2:77
+DEAL:3d::face: 0_2:76 0_2:77
+DEAL:3d::boundary: 0_2:00
+DEAL:3d::boundary: 0_2:01
+DEAL:3d::boundary: 0_2:02
+DEAL:3d::boundary: 0_2:03
+DEAL:3d::boundary: 0_2:04
+DEAL:3d::boundary: 0_2:05
+DEAL:3d::boundary: 0_2:06
+DEAL:3d::boundary: 0_2:10
+DEAL:3d::boundary: 0_2:11
+DEAL:3d::boundary: 0_2:12
+DEAL:3d::boundary: 0_2:13
+DEAL:3d::boundary: 0_2:14
+DEAL:3d::boundary: 0_2:15
+DEAL:3d::boundary: 0_2:17
+DEAL:3d::boundary: 0_2:20
+DEAL:3d::boundary: 0_2:21
+DEAL:3d::boundary: 0_2:22
+DEAL:3d::boundary: 0_2:23
+DEAL:3d::boundary: 0_2:24
+DEAL:3d::boundary: 0_2:26
+DEAL:3d::boundary: 0_2:27
+DEAL:3d::boundary: 0_2:30
+DEAL:3d::boundary: 0_2:31
+DEAL:3d::boundary: 0_2:32
+DEAL:3d::boundary: 0_2:33
+DEAL:3d::boundary: 0_2:35
+DEAL:3d::boundary: 0_2:36
+DEAL:3d::boundary: 0_2:37
+DEAL:3d::boundary: 0_2:40
+DEAL:3d::boundary: 0_2:41
+DEAL:3d::boundary: 0_2:42
+DEAL:3d::boundary: 0_2:44
+DEAL:3d::boundary: 0_2:45
+DEAL:3d::boundary: 0_2:46
+DEAL:3d::boundary: 0_2:47
+DEAL:3d::boundary: 0_2:50
+DEAL:3d::boundary: 0_2:51
+DEAL:3d::boundary: 0_2:53
+DEAL:3d::boundary: 0_2:54
+DEAL:3d::boundary: 0_2:55
+DEAL:3d::boundary: 0_2:56
+DEAL:3d::boundary: 0_2:57
+DEAL:3d::boundary: 0_2:60
+DEAL:3d::boundary: 0_2:62
+DEAL:3d::boundary: 0_2:63
+DEAL:3d::boundary: 0_2:64
+DEAL:3d::boundary: 0_2:65
+DEAL:3d::boundary: 0_2:66
+DEAL:3d::boundary: 0_2:67
+DEAL:3d::boundary: 0_2:71
+DEAL:3d::boundary: 0_2:72
+DEAL:3d::boundary: 0_2:73
+DEAL:3d::boundary: 0_2:74
+DEAL:3d::boundary: 0_2:75
+DEAL:3d::boundary: 0_2:76
+DEAL:3d::boundary: 0_2:77
+DEAL:3d::