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

Commit d6957d5

Browse files
kabdelhakOpenModelica-Hudson
authored andcommitted
[BE] Add initial state selection
- available with flag "--initialStateSelection" - implemented for C runtime - has still some bugs Belonging to [master]: - #3050
1 parent 5ef43cc commit d6957d5

File tree

5 files changed

+149
-39
lines changed

5 files changed

+149
-39
lines changed

Compiler/BackEnd/IndexReduction.mo

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1650,7 +1650,7 @@ algorithm
16501650
end for;
16511651
end generateStateSets;
16521652

1653-
protected function makeStartExp
1653+
public function makeStartExp
16541654
"generate the expression: $START.inCref"
16551655
input DAE.ComponentRef inCref;
16561656
output DAE.Exp outExp;

Compiler/BackEnd/Initialization.mo

Lines changed: 134 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -65,10 +65,12 @@ import ExpressionDump;
6565
import ExpressionSimplify;
6666
import Flags;
6767
import GC;
68+
import IndexReduction;
6869
import List;
6970
import Matching;
7071
import MetaModelica.Dangerous;
7172
import Sorting;
73+
import SymbolicJacobian;
7274

7375
// =============================================================================
7476
// section for all public functions
@@ -154,8 +156,8 @@ algorithm
154156
datarecon := true;
155157
end if;
156158
((vars, fixvars, eqns, _)) := BackendVariable.traverseBackendDAEVars(dae.shared.aliasVars, introducePreVarsForAliasVariables, (vars, fixvars, eqns, hs));
157-
((vars, fixvars, eqns, _, _, _)) := BackendVariable.traverseBackendDAEVars(dae.shared.globalKnownVars, collectInitialVars, (vars, fixvars, eqns, hs, allPrimaryParameters,datarecon));
158-
((vars, fixvars, eqns, _, _, _)) := BackendVariable.traverseBackendDAEVars(dae.shared.localKnownVars, collectInitialVars, (vars, fixvars, eqns, hs, allPrimaryParameters,datarecon));
159+
((vars, fixvars, eqns, _, _, _, _)) := BackendVariable.traverseBackendDAEVars(dae.shared.globalKnownVars, collectInitialVars, (vars, fixvars, eqns, arrayCreate(0,0), hs, allPrimaryParameters,datarecon));
160+
((vars, fixvars, eqns, _, _, _, _)) := BackendVariable.traverseBackendDAEVars(dae.shared.localKnownVars, collectInitialVars, (vars, fixvars, eqns, arrayCreate(0,0), hs, allPrimaryParameters,datarecon));
159161
((eqns, reeqns)) := BackendEquation.traverseEquationArray(dae.shared.initialEqs, collectInitialEqns, (eqns, reeqns));
160162
((eqns, reeqns)) := BackendEquation.traverseEquationArray(dae.shared.removedEqs, collectInitialEqns, (eqns, reeqns));
161163
//if Flags.isSet(Flags.DUMP_INITIAL_SYSTEM) then
@@ -2065,6 +2067,8 @@ protected function collectInitialVarsEqnsSystem
20652067
input HashSet.HashSet hs;
20662068
input AvlSetCR.Tree allPrimaryParams;
20672069
input Boolean datareconFlag;
2070+
protected
2071+
array<Integer> stateSetFixCounts;
20682072
algorithm
20692073
for eq in eqSystems loop
20702074
() := match eq
@@ -2077,28 +2081,112 @@ algorithm
20772081

