Skip to content

Commit

Permalink
adjust DATA object in C runtime DATA
Browse files Browse the repository at this point in the history
 - use pointer of modelData and simulationInfo in DATA
 - to use DATA object in parallel use cases
  • Loading branch information
wibraun authored and OpenModelica-Hudson committed Dec 1, 2015
1 parent 7eeeca2 commit 86dce0f
Show file tree
Hide file tree
Showing 51 changed files with 1,569 additions and 1,545 deletions.
368 changes: 186 additions & 182 deletions Compiler/Template/CodegenC.tpl

Large diffs are not rendered by default.

22 changes: 11 additions & 11 deletions Compiler/Template/CodegenCFunctions.tpl
Expand Up @@ -3159,7 +3159,7 @@ template algStmtWhen(DAE.Statement when, Context context, Text &varDecls, Text &
else '; /* nothing to do */'
let else = algStatementWhenElse(elseWhen, &varDecls, &auxFunction)
<<
if(data->simulationInfo.discreteCall == 1)
if(data->simulationInfo->discreteCall == 1)
{
if(initial())
{
Expand Down Expand Up @@ -3208,7 +3208,7 @@ template algStmtReinit(DAE.Statement stmt, Context context, Text &varDecls, Text
<%preExp%>
<%expPart1%> = <%expPart2%>;
infoStreamPrint(LOG_EVENTS, 0, "reinit <%expPart1%> = %f", <%expPart1%>);
data->simulationInfo.needToIterate = 1;
data->simulationInfo->needToIterate = 1;
>>
end algStmtReinit;

Expand Down Expand Up @@ -5079,19 +5079,19 @@ case rel as RELATION(__) then
let isReal = if isRealType(typeof(rel.exp1)) then (if isRealType(typeof(rel.exp2)) then 'true' else '') else ''
match rel.operator
case LESS(__) then
let hysteresisfunction = if isReal then 'LessZC(<%e1%>, <%e2%>, data->simulationInfo.storedRelations[<%rel.index%>])' else 'Less(<%e1%>,<%e2%>)'
let hysteresisfunction = if isReal then 'LessZC(<%e1%>, <%e2%>, data->simulationInfo->storedRelations[<%rel.index%>])' else 'Less(<%e1%>,<%e2%>)'
let &preExp += '<%res%> = <%hysteresisfunction%>;<%\n%>'
res
case LESSEQ(__) then
let hysteresisfunction = if isReal then 'LessEqZC(<%e1%>, <%e2%>, data->simulationInfo.storedRelations[<%rel.index%>])' else 'LessEq(<%e1%>,<%e2%>)'
let hysteresisfunction = if isReal then 'LessEqZC(<%e1%>, <%e2%>, data->simulationInfo->storedRelations[<%rel.index%>])' else 'LessEq(<%e1%>,<%e2%>)'
let &preExp += '<%res%> = <%hysteresisfunction%>;<%\n%>'
res
case GREATER(__) then
let hysteresisfunction = if isReal then 'GreaterZC(<%e1%>, <%e2%>, data->simulationInfo.storedRelations[<%rel.index%>])' else 'Greater(<%e1%>,<%e2%>)'
let hysteresisfunction = if isReal then 'GreaterZC(<%e1%>, <%e2%>, data->simulationInfo->storedRelations[<%rel.index%>])' else 'Greater(<%e1%>,<%e2%>)'
let &preExp += '<%res%> = <%hysteresisfunction%>;<%\n%>'
res
case GREATEREQ(__) then
let hysteresisfunction = if isReal then 'GreaterEqZC(<%e1%>, <%e2%>, data->simulationInfo.storedRelations[<%rel.index%>])' else 'GreaterEq(<%e1%>,<%e2%>)'
let hysteresisfunction = if isReal then 'GreaterEqZC(<%e1%>, <%e2%>, data->simulationInfo->storedRelations[<%rel.index%>])' else 'GreaterEq(<%e1%>,<%e2%>)'
let &preExp += '<%res%> = <%hysteresisfunction%>;<%\n%>'
res
end match
Expand All @@ -5118,19 +5118,19 @@ case rel as RELATION(__) then
let isReal = if isRealType(typeof(rel.exp1)) then (if isRealType(typeof(rel.exp2)) then 'true' else '') else ''
match rel.operator
case LESS(__) then
let hysteresisfunction = if isReal then 'LessZC(<%e1%>, <%e2%>, data->simulationInfo.storedRelations[<%rel.index%>])' else 'Less(<%e1%>,<%e2%>)'
let hysteresisfunction = if isReal then 'LessZC(<%e1%>, <%e2%>, data->simulationInfo->storedRelations[<%rel.index%>])' else 'Less(<%e1%>,<%e2%>)'
let &preExp += '<%res%> = <%hysteresisfunction%>;<%\n%>'
res
case LESSEQ(__) then
let hysteresisfunction = if isReal then 'LessEqZC(<%e1%>, <%e2%>, data->simulationInfo.storedRelations[<%rel.index%>])' else 'LessEq(<%e1%>,<%e2%>)'
let hysteresisfunction = if isReal then 'LessEqZC(<%e1%>, <%e2%>, data->simulationInfo->storedRelations[<%rel.index%>])' else 'LessEq(<%e1%>,<%e2%>)'
let &preExp += '<%res%> = <%hysteresisfunction%>;<%\n%>'
res
case GREATER(__) then
let hysteresisfunction = if isReal then 'GreaterZC(<%e1%>, <%e2%>, data->simulationInfo.storedRelations[<%rel.index%>])' else 'Greater(<%e1%>,<%e2%>)'
let hysteresisfunction = if isReal then 'GreaterZC(<%e1%>, <%e2%>, data->simulationInfo->storedRelations[<%rel.index%>])' else 'Greater(<%e1%>,<%e2%>)'
let &preExp += '<%res%> = <%hysteresisfunction%>;<%\n%>'
res
case GREATEREQ(__) then
let hysteresisfunction = if isReal then 'GreaterEqZC(<%e1%>, <%e2%>, data->simulationInfo.storedRelations[<%rel.index%>])' else 'GreaterEq(<%e1%>,<%e2%>)'
let hysteresisfunction = if isReal then 'GreaterEqZC(<%e1%>, <%e2%>, data->simulationInfo->storedRelations[<%rel.index%>])' else 'GreaterEq(<%e1%>,<%e2%>)'
let &preExp += '<%res%> = <%hysteresisfunction%>;<%\n%>'
res
end match
Expand Down Expand Up @@ -5329,7 +5329,7 @@ template daeExpCall(Exp call, Context context, Text &preExp, Text &varDecls, Tex
case CALL(path=IDENT(name="pre"), expLst={arg}) then
daeExpCallPre(arg, context, preExp, varDecls, &auxFunction)
case CALL(path=IDENT(name="interval")) then
'data->simulationInfo.clocksData[clockIndex].interval'
'data->simulationInfo->clocksData[clockIndex].interval'
case CALL(path=IDENT(name="previous"), expLst={arg as CREF(__)}) then
'<%cref(crefPrefixPrevious(arg.componentRef))%>'
case CALL(path=IDENT(name="$_clkfire"), expLst={arg as ICONST(__)}) then
Expand Down
18 changes: 9 additions & 9 deletions Compiler/Template/CodegenFMU.tpl
Expand Up @@ -386,7 +386,7 @@ template initVals(SimVar var, String arrayName, Integer offset) ::=
else if stringEq(crefStr(name),"der($dummy)") then
<<>>
else
let str = 'comp->fmuData->modelData.<%arrayName%>Data[<%intAdd(index,offset)%>].attribute.start'
let str = 'comp->fmuData->modelData-><%arrayName%>Data[<%intAdd(index,offset)%>].attribute.start'
<<
<%str%> = comp->fmuData->localData[0]-><%arrayName%>[<%intAdd(index,offset)%>];
>>
Expand All @@ -395,14 +395,14 @@ end initVals;
template initParams(SimVar var, String arrayName) ::=
match var
case SIMVAR(__) then
let str = 'comp->fmuData->modelData.<%arrayName%>Data[<%index%>].attribute.start'
'<%str%> = comp->fmuData->simulationInfo.<%arrayName%>[<%index%>];'
let str = 'comp->fmuData->modelData-><%arrayName%>Data[<%index%>].attribute.start'
'<%str%> = comp->fmuData->simulationInfo-><%arrayName%>[<%index%>];'
end initParams;

template initValsDefault(SimVar var, String arrayName, Integer offset) ::=
match var
case SIMVAR(index=index, type_=type_) then
let str = 'comp->fmuData->modelData.<%arrayName%>Data[<%intAdd(index,offset)%>].attribute.start'
let str = 'comp->fmuData->modelData-><%arrayName%>Data[<%intAdd(index,offset)%>].attribute.start'
match initialValue
case SOME(v as ICONST(__))
case SOME(v as RCONST(__))
Expand All @@ -423,7 +423,7 @@ end initValsDefault;
template initParamsDefault(SimVar var, String arrayName) ::=
match var
case SIMVAR(__) then
let str = 'comp->fmuData->modelData.<%arrayName%>Data[<%index%>].attribute.start'
let str = 'comp->fmuData->modelData-><%arrayName%>Data[<%index%>].attribute.start'
match initialValue
case SOME(v) then
'<%str%> = <%initVal(v)%>;'
Expand Down Expand Up @@ -872,11 +872,11 @@ match simVar
if stringEq(arrayName, "stringParameter")
then
<<
case <%cref(name)%>_ : return MMC_STRINGDATA(comp->fmuData->simulationInfo.<%arrayName%>[<%index%>]); break;
case <%cref(name)%>_ : return MMC_STRINGDATA(comp->fmuData->simulationInfo-><%arrayName%>[<%index%>]); break;
>>
else
<<
case <%cref(name)%>_ : return comp->fmuData->simulationInfo.<%arrayName%>[<%index%>]; break;
case <%cref(name)%>_ : return comp->fmuData->simulationInfo-><%arrayName%>[<%index%>]; break;
>>
end SwitchParameters;

Expand Down Expand Up @@ -942,11 +942,11 @@ match simVar
if stringEq(arrayName, "stringParameter")
then
<<
case <%cref(name)%>_ : comp->fmuData->simulationInfo.<%arrayName%>[<%index%>] = mmc_mk_scon(value); break;
case <%cref(name)%>_ : comp->fmuData->simulationInfo-><%arrayName%>[<%index%>] = mmc_mk_scon(value); break;
>>
else
<<
case <%cref(name)%>_ : comp->fmuData->simulationInfo.<%arrayName%>[<%index%>] = value; break;
case <%cref(name)%>_ : comp->fmuData->simulationInfo-><%arrayName%>[<%index%>] = value; break;
>>
end SwitchParametersSet;

Expand Down
98 changes: 49 additions & 49 deletions SimulationRuntime/c/linearization/linearize.cpp
Expand Up @@ -68,35 +68,35 @@ int functionJacA(DATA* data, threadData_t *threadData, double* jac){
const int index = data->callback->INDEX_JAC_A;
unsigned int i,j,k;
k = 0;
for(i=0; i < data->simulationInfo.analyticJacobians[index].sizeCols; i++)
for(i=0; i < data->simulationInfo->analyticJacobians[index].sizeCols; i++)
{
data->simulationInfo.analyticJacobians[index].seedVars[i] = 1.0;
data->simulationInfo->analyticJacobians[index].seedVars[i] = 1.0;
if(ACTIVE_STREAM(LOG_JAC))
{
printf("Caluculate one col:\n");
for(j=0; j < data->simulationInfo.analyticJacobians[index].sizeCols;j++)
for(j=0; j < data->simulationInfo->analyticJacobians[index].sizeCols;j++)
{
infoStreamPrint(LOG_JAC,0,"seed: data->simulationInfo.analyticJacobians[index].seedVars[%d]= %f",j,data->simulationInfo.analyticJacobians[index].seedVars[j]);
infoStreamPrint(LOG_JAC,0,"seed: data->simulationInfo->analyticJacobians[index].seedVars[%d]= %f",j,data->simulationInfo->analyticJacobians[index].seedVars[j]);
}
}

data->callback->functionJacA_column(data, threadData);

for(j = 0; j < data->simulationInfo.analyticJacobians[index].sizeRows; j++)
for(j = 0; j < data->simulationInfo->analyticJacobians[index].sizeRows; j++)
{
jac[k++] = data->simulationInfo.analyticJacobians[index].resultVars[j];
infoStreamPrint(LOG_JAC,0,"write in jac[%d]-[%d,%d]=%g from row[%d]=%g",k-1,i,j,jac[k-1],i,data->simulationInfo.analyticJacobians[index].resultVars[j]);
jac[k++] = data->simulationInfo->analyticJacobians[index].resultVars[j];
infoStreamPrint(LOG_JAC,0,"write in jac[%d]-[%d,%d]=%g from row[%d]=%g",k-1,i,j,jac[k-1],i,data->simulationInfo->analyticJacobians[index].resultVars[j]);
}

data->simulationInfo.analyticJacobians[index].seedVars[i] = 0.0;
data->simulationInfo->analyticJacobians[index].seedVars[i] = 0.0;
}
if(ACTIVE_STREAM(LOG_JAC))
{
infoStreamPrint(LOG_JAC,0,"Print jac:");
for(i=0; i < data->simulationInfo.analyticJacobians[index].sizeRows;i++)
for(i=0; i < data->simulationInfo->analyticJacobians[index].sizeRows;i++)
{
for(j=0; j < data->simulationInfo.analyticJacobians[index].sizeCols;j++) {
printf("% .5e ",jac[i+j*data->simulationInfo.analyticJacobians[index].sizeCols]);
for(j=0; j < data->simulationInfo->analyticJacobians[index].sizeCols;j++) {
printf("% .5e ",jac[i+j*data->simulationInfo->analyticJacobians[index].sizeCols]);
}
printf("\n");
}
Expand All @@ -109,35 +109,35 @@ int functionJacB(DATA* data, threadData_t *threadData, double* jac){
const int index = data->callback->INDEX_JAC_B;
unsigned int i,j,k;
k = 0;
for(i=0; i < data->simulationInfo.analyticJacobians[index].sizeCols; i++)
for(i=0; i < data->simulationInfo->analyticJacobians[index].sizeCols; i++)
{
data->simulationInfo.analyticJacobians[index].seedVars[i] = 1.0;
data->simulationInfo->analyticJacobians[index].seedVars[i] = 1.0;
if(ACTIVE_STREAM(LOG_JAC))
{
printf("Caluculate one col:\n");
for(j=0; j < data->simulationInfo.analyticJacobians[index].sizeCols;j++)
for(j=0; j < data->simulationInfo->analyticJacobians[index].sizeCols;j++)
{
infoStreamPrint(LOG_JAC,0,"seed: data->simulationInfo.analyticJacobians[index].seedVars[%d]= %f",j,data->simulationInfo.analyticJacobians[index].seedVars[j]);
infoStreamPrint(LOG_JAC,0,"seed: data->simulationInfo->analyticJacobians[index].seedVars[%d]= %f",j,data->simulationInfo->analyticJacobians[index].seedVars[j]);
}
}

data->callback->functionJacB_column(data, threadData);

for(j = 0; j < data->simulationInfo.analyticJacobians[index].sizeRows; j++)
for(j = 0; j < data->simulationInfo->analyticJacobians[index].sizeRows; j++)
{
jac[k++] = data->simulationInfo.analyticJacobians[index].resultVars[j];
infoStreamPrint(LOG_JAC,0,"write in jac[%d]-[%d,%d]=%g from row[%d]=%g",k-1,i,j,jac[k-1],i,data->simulationInfo.analyticJacobians[index].resultVars[j]);
jac[k++] = data->simulationInfo->analyticJacobians[index].resultVars[j];
infoStreamPrint(LOG_JAC,0,"write in jac[%d]-[%d,%d]=%g from row[%d]=%g",k-1,i,j,jac[k-1],i,data->simulationInfo->analyticJacobians[index].resultVars[j]);
}

data->simulationInfo.analyticJacobians[index].seedVars[i] = 0.0;
data->simulationInfo->analyticJacobians[index].seedVars[i] = 0.0;
}
if(ACTIVE_STREAM(LOG_JAC))
{
infoStreamPrint(LOG_JAC, 0, "Print jac:");
for(i=0; i < data->simulationInfo.analyticJacobians[index].sizeRows;i++)
for(i=0; i < data->simulationInfo->analyticJacobians[index].sizeRows;i++)
{
for(j=0; j < data->simulationInfo.analyticJacobians[index].sizeCols;j++)
printf("% .5e ",jac[i+j*data->simulationInfo.analyticJacobians[index].sizeCols]);
for(j=0; j < data->simulationInfo->analyticJacobians[index].sizeCols;j++)
printf("% .5e ",jac[i+j*data->simulationInfo->analyticJacobians[index].sizeCols]);
printf("\n");
}
}
Expand All @@ -149,33 +149,33 @@ int functionJacC(DATA* data, threadData_t *threadData, double* jac){
const int index = data->callback->INDEX_JAC_C;
unsigned int i,j,k;
k = 0;
for(i=0; i < data->simulationInfo.analyticJacobians[index].sizeCols; i++)
for(i=0; i < data->simulationInfo->analyticJacobians[index].sizeCols; i++)
{
data->simulationInfo.analyticJacobians[index].seedVars[i] = 1.0;
data->simulationInfo->analyticJacobians[index].seedVars[i] = 1.0;
if(ACTIVE_STREAM(LOG_JAC))
{
printf("Caluculate one col:\n");
for(j=0; j < data->simulationInfo.analyticJacobians[index].sizeCols;j++)
infoStreamPrint(LOG_JAC,0,"seed: data->simulationInfo.analyticJacobians[index].seedVars[%d]= %f",j,data->simulationInfo.analyticJacobians[index].seedVars[j]);
for(j=0; j < data->simulationInfo->analyticJacobians[index].sizeCols;j++)
infoStreamPrint(LOG_JAC,0,"seed: data->simulationInfo->analyticJacobians[index].seedVars[%d]= %f",j,data->simulationInfo->analyticJacobians[index].seedVars[j]);
}

data->callback->functionJacC_column(data, threadData);

for(j = 0; j < data->simulationInfo.analyticJacobians[index].sizeRows; j++)
for(j = 0; j < data->simulationInfo->analyticJacobians[index].sizeRows; j++)
{
jac[k++] = data->simulationInfo.analyticJacobians[index].resultVars[j];
infoStreamPrint(LOG_JAC,0,"write in jac[%d]-[%d,%d]=%g from row[%d]=%g",k-1,i,j,jac[k-1],i,data->simulationInfo.analyticJacobians[index].resultVars[j]);
jac[k++] = data->simulationInfo->analyticJacobians[index].resultVars[j];
infoStreamPrint(LOG_JAC,0,"write in jac[%d]-[%d,%d]=%g from row[%d]=%g",k-1,i,j,jac[k-1],i,data->simulationInfo->analyticJacobians[index].resultVars[j]);
}

data->simulationInfo.analyticJacobians[index].seedVars[i] = 0.0;
data->simulationInfo->analyticJacobians[index].seedVars[i] = 0.0;
}
if(ACTIVE_STREAM(LOG_JAC))
{
infoStreamPrint(LOG_JAC, 0, "Print jac:");
for(i=0; i < data->simulationInfo.analyticJacobians[index].sizeRows;i++)
for(i=0; i < data->simulationInfo->analyticJacobians[index].sizeRows;i++)
{
for(j=0; j < data->simulationInfo.analyticJacobians[index].sizeCols;j++)
printf("% .5e ",jac[i+j*data->simulationInfo.analyticJacobians[index].sizeCols]);
for(j=0; j < data->simulationInfo->analyticJacobians[index].sizeCols;j++)
printf("% .5e ",jac[i+j*data->simulationInfo->analyticJacobians[index].sizeCols]);
printf("\n");
}
}
Expand All @@ -187,34 +187,34 @@ int functionJacD(DATA* data, threadData_t *threadData, double* jac){
const int index = data->callback->INDEX_JAC_D;
unsigned int i,j,k;
k = 0;
for(i=0; i < data->simulationInfo.analyticJacobians[index].sizeCols; i++)
for(i=0; i < data->simulationInfo->analyticJacobians[index].sizeCols; i++)
{
data->simulationInfo.analyticJacobians[index].seedVars[i] = 1.0;
data->simulationInfo->analyticJacobians[index].seedVars[i] = 1.0;
if(ACTIVE_STREAM(LOG_JAC))
{
printf("Caluculate one col:\n");
for(j=0; j < data->simulationInfo.analyticJacobians[index].sizeCols;j++) {
infoStreamPrint(LOG_JAC,0,"seed: data->simulationInfo.analyticJacobians[index].seedVars[%d]= %f",j,data->simulationInfo.analyticJacobians[index].seedVars[j]);
for(j=0; j < data->simulationInfo->analyticJacobians[index].sizeCols;j++) {
infoStreamPrint(LOG_JAC,0,"seed: data->simulationInfo->analyticJacobians[index].seedVars[%d]= %f",j,data->simulationInfo->analyticJacobians[index].seedVars[j]);
}
}

data->callback->functionJacD_column(data, threadData);

for(j = 0; j < data->simulationInfo.analyticJacobians[index].sizeRows; j++)
for(j = 0; j < data->simulationInfo->analyticJacobians[index].sizeRows; j++)
{
jac[k++] = data->simulationInfo.analyticJacobians[index].resultVars[j];
infoStreamPrint(LOG_JAC,0, "write in jac[%d]-[%d,%d]=%g from row[%d]=%g",k-1,i,j,jac[k-1],i,data->simulationInfo.analyticJacobians[index].resultVars[j]);
jac[k++] = data->simulationInfo->analyticJacobians[index].resultVars[j];
infoStreamPrint(LOG_JAC,0, "write in jac[%d]-[%d,%d]=%g from row[%d]=%g",k-1,i,j,jac[k-1],i,data->simulationInfo->analyticJacobians[index].resultVars[j]);
}

data->simulationInfo.analyticJacobians[index].seedVars[i] = 0.0;
data->simulationInfo->analyticJacobians[index].seedVars[i] = 0.0;
}
if(ACTIVE_STREAM(LOG_JAC))
{
infoStreamPrint(LOG_JAC, 0, "Print jac:");
for(i=0; i < data->simulationInfo.analyticJacobians[index].sizeRows;i++)
for(i=0; i < data->simulationInfo->analyticJacobians[index].sizeRows;i++)
{
for(j=0; j < data->simulationInfo.analyticJacobians[index].sizeCols;j++)
printf("% .5e ",jac[i+j*data->simulationInfo.analyticJacobians[index].sizeCols]);
for(j=0; j < data->simulationInfo->analyticJacobians[index].sizeCols;j++)
printf("% .5e ",jac[i+j*data->simulationInfo->analyticJacobians[index].sizeCols]);
printf("\n");
}
}
Expand All @@ -227,9 +227,9 @@ int functionJacD(DATA* data, threadData_t *threadData, double* jac){
int linearize(DATA* data, threadData_t *threadData)
{
/* init linearization sizes */
int size_A = data->modelData.nStates;
int size_Inputs = data->modelData.nInputVars;
int size_Outputs = data->modelData.nOutputVars;
int size_A = data->modelData->nStates;
int size_Inputs = data->modelData->nInputVars;
int size_Outputs = data->modelData->nOutputVars;
double* matrixA = (double*)calloc(size_A*size_A,sizeof(double));
double* matrixB = (double*)calloc(size_A*size_Inputs,sizeof(double));
double* matrixC = (double*)calloc(size_Outputs*size_A,sizeof(double));
Expand Down Expand Up @@ -274,7 +274,7 @@ int linearize(DATA* data, threadData_t *threadData)
strX = "i for i in 1:0";

if(size_Inputs)
strU = array2string(data->simulationInfo.inputVars,1,size_Inputs);
strU = array2string(data->simulationInfo->inputVars,1,size_Inputs);
else
strU = "i for i in 1:0";

Expand All @@ -283,7 +283,7 @@ int linearize(DATA* data, threadData_t *threadData)
free(matrixC);
free(matrixD);

filename = "linear_" + string(data->modelData.modelName) + ".mo";
filename = "linear_" + string(data->modelData->modelName) + ".mo";

FILE *fout = fopen(filename.c_str(),"wb");
assertStreamPrint(threadData,0!=fout,"Cannot open File %s",filename.c_str());
Expand Down

0 comments on commit 86dce0f

Please sign in to comment.