Skip to content

Commit

Permalink
- fixed FMI-Export Alias variables
Browse files Browse the repository at this point in the history
git-svn-id: https://openmodelica.org/svn/OpenModelica/trunk@11608 f25d12d1-65f4-0310-ae8a-bbce733d8d8e
  • Loading branch information
Willi Braun committed Mar 30, 2012
1 parent e0432ce commit 4e31a8a
Show file tree
Hide file tree
Showing 3 changed files with 50 additions and 93 deletions.
117 changes: 34 additions & 83 deletions Compiler/susan_codegen/SimCode/CodegenFMU.tpl
Expand Up @@ -665,11 +665,11 @@ case MODELINFO(vars=SIMVARS(__),varInfo=VARINFO(numStateVars=numStateVars)) then
<<
fmiReal getReal(ModelInstance* comp, const fmiValueReference vr) {
switch (vr) {
<%vars.stateVars |> var => SwitchVars(var,"realVars", 0) ;separator="\n"%>
<%vars.derivativeVars |> var => SwitchVars(var,"realVars", numStateVars) ;separator="\n"%>
<%vars.algVars |> var => SwitchVars(var,"realVars", intMul(2,numStateVars)) ;separator="\n"%>
<%vars.paramVars |> var => SwitchParameters(var,"realParameter") ;separator="\n"%>
<%vars.aliasVars |> var hasindex i0 => SwitchAliasVars(var,"realAlias","realVars","realParameter","-",i0) ;separator="\n"%>
<%vars.stateVars |> var => SwitchVars(var, "realVars", 0) ;separator="\n"%>
<%vars.derivativeVars |> var => SwitchVars(var, "realVars", numStateVars) ;separator="\n"%>
<%vars.algVars |> var => SwitchVars(var, "realVars", intMul(2,numStateVars)) ;separator="\n"%>
<%vars.paramVars |> var => SwitchParameters(var, "realParameter") ;separator="\n"%>
<%vars.aliasVars |> var => SwitchAliasVars(var, "Real","-") ;separator="\n"%>
default:
return fmiError;
}
Expand All @@ -686,11 +686,11 @@ case MODELINFO(vars=SIMVARS(__),varInfo=VARINFO(numStateVars=numStateVars)) then
<<
fmiStatus setReal(ModelInstance* comp, const fmiValueReference vr, const fmiReal value) {
switch (vr) {
<%vars.stateVars |> var => SwitchVarsSet(var,"realVars",0 ) ;separator="\n"%>
<%vars.derivativeVars |> var => SwitchVarsSet(var,"realVars", numStateVars) ;separator="\n"%>
<%vars.algVars |> var => SwitchVarsSet(var,"realVars", intMul(2,numStateVars)) ;separator="\n"%>
<%vars.paramVars |> var => SwitchParametersSet(var,"realParameter") ;separator="\n"%>
<%vars.aliasVars |> var hasindex i0 => SwitchAliasVarsSet(var,"realAlias","realVars","realParameter","-",i0) ;separator="\n"%>
<%vars.stateVars |> var => SwitchVarsSet(var, "realVars", 0) ;separator="\n"%>
<%vars.derivativeVars |> var => SwitchVarsSet(var, "realVars", numStateVars) ;separator="\n"%>
<%vars.algVars |> var => SwitchVarsSet(var, "realVars", intMul(2,numStateVars)) ;separator="\n"%>
<%vars.paramVars |> var => SwitchParametersSet(var, "realParameter") ;separator="\n"%>
<%vars.aliasVars |> var => SwitchAliasVarsSet(var, "Real", "-") ;separator="\n"%>
default:
return fmiError;
}
Expand All @@ -708,9 +708,9 @@ case MODELINFO(vars=SIMVARS(__)) then
<<
fmiInteger getInteger(ModelInstance* comp, const fmiValueReference vr) {
switch (vr) {
<%vars.intAlgVars |> var => SwitchVars(var,"integerVars", 0) ;separator="\n"%>
<%vars.intParamVars |> var => SwitchParameters(var,"integerParameter") ;separator="\n"%>
<%vars.intAliasVars |> var hasindex i0 => SwitchAliasVars(var,"integerAlias","integerVars","integerParameter","-",i0) ;separator="\n"%>
<%vars.intAlgVars |> var => SwitchVars(var, "integerVars", 0) ;separator="\n"%>
<%vars.intParamVars |> var => SwitchParameters(var, "integerParameter") ;separator="\n"%>
<%vars.intAliasVars |> var => SwitchAliasVars(var, "Integer", "-") ;separator="\n"%>
default:
return 0;
}
Expand All @@ -726,9 +726,9 @@ case MODELINFO(vars=SIMVARS(__)) then
<<
fmiStatus setInteger(ModelInstance* comp, const fmiValueReference vr, const fmiInteger value) {
switch (vr) {
<%vars.intAlgVars |> var => SwitchVarsSet(var,"integerVars", 0) ;separator="\n"%>
<%vars.intParamVars |> var => SwitchParametersSet(var,"integerParameter") ;separator="\n"%>
<%vars.intAliasVars |> var hasindex i0 => SwitchAliasVarsSet(var,"integerAlias","integerVars","integerParameter","-",i0) ;separator="\n"%>
<%vars.intAlgVars |> var => SwitchVarsSet(var, "integerVars", 0) ;separator="\n"%>
<%vars.intParamVars |> var => SwitchParametersSet(var, "integerParameter") ;separator="\n"%>
<%vars.intAliasVars |> var => SwitchAliasVarsSet(var, "Integer", "-") ;separator="\n"%>
default:
return fmiError;
}
Expand All @@ -745,9 +745,9 @@ case MODELINFO(vars=SIMVARS(__)) then
<<
fmiBoolean getBoolean(ModelInstance* comp, const fmiValueReference vr) {
switch (vr) {
<%vars.boolAlgVars |> var => SwitchVars(var,"booleanVars", 0) ;separator="\n"%>
<%vars.boolParamVars |> var => SwitchParameters(var,"booleanParameter") ;separator="\n"%>
<%vars.boolAliasVars |> var hasindex i0 => SwitchAliasVars(var,"booleanAlias","booleanVars","booleanParameter","!",i0) ;separator="\n"%>
<%vars.boolAlgVars |> var => SwitchVars(var, "booleanVars", 0) ;separator="\n"%>
<%vars.boolParamVars |> var => SwitchParameters(var, "booleanParameter") ;separator="\n"%>
<%vars.boolAliasVars |> var => SwitchAliasVars(var, "Boolean", "!") ;separator="\n"%>
default:
return 0;
}
Expand All @@ -764,9 +764,9 @@ case MODELINFO(vars=SIMVARS(__)) then
<<
fmiStatus setBoolean(ModelInstance* comp, const fmiValueReference vr, const fmiBoolean value) {
switch (vr) {
<%vars.boolAlgVars |> var => SwitchVarsSet(var,"booleanVars", 0) ;separator="\n"%>
<%vars.boolParamVars |> var => SwitchParametersSet(var,"booleanParameter") ;separator="\n"%>
<%vars.boolAliasVars |> var hasindex i0 => SwitchAliasVarsSet(var,"booleanAlias","booleanVars","booleanParameter","!",i0) ;separator="\n"%>
<%vars.boolAlgVars |> var => SwitchVarsSet(var, "booleanVars", 0) ;separator="\n"%>
<%vars.boolParamVars |> var => SwitchParametersSet(var, "booleanParameter") ;separator="\n"%>
<%vars.boolAliasVars |> var => SwitchAliasVarsSet(var, "Boolean", "!") ;separator="\n"%>
default:
return fmiError;
}
Expand All @@ -784,9 +784,9 @@ case MODELINFO(vars=SIMVARS(__)) then
<<
fmiString getString(ModelInstance* comp, const fmiValueReference vr) {
switch (vr) {
<%vars.stringAlgVars |> var => SwitchVars(var,"stringVars", 0) ;separator="\n"%>
<%vars.stringParamVars |> var => SwitchParameters(var,"stringParameter") ;separator="\n"%>
<%vars.stringAliasVars |> var hasindex i0 => SwitchAliasVars(var,"stringAlias","stringVars","stringParameter","",i0) ;separator="\n"%>
<%vars.stringAlgVars |> var => SwitchVars(var, "stringVars", 0) ;separator="\n"%>
<%vars.stringParamVars |> var => SwitchParameters(var, "stringParameter") ;separator="\n"%>
<%vars.stringAliasVars |> var => SwitchAliasVars(var, "string", "") ;separator="\n"%>
default:
return 0;
}
Expand All @@ -803,9 +803,9 @@ case MODELINFO(vars=SIMVARS(__)) then
<<
fmiString getString(ModelInstance* comp, const fmiValueReference vr) {
switch (vr) {
<%vars.stringAlgVars |> var => SwitchVarsSet(var,"stringVars", 0) ;separator="\n"%>
<%vars.stringParamVars |> var => SwitchParametersSet(var,"stringParameter") ;separator="\n"%>
<%vars.stringAliasVars |> var hasindex i0 => SwitchAliasVarsSet(var,"stringAlias","stringVars","stringParameter","",i0) ;separator="\n"%>
<%vars.stringAlgVars |> var => SwitchVarsSet(var, "stringVars", 0) ;separator="\n"%>
<%vars.stringParamVars |> var => SwitchParametersSet(var, "stringParameter") ;separator="\n"%>
<%vars.stringAliasVars |> var => SwitchAliasVarsSet(var, "String", "") ;separator="\n"%>
default:
return 0;
}
Expand Down Expand Up @@ -878,7 +878,7 @@ match simVar
end SwitchParameters;


template SwitchAliasVars(SimVar simVar, String aliasArrayName, String arrayName, String arrayName2, String negate, Integer varIndex)
template SwitchAliasVars(SimVar simVar, String arrayName, String negate)
"Generates code for defining variables in c file for FMU target. "
::=
match simVar
Expand All @@ -888,35 +888,11 @@ match simVar
match aliasvar
case ALIAS(__) then
<<
case <%crefName%> :
{
if (comp->fmuData->modelData.<%aliasArrayName%>[<%varIndex%>].aliasType == 0){
return comp->fmuData->localData[0]-><%arrayName%>[<%cref(varName)%>_];
} else if (comp->fmuData->modelData.<%aliasArrayName%>[<%varIndex%>].aliasType == 1){
return comp->fmuData->simulationInfo.<%arrayName2%>[<%cref(varName)%>_];
} else if (comp->fmuData->modelData.<%aliasArrayName%>[<%varIndex%>].aliasType == 2){
return comp->fmuData->localData[0]->timeValue;
} else {
return fmiError;
}
break;
}
case <%crefName%> : return get<%arrayName%>(comp, <%cref(varName)%>_); break;
>>
case NEGATEDALIAS(__) then
<<
case <%crefName%> :
{
if (comp->fmuData->modelData.<%aliasArrayName%>[<%varIndex%>].aliasType == 0){
return (<%negate%> comp->fmuData->localData[0]-><%arrayName%>[<%cref(varName)%>_]);
} else if (comp->fmuData->modelData.<%aliasArrayName%>[<%varIndex%>].aliasType == 1){
return (<%negate%> comp->fmuData->simulationInfo.<%arrayName2%>[<%cref(varName)%>_]);
} else if (comp->fmuData->modelData.<%aliasArrayName%>[<%varIndex%>].aliasType == 2){
return (<%negate%> comp->fmuData->localData[0]->timeValue);
} else {
return fmiError;
}
break;
}
case <%crefName%> : return (<%negate%> get<%arrayName%>(comp, <%cref(varName)%>_)); break;
>>
end match
end SwitchAliasVars;
Expand Down Expand Up @@ -950,46 +926,21 @@ match simVar
end SwitchParametersSet;


template SwitchAliasVarsSet(SimVar simVar,String aliasArrayName, String arrayName, String arrayName2, String negate, Integer varIndex)
template SwitchAliasVarsSet(SimVar simVar, String arrayName, String negate)
"Generates code for defining variables in c file for FMU target. "
::=
match simVar
case SIMVAR(__) then
let description = if comment then '// "<%comment%>"'
let description = if comment then '// "<%comment%>"'
let crefName = '<%cref(name)%>_'
match aliasvar
case ALIAS(__) then
<<
case <%crefName%> :
{
if (comp->fmuData->modelData.<%aliasArrayName%>[<%varIndex%>].aliasType == 0){
return comp->fmuData->localData[0]-><%arrayName%>[<%cref(varName)%>_] = value;
} else if (comp->fmuData->modelData.<%aliasArrayName%>[<%varIndex%>].aliasType == 1){
return comp->fmuData->simulationInfo.<%arrayName2%>[<%cref(varName)%>_] = value;
} else if (comp->fmuData->modelData.<%aliasArrayName%>[<%varIndex%>].aliasType == 2){
return fmiOK;
} else {
return fmiError;
}
break;
}
case <%crefName%> : return set<%arrayName%>(comp, <%cref(varName)%>_, value); break;
>>
case NEGATEDALIAS(__) then
<<
case <%crefName%> :
{
if (comp->fmuData->modelData.<%aliasArrayName%>[<%varIndex%>].aliasType == 0){
return comp->fmuData->localData[0]-><%arrayName%>[<%cref(varName)%>_] = (<%negate%> value);
} else if (comp->fmuData->modelData.<%aliasArrayName%>[<%varIndex%>].aliasType == 1){
return comp->fmuData->simulationInfo.<%arrayName2%>[<%cref(varName)%>_] = (<%negate%> value);
} else if (comp->fmuData->modelData.<%aliasArrayName%>[<%varIndex%>].aliasType == 2){
return fmiOK;
} else {
return fmiError;
}
break;
}
case <%crefName%> : return set<%arrayName%>(comp, <%cref(varName)%>_, (<%negate%> value)); break;
>>
end match
end SwitchAliasVarsSet;
Expand Down
6 changes: 6 additions & 0 deletions SimulationRuntime/fmi/export/fmu_model_interface.c
Expand Up @@ -129,6 +129,12 @@ fmiComponent fmiInstantiateModel(fmiString instanceName, fmiString GUID,
/* intialize modelData */
setupDataStruc(comp->fmuData);
initializeDataStruc(comp->fmuData);
//string method, outputFormat, variableFilter;
/*
function_initMemoryState();
read_input_xml(0, "", &(comp->fmuData->modelData), &(comp->fmuData->simulationInfo), NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL);
*/
setupDataStruc2(comp->fmuData);

/* setup model data with default start data */
Expand Down
20 changes: 10 additions & 10 deletions SimulationRuntime/fmi/import/moGenerator.c
Expand Up @@ -1502,8 +1502,8 @@ void blockcodegen(fmuModelDescription* fmuMD, const char* decompPath,
fprintf(pfile, "initial algorithm\n");
fprintf(pfile, "\tfmuSetTime(fmufun, inst, time);\n");
fprintf(pfile, "\tif not initializationDone then\n");

/* Set start values for real variables */
/*
// Set start values for real variables
if (noReal > 0) {
tmpReal = pntReal;
fprintf(pfile, "\t\tfmuSetRealVR(fmufun, inst, %d, realVR,", noReal);
Expand All @@ -1519,7 +1519,7 @@ void blockcodegen(fmuModelDescription* fmuMD, const char* decompPath,
}
}
/* Set start values for real parameters */
// Set start values for real parameters
if (noRealParam > 0) {
tmpRealParam = pntRealParam;
fprintf(pfile, "\t\tfmuSetRealVR(fmufun, inst, %d, realVRParam,",
Expand All @@ -1536,7 +1536,7 @@ void blockcodegen(fmuModelDescription* fmuMD, const char* decompPath,
}
}
/* Set start values for integer variables */
// Set start values for integer variables
if (noInteger > 0) {
tmpInteger = pntInteger;
fprintf(pfile, "\t\tfmuSetIntegerVR(fmufun, inst, %d, integerVR,",
Expand All @@ -1553,7 +1553,7 @@ void blockcodegen(fmuModelDescription* fmuMD, const char* decompPath,
}
}
/* Set start values for integer parameters */
// Set start values for integer parameters
if (noIntegerParam > 0) {
tmpIntegerParam = pntIntegerParam;
fprintf(pfile, "\t\tfmuSetIntegerVR(fmufun, inst, %d, integerVR,",
Expand All @@ -1570,7 +1570,7 @@ void blockcodegen(fmuModelDescription* fmuMD, const char* decompPath,
}
}
/* Set start values for boolean variables */
// Set start values for boolean variables
if (noBoolean > 0) {
tmpBoolean = pntBoolean;
fprintf(pfile, "\t\tfmuSetBooleanVR(fmufun, inst, %d, booleanVR,",
Expand All @@ -1587,7 +1587,7 @@ void blockcodegen(fmuModelDescription* fmuMD, const char* decompPath,
}
}
/* Set start values for boolean parameters */
// Set start values for boolean parameters
if (noBooleanParam > 0) {
tmpBooleanParam = pntBooleanParam;
fprintf(pfile, "\t\tfmuSetBooleanVR(fmufun, inst, %d, booleanParamVR,",
Expand All @@ -1603,7 +1603,7 @@ void blockcodegen(fmuModelDescription* fmuMD, const char* decompPath,
fprintf(pfile, "%s});\n", tmpBooleanParam->name);
}
}
/* Set start values for string variables */
// Set start values for string variables
if (noString > 0) {
tmpString = pntString;
fprintf(pfile, "\t\tfmuSetStringVR(fmufun, inst, %d, stringVR,",
Expand All @@ -1620,7 +1620,7 @@ void blockcodegen(fmuModelDescription* fmuMD, const char* decompPath,
}
}
/* Set start values for string parameters */
// Set start values for string parameters
if (noStringParam > 0) {
tmpStringParam = pntStringParam;
fprintf(pfile, "\t\tfmuSetstringVR(fmufun, inst, %d, stringParamVR,",
Expand All @@ -1636,7 +1636,7 @@ void blockcodegen(fmuModelDescription* fmuMD, const char* decompPath,
fprintf(pfile, "%s});\n", tmpStringParam->name);
}
}

*/
fprintf(pfile, "\t\tfmuInit(fmufun, inst, tolControl, relTol, evtInfo);\n");
fprintf(pfile, "\t\tinitializationDone:= true;\n");
fprintf(pfile, "\tend if;\n");
Expand Down

0 comments on commit 4e31a8a

Please sign in to comment.