20782082
else
20792083
algorithm
2080-
(vars, fixVars, eqns, _, _, _) := BackendVariable.traverseBackendDAEVars(eq.orderedVars,
2081-
collectInitialVars, (vars, fixVars, eqns, hs, allPrimaryParams, datareconFlag));
2084+
stateSetFixCounts := arrayCreate(listLength(eq.stateSets), 0);
2085+
(vars, fixVars, eqns, stateSetFixCounts, _, _, _) := BackendVariable.traverseBackendDAEVars(eq.orderedVars,
2086+
collectInitialVars, (vars, fixVars, eqns, stateSetFixCounts, hs, allPrimaryParams, datareconFlag));
20822087
(eqns, reEqns) := BackendEquation.traverseEquationArray(eq.orderedEqs, collectInitialEqns, (eqns, reEqns));
2088+
if Flags.getConfigBool(Flags.INITIAL_STATE_SELECTION) then
2089+
(vars, eqns) := collectInitialStateSets(eq.stateSets, stateSetFixCounts, vars, eqns);
2090+
end if;
2091+
GC.free(stateSetFixCounts);
20832092
then
20842093
();
20852094
end match;
20862095
end for;
20872096
end collectInitialVarsEqnsSystem;
20882097

2098+
protected function collectInitialStateSets "author: kabdelhak
2099+
This function collects all information from stateSets for the initial system.
2100+
TODO: Implement better algorithm for stateSets which are not selfdependent."
2101+
input BackendDAE.StateSets stateSets;
2102+
input array<Integer> stateSetFixCounts;
2103+
input BackendDAE.Variables iVars;
2104+
input BackendDAE.EquationArray iEqns;
2105+
output BackendDAE.Variables oVars;
2106+
output BackendDAE.EquationArray oEqns;
2107+
2108+
protected
2109+
BackendDAE.StateSet stateSet;
2110+
BackendDAE.Equation eqn, Feqn, initEqn;
2111+
DAE.Exp lhs, rhs, exp, expcrF, expInitset, mulFstates;
2112+
list<DAE.Exp> expLst = {}, expcrstates, expcrInitset;
2113+
list<DAE.ComponentRef> crLst, crInitSet;
2114+
DAE.ComponentRef set, crF, crInitStates;
2115+
BackendDAE.Var var, fixState;
2116+
list<BackendDAE.Var> statesToFix = {}, unfixedStates = {}, VarsF, oInitSetVars;
2117+
DAE.Type tp, tyExpCrStates;
2118+
Integer toFix, setsize, nCandidates;
2119+
Boolean b;
2120+
DAE.Operator op;
2121+
DAE.ElementSource source;
2122+
algorithm
2123+
(oVars, oEqns) := (iVars, iEqns);
2124+
for stateSet in stateSets loop
2125+
oVars := BackendVariable.addVars(stateSet.varA, oVars);
2126+
lhs := Expression.crefToExp(stateSet.crA);
2127+
2128+
expLst:={};
2129+
2130+
crLst := SymbolicJacobian.getJacobianDependencies(stateSet.jacobian);
2131+
expLst := list(Expression.crefToExp(cr) for cr in crLst);
2132+
expLst := DAE.ICONST(integer=stateSet.index-1)::expLst;
2133+
2134+
rhs := DAE.CALL(path=Absyn.IDENT(name="$stateSelectionSet"),expLst=expLst,attr=DAE.callAttrBuiltinOther);
2135+
eqn := BackendDAE.ARRAY_EQUATION(dimSize={listLength(stateSet.varA)}, left=lhs, right=rhs,source=DAE.emptyElementSource,attr=BackendDAE.EQ_ATTR_DEFAULT_INITIAL);
2136+
oEqns := ExpandableArray.add(eqn,oEqns);
2137+
2138+
if Flags.isSet(Flags.BLT_DUMP) or Flags.isSet(Flags.INITIALIZATION) then
2139+
BackendDump.dumpEquationList({eqn}, "initial state selection equation generated:");
2140+
end if;
2141+
2142+
if arrayLength(stateSetFixCounts) >= stateSet.index and arrayGet(stateSetFixCounts,stateSet.index) > 0 then
2143+
unfixedStates := {};
2144+
for state in stateSet.statescandidates loop
2145+
if not BackendVariable.varFixed(state) then
2146+
unfixedStates := state::unfixedStates;
2147+
end if;
2148+
end for;
2149+
toFix := arrayGet(stateSetFixCounts,stateSet.index);
2150+
statesToFix := {};
2151+
2152+
// ToDo: If selfdependent -> heuristic, if not -> add new vars and write new pivot algorithm c
2153+
//if IndexReduction.isSelfDependent(stateSet) then
2154+
statesToFix := SymbolicJacobian.getFixedStatesForSelfdependentSets(stateSet,unfixedStates,toFix);
2155+
2156+
//oVars := BackendVariable.addVars(statesToFix, oVars);
2157+
//oFixVars := BackendVariable.addVars(statesToFix, oFixVars);
2158+
for state in statesToFix loop
2159+
lhs := Expression.crefToExp(state.varName);
2160+
rhs := IndexReduction.makeStartExp(state.varName);
2161+
initEqn := BackendDAE.EQUATION(exp=lhs,scalar=rhs,source=DAE.emptyElementSource,attr=BackendDAE.EQ_ATTR_DEFAULT_INITIAL);
2162+
oEqns := ExpandableArray.add(initEqn,oEqns);
2163+
end for;
2164+
2165+
if Flags.isSet(Flags.BLT_DUMP) or Flags.isSet(Flags.INITIALIZATION) then
2166+
print("StateSet " + intString(stateSet.index) + " is underconstraint for the initial system.\n");
2167+
print("======================================\n");
2168+
print("# States left to fix: " + intString(toFix) + ".\n");
2169+
print("# Unfixed candidates: " + intString(listLength(stateSet.statescandidates)-toFix) + ".\n");
2170+
BackendDump.dumpVarList(statesToFix, "Chosen states to fix:");
2171+
end if;
2172+
end if;
2173+
end for;
2174+
end collectInitialStateSets;
2175+
20892176
protected function collectInitialVars "author: lochel
20902177
This function collects all the vars for the initial system.
20912178
TODO: return additional equations for pre-variables"
20922179
input BackendDAE.Var inVar;
2093-
input tuple<BackendDAE.Variables, BackendDAE.Variables, BackendDAE.EquationArray, HashSet.HashSet, AvlSetCR.Tree, Boolean> inTpl;
2180+
input tuple<BackendDAE.Variables, BackendDAE.Variables, BackendDAE.EquationArray, array<Integer>, HashSet.HashSet, AvlSetCR.Tree, Boolean> inTpl;
20942181
output BackendDAE.Var outVar;
2095-
output tuple<BackendDAE.Variables, BackendDAE.Variables, BackendDAE.EquationArray, HashSet.HashSet, AvlSetCR.Tree, Boolean> outTpl;
2182+
output tuple<BackendDAE.Variables, BackendDAE.Variables, BackendDAE.EquationArray, array<Integer>, HashSet.HashSet, AvlSetCR.Tree, Boolean> outTpl;
20962183
algorithm
20972184
(outVar, outTpl) := matchcontinue (inVar, inTpl)
20982185
local
20992186
BackendDAE.Var var, preVar, derVar, startVar;
21002187
BackendDAE.Variables vars, fixvars;
21012188
BackendDAE.EquationArray eqns;
2189+
array<Integer> stateSetFixCounts;
21022190
BackendDAE.Equation eqn;
21032191
DAE.ComponentRef cr, preCR, derCR, startCR;
21042192
Boolean isFixed, isInput, b, preUsed, datarecon;
@@ -2109,13 +2197,15 @@ algorithm
21092197
DAE.Exp startExp, bindExp, crefExp, e;
21102198
BackendDAE.VarKind varKind;
21112199
HashSet.HashSet hs;
2112-
String s, str, sv;
2200+
String s, str, sv, stateSetIdxString;
2201+
list<String> stateSetSplit;
2202+
Integer stateSetIdx;
21132203
SourceInfo info;
21142204
AvlSetCR.Tree allPrimaryParameters;
21152205
list<DAE.ComponentRef> parameters;
21162206

