diff --git a/pythonfmu/csvbuilder.py b/pythonfmu/csvbuilder.py index c36c513..8cfa1ce 100644 --- a/pythonfmu/csvbuilder.py +++ b/pythonfmu/csvbuilder.py @@ -150,7 +150,7 @@ def find_indices(self, t, dt): self.next_index += 1 next_t = self.times[self.next_index] - def setup_experiment(self, start_time: float): + def setup_experiment(self, start_time: float, stop_time, tolerance): self.current_time = start_time self.find_indices(start_time, 0) diff --git a/pythonfmu/fmi2slave.py b/pythonfmu/fmi2slave.py index 6657b7f..1599142 100644 --- a/pythonfmu/fmi2slave.py +++ b/pythonfmu/fmi2slave.py @@ -172,7 +172,7 @@ def register_variable(self, var: ScalarVariable, nested: bool = True): if var.setter is None and hasattr(owner, var.local_name) and var.variability != Fmi2Variability.constant: var.setter = lambda v: setattr(owner, var.local_name, v) - def setup_experiment(self, start_time: float): + def setup_experiment(self, start_time: float, stop_time: Optional[float], tolerance: Optional[float]): pass def enter_initialization_mode(self): diff --git a/pythonfmu/pythonfmu-export/src/pythonfmu/PySlaveInstance.cpp b/pythonfmu/pythonfmu-export/src/pythonfmu/PySlaveInstance.cpp index 06045ec..f05c866 100644 --- a/pythonfmu/pythonfmu-export/src/pythonfmu/PySlaveInstance.cpp +++ b/pythonfmu/pythonfmu-export/src/pythonfmu/PySlaveInstance.cpp @@ -226,8 +226,15 @@ class PySlaveInstance : public SlaveInstance void SetupExperiment(double startTime, std::optional stop, std::optional tolerance) override { - py_safe_run([this, startTime](PyGILState_STATE gilState) { - auto f = PyObject_CallMethod(pInstance_, "setup_experiment", "(d)", startTime); + py_safe_run([this, startTime, stop, tolerance](PyGILState_STATE gilState) { + PyObject* pyStop = stop ? Py_BuildValue("d", *stop) : (Py_INCREF(Py_None), Py_None); + PyObject* pyTol = tolerance ? Py_BuildValue("d", *tolerance) : (Py_INCREF(Py_None), Py_None); + + auto f = PyObject_CallMethod(pInstance_, "setup_experiment", "(dOO)", startTime, pyStop, pyTol); + + Py_DECREF(pyStop); + Py_DECREF(pyTol); + if (f == nullptr) { handle_py_exception("[setupExperiment] PyObject_CallMethod", gilState); }