From 03a10a2cb7589dee8b05185c6305caeb450ad9eb Mon Sep 17 00:00:00 2001 From: Peter Munch Date: Sun, 12 Jan 2020 11:14:21 +0100 Subject: [PATCH] Compute diagonal with MatrixFree --- include/deal.II/matrix_free/tools.h | 392 +++++++++++++++++- tests/matrix_free/compute_diagonal_01.cc | 91 ++++ ...h_mpi=true.with_p4est=true.mpirun=1.output | 21 + ...h_mpi=true.with_p4est=true.mpirun=3.output | 65 +++ tests/matrix_free/compute_diagonal_02.cc | 133 ++++++ tests/matrix_free/compute_diagonal_02.output | 11 + tests/matrix_free/compute_diagonal_03.cc | 108 +++++ ...h_mpi=true.with_p4est=true.mpirun=1.output | 61 +++ tests/matrix_free/compute_diagonal_util.h | 148 +++++++ 9 files changed, 1029 insertions(+), 1 deletion(-) create mode 100644 tests/matrix_free/compute_diagonal_01.cc create mode 100644 tests/matrix_free/compute_diagonal_01.with_mpi=true.with_p4est=true.mpirun=1.output create mode 100644 tests/matrix_free/compute_diagonal_01.with_mpi=true.with_p4est=true.mpirun=3.output create mode 100644 tests/matrix_free/compute_diagonal_02.cc create mode 100644 tests/matrix_free/compute_diagonal_02.output create mode 100644 tests/matrix_free/compute_diagonal_03.cc create mode 100644 tests/matrix_free/compute_diagonal_03.with_mpi=true.with_p4est=true.mpirun=1.output create mode 100644 tests/matrix_free/compute_diagonal_util.h diff --git a/include/deal.II/matrix_free/tools.h b/include/deal.II/matrix_free/tools.h index b898a5bf32..38b2a52afa 100644 --- a/include/deal.II/matrix_free/tools.h +++ b/include/deal.II/matrix_free/tools.h @@ -20,6 +20,10 @@ #include +#include +#include +#include + 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 + void + compute_diagonal( + const MatrixFree &matrix_free, + LinearAlgebra::distributed::Vector & diagonal_global, + const std::function &)> &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 + struct LocalCSR + { + LocalCSR() + : row{0} + {} + + std::vector row_lid_to_gid; + std::vector row; + std::vector col; + std::vector val; + }; + } // namespace internal + + template + void + compute_diagonal( + const MatrixFree &matrix_free, + LinearAlgebra::distributed::Vector & diagonal_global, + const std::function &)> &local_vmult, + const unsigned int dof_no, + const unsigned int quad_no, + const unsigned int first_selected_component) + { + using VectorType = LinearAlgebra::distributed::Vector; + + // initialize vector + matrix_free.initialize_dof_vector(diagonal_global); + + int dummy; + + matrix_free.template cell_loop( + [&](const MatrixFree &matrix_free, + LinearAlgebra::distributed::Vector & diagonal_global, + const int &, + const std::pair &range) mutable { + FEEvaluation + 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, 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 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, 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> + 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 + 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 + 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(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 index 0000000000..5013d77e72 --- /dev/null +++ b/tests/matrix_free/compute_diagonal_01.cc @@ -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 > +void +test() +{ + parallel::distributed::Triangulation 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 fe_q(fe_degree); + const FESystem fe(fe_q, n_components); + + // setup dof-handlers + DoFHandler dof_handler(tria); + dof_handler.distribute_dofs(fe); + + AffineConstraints constraint; + DoFTools::make_hanging_node_constraints(dof_handler, constraint); + + VectorTools::interpolate_boundary_values( + dof_handler, 0, Functions::ZeroFunction(n_components), constraint); + + constraint.close(); + + typename MatrixFree::AdditionalData + additional_data; + additional_data.mapping_update_flags = update_values | update_gradients; + + MappingQ mapping(1); + QGauss<1> quad(fe_degree + 1); + + MatrixFree matrix_free; + matrix_free.reinit(mapping, dof_handler, constraint, quad, additional_data); + + + Test + test(matrix_free, + [](FEEvaluation &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 index 0000000000..15962b42b7 --- /dev/null +++ b/tests/matrix_free/compute_diagonal_01.with_mpi=true.with_p4est=true.mpirun=1.output @@ -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 index 0000000000..c1c54bf991 --- /dev/null +++ b/tests/matrix_free/compute_diagonal_01.with_mpi=true.with_p4est=true.mpirun=3.output @@ -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 index 0000000000..f7949e0fc7 --- /dev/null +++ b/tests/matrix_free/compute_diagonal_02.cc @@ -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 +class BoundaryValues : public Function +{ +public: + BoundaryValues() + : Function(dim) + {} + virtual void + vector_value(const Point &p, Vector &value) const; +}; +template +void +BoundaryValues::vector_value(const Point &p, + Vector & values) const +{ + (void)p; + for (unsigned int i = 0; i < values.size(); ++i) + values(i) = 0.0; + return; +} + +using namespace dealii; + +template > +void +test() +{ + Triangulation tria; + + GridGenerator::hyper_shell(tria, Point(), 1, 2, 0, true); + + tria.refine_global(0); + + + const FE_Q fe_q(fe_degree); + const FESystem fe(fe_q, n_components); + + // setup dof-handlers + DoFHandler dof_handler(tria); + dof_handler.distribute_dofs(fe); + + AffineConstraints 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 dirichlet_boundary = {0}; + std::set tangential_boundary = {1}; + + BoundaryValues 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::AdditionalData + additional_data; + additional_data.mapping_update_flags = update_values | update_gradients; + + MappingQ mapping(1); + QGauss<1> quad(fe_degree + 1); + + MatrixFree matrix_free; + matrix_free.reinit(mapping, dof_handler, constraints, quad, additional_data); + + + Test + test(matrix_free, + [](FEEvaluation &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 index 0000000000..5d9ae9b832 --- /dev/null +++ b/tests/matrix_free/compute_diagonal_02.output @@ -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 index 0000000000..0fd9c6e9b3 --- /dev/null +++ b/tests/matrix_free/compute_diagonal_03.cc @@ -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 > +void +test() +{ + parallel::distributed::Triangulation tria(MPI_COMM_WORLD); + + GridGenerator::hyper_ball(tria); + tria.refine_global(1); + + const FE_Q fe_q(fe_degree); + const FESystem fe(fe_q, n_components); + + // setup dof-handlers + DoFHandler dof_handler(tria); + dof_handler.distribute_dofs(fe); + + AffineConstraints constraint; + DoFTools::make_hanging_node_constraints(dof_handler, constraint); + + VectorTools::interpolate_boundary_values( + dof_handler, 0, Functions::ZeroFunction(n_components), constraint); + + constraint.close(); + + typename MatrixFree::AdditionalData + additional_data; + additional_data.mapping_update_flags = + update_values | update_gradients | update_quadrature_points; + + MappingQ mapping(1); + QGauss<1> quad(fe_degree + 1); + + MatrixFree matrix_free; + matrix_free.reinit(mapping, dof_handler, constraint, quad, additional_data); + + + Test + test(matrix_free, + [](FEEvaluation &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 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 index 0000000000..152a0b287f --- /dev/null +++ b/tests/matrix_free/compute_diagonal_03.with_mpi=true.with_p4est=true.mpirun=1.output @@ -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 index 0000000000..c0095bd82a --- /dev/null +++ b/tests/matrix_free/compute_diagonal_util.h @@ -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 +#include +#include + +#include + +#include + +#include +#include +#include +#include +#include + +#include +#include + +#include +#include +#include +#include + +#include + +#include + +#include "../tests.h" + +using namespace dealii; + + +template +class Test +{ + using VectorType = LinearAlgebra::distributed::Vector; + +public: + Test(const MatrixFree matrix_free, + const std::function &)> + &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( + 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 &data, + VectorType & dst, + const VectorType & src, + const std::pair &pair) const + { + FEEvaluation + 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 matrix_free; + const std::function &)> + &cell_operation; +}; -- 2.39.5