21172207
// state
2118-
case (var as BackendDAE.VAR(varName=cr, varKind=BackendDAE.STATE(), varType=ty), (vars, fixvars, eqns, hs, allPrimaryParameters,datarecon)) equation
2208+
case (var as BackendDAE.VAR(varName=cr, varKind=BackendDAE.STATE(), varType=ty), (vars, fixvars, eqns, stateSetFixCounts, hs, allPrimaryParameters,datarecon)) equation
21192209
isFixed = BackendVariable.varFixed(var);
21202210
//_ = BackendVariable.varStartValueOption(var);
21212211
preUsed = BaseHashSet.has(cr, hs);
@@ -2141,8 +2231,17 @@ algorithm
21412231
end if;
21422232

21432233
if isFixed then
2144-
eqn = BackendDAE.EQUATION(crefExp, Expression.crefExp(startCR), DAE.emptyElementSource, BackendDAE.EQ_ATTR_DEFAULT_INITIAL);
2145-
eqns = BackendEquation.add(eqn, eqns);
2234+
// Special case for initial state selection
2235+
if Util.stringStartsWith("$STATESET",ComponentReference.crefFirstIdent(cr)) and Flags.getConfigBool(Flags.INITIAL_STATE_SELECTION) then
2236+
stateSetSplit = Util.stringSplitAtChar(ComponentReference.crefFirstIdent(cr),".");
2237+
stateSetIdxString::stateSetSplit = stateSetSplit;
2238+
stateSetIdxString = substring(stateSetIdxString,10,stringLength(stateSetIdxString));
2239+
stateSetIdx = stringInt(stateSetIdxString);
2240+
arrayUpdate(stateSetFixCounts, stateSetIdx, arrayGet(stateSetFixCounts, stateSetIdx) + 1);
2241+
else
2242+
eqn = BackendDAE.EQUATION(crefExp, Expression.crefExp(startCR), DAE.emptyElementSource, BackendDAE.EQ_ATTR_DEFAULT_INITIAL);
2243+
eqns = BackendEquation.add(eqn, eqns);
2244+
end if;
21462245
end if;
21472246

