From 0b8cea1a8b5d5362096d9420dd51d71ce39c1fff Mon Sep 17 00:00:00 2001 From: Vitalij Ruge Date: Tue, 25 Mar 2014 09:46:04 +0000 Subject: [PATCH] - added rule for sqrt(c*e) => c1*sqrt(e) git-svn-id: https://openmodelica.org/svn/OpenModelica/trunk@19730 f25d12d1-65f4-0310-ae8a-bbce733d8d8e --- Compiler/FrontEnd/ExpressionSimplify.mo | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Compiler/FrontEnd/ExpressionSimplify.mo b/Compiler/FrontEnd/ExpressionSimplify.mo index 8df68a6a56b..fa325ba6b37 100644 --- a/Compiler/FrontEnd/ExpressionSimplify.mo +++ b/Compiler/FrontEnd/ExpressionSimplify.mo @@ -999,6 +999,13 @@ algorithm case (DAE.CALL(path=Absyn.IDENT("sqrt"),expLst={DAE.CALL(path=Absyn.IDENT("sqrt"),expLst={e1})})) then DAE.BINARY(e1,DAE.POW(DAE.T_REAL_DEFAULT),DAE.RCONST(0.25)); + // sqrt(c*e) => c1*sqrt(e) + case DAE.CALL(path=Absyn.IDENT("sqrt"),expLst={DAE.BINARY(e1 as DAE.RCONST(r1),DAE.MUL(tp),e2)}) + equation + e = Expression.makeBuiltinCall("sqrt",{e1},DAE.T_REAL_DEFAULT); + e3 = Expression.makeBuiltinCall("sqrt",{e2},DAE.T_REAL_DEFAULT); + then DAE.BINARY(e,DAE.MUL(tp),e3); + // exp(-log(x)) = 1/x case (DAE.CALL(path=Absyn.IDENT("exp"),expLst={DAE.UNARY(DAE.UMINUS(ty = _), exp = DAE.CALL(path=Absyn.IDENT("log"),expLst={e1}))})) then Expression.makeDiv(DAE.RCONST(1.0), e1);