NRP Core  1.4.1
simulation_manager.h
Go to the documentation of this file.
1 /* * NRP Core - Backend infrastructure to synchronize simulations
2  *
3  * Copyright 2020-2023 NRP Team
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  * http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  *
17  * This project has received funding from the European Union’s Horizon 2020
18  * Framework Programme for Research and Innovation under the Specific Grant
19  * Agreement No. 945539 (Human Brain Project SGA3).
20  */
21 
22 #ifndef SIMULATION_MANAGER_H
23 #define SIMULATION_MANAGER_H
24 
29 
30 #include <mutex>
31 #include <functional>
32 
48  : public PtrTemplates<SimulationManager>
49 {
50 public:
51 
56 
59  {
61  std::string errorMessage = "";
62  };
63 
68  static void validateConfig(jsonSharedPtr &config);
69 
74  SimulationManager(const jsonSharedPtr &simulationConfig);
75 
76  SimulationManager() = delete;
77 
78  virtual ~SimulationManager() = default;
79 
85 
91 
101 
107 
108  virtual bool hasSimulationTimedOut() const = 0;
109 
115  RequestResult runSimulation(unsigned numIterations);
116 
122 
127 
131  std::string printSimState(const SimState& simState);
132 
134 
135 protected:
136 
137  // Callback functions for the different simulation control requests.
139  virtual void initializeCB() = 0;
141  virtual bool resetCB() = 0;
143  virtual void stopCB() = 0;
145  virtual bool runUntilDoneOrTimeoutCB() = 0;
147  virtual bool runCB(unsigned numIterations) = 0;
149  virtual void shutdownCB() = 0;
150 
155 
157 
158  SimulationTime _simTimeout = SimulationTime::zero();
159 
160 private:
161 
165  SimState _simState;
166 
167  std::mutex _reqMutex;
168 
169  RequestResult processRequest(std::function<void ()> action, std::vector<SimState> validSourceStates,
170  std::string actionMsg1, std::string actionMsg2, bool lockMutex = true);
171 
172  void checkTransitionConstraints(std::vector<SimState> validSourceStates, std::string actionStr);
173  void changeState(SimState newState);
174 };
175 
176 
177 #endif
SimulationManager::runSimulation
RequestResult runSimulation(unsigned numIterations)
Run the Simulation for specified amount of timesteps.
Definition: simulation_manager.cpp:62
SimulationManager::_simTimeout
SimulationTime _simTimeout
Definition: simulation_manager.h:158
SimulationManager::RequestResult::currentState
SimState currentState
Definition: simulation_manager.h:60
SimulationManager
Manages simulation execution.
Definition: simulation_manager.h:47
SimulationManager::_simConfig
jsonSharedPtr _simConfig
Simulation Configuration.
Definition: simulation_manager.h:154
SimulationManager::shutdownCB
virtual void shutdownCB()=0
Shutdown the simulation.
SimulationManager::runCB
virtual bool runCB(unsigned numIterations)=0
Run the simulation.
SimulationManager::printSimState
std::string printSimState(const SimState &simState)
returns a simulation state as a string
Definition: simulation_manager.cpp:156
SimulationManager::stopCB
virtual void stopCB()=0
Forward request to stop the simulation.
SimulationManager::~SimulationManager
virtual ~SimulationManager()=default
SimulationManager::runSimulationUntilDoneOrTimeout
RequestResult runSimulationUntilDoneOrTimeout()
Runs the simulation until a separate thread stops it or simTimeout (defined in SimulationConfig) is r...
Definition: simulation_manager.cpp:76
simulation_data_manager.h
SimulationManager::SimulationManager
SimulationManager()=delete
SimulationManager::initializeSimulation
RequestResult initializeSimulation()
Initialize the simulation.
Definition: simulation_manager.cpp:50
engine_client_interface.h
SimulationManager::SimState::Created
@ Created
jsonSharedPtr
std::shared_ptr< nlohmann::json > jsonSharedPtr
Definition: json_schema_utils.h:35
SimulationManager::SimState::Initialized
@ Initialized
PtrTemplates
Definition: ptr_templates.h:28
SimulationManager::getSimulationDataManager
SimulationDataManager & getSimulationDataManager()
Definition: simulation_manager.cpp:179
SimulationManager::_simulationDataManager
SimulationDataManager _simulationDataManager
Definition: simulation_manager.h:156
ptr_templates.h
SimulationManager::currentState
SimState currentState()
returns the current state of the simulation
Definition: simulation_manager.cpp:174
SimulationManager::RequestResult::errorMessage
std::string errorMessage
Definition: simulation_manager.h:61
SimulationManager::SimState::Stopped
@ Stopped
SimulationDataManager
Manages all simulation data.
Definition: simulation_data_manager.h:53
SimulationManager::SimState::NotSet
@ NotSet
json_schema_utils.h
SimulationManager::runUntilDoneOrTimeoutCB
virtual bool runUntilDoneOrTimeoutCB()=0
Run the simulation.
SimulationManager::RequestResult
Helper structure for storing request result and error messages.
Definition: simulation_manager.h:58
SimulationManager::SimState::Failed
@ Failed
SimulationManager::resetSimulation
RequestResult resetSimulation()
Reset the currently running simulation.
Definition: simulation_manager.cpp:90
SimulationManager::initializeCB
virtual void initializeCB()=0
Initialize the simulation.
SimulationManager::shutdownSimulation
RequestResult shutdownSimulation()
Shuts down the simulation.
Definition: simulation_manager.cpp:114
SimulationManager::stopSimulation
RequestResult stopSimulation()
Request to stop the simulation if it was running, if it wasn't the call has no effect.
Definition: simulation_manager.cpp:102
SimulationManager::resetCB
virtual bool resetCB()=0
Resets the simulation, returns true if the simulation was reset false otherwise.
SimulationManager::SimState
SimState
States the simulation can be in.
Definition: simulation_manager.h:55
SimulationManager::SimState::Running
@ Running
SimulationTime
std::chrono::nanoseconds SimulationTime
Definition: time_utils.h:31
SimulationManager::hasSimulationTimedOut
virtual bool hasSimulationTimedOut() const =0
SimulationManager::validateConfig
static void validateConfig(jsonSharedPtr &config)
Validates config against Simulation schema.
Definition: simulation_manager.cpp:28