Skip to content

Commit

Permalink
added prototype recursive tearing
Browse files Browse the repository at this point in the history
  • Loading branch information
vruge authored and OpenModelica-Hudson committed Jun 30, 2015
1 parent c5516d9 commit 6518e3c
Show file tree
Hide file tree
Showing 7 changed files with 390 additions and 29 deletions.
16 changes: 9 additions & 7 deletions Compiler/BackEnd/BackendDAEOptimize.mo
Expand Up @@ -4177,7 +4177,7 @@ end compWeightsEqns;
// =============================================================================
// section for simplifyLoops
//
// simplify(hopful) loops for simulation
// simplify(hopful) loops for simulation/optimization
// author: Vitalij Ruge
// =============================================================================

Expand Down Expand Up @@ -4430,7 +4430,7 @@ algorithm
//end if;
if Flags.isSet(Flags.DUMP_SIMPLIFY_LOOPS) then
print("=> ");
print("- " + BackendDump.equationString(eqn) + " --new--\n");
print(BackendDump.equationString(eqn) + "--new--\n");
end if;
else
end try;
Expand Down Expand Up @@ -4510,7 +4510,7 @@ algorithm
end simplifyLoopEqn;


protected function simplifyLoopExp
public function simplifyLoopExp
input Integer inIndx;
input BackendDAE.Variables inVars "vars array";
input BackendDAE.EquationArray inEqns "eqns array";
Expand All @@ -4523,6 +4523,8 @@ protected function simplifyLoopExp
input Boolean useTmpVars = true;
input Integer ii;
input list<Integer> inCompOrders;
input String tmpVarName = "LOOP";
input Boolean noPara = false;
output Integer outIndx = inIndx;
output BackendDAE.Variables outVars = inVars "vars array";
output BackendDAE.EquationArray outEqns = inEqns "eqns array";
Expand All @@ -4546,7 +4548,7 @@ algorithm
//terms
(noLoopTerm,_) := ExpressionSimplify.simplify1(Expression.makeSum1(noLoopTerms));
if useTmpVars and simDAE then
(noLoopTerm, outEqns, outVars, outShared, update, para) := BackendEquation.makeTmpEqnForExp(noLoopTerm, "LOOPT", if simDAE then outIndx else -outIndx, outEqns, outVars, outShared);
(noLoopTerm, outEqns, outVars, outShared, update, para) := BackendEquation.makeTmpEqnForExp(noLoopTerm, tmpVarName + "T", if simDAE then outIndx else -outIndx, outEqns, outVars, outShared);
(outUpdate, ass1, ass2, outIndx, outCompOrder) := simplifyLoopExpHelper(update, outUpdate, para, ass1, ass2, outVars, outEqns, outIndx, ii, outCompOrder);
end if;

Expand All @@ -4559,13 +4561,13 @@ algorithm
if useTmpVars and simDAE then
if (match noLoopFactor case DAE.BINARY(operator = DAE.DIV()) then true; case DAE.BINARY(operator = DAE.POW()) then true; else false; end match) then
DAE.BINARY(e1,op,e2) := noLoopFactor;
(e1, outEqns, outVars, outShared, update, para) := BackendEquation.makeTmpEqnForExp(e1, "LOOPF", if simDAE then outIndx else -outIndx, outEqns, outVars, outShared);
(e1, outEqns, outVars, outShared, update, para) := BackendEquation.makeTmpEqnForExp(e1, "LOOPF", if simDAE then outIndx else -outIndx, outEqns, outVars, outShared,noPara);
(outUpdate, ass1, ass2, outIndx, outCompOrder) := simplifyLoopExpHelper(update, outUpdate, para, ass1, ass2, outVars, outEqns, outIndx, ii, outCompOrder);
(e2, outEqns, outVars, outShared, update, para) := BackendEquation.makeTmpEqnForExp(e2, "LOOPF", if simDAE then outIndx else -outIndx, outEqns, outVars, outShared);
(e2, outEqns, outVars, outShared, update, para) := BackendEquation.makeTmpEqnForExp(e2, "LOOPF", if simDAE then outIndx else -outIndx, outEqns, outVars, outShared,noPara);
(outUpdate, ass1, ass2, outIndx, outCompOrder) := simplifyLoopExpHelper(update, outUpdate, para, ass1, ass2, outVars, outEqns, outIndx, ii, outCompOrder);
noLoopFactor := DAE.BINARY(e1,op,e2);
else
(noLoopFactor, outEqns, outVars, outShared, update, para) := BackendEquation.makeTmpEqnForExp(noLoopFactor, "LOOPF", if simDAE then outIndx else -outIndx, outEqns, outVars, outShared);
(noLoopFactor, outEqns, outVars, outShared, update, para) := BackendEquation.makeTmpEqnForExp(noLoopFactor, tmpVarName + "F", if simDAE then outIndx else -outIndx, outEqns, outVars, outShared);
(outUpdate, ass1, ass2, outIndx, outCompOrder) := simplifyLoopExpHelper(update, outUpdate, para, ass1, ass2, outVars, outEqns, outIndx, ii, outCompOrder);
end if;
end if;
Expand Down
1 change: 1 addition & 0 deletions Compiler/BackEnd/BackendDAEUtil.mo
Expand Up @@ -7488,6 +7488,7 @@ algorithm
(ExpressionSolve.solveSimpleEquations, "solveSimpleEquations", false),
(SymbolicJacobian.detectSparsePatternODE, "detectJacobianSparsePattern", false),
(Tearing.tearingSystem, "tearingSystem", false),
(Tearing.recursiveTearing, "recursiveTearing", false),
(DynamicOptimization.removeLoops, "extendDynamicOptimization", false),
(DynamicOptimization.reduceDynamicOptimization, "reduceDynamicOptimization", false),
(DynamicOptimization.simplifyConstraints, "simplifyConstraints", false),
Expand Down
18 changes: 11 additions & 7 deletions Compiler/BackEnd/BackendEquation.mo
Expand Up @@ -2134,7 +2134,6 @@ algorithm
end match;
end setEquationRHS;


