@@ -330,7 +330,7 @@ algorithm
330330
331331 // Assertions and crap
332332 // create parameter equations
333- ((uniqueEqIndex, startValueEquations)) := BackendDAEUtil.foldEqSystem(dlow, createStartValueEquations, (uniqueEqIndex, {}));
333+ ((uniqueEqIndex, startValueEquations, _ )) := BackendDAEUtil.foldEqSystem(dlow, createStartValueEquations, (uniqueEqIndex, {}, inAllPrimaryParameters ));
334334 if debug then execStat("simCode: createStartValueEquations"); end if;
335335 ((uniqueEqIndex, nominalValueEquations)) := BackendDAEUtil.foldEqSystem(dlow, createNominalValueEquations, (uniqueEqIndex, {}));
336336 if debug then execStat("simCode: createNominalValueEquations"); end if;
@@ -6333,28 +6333,28 @@ end createVarNominalAssertFromVars;
63336333protected function createStartValueEquations
63346334 input BackendDAE.EqSystem syst;
63356335 input BackendDAE.Shared shared;
6336- input tuple<Integer, list<SimCode.SimEqSystem>> acc;
6337- output tuple<Integer, list<SimCode.SimEqSystem>> startValueEquations;
6336+ input tuple<Integer, list<SimCode.SimEqSystem>, list<BackendDAE.Var> > acc;
6337+ output tuple<Integer, list<SimCode.SimEqSystem>, list<BackendDAE.Var> > startValueEquations;
63386338algorithm
63396339 startValueEquations := matchcontinue (syst, shared, acc)
63406340 local
63416341 BackendDAE.Variables vars, av;
63426342 list<BackendDAE.Equation> startValueEquationsTmp2;
63436343 list<SimCode.SimEqSystem> simeqns, simeqns1;
63446344 Integer uniqueEqIndex;
6345+ list<BackendDAE.Var> allPrimaryParameters;
63456346
6346- // this is the old version if the new fails
6347- case (BackendDAE.EQSYSTEM(orderedVars=vars), BackendDAE.SHARED(aliasVars=av), (uniqueEqIndex, simeqns)) equation
6347+ case (BackendDAE.EQSYSTEM(orderedVars=vars), BackendDAE.SHARED(aliasVars=av), (uniqueEqIndex, simeqns, allPrimaryParameters)) equation
63486348 // vars
6349- ((startValueEquationsTmp2, _)) = BackendVariable.traverseBackendDAEVars(vars, createInitialAssignmentsFromStart, ({}, av));
6349+ ((startValueEquationsTmp2, _, _ )) = BackendVariable.traverseBackendDAEVars(vars, createInitialAssignmentsFromStart, ({}, av, allPrimaryParameters ));
63506350 startValueEquationsTmp2 = listReverse(startValueEquationsTmp2);
63516351 // kvars
63526352 // ((startValueEquationsTmp, _)) = BackendVariable.traverseBackendDAEVars(globalKnownVars, createInitialAssignmentsFromStart, ({}, av));
63536353 // startValueEquationsTmp = listReverse(startValueEquationsTmp);
63546354 // startValueEquationsTmp2 = listAppend(startValueEquationsTmp2, startValueEquationsTmp);
63556355
63566356 (simeqns1, uniqueEqIndex) = List.mapFold(startValueEquationsTmp2, dlowEqToSimEqSystem, uniqueEqIndex);
6357- then ((uniqueEqIndex, listAppend(simeqns1, simeqns)));
6357+ then ((uniqueEqIndex, listAppend(simeqns1, simeqns), allPrimaryParameters ));
63586358
63596359 else equation
63606360 Error.addInternalError("function createStartValueEquations failed", sourceInfo());
@@ -6506,31 +6506,35 @@ end createParameterEquations;
65066506
65076507protected function createInitialAssignmentsFromStart
65086508 input BackendDAE.Var inVar;
6509- input tuple<list<BackendDAE.Equation>, BackendDAE.Variables> inTpl;
6509+ input tuple<list<BackendDAE.Equation>, BackendDAE.Variables, list<BackendDAE.Var> > inTpl;
65106510 output BackendDAE.Var outVar;
6511- output tuple<list<BackendDAE.Equation>, BackendDAE.Variables> outTpl;
6511+ output tuple<list<BackendDAE.Equation>, BackendDAE.Variables, list<BackendDAE.Var> > outTpl;
65126512algorithm
65136513 (outVar,outTpl) := matchcontinue (inVar,inTpl)
65146514 local
65156515 BackendDAE.Var var;
65166516 BackendDAE.Equation initialEquation;
65176517 list<BackendDAE.Equation> eqns;
65186518 DAE.ComponentRef name;
6519- DAE.Exp startv ;
6519+ DAE.Exp startExp ;
65206520 DAE.ElementSource source;
65216521 BackendDAE.Variables av;
6522+ list<BackendDAE.Var> allPrimaryParameters;
6523+ list<DAE.ComponentRef> parameters;
65226524
65236525 // also add an assignment for variables that have non-constant
65246526 // expressions, e.g. parameter values, as start. NOTE: such start
65256527 // attributes can then not be changed in the text file, since the initial
65266528 // calc. will override those entries!
6527- case (var as BackendDAE.VAR(varName=name, source=source), (eqns, av))
6529+ case (var as BackendDAE.VAR(varName=name, source=source), (eqns, av, allPrimaryParameters ))
65286530 equation
6529- startv = BackendVariable.varStartValueFail(var);
6530- false = Expression.isConst(startv);
6531+ startExp = BackendVariable.varStartValueFail(var);
6532+ parameters = Expression.getAllCrefs(startExp);
6533+ true = BackendVariable.areAllCrefsInVarList(parameters, allPrimaryParameters) "add equations if the start value depends only on primary parameters";
6534+ false = Expression.isConst(startExp) "don't add equations for constant start values";
65316535 SimCodeVar.NOALIAS() = getAliasVar(var, SOME(av));
6532- initialEquation = BackendDAE.SOLVED_EQUATION(name, startv , source, BackendDAE.EQ_ATTR_DEFAULT_UNKNOWN);
6533- then (var, (initialEquation :: eqns, av));
6536+ initialEquation = BackendDAE.SOLVED_EQUATION(name, startExp , source, BackendDAE.EQ_ATTR_DEFAULT_UNKNOWN);
6537+ then (var, (initialEquation :: eqns, av, allPrimaryParameters ));
65346538
65356539 else (inVar,inTpl);
65366540 end matchcontinue;
0 commit comments