diff --git a/pythonfmu/default_experiment.py b/pythonfmu/default_experiment.py index 817cf08..c0aabb2 100644 --- a/pythonfmu/default_experiment.py +++ b/pythonfmu/default_experiment.py @@ -1,6 +1,7 @@ class DefaultExperiment: - def __init__(self, start_time: float = None, stop_time: float = None, tolerance: float = None): + def __init__(self, start_time: float = None, stop_time: float = None, step_size: float = None, tolerance: float = None): self.start_time = start_time self.stop_time = stop_time + self.step_size = step_size self.tolerance = tolerance diff --git a/pythonfmu/fmi2slave.py b/pythonfmu/fmi2slave.py index 8780829..d06a50d 100644 --- a/pythonfmu/fmi2slave.py +++ b/pythonfmu/fmi2slave.py @@ -110,6 +110,18 @@ def to_xml(self, model_options: Dict[str, str] = dict()) -> Element: ) ) + if self.default_experiment is not None: + attrib = dict() + if self.default_experiment.start_time is not None: + attrib["startTime"] = str(self.default_experiment.start_time) + if self.default_experiment.stop_time is not None: + attrib["stopTime"] = str(self.default_experiment.stop_time) + if self.default_experiment.step_size is not None: + attrib["stepSize"] = str(self.default_experiment.step_size) + if self.default_experiment.tolerance is not None: + attrib["tolerance"] = str(self.default_experiment.tolerance) + SubElement(root, "DefaultExperiment", attrib) + variables = SubElement(root, "ModelVariables") for v in self.vars.values(): if ScalarVariable.requires_start(v): @@ -127,16 +139,6 @@ def to_xml(self, model_options: Dict[str, str] = dict()) -> Element: if v.causality == Fmi2Causality.output: SubElement(outputs_node, "Unknown", attrib=dict(index=str(i + 1))) - if self.default_experiment is not None: - attrib = dict() - if self.default_experiment.start_time is not None: - attrib["startTime"] = self.default_experiment.start_time - if self.default_experiment.stop_time is not None: - attrib["stopTime"] = self.default_experiment.stop_time - if self.default_experiment.tolerance is not None: - attrib["tolerance"] = self.default_experiment.tolerance - SubElement(root, "DefaultExperiment", attrib) - return root def __apply_start_value(self, var: ScalarVariable): diff --git a/pythonfmu/tests/slaves/pythonslave_read_file.py b/pythonfmu/tests/slaves/pythonslave_read_file.py index 7db110b..b07b8b9 100644 --- a/pythonfmu/tests/slaves/pythonslave_read_file.py +++ b/pythonfmu/tests/slaves/pythonslave_read_file.py @@ -1,8 +1,10 @@ -from pythonfmu.fmi2slave import Fmi2Slave, Fmi2Causality, Fmi2Variability, String +from pythonfmu.fmi2slave import Fmi2Slave, Fmi2Causality, Fmi2Variability, String, DefaultExperiment class PythonSlaveReadFile(Fmi2Slave): + default_experiment = DefaultExperiment(start_time=0) + def __init__(self, **kwargs): super().__init__(**kwargs) diff --git a/pythonfmu/tests/test_default_experiment.py b/pythonfmu/tests/test_default_experiment.py new file mode 100644 index 0000000..7c5a1df --- /dev/null +++ b/pythonfmu/tests/test_default_experiment.py @@ -0,0 +1,17 @@ +import pytest +from pathlib import Path + +from pythonfmu.csvbuilder import FmuBuilder + + +def test_default_experiment(tmp_path): + fmpy = pytest.importorskip( + "fmpy", reason="fmpy is not available for testing the produced FMU" + ) + + script_file = Path(__file__).parent / "slaves/pythonslave_read_file.py" + project_file = Path(__file__).parent / "data/hello.txt" + fmu = FmuBuilder.build_FMU(script_file, project_files=[project_file], dest=tmp_path, needsExecutionTool="false") + assert fmu.exists() + + model_description = fmpy.read_model_description(fmu)