diff --git a/src/bedit_gui/controllers/simulation_run_controller.py b/src/bedit_gui/controllers/simulation_run_controller.py index ddc949a..a0d85cf 100644 --- a/src/bedit_gui/controllers/simulation_run_controller.py +++ b/src/bedit_gui/controllers/simulation_run_controller.py @@ -47,8 +47,8 @@ class SimulationRunController(QObject): def start(self) -> None: if self._running or self.session is None: return - start_time = self.session.current_end_time - stop_time = start_time + self.session.settings.duration + start_time = self.session.settings.start_time + stop_time = self.session.current_end_time + self.session.settings.duration self._running = True self._update_actions() logger.info("Starting simulation from %s to %s", start_time, stop_time) diff --git a/src/bedit_simulation/runtime.py b/src/bedit_simulation/runtime.py index 0298b26..7633828 100644 --- a/src/bedit_simulation/runtime.py +++ b/src/bedit_simulation/runtime.py @@ -46,13 +46,15 @@ class SimulationSession: return self._simulation.is_running async def run_next(self) -> SimulationResult: - start_time = self.current_end_time - stop_time = start_time + self.settings.duration - intervals = math.ceil(self.settings.duration / self.settings.step_size) if self.settings.use_timed_steps else self.settings.number_of_steps + start_time = self.settings.start_time + stop_time = self.current_end_time + self.settings.duration + run_duration = stop_time - start_time + intervals = math.ceil(run_duration / self.settings.step_size) if self.settings.use_timed_steps else math.ceil(self.settings.number_of_steps * run_duration / self.settings.duration) options = SimulationOptions(start_time=start_time, stop_time=stop_time, number_of_intervals=intervals, tolerance=self.settings.tolerance, method=self.settings.method) result = await self._simulation.run(options) + # TODO: Continue from OpenModelica restart state instead of recomputing the full time range. self.current_end_time = stop_time - self.results.append(result) + self.results[:] = [result] return result def cancel(self) -> bool: