diff --git a/Applications/ApplicationsLib/ProjectData.cpp b/Applications/ApplicationsLib/ProjectData.cpp index c95908f87a660887131691403cda8f732d28bbc1..2047cb8548b236a3b2390fd8e406bbd36bbc4787 100644 --- a/Applications/ApplicationsLib/ProjectData.cpp +++ b/Applications/ApplicationsLib/ProjectData.cpp @@ -44,7 +44,7 @@ #include "ParameterLib/ConstantParameter.h" #include "ParameterLib/Utils.h" -#include "ProcessLib/UncoupledProcessesTimeLoop.h" +#include "ProcessLib/TimeLoop.h" #ifdef OGS_BUILD_PROCESS_COMPONENTTRANSPORT #include "ProcessLib/ComponentTransport/CreateComponentTransportProcess.h" @@ -922,7 +922,7 @@ void ProjectData::parseTimeLoop(BaseLib::ConfigTree const& config, { DBUG("Reading time loop configuration."); - _time_loop = ProcessLib::createUncoupledProcessesTimeLoop( + _time_loop = ProcessLib::createTimeLoop( config, output_directory, _processes, _nonlinear_solvers, _mesh_vec); if (!_time_loop) diff --git a/Applications/ApplicationsLib/ProjectData.h b/Applications/ApplicationsLib/ProjectData.h index b0c309dced3537786fc72995afdab58a4c25758e..b319c3341ff2c285030afd1bccaccea57e29c29e 100644 --- a/Applications/ApplicationsLib/ProjectData.h +++ b/Applications/ApplicationsLib/ProjectData.h @@ -38,7 +38,7 @@ class NonlinearSolverBase; namespace ProcessLib { -class UncoupledProcessesTimeLoop; +class TimeLoop; } /** @@ -49,9 +49,6 @@ class UncoupledProcessesTimeLoop; class ProjectData final { public: - /// The time loop type used to solve this project's processes. - using TimeLoop = ProcessLib::UncoupledProcessesTimeLoop; - /// The empty constructor used in the gui, for example, when the project's /// configuration is not loaded yet. ProjectData(); @@ -80,7 +77,8 @@ public: return _processes; } - TimeLoop& getTimeLoop() { return *_time_loop; } + ProcessLib::TimeLoop& getTimeLoop() { return *_time_loop; } + private: /// Parses the process variables configuration and creates new variables for /// each variable entry passing the corresponding subtree to the process @@ -127,7 +125,7 @@ private: std::map<int, std::unique_ptr<MaterialPropertyLib::Medium>> _media; /// The time loop used to solve this project's processes. - std::unique_ptr<TimeLoop> _time_loop; + std::unique_ptr<ProcessLib::TimeLoop> _time_loop; std::map<std::string, std::unique_ptr<GlobalLinearSolver>> _linear_solvers; diff --git a/Applications/CLI/ogs.cpp b/Applications/CLI/ogs.cpp index b2492c6bec91dbbb74f57a0c04b6f1e3338bc3eb..4b433084fb8b2aa312295f732e8f05bd9b4a6299 100644 --- a/Applications/CLI/ogs.cpp +++ b/Applications/CLI/ogs.cpp @@ -39,7 +39,7 @@ #include "Applications/ApplicationsLib/ProjectData.h" #include "Applications/ApplicationsLib/TestDefinition.h" #include "Applications/InSituLib/Adaptor.h" -#include "ProcessLib/UncoupledProcessesTimeLoop.h" +#include "ProcessLib/TimeLoop.h" #include "NumLib/NumericsConfig.h" diff --git a/ProcessLib/UncoupledProcessesTimeLoop.cpp b/ProcessLib/TimeLoop.cpp similarity index 94% rename from ProcessLib/UncoupledProcessesTimeLoop.cpp rename to ProcessLib/TimeLoop.cpp index 4e1a9d3199a131eebff1338d8a725a5af2792f0a..482cb1a4288ebbdb19bd2427fbc9c5917823a69f 100644 --- a/ProcessLib/UncoupledProcessesTimeLoop.cpp +++ b/ProcessLib/TimeLoop.cpp @@ -7,7 +7,7 @@ * */ -#include "UncoupledProcessesTimeLoop.h" +#include "TimeLoop.h" #include "BaseLib/Error.h" #include "BaseLib/RunTime.h" @@ -114,7 +114,7 @@ void setTimeDiscretizedODESystem(ProcessData& process_data) setTimeDiscretizedODESystem(process_data, process_data.process); } -std::unique_ptr<UncoupledProcessesTimeLoop> createUncoupledProcessesTimeLoop( +std::unique_ptr<TimeLoop> createTimeLoop( BaseLib::ConfigTree const& config, std::string const& output_directory, const std::map<std::string, std::unique_ptr<Process>>& processes, const std::map<std::string, std::unique_ptr<NumLib::NonlinearSolverBase>>& @@ -185,7 +185,7 @@ std::unique_ptr<UncoupledProcessesTimeLoop> createUncoupledProcessesTimeLoop( per_process_data[minmax_iter.second - per_process_data.begin()] ->timestepper->end(); - return std::make_unique<UncoupledProcessesTimeLoop>( + return std::make_unique<TimeLoop>( std::move(output), std::move(per_process_data), max_coupling_iterations, std::move(global_coupling_conv_criteria), start_time, end_time); } @@ -258,8 +258,8 @@ NumLib::NonlinearSolverStatus solveOneTimeStepOneProcess( auto const post_iteration_callback = [&](int iteration, GlobalVector const& x) { - output_control.doOutputNonlinearIteration(process, process_id, - timestep, t, x, iteration); + output_control.doOutputNonlinearIteration(process, process_id, timestep, + t, x, iteration); }; auto const nonlinear_solver_status = @@ -273,13 +273,12 @@ NumLib::NonlinearSolverStatus solveOneTimeStepOneProcess( return nonlinear_solver_status; } -UncoupledProcessesTimeLoop::UncoupledProcessesTimeLoop( - std::unique_ptr<Output>&& output, - std::vector<std::unique_ptr<ProcessData>>&& per_process_data, - const int global_coupling_max_iterations, - std::vector<std::unique_ptr<NumLib::ConvergenceCriterion>>&& - global_coupling_conv_crit, - const double start_time, const double end_time) +TimeLoop::TimeLoop(std::unique_ptr<Output>&& output, + std::vector<std::unique_ptr<ProcessData>>&& per_process_data, + const int global_coupling_max_iterations, + std::vector<std::unique_ptr<NumLib::ConvergenceCriterion>>&& + global_coupling_conv_crit, + const double start_time, const double end_time) : _output(std::move(output)), _per_process_data(std::move(per_process_data)), _start_time(start_time), @@ -289,7 +288,7 @@ UncoupledProcessesTimeLoop::UncoupledProcessesTimeLoop( { } -bool UncoupledProcessesTimeLoop::setCoupledSolutions() +bool TimeLoop::setCoupledSolutions() { // All _per_process_data share one process const bool use_monolithic_scheme = @@ -317,9 +316,9 @@ bool UncoupledProcessesTimeLoop::setCoupledSolutions() return true; // use staggered scheme. } -double UncoupledProcessesTimeLoop::computeTimeStepping( - const double prev_dt, double& t, std::size_t& accepted_steps, - std::size_t& rejected_steps) +double TimeLoop::computeTimeStepping(const double prev_dt, double& t, + std::size_t& accepted_steps, + std::size_t& rejected_steps) { bool all_process_steps_accepted = true; // Get minimum time step size among step sizes of all processes. @@ -478,7 +477,7 @@ double UncoupledProcessesTimeLoop::computeTimeStepping( * of the nonlinear solver. * */ -bool UncoupledProcessesTimeLoop::loop() +bool TimeLoop::loop() { // initialize output, convergence criterion, etc. { @@ -610,8 +609,7 @@ static std::string const nonlinear_fixed_dt_fails_info = "Nonlinear solver fails. Because the time stepper FixedTimeStepping is " "used, the program has to be terminated."; -NumLib::NonlinearSolverStatus -UncoupledProcessesTimeLoop::solveUncoupledEquationSystems( +NumLib::NonlinearSolverStatus TimeLoop::solveUncoupledEquationSystems( const double t, const double dt, const std::size_t timestep_id) { NumLib::NonlinearSolverStatus nonlinear_solver_status; @@ -665,7 +663,7 @@ UncoupledProcessesTimeLoop::solveUncoupledEquationSystems( } NumLib::NonlinearSolverStatus -UncoupledProcessesTimeLoop::solveCoupledEquationSystemsByStaggeredScheme( +TimeLoop::solveCoupledEquationSystemsByStaggeredScheme( const double t, const double dt, const std::size_t timestep_id) { // Coupling iteration @@ -819,10 +817,11 @@ UncoupledProcessesTimeLoop::solveCoupledEquationSystemsByStaggeredScheme( } template <typename OutputClass, typename OutputClassMember> -void UncoupledProcessesTimeLoop::outputSolutions( - bool const output_initial_condition, bool const is_staggered_coupling, - unsigned timestep, const double t, OutputClass& output_object, - OutputClassMember output_class_member) const +void TimeLoop::outputSolutions(bool const output_initial_condition, + bool const is_staggered_coupling, + unsigned timestep, const double t, + OutputClass& output_object, + OutputClassMember output_class_member) const { unsigned process_id = 0; for (auto& process_data : _per_process_data) @@ -857,20 +856,20 @@ void UncoupledProcessesTimeLoop::outputSolutions( &coupled_solutions); process_data->process .setCoupledTermForTheStaggeredSchemeToLocalAssemblers(); - (output_object.*output_class_member)( - pcs, process_id, timestep, t, x); + (output_object.*output_class_member)(pcs, process_id, timestep, t, + x); } else { - (output_object.*output_class_member)( - pcs, process_id, timestep, t, x); + (output_object.*output_class_member)(pcs, process_id, timestep, t, + x); } ++process_id; } } -UncoupledProcessesTimeLoop::~UncoupledProcessesTimeLoop() +TimeLoop::~TimeLoop() { for (auto* x : _process_solutions) { diff --git a/ProcessLib/UncoupledProcessesTimeLoop.h b/ProcessLib/TimeLoop.h similarity index 87% rename from ProcessLib/UncoupledProcessesTimeLoop.h rename to ProcessLib/TimeLoop.h index 92a1351cb35dc742656769ffe7abc6fd3a8669a0..f70eac7a04df85bcb7d061d6d425b19f75998375 100644 --- a/ProcessLib/UncoupledProcessesTimeLoop.h +++ b/ProcessLib/TimeLoop.h @@ -9,8 +9,8 @@ #pragma once -#include <memory> #include <functional> +#include <memory> #include <logog/include/logog.hpp> @@ -30,22 +30,19 @@ namespace ProcessLib struct ProcessData; /// Time loop capable of time-integrating several processes at once. -/// TODO: Rename to, e.g., TimeLoop, since it is not for purely uncoupled stuff -/// anymore. -class UncoupledProcessesTimeLoop +class TimeLoop { public: - UncoupledProcessesTimeLoop( - std::unique_ptr<Output>&& output, - std::vector<std::unique_ptr<ProcessData>>&& per_process_data, - const int global_coupling_max_iterations, - std::vector<std::unique_ptr<NumLib::ConvergenceCriterion>>&& - global_coupling_conv_crit, - const double start_time, const double end_time); + TimeLoop(std::unique_ptr<Output>&& output, + std::vector<std::unique_ptr<ProcessData>>&& per_process_data, + const int global_coupling_max_iterations, + std::vector<std::unique_ptr<NumLib::ConvergenceCriterion>>&& + global_coupling_conv_crit, + const double start_time, const double end_time); bool loop(); - ~UncoupledProcessesTimeLoop(); + ~TimeLoop(); /** * This function fills the vector of solutions of coupled processes of @@ -136,8 +133,8 @@ private: OutputClassMember output_class_member) const; }; -//! Builds an UncoupledProcessesTimeLoop from the given configuration. -std::unique_ptr<UncoupledProcessesTimeLoop> createUncoupledProcessesTimeLoop( +//! Builds an TimeLoop from the given configuration. +std::unique_ptr<TimeLoop> createTimeLoop( BaseLib::ConfigTree const& config, std::string const& output_directory, std::map<std::string, std::unique_ptr<Process>> const& processes, std::map<std::string, std::unique_ptr<NumLib::NonlinearSolverBase>> const&