@@ -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);
1217912184end 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+
1218112214public function getVariableIndex
1218212215 input SimCodeVar.SimVar inVar;
1218312216 output Integer outVariableIndex;
0 commit comments