From c5cce237e6771ff9b294cca63759935bac247d0f Mon Sep 17 00:00:00 2001 From: renchao_lu <renchao.lu@gmail.com> Date: Sat, 21 Nov 2020 21:53:11 +0100 Subject: [PATCH] [PL] Improve LocalAssemblerInterface::postTimeStep. --- ProcessLib/LocalAssemblerInterface.cpp | 19 +++++++++++++++---- ProcessLib/LocalAssemblerInterface.h | 8 ++++---- 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/ProcessLib/LocalAssemblerInterface.cpp b/ProcessLib/LocalAssemblerInterface.cpp index 176abcf59bd..2527e34b367 100644 --- a/ProcessLib/LocalAssemblerInterface.cpp +++ b/ProcessLib/LocalAssemblerInterface.cpp @@ -131,11 +131,22 @@ void LocalAssemblerInterface::preTimestep( void LocalAssemblerInterface::postTimestep( std::size_t const mesh_item_id, - NumLib::LocalToGlobalIndexMap const& dof_table, GlobalVector const& x, - double const t, double const dt) + std::vector<NumLib::LocalToGlobalIndexMap const*> const& dof_tables, + std::vector<GlobalVector*> const& x, double const t, double const dt) { - auto const indices = NumLib::getIndices(mesh_item_id, dof_table); - auto const local_x = x.get(indices); + std::vector<double> local_x_vec; + + auto const n_processes = x.size(); + for (std::size_t process_id = 0; process_id < n_processes; ++process_id) + { + auto const indices = + NumLib::getIndices(mesh_item_id, *dof_tables[process_id]); + assert(!indices.empty()); + auto const local_solution = x[process_id]->get(indices); + local_x_vec.insert(std::end(local_x_vec), std::begin(local_solution), + std::end(local_solution)); + } + auto const local_x = MathLib::toVector(local_x_vec); postTimestepConcrete(local_x, t, dt); } diff --git a/ProcessLib/LocalAssemblerInterface.h b/ProcessLib/LocalAssemblerInterface.h index ced1e4d39c5..9b2753b463a 100644 --- a/ProcessLib/LocalAssemblerInterface.h +++ b/ProcessLib/LocalAssemblerInterface.h @@ -89,10 +89,10 @@ public: GlobalVector const& x, double const t, double const delta_t); - virtual void postTimestep(std::size_t const mesh_item_id, - NumLib::LocalToGlobalIndexMap const& dof_table, - GlobalVector const& x, double const t, - double const dt); + virtual void postTimestep( + std::size_t const mesh_item_id, + std::vector<NumLib::LocalToGlobalIndexMap const*> const& dof_tables, + std::vector<GlobalVector*> const& x, double const t, double const dt); void postNonLinearSolver(std::size_t const mesh_item_id, NumLib::LocalToGlobalIndexMap const& dof_table, -- GitLab