Skip to content

Commit 5bb1ebb

Browse files
author
Jens Frenkel
committed
- bugfix dynamic state selection
git-svn-id: https://openmodelica.org/svn/OpenModelica/trunk@14704 f25d12d1-65f4-0310-ae8a-bbce733d8d8e
1 parent f49a670 commit 5bb1ebb

File tree

2 files changed

+24
-10
lines changed

2 files changed

+24
-10
lines changed

Compiler/BackEnd/IndexReduction.mo

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2392,11 +2392,11 @@ algorithm
23922392
ne = BackendDAEUtil.systemSize(isyst);
23932393
// add the original equations to the systems
23942394
syst = BackendEquation.equationsAddDAE(eqnslst1, isyst);
2395+
// add the found state sets for dynamic state selection to the system
2396+
(setIndex,syst) = addStateSets(stateSets,iSetIndex,syst);
23952397
// change dummy states
23962398
dummyStates = List.map(dummyVars,BackendVariable.varCref);
23972399
(syst,ht) = addDummyStates(dummyStates,syst,iHt);
2398-
// add the found state sets for dynamic state selection to the system
2399-
(setIndex,syst) = addStateSets(stateSets,iSetIndex,syst);
24002400
// update IncidenceMatrix
24012401
(syst,m,_,mapEqnIncRow,mapIncRowEqn) = BackendDAEUtil.getIncidenceMatrixScalar(syst,BackendDAE.SOLVABLE(), SOME(funcs));
24022402
// genereate new Matching

Compiler/BackEnd/RemoveSimpleEquations.mo

Lines changed: 22 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3214,13 +3214,16 @@ algorithm
32143214
list< BackendDAE.Var> varA,statescandidates,ovars,varJ;
32153215
list< BackendDAE.Equation> eqns,oeqns;
32163216
BackendVarTransform.VariableReplacements repl;
3217+
HashSet.HashSet hs;
32173218
Boolean b,b1;
32183219
case ({},_,_,_,_,_) then (listReverse(iAcc),inB,iStatesetrepl);
32193220
case (BackendDAE.STATESET(rang,states,crA,varA,statescandidates,ovars,eqns,oeqns,crJ,varJ)::stateSets,_,_,_,_,_)
32203221
equation
32213222
repl = getAliasReplacements(iStatesetrepl,aliasVars);
32223223
// do not replace the set variables
3223-
ovars = replaceOtherStateSetVars(ovars,vars,aliasVars,{});
3224+
hs = HashSet.emptyHashSet();
3225+
hs = List.fold(List.map(statescandidates,BackendVariable.varCref),BaseHashSet.add,hs);
3226+
ovars = replaceOtherStateSetVars(ovars,vars,aliasVars,hs,{});
32243227
(eqns,b) = BackendVarTransform.replaceEquations(eqns,repl,SOME(BackendVarTransform.skipPreChangeEdgeOperator));
32253228
(oeqns,b1) = BackendVarTransform.replaceEquations(oeqns,repl,SOME(BackendVarTransform.skipPreChangeEdgeOperator));
32263229
oeqns = List.fold(oeqns,removeEqualLshRshEqns,{});
@@ -3266,29 +3269,40 @@ protected function replaceOtherStateSetVars
32663269
author: Frenkel TUD 2012-12"
32673270
input list< BackendDAE.Var> iVarLst;
32683271
input BackendDAE.Variables vars;
3269-
input BackendDAE.Variables aliasVars;
3272+
input BackendDAE.Variables aliasVars;
3273+
input HashSet.HashSet hs;
32703274
input list< BackendDAE.Var> iAcc;
32713275
output list< BackendDAE.Var> oVarLst;
32723276
algorithm
3273-
oVarLst := matchcontinue(iVarLst,vars,aliasVars,iAcc)
3277+
oVarLst := matchcontinue(iVarLst,vars,aliasVars,hs,iAcc)
32743278
local
32753279
BackendDAE.Var var;
32763280
list< BackendDAE.Var> varlst;
32773281
DAE.ComponentRef cr;
32783282
DAE.Exp exp;
3279-
case ({},_,_,_) then iAcc;
3280-
case (var::varlst,_,_,_)
3283+
Boolean b;
3284+
case ({},_,_,_,_) then iAcc;
3285+
case (var::varlst,_,_,_,_)
32813286
equation
32823287
cr = BackendVariable.varCref(var);
3288+
false = BaseHashSet.has(cr,hs);
32833289
({var},_) = BackendVariable.getVar(cr,aliasVars);
32843290
exp = BackendVariable.varBindExp(var);
32853291
cr::{} = Expression.extractCrefsFromExp(exp);
3292+
b = BaseHashSet.has(cr,hs);
32863293
({var},_) = BackendVariable.getVar(cr,vars);
3294+
varlst = List.consOnTrue(not b, var, iAcc);
3295+
then
3296+
replaceOtherStateSetVars(varlst,vars,aliasVars,hs,varlst);
3297+
case (var::varlst,_,_,_,_)
3298+
equation
3299+
cr = BackendVariable.varCref(var);
3300+
true = BaseHashSet.has(cr,hs);
32873301
then
3288-
replaceOtherStateSetVars(varlst,vars,aliasVars,var::iAcc);
3289-
case (var::varlst,_,_,_)
3302+
replaceOtherStateSetVars(varlst,vars,aliasVars,hs,iAcc);
3303+
case (var::varlst,_,_,_,_)
32903304
then
3291-
replaceOtherStateSetVars(varlst,vars,aliasVars,var::iAcc);
3305+
replaceOtherStateSetVars(varlst,vars,aliasVars,hs,var::iAcc);
32923306
end matchcontinue;
32933307
end replaceOtherStateSetVars;
32943308

0 commit comments

Comments
 (0)