From d74a9670c69ca61f16642ace4439645da416f3f8 Mon Sep 17 00:00:00 2001 From: Peter Munch Date: Thu, 3 Dec 2020 18:48:32 +0100 Subject: [PATCH] MatrixFreeTools::compute_diagonal: enable for hp --- include/deal.II/matrix_free/tools.h | 2 +- tests/matrix_free/compute_diagonal_04.cc | 92 +++++++++++++++++++ ...h_mpi=true.with_p4est=true.mpirun=1.output | 16 ++++ tests/matrix_free/compute_diagonal_util.h | 2 +- 4 files changed, 110 insertions(+), 2 deletions(-) create mode 100644 tests/matrix_free/compute_diagonal_04.cc create mode 100644 tests/matrix_free/compute_diagonal_04.with_mpi=true.with_p4est=true.mpirun=1.output diff --git a/include/deal.II/matrix_free/tools.h b/include/deal.II/matrix_free/tools.h index 1cd9540ab9..8bd19d735e 100644 --- a/include/deal.II/matrix_free/tools.h +++ b/include/deal.II/matrix_free/tools.h @@ -287,7 +287,7 @@ namespace MatrixFreeTools n_components, Number, VectorizedArrayType> - phi(matrix_free, dof_no, quad_no, first_selected_component); + phi(matrix_free, range, dof_no, quad_no, first_selected_component); const unsigned int n_lanes = VectorizedArrayType::size(); diff --git a/tests/matrix_free/compute_diagonal_04.cc b/tests/matrix_free/compute_diagonal_04.cc new file mode 100644 index 0000000000..0f7b986425 --- /dev/null +++ b/tests/matrix_free/compute_diagonal_04.cc @@ -0,0 +1,92 @@ +// --------------------------------------------------------------------- +// +// 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. +// +// --------------------------------------------------------------------- + + +// Same as compute_diagonal_01 but for hp. + +#include "compute_diagonal_util.h" + +template > +void +test() +{ + const unsigned int n_components = 1; + + 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(); + + + hp::FECollection fes{FE_Q(1), FE_Q(2)}; + + // setup dof-handlers + DoFHandler dof_handler(tria); + + unsigned int counter = 0; + + for (const auto &cell : dof_handler.active_cell_iterators()) + cell->set_active_fe_index(++counter % 2); + + dof_handler.distribute_dofs(fes); + + 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(2); + + MatrixFree matrix_free; + matrix_free.reinit(mapping, dof_handler, constraint, quad, additional_data); + + + Test test( + matrix_free, + constraint, + [](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>(); +} diff --git a/tests/matrix_free/compute_diagonal_04.with_mpi=true.with_p4est=true.mpirun=1.output b/tests/matrix_free/compute_diagonal_04.with_mpi=true.with_p4est=true.mpirun=1.output new file mode 100644 index 0000000000..f04f6130c7 --- /dev/null +++ b/tests/matrix_free/compute_diagonal_04.with_mpi=true.with_p4est=true.mpirun=1.output @@ -0,0 +1,16 @@ + +Process #0 +Local range: [0, 40), global size: 40 +Vector data: +0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 4.741e+00 3.296e+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 3.259e+00 4.741e+00 0.000e+00 0.000e+00 3.111e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 3.259e+00 4.741e+00 3.111e+00 0.000e+00 0.000e+00 0.000e+00 3.259e+00 4.741e+00 3.111e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 4.741e+00 0.000e+00 +DEAL:0::13.5700 +Process #0 +Local range: [0, 40), global size: 40 +Vector data: +0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 4.741e+00 3.296e+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 3.259e+00 4.741e+00 0.000e+00 0.000e+00 3.111e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 3.259e+00 4.741e+00 3.111e+00 0.000e+00 0.000e+00 0.000e+00 3.259e+00 4.741e+00 3.111e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 4.741e+00 0.000e+00 +DEAL:0::13.5700 +Process #0 +Local range: [0, 40), global size: 40 +Vector data: +0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 4.741e+00 3.296e+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 3.259e+00 4.741e+00 0.000e+00 0.000e+00 3.111e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 3.259e+00 4.741e+00 3.111e+00 0.000e+00 0.000e+00 0.000e+00 3.259e+00 4.741e+00 3.111e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 0.000e+00 4.741e+00 0.000e+00 +DEAL:0::13.5700 diff --git a/tests/matrix_free/compute_diagonal_util.h b/tests/matrix_free/compute_diagonal_util.h index 2dd9047374..6d2a3c5ddd 100644 --- a/tests/matrix_free/compute_diagonal_util.h +++ b/tests/matrix_free/compute_diagonal_util.h @@ -208,7 +208,7 @@ public: n_components, Number, VectorizedArrayType> - phi(data); + phi(data, pair); for (auto cell = pair.first; cell < pair.second; cell++) { phi.reinit(cell); -- 2.39.5