Skip to content

Commit

Permalink
- fix initialization of inactive when-equations (example from #3092)
Browse files Browse the repository at this point in the history
git-svn-id: https://openmodelica.org/svn/OpenModelica/trunk@24291 f25d12d1-65f4-0310-ae8a-bbce733d8d8e
  • Loading branch information
lochel committed Jan 29, 2015
1 parent 678e229 commit 336ad04
Showing 1 changed file with 5 additions and 13 deletions.
18 changes: 5 additions & 13 deletions Compiler/BackEnd/Initialization.mo
Expand Up @@ -421,7 +421,7 @@ protected function inlineWhenForInitializationWhenEquation "author: lochel
output list<BackendDAE.Equation> outEqns;
output BackendDAE.Variables outVars;
algorithm
(outEqns, outVars) := matchcontinue(inWEqn, inSource, inEqAttr, inEqns, inVars)
(outEqns, outVars) := matchcontinue(inWEqn)
local
DAE.ComponentRef left;
DAE.Exp condition, right, crexp;
Expand All @@ -431,23 +431,17 @@ algorithm
BackendDAE.Variables vars;

// active when equation during initialization
case (BackendDAE.WHEN_EQ(condition=condition, left=left, right=right), _, _, _, _) equation
case BackendDAE.WHEN_EQ(condition=condition, left=left, right=right) equation
true = Expression.containsInitialCall(condition, false); // do not use Expression.traverseExp
crexp = Expression.crefExp(left);
eqn = BackendEquation.generateEquation(crexp, right, inSource, inEqAttr);
then (eqn::inEqns, inVars);

// inactive when equation during initialization
case (BackendDAE.WHEN_EQ(condition=condition, left=left, elsewhenPart=NONE()), _, _, _, _) equation
case BackendDAE.WHEN_EQ(condition=condition, left=left) equation
false = Expression.containsInitialCall(condition, false);
(eqns,_) = generateInactiveWhenEquationForInitialization({left}, inSource, inEqns, inVars);
(eqns,_) = generateInactiveWhenEquationForInitialization(ComponentReference.expandCref(left, true), inSource, inEqns, inVars);
then (eqns, inVars);

// inactive when equation during initialization with else when part (no strict Modelica)
case (BackendDAE.WHEN_EQ(condition=condition, elsewhenPart=SOME(weqn)), _, _, _, _) equation
false = Expression.containsInitialCall(condition, false); // do not use Expression.traverseExp
(eqns, vars) = inlineWhenForInitializationWhenEquation(weqn, inSource, inEqAttr, inEqns, inVars);
then (eqns, vars);
end matchcontinue;
end inlineWhenForInitializationWhenEquation;

Expand Down Expand Up @@ -1356,9 +1350,7 @@ algorithm
system = BackendDAE.EQSYSTEM(vars, eqns2, NONE(), NONE(), BackendDAE.NO_MATCHING(), {}, BackendDAE.UNKNOWN_PARTITION());
then (system, (inDAE, initVars, dumpVars, removedEqns));

else //equation
//Error.addInternalError("function analyzeInitialSystem2 failed", sourceInfo());
then fail();
else fail();
end matchcontinue;
end analyzeInitialSystem2;

Expand Down

0 comments on commit 336ad04

Please sign in to comment.