Skip to content

Commit

Permalink
- bugfix for dynamic state selection
Browse files Browse the repository at this point in the history
git-svn-id: https://openmodelica.org/svn/OpenModelica/trunk@12610 f25d12d1-65f4-0310-ae8a-bbce733d8d8e
  • Loading branch information
Jens Frenkel committed Aug 20, 2012
1 parent fc90580 commit 3276200
Show file tree
Hide file tree
Showing 3 changed files with 41 additions and 5 deletions.
1 change: 1 addition & 0 deletions Compiler/BackEnd/BackendDAEOptimize.mo
Original file line number Diff line number Diff line change
Expand Up @@ -4371,6 +4371,7 @@ algorithm
equation
(f as SOME(_)) = DAEUtil.avlTreeGet(func, path);
usefuncs1 = DAEUtil.avlTreeAdd(usefuncs, path, f);
// print("add partial function " +& Absyn.pathStringNoQual(path) +& "\n");
then
((e, (func,usefuncs1)));

Expand Down
22 changes: 20 additions & 2 deletions Compiler/BackEnd/BackendDump.mo
Original file line number Diff line number Diff line change
Expand Up @@ -1525,16 +1525,18 @@ algorithm
Option<DAE.Exp> min,max,start,fixed,nominal;
Option<Boolean> isProtected,finalPrefix;
Option<DAE.Distribution> dist;
Option<DAE.StateSelect> stateSelectOption;
case NONE() then ();
case SOME(DAE.VAR_ATTR_REAL(min=(NONE(),NONE()),initial_=NONE(),fixed=NONE(),nominal=NONE(),isProtected=NONE(),finalPrefix=NONE(),distributionOption=NONE()))
case SOME(DAE.VAR_ATTR_REAL(min=(NONE(),NONE()),initial_=NONE(),fixed=NONE(),nominal=NONE(),stateSelectOption=NONE(),isProtected=NONE(),finalPrefix=NONE(),distributionOption=NONE()))
then ();
case SOME(DAE.VAR_ATTR_REAL(min=(min,max),initial_=start,fixed=fixed,nominal=nominal,isProtected=isProtected,finalPrefix=finalPrefix,distributionOption=dist))
case SOME(DAE.VAR_ATTR_REAL(min=(min,max),initial_=start,fixed=fixed,nominal=nominal,stateSelectOption=stateSelectOption,isProtected=isProtected,finalPrefix=finalPrefix,distributionOption=dist))
equation
dumpOptExpression(min,"min");
dumpOptExpression(max,"max");
dumpOptExpression(start,"start");
dumpOptExpression(fixed,"fixed");
dumpOptExpression(nominal,"nominal");
dumpOptStateSelection(stateSelectOption);
dumpOptBoolean(isProtected,"protected");
dumpOptBoolean(finalPrefix,"final");
dumpOptDistribution(dist);
Expand Down Expand Up @@ -1602,6 +1604,22 @@ algorithm
end dumpOptDistribution;


protected function dumpOptStateSelection "

"
input Option<DAE.StateSelect> ss;
algorithm
_ := match(ss)
local
case(SOME(DAE.NEVER())) equation print("stateSelect=StateSelect.never "); then ();
case(SOME(DAE.AVOID())) equation print("stateSelect=StateSelect.avoid "); then ();
case(SOME(DAE.DEFAULT())) then ();
case(SOME(DAE.PREFER())) equation print("stateSelect=StateSelect.prefer "); then ();
case(SOME(DAE.ALWAYS())) equation print("stateSelect=StateSelect.alwas "); then ();
else ();
end match;
end dumpOptStateSelection;

protected function dumpOptExpression
"function: dumpOptExpression
Helper function to dump."
Expand Down
23 changes: 20 additions & 3 deletions Compiler/BackEnd/IndexReduction.mo
Original file line number Diff line number Diff line change
Expand Up @@ -837,8 +837,8 @@ algorithm
syst = BackendVariable.expandVarsDAE(ndummystates,syst);
(syst,shared,changedeqns) = addDummyStates(dummyStates,syst,shared,vec1,vec2,mapIncRowEqn,{});
Debug.fcall(Flags.BLT_DUMP, print, "Full System:\n");
Debug.fcall(Flags.BLT_DUMP, BackendDump.dumpEqSystem,syst);
(syst,_,_) = BackendDAEUtil.updateIncidenceMatrixScalar(syst,shared,BackendDAE.SOLVABLE(),changedeqns,mapEqnIncRow,mapIncRowEqn);
Debug.fcall(Flags.BLT_DUMP, BackendDump.dumpEqSystem,syst);
(syst as BackendDAE.EQSYSTEM(m = SOME(m)),_,_) = BackendDAEUtil.updateIncidenceMatrixScalar(syst,shared,BackendDAE.SOLVABLE(),changedeqns,mapEqnIncRow,mapIncRowEqn);
Matching.matchingExternalsetIncidenceMatrix(nv1,ne1,m);
BackendDAEEXT.matching(nv1,ne1,5,-1,0.0,1);
BackendDAEEXT.getAssignment(vec2,vec1);
Expand Down Expand Up @@ -868,10 +868,13 @@ algorithm
local
list<BackendDAE.Equation> orgeqns;
BackendDAE.ConstraintEquations rest;
Integer size;
case ({},_) then iCount;
case ((_,orgeqns)::rest,_)
equation
size = BackendEquation.equationLstSize(orgeqns);
then
countOrgEqns(rest,intAdd(listLength(orgeqns),iCount));
countOrgEqns(rest,intAdd(size,iCount));
end match;
end countOrgEqns;

Expand Down Expand Up @@ -1737,6 +1740,7 @@ algorithm
list<DAE.Exp> explst;
list<BackendDAE.Equation> selecteqns,dselecteqns;
list<BackendDAE.WhenClause> wclst;
Option<list<tuple<Integer, Integer, BackendDAE.Equation>>> jac;
case(_,_,_,_,_,_,_,_,_,_,_,_,_,_,_)
equation
true = intEq(listLength(dstates),eqnsSize);
Expand Down Expand Up @@ -1804,6 +1808,19 @@ algorithm
(hov1,lov,dummystates) = selectDummyStates(listAppend(states,dstates),1,varSize,vars,hov,inLov,inDummyStates);
then
(hov1,dummystates,lov,syst,shared);
case(_,_,_,_,_,_,_,_,_,_,_,_,_,_,_)
equation
rang = listLength(states)-listLength(unassignedEqns);
Debug.fcall(Flags.BLT_DUMP, BackendDump.debugStrIntStrIntStr, ("Select ",rang," from ",listLength(states),"\n"));
// get jacobian for all variables
jac = BackendDAEUtil.calculateJacobianEnhanced(vars, eqns, me, true);
// get for each state the determinant of the jacobian [state,dummystates]
//explst = getDeterminants(states,
// try to find listLength(unassignedEqns) constant nonzero determinants


then
fail();
// dummy derivative case - no dynamic state selection // this case will be removed as var c_runtime works well
case(_,_,_,_,_,_,_,_,_,_,_,_,_,_,_)
equation
Expand Down

0 comments on commit 3276200

Please sign in to comment.