21482247
var = BackendVariable.setVarKind(var, BackendDAE.VARIABLE());
@@ -2165,10 +2264,10 @@ algorithm
21652264
vars = BackendVariable.addVar(var, vars);
21662265
vars = if preUsed then BackendVariable.addVar(preVar, vars) else vars;
21672266
eqns = if preUsed then BackendEquation.add(eqn, eqns) else eqns;
2168-
then (var, (vars, fixvars, eqns, hs, allPrimaryParameters, datarecon));
2267+
then (var, (vars, fixvars, eqns, stateSetFixCounts, hs, allPrimaryParameters, datarecon));
21692268

21702269
// discrete (preUsed=true)
2171-
case (var as BackendDAE.VAR(varName=cr, varKind=BackendDAE.DISCRETE(), varType=ty), (vars, fixvars, eqns, hs, allPrimaryParameters, datarecon)) equation
2270+
case (var as BackendDAE.VAR(varName=cr, varKind=BackendDAE.DISCRETE(), varType=ty), (vars, fixvars, eqns, stateSetFixCounts, hs, allPrimaryParameters, datarecon)) equation
21722271
true = BaseHashSet.has(cr, hs);
21732272
true = BackendVariable.varFixed(var);
21742273
startValue_ = BackendVariable.varStartValue(var);
@@ -2187,10 +2286,10 @@ algorithm
21872286
vars = BackendVariable.addVar(var, vars);
21882287
vars = BackendVariable.addVar(preVar, vars);
21892288
eqns = BackendEquation.add(eqn, eqns);
2190-
then (var, (vars, fixvars, eqns, hs, allPrimaryParameters, datarecon));
2289+
then (var, (vars, fixvars, eqns, stateSetFixCounts, hs, allPrimaryParameters, datarecon));
21912290

