]> https://gitweb.dealii.org/ - dealii.git/commitdiff
Compute diagonal with MatrixFree 9343/head
authorPeter Munch <peterrmuench@gmail.com>
Sun, 12 Jan 2020 10:14:21 +0000 (11:14 +0100)
committerPeter Munch <peterrmuench@gmail.com>
Mon, 28 Sep 2020 19:50:24 +0000 (21:50 +0200)
include/deal.II/matrix_free/tools.h
tests/matrix_free/compute_diagonal_01.cc [new file with mode: 0644]
tests/matrix_free/compute_diagonal_01.with_mpi=true.with_p4est=true.mpirun=1.output [new file with mode: 0644]
tests/matrix_free/compute_diagonal_01.with_mpi=true.with_p4est=true.mpirun=3.output [new file with mode: 0644]
tests/matrix_free/compute_diagonal_02.cc [new file with mode: 0644]
tests/matrix_free/compute_diagonal_02.output [new file with mode: 0644]
tests/matrix_free/compute_diagonal_03.cc [new file with mode: 0644]
tests/matrix_free/compute_diagonal_03.with_mpi=true.with_p4est=true.mpirun=1.output [new file with mode: 0644]
tests/matrix_free/compute_diagonal_util.h [new file with mode: 0644]

index b898a5bf32fc2fd9892a79ea5165845c28e27c10..38b2a52afad793082daa0e54ad68f2fa1fa9535f 100644 (file)
 
 #include <deal.II/grid/tria.h>
 
+#include <deal.II/matrix_free/fe_evaluation.h>
+#include <deal.II/matrix_free/matrix_free.h>
+#include <deal.II/matrix_free/vector_access_internal.h>
+
 
 DEAL_II_NAMESPACE_OPEN
 
@@ -41,6 +45,33 @@ namespace MatrixFreeTools
     AdditionalData &          additional_data,
     const unsigned int        level = numbers::invalid_unsigned_int);
 
+  /**
+   * Compute the diagonal of a linear operator (@p diagonal_global), given
+   * @p matrix_free and the local cell integral operation @p local_vmult. The
+   * vector is initialized to the right size in the function.
+   *
+   * The parameters @p dof_no, @p quad_no, and @p first_selected_component are
+   * passed to the constructor of the FEEvaluation that is internally set up.
+   */
+  template <int dim,
+            int fe_degree,
+            int n_q_points_1d,
+            int n_components,
+            typename Number,
+            typename VectorizedArrayType>
+  void
+  compute_diagonal(
+    const MatrixFree<dim, Number, VectorizedArrayType> &matrix_free,
+    LinearAlgebra::distributed::Vector<Number> &        diagonal_global,
+    const std::function<void(FEEvaluation<dim,
+                                          fe_degree,
+                                          n_q_points_1d,
+                                          n_components,
+                                          Number,
+                                          VectorizedArrayType> &)> &local_vmult,
+    const unsigned int                                              dof_no  = 0,
+    const unsigned int                                              quad_no = 0,
+    const unsigned int first_selected_component = 0);
 
 
   // implementations
@@ -119,8 +150,367 @@ namespace MatrixFreeTools
       additional_data.mapping_update_flags_inner_faces |
       additional_data.mapping_update_flags_boundary_faces;
   }
-} // namespace MatrixFreeTools
 
+  namespace internal
+  {
+    template <typename Number>
+    struct LocalCSR
+    {
+      LocalCSR()
+        : row{0}
+      {}
+
+      std::vector<unsigned int> row_lid_to_gid;
+      std::vector<unsigned int> row;
+      std::vector<unsigned int> col;
+      std::vector<Number>       val;
+    };
+  } // namespace internal
+
+  template <int dim,
+            int fe_degree,
+            int n_q_points_1d,
+            int n_components,
+            typename Number,
+            typename VectorizedArrayType>
+  void
+  compute_diagonal(
+    const MatrixFree<dim, Number, VectorizedArrayType> &matrix_free,
+    LinearAlgebra::distributed::Vector<Number> &        diagonal_global,
+    const std::function<void(FEEvaluation<dim,
+                                          fe_degree,
+                                          n_q_points_1d,
+                                          n_components,
+                                          Number,
+                                          VectorizedArrayType> &)> &local_vmult,
+    const unsigned int                                              dof_no,
+    const unsigned int                                              quad_no,
+    const unsigned int first_selected_component)
+  {
+    using VectorType = LinearAlgebra::distributed::Vector<Number>;
+
+    // initialize vector
+    matrix_free.initialize_dof_vector(diagonal_global);
+
+    int dummy;
+
+    matrix_free.template cell_loop<VectorType, int>(
+      [&](const MatrixFree<dim, Number, VectorizedArrayType> &matrix_free,
+          LinearAlgebra::distributed::Vector<Number> &        diagonal_global,
+          const int &,
+          const std::pair<unsigned int, unsigned int> &range) mutable {
+        FEEvaluation<dim,
+                     fe_degree,
+                     n_q_points_1d,
+                     n_components,
+                     Number,
+                     VectorizedArrayType>
+          phi(matrix_free, dof_no, quad_no, first_selected_component);
+
+        const unsigned int n_lanes = VectorizedArrayType::size();
+
+        // local storage: buffer so that we access the global vector once
+        // note: may be larger then dofs_per_cell in the presence of
+        // constraints!
+        std::array<std::vector<Number>, n_lanes> diagonals_local_constrained;
+
+        for (unsigned int cell = range.first; cell < range.second; ++cell)
+          {
+            // STEP 1: get relevant information from FEEvaluation
+            const auto &       dof_info = matrix_free.get_dof_info(dof_no);
+            const unsigned int n_fe_components =
+              dof_info.start_components.back();
+            const unsigned int dofs_per_component = phi.dofs_per_component;
+
+            const unsigned int n_lanes_filled =
+              matrix_free.n_active_entries_per_cell_batch(cell);
+
+            std::array<const unsigned int *, n_lanes> dof_indices{};
+            {
+              for (unsigned int v = 0; v < n_lanes_filled; ++v)
+                dof_indices[v] =
+                  dof_info.dof_indices.data() +
+                  dof_info
+                    .row_starts[(cell * n_lanes + v) * n_fe_components +
+                                first_selected_component]
+                    .first;
+            }
+
+            // STEP 2: setup CSR storage of transposed locally-relevant
+            //   constraint matrix
+            std::array<internal::LocalCSR<Number>, n_lanes> c_pools;
+
+            for (unsigned int v = 0; v < n_lanes_filled; ++v)
+              {
+                unsigned int index_indicators, next_index_indicators;
+
+                index_indicators =
+                  dof_info
+                    .row_starts[(cell * n_lanes + v) * n_fe_components +
+                                first_selected_component]
+                    .second;
+                next_index_indicators =
+                  dof_info
+                    .row_starts[(cell * n_lanes + v) * n_fe_components +
+                                first_selected_component + 1]
+                    .second;
+
+                // STEP 2a: setup locally-relevant constraint matrix in a
+                //   coordinate list (COO)
+                std::vector<std::tuple<unsigned int, unsigned int, Number>>
+                  locally_relevant_constrains; // (constrained local index,
+                                               // global index of dof which
+                                               // constrains, weight)
+
+                if (n_components == 1 || n_fe_components == 1)
+                  {
+                    AssertDimension(
+                      n_components,
+                      1); // TODO: currently no block vector supported
+
+                    unsigned int ind_local = 0;
+                    for (; index_indicators != next_index_indicators;
+                         ++index_indicators, ++ind_local)
+                      {
+                        const std::pair<unsigned short, unsigned short>
+                          indicator =
+                            dof_info.constraint_indicator[index_indicators];
+
+                        for (unsigned int j = 0; j < indicator.first;
+                             ++j, ++ind_local)
+                          locally_relevant_constrains.emplace_back(
+                            ind_local, dof_indices[v][j], 1.0);
+
+                        dof_indices[v] += indicator.first;
+
+                        const Number *data_val =
+                          matrix_free.constraint_pool_begin(indicator.second);
+                        const Number *end_pool =
+                          matrix_free.constraint_pool_end(indicator.second);
+
+                        for (; data_val != end_pool;
+                             ++data_val, ++dof_indices[v])
+                          locally_relevant_constrains.emplace_back(
+                            ind_local, *dof_indices[v], *data_val);
+                      }
+
+                    AssertIndexRange(ind_local, dofs_per_component + 1);
+
+                    for (; ind_local < dofs_per_component;
+                         ++dof_indices[v], ++ind_local)
+                      locally_relevant_constrains.emplace_back(ind_local,
+                                                               *dof_indices[v],
+                                                               1.0);
+                  }
+                else
+                  {
+                    // case with vector-valued finite elements where all
+                    // components are included in one single vector. Assumption:
+                    // first come all entries to the first component, then all
+                    // entries to the second one, and so on. This is ensured by
+                    // the way MatrixFree reads out the indices.
+                    for (unsigned int comp = 0; comp < n_components; ++comp)
+                      {
+                        unsigned int ind_local = 0;
+
+                        // check whether there is any constraint on the current
+                        // cell
+                        for (; index_indicators != next_index_indicators;
+                             ++index_indicators, ++ind_local)
+                          {
+                            const std::pair<unsigned short, unsigned short>
+                              indicator =
+                                dof_info.constraint_indicator[index_indicators];
+
+                            // run through values up to next constraint
+                            for (unsigned int j = 0; j < indicator.first;
+                                 ++j, ++ind_local)
+                              locally_relevant_constrains.emplace_back(
+                                comp * dofs_per_component + ind_local,
+                                dof_indices[v][j],
+                                1.0);
+                            dof_indices[v] += indicator.first;
+
+                            const Number *data_val =
+                              matrix_free.constraint_pool_begin(
+                                indicator.second);
+                            const Number *end_pool =
+                              matrix_free.constraint_pool_end(indicator.second);
+
+                            for (; data_val != end_pool;
+                                 ++data_val, ++dof_indices[v])
+                              locally_relevant_constrains.emplace_back(
+                                comp * dofs_per_component + ind_local,
+                                *dof_indices[v],
+                                *data_val);
+                          }
+
+                        AssertIndexRange(ind_local, dofs_per_component + 1);
+
+                        // get the dof values past the last constraint
+                        for (; ind_local < dofs_per_component;
+                             ++dof_indices[v], ++ind_local)
+                          locally_relevant_constrains.emplace_back(
+                            comp * dofs_per_component + ind_local,
+                            *dof_indices[v],
+                            1.0);
+
+                        if (comp + 1 < n_components)
+                          {
+                            next_index_indicators =
+                              dof_info
+                                .row_starts[(cell * n_lanes + v) *
+                                              n_fe_components +
+                                            first_selected_component + comp + 2]
+                                .second;
+                          }
+                      }
+                  }
+
+                // STEP 2b: transpose COO
+
+                // presort vector for transposed access
+                std::sort(locally_relevant_constrains.begin(),
+                          locally_relevant_constrains.end(),
+                          [](const auto &a, const auto &b) {
+                            if (std::get<1>(a) < std::get<1>(b))
+                              return true;
+                            return (std::get<1>(a) == std::get<1>(b)) &&
+                                   (std::get<0>(a) < std::get<0>(b));
+                          });
+
+                // make sure that all entries are unique
+                locally_relevant_constrains.erase(
+                  unique(locally_relevant_constrains.begin(),
+                         locally_relevant_constrains.end(),
+                         [](const auto &a, const auto &b) {
+                           return (std::get<1>(a) == std::get<1>(b)) &&
+                                  (std::get<0>(a) == std::get<0>(b));
+                         }),
+                  locally_relevant_constrains.end());
+
+                // STEP 2c: translate COO to CRS
+                auto &c_pool = c_pools[v];
+                {
+                  if (locally_relevant_constrains.size() > 0)
+                    c_pool.row_lid_to_gid.emplace_back(
+                      std::get<1>(locally_relevant_constrains.front()));
+                  for (const auto &j : locally_relevant_constrains)
+                    {
+                      if (c_pool.row_lid_to_gid.back() != std::get<1>(j))
+                        {
+                          c_pool.row_lid_to_gid.push_back(std::get<1>(j));
+                          c_pool.row.push_back(c_pool.val.size());
+                        }
+
+                      c_pool.col.emplace_back(std::get<0>(j));
+                      c_pool.val.emplace_back(std::get<2>(j));
+                    }
+
+                  if (c_pool.val.size() > 0)
+                    c_pool.row.push_back(c_pool.val.size());
+                }
+              }
+
+            // STEP 3: compute element matrix A_e, apply
+            //   locally-relevant constraints C_e^T * A_e * C_e, and get the
+            //   the diagonal entry
+            //     (C_e^T * A_e * C_e)(i,i)
+            //   or
+            //     C_e^T(i,:) * A_e * C_e(:,i).
+            //
+            //   Since, we compute the element matrix column-by-column and as a
+            //   result never actually have the full element matrix, we actually
+            //   perform following steps:
+            //    1) loop over all columns of the element matrix
+            //     a) compute column i
+            //     b) compute for each j (rows of C_e^T):
+            //          (C_e^T(j,:) * A_e(:,i)) * C_e(i,j)
+            //       or
+            //          (C_e^T(j,:) * A_e(:,i)) * C_e^T(j,i)
+            //       This gives a contribution the the j-th entry of the
+            //       locally-relevant diagonal and comprises the multiplication
+            //       by the locally-relevant constraint matrix from the left and
+            //       the right. There is no contribution to the j-th vector
+            //       entry if the j-th row of C_e^T is empty or C_e^T(j,i) is
+            //       zero.
+
+            // set size locally-relevant diagonal
+            for (unsigned int v = 0; v < n_lanes_filled; ++v)
+              diagonals_local_constrained[v].assign(
+                c_pools[v].row_lid_to_gid.size(), Number(0.0));
+
+            phi.reinit(cell);
+
+            // loop over all columns of element stiffness matrix
+            for (unsigned int i = 0; i < phi.dofs_per_cell; ++i)
+              {
+                // compute i-th column of element stiffness matrix:
+                // this could be simply performed as done at the moment with
+                // matrix-free operator evaluation applied to a ith-basis vector
+
+                for (unsigned int j = 0; j < phi.dofs_per_cell; ++j)
+                  phi.begin_dof_values()[j] = static_cast<Number>(i == j);
+
+                local_vmult(phi);
+
+                const auto ith_column = phi.begin_dof_values();
+
+                // apply local constraint matrix from left and from right:
+                // loop over all rows of transposed constrained matrix
+                for (unsigned int v = 0; v < n_lanes_filled; ++v)
+                  {
+                    const auto &c_pool = c_pools[v];
+
+                    for (unsigned int j = 0; j < c_pool.row.size() - 1; ++j)
+                      {
+                        // check if the result will be zero, so that we can skip
+                        // the following computations -> binary search
+                        const auto scale_iterator =
+                          std::lower_bound(c_pool.col.begin() + c_pool.row[j],
+                                           c_pool.col.begin() +
+                                             c_pool.row[j + 1],
+                                           i);
+
+                        // explanation: j-th row of C_e^T is empty (see above)
+                        if (scale_iterator ==
+                            c_pool.col.begin() + c_pool.row[j + 1])
+                          continue;
+
+                        // explanation: C_e^T(j,i) is zero (see above)
+                        if (*scale_iterator != i)
+                          continue;
+
+                        // apply constraint matrix from the left
+                        Number temp = 0.0;
+                        for (unsigned int k = c_pool.row[j];
+                             k < c_pool.row[j + 1];
+                             ++k)
+                          temp += c_pool.val[k] * ith_column[c_pool.col[k]][v];
+
+                        // apply constraint matrix from the right
+                        diagonals_local_constrained[v][j] +=
+                          temp * c_pool.val[std::distance(c_pool.col.begin(),
+                                                          scale_iterator)];
+                      }
+                  }
+              }
+
+            // STEP 4: assembly results: add into global vector
+            for (unsigned int v = 0; v < n_lanes_filled; ++v)
+              for (unsigned int j = 0; j < c_pools[v].row.size() - 1; ++j)
+                ::dealii::internal::vector_access_add(
+                  diagonal_global,
+                  c_pools[v].row_lid_to_gid[j],
+                  diagonals_local_constrained[v][j]);
+          }
+      },
+      diagonal_global,
+      dummy,
+      false);
+  }
+
+} // namespace MatrixFreeTools
 
 DEAL_II_NAMESPACE_CLOSE
 
