@@ -1962,14 +1962,13 @@ protected
19621962algorithm
19631963 (vars, fixvars, eqns, reqns, hs, clkHS) := inTpl;
19641964
1965- ((vars, fixvars, eqns, hs, clkHS)) := BackendVariable . traverseBackendDAEVars(inEqSystem. orderedVars, collectInitialVars, (vars, fixvars, eqns, hs, clkHS));
1966-
19671965 outTpl := match inEqSystem
19681966 case BackendDAE . EQSYSTEM (partitionKind = BackendDAE . CLOCKED_PARTITION (_)) equation
1969- ((eqns, clkHS)) = BackendVariable . traverseBackendDAEVars(inEqSystem. orderedVars, createInitialClockedEqns , (eqns, clkHS));
1967+ ((vars, eqns, clkHS)) = BackendVariable . traverseBackendDAEVars(inEqSystem. orderedVars, collectInitialClockedVarsEqns , (vars, eqns, clkHS));
19701968 then (vars, fixvars, eqns, reqns, hs, clkHS);
19711969
19721970 else equation
1971+ ((vars, fixvars, eqns, hs, clkHS)) = BackendVariable . traverseBackendDAEVars(inEqSystem. orderedVars, collectInitialVars, (vars, fixvars, eqns, hs, clkHS));
19731972 ((eqns, reqns)) = BackendEquation . traverseEquationArray(inEqSystem. orderedEqs, collectInitialEqns, (eqns, reqns));
19741973 // ((fixvars, eqns)) = List.fold(inEqSystem.stateSets, collectInitialStateSetVars, (fixvars, eqns));
19751974 then (vars, fixvars, eqns, reqns, hs, clkHS);
@@ -2185,7 +2184,7 @@ algorithm
21852184 isInput = BackendVariable . isVarOnTopLevelAndInput(var );
21862185 startValue_ = BackendVariable . varStartValue(var );
21872186 preUsed = BaseHashSet . has(cr, hs);
2188- previousUsed = BaseHashSet . has(cr, clkHS);
2187+ previousUsed = false ; // BaseHashSet.has(cr, clkHS);
21892188
21902189 var = BackendVariable . setVarFixed(var , false );
21912190
@@ -2242,40 +2241,50 @@ algorithm
22422241 end matchcontinue;
22432242end collectInitialVars;
22442243
2245- protected function createInitialClockedEqns "author: rfranke
2244+ protected function collectInitialClockedVarsEqns "author: rfranke
22462245 This function creates initial equations for a clocked partition.
22472246 Previous states are initialized with the states. All other variables are initialized with start values."
22482247 input BackendDAE . Var inVar;
2249- input tuple< BackendDAE . EquationArray , HashSet . HashSet > inTpl;
2248+ input tuple< BackendDAE . Variables , BackendDAE . EquationArray , HashSet . HashSet > inTpl;
22502249 output BackendDAE . Var outVar;
2251- output tuple< BackendDAE . EquationArray , HashSet . HashSet > outTpl;
2250+ output tuple< BackendDAE . Variables , BackendDAE . EquationArray , HashSet . HashSet > outTpl;
22522251protected
2252+ BackendDAE . Variables vars;
22532253 BackendDAE . EquationArray eqns;
22542254 HashSet . HashSet clkHS;
22552255algorithm
2256- (eqns, clkHS) := inTpl;
2256+ (vars, eqns, clkHS) := inTpl;
22572257 (outVar, outTpl) := match inVar
22582258 local
2259- BackendDAE . Var var ;
2260- BackendDAE . Equation eqn;
2259+ BackendDAE . Var var , previousVar;
22612260 DAE . ComponentRef cr, previousCR;
2261+ DAE . Type ty;
22622262 DAE . Exp crExp, previousExp, startExp;
22632263 Boolean previousUsed;
2264- case (var as BackendDAE . VAR (varName= cr)) equation
2264+ case (var as BackendDAE . VAR (varName= cr, varType = ty )) equation
22652265 previousUsed = BaseHashSet . has(cr, clkHS);
2266- crExp = Expression . crefExp(cr);
22672266 previousCR = ComponentReference . crefPrefixPrevious(cr); // cr => $CLKPRRE.cr
2267+ previousVar = BackendVariable . copyVarNewName(previousCR, var );
2268+ crExp = Expression . crefExp(cr);
22682269 previousExp = Expression . crefExp(previousCR);
22692270 startExp = BackendVariable . varStartValue(var );
2270- eqn = if previousUsed
2271- then
2272- BackendDAE . EQUATION (previousExp, crExp, DAE . emptyElementSource, BackendDAE . EQ_ATTR_DEFAULT_INITIAL )
2273- else
2274- BackendDAE . EQUATION (crExp, startExp, DAE . emptyElementSource, BackendDAE . EQ_ATTR_DEFAULT_INITIAL );
2275- eqns = BackendEquation . addEquation(eqn, eqns);
2276- then (var , (eqns, clkHS));
2271+ if previousUsed then
2272+ // create previous variable and initial equation
2273+ previousVar = BackendVariable . setVarDirection(previousVar, DAE . BIDIR ());
2274+ previousVar = BackendVariable . setBindExp(previousVar, NONE ());
2275+ previousVar = BackendVariable . setBindValue(previousVar, NONE ());
2276+ previousVar = BackendVariable . setVarFixed(previousVar, true );
2277+ previousVar = BackendVariable . setVarStartValueOption(previousVar, SOME (DAE . CREF (cr, ty)));
2278+ vars = BackendVariable . addVar(previousVar, vars);
2279+ eqns = BackendEquation . addEquation(BackendDAE . EQUATION (previousExp, crExp, DAE . emptyElementSource, BackendDAE . EQ_ATTR_DEFAULT_INITIAL ), eqns);
2280+ var = BackendVariable . setVarKind(var , BackendDAE . CLOCKED_STATE (previousName = previousCR));
2281+ end if ;
2282+ // add clocked variable and initial equation
2283+ vars = BackendVariable . addVar(var , vars);
2284+ eqns = BackendEquation . addEquation(BackendDAE . EQUATION (crExp, startExp, DAE . emptyElementSource, BackendDAE . EQ_ATTR_DEFAULT_INITIAL ), eqns);
2285+ then (var , (vars, eqns, clkHS));
22772286 end match;
2278- end createInitialClockedEqns ;
2287+ end collectInitialClockedVarsEqns ;
22792288
22802289protected function collectInitialEqns "author: lochel"
22812290 input BackendDAE . Equation inEq;
0 commit comments