21922291
// discrete
2193-
case (var as BackendDAE.VAR(varName=cr, varKind=BackendDAE.DISCRETE()), (vars, fixvars, eqns, hs, allPrimaryParameters, datarecon)) equation
2292+
case (var as BackendDAE.VAR(varName=cr, varKind=BackendDAE.DISCRETE()), (vars, fixvars, eqns, stateSetFixCounts, hs, allPrimaryParameters, datarecon)) equation
21942293
preUsed = BaseHashSet.has(cr, hs);
21952294
startValue = BackendVariable.varStartValueOption(var);
21962295

@@ -2205,10 +2304,10 @@ algorithm
22052304

22062305
vars = BackendVariable.addVar(var, vars);
22072306
vars = if preUsed then BackendVariable.addVar(preVar, vars) else vars;
2208-
then (var, (vars, fixvars, eqns, hs, allPrimaryParameters, datarecon));
2307+
then (var, (vars, fixvars, eqns, stateSetFixCounts, hs, allPrimaryParameters, datarecon));
22092308

22102309
// parameter without binding and fixed=true
2211-
case (var as BackendDAE.VAR(varName=cr, varKind=BackendDAE.PARAM(), bindExp=NONE()), (vars, fixvars, eqns, hs, allPrimaryParameters, datarecon)) equation
2310+
case (var as BackendDAE.VAR(varName=cr, varKind=BackendDAE.PARAM(), bindExp=NONE()), (vars, fixvars, eqns, stateSetFixCounts, hs, allPrimaryParameters, datarecon)) equation
22122311
true = BackendVariable.varFixed(var);
22132312
startExp = BackendVariable.varStartValueType(var);
22142313

@@ -2227,10 +2326,10 @@ algorithm
22272326
Error.addSourceMessage(Error.UNBOUND_PARAMETER_WITH_START_VALUE_WARNING, {s, str}, info);
22282327

22292328
//vars = BackendVariable.addVar(var, vars);
2230-
then (var, (vars, fixvars, eqns, hs, allPrimaryParameters, datarecon));
2329+
then (var, (vars, fixvars, eqns, stateSetFixCounts, hs, allPrimaryParameters, datarecon));
22312330

22322331
// parameter with binding and fixed=false
2233-
case (var as BackendDAE.VAR(varName=cr, varKind=BackendDAE.PARAM(), bindExp=SOME(bindExp), varType=ty), (vars, fixvars, eqns, hs, allPrimaryParameters, datarecon)) equation
2332+
case (var as BackendDAE.VAR(varName=cr, varKind=BackendDAE.PARAM(), bindExp=SOME(bindExp), varType=ty), (vars, fixvars, eqns, stateSetFixCounts, hs, allPrimaryParameters, datarecon)) equation
22342333
true = intGt(Flags.getConfigEnum(Flags.LANGUAGE_STANDARD), 31);
22352334
false = BackendVariable.varFixed(var);
22362335
var = BackendVariable.setVarKind(var, BackendDAE.VARIABLE());
@@ -2245,12 +2344,12 @@ algorithm
22452344
eqns = BackendEquation.add(eqn, eqns);
22462345

22472346
vars = BackendVariable.addVar(var, vars);
2248-
then (var, (vars, fixvars, eqns, hs, allPrimaryParameters, datarecon));
2347+
then (var, (vars, fixvars, eqns, stateSetFixCounts, hs, allPrimaryParameters, datarecon));
22492348

22502349
// *** MODELICA 3.1 COMPATIBLE ***
22512350
// parameter with binding and fixed=false and no start value
22522351
// use the binding as start value
2253-
case (var as BackendDAE.VAR(varName=cr, varKind=BackendDAE.PARAM(), bindExp=SOME(bindExp)), (vars, fixvars, eqns, hs, allPrimaryParameters, datarecon)) equation
2352+
case (var as BackendDAE.VAR(varName=cr, varKind=BackendDAE.PARAM(), bindExp=SOME(bindExp)), (vars, fixvars, eqns, stateSetFixCounts, hs, allPrimaryParameters, datarecon)) equation
22542353
true = intLe(Flags.getConfigEnum(Flags.LANGUAGE_STANDARD), 31);
22552354
false = BackendVariable.varFixed(var);
22562355
var = BackendVariable.setVarKind(var, BackendDAE.VARIABLE());
@@ -2264,12 +2363,12 @@ algorithm
22642363
Error.addSourceMessage(Error.UNFIXED_PARAMETER_WITH_BINDING_31, {s, s, str}, info);
22652364