diff --git a/tests/matrix_free/compute_diagonal_01.cc b/tests/matrix_free/compute_diagonal_01.cc
new file mode 100644 (file)
index 0000000..5013d77
--- /dev/null
@@ -0,0 +1,91 @@
+// ---------------------------------------------------------------------
+//
+// 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.
+//
+// ---------------------------------------------------------------------
+
+
+// Test MatrixFreeTools::compute_diagonal() for a Laplace operator
+
+#include "compute_diagonal_util.h"
+
+template <int dim,
+          int fe_degree,
+          int n_points                 = fe_degree + 1,
+          int n_components             = 1,
+          typename Number              = double,
+          typename VectorizedArrayType = VectorizedArray<Number>>
+void
+test()
+{
+  parallel::distributed::Triangulation<dim> tria(MPI_COMM_WORLD);
+
+  GridGenerator::hyper_cube(tria, -numbers::PI / 2, numbers::PI / 2);
+
+  tria.refine_global();
+  for (auto &cell : tria.active_cell_iterators())
+    if (cell->active() && cell->is_locally_owned() && cell->center()[0] < 0.0)
+      cell->set_refine_flag();
+  tria.execute_coarsening_and_refinement();
+
+  const FE_Q<dim>     fe_q(fe_degree);
+  const FESystem<dim> fe(fe_q, n_components);
+
+  // setup dof-handlers
+  DoFHandler<dim> dof_handler(tria);
+  dof_handler.distribute_dofs(fe);
+
+  AffineConstraints<Number> constraint;
+  DoFTools::make_hanging_node_constraints(dof_handler, constraint);
+
+  VectorTools::interpolate_boundary_values(
+    dof_handler, 0, Functions::ZeroFunction<dim>(n_components), constraint);
+
+  constraint.close();
+
+  typename MatrixFree<dim, Number, VectorizedArrayType>::AdditionalData
+    additional_data;
+  additional_data.mapping_update_flags = update_values | update_gradients;
+
+  MappingQ<dim> mapping(1);
+  QGauss<1>     quad(fe_degree + 1);
+
+  MatrixFree<dim, Number, VectorizedArrayType> matrix_free;
+  matrix_free.reinit(mapping, dof_handler, constraint, quad, additional_data);
+
+
+  Test<dim, fe_degree, n_points, n_components, Number, VectorizedArrayType>
+    test(matrix_free,
+         [](FEEvaluation<dim,
+                         fe_degree,
+                         n_points,
+                         n_components,
+                         Number,
+                         VectorizedArrayType> &phi) {
+           phi.evaluate(false, true);
+           for (unsigned int q = 0; q < phi.n_q_points; ++q)
+             phi.submit_gradient(phi.get_gradient(q), q);
+           phi.integrate(false, true);
+         });
+
+  test.do_test();
+}
+
+int
+main(int argc, char **argv)
+{
+  Utilities::MPI::MPI_InitFinalize mpi_initialization(argc, argv, 1);
+  MPILogInitAll                    all;
+
+  test<2, 1, 2, 1>(); // scalar
+  test<2, 1, 2, 2>(); // vector
+}
diff --git a/tests/matrix_free/compute_diagonal_01.with_mpi=true.with_p4est=true.mpirun=1.output b/tests/matrix_free/compute_diagonal_01.with_mpi=true.with_p4est=true.mpirun=1.output
new file mode 100644 (file)
index 0000000..15962b4
--- /dev/null
@@ -0,0 +1,21 @@
+
+Process #0
+Local range: [0, 18), global size: 18
+Vector data:
+0.000e+00 0.000e+00 3.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 2.667e+00 0.000e+00 0.000e+00 2.667e+00 0.000e+00 2.667e+00 0.000e+00 0.000e+00 0.000e+00 
+DEAL:0::5.50757
+Process #0
+Local range: [0, 18), global size: 18
+Vector data:
+0.000e+00 0.000e+00 3.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 2.667e+00 0.000e+00 0.000e+00 2.667e+00 0.000e+00 2.667e+00 0.000e+00 0.000e+00 0.000e+00 
+DEAL:0::5.50757
+Process #0
+Local range: [0, 36), global size: 36
+Vector data:
+0.000e+00 0.000e+00 0.000e+00 0.000e+00 3.000e+00 3.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 2.667e+00 2.667e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 2.667e+00 2.667e+00 0.000e+00 0.000e+00 2.667e+00 2.667e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 
+DEAL:0::7.78888
+Process #0
+Local range: [0, 36), global size: 36
+Vector data:
+0.000e+00 0.000e+00 0.000e+00 0.000e+00 3.000e+00 3.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 2.667e+00 2.667e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 2.667e+00 2.667e+00 0.000e+00 0.000e+00 2.667e+00 2.667e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 
+DEAL:0::7.78888
diff --git a/tests/matrix_free/compute_diagonal_01.with_mpi=true.with_p4est=true.mpirun=3.output b/tests/matrix_free/compute_diagonal_01.with_mpi=true.with_p4est=true.mpirun=3.output
new file mode 100644 (file)
index 0000000..c1c54bf
--- /dev/null
@@ -0,0 +1,65 @@
+
+Process #0
+Local range: [0, 9), global size: 18
+Vector data:
+0.000e+00 0.000e+00 0.000e+00 2.667e+00 0.000e+00 0.000e+00 0.000e+00 2.667e+00 3.000e+00 
+DEAL:0::5.50757
+Process #0
+Local range: [0, 9), global size: 18
+Vector data:
+0.000e+00 0.000e+00 0.000e+00 2.667e+00 0.000e+00 0.000e+00 0.000e+00 2.667e+00 3.000e+00 
+DEAL:0::5.50757
+Process #0
+Local range: [0, 18), global size: 36
+Vector data:
+0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 2.667e+00 2.667e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 2.667e+00 2.667e+00 3.000e+00 3.000e+00 
+DEAL:0::7.78888
+Process #0
+Local range: [0, 18), global size: 36
+Vector data:
+0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 2.667e+00 2.667e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 2.667e+00 2.667e+00 3.000e+00 3.000e+00 
+DEAL:0::7.78888
+
+Process #1
+Local range: [9, 11), global size: 18
+Vector data:
+0.000e+00 0.000e+00 
+DEAL:1::5.50757
+Process #1
+Local range: [9, 11), global size: 18
+Vector data:
+0.000e+00 0.000e+00 
+DEAL:1::5.50757
+Process #1
+Local range: [18, 22), global size: 36
+Vector data:
+0.000e+00 0.000e+00 0.000e+00 0.000e+00 
+DEAL:1::7.78888
+Process #1
+Local range: [18, 22), global size: 36
+Vector data:
+0.000e+00 0.000e+00 0.000e+00 0.000e+00 
+DEAL:1::7.78888
+
+
+Process #2
+Local range: [11, 18), global size: 18
+Vector data:
+0.000e+00 0.000e+00 0.000e+00 2.667e+00 0.000e+00 0.000e+00 0.000e+00 
+DEAL:2::5.50757
+Process #2
+Local range: [11, 18), global size: 18
+Vector data:
+0.000e+00 0.000e+00 0.000e+00 2.667e+00 0.000e+00 0.000e+00 0.000e+00 
+DEAL:2::5.50757
+Process #2
+Local range: [22, 36), global size: 36
+Vector data:
+0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 2.667e+00 2.667e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 
+DEAL:2::7.78888
+Process #2
+Local range: [22, 36), global size: 36
+Vector data:
+0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 2.667e+00 2.667e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 
+DEAL:2::7.78888
+
diff --git a/tests/matrix_free/compute_diagonal_02.cc b/tests/matrix_free/compute_diagonal_02.cc
new file mode 100644 (file)
index 0000000..f7949e0
--- /dev/null
@@ -0,0 +1,133 @@
+// ---------------------------------------------------------------------
+//
+// 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.
+//
+// ---------------------------------------------------------------------
+
+
+
+// Test MatrixFreeTools::compute_diagonal() for a vector Laplace operator
+// and compute_no_normal_flux_constraints.
+
+#include "compute_diagonal_util.h"
+
+template <int dim>
+class BoundaryValues : public Function<dim>
+{
+public:
+  BoundaryValues()
+    : Function<dim>(dim)
+  {}
+  virtual void
+  vector_value(const Point<dim> &p, Vector<double> &value) const;
+};
+template <int dim>
+void
+BoundaryValues<dim>::vector_value(const Point<dim> &p,
+                                  Vector<double> &  values) const
+{
+  (void)p;
+  for (unsigned int i = 0; i < values.size(); ++i)
+    values(i) = 0.0;
+  return;
+}
+
+using namespace dealii;
+
+template <int dim,
+          int fe_degree,
+          int n_points                 = fe_degree + 1,
+          int n_components             = dim,
+          typename Number              = double,
+          typename VectorizedArrayType = VectorizedArray<Number>>
+void
+test()
+{
+  Triangulation<dim> tria;
+
+  GridGenerator::hyper_shell(tria, Point<dim>(), 1, 2, 0, true);
+
+  tria.refine_global(0);
+
+
+  const FE_Q<dim>     fe_q(fe_degree);
+  const FESystem<dim> fe(fe_q, n_components);
+
+  // setup dof-handlers
+  DoFHandler<dim> dof_handler(tria);
+  dof_handler.distribute_dofs(fe);
+
+  AffineConstraints<Number> constraints;
+  IndexSet                  locally_relevant_dofs;
+  DoFTools::extract_locally_relevant_dofs(dof_handler, locally_relevant_dofs);
+
+  constraints.reinit(locally_relevant_dofs);
+
+  DoFTools::make_hanging_node_constraints(dof_handler, constraints);
+
+  std::set<unsigned int> dirichlet_boundary  = {0};
+  std::set<unsigned int> tangential_boundary = {1};
+
+  BoundaryValues<dim> boundary;
+  for (auto bid : dirichlet_boundary)
+    VectorTools::interpolate_boundary_values(dof_handler,
+                                             bid,
+                                             boundary,
+                                             constraints);
+
+  VectorTools::compute_no_normal_flux_constraints(dof_handler,
+                                                  /* first_vector_component= */
+                                                  0,
+                                                  tangential_boundary,
+                                                  constraints);
+  constraints.close();
+
+  typename MatrixFree<dim, Number, VectorizedArrayType>::AdditionalData
+    additional_data;
+  additional_data.mapping_update_flags = update_values | update_gradients;
+
+  MappingQ<dim> mapping(1);
+  QGauss<1>     quad(fe_degree + 1);
+
+  MatrixFree<dim, Number, VectorizedArrayType> matrix_free;
+  matrix_free.reinit(mapping, dof_handler, constraints, quad, additional_data);
+
+
+  Test<dim, fe_degree, n_points, n_components, Number, VectorizedArrayType>
+    test(matrix_free,
+         [](FEEvaluation<dim,
+                         fe_degree,
+                         n_points,
+                         n_components,
+                         Number,
+                         VectorizedArrayType> &phi) {
+           phi.evaluate(false, true, false);
+           for (unsigned int q = 0; q < phi.n_q_points; ++q)
+             {
+               phi.submit_symmetric_gradient(2.0 *
+                                               phi.get_symmetric_gradient(q),
+                                             q);
+             }
+           phi.integrate(false, true);
+         });
+
+  test.do_test();
+}
+
+int
+main(int argc, char **argv)
+{
+  Utilities::MPI::MPI_InitFinalize mpi_initialization(argc, argv, 1);
+  MPILogInitAll                    all;
+
+  test<2, 1>();
+}
diff --git a/tests/matrix_free/compute_diagonal_02.output b/tests/matrix_free/compute_diagonal_02.output
new file mode 100644 (file)
index 0000000..5d9ae9b
--- /dev/null
@@ -0,0 +1,11 @@
+
+Process #0
+Local range: [0, 40), global size: 40
+Vector data:
+0.000e+00 1.449e+00 0.000e+00 2.214e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 1.602e+00 0.000e+00 0.000e+00 0.000e+00 1.602e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 2.214e+00 0.000e+00 0.000e+00 0.000e+00 1.449e+00 0.000e+00 0.000e+00 0.000e+00 2.214e+00 0.000e+00 0.000e+00 1.602e+00 0.000e+00 0.000e+00 0.000e+00 1.602e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 2.214e+00 0.000e+00 0.000e+00 
+DEAL:0::5.83842
+Process #0
+Local range: [0, 40), global size: 40
+Vector data:
+0.000e+00 1.449e+00 0.000e+00 2.214e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 1.602e+00 0.000e+00 0.000e+00 0.000e+00 1.602e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 2.214e+00 0.000e+00 0.000e+00 0.000e+00 1.449e+00 0.000e+00 0.000e+00 0.000e+00 2.214e+00 0.000e+00 0.000e+00 1.602e+00 0.000e+00 0.000e+00 0.000e+00 1.602e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 2.214e+00 0.000e+00 0.000e+00 
+DEAL:0::5.83842
diff --git a/tests/matrix_free/compute_diagonal_03.cc b/tests/matrix_free/compute_diagonal_03.cc
new file mode 100644 (file)
index 0000000..0fd9c6e
--- /dev/null
@@ -0,0 +1,108 @@
+// ---------------------------------------------------------------------
+//
+// 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.
+//
+// ---------------------------------------------------------------------
+
+
+
+// Test MatrixFreeTools::compute_diagonal() for scalar and vector Laplace
+// operator with variable coefficients.
+
+#include "compute_diagonal_util.h"
+
+template <int dim,
+          int fe_degree,
+          int n_points                 = fe_degree + 1,
+          int n_components             = 1,
+          typename Number              = double,
+          typename VectorizedArrayType = VectorizedArray<Number>>
+void
+test()
+{
+  parallel::distributed::Triangulation<dim> tria(MPI_COMM_WORLD);
+
+  GridGenerator::hyper_ball(tria);
+  tria.refine_global(1);
+
+  const FE_Q<dim>     fe_q(fe_degree);
+  const FESystem<dim> fe(fe_q, n_components);
+
+  // setup dof-handlers
+  DoFHandler<dim> dof_handler(tria);
+  dof_handler.distribute_dofs(fe);
+
+  AffineConstraints<Number> constraint;
+  DoFTools::make_hanging_node_constraints(dof_handler, constraint);
+
+  VectorTools::interpolate_boundary_values(
+    dof_handler, 0, Functions::ZeroFunction<dim>(n_components), constraint);
+
+  constraint.close();
+
+  typename MatrixFree<dim, Number, VectorizedArrayType>::AdditionalData
+    additional_data;
+  additional_data.mapping_update_flags =
+    update_values | update_gradients | update_quadrature_points;
+
+  MappingQ<dim> mapping(1);
+  QGauss<1>     quad(fe_degree + 1);
+
+  MatrixFree<dim, Number, VectorizedArrayType> matrix_free;
+  matrix_free.reinit(mapping, dof_handler, constraint, quad, additional_data);
+
+
+  Test<dim, fe_degree, n_points, n_components, Number, VectorizedArrayType>
+    test(matrix_free,
+         [](FEEvaluation<dim,
+                         fe_degree,
+                         n_points,
+                         n_components,
+                         Number,
+                         VectorizedArrayType> &phi) {
+           phi.evaluate(false, true);
+           for (unsigned int q = 0; q < phi.n_q_points; ++q)
+             {
+               auto                quadrature_point = phi.quadrature_point(q);
+               VectorizedArrayType coefficient;
+
+               for (unsigned int v = 0;
+                    v < VectorizedArrayType::n_array_elements;
+                    v++)
+                 {
+                   Point<dim, Number> point;
+                   for (unsigned int d = 0; d < dim; d++)
+                     point[d] = quadrature_point[d][v];
+                   coefficient[v] = (point.square() < 0.5 * 0.5) ? 20 : 1;
+                 }
+
+               phi.submit_gradient(coefficient * phi.get_gradient(q), q);
+             }
+           phi.integrate(false, true);
+         });
+
+  test.do_test();
+}
+
+int
+main(int argc, char **argv)
+{
+  Utilities::MPI::MPI_InitFinalize mpi_initialization(argc, argv, 1);
+  MPILogInitAll                    all;
+
+  test<2, 1, 2, 1>(); // scalar
+  test<2, 2, 3, 1>(); // scalar
+  test<2, 3, 4, 1>(); // scalar
+  test<3, 1, 2, 1>(); // vector
+  test<3, 2, 3, 1>(); // vector
+  test<3, 3, 4, 1>(); // vector
+}
diff --git a/tests/matrix_free/compute_diagonal_03.with_mpi=true.with_p4est=true.mpirun=1.output b/tests/matrix_free/compute_diagonal_03.with_mpi=true.with_p4est=true.mpirun=1.output
new file mode 100644 (file)
index 0000000..152a0b2
--- /dev/null
@@ -0,0 +1,61 @@
+
+Process #0
+Local range: [0, 25), global size: 25
+Vector data:
+0.000e+00 0.000e+00 1.062e+01 1.130e+01 0.000e+00 1.062e+01 4.198e+01 4.393e+01 4.198e+01 0.000e+00 1.130e+01 4.393e+01 0.000e+00 1.062e+01 4.198e+01 5.333e+01 4.393e+01 4.393e+01 4.198e+01 0.000e+00 1.130e+01 0.000e+00 1.062e+01 0.000e+00 1.130e+01 
+DEAL:0::136.294
+Process #0
+Local range: [0, 25), global size: 25
+Vector data:
+0.000e+00 0.000e+00 1.062e+01 1.130e+01 0.000e+00 1.062e+01 4.198e+01 4.393e+01 4.198e+01 0.000e+00 1.130e+01 4.393e+01 0.000e+00 1.062e+01 4.198e+01 5.333e+01 4.393e+01 4.393e+01 4.198e+01 0.000e+00 1.130e+01 0.000e+00 1.062e+01 0.000e+00 1.130e+01 
+DEAL:0::136.294
+Process #0
+Local range: [0, 89), global size: 89
+Vector data:
+0.000e+00 0.000e+00 3.596e+00 6.108e+00 4.475e+00 4.209e+00 0.000e+00 1.218e+01 7.596e+00 0.000e+00 3.596e+00 4.475e+00 0.000e+00 1.218e+01 7.596e+00 5.329e+01 4.904e+01 2.420e+01 5.270e+01 7.718e+01 6.373e+01 5.329e+01 2.420e+01 7.718e+01 6.373e+01 0.000e+00 6.108e+00 0.000e+00 1.218e+01 4.209e+00 7.596e+00 4.904e+01 7.718e+01 5.270e+01 6.373e+01 0.000e+00 3.596e+00 0.000e+00 1.218e+01 4.475e+00 7.596e+00 5.329e+01 7.718e+01 2.420e+01 6.373e+01 4.978e+01 7.822e+01 7.822e+01 1.138e+02 4.904e+01 7.718e+01 7.822e+01 1.138e+02 4.904e+01 7.822e+01 7.718e+01 1.138e+02 5.329e+01 7.718e+01 7.718e+01 1.138e+02 0.000e+00 6.108e+00 4.209e+00 0.000e+00 1.218e+01 7.596e+00 0.000e+00 3.596e+00 4.475e+00 0.000e+00 1.218e+01 7.596e+00 5.270e+01 6.373e+01 2.420e+01 6.373e+01 0.000e+00 6.108e+00 0.000e+00 1.218e+01 4.209e+00 7.596e+00 5.270e+01 6.373e+01 0.000e+00 1.218e+01 7.596e+00 6.373e+01 
+DEAL:0::441.936
+Process #0
+Local range: [0, 89), global size: 89
+Vector data:
+0.000e+00 0.000e+00 3.596e+00 6.108e+00 4.475e+00 4.209e+00 0.000e+00 1.218e+01 7.596e+00 0.000e+00 3.596e+00 4.475e+00 0.000e+00 1.218e+01 7.596e+00 5.329e+01 4.904e+01 2.420e+01 5.270e+01 7.718e+01 6.373e+01 5.329e+01 2.420e+01 7.718e+01 6.373e+01 0.000e+00 6.108e+00 0.000e+00 1.218e+01 4.209e+00 7.596e+00 4.904e+01 7.718e+01 5.270e+01 6.373e+01 0.000e+00 3.596e+00 0.000e+00 1.218e+01 4.475e+00 7.596e+00 5.329e+01 7.718e+01 2.420e+01 6.373e+01 4.978e+01 7.822e+01 7.822e+01 1.138e+02 4.904e+01 7.718e+01 7.822e+01 1.138e+02 4.904e+01 7.822e+01 7.718e+01 1.138e+02 5.329e+01 7.718e+01 7.718e+01 1.138e+02 0.000e+00 6.108e+00 4.209e+00 0.000e+00 1.218e+01 7.596e+00 0.000e+00 3.596e+00 4.475e+00 0.000e+00 1.218e+01 7.596e+00 5.270e+01 6.373e+01 2.420e+01 6.373e+01 0.000e+00 6.108e+00 0.000e+00 1.218e+01 4.209e+00 7.596e+00 5.270e+01 6.373e+01 0.000e+00 1.218e+01 7.596e+00 6.373e+01 
+DEAL:0::441.936
+Process #0
+Local range: [0, 193), global size: 193
+Vector data:
+0.000e+00 0.000e+00 3.713e+00 3.388e+00 4.398e+00 4.192e+00 4.203e+00 4.008e+00 0.000e+00 0.000e+00 8.188e+00 7.415e+00 8.589e+00 8.167e+00 7.729e+00 7.297e+00 0.000e+00 3.713e+00 4.398e+00 4.192e+00 0.000e+00 0.000e+00 7.415e+00 8.188e+00 8.167e+00 8.589e+00 7.297e+00 7.729e+00 5.994e+01 4.889e+01 1.254e+01 7.532e+01 1.280e+01 7.442e+01 8.862e+01 8.316e+01 3.344e+01 2.920e+01 1.075e+02 9.766e+01 5.994e+01 1.254e+01 7.532e+01 8.316e+01 8.862e+01 2.920e+01 3.344e+01 9.766e+01 1.075e+02 0.000e+00 3.388e+00 0.000e+00 0.000e+00 8.188e+00 7.415e+00 4.203e+00 4.008e+00 8.589e+00 7.729e+00 8.167e+00 7.297e+00 4.889e+01 8.862e+01 8.316e+01 1.280e+01 7.442e+01 3.344e+01 1.075e+02 2.920e+01 9.766e+01 0.000e+00 3.713e+00 0.000e+00 0.000e+00 7.415e+00 8.188e+00 4.398e+00 4.192e+00 8.167e+00 7.297e+00 8.589e+00 7.729e+00 5.994e+01 8.316e+01 8.862e+01 1.254e+01 7.532e+01 2.920e+01 9.766e+01 3.344e+01 1.075e+02 4.952e+01 8.571e+01 8.571e+01 8.571e+01 8.571e+01 1.190e+02 1.190e+02 1.190e+02 1.190e+02 4.889e+01 8.862e+01 8.316e+01 8.571e+01 8.571e+01 1.190e+02 1.190e+02 1.190e+02 1.190e+02 4.889e+01 8.571e+01 8.571e+01 8.862e+01 8.316e+01 1.190e+02 1.190e+02 1.190e+02 1.190e+02 5.994e+01 8.316e+01 8.862e+01 8.316e+01 8.862e+01 1.190e+02 1.190e+02 1.190e+02 1.190e+02 0.000e+00 3.388e+00 4.203e+00 4.008e+00 0.000e+00 0.000e+00 8.188e+00 7.415e+00 8.589e+00 8.167e+00 7.729e+00 7.297e+00 0.000e+00 3.713e+00 4.398e+00 4.192e+00 0.000e+00 0.000e+00 7.415e+00 8.188e+00 8.167e+00 8.589e+00 7.297e+00 7.729e+00 1.280e+01 7.442e+01 3.344e+01 2.920e+01 1.075e+02 9.766e+01 1.254e+01 7.532e+01 2.920e+01 3.344e+01 9.766e+01 1.075e+02 0.000e+00 3.388e+00 0.000e+00 0.000e+00 8.188e+00 7.415e+00 4.203e+00 4.008e+00 8.589e+00 7.729e+00 8.167e+00 7.297e+00 1.280e+01 7.442e+01 3.344e+01 1.075e+02 2.920e+01 9.766e+01 0.000e+00 0.000e+00 7.415e+00 8.188e+00 8.167e+00 7.297e+00 8.589e+00 7.729e+00 2.920e+01 9.766e+01 3.344e+01 1.075e+02 
+DEAL:0::814.965
+Process #0
+Local range: [0, 193), global size: 193
+Vector data:
+0.000e+00 0.000e+00 3.713e+00 3.388e+00 4.398e+00 4.192e+00 4.203e+00 4.008e+00 0.000e+00 0.000e+00 8.188e+00 7.415e+00 8.589e+00 8.167e+00 7.729e+00 7.297e+00 0.000e+00 3.713e+00 4.398e+00 4.192e+00 0.000e+00 0.000e+00 7.415e+00 8.188e+00 8.167e+00 8.589e+00 7.297e+00 7.729e+00 5.994e+01 4.889e+01 1.254e+01 7.532e+01 1.280e+01 7.442e+01 8.862e+01 8.316e+01 3.344e+01 2.920e+01 1.075e+02 9.766e+01 5.994e+01 1.254e+01 7.532e+01 8.316e+01 8.862e+01 2.920e+01 3.344e+01 9.766e+01 1.075e+02 0.000e+00 3.388e+00 0.000e+00 0.000e+00 8.188e+00 7.415e+00 4.203e+00 4.008e+00 8.589e+00 7.729e+00 8.167e+00 7.297e+00 4.889e+01 8.862e+01 8.316e+01 1.280e+01 7.442e+01 3.344e+01 1.075e+02 2.920e+01 9.766e+01 0.000e+00 3.713e+00 0.000e+00 0.000e+00 7.415e+00 8.188e+00 4.398e+00 4.192e+00 8.167e+00 7.297e+00 8.589e+00 7.729e+00 5.994e+01 8.316e+01 8.862e+01 1.254e+01 7.532e+01 2.920e+01 9.766e+01 3.344e+01 1.075e+02 4.952e+01 8.571e+01 8.571e+01 8.571e+01 8.571e+01 1.190e+02 1.190e+02 1.190e+02 1.190e+02 4.889e+01 8.862e+01 8.316e+01 8.571e+01 8.571e+01 1.190e+02 1.190e+02 1.190e+02 1.190e+02 4.889e+01 8.571e+01 8.571e+01 8.862e+01 8.316e+01 1.190e+02 1.190e+02 1.190e+02 1.190e+02 5.994e+01 8.316e+01 8.862e+01 8.316e+01 8.862e+01 1.190e+02 1.190e+02 1.190e+02 1.190e+02 0.000e+00 3.388e+00 4.203e+00 4.008e+00 0.000e+00 0.000e+00 8.188e+00 7.415e+00 8.589e+00 8.167e+00 7.729e+00 7.297e+00 0.000e+00 3.713e+00 4.398e+00 4.192e+00 0.000e+00 0.000e+00 7.415e+00 8.188e+00 8.167e+00 8.589e+00 7.297e+00 7.729e+00 1.280e+01 7.442e+01 3.344e+01 2.920e+01 1.075e+02 9.766e+01 1.254e+01 7.532e+01 2.920e+01 3.344e+01 9.766e+01 1.075e+02 0.000e+00 3.388e+00 0.000e+00 0.000e+00 8.188e+00 7.415e+00 4.203e+00 4.008e+00 8.589e+00 7.729e+00 8.167e+00 7.297e+00 1.280e+01 7.442e+01 3.344e+01 1.075e+02 2.920e+01 9.766e+01 0.000e+00 0.000e+00 7.415e+00 8.188e+00 8.167e+00 7.297e+00 8.589e+00 7.729e+00 2.920e+01 9.766e+01 3.344e+01 1.075e+02 
+DEAL:0::814.965
+Process #0
+Local range: [0, 79), global size: 79
+Vector data:
+9.034e+00 9.932e+00 9.932e+00 1.399e+01 9.932e+00 1.399e+01 1.399e+01 1.127e+01 9.034e+00 9.932e+00 9.932e+00 1.399e+01 9.034e+00 9.932e+00 9.932e+00 1.399e+01 9.034e+00 9.932e+00 9.034e+00 9.932e+00 9.932e+00 1.399e+01 9.034e+00 9.932e+00 9.034e+00 9.932e+00 9.034e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 1.773e+00 3.895e+00 3.895e+00 6.465e+00 0.000e+00 0.000e+00 1.773e+00 3.895e+00 0.000e+00 0.000e+00 1.773e+00 3.895e+00 0.000e+00 1.773e+00 0.000e+00 0.000e+00 3.895e+00 6.465e+00 0.000e+00 3.895e+00 0.000e+00 0.000e+00 1.773e+00 3.895e+00 0.000e+00 1.773e+00 0.000e+00 0.000e+00 1.773e+00 3.895e+00 0.000e+00 0.000e+00 3.895e+00 6.465e+00 0.000e+00 0.000e+00 1.773e+00 3.895e+00 0.000e+00 3.895e+00 0.000e+00 6.465e+00 0.000e+00 3.895e+00 0.000e+00 6.465e+00 0.000e+00 6.465e+00 
+DEAL:0::59.9730
+Process #0
+Local range: [0, 79), global size: 79
+Vector data:
+9.034e+00 9.932e+00 9.932e+00 1.399e+01 9.932e+00 1.399e+01 1.399e+01 1.127e+01 9.034e+00 9.932e+00 9.932e+00 1.399e+01 9.034e+00 9.932e+00 9.932e+00 1.399e+01 9.034e+00 9.932e+00 9.034e+00 9.932e+00 9.932e+00 1.399e+01 9.034e+00 9.932e+00 9.034e+00 9.932e+00 9.034e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 1.773e+00 3.895e+00 3.895e+00 6.465e+00 0.000e+00 0.000e+00 1.773e+00 3.895e+00 0.000e+00 0.000e+00 1.773e+00 3.895e+00 0.000e+00 1.773e+00 0.000e+00 0.000e+00 3.895e+00 6.465e+00 0.000e+00 3.895e+00 0.000e+00 0.000e+00 1.773e+00 3.895e+00 0.000e+00 1.773e+00 0.000e+00 0.000e+00 1.773e+00 3.895e+00 0.000e+00 0.000e+00 3.895e+00 6.465e+00 0.000e+00 0.000e+00 1.773e+00 3.895e+00 0.000e+00 3.895e+00 0.000e+00 6.465e+00 0.000e+00 3.895e+00 0.000e+00 6.465e+00 0.000e+00 6.465e+00 
+DEAL:0::59.9730
+Process #0
+Local range: [0, 517), global size: 517
+Vector data:
+4.738e+00 4.681e+00 4.681e+00 5.014e+00 4.681e+00 5.014e+00 5.014e+00 4.208e+00 8.217e+00 8.110e+00 8.217e+00 8.110e+00 8.110e+00 7.213e+00 8.110e+00 7.213e+00 8.217e+00 8.110e+00 8.110e+00 7.213e+00 1.302e+01 1.202e+01 1.302e+01 1.202e+01 1.302e+01 1.202e+01 1.924e+01 4.738e+00 4.681e+00 4.681e+00 5.014e+00 8.217e+00 8.217e+00 8.110e+00 8.110e+00 8.110e+00 7.213e+00 8.217e+00 8.110e+00 1.302e+01 1.302e+01 1.202e+01 1.302e+01 1.202e+01 1.924e+01 4.738e+00 4.681e+00 4.681e+00 5.014e+00 8.217e+00 8.110e+00 8.217e+00 8.110e+00 7.213e+00 8.110e+00 8.217e+00 8.110e+00 1.302e+01 1.202e+01 1.302e+01 1.302e+01 1.202e+01 1.924e+01 4.738e+00 4.681e+00 8.217e+00 8.217e+00 8.110e+00 8.110e+00 8.217e+00 1.302e+01 1.302e+01 1.302e+01 1.202e+01 1.924e+01 4.738e+00 4.681e+00 4.681e+00 5.014e+00 8.217e+00 8.110e+00 8.217e+00 8.110e+00 8.217e+00 8.110e+00 8.110e+00 7.213e+00 1.302e+01 1.202e+01 1.302e+01 1.202e+01 1.302e+01 1.924e+01 4.738e+00 4.681e+00 8.217e+00 8.217e+00 8.110e+00 8.217e+00 8.110e+00 1.302e+01 1.302e+01 1.202e+01 1.302e+01 1.924e+01 4.738e+00 4.681e+00 8.217e+00 8.110e+00 8.217e+00 8.217e+00 8.110e+00 1.302e+01 1.202e+01 1.302e+01 1.302e+01 1.924e+01 4.738e+00 8.217e+00 8.217e+00 8.217e+00 1.302e+01 1.302e+01 1.302e+01 1.924e+01 0.000e+00 0.000e+00 0.000e+00 0.000e+00 5.789e-01 6.846e-01 6.846e-01 7.172e-01 0.000e+00 0.000e+00 0.000e+00 0.000e+00 1.267e+00 1.322e+00 1.267e+00 1.322e+00 7.197e-01 8.387e-01 8.387e-01 9.188e-01 1.409e+00 1.575e+00 1.409e+00 1.575e+00 0.000e+00 2.430e+00 2.610e+00 0.000e+00 0.000e+00 5.789e-01 6.846e-01 0.000e+00 0.000e+00 0.000e+00 1.267e+00 1.267e+00 1.322e+00 7.197e-01 8.387e-01 1.409e+00 1.409e+00 1.575e+00 0.000e+00 2.430e+00 2.610e+00 0.000e+00 0.000e+00 5.789e-01 6.846e-01 0.000e+00 0.000e+00 0.000e+00 1.267e+00 1.322e+00 1.267e+00 7.197e-01 8.387e-01 1.409e+00 1.575e+00 1.409e+00 0.000e+00 2.430e+00 2.610e+00 0.000e+00 5.789e-01 0.000e+00 0.000e+00 1.267e+00 1.267e+00 7.197e-01 1.409e+00 1.409e+00 0.000e+00 2.430e+00 2.610e+00 7.901e+00 8.137e+00 8.137e+00 9.473e+00 1.303e+01 1.521e+01 1.303e+01 1.521e+01 2.375e+01 7.901e+00 8.137e+00 1.303e+01 1.303e+01 1.521e+01 2.375e+01 7.901e+00 8.137e+00 1.303e+01 1.521e+01 1.303e+01 2.375e+01 7.901e+00 1.303e+01 1.303e+01 2.375e+01 0.000e+00 0.000e+00 6.846e-01 7.172e-01 8.387e-01 9.188e-01 0.000e+00 1.322e+00 0.000e+00 0.000e+00 1.267e+00 1.322e+00 1.409e+00 1.575e+00 0.000e+00 2.430e+00 1.575e+00 2.610e+00 0.000e+00 6.846e-01 8.387e-01 0.000e+00 1.322e+00 0.000e+00 1.267e+00 1.409e+00 0.000e+00 2.430e+00 1.575e+00 2.610e+00 8.137e+00 9.473e+00 1.303e+01 1.521e+01 1.521e+01 2.375e+01 8.137e+00 1.303e+01 1.521e+01 2.375e+01 0.000e+00 0.000e+00 5.789e-01 6.846e-01 7.197e-01 8.387e-01 0.000e+00 1.267e+00 0.000e+00 0.000e+00 1.267e+00 1.322e+00 1.409e+00 1.575e+00 0.000e+00 2.430e+00 1.409e+00 2.610e+00 0.000e+00 5.789e-01 7.197e-01 0.000e+00 1.267e+00 0.000e+00 1.267e+00 1.409e+00 0.000e+00 2.430e+00 1.409e+00 2.610e+00 7.901e+00 8.137e+00 1.303e+01 1.521e+01 1.303e+01 2.375e+01 7.901e+00 1.303e+01 1.303e+01 2.375e+01 0.000e+00 0.000e+00 5.789e-01 6.846e-01 0.000e+00 0.000e+00 6.846e-01 7.172e-01 7.197e-01 8.387e-01 0.000e+00 1.267e+00 8.387e-01 9.188e-01 0.000e+00 1.322e+00 0.000e+00 0.000e+00 1.267e+00 1.322e+00 1.409e+00 1.575e+00 0.000e+00 2.430e+00 1.409e+00 1.575e+00 2.610e+00 0.000e+00 1.267e+00 0.000e+00 1.322e+00 0.000e+00 2.430e+00 1.409e+00 1.575e+00 2.610e+00 7.901e+00 8.137e+00 8.137e+00 9.473e+00 1.303e+01 1.521e+01 1.303e+01 1.521e+01 2.375e+01 1.303e+01 1.521e+01 2.375e+01 0.000e+00 0.000e+00 5.789e-01 6.846e-01 7.197e-01 8.387e-01 0.000e+00 1.267e+00 0.000e+00 0.000e+00 1.267e+00 1.322e+00 1.409e+00 1.575e+00 0.000e+00 2.430e+00 1.409e+00 2.610e+00 0.000e+00 1.267e+00 0.000e+00 2.430e+00 1.409e+00 2.610e+00 7.901e+00 8.137e+00 1.303e+01 1.521e+01 1.303e+01 2.375e+01 1.303e+01 2.375e+01 0.000e+00 6.846e-01 0.000e+00 7.172e-01 0.000e+00 1.322e+00 8.387e-01 9.188e-01 0.000e+00 1.267e+00 0.000e+00 1.322e+00 0.000e+00 2.430e+00 1.409e+00 1.575e+00 1.575e+00 2.610e+00 8.137e+00 9.473e+00 1.303e+01 1.521e+01 1.521e+01 2.375e+01 0.000e+00 6.846e-01 0.000e+00 1.322e+00 8.387e-01 0.000e+00 1.267e+00 0.000e+00 2.430e+00 1.409e+00 1.575e+00 2.610e+00 8.137e+00 1.303e+01 1.521e+01 2.375e+01 0.000e+00 1.267e+00 0.000e+00 1.322e+00 0.000e+00 2.430e+00 1.409e+00 1.575e+00 2.610e+00 1.303e+01 1.521e+01 2.375e+01 0.000e+00 1.267e+00 0.000e+00 2.430e+00 1.409e+00 2.610e+00 1.303e+01 2.375e+01 0.000e+00 7.172e-01 9.188e-01 0.000e+00 1.322e+00 0.000e+00 1.322e+00 1.575e+00 0.000e+00 2.430e+00 1.575e+00 2.610e+00 0.000e+00 1.322e+00 0.000e+00 2.430e+00 1.575e+00 2.610e+00 9.473e+00 1.521e+01 1.521e+01 2.375e+01 1.521e+01 2.375e+01 0.000e+00 1.322e+00 1.575e+00 0.000e+00 2.430e+00 2.610e+00 0.000e+00 2.430e+00 2.610e+00 1.521e+01 2.375e+01 2.375e+01 0.000e+00 7.172e-01 0.000e+00 1.322e+00 9.188e-01 0.000e+00 1.322e+00 0.000e+00 2.430e+00 1.575e+00 1.575e+00 2.610e+00 9.473e+00 1.521e+01 1.521e+01 2.375e+01 0.000e+00 1.322e+00 0.000e+00 2.430e+00 1.575e+00 2.610e+00 1.521e+01 2.375e+01 0.000e+00 1.322e+00 0.000e+00 2.430e+00 1.575e+00 2.610e+00 1.521e+01 2.375e+01 0.000e+00 2.430e+00 2.610e+00 2.375e+01 
+DEAL:0::195.948
+Process #0
+Local range: [0, 517), global size: 517
+Vector data:
+4.738e+00 4.681e+00 4.681e+00 5.014e+00 4.681e+00 5.014e+00 5.014e+00 4.208e+00 8.217e+00 8.110e+00 8.217e+00 8.110e+00 8.110e+00 7.213e+00 8.110e+00 7.213e+00 8.217e+00 8.110e+00 8.110e+00 7.213e+00 1.302e+01 1.202e+01 1.302e+01 1.202e+01 1.302e+01 1.202e+01 1.924e+01 4.738e+00 4.681e+00 4.681e+00 5.014e+00 8.217e+00 8.217e+00 8.110e+00 8.110e+00 8.110e+00 7.213e+00 8.217e+00 8.110e+00 1.302e+01 1.302e+01 1.202e+01 1.302e+01 1.202e+01 1.924e+01 4.738e+00 4.681e+00 4.681e+00 5.014e+00 8.217e+00 8.110e+00 8.217e+00 8.110e+00 7.213e+00 8.110e+00 8.217e+00 8.110e+00 1.302e+01 1.202e+01 1.302e+01 1.302e+01 1.202e+01 1.924e+01 4.738e+00 4.681e+00 8.217e+00 8.217e+00 8.110e+00 8.110e+00 8.217e+00 1.302e+01 1.302e+01 1.302e+01 1.202e+01 1.924e+01 4.738e+00 4.681e+00 4.681e+00 5.014e+00 8.217e+00 8.110e+00 8.217e+00 8.110e+00 8.217e+00 8.110e+00 8.110e+00 7.213e+00 1.302e+01 1.202e+01 1.302e+01 1.202e+01 1.302e+01 1.924e+01 4.738e+00 4.681e+00 8.217e+00 8.217e+00 8.110e+00 8.217e+00 8.110e+00 1.302e+01 1.302e+01 1.202e+01 1.302e+01 1.924e+01 4.738e+00 4.681e+00 8.217e+00 8.110e+00 8.217e+00 8.217e+00 8.110e+00 1.302e+01 1.202e+01 1.302e+01 1.302e+01 1.924e+01 4.738e+00 8.217e+00 8.217e+00 8.217e+00 1.302e+01 1.302e+01 1.302e+01 1.924e+01 0.000e+00 0.000e+00 0.000e+00 0.000e+00 5.789e-01 6.846e-01 6.846e-01 7.172e-01 0.000e+00 0.000e+00 0.000e+00 0.000e+00 1.267e+00 1.322e+00 1.267e+00 1.322e+00 7.197e-01 8.387e-01 8.387e-01 9.188e-01 1.409e+00 1.575e+00 1.409e+00 1.575e+00 0.000e+00 2.430e+00 2.610e+00 0.000e+00 0.000e+00 5.789e-01 6.846e-01 0.000e+00 0.000e+00 0.000e+00 1.267e+00 1.267e+00 1.322e+00 7.197e-01 8.387e-01 1.409e+00 1.409e+00 1.575e+00 0.000e+00 2.430e+00 2.610e+00 0.000e+00 0.000e+00 5.789e-01 6.846e-01 0.000e+00 0.000e+00 0.000e+00 1.267e+00 1.322e+00 1.267e+00 7.197e-01 8.387e-01 1.409e+00 1.575e+00 1.409e+00 0.000e+00 2.430e+00 2.610e+00 0.000e+00 5.789e-01 0.000e+00 0.000e+00 1.267e+00 1.267e+00 7.197e-01 1.409e+00 1.409e+00 0.000e+00 2.430e+00 2.610e+00 7.901e+00 8.137e+00 8.137e+00 9.473e+00 1.303e+01 1.521e+01 1.303e+01 1.521e+01 2.375e+01 7.901e+00 8.137e+00 1.303e+01 1.303e+01 1.521e+01 2.375e+01 7.901e+00 8.137e+00 1.303e+01 1.521e+01 1.303e+01 2.375e+01 7.901e+00 1.303e+01 1.303e+01 2.375e+01 0.000e+00 0.000e+00 6.846e-01 7.172e-01 8.387e-01 9.188e-01 0.000e+00 1.322e+00 0.000e+00 0.000e+00 1.267e+00 1.322e+00 1.409e+00 1.575e+00 0.000e+00 2.430e+00 1.575e+00 2.610e+00 0.000e+00 6.846e-01 8.387e-01 0.000e+00 1.322e+00 0.000e+00 1.267e+00 1.409e+00 0.000e+00 2.430e+00 1.575e+00 2.610e+00 8.137e+00 9.473e+00 1.303e+01 1.521e+01 1.521e+01 2.375e+01 8.137e+00 1.303e+01 1.521e+01 2.375e+01 0.000e+00 0.000e+00 5.789e-01 6.846e-01 7.197e-01 8.387e-01 0.000e+00 1.267e+00 0.000e+00 0.000e+00 1.267e+00 1.322e+00 1.409e+00 1.575e+00 0.000e+00 2.430e+00 1.409e+00 2.610e+00 0.000e+00 5.789e-01 7.197e-01 0.000e+00 1.267e+00 0.000e+00 1.267e+00 1.409e+00 0.000e+00 2.430e+00 1.409e+00 2.610e+00 7.901e+00 8.137e+00 1.303e+01 1.521e+01 1.303e+01 2.375e+01 7.901e+00 1.303e+01 1.303e+01 2.375e+01 0.000e+00 0.000e+00 5.789e-01 6.846e-01 0.000e+00 0.000e+00 6.846e-01 7.172e-01 7.197e-01 8.387e-01 0.000e+00 1.267e+00 8.387e-01 9.188e-01 0.000e+00 1.322e+00 0.000e+00 0.000e+00 1.267e+00 1.322e+00 1.409e+00 1.575e+00 0.000e+00 2.430e+00 1.409e+00 1.575e+00 2.610e+00 0.000e+00 1.267e+00 0.000e+00 1.322e+00 0.000e+00 2.430e+00 1.409e+00 1.575e+00 2.610e+00 7.901e+00 8.137e+00 8.137e+00 9.473e+00 1.303e+01 1.521e+01 1.303e+01 1.521e+01 2.375e+01 1.303e+01 1.521e+01 2.375e+01 0.000e+00 0.000e+00 5.789e-01 6.846e-01 7.197e-01 8.387e-01 0.000e+00 1.267e+00 0.000e+00 0.000e+00 1.267e+00 1.322e+00 1.409e+00 1.575e+00 0.000e+00 2.430e+00 1.409e+00 2.610e+00 0.000e+00 1.267e+00 0.000e+00 2.430e+00 1.409e+00 2.610e+00 7.901e+00 8.137e+00 1.303e+01 1.521e+01 1.303e+01 2.375e+01 1.303e+01 2.375e+01 0.000e+00 6.846e-01 0.000e+00 7.172e-01 0.000e+00 1.322e+00 8.387e-01 9.188e-01 0.000e+00 1.267e+00 0.000e+00 1.322e+00 0.000e+00 2.430e+00 1.409e+00 1.575e+00 1.575e+00 2.610e+00 8.137e+00 9.473e+00 1.303e+01 1.521e+01 1.521e+01 2.375e+01 0.000e+00 6.846e-01 0.000e+00 1.322e+00 8.387e-01 0.000e+00 1.267e+00 0.000e+00 2.430e+00 1.409e+00 1.575e+00 2.610e+00 8.137e+00 1.303e+01 1.521e+01 2.375e+01 0.000e+00 1.267e+00 0.000e+00 1.322e+00 0.000e+00 2.430e+00 1.409e+00 1.575e+00 2.610e+00 1.303e+01 1.521e+01 2.375e+01 0.000e+00 1.267e+00 0.000e+00 2.430e+00 1.409e+00 2.610e+00 1.303e+01 2.375e+01 0.000e+00 7.172e-01 9.188e-01 0.000e+00 1.322e+00 0.000e+00 1.322e+00 1.575e+00 0.000e+00 2.430e+00 1.575e+00 2.610e+00 0.000e+00 1.322e+00 0.000e+00 2.430e+00 1.575e+00 2.610e+00 9.473e+00 1.521e+01 1.521e+01 2.375e+01 1.521e+01 2.375e+01 0.000e+00 1.322e+00 1.575e+00 0.000e+00 2.430e+00 2.610e+00 0.000e+00 2.430e+00 2.610e+00 1.521e+01 2.375e+01 2.375e+01 0.000e+00 7.172e-01 0.000e+00 1.322e+00 9.188e-01 0.000e+00 1.322e+00 0.000e+00 2.430e+00 1.575e+00 1.575e+00 2.610e+00 9.473e+00 1.521e+01 1.521e+01 2.375e+01 0.000e+00 1.322e+00 0.000e+00 2.430e+00 1.575e+00 2.610e+00 1.521e+01 2.375e+01 0.000e+00 1.322e+00 0.000e+00 2.430e+00 1.575e+00 2.610e+00 1.521e+01 2.375e+01 0.000e+00 2.430e+00 2.610e+00 2.375e+01 
+DEAL:0::195.948
+Process #0
+Local range: [0, 1651), global size: 1651
+Vector data:
+2.656e+00 2.581e+00 2.581e+00 2.698e+00 2.581e+00 2.698e+00 2.698e+00 2.243e+00 5.405e+00 5.382e+00 4.908e+00 5.006e+00 5.405e+00 5.382e+00 4.908e+00 5.006e+00 4.908e+00 5.006e+00 4.457e+00 4.457e+00 4.908e+00 5.006e+00 4.457e+00 4.457e+00 5.405e+00 5.382e+00 4.908e+00 5.006e+00 4.908e+00 5.006e+00 4.457e+00 4.457e+00 8.932e+00 8.732e+00 8.732e+00 8.600e+00 8.266e+00 8.266e+00 8.266e+00 8.266e+00 8.932e+00 8.732e+00 8.732e+00 8.600e+00 8.266e+00 8.266e+00 8.266e+00 8.266e+00 8.932e+00 8.732e+00 8.732e+00 8.600e+00 8.266e+00 8.266e+00 8.266e+00 8.266e+00 1.348e+01 1.348e+01 1.348e+01 1.348e+01 1.348e+01 1.348e+01 1.348e+01 1.348e+01 2.656e+00 2.581e+00 2.581e+00 2.698e+00 5.405e+00 5.382e+00 5.382e+00 5.405e+00 5.006e+00 4.908e+00 4.908e+00 5.006e+00 5.006e+00 4.908e+00 4.457e+00 4.457e+00 5.405e+00 5.382e+00 4.908e+00 5.006e+00 8.932e+00 8.732e+00 8.732e+00 8.600e+00 8.732e+00 8.600e+00 8.932e+00 8.732e+00 8.266e+00 8.266e+00 8.266e+00 8.266e+00 8.732e+00 8.932e+00 8.600e+00 8.732e+00 8.266e+00 8.266e+00 8.266e+00 8.266e+00 1.348e+01 1.348e+01 1.348e+01 1.348e+01 1.348e+01 1.348e+01 1.348e+01 1.348e+01 2.656e+00 2.581e+00 2.581e+00 2.698e+00 5.382e+00 5.405e+00 5.006e+00 4.908e+00 5.405e+00 5.382e+00 5.006e+00 4.908e+00 4.457e+00 4.457e+00 4.908e+00 5.006e+00 5.405e+00 5.382e+00 4.908e+00 5.006e+00 8.732e+00 8.932e+00 8.600e+00 8.732e+00 8.266e+00 8.266e+00 8.266e+00 8.266e+00 8.932e+00 8.732e+00 8.732e+00 8.600e+00 8.732e+00 8.600e+00 8.932e+00 8.732e+00 8.266e+00 8.266e+00 8.266e+00 8.266e+00 1.348e+01 1.348e+01 1.348e+01 1.348e+01 1.348e+01 1.348e+01 1.348e+01 1.348e+01 2.656e+00 2.581e+00 5.382e+00 5.405e+00 5.382e+00 5.405e+00 5.006e+00 4.908e+00 5.006e+00 4.908e+00 5.405e+00 5.382e+00 8.732e+00 8.932e+00 8.600e+00 8.732e+00 8.732e+00 8.600e+00 8.932e+00 8.732e+00 8.600e+00 8.732e+00 8.732e+00 8.932e+00 8.266e+00 8.266e+00 8.266e+00 8.266e+00 1.348e+01 1.348e+01 1.348e+01 1.348e+01 1.348e+01 1.348e+01 1.348e+01 1.348e+01 2.656e+00 2.581e+00 2.581e+00 2.698e+00 5.405e+00 5.382e+00 4.908e+00 5.006e+00 5.405e+00 5.382e+00 4.908e+00 5.006e+00 5.382e+00 5.405e+00 5.006e+00 4.908e+00 5.006e+00 4.908e+00 4.457e+00 4.457e+00 8.732e+00 8.600e+00 8.932e+00 8.732e+00 8.266e+00 8.266e+00 8.266e+00 8.266e+00 8.732e+00 8.932e+00 8.600e+00 8.732e+00 8.266e+00 8.266e+00 8.266e+00 8.266e+00 8.932e+00 8.732e+00 8.732e+00 8.600e+00 1.348e+01 1.348e+01 1.348e+01 1.348e+01 1.348e+01 1.348e+01 1.348e+01 1.348e+01 2.656e+00 2.581e+00 5.405e+00 5.382e+00 5.382e+00 5.405e+00 5.006e+00 4.908e+00 5.382e+00 5.405e+00 5.006e+00 4.908e+00 8.732e+00 8.600e+00 8.932e+00 8.732e+00 8.600e+00 8.732e+00 8.732e+00 8.932e+00 8.266e+00 8.266e+00 8.266e+00 8.266e+00 8.732e+00 8.932e+00 8.600e+00 8.732e+00 1.348e+01 1.348e+01 1.348e+01 1.348e+01 1.348e+01 1.348e+01 1.348e+01 1.348e+01 2.656e+00 2.581e+00 5.382e+00 5.405e+00 5.006e+00 4.908e+00 5.405e+00 5.382e+00 5.382e+00 5.405e+00 5.006e+00 4.908e+00 8.600e+00 8.732e+00 8.732e+00 8.932e+00 8.266e+00 8.266e+00 8.266e+00 8.266e+00 8.732e+00 8.932e+00 8.600e+00 8.732e+00 8.732e+00 8.600e+00 8.932e+00 8.732e+00 1.348e+01 1.348e+01 1.348e+01 1.348e+01 1.348e+01 1.348e+01 1.348e+01 1.348e+01 2.656e+00 5.382e+00 5.405e+00 5.382e+00 5.405e+00 5.382e+00 5.405e+00 8.600e+00 8.732e+00 8.732e+00 8.932e+00 8.600e+00 8.732e+00 8.732e+00 8.932e+00 8.600e+00 8.732e+00 8.732e+00 8.932e+00 1.348e+01 1.348e+01 1.348e+01 1.348e+01 1.348e+01 1.348e+01 1.348e+01 1.348e+01 0.000e+00 0.000e+00 0.000e+00 0.000e+00 2.219e-01 2.563e-01 2.563e-01 3.785e-01 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 5.337e-01 5.294e-01 7.525e-01 7.764e-01 5.337e-01 5.294e-01 7.525e-01 7.764e-01 4.549e-01 4.165e-01 5.124e-01 4.459e-01 5.124e-01 4.459e-01 5.666e-01 4.891e-01 9.758e-01 9.869e-01 8.404e-01 8.382e-01 1.105e+00 1.135e+00 9.273e-01 9.462e-01 9.758e-01 8.404e-01 9.869e-01 8.382e-01 1.105e+00 9.273e-01 1.135e+00 9.462e-01 0.000e+00 0.000e+00 0.000e+00 0.000e+00 1.495e+00 1.506e+00 1.506e+00 1.536e+00 1.955e+00 2.024e+00 2.024e+00 2.111e+00 1.588e+00 1.617e+00 1.617e+00 1.666e+00 0.000e+00 0.000e+00 2.219e-01 2.563e-01 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 5.337e-01 5.294e-01 5.294e-01 5.337e-01 7.764e-01 7.525e-01 4.549e-01 4.165e-01 5.124e-01 4.459e-01 9.758e-01 9.869e-01 8.404e-01 8.382e-01 9.869e-01 8.382e-01 9.758e-01 8.404e-01 1.135e+00 9.462e-01 1.105e+00 9.273e-01 0.000e+00 0.000e+00 0.000e+00 0.000e+00 1.506e+00 1.495e+00 1.536e+00 1.506e+00 2.024e+00 1.955e+00 2.111e+00 2.024e+00 1.617e+00 1.588e+00 1.666e+00 1.617e+00 0.000e+00 0.000e+00 2.219e-01 2.563e-01 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 5.294e-01 5.337e-01 7.764e-01 7.525e-01 5.337e-01 5.294e-01 4.549e-01 4.165e-01 5.124e-01 4.459e-01 9.869e-01 9.758e-01 8.382e-01 8.404e-01 1.135e+00 1.105e+00 9.462e-01 9.273e-01 9.758e-01 8.404e-01 9.869e-01 8.382e-01 0.000e+00 0.000e+00 0.000e+00 0.000e+00 1.506e+00 1.536e+00 1.495e+00 1.506e+00 2.024e+00 2.111e+00 1.955e+00 2.024e+00 1.617e+00 1.666e+00 1.588e+00 1.617e+00 0.000e+00 2.219e-01 0.000e+00 0.000e+00 0.000e+00 0.000e+00 5.294e-01 5.337e-01 5.294e-01 5.337e-01 4.549e-01 4.165e-01 9.869e-01 9.758e-01 8.382e-01 8.404e-01 9.869e-01 8.382e-01 9.758e-01 8.404e-01 0.000e+00 0.000e+00 0.000e+00 0.000e+00 1.536e+00 1.506e+00 1.506e+00 1.495e+00 2.111e+00 2.024e+00 2.024e+00 1.955e+00 1.666e+00 1.617e+00 1.617e+00 1.588e+00 5.564e-01 6.321e+00 1.030e+00 6.104e+00 1.030e+00 6.104e+00 5.850e+00 7.429e+00 2.051e+00 2.158e+00 1.103e+01 1.101e+01 7.963e+00 1.039e+01 1.239e+01 1.294e+01 2.051e+00 1.103e+01 2.158e+00 1.101e+01 7.963e+00 1.239e+01 1.039e+01 1.294e+01 7.242e+00 1.085e+01 1.085e+01 1.575e+01 1.983e+01 1.952e+01 1.952e+01 1.961e+01 5.564e-01 6.321e+00 1.030e+00 6.104e+00 2.051e+00 2.158e+00 1.103e+01 1.101e+01 2.158e+00 1.101e+01 2.051e+00 1.103e+01 1.039e+01 1.294e+01 7.963e+00 1.239e+01 1.085e+01 7.242e+00 1.575e+01 1.085e+01 1.952e+01 1.983e+01 1.961e+01 1.952e+01 5.564e-01 6.321e+00 1.030e+00 6.104e+00 2.158e+00 2.051e+00 1.101e+01 1.103e+01 1.039e+01 7.963e+00 1.294e+01 1.239e+01 2.051e+00 1.103e+01 2.158e+00 1.101e+01 1.085e+01 1.575e+01 7.242e+00 1.085e+01 1.952e+01 1.961e+01 1.983e+01 1.952e+01 5.564e-01 6.321e+00 2.158e+00 2.051e+00 1.101e+01 1.103e+01 2.158e+00 1.101e+01 2.051e+00 1.103e+01 1.575e+01 1.085e+01 1.085e+01 7.242e+00 1.961e+01 1.952e+01 1.952e+01 1.983e+01 0.000e+00 0.000e+00 2.563e-01 3.785e-01 5.124e-01 4.459e-01 5.666e-01 4.891e-01 0.000e+00 0.000e+00 7.525e-01 7.764e-01 0.000e+00 0.000e+00 0.000e+00 0.000e+00 5.337e-01 5.294e-01 7.525e-01 7.764e-01 9.758e-01 8.404e-01 9.869e-01 8.382e-01 1.105e+00 9.273e-01 1.135e+00 9.462e-01 0.000e+00 0.000e+00 0.000e+00 0.000e+00 1.495e+00 1.506e+00 1.506e+00 1.536e+00 1.105e+00 1.135e+00 9.273e-01 9.462e-01 1.955e+00 2.024e+00 1.588e+00 1.617e+00 2.024e+00 2.111e+00 1.617e+00 1.666e+00 0.000e+00 2.563e-01 5.124e-01 4.459e-01 0.000e+00 0.000e+00 7.764e-01 7.525e-01 0.000e+00 0.000e+00 5.337e-01 5.294e-01 9.758e-01 8.404e-01 9.869e-01 8.382e-01 0.000e+00 0.000e+00 0.000e+00 0.000e+00 1.506e+00 1.536e+00 1.495e+00 1.506e+00 1.135e+00 1.105e+00 9.462e-01 9.273e-01 2.024e+00 1.955e+00 1.617e+00 1.588e+00 2.111e+00 2.024e+00 1.666e+00 1.617e+00 1.030e+00 6.104e+00 5.850e+00 7.429e+00 2.051e+00 1.103e+01 2.158e+00 1.101e+01 7.963e+00 1.239e+01 1.039e+01 1.294e+01 7.963e+00 1.039e+01 1.239e+01 1.294e+01 7.242e+00 1.085e+01 1.983e+01 1.952e+01 1.085e+01 1.575e+01 1.952e+01 1.961e+01 1.030e+00 6.104e+00 2.051e+00 1.103e+01 2.158e+00 1.101e+01 1.039e+01 7.963e+00 1.294e+01 1.239e+01 1.085e+01 7.242e+00 1.952e+01 1.983e+01 1.575e+01 1.085e+01 1.961e+01 1.952e+01 0.000e+00 0.000e+00 2.219e-01 2.563e-01 4.549e-01 4.165e-01 5.124e-01 4.459e-01 0.000e+00 0.000e+00 5.337e-01 5.294e-01 0.000e+00 0.000e+00 0.000e+00 0.000e+00 5.294e-01 5.337e-01 7.764e-01 7.525e-01 9.869e-01 8.382e-01 9.758e-01 8.404e-01 1.135e+00 9.462e-01 1.105e+00 9.273e-01 0.000e+00 0.000e+00 0.000e+00 0.000e+00 1.506e+00 1.495e+00 1.536e+00 1.506e+00 9.758e-01 9.869e-01 8.404e-01 8.382e-01 2.024e+00 2.111e+00 1.617e+00 1.666e+00 1.955e+00 2.024e+00 1.588e+00 1.617e+00 0.000e+00 2.219e-01 4.549e-01 4.165e-01 0.000e+00 0.000e+00 5.294e-01 5.337e-01 0.000e+00 0.000e+00 5.294e-01 5.337e-01 9.869e-01 8.382e-01 9.758e-01 8.404e-01 0.000e+00 0.000e+00 0.000e+00 0.000e+00 1.536e+00 1.506e+00 1.506e+00 1.495e+00 9.869e-01 9.758e-01 8.382e-01 8.404e-01 2.111e+00 2.024e+00 1.666e+00 1.617e+00 2.024e+00 1.955e+00 1.617e+00 1.588e+00 5.564e-01 6.321e+00 1.030e+00 6.104e+00 2.158e+00 1.101e+01 2.051e+00 1.103e+01 1.039e+01 1.294e+01 7.963e+00 1.239e+01 2.051e+00 2.158e+00 1.103e+01 1.101e+01 1.085e+01 1.575e+01 1.952e+01 1.961e+01 7.242e+00 1.085e+01 1.983e+01 1.952e+01 5.564e-01 6.321e+00 2.158e+00 1.101e+01 2.051e+00 1.103e+01 2.158e+00 2.051e+00 1.101e+01 1.103e+01 1.575e+01 1.085e+01 1.961e+01 1.952e+01 1.085e+01 7.242e+00 1.952e+01 1.983e+01 0.000e+00 0.000e+00 2.219e-01 2.563e-01 0.000e+00 0.000e+00 2.563e-01 3.785e-01 4.549e-01 4.165e-01 5.124e-01 4.459e-01 0.000e+00 0.000e+00 5.337e-01 5.294e-01 5.124e-01 4.459e-01 5.666e-01 4.891e-01 0.000e+00 0.000e+00 7.525e-01 7.764e-01 0.000e+00 0.000e+00 0.000e+00 0.000e+00 5.337e-01 5.294e-01 7.525e-01 7.764e-01 9.758e-01 8.404e-01 9.869e-01 8.382e-01 1.105e+00 9.273e-01 1.135e+00 9.462e-01 0.000e+00 0.000e+00 0.000e+00 0.000e+00 1.495e+00 1.506e+00 1.506e+00 1.536e+00 9.758e-01 9.869e-01 8.404e-01 8.382e-01 1.105e+00 1.135e+00 9.273e-01 9.462e-01 1.955e+00 2.024e+00 1.588e+00 1.617e+00 2.024e+00 2.111e+00 1.617e+00 1.666e+00 0.000e+00 0.000e+00 5.294e-01 5.337e-01 0.000e+00 0.000e+00 7.764e-01 7.525e-01 0.000e+00 0.000e+00 0.000e+00 0.000e+00 1.506e+00 1.536e+00 1.495e+00 1.506e+00 9.869e-01 9.758e-01 8.382e-01 8.404e-01 1.135e+00 1.105e+00 9.462e-01 9.273e-01 2.024e+00 1.955e+00 1.617e+00 1.588e+00 2.111e+00 2.024e+00 1.666e+00 1.617e+00 5.564e-01 6.321e+00 1.030e+00 6.104e+00 1.030e+00 6.104e+00 5.850e+00 7.429e+00 2.051e+00 1.103e+01 2.158e+00 1.101e+01 7.963e+00 1.239e+01 1.039e+01 1.294e+01 2.051e+00 2.158e+00 1.103e+01 1.101e+01 7.963e+00 1.039e+01 1.239e+01 1.294e+01 7.242e+00 1.085e+01 1.983e+01 1.952e+01 1.085e+01 1.575e+01 1.952e+01 1.961e+01 2.158e+00 2.051e+00 1.101e+01 1.103e+01 1.039e+01 7.963e+00 1.294e+01 1.239e+01 1.085e+01 7.242e+00 1.952e+01 1.983e+01 1.575e+01 1.085e+01 1.961e+01 1.952e+01 0.000e+00 0.000e+00 2.219e-01 2.563e-01 4.549e-01 4.165e-01 5.124e-01 4.459e-01 0.000e+00 0.000e+00 5.337e-01 5.294e-01 0.000e+00 0.000e+00 0.000e+00 0.000e+00 5.294e-01 5.337e-01 7.764e-01 7.525e-01 9.869e-01 8.382e-01 9.758e-01 8.404e-01 1.135e+00 9.462e-01 1.105e+00 9.273e-01 0.000e+00 0.000e+00 0.000e+00 0.000e+00 1.506e+00 1.495e+00 1.536e+00 1.506e+00 9.758e-01 9.869e-01 8.404e-01 8.382e-01 2.024e+00 2.111e+00 1.617e+00 1.666e+00 1.955e+00 2.024e+00 1.588e+00 1.617e+00 0.000e+00 0.000e+00 5.294e-01 5.337e-01 0.000e+00 0.000e+00 0.000e+00 0.000e+00 1.536e+00 1.506e+00 1.506e+00 1.495e+00 9.869e-01 9.758e-01 8.382e-01 8.404e-01 2.111e+00 2.024e+00 1.666e+00 1.617e+00 2.024e+00 1.955e+00 1.617e+00 1.588e+00 5.564e-01 6.321e+00 1.030e+00 6.104e+00 2.158e+00 1.101e+01 2.051e+00 1.103e+01 1.039e+01 1.294e+01 7.963e+00 1.239e+01 2.051e+00 2.158e+00 1.103e+01 1.101e+01 1.085e+01 1.575e+01 1.952e+01 1.961e+01 7.242e+00 1.085e+01 1.983e+01 1.952e+01 2.158e+00 2.051e+00 1.101e+01 1.103e+01 1.575e+01 1.085e+01 1.961e+01 1.952e+01 1.085e+01 7.242e+00 1.952e+01 1.983e+01 0.000e+00 2.563e-01 0.000e+00 3.785e-01 0.000e+00 0.000e+00 7.525e-01 7.764e-01 5.124e-01 4.459e-01 5.666e-01 4.891e-01 0.000e+00 0.000e+00 5.337e-01 5.294e-01 0.000e+00 0.000e+00 7.525e-01 7.764e-01 0.000e+00 0.000e+00 0.000e+00 0.000e+00 1.495e+00 1.506e+00 1.506e+00 1.536e+00 9.758e-01 9.869e-01 8.404e-01 8.382e-01 1.105e+00 1.135e+00 9.273e-01 9.462e-01 1.105e+00 9.273e-01 1.135e+00 9.462e-01 1.955e+00 1.588e+00 2.024e+00 1.617e+00 2.024e+00 1.617e+00 2.111e+00 1.666e+00 1.030e+00 6.104e+00 5.850e+00 7.429e+00 2.051e+00 2.158e+00 1.103e+01 1.101e+01 7.963e+00 1.039e+01 1.239e+01 1.294e+01 7.963e+00 1.239e+01 1.039e+01 1.294e+01 7.242e+00 1.983e+01 1.085e+01 1.952e+01 1.085e+01 1.952e+01 1.575e+01 1.961e+01 0.000e+00 2.563e-01 0.000e+00 0.000e+00 7.764e-01 7.525e-01 5.124e-01 4.459e-01 0.000e+00 0.000e+00 5.337e-01 5.294e-01 0.000e+00 0.000e+00 0.000e+00 0.000e+00 1.506e+00 1.495e+00 1.536e+00 1.506e+00 9.758e-01 9.869e-01 8.404e-01 8.382e-01 1.135e+00 9.462e-01 1.105e+00 9.273e-01 2.024e+00 1.617e+00 1.955e+00 1.588e+00 2.111e+00 1.666e+00 2.024e+00 1.617e+00 1.030e+00 6.104e+00 2.051e+00 2.158e+00 1.103e+01 1.101e+01 1.039e+01 1.294e+01 7.963e+00 1.239e+01 1.085e+01 1.952e+01 7.242e+00 1.983e+01 1.575e+01 1.961e+01 1.085e+01 1.952e+01 0.000e+00 0.000e+00 5.294e-01 5.337e-01 0.000e+00 0.000e+00 7.764e-01 7.525e-01 0.000e+00 0.000e+00 0.000e+00 0.000e+00 1.506e+00 1.536e+00 1.495e+00 1.506e+00 9.869e-01 9.758e-01 8.382e-01 8.404e-01 1.135e+00 1.105e+00 9.462e-01 9.273e-01 2.024e+00 1.617e+00 2.111e+00 1.666e+00 1.955e+00 1.588e+00 2.024e+00 1.617e+00 2.158e+00 2.051e+00 1.101e+01 1.103e+01 1.039e+01 7.963e+00 1.294e+01 1.239e+01 1.085e+01 1.952e+01 1.575e+01 1.961e+01 7.242e+00 1.983e+01 1.085e+01 1.952e+01 0.000e+00 0.000e+00 5.294e-01 5.337e-01 0.000e+00 0.000e+00 0.000e+00 0.000e+00 1.536e+00 1.506e+00 1.506e+00 1.495e+00 9.869e-01 9.758e-01 8.382e-01 8.404e-01 2.111e+00 1.666e+00 2.024e+00 1.617e+00 2.024e+00 1.617e+00 1.955e+00 1.588e+00 2.158e+00 2.051e+00 1.101e+01 1.103e+01 1.575e+01 1.961e+01 1.085e+01 1.952e+01 1.085e+01 1.952e+01 7.242e+00 1.983e+01 0.000e+00 3.785e-01 5.666e-01 4.891e-01 0.000e+00 0.000e+00 7.525e-01 7.764e-01 0.000e+00 0.000e+00 7.525e-01 7.764e-01 1.105e+00 9.273e-01 1.135e+00 9.462e-01 0.000e+00 0.000e+00 0.000e+00 0.000e+00 1.495e+00 1.506e+00 1.506e+00 1.536e+00 1.105e+00 1.135e+00 9.273e-01 9.462e-01 1.955e+00 2.024e+00 1.588e+00 1.617e+00 2.024e+00 2.111e+00 1.617e+00 1.666e+00 0.000e+00 0.000e+00 7.764e-01 7.525e-01 0.000e+00 0.000e+00 0.000e+00 0.000e+00 1.506e+00 1.536e+00 1.495e+00 1.506e+00 1.135e+00 1.105e+00 9.462e-01 9.273e-01 2.024e+00 1.955e+00 1.617e+00 1.588e+00 2.111e+00 2.024e+00 1.666e+00 1.617e+00 5.850e+00 7.429e+00 7.963e+00 1.239e+01 1.039e+01 1.294e+01 7.963e+00 1.039e+01 1.239e+01 1.294e+01 7.242e+00 1.085e+01 1.983e+01 1.952e+01 1.085e+01 1.575e+01 1.952e+01 1.961e+01 1.039e+01 7.963e+00 1.294e+01 1.239e+01 1.085e+01 7.242e+00 1.952e+01 1.983e+01 1.575e+01 1.085e+01 1.961e+01 1.952e+01 0.000e+00 0.000e+00 7.764e-01 7.525e-01 1.135e+00 9.462e-01 1.105e+00 9.273e-01 0.000e+00 0.000e+00 0.000e+00 0.000e+00 1.506e+00 1.495e+00 1.536e+00 1.506e+00 2.024e+00 2.111e+00 1.617e+00 1.666e+00 1.955e+00 2.024e+00 1.588e+00 1.617e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 1.536e+00 1.506e+00 1.506e+00 1.495e+00 2.111e+00 2.024e+00 1.666e+00 1.617e+00 2.024e+00 1.955e+00 1.617e+00 1.588e+00 1.039e+01 1.294e+01 7.963e+00 1.239e+01 1.085e+01 1.575e+01 1.952e+01 1.961e+01 7.242e+00 1.085e+01 1.983e+01 1.952e+01 1.575e+01 1.085e+01 1.961e+01 1.952e+01 1.085e+01 7.242e+00 1.952e+01 1.983e+01 0.000e+00 3.785e-01 0.000e+00 0.000e+00 7.525e-01 7.764e-01 5.666e-01 4.891e-01 0.000e+00 0.000e+00 7.525e-01 7.764e-01 0.000e+00 0.000e+00 0.000e+00 0.000e+00 1.495e+00 1.506e+00 1.506e+00 1.536e+00 1.105e+00 1.135e+00 9.273e-01 9.462e-01 1.105e+00 9.273e-01 1.135e+00 9.462e-01 1.955e+00 1.588e+00 2.024e+00 1.617e+00 2.024e+00 1.617e+00 2.111e+00 1.666e+00 5.850e+00 7.429e+00 7.963e+00 1.039e+01 1.239e+01 1.294e+01 7.963e+00 1.239e+01 1.039e+01 1.294e+01 7.242e+00 1.983e+01 1.085e+01 1.952e+01 1.085e+01 1.952e+01 1.575e+01 1.961e+01 0.000e+00 0.000e+00 7.764e-01 7.525e-01 0.000e+00 0.000e+00 0.000e+00 0.000e+00 1.506e+00 1.495e+00 1.536e+00 1.506e+00 1.135e+00 9.462e-01 1.105e+00 9.273e-01 2.024e+00 1.617e+00 1.955e+00 1.588e+00 2.111e+00 1.666e+00 2.024e+00 1.617e+00 1.039e+01 1.294e+01 7.963e+00 1.239e+01 1.085e+01 1.952e+01 7.242e+00 1.983e+01 1.575e+01 1.961e+01 1.085e+01 1.952e+01 0.000e+00 0.000e+00 7.764e-01 7.525e-01 0.000e+00 0.000e+00 0.000e+00 0.000e+00 1.506e+00 1.536e+00 1.495e+00 1.506e+00 1.135e+00 1.105e+00 9.462e-01 9.273e-01 2.024e+00 1.617e+00 2.111e+00 1.666e+00 1.955e+00 1.588e+00 2.024e+00 1.617e+00 1.039e+01 7.963e+00 1.294e+01 1.239e+01 1.085e+01 1.952e+01 1.575e+01 1.961e+01 7.242e+00 1.983e+01 1.085e+01 1.952e+01 0.000e+00 0.000e+00 0.000e+00 0.000e+00 1.536e+00 1.506e+00 1.506e+00 1.495e+00 2.111e+00 1.666e+00 2.024e+00 1.617e+00 2.024e+00 1.617e+00 1.955e+00 1.588e+00 1.575e+01 1.961e+01 1.085e+01 1.952e+01 1.085e+01 1.952e+01 7.242e+00 1.983e+01 
+DEAL:0::308.790
+Process #0
+Local range: [0, 1651), global size: 1651
+Vector data:
+2.656e+00 2.581e+00 2.581e+00 2.698e+00 2.581e+00 2.698e+00 2.698e+00 2.243e+00 5.405e+00 5.382e+00 4.908e+00 5.006e+00 5.405e+00 5.382e+00 4.908e+00 5.006e+00 4.908e+00 5.006e+00 4.457e+00 4.457e+00 4.908e+00 5.006e+00 4.457e+00 4.457e+00 5.405e+00 5.382e+00 4.908e+00 5.006e+00 4.908e+00 5.006e+00 4.457e+00 4.457e+00 8.932e+00 8.732e+00 8.732e+00 8.600e+00 8.266e+00 8.266e+00 8.266e+00 8.266e+00 8.932e+00 8.732e+00 8.732e+00 8.600e+00 8.266e+00 8.266e+00 8.266e+00 8.266e+00 8.932e+00 8.732e+00 8.732e+00 8.600e+00 8.266e+00 8.266e+00 8.266e+00 8.266e+00 1.348e+01 1.348e+01 1.348e+01 1.348e+01 1.348e+01 1.348e+01 1.348e+01 1.348e+01 2.656e+00 2.581e+00 2.581e+00 2.698e+00 5.405e+00 5.382e+00 5.382e+00 5.405e+00 5.006e+00 4.908e+00 4.908e+00 5.006e+00 5.006e+00 4.908e+00 4.457e+00 4.457e+00 5.405e+00 5.382e+00 4.908e+00 5.006e+00 8.932e+00 8.732e+00 8.732e+00 8.600e+00 8.732e+00 8.600e+00 8.932e+00 8.732e+00 8.266e+00 8.266e+00 8.266e+00 8.266e+00 8.732e+00 8.932e+00 8.600e+00 8.732e+00 8.266e+00 8.266e+00 8.266e+00 8.266e+00 1.348e+01 1.348e+01 1.348e+01 1.348e+01 1.348e+01 1.348e+01 1.348e+01 1.348e+01 2.656e+00 2.581e+00 2.581e+00 2.698e+00 5.382e+00 5.405e+00 5.006e+00 4.908e+00 5.405e+00 5.382e+00 5.006e+00 4.908e+00 4.457e+00 4.457e+00 4.908e+00 5.006e+00 5.405e+00 5.382e+00 4.908e+00 5.006e+00 8.732e+00 8.932e+00 8.600e+00 8.732e+00 8.266e+00 8.266e+00 8.266e+00 8.266e+00 8.932e+00 8.732e+00 8.732e+00 8.600e+00 8.732e+00 8.600e+00 8.932e+00 8.732e+00 8.266e+00 8.266e+00 8.266e+00 8.266e+00 1.348e+01 1.348e+01 1.348e+01 1.348e+01 1.348e+01 1.348e+01 1.348e+01 1.348e+01 2.656e+00 2.581e+00 5.382e+00 5.405e+00 5.382e+00 5.405e+00 5.006e+00 4.908e+00 5.006e+00 4.908e+00 5.405e+00 5.382e+00 8.732e+00 8.932e+00 8.600e+00 8.732e+00 8.732e+00 8.600e+00 8.932e+00 8.732e+00 8.600e+00 8.732e+00 8.732e+00 8.932e+00 8.266e+00 8.266e+00 8.266e+00 8.266e+00 1.348e+01 1.348e+01 1.348e+01 1.348e+01 1.348e+01 1.348e+01 1.348e+01 1.348e+01 2.656e+00 2.581e+00 2.581e+00 2.698e+00 5.405e+00 5.382e+00 4.908e+00 5.006e+00 5.405e+00 5.382e+00 4.908e+00 5.006e+00 5.382e+00 5.405e+00 5.006e+00 4.908e+00 5.006e+00 4.908e+00 4.457e+00 4.457e+00 8.732e+00 8.600e+00 8.932e+00 8.732e+00 8.266e+00 8.266e+00 8.266e+00 8.266e+00 8.732e+00 8.932e+00 8.600e+00 8.732e+00 8.266e+00 8.266e+00 8.266e+00 8.266e+00 8.932e+00 8.732e+00 8.732e+00 8.600e+00 1.348e+01 1.348e+01 1.348e+01 1.348e+01 1.348e+01 1.348e+01 1.348e+01 1.348e+01 2.656e+00 2.581e+00 5.405e+00 5.382e+00 5.382e+00 5.405e+00 5.006e+00 4.908e+00 5.382e+00 5.405e+00 5.006e+00 4.908e+00 8.732e+00 8.600e+00 8.932e+00 8.732e+00 8.600e+00 8.732e+00 8.732e+00 8.932e+00 8.266e+00 8.266e+00 8.266e+00 8.266e+00 8.732e+00 8.932e+00 8.600e+00 8.732e+00 1.348e+01 1.348e+01 1.348e+01 1.348e+01 1.348e+01 1.348e+01 1.348e+01 1.348e+01 2.656e+00 2.581e+00 5.382e+00 5.405e+00 5.006e+00 4.908e+00 5.405e+00 5.382e+00 5.382e+00 5.405e+00 5.006e+00 4.908e+00 8.600e+00 8.732e+00 8.732e+00 8.932e+00 8.266e+00 8.266e+00 8.266e+00 8.266e+00 8.732e+00 8.932e+00 8.600e+00 8.732e+00 8.732e+00 8.600e+00 8.932e+00 8.732e+00 1.348e+01 1.348e+01 1.348e+01 1.348e+01 1.348e+01 1.348e+01 1.348e+01 1.348e+01 2.656e+00 5.382e+00 5.405e+00 5.382e+00 5.405e+00 5.382e+00 5.405e+00 8.600e+00 8.732e+00 8.732e+00 8.932e+00 8.600e+00 8.732e+00 8.732e+00 8.932e+00 8.600e+00 8.732e+00 8.732e+00 8.932e+00 1.348e+01 1.348e+01 1.348e+01 1.348e+01 1.348e+01 1.348e+01 1.348e+01 1.348e+01 0.000e+00 0.000e+00 0.000e+00 0.000e+00 2.219e-01 2.563e-01 2.563e-01 3.785e-01 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 5.337e-01 5.294e-01 7.525e-01 7.764e-01 5.337e-01 5.294e-01 7.525e-01 7.764e-01 4.549e-01 4.165e-01 5.124e-01 4.459e-01 5.124e-01 4.459e-01 5.666e-01 4.891e-01 9.758e-01 9.869e-01 8.404e-01 8.382e-01 1.105e+00 1.135e+00 9.273e-01 9.462e-01 9.758e-01 8.404e-01 9.869e-01 8.382e-01 1.105e+00 9.273e-01 1.135e+00 9.462e-01 0.000e+00 0.000e+00 0.000e+00 0.000e+00 1.495e+00 1.506e+00 1.506e+00 1.536e+00 1.955e+00 2.024e+00 2.024e+00 2.111e+00 1.588e+00 1.617e+00 1.617e+00 1.666e+00 0.000e+00 0.000e+00 2.219e-01 2.563e-01 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 5.337e-01 5.294e-01 5.294e-01 5.337e-01 7.764e-01 7.525e-01 4.549e-01 4.165e-01 5.124e-01 4.459e-01 9.758e-01 9.869e-01 8.404e-01 8.382e-01 9.869e-01 8.382e-01 9.758e-01 8.404e-01 1.135e+00 9.462e-01 1.105e+00 9.273e-01 0.000e+00 0.000e+00 0.000e+00 0.000e+00 1.506e+00 1.495e+00 1.536e+00 1.506e+00 2.024e+00 1.955e+00 2.111e+00 2.024e+00 1.617e+00 1.588e+00 1.666e+00 1.617e+00 0.000e+00 0.000e+00 2.219e-01 2.563e-01 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 5.294e-01 5.337e-01 7.764e-01 7.525e-01 5.337e-01 5.294e-01 4.549e-01 4.165e-01 5.124e-01 4.459e-01 9.869e-01 9.758e-01 8.382e-01 8.404e-01 1.135e+00 1.105e+00 9.462e-01 9.273e-01 9.758e-01 8.404e-01 9.869e-01 8.382e-01 0.000e+00 0.000e+00 0.000e+00 0.000e+00 1.506e+00 1.536e+00 1.495e+00 1.506e+00 2.024e+00 2.111e+00 1.955e+00 2.024e+00 1.617e+00 1.666e+00 1.588e+00 1.617e+00 0.000e+00 2.219e-01 0.000e+00 0.000e+00 0.000e+00 0.000e+00 5.294e-01 5.337e-01 5.294e-01 5.337e-01 4.549e-01 4.165e-01 9.869e-01 9.758e-01 8.382e-01 8.404e-01 9.869e-01 8.382e-01 9.758e-01 8.404e-01 0.000e+00 0.000e+00 0.000e+00 0.000e+00 1.536e+00 1.506e+00 1.506e+00 1.495e+00 2.111e+00 2.024e+00 2.024e+00 1.955e+00 1.666e+00 1.617e+00 1.617e+00 1.588e+00 5.564e-01 6.321e+00 1.030e+00 6.104e+00 1.030e+00 6.104e+00 5.850e+00 7.429e+00 2.051e+00 2.158e+00 1.103e+01 1.101e+01 7.963e+00 1.039e+01 1.239e+01 1.294e+01 2.051e+00 1.103e+01 2.158e+00 1.101e+01 7.963e+00 1.239e+01 1.039e+01 1.294e+01 7.242e+00 1.085e+01 1.085e+01 1.575e+01 1.983e+01 1.952e+01 1.952e+01 1.961e+01 5.564e-01 6.321e+00 1.030e+00 6.104e+00 2.051e+00 2.158e+00 1.103e+01 1.101e+01 2.158e+00 1.101e+01 2.051e+00 1.103e+01 1.039e+01 1.294e+01 7.963e+00 1.239e+01 1.085e+01 7.242e+00 1.575e+01 1.085e+01 1.952e+01 1.983e+01 1.961e+01 1.952e+01 5.564e-01 6.321e+00 1.030e+00 6.104e+00 2.158e+00 2.051e+00 1.101e+01 1.103e+01 1.039e+01 7.963e+00 1.294e+01 1.239e+01 2.051e+00 1.103e+01 2.158e+00 1.101e+01 1.085e+01 1.575e+01 7.242e+00 1.085e+01 1.952e+01 1.961e+01 1.983e+01 1.952e+01 5.564e-01 6.321e+00 2.158e+00 2.051e+00 1.101e+01 1.103e+01 2.158e+00 1.101e+01 2.051e+00 1.103e+01 1.575e+01 1.085e+01 1.085e+01 7.242e+00 1.961e+01 1.952e+01 1.952e+01 1.983e+01 0.000e+00 0.000e+00 2.563e-01 3.785e-01 5.124e-01 4.459e-01 5.666e-01 4.891e-01 0.000e+00 0.000e+00 7.525e-01 7.764e-01 0.000e+00 0.000e+00 0.000e+00 0.000e+00 5.337e-01 5.294e-01 7.525e-01 7.764e-01 9.758e-01 8.404e-01 9.869e-01 8.382e-01 1.105e+00 9.273e-01 1.135e+00 9.462e-01 0.000e+00 0.000e+00 0.000e+00 0.000e+00 1.495e+00 1.506e+00 1.506e+00 1.536e+00 1.105e+00 1.135e+00 9.273e-01 9.462e-01 1.955e+00 2.024e+00 1.588e+00 1.617e+00 2.024e+00 2.111e+00 1.617e+00 1.666e+00 0.000e+00 2.563e-01 5.124e-01 4.459e-01 0.000e+00 0.000e+00 7.764e-01 7.525e-01 0.000e+00 0.000e+00 5.337e-01 5.294e-01 9.758e-01 8.404e-01 9.869e-01 8.382e-01 0.000e+00 0.000e+00 0.000e+00 0.000e+00 1.506e+00 1.536e+00 1.495e+00 1.506e+00 1.135e+00 1.105e+00 9.462e-01 9.273e-01 2.024e+00 1.955e+00 1.617e+00 1.588e+00 2.111e+00 2.024e+00 1.666e+00 1.617e+00 1.030e+00 6.104e+00 5.850e+00 7.429e+00 2.051e+00 1.103e+01 2.158e+00 1.101e+01 7.963e+00 1.239e+01 1.039e+01 1.294e+01 7.963e+00 1.039e+01 1.239e+01 1.294e+01 7.242e+00 1.085e+01 1.983e+01 1.952e+01 1.085e+01 1.575e+01 1.952e+01 1.961e+01 1.030e+00 6.104e+00 2.051e+00 1.103e+01 2.158e+00 1.101e+01 1.039e+01 7.963e+00 1.294e+01 1.239e+01 1.085e+01 7.242e+00 1.952e+01 1.983e+01 1.575e+01 1.085e+01 1.961e+01 1.952e+01 0.000e+00 0.000e+00 2.219e-01 2.563e-01 4.549e-01 4.165e-01 5.124e-01 4.459e-01 0.000e+00 0.000e+00 5.337e-01 5.294e-01 0.000e+00 0.000e+00 0.000e+00 0.000e+00 5.294e-01 5.337e-01 7.764e-01 7.525e-01 9.869e-01 8.382e-01 9.758e-01 8.404e-01 1.135e+00 9.462e-01 1.105e+00 9.273e-01 0.000e+00 0.000e+00 0.000e+00 0.000e+00 1.506e+00 1.495e+00 1.536e+00 1.506e+00 9.758e-01 9.869e-01 8.404e-01 8.382e-01 2.024e+00 2.111e+00 1.617e+00 1.666e+00 1.955e+00 2.024e+00 1.588e+00 1.617e+00 0.000e+00 2.219e-01 4.549e-01 4.165e-01 0.000e+00 0.000e+00 5.294e-01 5.337e-01 0.000e+00 0.000e+00 5.294e-01 5.337e-01 9.869e-01 8.382e-01 9.758e-01 8.404e-01 0.000e+00 0.000e+00 0.000e+00 0.000e+00 1.536e+00 1.506e+00 1.506e+00 1.495e+00 9.869e-01 9.758e-01 8.382e-01 8.404e-01 2.111e+00 2.024e+00 1.666e+00 1.617e+00 2.024e+00 1.955e+00 1.617e+00 1.588e+00 5.564e-01 6.321e+00 1.030e+00 6.104e+00 2.158e+00 1.101e+01 2.051e+00 1.103e+01 1.039e+01 1.294e+01 7.963e+00 1.239e+01 2.051e+00 2.158e+00 1.103e+01 1.101e+01 1.085e+01 1.575e+01 1.952e+01 1.961e+01 7.242e+00 1.085e+01 1.983e+01 1.952e+01 5.564e-01 6.321e+00 2.158e+00 1.101e+01 2.051e+00 1.103e+01 2.158e+00 2.051e+00 1.101e+01 1.103e+01 1.575e+01 1.085e+01 1.961e+01 1.952e+01 1.085e+01 7.242e+00 1.952e+01 1.983e+01 0.000e+00 0.000e+00 2.219e-01 2.563e-01 0.000e+00 0.000e+00 2.563e-01 3.785e-01 4.549e-01 4.165e-01 5.124e-01 4.459e-01 0.000e+00 0.000e+00 5.337e-01 5.294e-01 5.124e-01 4.459e-01 5.666e-01 4.891e-01 0.000e+00 0.000e+00 7.525e-01 7.764e-01 0.000e+00 0.000e+00 0.000e+00 0.000e+00 5.337e-01 5.294e-01 7.525e-01 7.764e-01 9.758e-01 8.404e-01 9.869e-01 8.382e-01 1.105e+00 9.273e-01 1.135e+00 9.462e-01 0.000e+00 0.000e+00 0.000e+00 0.000e+00 1.495e+00 1.506e+00 1.506e+00 1.536e+00 9.758e-01 9.869e-01 8.404e-01 8.382e-01 1.105e+00 1.135e+00 9.273e-01 9.462e-01 1.955e+00 2.024e+00 1.588e+00 1.617e+00 2.024e+00 2.111e+00 1.617e+00 1.666e+00 0.000e+00 0.000e+00 5.294e-01 5.337e-01 0.000e+00 0.000e+00 7.764e-01 7.525e-01 0.000e+00 0.000e+00 0.000e+00 0.000e+00 1.506e+00 1.536e+00 1.495e+00 1.506e+00 9.869e-01 9.758e-01 8.382e-01 8.404e-01 1.135e+00 1.105e+00 9.462e-01 9.273e-01 2.024e+00 1.955e+00 1.617e+00 1.588e+00 2.111e+00 2.024e+00 1.666e+00 1.617e+00 5.564e-01 6.321e+00 1.030e+00 6.104e+00 1.030e+00 6.104e+00 5.850e+00 7.429e+00 2.051e+00 1.103e+01 2.158e+00 1.101e+01 7.963e+00 1.239e+01 1.039e+01 1.294e+01 2.051e+00 2.158e+00 1.103e+01 1.101e+01 7.963e+00 1.039e+01 1.239e+01 1.294e+01 7.242e+00 1.085e+01 1.983e+01 1.952e+01 1.085e+01 1.575e+01 1.952e+01 1.961e+01 2.158e+00 2.051e+00 1.101e+01 1.103e+01 1.039e+01 7.963e+00 1.294e+01 1.239e+01 1.085e+01 7.242e+00 1.952e+01 1.983e+01 1.575e+01 1.085e+01 1.961e+01 1.952e+01 0.000e+00 0.000e+00 2.219e-01 2.563e-01 4.549e-01 4.165e-01 5.124e-01 4.459e-01 0.000e+00 0.000e+00 5.337e-01 5.294e-01 0.000e+00 0.000e+00 0.000e+00 0.000e+00 5.294e-01 5.337e-01 7.764e-01 7.525e-01 9.869e-01 8.382e-01 9.758e-01 8.404e-01 1.135e+00 9.462e-01 1.105e+00 9.273e-01 0.000e+00 0.000e+00 0.000e+00 0.000e+00 1.506e+00 1.495e+00 1.536e+00 1.506e+00 9.758e-01 9.869e-01 8.404e-01 8.382e-01 2.024e+00 2.111e+00 1.617e+00 1.666e+00 1.955e+00 2.024e+00 1.588e+00 1.617e+00 0.000e+00 0.000e+00 5.294e-01 5.337e-01 0.000e+00 0.000e+00 0.000e+00 0.000e+00 1.536e+00 1.506e+00 1.506e+00 1.495e+00 9.869e-01 9.758e-01 8.382e-01 8.404e-01 2.111e+00 2.024e+00 1.666e+00 1.617e+00 2.024e+00 1.955e+00 1.617e+00 1.588e+00 5.564e-01 6.321e+00 1.030e+00 6.104e+00 2.158e+00 1.101e+01 2.051e+00 1.103e+01 1.039e+01 1.294e+01 7.963e+00 1.239e+01 2.051e+00 2.158e+00 1.103e+01 1.101e+01 1.085e+01 1.575e+01 1.952e+01 1.961e+01 7.242e+00 1.085e+01 1.983e+01 1.952e+01 2.158e+00 2.051e+00 1.101e+01 1.103e+01 1.575e+01 1.085e+01 1.961e+01 1.952e+01 1.085e+01 7.242e+00 1.952e+01 1.983e+01 0.000e+00 2.563e-01 0.000e+00 3.785e-01 0.000e+00 0.000e+00 7.525e-01 7.764e-01 5.124e-01 4.459e-01 5.666e-01 4.891e-01 0.000e+00 0.000e+00 5.337e-01 5.294e-01 0.000e+00 0.000e+00 7.525e-01 7.764e-01 0.000e+00 0.000e+00 0.000e+00 0.000e+00 1.495e+00 1.506e+00 1.506e+00 1.536e+00 9.758e-01 9.869e-01 8.404e-01 8.382e-01 1.105e+00 1.135e+00 9.273e-01 9.462e-01 1.105e+00 9.273e-01 1.135e+00 9.462e-01 1.955e+00 1.588e+00 2.024e+00 1.617e+00 2.024e+00 1.617e+00 2.111e+00 1.666e+00 1.030e+00 6.104e+00 5.850e+00 7.429e+00 2.051e+00 2.158e+00 1.103e+01 1.101e+01 7.963e+00 1.039e+01 1.239e+01 1.294e+01 7.963e+00 1.239e+01 1.039e+01 1.294e+01 7.242e+00 1.983e+01 1.085e+01 1.952e+01 1.085e+01 1.952e+01 1.575e+01 1.961e+01 0.000e+00 2.563e-01 0.000e+00 0.000e+00 7.764e-01 7.525e-01 5.124e-01 4.459e-01 0.000e+00 0.000e+00 5.337e-01 5.294e-01 0.000e+00 0.000e+00 0.000e+00 0.000e+00 1.506e+00 1.495e+00 1.536e+00 1.506e+00 9.758e-01 9.869e-01 8.404e-01 8.382e-01 1.135e+00 9.462e-01 1.105e+00 9.273e-01 2.024e+00 1.617e+00 1.955e+00 1.588e+00 2.111e+00 1.666e+00 2.024e+00 1.617e+00 1.030e+00 6.104e+00 2.051e+00 2.158e+00 1.103e+01 1.101e+01 1.039e+01 1.294e+01 7.963e+00 1.239e+01 1.085e+01 1.952e+01 7.242e+00 1.983e+01 1.575e+01 1.961e+01 1.085e+01 1.952e+01 0.000e+00 0.000e+00 5.294e-01 5.337e-01 0.000e+00 0.000e+00 7.764e-01 7.525e-01 0.000e+00 0.000e+00 0.000e+00 0.000e+00 1.506e+00 1.536e+00 1.495e+00 1.506e+00 9.869e-01 9.758e-01 8.382e-01 8.404e-01 1.135e+00 1.105e+00 9.462e-01 9.273e-01 2.024e+00 1.617e+00 2.111e+00 1.666e+00 1.955e+00 1.588e+00 2.024e+00 1.617e+00 2.158e+00 2.051e+00 1.101e+01 1.103e+01 1.039e+01 7.963e+00 1.294e+01 1.239e+01 1.085e+01 1.952e+01 1.575e+01 1.961e+01 7.242e+00 1.983e+01 1.085e+01 1.952e+01 0.000e+00 0.000e+00 5.294e-01 5.337e-01 0.000e+00 0.000e+00 0.000e+00 0.000e+00 1.536e+00 1.506e+00 1.506e+00 1.495e+00 9.869e-01 9.758e-01 8.382e-01 8.404e-01 2.111e+00 1.666e+00 2.024e+00 1.617e+00 2.024e+00 1.617e+00 1.955e+00 1.588e+00 2.158e+00 2.051e+00 1.101e+01 1.103e+01 1.575e+01 1.961e+01 1.085e+01 1.952e+01 1.085e+01 1.952e+01 7.242e+00 1.983e+01 0.000e+00 3.785e-01 5.666e-01 4.891e-01 0.000e+00 0.000e+00 7.525e-01 7.764e-01 0.000e+00 0.000e+00 7.525e-01 7.764e-01 1.105e+00 9.273e-01 1.135e+00 9.462e-01 0.000e+00 0.000e+00 0.000e+00 0.000e+00 1.495e+00 1.506e+00 1.506e+00 1.536e+00 1.105e+00 1.135e+00 9.273e-01 9.462e-01 1.955e+00 2.024e+00 1.588e+00 1.617e+00 2.024e+00 2.111e+00 1.617e+00 1.666e+00 0.000e+00 0.000e+00 7.764e-01 7.525e-01 0.000e+00 0.000e+00 0.000e+00 0.000e+00 1.506e+00 1.536e+00 1.495e+00 1.506e+00 1.135e+00 1.105e+00 9.462e-01 9.273e-01 2.024e+00 1.955e+00 1.617e+00 1.588e+00 2.111e+00 2.024e+00 1.666e+00 1.617e+00 5.850e+00 7.429e+00 7.963e+00 1.239e+01 1.039e+01 1.294e+01 7.963e+00 1.039e+01 1.239e+01 1.294e+01 7.242e+00 1.085e+01 1.983e+01 1.952e+01 1.085e+01 1.575e+01 1.952e+01 1.961e+01 1.039e+01 7.963e+00 1.294e+01 1.239e+01 1.085e+01 7.242e+00 1.952e+01 1.983e+01 1.575e+01 1.085e+01 1.961e+01 1.952e+01 0.000e+00 0.000e+00 7.764e-01 7.525e-01 1.135e+00 9.462e-01 1.105e+00 9.273e-01 0.000e+00 0.000e+00 0.000e+00 0.000e+00 1.506e+00 1.495e+00 1.536e+00 1.506e+00 2.024e+00 2.111e+00 1.617e+00 1.666e+00 1.955e+00 2.024e+00 1.588e+00 1.617e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 1.536e+00 1.506e+00 1.506e+00 1.495e+00 2.111e+00 2.024e+00 1.666e+00 1.617e+00 2.024e+00 1.955e+00 1.617e+00 1.588e+00 1.039e+01 1.294e+01 7.963e+00 1.239e+01 1.085e+01 1.575e+01 1.952e+01 1.961e+01 7.242e+00 1.085e+01 1.983e+01 1.952e+01 1.575e+01 1.085e+01 1.961e+01 1.952e+01 1.085e+01 7.242e+00 1.952e+01 1.983e+01 0.000e+00 3.785e-01 0.000e+00 0.000e+00 7.525e-01 7.764e-01 5.666e-01 4.891e-01 0.000e+00 0.000e+00 7.525e-01 7.764e-01 0.000e+00 0.000e+00 0.000e+00 0.000e+00 1.495e+00 1.506e+00 1.506e+00 1.536e+00 1.105e+00 1.135e+00 9.273e-01 9.462e-01 1.105e+00 9.273e-01 1.135e+00 9.462e-01 1.955e+00 1.588e+00 2.024e+00 1.617e+00 2.024e+00 1.617e+00 2.111e+00 1.666e+00 5.850e+00 7.429e+00 7.963e+00 1.039e+01 1.239e+01 1.294e+01 7.963e+00 1.239e+01 1.039e+01 1.294e+01 7.242e+00 1.983e+01 1.085e+01 1.952e+01 1.085e+01 1.952e+01 1.575e+01 1.961e+01 0.000e+00 0.000e+00 7.764e-01 7.525e-01 0.000e+00 0.000e+00 0.000e+00 0.000e+00 1.506e+00 1.495e+00 1.536e+00 1.506e+00 1.135e+00 9.462e-01 1.105e+00 9.273e-01 2.024e+00 1.617e+00 1.955e+00 1.588e+00 2.111e+00 1.666e+00 2.024e+00 1.617e+00 1.039e+01 1.294e+01 7.963e+00 1.239e+01 1.085e+01 1.952e+01 7.242e+00 1.983e+01 1.575e+01 1.961e+01 1.085e+01 1.952e+01 0.000e+00 0.000e+00 7.764e-01 7.525e-01 0.000e+00 0.000e+00 0.000e+00 0.000e+00 1.506e+00 1.536e+00 1.495e+00 1.506e+00 1.135e+00 1.105e+00 9.462e-01 9.273e-01 2.024e+00 1.617e+00 2.111e+00 1.666e+00 1.955e+00 1.588e+00 2.024e+00 1.617e+00 1.039e+01 7.963e+00 1.294e+01 1.239e+01 1.085e+01 1.952e+01 1.575e+01 1.961e+01 7.242e+00 1.983e+01 1.085e+01 1.952e+01 0.000e+00 0.000e+00 0.000e+00 0.000e+00 1.536e+00 1.506e+00 1.506e+00 1.495e+00 2.111e+00 1.666e+00 2.024e+00 1.617e+00 2.024e+00 1.617e+00 1.955e+00 1.588e+00 1.575e+01 1.961e+01 1.085e+01 1.952e+01 1.085e+01 1.952e+01 7.242e+00 1.983e+01 
+DEAL:0::308.790
diff --git a/tests/matrix_free/compute_diagonal_util.h b/tests/matrix_free/compute_diagonal_util.h
new file mode 100644 (file)
index 0000000..c0095bd
--- /dev/null
@@ -0,0 +1,148 @@
+// ---------------------------------------------------------------------
+//
+// 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.
+//
+// ---------------------------------------------------------------------
+
+#include <deal.II/base/logstream.h>
+#include <deal.II/base/mpi.h>
+#include <deal.II/base/quadrature_lib.h>
+
+#include <deal.II/distributed/tria.h>
+
+#include <deal.II/dofs/dof_handler.h>
+
+#include <deal.II/fe/fe_dgq.h>
+#include <deal.II/fe/fe_q.h>
+#include <deal.II/fe/fe_system.h>
+#include <deal.II/fe/fe_tools.h>
+#include <deal.II/fe/mapping_q.h>
+
+#include <deal.II/grid/grid_generator.h>
+#include <deal.II/grid/grid_out.h>
+
+#include <deal.II/matrix_free/fe_evaluation.h>
+#include <deal.II/matrix_free/matrix_free.h>
+#include <deal.II/matrix_free/tools.h>
+#include <deal.II/matrix_free/vector_access_internal.h>
+
+#include <deal.II/multigrid/mg_constrained_dofs.h>
+
+#include <deal.II/numerics/vector_tools.h>
+
+#include "../tests.h"
+
+using namespace dealii;
+
+
+template <int dim,
+          int fe_degree,
+          int n_points,
+          int n_components,
+          typename Number,
+          typename VectorizedArrayType>
+class Test
+{
+  using VectorType = LinearAlgebra::distributed::Vector<Number>;
+
+public:
+  Test(const MatrixFree<dim, Number, VectorizedArrayType> matrix_free,
+       const std::function<void(FEEvaluation<dim,
+                                             fe_degree,
+                                             n_points,
+                                             n_components,
+                                             Number,
+                                             VectorizedArrayType> &)>
+         &cell_operation)
+    : matrix_free(matrix_free)
+    , cell_operation(cell_operation)
+  {}
+
+  void
+  do_test()
+  {
+    // compute diagonal with the new function
+    {
+      VectorType diagonal_global;
+      MatrixFreeTools::compute_diagonal<dim,
+                                        fe_degree,
+                                        n_points,
+                                        n_components,
+                                        Number,
+                                        VectorizedArrayType>(
+        matrix_free, diagonal_global, [&](auto &phi) {
+          this->cell_operation(phi);
+        });
+
+      diagonal_global.print(deallog.get_file_stream());
+      deallog << diagonal_global.l2_norm() << std::endl;
+    }
+
+    // compute diagonal globally
+    {
+      VectorType src, dst, temp;
+
+      matrix_free.initialize_dof_vector(src);
+      matrix_free.initialize_dof_vector(dst);
+      matrix_free.initialize_dof_vector(temp);
+
+      for (unsigned int i = 0; i < src.size(); i++)
+        {
+          if (src.get_partitioner()->in_local_range(i))
+            src[i] = 1.0;
+
+          matrix_free.cell_loop(&Test::cell_operation_range, this, temp, src);
+
+          if (src.get_partitioner()->in_local_range(i))
+            {
+              dst[i] = temp[i];
+              src[i] = 0.0;
+            }
+          temp = 0.0;
+        }
+
+      dst.print(deallog.get_file_stream());
+      deallog << dst.l2_norm() << std::endl;
+    }
+  }
+
+  void
+  cell_operation_range(const MatrixFree<dim, Number, VectorizedArrayType> &data,
+                       VectorType &                                        dst,
+                       const VectorType &                                  src,
+                       const std::pair<unsigned int, unsigned int> &pair) const
+  {
+    FEEvaluation<dim,
+                 fe_degree,
+                 n_points,
+                 n_components,
+                 Number,
+                 VectorizedArrayType>
+      phi(data);
+    for (auto cell = pair.first; cell < pair.second; cell++)
+      {
+        phi.reinit(cell);
+        phi.read_dof_values(src);
+        this->cell_operation(phi);
+        phi.distribute_local_to_global(dst);
+      }
+  }
+
+  const MatrixFree<dim, Number, VectorizedArrayType> matrix_free;
+  const std::function<void(FEEvaluation<dim,
+                                        fe_degree,
+                                        n_points,
+                                        n_components,
+                                        Number,
+                                        VectorizedArrayType> &)>
+    &cell_operation;
+};

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.