public function generateSolvedEqnsfromOption "author: Frenkel TUD 2010-05"
input DAE.ComponentRef inLhs;
input Option<DAE.Exp> inRhs;
Expand Down Expand Up @@ -2248,7 +2247,7 @@ public function makeTmpEqnForExp
input BackendDAE.EquationArray ieqns;
input BackendDAE.Variables ivars;
input BackendDAE.Shared ishared;

input Boolean noPara = false;
output DAE.Exp oExp;
output BackendDAE.EquationArray oeqns = ieqns;
output BackendDAE.Variables ovars = ivars;
Expand Down Expand Up @@ -2280,7 +2279,7 @@ algorithm

eqn := BackendDAE.EQUATION(oExp, y, DAE.emptyElementSource, BackendDAE.EQ_ATTR_DEFAULT_DYNAMIC);
if Flags.isSet(Flags.DUMP_SIMPLIFY_LOOPS) then
print(BackendDump.equationString(eqn) + " -- new--\n");
print(BackendDump.equationString(eqn) + " -- new eqn--\n");
end if;
eqnVars := equationVars(eqn, ivars);
b := listEmpty(eqnVars) and not Expression.expHasCref(y, DAE.crefTime);
Expand All @@ -2292,10 +2291,15 @@ algorithm
end if;

if b then
tmpvar := BackendVariable.setBindExp(tmpvar, SOME(y));
tmpvar := BackendVariable.setVarKind(tmpvar, BackendDAE.PARAM());
oshared := BackendVariable.addKnVarDAE(tmpvar, oshared);
para := true;
if noPara then
oExp := ExpressionSimplify.simplify(iExp);
update := false;
else
tmpvar := BackendVariable.setBindExp(tmpvar, SOME(y));
tmpvar := BackendVariable.setVarKind(tmpvar, BackendDAE.PARAM());
oshared := BackendVariable.addKnVarDAE(tmpvar, oshared);
para := true;
end if;
else
oeqns := BackendEquation.addEquation(eqn, oeqns);
ovars := BackendVariable.addVar(tmpvar, ovars);
Expand Down
10 changes: 10 additions & 0 deletions Compiler/BackEnd/ExpressionSolve.mo
Expand Up @@ -1104,6 +1104,16 @@ algorithm

end expAddX2;

public function collectX
input DAE.Exp inExp1 "lhs";
input DAE.Exp inExp3 "DAE.CREF";
input DAE.Boolean expand = true;
output DAE.Exp outLhs;
output DAE.Exp outRhs;
algorithm
(outLhs, outRhs) := preprocessingSolve5(inExp1, inExp3, expand);
end collectX;

protected function preprocessingSolve5
"
helprer function for preprocessingSolve
Expand Down

0 comments on commit 6518e3c

Please sign in to comment.