diff --git a/ProcessLib/HydroMechanics/HydroMechanicsProcess.cpp b/ProcessLib/HydroMechanics/HydroMechanicsProcess.cpp index 96b6c73369664982f2d1c72cfea628c2c8a4dcec..11fdc1a13ac41a2ac07f02c0100dfc85e2d0e860 100644 --- a/ProcessLib/HydroMechanics/HydroMechanicsProcess.cpp +++ b/ProcessLib/HydroMechanics/HydroMechanicsProcess.cpp @@ -421,8 +421,9 @@ void HydroMechanicsProcess<DisplacementDim>::postTimestepConcreteProcess( template <int DisplacementDim> void HydroMechanicsProcess<DisplacementDim>::postNonLinearSolverConcreteProcess( - GlobalVector const& x, GlobalVector const& x_prev, const double t, - double const dt, const int process_id) + std::vector<GlobalVector*> const& x, + std::vector<GlobalVector*> const& x_prev, const double t, double const dt, + const int process_id) { DBUG("PostNonLinearSolver HydroMechanicsProcess."); diff --git a/ProcessLib/HydroMechanics/HydroMechanicsProcess.h b/ProcessLib/HydroMechanics/HydroMechanicsProcess.h index a493d60de08ca95ba14d31eb52570acd1dce1f29..6a1cf557087e87111af893f238799639157ebf73 100644 --- a/ProcessLib/HydroMechanics/HydroMechanicsProcess.h +++ b/ProcessLib/HydroMechanics/HydroMechanicsProcess.h @@ -97,10 +97,10 @@ private: const double t, const double dt, int const process_id) override; - void postNonLinearSolverConcreteProcess(GlobalVector const& x, - GlobalVector const& x_prev, - const double t, double const dt, - int const process_id) override; + void postNonLinearSolverConcreteProcess( + std::vector<GlobalVector*> const& x, + std::vector<GlobalVector*> const& x_prev, const double t, + double const dt, int const process_id) override; void setInitialConditionsConcreteProcess(std::vector<GlobalVector*>& x, double const t, diff --git a/ProcessLib/LocalAssemblerInterface.cpp b/ProcessLib/LocalAssemblerInterface.cpp index def554c2e3ad6168d145713b4ff7b8ae067336e8..5ed9d363e76cc71adca7e73bffd525cca8cfe3f4 100644 --- a/ProcessLib/LocalAssemblerInterface.cpp +++ b/ProcessLib/LocalAssemblerInterface.cpp @@ -162,13 +162,14 @@ void LocalAssemblerInterface::postTimestep( void LocalAssemblerInterface::postNonLinearSolver( std::size_t const mesh_item_id, - NumLib::LocalToGlobalIndexMap const& dof_table, GlobalVector const& x, - GlobalVector const& x_prev, double const t, double const dt, + NumLib::LocalToGlobalIndexMap const& dof_table, + std::vector<GlobalVector*> const& x, + std::vector<GlobalVector*> const& x_prev, double const t, double const dt, bool const use_monolithic_scheme, int const process_id) { auto const indices = NumLib::getIndices(mesh_item_id, dof_table); - auto const local_x = x.get(indices); - auto const local_x_prev = x_prev.get(indices); + auto const local_x = x[process_id]->get(indices); + auto const local_x_prev = x_prev[process_id]->get(indices); postNonLinearSolverConcrete(local_x, local_x_prev, t, dt, use_monolithic_scheme, process_id); diff --git a/ProcessLib/LocalAssemblerInterface.h b/ProcessLib/LocalAssemblerInterface.h index 0034cecce20404a696f5f2525e0d2e6e8e76218d..75252fba2d6146c79950e4f92677e07dd7e244bf 100644 --- a/ProcessLib/LocalAssemblerInterface.h +++ b/ProcessLib/LocalAssemblerInterface.h @@ -97,7 +97,8 @@ public: void postNonLinearSolver(std::size_t const mesh_item_id, NumLib::LocalToGlobalIndexMap const& dof_table, - GlobalVector const& x, GlobalVector const& x_prev, + std::vector<GlobalVector*> const& x, + std::vector<GlobalVector*> const& x_prev, double const t, double const dt, bool const use_monolithic_scheme, int const process_id); diff --git a/ProcessLib/PhaseField/PhaseFieldProcess.cpp b/ProcessLib/PhaseField/PhaseFieldProcess.cpp index 5cbe52ab02add9a5a8e958c6960aa63b97364528..5a725b1f352472de3bd3b9b639e5076985bbd3a2 100644 --- a/ProcessLib/PhaseField/PhaseFieldProcess.cpp +++ b/ProcessLib/PhaseField/PhaseFieldProcess.cpp @@ -333,7 +333,8 @@ void PhaseFieldProcess<DisplacementDim>::postTimestepConcreteProcess( template <int DisplacementDim> void PhaseFieldProcess<DisplacementDim>::postNonLinearSolverConcreteProcess( - GlobalVector const& x, GlobalVector const& /*x_prev*/, const double t, + std::vector<GlobalVector*> const& x, + std::vector<GlobalVector*> const& /*x_prev*/, const double t, double const /*dt*/, const int process_id) { _process_data.crack_volume = 0.0; diff --git a/ProcessLib/PhaseField/PhaseFieldProcess.h b/ProcessLib/PhaseField/PhaseFieldProcess.h index ba2680f6eace85d857fdaa0c12839f2a38be8c0e..e7b1a995931fb0f035c4a9d455cd83726809c652 100644 --- a/ProcessLib/PhaseField/PhaseFieldProcess.h +++ b/ProcessLib/PhaseField/PhaseFieldProcess.h @@ -82,10 +82,10 @@ private: const double t, const double delta_t, int const process_id) override; - void postNonLinearSolverConcreteProcess(GlobalVector const& x, - GlobalVector const& x_prev, - const double t, double const dt, - int const process_id) override; + void postNonLinearSolverConcreteProcess( + std::vector<GlobalVector*> const& x, + std::vector<GlobalVector*> const& x_prev, const double t, + double const dt, int const process_id) override; void updateConstraints(GlobalVector& lower, GlobalVector& upper, int const process_id) override; diff --git a/ProcessLib/Process.cpp b/ProcessLib/Process.cpp index 86ac40a84e4ee38ea321bcb1e759b18cd5bb5378..3aa82bf248c07c2df223e73275106398374fca71 100644 --- a/ProcessLib/Process.cpp +++ b/ProcessLib/Process.cpp @@ -414,12 +414,20 @@ void Process::postTimestep(std::vector<GlobalVector*> const& x, _boundary_conditions[process_id].postTimestep(t, x, process_id); } -void Process::postNonLinearSolver(GlobalVector const& x, - GlobalVector const& x_prev, const double t, - double const dt, int const process_id) +void Process::postNonLinearSolver(std::vector<GlobalVector*> const& x, + std::vector<GlobalVector*> const& x_prev, + const double t, double const dt, + int const process_id) { - MathLib::LinAlg::setLocalAccessibleVector(x); - MathLib::LinAlg::setLocalAccessibleVector(x_prev); + for (auto* const solution : x) + { + MathLib::LinAlg::setLocalAccessibleVector(*solution); + } + for (auto* const solution : x_prev) + { + MathLib::LinAlg::setLocalAccessibleVector(*solution); + } + postNonLinearSolverConcreteProcess(x, x_prev, t, dt, process_id); } diff --git a/ProcessLib/Process.h b/ProcessLib/Process.h index d72b136fbea69eb85bf2a6c97e65c1ab6230e7b5..77b10f70eb4aabc603381f7cbddb032b1158aa3f 100644 --- a/ProcessLib/Process.h +++ b/ProcessLib/Process.h @@ -68,7 +68,8 @@ public: /// Calculates secondary variables, e.g. stress and strain for deformation /// analysis, only after nonlinear solver being successfully conducted. - void postNonLinearSolver(GlobalVector const& x, GlobalVector const& x_prev, + void postNonLinearSolver(std::vector<GlobalVector*> const& x, + std::vector<GlobalVector*> const& x_prev, const double t, double const dt, int const process_id); @@ -267,8 +268,9 @@ private: } virtual void postNonLinearSolverConcreteProcess( - GlobalVector const& /*x*/, GlobalVector const& /*x_prev*/, - const double /*t*/, double const /*dt*/, int const /*process_id*/) + std::vector<GlobalVector*> const& /*x*/, + std::vector<GlobalVector*> const& /*x_prev*/, const double /*t*/, + double const /*dt*/, int const /*process_id*/) { } diff --git a/ProcessLib/ThermoMechanicalPhaseField/ThermoMechanicalPhaseFieldProcess.cpp b/ProcessLib/ThermoMechanicalPhaseField/ThermoMechanicalPhaseFieldProcess.cpp index 49251ed7e7fe65ba8e4c8fd498ebe63d3663b4c0..bb990ace0aacc34b8ebcf2d9a5abb34eb8a93d14 100644 --- a/ProcessLib/ThermoMechanicalPhaseField/ThermoMechanicalPhaseFieldProcess.cpp +++ b/ProcessLib/ThermoMechanicalPhaseField/ThermoMechanicalPhaseFieldProcess.cpp @@ -306,8 +306,8 @@ void ThermoMechanicalPhaseFieldProcess<DisplacementDim>:: template <int DisplacementDim> void ThermoMechanicalPhaseFieldProcess<DisplacementDim>:: - postNonLinearSolverConcreteProcess(GlobalVector const& x, - GlobalVector const& x_prev, + postNonLinearSolverConcreteProcess(std::vector<GlobalVector*> const& x, + std::vector<GlobalVector*> const& x_prev, const double t, double const dt, const int process_id) { diff --git a/ProcessLib/ThermoMechanicalPhaseField/ThermoMechanicalPhaseFieldProcess.h b/ProcessLib/ThermoMechanicalPhaseField/ThermoMechanicalPhaseFieldProcess.h index 2fa5633e108de3768c4dac6efddc5cb18bdc150a..cc6cec904503f14dec20f402a1af0477c39137bf 100644 --- a/ProcessLib/ThermoMechanicalPhaseField/ThermoMechanicalPhaseFieldProcess.h +++ b/ProcessLib/ThermoMechanicalPhaseField/ThermoMechanicalPhaseFieldProcess.h @@ -114,10 +114,10 @@ private: double const t, double const dt, int const process_id) override; - void postNonLinearSolverConcreteProcess(GlobalVector const& x, - GlobalVector const& x_prev, - const double t, double const dt, - int const process_id) override; + void postNonLinearSolverConcreteProcess( + std::vector<GlobalVector*> const& x, + std::vector<GlobalVector*> const& x_prev, const double t, + double const dt, int const process_id) override; // To be replaced. NumLib::LocalToGlobalIndexMap& getDOFTableByProcessID( diff --git a/ProcessLib/TimeLoop.cpp b/ProcessLib/TimeLoop.cpp index 7822438802c517f15807949a871e1929a0e3c023..fa4825680f12a81b818e83a4fa7f739faf9d3427 100644 --- a/ProcessLib/TimeLoop.cpp +++ b/ProcessLib/TimeLoop.cpp @@ -256,8 +256,7 @@ NumLib::NonlinearSolverStatus solveOneTimeStepOneProcess( return nonlinear_solver_status; } - process.postNonLinearSolver(*x[process_id], *x_prev[process_id], t, delta_t, - process_id); + process.postNonLinearSolver(x, x_prev, t, delta_t, process_id); return nonlinear_solver_status; }