|
21 | 21 |
|
22 | 22 | ModelOptions = namedtuple("ModelOptions", ["name", "value", "cli"]) |
23 | 23 |
|
24 | | -FMI3_MODEL_OPTIONS: List[ModelOptions] = [ |
| 24 | +FMI3_MODEL_OPTIONS_COMMON: List[ModelOptions] = [ |
25 | 25 | ModelOptions("needsExecutionTool", True, "no-external-tool"), |
26 | | - ModelOptions("canHandleVariableCommunicationStepSize", True, "no-variable-step"), |
27 | 26 | ModelOptions("canBeInstantiatedOnlyOncePerProcess", False, "only-one-per-process"), |
28 | 27 | ModelOptions("canGetAndSetFMUState", False, "handle-state"), |
29 | 28 | ModelOptions("canSerializeFMUState", False, "serialize-state") |
30 | 29 | ] |
31 | 30 |
|
| 31 | +FMI3_MODEL_OPTIONS_COSIM: List[ModelOptions] = [ |
| 32 | + ModelOptions("canHandleVariableCommunicationStepSize", True, "no-variable-step"), |
| 33 | +] |
| 34 | + |
| 35 | +FMI3_MODEL_OPTIONS_MX: List[ModelOptions] = [ |
| 36 | + ModelOptions("needsCompletedIntegratorStep", False, "needs-completed-step"), |
| 37 | +] |
| 38 | + |
| 39 | + |
32 | 40 | class Fmi3StepResult(NamedTuple): |
33 | 41 | status: Fmi3Status = Fmi3Status.ok |
34 | 42 | eventHandlingNeeded: bool = False |
@@ -103,23 +111,26 @@ def to_xml(self, model_options: Dict[str, str] = dict()) -> Element: |
103 | 111 | root = Element("fmiModelDescription", attrib) |
104 | 112 |
|
105 | 113 | options = dict() |
106 | | - for option in FMI3_MODEL_OPTIONS: |
| 114 | + for option in FMI3_MODEL_OPTIONS_COMMON: |
107 | 115 | value = model_options.get(option.name, option.value) |
108 | 116 | options[option.name] = str(value).lower() |
| 117 | + |
109 | 118 | options["modelIdentifier"] = self.modelName |
110 | | - options["canNotUseMemoryManagementFunctions"] = "true" |
| 119 | + |
| 120 | + options_cs = options.copy() |
| 121 | + for option in FMI3_MODEL_OPTIONS_COSIM: |
| 122 | + options_cs[option.name] = str(value).lower() |
111 | 123 |
|
112 | | - options_me = dict() |
113 | | - options_me["canGetAndSetFMUState"] = "true" |
114 | | - options_me["modelIdentifier"] = self.modelName |
115 | | - options_me["needsCompletedIntegratorStep"] = "false" |
| 124 | + options_me = options.copy() |
| 125 | + for option in FMI3_MODEL_OPTIONS_MX: |
| 126 | + options_me[option.name] = str(value).lower() |
116 | 127 |
|
117 | 128 | # check if we have cosim mixin or model exchange mixin |
118 | 129 | if isinstance(self, ModelExchange): |
119 | 130 | SubElement(root, "ModelExchange", attrib=options_me) |
120 | 131 |
|
121 | 132 | if isinstance(self, CoSimulation): |
122 | | - SubElement(root, "CoSimulation", attrib=options) |
| 133 | + SubElement(root, "CoSimulation", attrib=options_cs) |
123 | 134 |
|
124 | 135 | if self.units: |
125 | 136 | unit_defs = SubElement(root, "UnitDefinitions") |
|
0 commit comments