From 6524d68f0137f4a532928a1915856cca4e5cb3bd Mon Sep 17 00:00:00 2001 From: Jens Frenkel Date: Fri, 21 Jan 2011 17:43:16 +0000 Subject: [PATCH] - perform remove simple equations also for removed equations - check if there are inputs insight the parameter equation candidate git-svn-id: https://openmodelica.org/svn/OpenModelica/trunk@7745 f25d12d1-65f4-0310-ae8a-bbce733d8d8e --- Compiler/BackEnd/BackendDAEOptimize.mo | 28 +++++++++++++++++--------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/Compiler/BackEnd/BackendDAEOptimize.mo b/Compiler/BackEnd/BackendDAEOptimize.mo index a94ea78aee8..fed35369df8 100644 --- a/Compiler/BackEnd/BackendDAEOptimize.mo +++ b/Compiler/BackEnd/BackendDAEOptimize.mo @@ -110,7 +110,7 @@ algorithm matchcontinue (inVariables1,inVariables2,inEquationLst3,inEquationLst4,inEquationLst5,inArrayEquationLst,inAlgs,inBinTree6) local VarTransform.VariableReplacements repl,replc,replc_1,vartransf,vartransf1; - list eqns_1,seqns,eqns_2,seqns_1,ieqns_1,eqns_3,seqns_2,ieqns_2,seqns_4,seqns_3,eqns,reqns,ieqns; + list eqns_1,seqns,eqns_2,seqns_1,ieqns_1,eqns_3,seqns_2,ieqns_2,seqns_4,seqns_3,eqns,reqns,reqns_1,ieqns; list arreqns,arreqns1,arreqns2; BackendDAE.BinTree movedvars_1,states,outputs; BackendDAE.Variables vars_1,knvars_1,vars,knvars,knvars_2; @@ -137,12 +137,13 @@ algorithm eqns_3 = BackendVarTransform.replaceEquations(eqns_2, vartransf1); seqns_2 = BackendVarTransform.replaceEquations(seqns_1, vartransf1); ieqns_2 = BackendVarTransform.replaceEquations(ieqns_1, vartransf1); + reqns_1 = BackendVarTransform.replaceEquations(reqns, vartransf1); arreqns2 = BackendVarTransform.replaceMultiDimEquations(arreqns1, vartransf1); algs_1 = BackendVarTransform.replaceAlgorithms(algs,vartransf1); (vars_1,knvars_1) = BackendVariable.moveVariables(vars, knvars, movedvars_1); inputsoutputs = Util.listMap1r(algs_1,BackendDAECreate.lowerAlgorithmInputsOutputs,vars_1); eqns_3 = Util.listMap1(eqns_3,updateAlgorithmInputsOutputs,inputsoutputs); - seqns_3 = listAppend(seqns_2, reqns) "& print_vars_statistics(vars\',knvars\')" ; + seqns_3 = listAppend(seqns_2, reqns_1) "& print_vars_statistics(vars\',knvars\')" ; (knvars_2,seqns_4,varsAliases) = removeConstantEqns(knvars_1,seqns_3,BackendDAEUtil.emptyAliasVariables()); Debug.fcall("dumpalias", BackendDump.dumpAliasVariables, varsAliases); then @@ -967,8 +968,8 @@ algorithm eqn = BackendDAEUtil.equationNth(eqns,pos_1); BackendDAE.EQUATION(exp=e1,scalar=e2) = eqn; // variable time not there - ((_,false)) = Expression.traverseExpTopDown(e1, traversingParameterEqnsFinder, false); - ((_,false)) = Expression.traverseExpTopDown(e2, traversingParameterEqnsFinder, false); + ((_,(false,_,_))) = Expression.traverseExpTopDown(e1, traversingParameterEqnsFinder, (false,v,kn)); + ((_,(false,_,_))) = Expression.traverseExpTopDown(e2, traversingParameterEqnsFinder, (false,v,kn)); cre = Expression.crefExp(cr); (es,{}) = ExpressionSolve.solve(e1,e2,cre); // set kind to PARAM @@ -996,18 +997,25 @@ end removeParameterEqnsFinder; public function traversingParameterEqnsFinder " Author: Frenkel 2010-12" - input tuple inExp; - output tuple outExp; + input tuple > inExp; + output tuple > outExp; algorithm outExp := matchcontinue(inExp) local DAE.Exp e; Boolean b; + BackendDAE.Variables vars,knvars; + DAE.ComponentRef cr; - case((e as DAE.CREF(DAE.CREF_IDENT(ident = "time",subscriptLst = {}),_), _)) then ((e,false,true)); - case((e as DAE.CALL(path = Absyn.IDENT(name = "sample"), expLst = {_,_}), _)) then ((e,false,true )); - case((e as DAE.CALL(path = Absyn.IDENT(name = "pre"), expLst = {_}), _)) then ((e,false,true )); - case((e,b)) then ((e,not b,b)); + case((e as DAE.CREF(componentRef = cr),(_,vars,knvars))) + equation + b = BackendVariable.isTopLevelInputOrOutput(cr,vars,knvars); + then + ((e,not b,(b,vars,knvars))); + case((e as DAE.CREF(DAE.CREF_IDENT(ident = "time",subscriptLst = {}),_), (_,vars,knvars))) then ((e,false,(true,vars,knvars))); + case((e as DAE.CALL(path = Absyn.IDENT(name = "sample"), expLst = {_,_}), (_,vars,knvars))) then ((e,false,(true,vars,knvars) )); + case((e as DAE.CALL(path = Absyn.IDENT(name = "pre"), expLst = {_}), (_,vars,knvars))) then ((e,false,(true,vars,knvars) )); + case((e,(b,vars,knvars))) then ((e,not b,(b,vars,knvars))); end matchcontinue; end traversingParameterEqnsFinder;