From 03bfa22f0c214d0b9e19b3c493cc7f3fb0e53b85 Mon Sep 17 00:00:00 2001 From: Jean-Paul Pelteret Date: Tue, 3 Jul 2018 09:26:54 +0200 Subject: [PATCH] Enhance SolutionTransfer documentation Includes a note on how to use with MPI partitioned grids --- include/deal.II/numerics/solution_transfer.h | 29 ++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/include/deal.II/numerics/solution_transfer.h b/include/deal.II/numerics/solution_transfer.h index 457dd332dd..d379bc80e2 100644 --- a/include/deal.II/numerics/solution_transfer.h +++ b/include/deal.II/numerics/solution_transfer.h @@ -113,6 +113,35 @@ DEAL_II_NAMESPACE_OPEN * soltrans.interpolate(solution, interpolated_solution); * @endcode * + * If the grid is partitioned across several MPI processes, then it is + * important to note that the old solution(s) must be copied to one that + * also provides access to the locally relevant DoF values (these values + * required for the interpolation process): + * @code + * // Create initial indexsets pertaining to the grid before refinement + * IndexSet locally_owned_dofs, locally_relevant_dofs; + * locally_owned_dofs = dof_handler.locally_owned_dofs(); + * DoFTools::extract_locally_relevant_dofs(dof_handler, locally_relevant_dofs); + * + * // The solution vector only knows about locally owned DoFs + * TrilinosWrappers::MPI::Vector solution; + * solution.reinit(locally_owned_dofs, + * mpi_communicator); + * ... + * // Transfer solution to vector that provides access to locally relevant DoFs + * TrilinosWrappers::MPI::Vector old_solution; + * old_solution.reinit(locally_owned_dofs, + * locally_relevant_dofs, + * mpi_communicator); + * old_solution = solution; + * ... + * // Refine grid + * // Recreate locally_owned_dofs and locally_relevant_dofs index sets + * ... + * solution.reinit(locally_owned_dofs, mpi_communicator); + * soltrans.refine_interpolate(old_solution, solution); + * @endcode + * * Multiple calls to the function interpolate (const Vector &in, * Vector &out) are NOT allowed. Interpolating several * functions can be performed in one step by using void interpolate (const -- 2.39.5