@@ -1066,7 +1066,8 @@ protected function fixUnderDeterminedInitialSystem "function fixUnderDeterminedI
10661066 output BackendDAE . Shared oShared;
10671067algorithm
10681068 (outSucceed, outVars, outEqns, oShared) := matchcontinue(inDAE, inVars, inEqns, inInitVars, iShared)
1069- local
1069+ local
1070+ BackendDAE . Variables vars;
10701071 BackendDAE . EquationArray eqns;
10711072 Integer nVars, nInitVars, nEqns;
10721073 list< BackendDAE . Var > initVarList;
@@ -1090,27 +1091,27 @@ algorithm
10901091 nEqns = BackendDAEUtil . equationSize(inEqns);
10911092 syst = BackendDAE . EQSYSTEM (inVars, inEqns, NONE (), NONE (), BackendDAE . NO_MATCHING (),{});
10921093 (syst,m,mt,_,_) = BackendDAEUtil . getIncidenceMatrixScalar(syst,BackendDAE . SOLVABLE ());
1093- // BackendDump.printEqSystem(syst);
1094+ BackendDump . printEqSystem(syst);
10941095 vec1 = arrayCreate(nVars,-1 );
10951096 vec2 = arrayCreate(nEqns,-1 );
10961097 Matching . matchingExternalsetIncidenceMatrix(nVars,nEqns,m);
10971098 BackendDAEEXT . matching(nVars,nEqns,5 ,-1 ,0 . 0 ,1 );
10981099 BackendDAEEXT . getAssignment(vec2,vec1);
10991100 // try to find for unmatched variables without startvalue an equation by unassign a variable with start value
1100- // unassigned1 = Matching.getUnassigned(nEqns, vec2, {});
1101- // print("Unassigned Eqns " +& stringDelimitList(List.map(unassigned1,intString),", ") +& "\n");
1101+ unassigned1 = Matching . getUnassigned(nEqns, vec2, {});
1102+ print("Unassigned Eqns " +& stringDelimitList(List . map(unassigned1,intString),", " ) +& " \n " );
11021103 unassigned = Matching . getUnassigned(nVars, vec1, {});
1103- // print("Unassigned Vars " +& stringDelimitList(List.map(unassigned,intString),", ") +& "\n");
1104+ print("Unassigned Vars " +& stringDelimitList(List . map(unassigned,intString),", " ) +& " \n " );
11041105 Debug . bcall(intGt(listLength(unassigned),nVars- nEqns),print,"Error could not match all equations \n " );
11051106 unassigned = Util . if_(intGt(listLength(unassigned),nVars- nEqns),{},unassigned);
11061107 // unassigned = List.firstN(listReverse(unassigned),nVars-nEqns);
11071108 unassigned = replaceFixedCandidates(unassigned,nVars,nEqns,m,mt,vec1,vec2,inVars,inInitVars,1 ,arrayCreate(nEqns,-1 ),{});
11081109 // add for all free variables an equation
11091110 Debug . fcall(Flags . PEDANTIC , Error . addCompilerWarning, "Assuming fixed start value for the following " +& intString(nVars- nEqns) +& " variables:" );
11101111 initVarList = List . map1r(unassigned,BackendVariable . getVarAt,inVars);
1111- (eqns,shared ) = addStartValueEquations(initVarList, inEqns, iShared);
1112+ (vars, eqns,shared ) = addStartValueEquations(initVarList, inVars , inEqns, iShared);
11121113 then
1113- (true , inVars , eqns, shared );
1114+ (true , vars , eqns, shared );
11141115
11151116 // fix all free variables
11161117 case (_, _, eqns, _, _) equation
@@ -1121,8 +1122,8 @@ algorithm
11211122
11221123 Debug . fcall(Flags . PEDANTIC , Error . addCompilerWarning, "Assuming fixed start value for the following " +& intString(nVars- nEqns) +& " variables:" );
11231124 initVarList = BackendVariable . varList(inInitVars);
1124- (eqns,shared ) = addStartValueEquations(initVarList, eqns, iShared);
1125- then (true , inVars , eqns, shared );
1125+ (vars, eqns,shared ) = addStartValueEquations(initVarList, inVars , eqns, iShared);
1126+ then (true , vars , eqns, shared );
11261127
11271128 // fix a subset of unfixed variables
11281129 case (_, _, eqns, _, _) equation
@@ -1440,16 +1441,19 @@ end collectIndependentVars;
14401441
14411442protected function addStartValueEquations "function addStartValueEquations
14421443 author lochel"
1443- input list< BackendDAE . Var > inVars;
1444+ input list< BackendDAE . Var > inVarLst;
1445+ input BackendDAE . Variables iVars;
14441446 input BackendDAE . EquationArray inEqns;
14451447 input BackendDAE . Shared iShared;
1448+ output BackendDAE . Variables oVars;
14461449 output BackendDAE . EquationArray outEqns;
14471450 output BackendDAE . Shared oShared;
14481451algorithm
1449- (outEqns,oShared) := matchcontinue(inVars, inEqns,iShared)
1452+ (oVars, outEqns,oShared) := matchcontinue(inVarLst,iVars, inEqns,iShared)
14501453 local
1454+ BackendDAE . Variables vars;
14511455 BackendDAE . Var var ,preVar;
1452- list< BackendDAE . Var > vars ;
1456+ list< BackendDAE . Var > varlst ;
14531457 BackendDAE . Equation eqn;
14541458 BackendDAE . EquationArray eqns;
14551459 DAE . Exp e, e1, crefExp, startExp;
@@ -1460,9 +1464,9 @@ algorithm
14601464 BackendDAE . Shared shared ;
14611465 Option < DAE . Exp > optexp;
14621466
1463- case ({}, _, _) then (inEqns,iShared);
1467+ case ({}, _, _, _ ) then (iVars, inEqns,iShared);
14641468
1465- case (var ::vars , _,_)
1469+ case (var ::varlst , _, _, _)
14661470 equation
14671471 preCref = BackendVariable . varCref(var );
14681472 true = ComponentReference . isPreCref(preCref);
@@ -1481,36 +1485,39 @@ algorithm
14811485 Debug . fcall(Flags . PEDANTIC , Error . addCompilerWarning, " [discrete] " +& crStr);
14821486
14831487 eqns = BackendEquation . equationAdd(eqn, inEqns);
1484- (eqns,shared ) = addStartValueEquations(vars , eqns, iShared);
1488+ (vars, eqns,shared ) = addStartValueEquations(varlst, iVars , eqns, iShared);
14851489 then
1486- (eqns,shared );
1490+ (vars, eqns,shared );
14871491
1488- case ((var as BackendDAE . VAR (varName= cref, varType= tp, arryDim= arryDim))::vars , _,_)
1492+ case ((var as BackendDAE . VAR (varName= cref, varType= tp, arryDim= arryDim))::varlst , _, _, _)
14891493 equation
14901494 true = BackendVariable . isVarDiscrete(var );
14911495 crefExp = DAE . CREF (cref, tp);
14921496
1493- optexp = BackendVariable . varStartValueOption(var );
1497+ // optexp = BackendVariable.varStartValueOption(var);
14941498 preCref = ComponentReference . crefPrefixPre(cref); // cr => $PRE.cr
1495- preVar = BackendDAE . VAR (preCref, BackendDAE . DISCRETE (), DAE . BIDIR (), DAE . NON_PARALLEL (), tp, NONE (), NONE (), arryDim, DAE . emptyElementSource, NONE (), NONE (), DAE . NON_CONNECTOR ());
1496- preVar = BackendVariable . setVarFixed(preVar, true );
1497- preVar = BackendVariable . setVarStartValueOption(preVar, optexp);
1499+ // preVar = BackendDAE.VAR(preCref, BackendDAE.DISCRETE(), DAE.BIDIR(), DAE.NON_PARALLEL(), tp, NONE(), NONE(), arryDim, DAE.emptyElementSource, NONE(), NONE(), DAE.NON_CONNECTOR());
1500+ // preVar = BackendVariable.setVarFixed(preVar, true);
1501+ // preVar = BackendVariable.setVarStartValueOption(preVar, optexp);
14981502
1499- e = Expression . crefExp(cref);
1500- startExp = Expression . crefExp(preCref);
1503+ // e = Expression.crefExp(cref);
1504+ // startExp = Expression.crefExp(preCref);
15011505
1502- eqn = BackendEquation . generateEquation(crefExp, startExp, tp, DAE . emptyElementSource, false );
1506+ // eqn = BackendEquation.generateEquation(crefExp, startExp, tp, DAE.emptyElementSource, false);
15031507
15041508 crStr = ComponentReference . crefStr(cref);
15051509 Debug . fcall(Flags . PEDANTIC , Error . addCompilerWarning, " [discrete] " +& crStr);
15061510
1511+ ({preVar},_) = BackendVariable . getVar(preCref,iVars);
1512+ preVar = BackendVariable . setVarFixed(preVar, true );
1513+ vars = BackendVariable . deleteVar(preCref,iVars);
15071514 shared = BackendVariable . addKnVarDAE(preVar,iShared);
1508- eqns = BackendEquation . equationAdd(eqn, inEqns);
1509- (eqns,shared ) = addStartValueEquations(vars, eqns ,shared );
1515+ // eqns = BackendEquation.equationAdd(eqn, inEqns);
1516+ (vars, eqns,shared ) = addStartValueEquations(varlst, vars,inEqns ,shared );
15101517 then
1511- (eqns,shared );
1518+ (vars, eqns,shared );
15121519
1513- case (var ::vars , _,_)
1520+ case (var ::varlst , _, _, _)
15141521 equation
15151522 cref = BackendVariable . varCref(var );
15161523 tp = BackendVariable . varType(var );
@@ -1527,9 +1534,9 @@ algorithm
15271534 Debug . fcall(Flags . PEDANTIC , Error . addCompilerWarning, " [continuous] " +& crStr);
15281535
15291536 eqns = BackendEquation . equationAdd(eqn, inEqns);
1530- (eqns,shared ) = addStartValueEquations(vars, eqns,iShared);
1537+ (vars, eqns,shared ) = addStartValueEquations(varlst,iVars, eqns,iShared);
15311538 then
1532- (eqns,shared );
1539+ (vars, eqns,shared );
15331540
15341541 else equation
15351542 Error . addMessage(Error . INTERNAL_ERROR , {"./Compiler/BackEnd/Initialization.mo: function addStartValueEquations failed" });
0 commit comments