From ada947e74981a758cce5ff78efa99800ff588461 Mon Sep 17 00:00:00 2001 From: Dmitri Naumov <dmitri.naumov@ufz.de> Date: Fri, 21 Jun 2019 15:36:05 +0200 Subject: [PATCH] Change map of processes to vector. The name is already included in the process. --- Applications/ApplicationsLib/ProjectData.cpp | 16 ++++++++++------ Applications/ApplicationsLib/ProjectData.h | 6 +++--- Applications/CLI/ogs.cpp | 2 +- ProcessLib/CreateProcessData.cpp | 9 ++++++--- ProcessLib/CreateProcessData.h | 2 +- ProcessLib/CreateTimeLoop.cpp | 2 +- ProcessLib/CreateTimeLoop.h | 2 +- ProcessLib/ProcessData.h | 6 +----- 8 files changed, 24 insertions(+), 21 deletions(-) diff --git a/Applications/ApplicationsLib/ProjectData.cpp b/Applications/ApplicationsLib/ProjectData.cpp index 57161cbfbbc..7189bc26a34 100644 --- a/Applications/ApplicationsLib/ProjectData.cpp +++ b/Applications/ApplicationsLib/ProjectData.cpp @@ -921,10 +921,15 @@ void ProjectData::parseProcesses(BaseLib::ConfigTree const& processes_config, OGS_FATAL("Unknown process type: %s", type.c_str()); } - BaseLib::insertIfKeyUniqueElseError(_processes, - name, - std::move(process), - "The process name is not unique"); + if (BaseLib::containsIf( + _processes, + [&name](std::unique_ptr<ProcessLib::Process> const& p) { + return p->name == name; + })) + { + OGS_FATAL("The process name '%s' is not unique.", name.c_str()); + } + _processes.push_back(std::move(process)); } } @@ -1020,10 +1025,9 @@ void ProjectData::parseChemicalSystem( "Ready for initializing interface to a chemical solver for water " "chemistry calculation."); - auto const& process = _processes.begin()->second; if (auto const* component_transport_process = dynamic_cast< ProcessLib::ComponentTransport::ComponentTransportProcess const*>( - process.get())) + _processes[0].get())) { auto const chemical_solver = //! \ogs_file_attr{prj__chemical_system__chemical_solver} diff --git a/Applications/ApplicationsLib/ProjectData.h b/Applications/ApplicationsLib/ProjectData.h index a488bc280e9..4c1706781bf 100644 --- a/Applications/ApplicationsLib/ProjectData.h +++ b/Applications/ApplicationsLib/ProjectData.h @@ -72,8 +72,8 @@ public: // /// Provides read access to the process container. - std::map<std::string, std::unique_ptr<ProcessLib::Process>> const& - getProcesses() const + std::vector<std::unique_ptr<ProcessLib::Process>> const& getProcesses() + const { return _processes; } @@ -118,7 +118,7 @@ private: std::unique_ptr<MaterialPropertyLib::Medium> _medium; std::vector<std::unique_ptr<MeshLib::Mesh>> _mesh_vec; - std::map<std::string, std::unique_ptr<ProcessLib::Process>> _processes; + std::vector<std::unique_ptr<ProcessLib::Process>> _processes; std::vector<ProcessLib::ProcessVariable> _process_variables; /// Buffer for each parameter config passed to the process. diff --git a/Applications/CLI/ogs.cpp b/Applications/CLI/ogs.cpp index 4b433084fb8..6ed80a84731 100644 --- a/Applications/CLI/ogs.cpp +++ b/Applications/CLI/ogs.cpp @@ -220,7 +220,7 @@ int main(int argc, char* argv[]) INFO("Initialize processes."); for (auto& p : project.getProcesses()) { - p.second->initialize(); + p->initialize(); } // Check intermediately that config parsing went fine. diff --git a/ProcessLib/CreateProcessData.cpp b/ProcessLib/CreateProcessData.cpp index c5a2d33315f..5067876bbd9 100644 --- a/ProcessLib/CreateProcessData.cpp +++ b/ProcessLib/CreateProcessData.cpp @@ -47,7 +47,7 @@ static std::unique_ptr<ProcessData> makeProcessData( std::vector<std::unique_ptr<ProcessData>> createPerProcessData( BaseLib::ConfigTree const& config, - const std::map<std::string, std::unique_ptr<Process>>& processes, + std::vector<std::unique_ptr<Process>> const& processes, std::map<std::string, std::unique_ptr<NumLib::NonlinearSolverBase>> const& nonlinear_solvers) { @@ -58,8 +58,11 @@ std::vector<std::unique_ptr<ProcessData>> createPerProcessData( { //! \ogs_file_attr{prj__time_loop__processes__process__ref} auto const pcs_name = pcs_config.getConfigAttribute<std::string>("ref"); - auto& pcs = *BaseLib::getOrError( - processes, pcs_name, + auto& pcs = *BaseLib::getIfOrError( + processes, + [&pcs_name](std::unique_ptr<Process> const& p) { + return p->name == pcs_name; + }, "A process with the given name has not been defined."); auto const nl_slv_name = diff --git a/ProcessLib/CreateProcessData.h b/ProcessLib/CreateProcessData.h index 7a127d553b9..f0e7b48d29a 100644 --- a/ProcessLib/CreateProcessData.h +++ b/ProcessLib/CreateProcessData.h @@ -15,7 +15,7 @@ namespace ProcessLib { std::vector<std::unique_ptr<ProcessData>> createPerProcessData( BaseLib::ConfigTree const& config, - const std::map<std::string, std::unique_ptr<Process>>& processes, + std::vector<std::unique_ptr<Process>> const& processes, std::map<std::string, std::unique_ptr<NumLib::NonlinearSolverBase>> const& nonlinear_solvers); diff --git a/ProcessLib/CreateTimeLoop.cpp b/ProcessLib/CreateTimeLoop.cpp index 71bbe024db3..03ef0251b35 100644 --- a/ProcessLib/CreateTimeLoop.cpp +++ b/ProcessLib/CreateTimeLoop.cpp @@ -22,7 +22,7 @@ namespace ProcessLib { 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::vector<std::unique_ptr<Process>>& processes, const std::map<std::string, std::unique_ptr<NumLib::NonlinearSolverBase>>& nonlinear_solvers, std::vector<std::unique_ptr<MeshLib::Mesh>> const& meshes, diff --git a/ProcessLib/CreateTimeLoop.h b/ProcessLib/CreateTimeLoop.h index 167e0e68ccb..556a87ac01d 100644 --- a/ProcessLib/CreateTimeLoop.h +++ b/ProcessLib/CreateTimeLoop.h @@ -47,7 +47,7 @@ namespace ProcessLib //! Builds a 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::vector<std::unique_ptr<Process>> const& processes, std::map<std::string, std::unique_ptr<NumLib::NonlinearSolverBase>> const& nonlinear_solvers, std::vector<std::unique_ptr<MeshLib::Mesh>> const& meshes, diff --git a/ProcessLib/ProcessData.h b/ProcessLib/ProcessData.h index e1d9321c616..2041b9aba23 100644 --- a/ProcessLib/ProcessData.h +++ b/ProcessLib/ProcessData.h @@ -15,11 +15,7 @@ #include "NumLib/TimeStepping/Algorithms/TimeStepAlgorithm.h" #include "CoupledSolutionsForStaggeredScheme.h" - -namespace ProcessLib -{ -class Process; -} +#include "Process.h" namespace ProcessLib { -- GitLab