@@ -827,12 +827,16 @@ public function translateDae "function: translateDae
827827 author: PA
828828
829829 Translates the dae so variables are indexed into different arrays:
830- - xd for derivatives
831830 - x for states
832- - dummy_der for dummy derivatives
833- - dummy for dummy states
834- - y for algebraic variables
835- - p for parameters
831+ - xd for derivatives
832+ - y_real for algebraic variables
833+ - p_real for parameters
834+ - y_int for algebraic variables
835+ - p_int for parameters
836+ - y_bool for algebraic variables
837+ - p_bool for parameters
838+ - y_str for algebraic variables
839+ - p_str for parameters
836840"
837841 input BackendDAE . BackendDAE inBackendDAE;
838842 input Option < String > dummy;
@@ -4268,7 +4272,7 @@ algorithm
42684272 case (dae,m,mt,eqns)
42694273 equation
42704274 (m_1,changedvars) = updateIncidenceMatrix2(dae, m, eqns);
4271- changedvars_1 = Util . listFlatten (changedvars);
4275+ changedvars_1 = Util . listListUnionOnTrue (changedvars,intEq );
42724276 mt_1 = updateTransposedMatrix(changedvars_1, m_1, mt);
42734277 then
42744278 (m_1,mt_1);
@@ -4302,7 +4306,7 @@ algorithm
43024306 array< list< BackendDAE . Value >> m,m_1,m_2;
43034307 BackendDAE . Value e_1,e;
43044308 BackendDAE . Equation eqn;
4305- list< BackendDAE . Value > row,changedvars1 ,eqns,oldvars,changedvars3 ;
4309+ list< BackendDAE . Value > row,changedvars ,eqns,oldvars,newvars,diffvars,allvars ;
43064310 list< list< BackendDAE . Value >> changedvars2;
43074311 BackendDAE . Variables vars,knvars;
43084312 BackendDAE . EquationArray daeeqns,daeseqns;
@@ -4315,13 +4319,15 @@ algorithm
43154319 e_1 = e - 1 ;
43164320 eqn = equationNth(daeeqns, e_1);
43174321 row = incidenceRow(vars, eqn,wc);
4318- // oldvars = m[e] ;
4322+ oldvars = getOldVars(m,e) ;
43194323 m_1 = Util . arrayReplaceAtWithFill(row, e, m, {});
4320- changedvars1 = varsInEqn(m_1, e);
4321- // changedvars3 = Util.listSetDifferenceOnTrue(oldvars, changedvars1, intEq);
4324+ newvars = varsInEqn(m_1, e);
4325+ diffvars = Util . listSetDifferenceOnTrue(oldvars, newvars, intEq);
4326+ allvars = Util . listListUnionOnTrue({oldvars,newvars},intEq);
4327+ changedvars = Util . listSelect1(allvars,diffvars,Util . listNotContains);
43224328 (m_2,changedvars2) = updateIncidenceMatrix2(dae, m_1, eqns);
43234329 then
4324- (m_2,(changedvars1 :: changedvars2));
4330+ (m_2,(changedvars :: changedvars2));
43254331
43264332 case (_,_,_)
43274333 equation
@@ -4332,6 +4338,25 @@ algorithm
43324338 end matchcontinue;
43334339end updateIncidenceMatrix2;
43344340
4341+ protected function getOldVars
4342+ input array< list< BackendDAE . Value >> m;
4343+ input Integer pos;
4344+ output list< BackendDAE . Value > oldvars;
4345+ algorithm
4346+ oldvars := matchcontinue(m,pos)
4347+ local
4348+ Integer alen;
4349+ case (m,pos)
4350+ equation
4351+ alen = arrayLength(m);
4352+ (pos <= alen) = true ;
4353+ oldvars = m[pos];
4354+ then
4355+ oldvars;
4356+ case (m,pos) then {};
4357+ end matchcontinue;
4358+ end getOldVars;
4359+
43354360protected function updateTransposedMatrix
43364361"function: updateTransposedMatrix
43374362 author: PA
0 commit comments