2 Copyright (C) 2012 Modelon AB
\r
4 This program is free software: you can redistribute it and/or modify
\r
5 it under the terms of the BSD style license.
7 the Free Software Foundation, version 3 of the License.
\r
9 This program is distributed in the hope that it will be useful,
\r
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
\r
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
\r
12 FMILIB_License.txt file for more details.
\r
14 You should have received a copy of the FMILIB_License.txt file
\r
15 along with this program. If not, contact Modelon AB <http://www.modelon.com>.
\r
18 #ifndef FM1_MODEL_H_
\r
19 #define FM1_MODEL_H_
\r
21 #include <fmu_dummy/fmu1_model_defines.h>
\r
24 /*************** FMI ME 1.0 ****************/
\r
25 fmiReal states [N_STATES];
\r
26 fmiReal states_nom [N_STATES];
\r
27 fmiValueReference states_vr [N_STATES];
\r
28 fmiReal states_der [N_STATES];
\r
29 fmiReal event_indicators[N_EVENT_INDICATORS];
\r
30 fmiReal reals [N_REAL];
\r
31 fmiInteger integers [N_INTEGER];
\r
32 fmiBoolean booleans [N_BOOLEAN];
\r
33 fmiString strings [N_STRING];
\r
35 /* fmiInstantiateModel */
\r
36 fmiBoolean loggingOn;
\r
37 char instanceName [BUFFER];
\r
39 fmiCallbackFunctions functions;
\r
44 /* fmiCompletedIntegratorStep */
\r
45 fmiBoolean callEventUpdate;
\r
48 fmiBoolean toleranceControlled;
\r
49 fmiReal relativeTolerance;
\r
50 fmiEventInfo eventInfo;
\r
52 /*************** FMI CS 1.0. Depends on the ME fields above and functions ****************/
\r
53 fmiReal states_prev [N_STATES];
\r
55 /* fmiInstantiateSlave */
\r
56 char fmuLocation [BUFFER];
\r
57 char mimeType [BUFFER];
\r
60 fmiBoolean interactive;
\r
62 /* fmiInitializeSlave */
\r
64 fmiBoolean StopTimeDefined;
\r
67 /* fmiSetRealInputDerivatives */
\r
68 fmiReal input_real [N_INPUT_REAL][N_INPUT_REAL_MAX_ORDER + 1];
\r
70 /* fmiGetRealOutputDerivatives */
\r
71 fmiReal output_real [N_OUTPUT_REAL][N_OUTPUT_REAL_MAX_ORDER + 1];
\r
75 typedef component_t* component_ptr_t;
\r
77 /* FMI 1.0 Common Functions */
\r
78 const char* fmi_get_version();
\r
80 fmiStatus fmi_set_debug_logging(
\r
82 fmiBoolean loggingOn);
\r
84 fmiStatus fmi_get_real(
\r
86 const fmiValueReference vr[],
\r
87 size_t nvr, fmiReal value[]);
\r
89 fmiStatus fmi_get_integer(
\r
91 const fmiValueReference vr[],
\r
93 fmiInteger value[]);
\r
94 fmiStatus fmi_get_boolean(
\r
96 const fmiValueReference vr[],
\r
98 fmiBoolean value[]);
\r
100 fmiStatus fmi_get_string(
\r
102 const fmiValueReference vr[],
\r
104 fmiString value[]);
\r
106 fmiStatus fmi_set_real(
\r
108 const fmiValueReference vr[],
\r
110 const fmiReal value[]);
\r
111 fmiStatus fmi_set_integer(
\r
113 const fmiValueReference vr[],
\r
115 const fmiInteger value[]);
\r
117 fmiStatus fmi_set_boolean(
\r
119 const fmiValueReference vr[],
\r
121 const fmiBoolean value[]);
\r
123 fmiStatus fmi_set_string(
\r
125 const fmiValueReference vr[],
\r
127 const fmiString value[]);
\r
129 /* FMI 1.0 ME Functions */
\r
130 const char* fmi_get_model_types_platform();
\r
132 fmiComponent fmi_instantiate_model(
\r
133 fmiString instanceName,
\r
135 fmiCallbackFunctions functions,
\r
136 fmiBoolean loggingOn);
\r
138 void fmi_free_model_instance(
\r
141 fmiStatus fmi_set_time(
\r
145 fmiStatus fmi_set_continuous_states(
\r
150 fmiStatus fmi_completed_integrator_step(
\r
152 fmiBoolean* callEventUpdate);
\r
154 fmiStatus fmi_initialize(
\r
156 fmiBoolean toleranceControlled,
\r
157 fmiReal relativeTolerance,
\r
158 fmiEventInfo* eventInfo);
\r
160 fmiStatus fmi_get_derivatives(
\r
162 fmiReal derivatives[],
\r
165 fmiStatus fmi_get_event_indicators(
\r
167 fmiReal eventIndicators[],
\r
170 fmiStatus fmi_event_update(
\r
172 fmiBoolean intermediateResults,
\r
173 fmiEventInfo* eventInfo);
\r
174 fmiStatus fmi_get_continuous_states(
\r
179 fmiStatus fmi_get_nominal_continuousstates(
\r
181 fmiReal x_nominal[],
\r
184 fmiStatus fmi_get_state_value_references(
\r
186 fmiValueReference vrx[],
\r
189 fmiStatus fmi_terminate(fmiComponent c);
\r
191 /* FMI 1.0 CS Functions */
\r
192 #ifdef fmiFunctions_h
\r
194 const char* fmi_get_types_platform();
\r
196 fmiComponent fmi_instantiate_slave(
\r
197 fmiString instanceName,
\r
199 fmiString fmuLocation,
\r
200 fmiString mimeType,
\r
202 fmiBoolean visible,
\r
203 fmiBoolean interactive,
\r
204 fmiCallbackFunctions functions,
\r
205 fmiBoolean loggingOn);
\r
207 fmiStatus fmi_initialize_slave(
\r
210 fmiBoolean StopTimeDefined,
\r
213 fmiStatus fmi_terminate_slave(
\r
216 fmiStatus fmi_reset_slave(
\r
219 void fmi_free_slave_instance(
\r
222 fmiStatus fmi_set_real_input_derivatives(
\r
224 const fmiValueReference vr[],
\r
226 const fmiInteger order[],
\r
227 const fmiReal value[]);
\r
229 fmiStatus fmi_get_real_output_derivatives(
\r
231 const fmiValueReference vr[],
\r
233 const fmiInteger order[],
\r
236 fmiStatus fmi_cancel_step(
\r
238 fmiStatus fmi_do_step(
\r
240 fmiReal currentCommunicationPoint,
\r
241 fmiReal communicationStepSize,
\r
242 fmiBoolean newStep);
\r
244 fmiStatus fmi_get_status(
\r
246 const fmiStatusKind s,
\r
249 fmiStatus fmi_get_real_status(
\r
251 const fmiStatusKind s,
\r
254 fmiStatus fmi_get_integer_status(
\r
256 const fmiStatusKind s,
\r
257 fmiInteger* value);
\r
259 fmiStatus fmi_get_boolean_status(
\r
261 const fmiStatusKind s,
\r
262 fmiBoolean* value);
\r
264 fmiStatus fmi_get_string_status(
\r
266 const fmiStatusKind s,
\r
269 #endif /* End of fmiFunctions_h */
\r
270 #endif /* End of header FM1_MODEL_H_ */