Skip to content

Commit

Permalink
- fixed constraints (thanks Willi)
Browse files Browse the repository at this point in the history
git-svn-id: https://openmodelica.org/svn/OpenModelica/trunk@19037 f25d12d1-65f4-0310-ae8a-bbce733d8d8e
  • Loading branch information
Vitalij Ruge committed Feb 10, 2014
1 parent f726aa1 commit 7d58053
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 17 deletions.
24 changes: 13 additions & 11 deletions Compiler/BackEnd/BackendDAECreate.mo
Expand Up @@ -4758,7 +4758,7 @@ algorithm
v = Util.if_(b, BackendVariable.addNewVar(dummyVar, v), v);
e = Util.if_(b, listAppend(e, objectEqn), e);

(v,e) = addOptimizationVarsEqns2(inConstraint,1,v,e);
(v,e) = addOptimizationVarsEqns2(inConstraint,1,v,e,true);

then (v, e);
else then (inVars, inEqns);
Expand All @@ -4770,29 +4770,30 @@ protected function addOptimizationVarsEqns1
input Integer inI;
input BackendDAE.Variables inVars;
input list<BackendDAE.Equation> inEqns;
input Boolean b;
output BackendDAE.Variables outVars;
output list<BackendDAE.Equation> outEqns;
algorithm
(outVars, outEqns) := match(constraintLst,inI,inVars,inEqns)
(outVars, outEqns) := match(constraintLst,inI,inVars,inEqns,b)
local
list<DAE.Exp> conLst;
list<DAE.Exp> conLst,conLst2;
DAE.Exp e;
DAE.ComponentRef leftcref;
BackendDAE.Var dummyVar;
list<BackendDAE.Equation> conEqn;
BackendDAE.Variables v;
list<BackendDAE.Equation> eqns;

case({},_,_,_) then (inVars,inEqns);
case(e::conLst,_,_,_) equation
case({},_,_,_,_) then (inVars,inEqns);
case(e::conLst,_,_,_,_) equation
//print("con"+& intString(inI) +& " "+& ExpressionDump.printExpStr(e) +& "\n");
leftcref = ComponentReference.makeCrefIdent("$TMP_con" +& intString(inI), DAE.T_REAL_DEFAULT, {});
dummyVar = BackendDAE.VAR(leftcref, BackendDAE.VARIABLE(), DAE.OUTPUT(), DAE.NON_PARALLEL(), DAE.T_REAL_DEFAULT, NONE(), NONE(), {}, DAE.emptyElementSource, NONE(), NONE(), DAE.NON_CONNECTOR());
conEqn = BackendEquation.generateResidualfromRealtion(leftcref, e, DAE.emptyElementSource);

conEqn = Util.if_(b,BackendEquation.generateResidualfromRealtion(leftcref, e, DAE.emptyElementSource),{});
v = BackendVariable.addNewVar(dummyVar, inVars);
eqns = listAppend(conEqn, inEqns);
(v,eqns)= addOptimizationVarsEqns1(conLst, inI + 1, v,eqns);
conLst2 = Util.if_(b,listReverse(conLst),conLst);
(v,eqns)= addOptimizationVarsEqns1(listReverse(conLst), inI + 1, v,eqns,b);
then (v,eqns);
else then (inVars,inEqns);
end match;
Expand All @@ -4803,16 +4804,17 @@ public function addOptimizationVarsEqns2
input Integer inI;
input BackendDAE.Variables inVars;
input list<BackendDAE.Equation> inEqns;
input Boolean b;
output BackendDAE.Variables outVars;
output list<BackendDAE.Equation> outEqns;
algorithm
(outVars, outEqns) := match(inConstraint,inI,inVars,inEqns)
(outVars, outEqns) := match(inConstraint,inI,inVars,inEqns,b)
local
list<BackendDAE.Equation> e;
BackendDAE.Variables v;
list< .DAE.Exp> constraintLst;
case({DAE.CONSTRAINT_EXPS(constraintLst = constraintLst)},_,_,_) equation
(v,e) = addOptimizationVarsEqns1(constraintLst,inI,inVars,inEqns);
case({DAE.CONSTRAINT_EXPS(constraintLst = constraintLst)},_,_,_,_) equation
(v,e) = addOptimizationVarsEqns1(constraintLst,inI,inVars,inEqns,b);
then (v,e);
else then (inVars,inEqns);
end match;
Expand Down
2 changes: 1 addition & 1 deletion Compiler/BackEnd/BackendDAEOptimize.mo
Expand Up @@ -3129,7 +3129,7 @@ algorithm
BackendDAE.SHARED(constraints=constraints) := shared;
eqns := {};
v := BackendVariable.emptyVars();
(v,eqns) := BackendDAECreate.addOptimizationVarsEqns2(constraints,1,v,eqns);
(v,eqns) := BackendDAECreate.addOptimizationVarsEqns2(constraints,1,v,eqns,false);
(linearModelMatrixes, funcs) := createLinearModelMatrixes(inBackendDAE, Config.acceptOptimicaGrammar(),v);
shared := BackendDAEUtil.addBackendDAESharedJacobians(linearModelMatrixes, shared);
functionTree := BackendDAEUtil.getFunctions(shared);
Expand Down
9 changes: 4 additions & 5 deletions Compiler/Template/CodegenC.tpl
Expand Up @@ -10501,18 +10501,17 @@ template pathConstraint(Constraint cons)
case CONSTRAINT_EXPS(__) then
let &varDecls = buffer "" /*BUFD*/
let &preExp = buffer "" /*BUFD*/
let constrain = (constraintLst |> constraint =>
daeExp(constraint, contextOptimization, &preExp /*BUFC*/, &varDecls /*BUFD*/)
;separator="\n")
//let constrain = (constraintLst |> constraint =>
// daeExp(constraint, contextOptimization, &preExp /*BUFC*/, &varDecls /*BUFD*/)
// ;separator="\n")
let constrain = (constraintLst |> constraint hasindex i0 => 'res[i++] = $P$TMP_con<%intAdd(i0,1)%>;' ;separator="\n")
let listConstraintsLength = listLength(constraintLst)
<<
if(*N<=0){
*N = <%listConstraintsLength%>;
return 1;
}else{
int i = 0;
<%varDecls%>
<%preExp%>
<%constrain%>
}
>>
Expand Down

0 comments on commit 7d58053

Please sign in to comment.