From cfaf2c9955bf8331855425c6de510b069a505d09 Mon Sep 17 00:00:00 2001 From: renchao_lu <renchao.lu@gmail.com> Date: Tue, 22 Dec 2020 12:27:04 +0100 Subject: [PATCH] [PL] Pass x and x_prev to Process::setInitialConditions. --- ProcessLib/Process.cpp | 14 ++++++++++++-- ProcessLib/Process.h | 7 +++++-- ProcessLib/TimeLoop.cpp | 12 ++++-------- 3 files changed, 21 insertions(+), 12 deletions(-) diff --git a/ProcessLib/Process.cpp b/ProcessLib/Process.cpp index 7ccc78408ed..e2c3f120ec9 100644 --- a/ProcessLib/Process.cpp +++ b/ProcessLib/Process.cpp @@ -108,9 +108,15 @@ void Process::initialize() initializeBoundaryConditions(); } -void Process::setInitialConditions(const int process_id, double const t, - GlobalVector& x) +void Process::setInitialConditions( + std::vector<GlobalVector*>& process_solutions, + std::vector<GlobalVector*>& process_solutions_prev, + double const t, + int const process_id) { + auto& x = *process_solutions[process_id]; + auto& x_prev = *process_solutions_prev[process_id]; + // getDOFTableOfProcess can be overloaded by the specific process. auto const& dof_table_of_process = getDOFTable(process_id); @@ -163,6 +169,10 @@ void Process::setInitialConditions(const int process_id, double const t, } } } + + MathLib::LinAlg::finalizeAssembly(x); + MathLib::LinAlg::copy(x, x_prev); // pushState + setInitialConditionsConcreteProcess(x, t, process_id); } diff --git a/ProcessLib/Process.h b/ProcessLib/Process.h index 1b69f8c6f9c..6f0d5e29a63 100644 --- a/ProcessLib/Process.h +++ b/ProcessLib/Process.h @@ -82,8 +82,11 @@ public: void initialize(); - void setInitialConditions(const int process_id, const double t, - GlobalVector& x); + void setInitialConditions( + std::vector<GlobalVector*>& process_solutions, + std::vector<GlobalVector*>& process_solutions_prev, + double const t, + int const process_id); MathLib::MatrixSpecifications getMatrixSpecifications( const int process_id) const override; diff --git a/ProcessLib/TimeLoop.cpp b/ProcessLib/TimeLoop.cpp index 37603ef2498..a354ccc4cbe 100644 --- a/ProcessLib/TimeLoop.cpp +++ b/ProcessLib/TimeLoop.cpp @@ -218,10 +218,7 @@ setInitialConditions( for (auto& process_data : per_process_data) { - auto& pcs = process_data->process; auto const process_id = process_data->process_id; - auto& time_disc = *process_data->time_disc; - auto& ode_sys = *process_data->tdisc_ode_sys; // append a solution vector of suitable size @@ -232,13 +229,12 @@ setInitialConditions( &NumLib::GlobalVectorProvider::provider.getVector( ode_sys.getMatrixSpecifications(process_id))); - auto& x = *process_solutions[process_id]; - auto& x_prev = *process_solutions_prev[process_id]; - pcs.setInitialConditions(process_id, t0, x); - MathLib::LinAlg::finalizeAssembly(x); + auto& pcs = process_data->process; + pcs.setInitialConditions(process_solutions, process_solutions_prev, t0, + process_id); + auto& time_disc = *process_data->time_disc; time_disc.setInitialState(t0); // push IC - MathLib::LinAlg::copy(x, x_prev); // pushState } return {process_solutions, process_solutions_prev}; -- GitLab