Skip to content

Commit

Permalink
- get rid of initial sections.
Browse files Browse the repository at this point in the history
git-svn-id: https://openmodelica.org/svn/OpenModelica/trunk@13813 f25d12d1-65f4-0310-ae8a-bbce733d8d8e
  • Loading branch information
adeas31 committed Nov 6, 2012
1 parent 0433673 commit 36e834a
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 14 deletions.
26 changes: 15 additions & 11 deletions Compiler/Template/CodegenFMU.tpl
Expand Up @@ -1130,6 +1130,7 @@ case FMIIMPORT(fmiInfo=INFO(__),fmiExperimentAnnotation=EXPERIMENTANNOTATION(__)
constant Integer numberOfContinuousStates = <%listLength(fmiInfo.fmiNumberOfContinuousStates)%>;
Real fmi_x[numberOfContinuousStates] "States";
Real fmi_x_new[numberOfContinuousStates] "New States";
Real fmi_x_dummy[numberOfContinuousStates] "Dummy States";
constant Integer numberOfEventIndicators = <%listLength(fmiInfo.fmiNumberOfEventIndicators)%>;
Real fmi_z[numberOfEventIndicators] "Events Indicators";
Boolean fmi_z_positive[numberOfEventIndicators];
Expand All @@ -1142,6 +1143,7 @@ case FMIIMPORT(fmiInfo=INFO(__),fmiExperimentAnnotation=EXPERIMENTANNOTATION(__)
Boolean callEventUpdate = false;
Real flowControlTime;
Real flowControlStatesInputs;
Real flowControlStates;
protected
<%dumpFMICommonObjects(platform)%>

Expand All @@ -1163,10 +1165,10 @@ case FMIIMPORT(fmiInfo=INFO(__),fmiExperimentAnnotation=EXPERIMENTANNOTATION(__)
input Boolean debugLogging;
input Real in_time;
input fmiEventInfo in_eventInfo;
input Integer numberOfContinuousStates;
output Real fmi_x[numberOfContinuousStates];
output Integer status;
output Real out_Flow;
output fmiEventInfo out_eventInfo;
external "C" out_eventInfo = fmiInitialize_OMC(fmi, instanceName, debugLogging, in_time, in_eventInfo, numberOfContinuousStates, fmi_x) annotation(Library = {"omcruntime", "fmilib", "shlwapi"});
external "C" out_eventInfo = fmiInitialize_OMC(fmi, instanceName, debugLogging, in_time, in_eventInfo, status, out_Flow) annotation(Library = {"omcruntime", "fmilib", "shlwapi"});
end fmiInitialize;

function fmiSetTime
Expand All @@ -1181,8 +1183,9 @@ case FMIIMPORT(fmiInfo=INFO(__),fmiExperimentAnnotation=EXPERIMENTANNOTATION(__)
input fmiImportInstance fmi;
input Integer numberOfContinuousStates;
input Real in_Flow;
input Real dummy_fmi_x[:];
output Real fmi_x[numberOfContinuousStates];
external "C" fmiGetContinuousStates_OMC(fmi, numberOfContinuousStates, fmi_x, in_Flow) annotation(Library = {"omcruntime", "fmilib"<%if stringEq(platform, "win32") then ", \"shlwapi\""%>});
external "C" fmiGetContinuousStates_OMC(fmi, numberOfContinuousStates, fmi_x, in_Flow, dummy_fmi_x) annotation(Library = {"omcruntime", "fmilib", "shlwapi"});
end fmiGetContinuousStates;

function fmiSetContinuousStates
Expand Down Expand Up @@ -1242,10 +1245,14 @@ case FMIIMPORT(fmiInfo=INFO(__),fmiExperimentAnnotation=EXPERIMENTANNOTATION(__)
constant Integer fmiFatal=4;
constant Integer fmiPending=5;
end fmiStatus;
initial algorithm
(fmi_x, eventInfo) := fmiFunctions.fmiInitialize(fmi, "<%fmiInfo.fmiModelIdentifier%>", debugLogging, time, eventInfo, numberOfContinuousStates);
equation
der(fmi_x) = fmiFunctions.fmiGetDerivatives(fmi, numberOfContinuousStates, flowControlStatesInputs);
(fmi_status, flowControlStates, eventInfo) = fmiFunctions.fmiInitialize(fmi, "<%fmiInfo.fmiModelIdentifier%>", debugLogging, time, eventInfo);
<%if intGt(listLength(fmiInfo.fmiNumberOfContinuousStates), 0) then
<<
fmi_x = fmiFunctions.fmiGetContinuousStates(fmi, numberOfContinuousStates, flowControlStates, fmi_x_dummy);
>>
%>
der(fmi_x) = fmiFunctions.fmiGetDerivatives(fmi, numberOfContinuousStates, flowControlStates);
flowControlTime = fmiFunctions.fmiSetTime(fmi, time, 1);
flowControlStatesInputs = fmiFunctions.fmiSetContinuousStates(fmi, fmi_x, flowControlTime);
fmi_z = fmiFunctions.fmiGetEventIndicators(fmi, numberOfEventIndicators, flowControlEvent);
Expand All @@ -1265,14 +1272,11 @@ case FMIIMPORT(fmiInfo=INFO(__),fmiExperimentAnnotation=EXPERIMENTANNOTATION(__)
fmiFunctions.fmiEventUpdate(fmi, callEventUpdate, eventInfo);
<%if intGt(listLength(fmiInfo.fmiNumberOfContinuousStates), 0) then
<<
fmi_x_new := fmiFunctions.fmiGetContinuousStates(fmi, numberOfContinuousStates, flowControlEvent);
fmi_x_new := fmiFunctions.fmiGetContinuousStates(fmi, numberOfContinuousStates, flowControlEvent, fmi_x_dummy);
<%fmiInfo.fmiNumberOfContinuousStates |> continuousStates => "reinit(fmi_x["+continuousStates+"], fmi_x_new["+continuousStates+"]);" ;separator="\n"%>
>>
%>
end when;
when terminal() then
fmi_status := fmiFunctions.fmiTerminate(fmi);
end when;
equation
flowControlEvent = fmiFunctions.fmiCompletedIntegratorStep(fmi, callEventUpdate, flowControlStatesInputs);
<%if not stringEq(realVariables, "0") then "{"+dumpRealVariablesName(fmiModelVariablesList)+"} = fmiFunctions.fmiGetReal(fmi, {"+dumpRealVariablesVR(fmiModelVariablesList)+"}, flowControlStatesInputs);"%>
Expand Down
6 changes: 3 additions & 3 deletions Compiler/runtime/FMIWrapper.c
Expand Up @@ -176,7 +176,7 @@ int fmiSetDebugLogging_OMC(void* fmi, int debugLogging)
* Wrapper for the FMI function fmiInitialize.
* Returns FMI Event Info i.e fmi1_event_info_t.
*/
void* fmiInitialize_OMC(void* fmi, char* instanceName, int debugLogging, double time, void* in_eventInfo, int numberOfContinuousStates, double* states)
void* fmiInitialize_OMC(void* fmi, char* instanceName, int debugLogging, double time, void* in_eventInfo, int* status, double* dummy)
{
static int init = 0;
if (!init) {
Expand All @@ -189,7 +189,6 @@ void* fmiInitialize_OMC(void* fmi, char* instanceName, int debugLogging, double
fmi1_real_t relativeTolerance = 0.001;
fmi1_event_info_t* eventInfo = malloc(sizeof(fmi1_event_info_t));
fmi1_status_t fmistatus = fmi1_import_initialize((fmi1_import_t*)fmi, toleranceControlled, relativeTolerance, eventInfo);
fmi1_import_get_continuous_states((fmi1_import_t*)fmi, (fmi1_real_t*)states, numberOfContinuousStates);
switch (fmistatus) {
case fmi1_status_warning:
fprintf(stderr, "FMI Import Warning: Warning in fmiInitialize_OMC.\n");fflush(NULL);
Expand All @@ -203,6 +202,7 @@ void* fmiInitialize_OMC(void* fmi, char* instanceName, int debugLogging, double
default:
break;
}
*status = fmistatus;
return eventInfo;
}
return in_eventInfo;
Expand All @@ -212,7 +212,7 @@ void* fmiInitialize_OMC(void* fmi, char* instanceName, int debugLogging, double
* Wrapper for the FMI function fmiGetContinuousStates.
* Returns states.
*/
void fmiGetContinuousStates_OMC(void* fmi, int numberOfContinuousStates, double* states, double dummy)
void fmiGetContinuousStates_OMC(void* fmi, int numberOfContinuousStates, double* states, double dummy, double* dummyStates)
{
fmi1_status_t fmistatus = fmi1_import_get_continuous_states((fmi1_import_t*)fmi, (fmi1_real_t*)states, numberOfContinuousStates);
switch (fmistatus) {
Expand Down

0 comments on commit 36e834a

Please sign in to comment.