diff --git a/ProcessLib/Process.cpp b/ProcessLib/Process.cpp index 7ccc78408ed9035e91994565483a60f19c8a9f1f..e2c3f120ec950d9be7134c7879dd4a08629f8695 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 1b69f8c6f9ceeed0ef44ac40929f28cc67acb7ef..6f0d5e29a635f95830fb729139ad5850ea3b769c 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 37603ef24985dda5a787e0d3b49a660215960d19..a354ccc4cbe610d33c09c35f944a37bbbeef3597 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};