Skip to content

Commit d6ff87b

Browse files
author
Willi Braun
committed
- an other attempt to fix IndexReduction
git-svn-id: https://openmodelica.org/svn/OpenModelica/trunk@20820 f25d12d1-65f4-0310-ae8a-bbce733d8d8e
1 parent b71eb51 commit d6ff87b

File tree

1 file changed

+16
-15
lines changed

1 file changed

+16
-15
lines changed

Compiler/BackEnd/IndexReduction.mo

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2036,8 +2036,8 @@ algorithm
20362036
nv1 = BackendVariable.varsSize(BackendVariable.daeVars(syst));
20372037
ne1 = BackendDAEUtil.systemSize(syst);
20382038
ass1 = Util.arrayExpand(nv1-nv,ass1,-1);
2039-
ass2 =Util.arrayExpand(ne1-ne,ass2,-1);
2040-
true = BackendDAEEXT.setAssignment(nv1,ne1,ass2,ass1);
2039+
ass2 = Util.arrayExpand(ne1-ne,ass2,-1);
2040+
true = BackendDAEEXT.setAssignment(ne1,nv1,ass2,ass1);
20412041
Matching.matchingExternalsetIncidenceMatrix(nv1, ne1, m);
20422042
BackendDAEEXT.matching(nv1, ne1, 5, -1, 0.0, 0);
20432043
BackendDAEEXT.getAssignment(ass2, ass1);
@@ -2220,7 +2220,8 @@ algorithm
22202220
indexmap = arrayCreate(nfreeStates + nv,-1);
22212221
invindexmap = arrayCreate(nfreeStates,-1);
22222222
// workaround to get state indexes
2223-
(vars,(indexmap,invindexmap,_,nv1,_,_,_)) = BackendVariable.traverseBackendDAEVarsWithUpdate(vars,getStateIndexes,(indexmap,invindexmap,1,nv,nv,hovvars,{}));
2223+
nv1 = nv + nfreeStates;
2224+
(vars,(indexmap,invindexmap,_,_,_,_)) = BackendVariable.traverseBackendDAEVarsWithUpdate(vars,getStateIndexes,(indexmap,invindexmap,1,nv,hovvars,{}));
22242225
// BackendDump.dumpMatching(indexmap);
22252226
m1 = arrayCreate(ne1,{});
22262227
mT1 = arrayCreate(nv1,{});
@@ -2233,7 +2234,7 @@ algorithm
22332234
getIncidenceMatrixLevelEquations(eqnslst,vars,neqnarr,ne,m1,mT1,m,mapEqnIncRow,mapIncRowEqn,indexmap,funcs);
22342235
// match the variables not the equations, to have prevered states unmatched
22352236
vec1 = Util.arrayExpand(nfreeStates,ass1,-1);
2236-
vec2 =Util.arrayExpand(neqns,ass2,-1);
2237+
vec2 = Util.arrayExpand(neqns,ass2,-1);
22372238
true = BackendDAEEXT.setAssignment(nv1,ne1,vec1,vec2);
22382239
Matching.matchingExternalsetIncidenceMatrix(ne1, nv1, mT1);
22392240
BackendDAEEXT.matching(ne1, nv1, 3, -1, 0.0, 0);
@@ -2401,29 +2402,29 @@ algorithm
24012402
end dumpBlock;
24022403

24032404
protected function getStateIndexes
2404-
input tuple<BackendDAE.Var, tuple<array<Integer>,array<Integer>,Integer,Integer,Integer,BackendDAE.Variables,list<Integer>>> inTpl;
2405-
output tuple<BackendDAE.Var, tuple<array<Integer>,array<Integer>,Integer,Integer,Integer,BackendDAE.Variables,list<Integer>>> outTpl;
2405+
input tuple<BackendDAE.Var, tuple<array<Integer>,array<Integer>,Integer,Integer,BackendDAE.Variables,list<Integer>>> inTpl;
2406+
output tuple<BackendDAE.Var, tuple<array<Integer>,array<Integer>,Integer,Integer,BackendDAE.Variables,list<Integer>>> outTpl;
24062407
algorithm
24072408
outTpl := matchcontinue(inTpl)
24082409
local
24092410
DAE.ComponentRef cr;
24102411
BackendDAE.Var v;
24112412
array<Integer> stateindexs,invmap;
2412-
Integer indx,s,nv;
2413+
Integer indx,s,nv,newindx;
24132414
BackendDAE.Variables hov;
24142415
list<Integer> derstatesindexs;
24152416
Option<DAE.ComponentRef> derName;
2416-
case ((v as BackendDAE.VAR(varName=cr,varKind=BackendDAE.STATE(derName=_)),(stateindexs,invmap,indx,s,nv,hov,derstatesindexs)))
2417+
case ((v as BackendDAE.VAR(varName=cr,varKind=BackendDAE.STATE(derName=_)),(stateindexs,invmap,indx,nv,hov,derstatesindexs)))
24172418
equation
2418-
(_::_,_) = BackendVariable.getVar(cr, hov);
2419-
s = s+1;
2420-
_= arrayUpdate(stateindexs,indx,s);
2421-
_= arrayUpdate(invmap,s-nv,indx);
2419+
(_::_,{s}) = BackendVariable.getVar(cr, hov);
2420+
newindx = nv+s;
2421+
_= arrayUpdate(stateindexs,indx,newindx);
2422+
_= arrayUpdate(invmap,s,indx);
24222423
then
2423-
((v,(stateindexs,invmap,indx+1,s,nv,hov,indx::derstatesindexs)));
2424-
case ((v,(stateindexs,invmap,indx,s,nv,hov,derstatesindexs)))
2424+
((v,(stateindexs,invmap,indx+1,nv,hov,indx::derstatesindexs)));
2425+
case ((v,(stateindexs,invmap,indx,nv,hov,derstatesindexs)))
24252426
then
2426-
((v,(stateindexs,invmap,indx+1,s,nv,hov,derstatesindexs)));
2427+
((v,(stateindexs,invmap,indx+1,nv,hov,derstatesindexs)));
24272428
end matchcontinue;
24282429
end getStateIndexes;
24292430

0 commit comments

Comments
 (0)