Skip to content

Commit

Permalink
Fixes for #1365
Browse files Browse the repository at this point in the history
- bugfix for traversingDivExpFinder, now 
  Modelica.Mechanics.MultiBody.Examples.Elementary.DoublePendulum simulates

git-svn-id: https://openmodelica.org/svn/OpenModelica/trunk@7238 f25d12d1-65f4-0310-ae8a-bbce733d8d8e
  • Loading branch information
Jens Frenkel committed Nov 30, 2010
1 parent 126049f commit b72e5c7
Showing 1 changed file with 21 additions and 3 deletions.
24 changes: 21 additions & 3 deletions Compiler/SimCode.mo
Expand Up @@ -7512,34 +7512,52 @@ outExp := matchcontinue(inExp)
DAE.Exp e,e1,e2;
Expression.Type ty;
String se;
case( (e as DAE.BINARY(exp1 = e1, operator = DAE.DIV(ty),exp2 = e2),(vars,varlst,dzer,divLst)))
equation
true = Expression.isConst(e2);
false = Expression.isZero(e2);
then ((e, (vars,varlst,dzer,divLst) ));
case( (e as DAE.BINARY(exp1 = e1, operator = DAE.DIV(ty),exp2 = e2),(vars,varlst,dzer,divLst)))
equation
(se,true) = traversingDivExpFinder1(e,e2,(vars,varlst,dzer));
then ((DAE.CALL(Absyn.IDENT("DIVISION"), {e1,e2,DAE.SCONST(se)}, false, true, ty, DAE.NO_INLINE()), (vars,varlst,dzer,divLst) ));
case( (e as DAE.BINARY(exp1 = e1, operator = DAE.DIV(ty),exp2 = e2), (vars,varlst,dzer,divLst)))
equation
(se,false) = traversingDivExpFinder1(e,e2,(vars,varlst,dzer));
then ((e, (vars,varlst,dzer,DAE.CALL(Absyn.IDENT("DIVISION"), {DAE.RCONST(1.0),e2,DAE.SCONST(se)}, false, true, ty, DAE.NO_INLINE())::divLst) ));
then ((e, (vars,varlst,dzer,DAE.CALL(Absyn.IDENT("DIVISION"), {e1,e2,DAE.SCONST(se)}, false, true, ty, DAE.NO_INLINE())::divLst) ));

/*
case( (e as DAE.BINARY(exp1 = e1, operator = DAE.DIV_ARR(ty),exp2 = e2), dlowmode as (dlow,_)))
then ((e, dlowmode ));
*/

case( (e as DAE.BINARY(exp1 = e1, operator = DAE.DIV_ARRAY_SCALAR(ty),exp2 = e2), (vars,varlst,dzer,divLst)))
equation
true = Expression.isConst(e2);
false = Expression.isZero(e2);
then ((e, (vars,varlst,dzer,divLst) ));
case( (e as DAE.BINARY(exp1 = e1, operator = DAE.DIV_ARRAY_SCALAR(ty),exp2 = e2), (vars,varlst,dzer,divLst)))
equation
(se,true) = traversingDivExpFinder1(e,e2,(vars,varlst,dzer));
then ((DAE.CALL(Absyn.IDENT("DIVISION_ARRAY_SCALAR"), {e1,e2,DAE.SCONST(se)}, false, true, ty, DAE.NO_INLINE()), (vars,varlst,dzer,divLst) ));
case( (e as DAE.BINARY(exp1 = e1, operator = DAE.DIV_ARRAY_SCALAR(ty),exp2 = e2), (vars,varlst,dzer,divLst)))
equation
(se,false) = traversingDivExpFinder1(e,e2,(vars,varlst,dzer));
then ((e, (vars,varlst,dzer,DAE.CALL(Absyn.IDENT("DIVISION_ARRAY_SCALAR"), {DAE.RCONST(1.0),e2,DAE.SCONST(se)}, false, true, ty, DAE.NO_INLINE())::divLst) ));
then ((e, (vars,varlst,dzer,DAE.CALL(Absyn.IDENT("DIVISION_ARRAY_SCALAR"), {e1,e2,DAE.SCONST(se)}, false, true, ty, DAE.NO_INLINE())::divLst) ));

case( (e as DAE.BINARY(exp1 = e1, operator = DAE.DIV_SCALAR_ARRAY(ty),exp2 = e2), (vars,varlst,dzer,divLst)))
equation
true = Expression.isConst(e2);
false = Expression.isZero(e2);
then ((e, (vars,varlst,dzer,divLst) ));
case( (e as DAE.BINARY(exp1 = e1, operator = DAE.DIV_SCALAR_ARRAY(ty),exp2 = e2), (vars,varlst,dzer,divLst)))
equation
(se,true) = traversingDivExpFinder1(e,e2,(vars,varlst,dzer));
then ((DAE.CALL(Absyn.IDENT("DIVISION_SCALAR_ARRAY"), {e1,e2,DAE.SCONST(se)}, false, true, ty, DAE.NO_INLINE()), (vars,varlst,dzer,divLst) ));
case( (e as DAE.BINARY(exp1 = e1, operator = DAE.DIV_SCALAR_ARRAY(ty),exp2 = e2), (vars,varlst,dzer,divLst)))
equation
(se,false) = traversingDivExpFinder1(e,e2,(vars,varlst,dzer));
then ((e, (vars,varlst,dzer,DAE.CALL(Absyn.IDENT("DIVISION_SCALAR_ARRAY"), {DAE.RCONST(1.0),e2,DAE.SCONST(se)}, false, true, ty, DAE.NO_INLINE())::divLst) ));
then ((e, (vars,varlst,dzer,DAE.CALL(Absyn.IDENT("DIVISION_SCALAR_ARRAY"), {e1,e2,DAE.SCONST(se)}, false, true, ty, DAE.NO_INLINE())::divLst) ));
case(inExp) then (inExp);
end matchcontinue;
end traversingDivExpFinder;
Expand Down

0 comments on commit b72e5c7

Please sign in to comment.