Skip to content

Commit 1f708d6

Browse files
author
Jens Frenkel
committed
- improve BackEnd/BackendDAEUtil.updateIncidenceMatrix
git-svn-id: https://openmodelica.org/svn/OpenModelica/trunk@8483 f25d12d1-65f4-0310-ae8a-bbce733d8d8e
1 parent 6d5d460 commit 1f708d6

File tree

1 file changed

+36
-11
lines changed

1 file changed

+36
-11
lines changed

Compiler/BackEnd/BackendDAEUtil.mo

Lines changed: 36 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -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;
43334339
end 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+
43354360
protected function updateTransposedMatrix
43364361
"function: updateTransposedMatrix
43374362
author: PA

0 commit comments

Comments
 (0)