diff --git a/ProcessLib/CreateProcessData.cpp b/ProcessLib/CreateProcessData.cpp index 94c777e47a1010b1e1bd0b2282d8100091b73d78..b8ff8aff11800b180e286e7f805e47320644521e 100644 --- a/ProcessLib/CreateProcessData.cpp +++ b/ProcessLib/CreateProcessData.cpp @@ -23,9 +23,8 @@ namespace ProcessLib { static std::unique_ptr<ProcessData> makeProcessData( std::unique_ptr<NumLib::TimeStepAlgorithm>&& timestepper, - NumLib::NonlinearSolverBase& nonlinear_solver, - int const process_id, - Process& process, + NumLib::NonlinearSolverBase& nonlinear_solver, int const process_id, + std::string process_name, Process& process, std::unique_ptr<NumLib::TimeDiscretization>&& time_disc, std::unique_ptr<NumLib::ConvergenceCriterion>&& conv_crit, bool const compensate_non_equilibrium_initial_residuum) @@ -40,7 +39,8 @@ static std::unique_ptr<ProcessData> makeProcessData( compensate_non_equilibrium_initial_residuum); return std::make_unique<ProcessData>( std::move(timestepper), Tag::Picard, *nonlinear_solver_picard, - std::move(conv_crit), std::move(time_disc), process_id, process); + std::move(conv_crit), std::move(time_disc), process_id, + std::move(process_name), process); } if (auto* nonlinear_solver_newton = dynamic_cast<NumLib::NonlinearSolver<Tag::Newton>*>( @@ -50,7 +50,8 @@ static std::unique_ptr<ProcessData> makeProcessData( compensate_non_equilibrium_initial_residuum); return std::make_unique<ProcessData>( std::move(timestepper), Tag::Newton, *nonlinear_solver_newton, - std::move(conv_crit), std::move(time_disc), process_id, process); + std::move(conv_crit), std::move(time_disc), process_id, + std::move(process_name), process); } #ifdef USE_PETSC if (auto* nonlinear_solver_petsc = @@ -58,7 +59,8 @@ static std::unique_ptr<ProcessData> makeProcessData( { return std::make_unique<ProcessData>( std::move(timestepper), Tag::Newton, *nonlinear_solver_petsc, - std::move(conv_crit), std::move(time_disc), process_id, process); + std::move(conv_crit), std::move(time_disc), process_id, + std::move(process_name), process); } #endif // USE_PETSC @@ -71,8 +73,7 @@ std::vector<std::unique_ptr<ProcessData>> createPerProcessData( std::map<std::string, std::unique_ptr<NumLib::NonlinearSolverBase>> const& nonlinear_solvers, bool const compensate_non_equilibrium_initial_residuum, - std::vector<double> const& fixed_times_for_output, - std::map<std::string, int>& local_coupling_processes) + std::vector<double> const& fixed_times_for_output) { std::vector<std::unique_ptr<ProcessData>> per_process_data; std::vector<std::string> process_names; @@ -91,31 +92,20 @@ std::vector<std::unique_ptr<ProcessData>> createPerProcessData( auto const process_name = //! \ogs_file_param{prj__time_loop__processes__process__process_name} - pcs_config.getConfigParameterOptional<std::string>("process_name"); - if (process_name) + pcs_config.getConfigParameter<std::string>("process_name", ""); + if (process_name != "") { - if (!local_coupling_processes.contains(*process_name)) + if (ranges::contains(process_names, process_name)) { OGS_FATAL( - "The given process name '{}' for the element " - "'time_loop/processes/process/process_name' is not found " - "in the element " - "'time_loop/global_process_coupling/" - "local_coupling_processes/process_name' in the project " - "file.", - *process_name); + "The given process name is not unique! Please check the " + "element " + "'time_loop/process/name' in the project file. Found " + "duplicate " + "process name '{:s}'.", + process_name); } - - if (ranges::contains(process_names, *process_name)) - { - OGS_FATAL( - "The given process name '{}' for the element " - "'time_loop/processes/process/process_name' is not unique! " - "Please check this in the project file.", - *process_name); - } - process_names.emplace_back(*process_name); - local_coupling_processes[*process_name] = process_id; + process_names.emplace_back(process_name); } auto const nl_slv_name = @@ -152,10 +142,10 @@ std::vector<std::unique_ptr<ProcessData>> createPerProcessData( "in the current project file!"); } - per_process_data.emplace_back( - makeProcessData(std::move(timestepper), nl_slv, process_id, pcs, - std::move(time_disc), std::move(conv_crit), - compensate_non_equilibrium_initial_residuum)); + per_process_data.emplace_back(makeProcessData( + std::move(timestepper), nl_slv, process_id, std::move(process_name), + pcs, std::move(time_disc), std::move(conv_crit), + compensate_non_equilibrium_initial_residuum)); ++process_id; } @@ -175,16 +165,6 @@ std::vector<std::unique_ptr<ProcessData>> createPerProcessData( } } - if (process_names.size() != local_coupling_processes.size()) - { - OGS_FATAL( - "The number of the given process names for the element " - "'time_loop/processes/process/process_name' is not equal to that " - "in the element " - "'time_loop/global_process_coupling/local_coupling_processes/" - "process_name' in the project file."); - } - return per_process_data; } } // namespace ProcessLib diff --git a/ProcessLib/CreateProcessData.h b/ProcessLib/CreateProcessData.h index 0b47009dd0f2ec99b67d92e347662e431754c897..a79db8cdfacb1aedf3b9145cef7bb75fc02e6515 100644 --- a/ProcessLib/CreateProcessData.h +++ b/ProcessLib/CreateProcessData.h @@ -20,7 +20,6 @@ std::vector<std::unique_ptr<ProcessData>> createPerProcessData( std::map<std::string, std::unique_ptr<NumLib::NonlinearSolverBase>> const& nonlinear_solvers, bool const compensate_non_equilibrium_initial_residuum, - std::vector<double> const& fixed_times_for_output, - std::map<std::string, int>& local_coupling_processes); + std::vector<double> const& fixed_times_for_output); } // namespace ProcessLib diff --git a/ProcessLib/CreateTimeLoop.cpp b/ProcessLib/CreateTimeLoop.cpp index 068c14d9289ac05c701bcce3c6446aa6a226b886..1a7b6923fc79e1908646a95cacde1cbf5b1fe596 100644 --- a/ProcessLib/CreateTimeLoop.cpp +++ b/ProcessLib/CreateTimeLoop.cpp @@ -150,8 +150,7 @@ std::unique_ptr<TimeLoop> createTimeLoop( auto per_process_data = createPerProcessData( //! \ogs_file_param{prj__time_loop__processes} config.getConfigSubtree("processes"), processes, nonlinear_solvers, - compensate_non_equilibrium_initial_residuum, fixed_times_for_output, - local_coupling_processes); + compensate_non_equilibrium_initial_residuum, fixed_times_for_output); const bool use_staggered_scheme = ranges::any_of(processes.begin(), processes.end(), diff --git a/ProcessLib/ProcessData.h b/ProcessLib/ProcessData.h index aa2399ee173e0bc368e32e547224bf0930e9d13d..dd7577a42de4ae66199d8f793d4d9bd448bc60d6 100644 --- a/ProcessLib/ProcessData.h +++ b/ProcessLib/ProcessData.h @@ -10,6 +10,8 @@ #pragma once +#include <string> + #include "NumLib/ODESolver/NonlinearSolver.h" #include "NumLib/ODESolver/TimeDiscretization.h" #include "NumLib/ODESolver/Types.h" @@ -27,7 +29,7 @@ struct ProcessData NumLib::NonlinearSolverBase& nonlinear_solver_, std::unique_ptr<NumLib::ConvergenceCriterion>&& conv_crit_, std::unique_ptr<NumLib::TimeDiscretization>&& time_disc_, - int const process_id_, Process& process_) + int const process_id_, std::string&& process_name_, Process& process_) : timestep_algorithm(std::move(timestep_algorithm_)), timestep_previous(timestep_algorithm->begin()), timestep_current(timestep_previous), @@ -37,6 +39,7 @@ struct ProcessData conv_crit(std::move(conv_crit_)), time_disc(std::move(time_disc_)), process_id(process_id_), + process_name(std::move(process_name_)), process(process_) { } @@ -61,6 +64,7 @@ struct ProcessData std::unique_ptr<NumLib::EquationSystem> tdisc_ode_sys; int const process_id; + std::string const process_name; Process& process; };