Skip to content
This repository was archived by the owner on May 18, 2019. It is now read-only.

Commit 0880a6c

Browse files
rfrankeOpenModelica-Hudson
authored andcommitted
Assume simple array equations solved and count scalars for ModelInfo
Belonging to [master]: - #2679
1 parent 8b160f9 commit 0880a6c

File tree

1 file changed

+52
-19
lines changed

1 file changed

+52
-19
lines changed

Compiler/SimCode/SimCodeUtil.mo

Lines changed: 52 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -2104,6 +2104,11 @@ algorithm
21042104
BackendDAE.EquationAttributes eqAttr;
21052105
Boolean b;
21062106

2107+
// array equation that may result from -d=-nfScalarize and is assumed solved
2108+
case BackendDAE.ARRAY_EQUATION(left = DAE.CREF(componentRef = cr), right = e2, source = source, attr = eqAttr)
2109+
then
2110+
({SimCode.SES_SIMPLE_ASSIGN(iuniqueEqIndex, cr, e2, source, eqAttr)}, iuniqueEqIndex + 1, itempvars);
2111+
21072112
// solved equation
21082113
case BackendDAE.SOLVED_EQUATION(exp=e2, source=source, attr=eqAttr)
21092114
algorithm
@@ -6274,25 +6279,25 @@ algorithm
62746279
vars := createVars(dlow, inInitDAE, tempVars);
62756280
if debug then execStat("simCode: createVars"); end if;
62766281
BackendDAE.DAE(shared=BackendDAE.SHARED(info=BackendDAE.EXTRA_INFO(description=description))) := dlow;
6277-
nx := listLength(vars.stateVars);
6278-
ny := listLength(vars.algVars);
6279-
ndy := listLength(vars.discreteAlgVars);
6280-
ny_int := listLength(vars.intAlgVars);
6281-
ny_bool := listLength(vars.boolAlgVars);
6282-
numOutVars := listLength(vars.outputVars);
6283-
numInVars := listLength(vars.inputVars);
6284-
na := listLength(vars.aliasVars);
6285-
na_int := listLength(vars.intAliasVars);
6286-
na_bool := listLength(vars.boolAliasVars);
6287-
np := listLength(vars.paramVars);
6288-
np_int := listLength(vars.intParamVars);
6289-
np_bool := listLength(vars.boolParamVars);
6290-
ny_string := listLength(vars.stringAlgVars);
6291-
np_string := listLength(vars.stringParamVars);
6292-
na_string := listLength(vars.stringAliasVars);
6293-
next := listLength(vars.extObjVars);
6294-
numOptimizeConstraints := listLength(vars.realOptimizeConstraintsVars);
6295-
numOptimizeFinalConstraints := listLength(vars.realOptimizeFinalConstraintsVars);
6282+
nx := getNumScalars(vars.stateVars);
6283+
ny := getNumScalars(vars.algVars);
6284+
ndy := getNumScalars(vars.discreteAlgVars);
6285+
ny_int := getNumScalars(vars.intAlgVars);
6286+
ny_bool := getNumScalars(vars.boolAlgVars);
6287+
numOutVars := getNumScalars(vars.outputVars);
6288+
numInVars := getNumScalars(vars.inputVars);
6289+
na := getNumScalars(vars.aliasVars);
6290+
na_int := getNumScalars(vars.intAliasVars);
6291+
na_bool := getNumScalars(vars.boolAliasVars);
6292+
np := getNumScalars(vars.paramVars);
6293+
np_int := getNumScalars(vars.intParamVars);
6294+
np_bool := getNumScalars(vars.boolParamVars);
6295+
ny_string := getNumScalars(vars.stringAlgVars);
6296+
np_string := getNumScalars(vars.stringParamVars);
6297+
na_string := getNumScalars(vars.stringAliasVars);
6298+
next := getNumScalars(vars.extObjVars);
6299+
numOptimizeConstraints := getNumScalars(vars.realOptimizeConstraintsVars);
6300+
numOptimizeFinalConstraints := getNumScalars(vars.realOptimizeFinalConstraintsVars);
62966301
if debug then execStat("simCode: get lengths"); end if;
62976302
varInfo := createVarInfo(dlow, nx, ny, ndy, np, na, next, numOutVars, numInVars,
62986303
ny_int, np_int, na_int, ny_bool, np_bool, na_bool, ny_string, np_string, na_string,
@@ -12178,6 +12183,34 @@ algorithm
1217812183
outVariableIndex := getVariableIndex(stateVar);
1217912184
end getStateSimVarIndexFromIndex;
1218012185

12186+
protected
12187+
function getNumScalars
12188+
"Get number of elements when rolling out all arrays of a variable list.
12189+
author: rfranke"
12190+
input list<SimCodeVar.SimVar> vars;
12191+
output Integer numScalars;
12192+
algorithm
12193+
numScalars := List.fold(List.map(vars, getNumElems), intAdd, 0);
12194+
end getNumScalars;
12195+
12196+
protected
12197+
function getNumElems
12198+
"Get number of scalar elements of a variable, rolling out arrays.
12199+
author: rfranke"
12200+
input SimCodeVar.SimVar var;
12201+
output Integer numElems;
12202+
algorithm
12203+
numElems := match var
12204+
case SimCodeVar.SIMVAR(type_ = DAE.T_ARRAY()) algorithm
12205+
numElems := 1;
12206+
for i in 1:listLength(var.numArrayElement) loop
12207+
numElems := numElems * stringInt(listGet(var.numArrayElement, i));
12208+
end for;
12209+
then numElems;
12210+
else then 1;
12211+
end match;
12212+
end getNumElems;
12213+
1218112214
public function getVariableIndex
1218212215
input SimCodeVar.SimVar inVar;
1218312216
output Integer outVariableIndex;

0 commit comments

Comments
 (0)