diff --git a/ProcessLib/GroundwaterFlow/GroundwaterFlowProcess.h b/ProcessLib/GroundwaterFlow/GroundwaterFlowProcess.h index c3128d812a5304fc45c594c66d602fe224381b33..882dab4ee9056b942349ea2055bff2b02c0e2a06 100644 --- a/ProcessLib/GroundwaterFlow/GroundwaterFlowProcess.h +++ b/ProcessLib/GroundwaterFlow/GroundwaterFlowProcess.h @@ -60,7 +60,8 @@ public: return _local_assemblers[element_id]->getFlux(p, local_x); } - void postTimestepConcreteProcess(GlobalVector const& x) override + void postTimestepConcreteProcess(GlobalVector const& x, + int const /*process_id*/) override { if (_balance_mesh) // computing the balance is optional { diff --git a/ProcessLib/HydroMechanics/HydroMechanicsProcess-impl.h b/ProcessLib/HydroMechanics/HydroMechanicsProcess-impl.h index 6899f457e0f1e83f6659dbf0595dfe646167478e..29c79cd51255e8fcb869f8c632da0df7845e09fd 100644 --- a/ProcessLib/HydroMechanics/HydroMechanicsProcess-impl.h +++ b/ProcessLib/HydroMechanics/HydroMechanicsProcess-impl.h @@ -343,13 +343,12 @@ void HydroMechanicsProcess<DisplacementDim>::preTimestepConcreteProcess( template <int DisplacementDim> void HydroMechanicsProcess<DisplacementDim>::postTimestepConcreteProcess( - GlobalVector const& x) + GlobalVector const& x, const int process_id) { DBUG("PostTimestep HydroMechanicsProcess."); - GlobalExecutor::executeMemberOnDereferenced( &LocalAssemblerInterface::postTimestep, _local_assemblers, - *_local_to_global_index_map, x); + getDOFTable(process_id), x); } template <int DisplacementDim> diff --git a/ProcessLib/HydroMechanics/HydroMechanicsProcess.h b/ProcessLib/HydroMechanics/HydroMechanicsProcess.h index 7d795de2e23bb390f1c39cb92c74cc8f4d612677..1b773f2f90708361374ee8e03340341e0dda78a3 100644 --- a/ProcessLib/HydroMechanics/HydroMechanicsProcess.h +++ b/ProcessLib/HydroMechanics/HydroMechanicsProcess.h @@ -74,7 +74,8 @@ private: double const dt, const int process_id) override; - void postTimestepConcreteProcess(GlobalVector const& x) override; + void postTimestepConcreteProcess(GlobalVector const& x, + int const process_id) override; NumLib::LocalToGlobalIndexMap const& getDOFTable( const int process_id) const override; diff --git a/ProcessLib/LIE/SmallDeformation/SmallDeformationProcess.cpp b/ProcessLib/LIE/SmallDeformation/SmallDeformationProcess.cpp index 5f0a61315dce96765f52f362a890a639e163d0ac..209fdcc943a64a1f0106da806c9e920329f71528 100644 --- a/ProcessLib/LIE/SmallDeformation/SmallDeformationProcess.cpp +++ b/ProcessLib/LIE/SmallDeformation/SmallDeformationProcess.cpp @@ -395,7 +395,7 @@ void SmallDeformationProcess<DisplacementDim>::initializeConcreteProcess( template <int DisplacementDim> void SmallDeformationProcess<DisplacementDim>::postTimestepConcreteProcess( - GlobalVector const& x) + GlobalVector const& x, int const /*process_id*/) { DBUG("PostTimestep SmallDeformationProcess."); diff --git a/ProcessLib/LIE/SmallDeformation/SmallDeformationProcess.h b/ProcessLib/LIE/SmallDeformation/SmallDeformationProcess.h index 3245f76ec3853ccfc56f30c1b434f2a03c31ad1e..d7325fc331d7d2326c66cb33d4401a9f7600fc9d 100644 --- a/ProcessLib/LIE/SmallDeformation/SmallDeformationProcess.h +++ b/ProcessLib/LIE/SmallDeformation/SmallDeformationProcess.h @@ -70,7 +70,8 @@ private: double const dt, const int /*process_id*/) override; - void postTimestepConcreteProcess(GlobalVector const& x) override; + void postTimestepConcreteProcess(GlobalVector const& x, + int const process_id) override; private: SmallDeformationProcessData<DisplacementDim> _process_data; diff --git a/ProcessLib/PhaseField/PhaseFieldProcess-impl.h b/ProcessLib/PhaseField/PhaseFieldProcess-impl.h index daf7a2f507dc1832cd99beef93da2457c26fda50..6ea0104b3617df0042a8902666d71fc22927b708 100644 --- a/ProcessLib/PhaseField/PhaseFieldProcess-impl.h +++ b/ProcessLib/PhaseField/PhaseFieldProcess-impl.h @@ -180,7 +180,7 @@ void PhaseFieldProcess<DisplacementDim>::preTimestepConcreteProcess( template <int DisplacementDim> void PhaseFieldProcess<DisplacementDim>::postTimestepConcreteProcess( - GlobalVector const& x) + GlobalVector const& x, int const /*process_id*/) { DBUG("PostTimestep PhaseFieldProcess."); diff --git a/ProcessLib/PhaseField/PhaseFieldProcess.h b/ProcessLib/PhaseField/PhaseFieldProcess.h index 9e87e5e1e7da795e515642a6cded3d6a5734ca9d..efdc9d2b5954ae0b7a5b8be02edc726979a1c798 100644 --- a/ProcessLib/PhaseField/PhaseFieldProcess.h +++ b/ProcessLib/PhaseField/PhaseFieldProcess.h @@ -90,7 +90,8 @@ private: GlobalVector const& x, double const t, double const dt, const int process_id) override; - void postTimestepConcreteProcess(GlobalVector const& x) override; + void postTimestepConcreteProcess(GlobalVector const& x, + int const process_id) override; private: PhaseFieldProcessData<DisplacementDim> _process_data; diff --git a/ProcessLib/Process.cpp b/ProcessLib/Process.cpp index b2ea3a4503a69661fe98dd02ab08092a1bf99ff0..644d4575e436c25d257d45be108dd58b808383c1 100644 --- a/ProcessLib/Process.cpp +++ b/ProcessLib/Process.cpp @@ -105,13 +105,13 @@ void Process::initialize() initializeBoundaryConditions(); } -void Process::setInitialConditions(const unsigned processs_id, double const t, +void Process::setInitialConditions(const int process_id, double const t, GlobalVector& x) { // getDOFTableOfProcess can be overloaded by the specific process. - auto const dof_table_of_process = getDOFTable(processs_id); + auto const dof_table_of_process = getDOFTable(process_id); - auto const& per_process_variables = _process_variables[processs_id]; + auto const& per_process_variables = _process_variables[process_id]; for (std::size_t variable_id = 0; variable_id < per_process_variables.size(); variable_id++) @@ -120,7 +120,7 @@ void Process::setInitialConditions(const unsigned processs_id, double const t, auto const& pv = per_process_variables[variable_id]; DBUG("Set the initial condition of variable %s of process %d.", - pv.get().getName().data(), processs_id); + pv.get().getName().data(), process_id); auto const& ic = pv.get().getInitialCondition(); @@ -344,10 +344,10 @@ void Process::preTimestep(GlobalVector const& x, const double t, preTimestepConcreteProcess(x, t, delta_t, process_id); } -void Process::postTimestep(GlobalVector const& x) +void Process::postTimestep(GlobalVector const& x, int const process_id) { MathLib::LinAlg::setLocalAccessibleVector(x); - postTimestepConcreteProcess(x); + postTimestepConcreteProcess(x, process_id); } void Process::computeSecondaryVariable(const double t, GlobalVector const& x) diff --git a/ProcessLib/Process.h b/ProcessLib/Process.h index 3ca1e200efd9bc09ea8d18ebb843a0cf27db8b45..731cefeb64b32276ba899e04e618421df4acf666 100644 --- a/ProcessLib/Process.h +++ b/ProcessLib/Process.h @@ -57,7 +57,7 @@ public: const double delta_t, const int process_id); /// Postprocessing after a complete timestep. - void postTimestep(GlobalVector const& x); + void postTimestep(GlobalVector const& x, int const process_id); void preIteration(const unsigned iter, GlobalVector const& x) final; @@ -68,7 +68,7 @@ public: void initialize(); - void setInitialConditions(const unsigned processs_id, const double t, + void setInitialConditions(const int process_id, const double t, GlobalVector& x); virtual MathLib::MatrixSpecifications getMatrixSpecifications( @@ -175,7 +175,10 @@ private: { } - virtual void postTimestepConcreteProcess(GlobalVector const& /*x*/) {} + virtual void postTimestepConcreteProcess(GlobalVector const& /*x*/, + int const /*process_id*/) + { + } virtual void preIterationConcreteProcess(const unsigned /*iter*/, GlobalVector const& /*x*/) { diff --git a/ProcessLib/SmallDeformation/SmallDeformationProcess-impl.h b/ProcessLib/SmallDeformation/SmallDeformationProcess-impl.h index 9e0aba128ddb7d2f984c5197c4915287e794cc29..368e052e70b4b112db66eb49055e08385bdafbcf 100644 --- a/ProcessLib/SmallDeformation/SmallDeformationProcess-impl.h +++ b/ProcessLib/SmallDeformation/SmallDeformationProcess-impl.h @@ -191,7 +191,7 @@ void SmallDeformationProcess<DisplacementDim>::preTimestepConcreteProcess( template <int DisplacementDim> void SmallDeformationProcess<DisplacementDim>::postTimestepConcreteProcess( - GlobalVector const& x) + GlobalVector const& x, int const /*process_id*/) { DBUG("PostTimestep SmallDeformationProcess."); diff --git a/ProcessLib/SmallDeformation/SmallDeformationProcess.h b/ProcessLib/SmallDeformation/SmallDeformationProcess.h index 85247bf0c12a2d8c97102563c1eb4b84c079f5bb..4375858b7e754d40301f7879477a8c8f01eab920 100644 --- a/ProcessLib/SmallDeformation/SmallDeformationProcess.h +++ b/ProcessLib/SmallDeformation/SmallDeformationProcess.h @@ -62,7 +62,8 @@ private: GlobalVector const& x, double const t, double const dt, const int process_id) override; - void postTimestepConcreteProcess(GlobalVector const& x) override; + void postTimestepConcreteProcess(GlobalVector const& x, + int const process_id) override; private: SmallDeformationProcessData<DisplacementDim> _process_data; diff --git a/ProcessLib/ThermoMechanics/ThermoMechanicsProcess-impl.h b/ProcessLib/ThermoMechanics/ThermoMechanicsProcess-impl.h index 9e6c049a25602cbf1103134f7322d5c177e8bfeb..4e056c74ca51261b6544ed7e462b74f78e9420fc 100644 --- a/ProcessLib/ThermoMechanics/ThermoMechanicsProcess-impl.h +++ b/ProcessLib/ThermoMechanics/ThermoMechanicsProcess-impl.h @@ -195,7 +195,7 @@ void ThermoMechanicsProcess<DisplacementDim>::preTimestepConcreteProcess( template <int DisplacementDim> void ThermoMechanicsProcess<DisplacementDim>::postTimestepConcreteProcess( - GlobalVector const& x) + GlobalVector const& x, int const /*process_id*/) { DBUG("PostTimestep ThermoMechanicsProcess."); diff --git a/ProcessLib/ThermoMechanics/ThermoMechanicsProcess.h b/ProcessLib/ThermoMechanics/ThermoMechanicsProcess.h index cac7104ef5b439f753522bbb5eb607991c872068..2fb243e92f729133bc3de684b657031c638cf9fd 100644 --- a/ProcessLib/ThermoMechanics/ThermoMechanicsProcess.h +++ b/ProcessLib/ThermoMechanics/ThermoMechanicsProcess.h @@ -63,7 +63,8 @@ private: GlobalVector const& x, double const t, double const dt, const int process_id) override; - void postTimestepConcreteProcess(GlobalVector const& x) override; + void postTimestepConcreteProcess(GlobalVector const& x, + int const process_id) override; private: std::vector<MeshLib::Node*> _base_nodes; diff --git a/ProcessLib/UncoupledProcessesTimeLoop.cpp b/ProcessLib/UncoupledProcessesTimeLoop.cpp index d196a80401431dd224298b7607ab662bc92bed53..4b4e4ec926d2bc7eb4078dace0b6dfb8d36d0ebd 100644 --- a/ProcessLib/UncoupledProcessesTimeLoop.cpp +++ b/ProcessLib/UncoupledProcessesTimeLoop.cpp @@ -803,7 +803,7 @@ bool UncoupledProcessesTimeLoop::solveUncoupledEquationSystems( const auto nonlinear_solver_succeeded = solveOneTimeStepOneProcess(pcs_idx, x, timestep_id, t, dt, *spd, *_output); spd->nonlinear_solver_converged = nonlinear_solver_succeeded; - pcs.postTimestep(x); + pcs.postTimestep(x, pcs_idx); pcs.computeSecondaryVariable(t, x); INFO("[time] Solving process #%u took %g s in time step #%u ", pcs_idx, @@ -958,7 +958,7 @@ bool UncoupledProcessesTimeLoop::solveCoupledEquationSystemsByStaggeredScheme( } auto& pcs = spd->process; auto& x = *_process_solutions[pcs_idx]; - pcs.postTimestep(x); + pcs.postTimestep(x, pcs_idx); pcs.computeSecondaryVariable(t, x); ++pcs_idx;