From b17a21722475b44258fd31b77ab89757dfb1cc0c Mon Sep 17 00:00:00 2001 From: Wenqing Wang <wenqing.wang@ufz.de> Date: Fri, 9 Jun 2017 14:02:26 +0200 Subject: [PATCH] [Coupling] Added calling of setLocalAccessibleVector for coupled solutions --- .../HeatConduction/HeatConductionProcess.cpp | 3 -- ProcessLib/StaggeredCouplingTerm.cpp | 30 +++++++++++++++++++ ProcessLib/StaggeredCouplingTerm.h | 8 +---- 3 files changed, 31 insertions(+), 10 deletions(-) diff --git a/ProcessLib/HeatConduction/HeatConductionProcess.cpp b/ProcessLib/HeatConduction/HeatConductionProcess.cpp index 94e61d25717..d341c30a4f9 100644 --- a/ProcessLib/HeatConduction/HeatConductionProcess.cpp +++ b/ProcessLib/HeatConduction/HeatConductionProcess.cpp @@ -47,9 +47,6 @@ void HeatConductionProcess::preTimestepConcreteProcess(GlobalVector const& x, auto& x0 = *_x_previous_timestep; MathLib::LinAlg::copy(x, x0); } - - auto& x0 = *_x_previous_timestep; - MathLib::LinAlg::setLocalAccessibleVector(x0); } void HeatConductionProcess::initializeConcreteProcess( diff --git a/ProcessLib/StaggeredCouplingTerm.cpp b/ProcessLib/StaggeredCouplingTerm.cpp index a6c7b0da65d..7047b87f829 100644 --- a/ProcessLib/StaggeredCouplingTerm.cpp +++ b/ProcessLib/StaggeredCouplingTerm.cpp @@ -11,10 +11,40 @@ */ #include "StaggeredCouplingTerm.h" + +#include "MathLib/LinAlg/LinAlg.h" #include "Process.h" namespace ProcessLib { + +StaggeredCouplingTerm::StaggeredCouplingTerm( + std::unordered_map<std::type_index, Process const&> const& + coupled_processes_, + std::unordered_map<std::type_index, GlobalVector const&> const& coupled_xs_, + const double dt_, const bool empty_) + : coupled_processes(coupled_processes_), + coupled_xs(coupled_xs_), + dt(dt_), + empty(empty_) +{ + for (auto const& coupled_x_pair : coupled_xs) + { + auto const& coupled_x = coupled_x_pair.second; + MathLib::LinAlg::setLocalAccessibleVector(coupled_x); + } + + for (auto const& coupled_process_pair : coupled_processes) + { + auto const& coupled_pcs = coupled_process_pair.second; + auto const prevous_time_x = coupled_pcs.getPreviousTimeStepSolution(); + if (prevous_time_x) + { + MathLib::LinAlg::setLocalAccessibleVector(*prevous_time_x); + } + } +} + const StaggeredCouplingTerm createVoidStaggeredCouplingTerm() { std::unordered_map<std::type_index, Process const&> coupled_processes; diff --git a/ProcessLib/StaggeredCouplingTerm.h b/ProcessLib/StaggeredCouplingTerm.h index 8e362536a17..6cbebcc99ab 100644 --- a/ProcessLib/StaggeredCouplingTerm.h +++ b/ProcessLib/StaggeredCouplingTerm.h @@ -36,13 +36,7 @@ struct StaggeredCouplingTerm coupled_processes_, std::unordered_map<std::type_index, GlobalVector const&> const& coupled_xs_, - const double dt_, const bool empty_ = false) - : coupled_processes(coupled_processes_), - coupled_xs(coupled_xs_), - dt(dt_), - empty(empty_) - { - } + const double dt_, const bool empty_ = false); /// References to the coupled processes are distinguished by the keys of /// process types. -- GitLab