Changeset 0833cd1 in OpenModelica
- Timestamp:
- 2012-11-16T14:27:01+01:00 (11 years ago)
- Branches:
- Added-citation-metadata, maintenance/v1.14, maintenance/v1.15, maintenance/v1.16, maintenance/v1.17, maintenance/v1.18, maintenance/v1.19, maintenance/v1.20, maintenance/v1.21, maintenance/v1.22, maintenance/v1.23, master, omlib-staging
- Children:
- a395c34
- Parents:
- 945b9890
- Location:
- Compiler
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
Compiler/Template/CodegenFMU.tpl
re96e9777 r0833cd1 1142 1142 Real fmi_z[numberOfEventIndicators] "Events Indicators"; 1143 1143 Boolean fmi_z_positive[numberOfEventIndicators]; 1144 Real flowTimeNext; 1145 parameter Real flowInit(fixed=false); 1146 parameter Real flowInitInputs(fixed=false); 1144 parameter Real flowInstantiate(fixed=false); 1145 Real flowTime; 1147 1146 parameter Real flowParamsStart(fixed=false); 1148 Real flowTime; 1149 Real flowStatesInputs = flowStates; 1150 Real flowStates; 1147 Integer flowInitStatus; 1148 Real flowStatesInputs; 1151 1149 Boolean callEventUpdate; 1152 1150 Boolean newStatesAvailable; 1153 1151 Integer fmi_status; 1154 1152 initial algorithm 1153 flowInstantiate := fmiFunctions.fmiInstantiateModel(fmi, "<%fmiInfo.fmiModelIdentifier%>", debugLogging); 1154 flowTime := fmiFunctions.fmiSetTime(fmi, time, flowInstantiate); 1155 1155 <%if not boolAnd(stringEq(realStartVariablesValueReferences, ""), stringEq(realStartVariablesNames, "")) then "flowParamsStart := fmiFunctions.fmiSetReal(fmi, {"+realStartVariablesValueReferences+"}, {"+realStartVariablesNames+"});"%> 1156 1156 <%if not boolAnd(stringEq(integerStartVariablesValueReferences, ""), stringEq(integerStartVariablesNames, "")) then "flowParamsStart := fmiFunctions.fmiSetInteger(fmi, {"+integerStartVariablesValueReferences+"}, {"+integerStartVariablesNames+"});"%> 1157 1157 <%if not boolAnd(stringEq(booleanStartVariablesValueReferences, ""), stringEq(booleanStartVariablesNames, "")) then "flowParamsStart := fmiFunctions.fmiSetBoolean(fmi, {"+booleanStartVariablesValueReferences+"}, {"+booleanStartVariablesNames+"});"%> 1158 1158 <%if not boolAnd(stringEq(stringStartVariablesValueReferences, ""), stringEq(stringStartVariablesNames, "")) then "flowParamsStart := fmiFunctions.fmiSetString(fmi, {"+stringStartVariablesValueReferences+"}, {"+stringStartVariablesNames+"});"%> 1159 initial equation 1160 (flowTimeNext,flowInit,eventInfo) = fmiFunctions.fmiInitialize(fmi, "<%fmiInfo.fmiModelIdentifier%>", debugLogging, time, eventInfo, flowParamsStart+flowInitInputs); 1159 (flowInitStatus, eventInfo) := fmiFunctions.fmiInitialize(fmi, eventInfo, flowParamsStart); 1161 1160 <%if intGt(listLength(fmiInfo.fmiNumberOfContinuousStates), 0) then 1162 <<1163 fmi_x = fmiFunctions.fmiGetContinuousStates(fmi, numberOfContinuousStates, flowParamsStart+flowInit);1164 >>1161 << 1162 fmi_x := fmiFunctions.fmiGetContinuousStates(fmi, numberOfContinuousStates, flowStatesInputs); 1163 >> 1165 1164 %> 1165 algorithm 1166 flowInitStatus := 1; 1166 1167 equation 1167 flowTime = fmiFunctions.fmiSetTime(fmi, time, 1);1168 flowStates = fmiFunctions.fmiSetContinuousStates(fmi, fmi_x, flowParamsStart + flowTime);1168 flowTime = fmiFunctions.fmiSetTime(fmi, time, flowInstantiate); 1169 flowStatesInputs = fmiFunctions.fmiSetContinuousStates(fmi, fmi_x, flowParamsStart + flowTime); 1169 1170 der(fmi_x) = fmiFunctions.fmiGetDerivatives(fmi, numberOfContinuousStates, flowStatesInputs); 1170 1171 fmi_z = fmiFunctions.fmiGetEventIndicators(fmi, numberOfEventIndicators, flowStatesInputs); … … 1187 1188 >> 1188 1189 %> 1189 ( flowTimeNext,newStatesAvailable) := fmiFunctions.fmiEventUpdate(fmi, false, eventInfo, flowStatesInputs);1190 (newStatesAvailable) := fmiFunctions.fmiEventUpdate(fmi, false, eventInfo, flowStatesInputs); 1190 1191 <%if intGt(listLength(fmiInfo.fmiNumberOfContinuousStates), 0) then 1191 1192 << … … 1216 1217 1217 1218 package fmiFunctions 1218 function fmiIn itialize1219 function fmiInstantiateModel 1219 1220 input fmiImportInstance fmi; 1220 1221 input String instanceName; 1221 1222 input Boolean debugLogging; 1222 input Real in_Time; 1223 input fmiEventInfo in_EventInfo; 1224 input Real in_Flow_Init_Inputs; 1225 output Real out_Flow_Time; 1226 output Real out_Flow_Init; 1227 output fmiEventInfo out_eventInfo; 1228 external "C" out_eventInfo = fmiInitialize_OMC(fmi, instanceName, debugLogging, in_Time, in_EventInfo, in_Flow_Init_Inputs, out_Flow_Time, out_Flow_Init) annotation(Library = {"omcruntime", "fmilib"<%if stringEq(platform, "win32") then ", \"shlwapi\""%>}); 1223 output Real outFlowInstantiate; 1224 external "C" outFlowInstantiate = fmiInstantiateModel_OMC(fmi, instanceName, debugLogging) annotation(Library = {"omcruntime", "fmilib"<%if stringEq(platform, "win32") then ", \"shlwapi\""%>}); 1225 end fmiInstantiateModel; 1226 1227 function fmiInitialize 1228 input fmiImportInstance fmi; 1229 input fmiEventInfo inEventInfo; 1230 input Real inFlowInit; 1231 output Integer outFlowInitStatus; 1232 output fmiEventInfo outEventInfo; 1233 external "C" outEventInfo = fmiInitialize_OMC(fmi, inEventInfo, inFlowInit, outFlowInitStatus) annotation(Library = {"omcruntime", "fmilib"<%if stringEq(platform, "win32") then ", \"shlwapi\""%>}); 1229 1234 end fmiInitialize; 1230 1235 … … 1240 1245 input fmiImportInstance fmi; 1241 1246 input Integer numberOfContinuousStates; 1242 input Real in _Flow_Init;1247 input Real inFlowInit; 1243 1248 output Real fmi_x[numberOfContinuousStates]; 1244 external "C" fmiGetContinuousStates_OMC(fmi, numberOfContinuousStates, in _Flow_Init, fmi_x) annotation(Library = {"omcruntime", "fmilib"<%if stringEq(platform, "win32") then ", \"shlwapi\""%>});1249 external "C" fmiGetContinuousStates_OMC(fmi, numberOfContinuousStates, inFlowInit, fmi_x) annotation(Library = {"omcruntime", "fmilib"<%if stringEq(platform, "win32") then ", \"shlwapi\""%>}); 1245 1250 end fmiGetContinuousStates; 1246 1251 … … 1274 1279 input fmiImportInstance fmi; 1275 1280 input Boolean intermediateResults; 1276 input fmiEventInfo in_eventInfo; 1277 input Real in_Flow_States; 1278 output Real out_Flow_Time; 1279 output Boolean out_NewStates; 1280 external "C" out_NewStates = fmiEventUpdate_OMC(fmi, intermediateResults, in_eventInfo, in_Flow_States, out_Flow_Time) annotation(Library = {"omcruntime", "fmilib"<%if stringEq(platform, "win32") then ", \"shlwapi\""%>}); 1281 input fmiEventInfo inEventInfo; 1282 input Real inFlowStates; 1283 output Boolean outNewStatesAvailable; 1284 external "C" outNewStatesAvailable = fmiEventUpdate_OMC(fmi, intermediateResults, inEventInfo, inFlowStates) annotation(Library = {"omcruntime", "fmilib"<%if stringEq(platform, "win32") then ", \"shlwapi\""%>}); 1281 1285 end fmiEventUpdate; 1282 1286 -
Compiler/runtime/FMIWrapper.c
rff12947 r0833cd1 146 146 * Wrapper for the FMI function fmiInstantiateModel. 147 147 */ 148 void fmiInstantiateModel_OMC(void* fmi, char* instanceName) 149 { 150 fmi1_import_instantiate_model((fmi1_import_t*)fmi, instanceName); 151 } 152 153 /* 154 * Wrapper for the FMI function fmiSetTime. 155 * Returns status. 156 */ 157 double fmiSetTime_OMC(void* fmi, double time, double flowTime) 158 { 159 fmi1_import_set_time((fmi1_import_t*)fmi, time); 160 return flowTime; 161 } 162 163 /* 164 * Wrapper for the FMI function fmiSetDebugLogging. 165 * Returns status. 166 */ 167 int fmiSetDebugLogging_OMC(void* fmi, int debugLogging) 168 { 169 return fmi1_import_set_debug_logging((fmi1_import_t*)fmi, debugLogging); 170 } 171 172 /* 173 * Wrapper for the FMI function fmiInitialize. 174 * Returns FMI Event Info i.e fmi1_event_info_t. 175 */ 176 void* fmiInitialize_OMC(void* fmi, char* instanceName, int debugLogging, double time, void* in_eventInfo, double flowInit, double* fmi_TNext, double* fmi_Initialized) 148 double fmiInstantiateModel_OMC(void* fmi, char* instanceName, int debugLogging) 177 149 { 178 150 static int init = 0; 179 151 if (!init) { 180 152 init = 1; 181 fmiInstantiateModel_OMC(fmi, instanceName); 182 fmiSetDebugLogging_OMC(fmi, debugLogging); 183 fmiSetTime_OMC(fmi, time, 1); 184 153 fmi1_import_instantiate_model((fmi1_import_t*)fmi, instanceName); 154 fmi1_import_set_debug_logging((fmi1_import_t*)fmi, debugLogging); 155 } 156 return 1; 157 } 158 159 /* 160 * Wrapper for the FMI function fmiSetTime. 161 * Returns status. 162 */ 163 double fmiSetTime_OMC(void* fmi, double time, double flowInstantiate) 164 { 165 fmi1_import_set_time((fmi1_import_t*)fmi, time); 166 return flowInstantiate; 167 } 168 169 /* 170 * Wrapper for the FMI function fmiSetDebugLogging. 171 * Returns status. 172 */ 173 int fmiSetDebugLogging_OMC(void* fmi, int debugLogging) 174 { 175 return fmi1_import_set_debug_logging((fmi1_import_t*)fmi, debugLogging); 176 } 177 178 /* 179 * Wrapper for the FMI function fmiInitialize. 180 * Returns FMI Event Info i.e fmi1_event_info_t. 181 */ 182 void* fmiInitialize_OMC(void* fmi, void* inEventInfo, double flowInit, int* status) 183 { 184 static int init = 0; 185 if (!init) { 186 init = 1; 185 187 fmi1_boolean_t toleranceControlled = fmi1_true; 186 188 fmi1_real_t relativeTolerance = 0.001; 187 189 fmi1_event_info_t* eventInfo = malloc(sizeof(fmi1_event_info_t)); 188 190 fmi1_status_t fmistatus = fmi1_import_initialize((fmi1_import_t*)fmi, toleranceControlled, relativeTolerance, eventInfo); 189 * fmi_TNext = (double)fmistatus;191 *status = fmistatus; 190 192 return eventInfo; 191 193 } 192 return in _eventInfo;194 return inEventInfo; 193 195 } 194 196 … … 199 201 void fmiGetContinuousStates_OMC(void* fmi, int numberOfContinuousStates, double flowInit, double* states) 200 202 { 203 int i; 204 for (i = 0 ; i < numberOfContinuousStates ; i++) 205 fprintf(stderr, "State before %d = %f\n", i, states[i]);fflush(NULL); 201 206 fmi1_import_get_continuous_states((fmi1_import_t*)fmi, (fmi1_real_t*)states, numberOfContinuousStates); 207 for (i = 0 ; i < numberOfContinuousStates ; i++) 208 fprintf(stderr, "State after %d = %f\n", i, states[i]);fflush(NULL); 202 209 } 203 210 … … 331 338 * Returns FMI Event Info i.e fmi1_event_info_t 332 339 */ 333 int fmiEventUpdate_OMC(void* fmi, int intermediateResults, void* eventInfo, double flowStates , double* flowTime)340 int fmiEventUpdate_OMC(void* fmi, int intermediateResults, void* eventInfo, double flowStates) 334 341 { 335 342 fmi1_event_info_t* e = (fmi1_event_info_t*)eventInfo;
Note: See TracChangeset
for help on using the changeset viewer.