22662365
vars = BackendVariable.addVar(var, vars);
2267-
then (var, (vars, fixvars, eqns, hs, allPrimaryParameters, datarecon));
2366+
then (var, (vars, fixvars, eqns, stateSetFixCounts, hs, allPrimaryParameters, datarecon));
22682367

22692368
// *** MODELICA 3.1 COMPATIBLE ***
22702369
// parameter with binding and fixed=false and a start value
22712370
// ignore the binding and use the start value
2272-
case (var as BackendDAE.VAR(varName=cr, varKind=BackendDAE.PARAM(), bindExp=SOME(bindExp)), (vars, fixvars, eqns, hs, allPrimaryParameters, datarecon)) equation
2371+
case (var as BackendDAE.VAR(varName=cr, varKind=BackendDAE.PARAM(), bindExp=SOME(bindExp)), (vars, fixvars, eqns, stateSetFixCounts, hs, allPrimaryParameters, datarecon)) equation
22732372
true = intLe(Flags.getConfigEnum(Flags.LANGUAGE_STANDARD), 31);
22742373
false = BackendVariable.varFixed(var);
22752374
var = BackendVariable.setVarKind(var, BackendDAE.VARIABLE());
@@ -2283,21 +2382,21 @@ algorithm
22832382
Error.addSourceMessage(Error.UNFIXED_PARAMETER_WITH_BINDING_AND_START_VALUE_31, {s, sv, s, str}, info);
22842383

22852384
vars = BackendVariable.addVar(var, vars);
2286-
then (var, (vars, fixvars, eqns, hs, allPrimaryParameters, datarecon));
2385+
then (var, (vars, fixvars, eqns, stateSetFixCounts, hs, allPrimaryParameters, datarecon));
22872386

22882387
// secondary parameter
2289-
case (var as BackendDAE.VAR(varKind=BackendDAE.PARAM()), (vars, fixvars, eqns, hs, allPrimaryParameters, datarecon)) equation
2388+
case (var as BackendDAE.VAR(varKind=BackendDAE.PARAM()), (vars, fixvars, eqns, stateSetFixCounts, hs, allPrimaryParameters, datarecon)) equation
22902389
//true = BackendVariable.varFixed(var);
22912390
var = BackendVariable.setVarKind(var, BackendDAE.VARIABLE());
22922391
vars = BackendVariable.addVar(var, vars);
2293-
then (var, (vars, fixvars, eqns, hs, allPrimaryParameters, datarecon));
2392+
then (var, (vars, fixvars, eqns, stateSetFixCounts, hs, allPrimaryParameters, datarecon));
22942393

22952394
// external objects
2296-
case (var as BackendDAE.VAR(varKind=BackendDAE.EXTOBJ()), (vars, fixvars, eqns, hs, allPrimaryParameters, datarecon)) equation
2395+
case (var as BackendDAE.VAR(varKind=BackendDAE.EXTOBJ()), (vars, fixvars, eqns, stateSetFixCounts, hs, allPrimaryParameters, datarecon)) equation
22972396
//var = BackendVariable.setVarFixed(var, false);
22982397
//var = BackendVariable.setVarKind(var, BackendDAE.VARIABLE());
22992398
vars = BackendVariable.addVar(var, vars);
2300-
then (var, (vars, fixvars, eqns, hs, allPrimaryParameters, datarecon));
2399+
then (var, (vars, fixvars, eqns, stateSetFixCounts, hs, allPrimaryParameters, datarecon));
23012400

23022401
// skip constant
23032402
case (var as BackendDAE.VAR(varKind=BackendDAE.CONST()), _) // equation
@@ -2306,7 +2405,7 @@ algorithm
23062405

23072406
// VARIABLE (fixed=true)
23082407
// DUMMY_STATE
2309-
case (var as BackendDAE.VAR(varName=cr, varType=ty), (vars, fixvars, eqns, hs, allPrimaryParameters, datarecon)) equation
2408+
case (var as BackendDAE.VAR(varName=cr, varType=ty), (vars, fixvars, eqns, stateSetFixCounts, hs, allPrimaryParameters, datarecon)) equation
23102409
true = BackendVariable.varFixed(var);
23112410
// check if dataReconciliation is present and set the Input variables to true, as Qualified components are not handled as toplevel inputs
23122411
if datarecon then
@@ -2352,11 +2451,11 @@ algorithm
23522451
eqns = BackendEquation.add(eqn, eqns);
23532452

23542453
// Error.addCompilerNotification("VARIABLE (fixed=true): " + BackendDump.varString(var));
2355-
then (var, (vars, fixvars, eqns, hs, allPrimaryParameters, datarecon));
2454+
then (var, (vars, fixvars, eqns, stateSetFixCounts, hs, allPrimaryParameters, datarecon));
23562455

23572456
// VARIABLE (fixed=false)
23582457
// DUMMY_STATE
2359-
case (var as BackendDAE.VAR(varName=cr, varType=ty), (vars, fixvars, eqns, hs, allPrimaryParameters, datarecon)) equation
2458+
case (var as BackendDAE.VAR(varName=cr, varType=ty), (vars, fixvars, eqns, stateSetFixCounts, hs, allPrimaryParameters, datarecon)) equation
23602459
false = BackendVariable.varFixed(var);
23612460
// check if dataReconciliation is present and set the Input variables to true, as Qualified components are not handled as toplevel inputs
23622461
if datarecon then
@@ -2378,12 +2477,12 @@ algorithm
23782477
startExp = BackendVariable.varStartValue(var);
23792478
parameters = Expression.getAllCrefs(startExp);
23802479

2381-
if not min(AvlSetCR.hasKey(allPrimaryParameters, p) for p in parameters) then
2382-
eqn = BackendDAE.EQUATION(Expression.crefExp(startCR), startExp, DAE.emptyElementSource, BackendDAE.EQ_ATTR_DEFAULT_INITIAL);
2383-
eqns = BackendEquation.add(eqn, eqns);
2480+
if not min(AvlSetCR.hasKey(allPrimaryParameters, p) for p in parameters) then
2481+
eqn = BackendDAE.EQUATION(Expression.crefExp(startCR), startExp, DAE.emptyElementSource, BackendDAE.EQ_ATTR_DEFAULT_INITIAL);
2482+
eqns = BackendEquation.add(eqn, eqns);
23842483

23852484
vars = BackendVariable.addVar(startVar, vars);
2386-
end if;
2485+
end if;
23872486

23882487
preCR = ComponentReference.crefPrefixPre(cr); // cr => $PRE.cr
23892488
preVar = BackendVariable.copyVarNewName(preCR, var);
@@ -2400,7 +2499,7 @@ algorithm
24002499
eqns = if preUsed then BackendEquation.add(eqn, eqns) else eqns;
24012500

24022501
// Error.addCompilerNotification("VARIABLE (fixed=false); " + BackendDump.varString(var));
2403-
then (var, (vars, fixvars, eqns, hs, allPrimaryParameters, datarecon));
2502+
then (var, (vars, fixvars, eqns, stateSetFixCounts, hs, allPrimaryParameters, datarecon));
24042503

24052504
else equation
24062505
Error.addInternalError("function collectInitialVars failed for: " + BackendDump.varString(inVar), sourceInfo());

0 commit comments

Comments
 (0)