Changeset 63d72ed in OpenModelica


Ignore:
Timestamp:
2020-10-21T18:53:49+02:00 (4 years ago)
Author:
Adrian Pop <adrian.pop@…>
Branches:
maintenance/v1.16
Children:
1e5d02e0
Parents:
8dd669a
git-author:
Karim Abdelhak <karim.abdelhak@…> (10/09/20 11:07:13)
git-committer:
Adrian Pop <adrian.pop@…> (10/21/20 18:53:49)
Message:

[BE] do not allow incomplete function inverting

File:
1 edited

Legend:

Unmodified
Added
Removed
  • OMCompiler/Compiler/BackEnd/BackendDAEUtil.mo

    rc0e8727d r63d72ed  
    47604760        lst = adjacencyRowExpEnhanced(e1, vars, mark, rowmark, isInitial, {});
    47614761        lst = adjacencyRowExpEnhanced(e2, vars, mark, rowmark, isInitial, lst);
    4762         row = adjacencyRowEnhanced1(lst,e1,e2,vars,globalKnownVars,mark,rowmark,{},trytosolve,shared);
     4762        row = adjacencyRowEnhanced1(lst,e1,e2,vars,globalKnownVars,mark,rowmark,{},trytosolve,1,shared);
    47634763      then
    47644764        (row,1);
     
    47684768        lst = adjacencyRowExpEnhanced(e1, vars, mark, rowmark, isInitial, {});
    47694769        lst = adjacencyRowExpEnhanced(e2, vars, mark, rowmark, isInitial, lst);
    4770         row = adjacencyRowEnhanced1(lst,e1,e2,vars,globalKnownVars,mark,rowmark,{},trytosolve,shared);
     4770        row = adjacencyRowEnhanced1(lst,e1,e2,vars,globalKnownVars,mark,rowmark,{},trytosolve,size,shared);
    47714771      then
    47724772        (row,size);
     
    47764776        lst = adjacencyRowExpEnhanced(e1, vars, mark, rowmark, isInitial, {});
    47774777        lst = adjacencyRowExpEnhanced(e2, vars, mark, rowmark, isInitial, lst);
    4778         row = adjacencyRowEnhanced1(lst,e1,e2,vars,globalKnownVars,mark,rowmark,{},trytosolve,shared);
    47794778        size = List.fold(ds,intMul,1);
     4779        row = adjacencyRowEnhanced1(lst,e1,e2,vars,globalKnownVars,mark,rowmark,{},trytosolve,size,shared);
    47804780      then
    47814781        (row,size);
     
    47874787        lst = adjacencyRowExpEnhanced(expCref, vars, mark, rowmark, isInitial, {});
    47884788        lst = adjacencyRowExpEnhanced(e, vars, mark, rowmark, isInitial, lst);
    4789         row = adjacencyRowEnhanced1(lst,expCref,e,vars,globalKnownVars,mark,rowmark,{},trytosolve,shared);
     4789        row = adjacencyRowEnhanced1(lst,expCref,e,vars,globalKnownVars,mark,rowmark,{},trytosolve,1,shared);
    47904790      then
    47914791        (row,1);
     
    47944794      equation
    47954795        lst = adjacencyRowExpEnhanced(e, vars, mark, rowmark, isInitial, {});
    4796         row = adjacencyRowEnhanced1(lst,e,DAE.RCONST(0.0),vars,globalKnownVars,mark,rowmark,{},trytosolve,shared);
     4796        row = adjacencyRowEnhanced1(lst,e,DAE.RCONST(0.0),vars,globalKnownVars,mark,rowmark,{},trytosolve,1,shared);
    47974797      then
    47984798        (row,1);
     
    48634863        lst = List.fold4(expl, adjacencyRowExpEnhanced, vars, mark, rowmark, isInitial, {});
    48644864        _ = List.fold1(lst,markNegativ,rowmark,mark);
    4865         row1 = adjacencyRowEnhanced1(lst,DAE.RCONST(0.0),DAE.RCONST(0.0),vars,globalKnownVars,mark,rowmark,{},trytosolve,shared);
     4865        row1 = adjacencyRowEnhanced1(lst,DAE.RCONST(0.0),DAE.RCONST(0.0),vars,globalKnownVars,mark,rowmark,{},trytosolve,1,shared);
    48664866
    48674867        (row, size) = adjacencyRowEnhancedEqnLst(eqnselse, vars, mark, rowmark, globalKnownVars, trytosolve,shared);
     
    50835083        //leftexp = Expression.crefExp(left);
    50845084        lst = adjacencyRowExpEnhanced(leftexp, vars, mark, rowmark, isInitial, lst);
    5085         outRow = adjacencyRowEnhanced1(lst,leftexp,right,vars,globalKnownVars,mark,rowmark,outRow,false,shared);
     5085        outRow = adjacencyRowEnhanced1(lst,leftexp,right,vars,globalKnownVars,mark,rowmark,outRow,false,1,shared);
    50865086      then ();
    50875087
     
    50945094        _ = List.fold1(lst,markNegativ,rowmark,mark);
    50955095        lst = adjacencyRowExpEnhanced(leftexp, vars, mark, rowmark, isInitial, lst);
    5096         outRow = adjacencyRowEnhanced1(lst,leftexp,right,vars,globalKnownVars,mark,rowmark,outRow,false,shared);
     5096        outRow = adjacencyRowEnhanced1(lst,leftexp,right,vars,globalKnownVars,mark,rowmark,outRow,false,1,shared);
    50975097      then ();
    50985098
     
    51335133  input BackendDAE.AdjacencyMatrixElementEnhanced inRow;
    51345134  input Boolean trytosolve;
     5135  input Integer size;
    51355136  input BackendDAE.Shared shared;
    51365137  output BackendDAE.AdjacencyMatrixElementEnhanced outRow;
     
    51675168        false = Expression.expHasDerCref(e2,cr);
    51685169      then
    5169         adjacencyRowEnhanced1(rest,e1,e2,vars,globalKnownVars,mark,rowmark,(r,BackendDAE.SOLVABILITY_SOLVED(),{})::inRow,trytosolve,shared);
     5170        adjacencyRowEnhanced1(rest,e1,e2,vars,globalKnownVars,mark,rowmark,(r,BackendDAE.SOLVABILITY_SOLVED(),{})::inRow,trytosolve,size,shared);
    51705171    case(r::rest,_,DAE.CALL(path= Absyn.IDENT("der"),expLst={DAE.CREF(componentRef = cr)}),_,_,_,_,_)
    51715172      equation
     
    51785179        false = Expression.expHasDerCref(e1,cr);
    51795180      then
    5180         adjacencyRowEnhanced1(rest,e1,e2,vars,globalKnownVars,mark,rowmark,(r,BackendDAE.SOLVABILITY_SOLVED(),{})::inRow,trytosolve,shared);
     5181        adjacencyRowEnhanced1(rest,e1,e2,vars,globalKnownVars,mark,rowmark,(r,BackendDAE.SOLVABILITY_SOLVED(),{})::inRow,trytosolve,size,shared);
    51815182    case(r::rest,DAE.CREF(componentRef=cr),_,_,_,_,_,_)
    51825183      equation
     
    51895190        false = Expression.expHasCrefNoPreorDer(e2,cr);
    51905191      then
    5191         adjacencyRowEnhanced1(rest,e1,e2,vars,globalKnownVars,mark,rowmark,(r,BackendDAE.SOLVABILITY_SOLVED(),{})::inRow,trytosolve,shared);
     5192        adjacencyRowEnhanced1(rest,e1,e2,vars,globalKnownVars,mark,rowmark,(r,BackendDAE.SOLVABILITY_SOLVED(),{})::inRow,trytosolve,size,shared);
    51925193    case(r::rest,DAE.CREF(componentRef=cr),_,_,_,_,_,_)
    51935194      equation
     
    52015202        false = Expression.expHasCrefNoPreorDer(e2,cr);
    52025203      then
    5203         adjacencyRowEnhanced1(rest,e1,e2,vars,globalKnownVars,mark,rowmark,(r,BackendDAE.SOLVABILITY_SOLVED(),{})::inRow,trytosolve,shared);
     5204        adjacencyRowEnhanced1(rest,e1,e2,vars,globalKnownVars,mark,rowmark,(r,BackendDAE.SOLVABILITY_SOLVED(),{})::inRow,trytosolve,size,shared);
    52045205    case(r::rest,DAE.LUNARY(operator=DAE.NOT(_),exp=DAE.CREF(componentRef=cr)),_,_,_,_,_,_)
    52055206      equation
     
    52125213        false = Expression.expHasCrefNoPreorDer(e2,cr);
    52135214      then
    5214         adjacencyRowEnhanced1(rest,e1,e2,vars,globalKnownVars,mark,rowmark,(r,BackendDAE.SOLVABILITY_SOLVED(),{})::inRow,trytosolve,shared);
     5215        adjacencyRowEnhanced1(rest,e1,e2,vars,globalKnownVars,mark,rowmark,(r,BackendDAE.SOLVABILITY_SOLVED(),{})::inRow,trytosolve,size,shared);
    52155216    case(r::rest,DAE.UNARY(operator=DAE.UMINUS(_),exp=DAE.CREF(componentRef=cr)),_,_,_,_,_,_)
    52165217      equation
     
    52235224        false = Expression.expHasCrefNoPreorDer(e2,cr);
    52245225      then
    5225         adjacencyRowEnhanced1(rest,e1,e2,vars,globalKnownVars,mark,rowmark,(r,BackendDAE.SOLVABILITY_SOLVED(),{})::inRow,trytosolve,shared);
     5226        adjacencyRowEnhanced1(rest,e1,e2,vars,globalKnownVars,mark,rowmark,(r,BackendDAE.SOLVABILITY_SOLVED(),{})::inRow,trytosolve,size,shared);
    52265227    case(r::rest,DAE.UNARY(operator=DAE.UMINUS_ARR(_),exp=DAE.CREF(componentRef=cr)),_,_,_,_,_,_)
    52275228      equation
     
    52355236        false = Expression.expHasCrefNoPreorDer(e2,cr);
    52365237      then
    5237         adjacencyRowEnhanced1(rest,e1,e2,vars,globalKnownVars,mark,rowmark,(r,BackendDAE.SOLVABILITY_SOLVED(),{})::inRow,trytosolve,shared);
     5238        adjacencyRowEnhanced1(rest,e1,e2,vars,globalKnownVars,mark,rowmark,(r,BackendDAE.SOLVABILITY_SOLVED(),{})::inRow,trytosolve,size,shared);
    52385239    case(r::rest,_,DAE.CREF(componentRef=cr),_,_,_,_,_)
    52395240      equation
     
    52465247        false = Expression.expHasCrefNoPreorDer(e1,cr);
    52475248      then
    5248         adjacencyRowEnhanced1(rest,e1,e2,vars,globalKnownVars,mark,rowmark,(r,BackendDAE.SOLVABILITY_SOLVED(),{})::inRow,trytosolve,shared);
     5249        adjacencyRowEnhanced1(rest,e1,e2,vars,globalKnownVars,mark,rowmark,(r,BackendDAE.SOLVABILITY_SOLVED(),{})::inRow,trytosolve,size,shared);
    52495250    case(r::rest,_,DAE.CREF(componentRef=cr),_,_,_,_,_)
    52505251      equation
     
    52585259        false = Expression.expHasCrefNoPreorDer(e1,cr);
    52595260      then
    5260         adjacencyRowEnhanced1(rest,e1,e2,vars,globalKnownVars,mark,rowmark,(r,BackendDAE.SOLVABILITY_SOLVED(),{})::inRow,trytosolve,shared);
     5261        adjacencyRowEnhanced1(rest,e1,e2,vars,globalKnownVars,mark,rowmark,(r,BackendDAE.SOLVABILITY_SOLVED(),{})::inRow,trytosolve,size,shared);
    52615262    case(r::rest,_,DAE.LUNARY(operator=DAE.NOT(_),exp=DAE.CREF(componentRef=cr)),_,_,_,_,_)
    52625263      equation
     
    52695270        false = Expression.expHasCrefNoPreorDer(e1,cr);
    52705271      then
    5271         adjacencyRowEnhanced1(rest,e1,e2,vars,globalKnownVars,mark,rowmark,(r,BackendDAE.SOLVABILITY_SOLVED(),{})::inRow,trytosolve,shared);
     5272        adjacencyRowEnhanced1(rest,e1,e2,vars,globalKnownVars,mark,rowmark,(r,BackendDAE.SOLVABILITY_SOLVED(),{})::inRow,trytosolve,size,shared);
    52725273    case(r::rest,_,DAE.UNARY(operator=DAE.UMINUS(_),exp=DAE.CREF(componentRef=cr)),_,_,_,_,_)
    52735274      equation
     
    52805281        false = Expression.expHasCrefNoPreorDer(e1,cr);
    52815282      then
    5282         adjacencyRowEnhanced1(rest,e1,e2,vars,globalKnownVars,mark,rowmark,(r,BackendDAE.SOLVABILITY_SOLVED(),{})::inRow,trytosolve,shared);
     5283        adjacencyRowEnhanced1(rest,e1,e2,vars,globalKnownVars,mark,rowmark,(r,BackendDAE.SOLVABILITY_SOLVED(),{})::inRow,trytosolve,size,shared);
    52835284    case(r::rest,_,DAE.UNARY(operator=DAE.UMINUS_ARR(_),exp=DAE.CREF(componentRef=cr)),_,_,_,_,_)
    52845285      equation
     
    52925293        false = Expression.expHasCrefNoPreorDer(e1,cr);
    52935294      then
    5294         adjacencyRowEnhanced1(rest,e1,e2,vars,globalKnownVars,mark,rowmark,(r,BackendDAE.SOLVABILITY_SOLVED(),{})::inRow,trytosolve,shared);
     5295        adjacencyRowEnhanced1(rest,e1,e2,vars,globalKnownVars,mark,rowmark,(r,BackendDAE.SOLVABILITY_SOLVED(),{})::inRow,trytosolve,size,shared);
    52955296    case(r::rest,DAE.CREF(componentRef=cr),_,_,_,_,_,_)
    52965297      equation
     
    53035304        false = Expression.expHasCrefNoPreorDer(e2,cr);
    53045305      then
    5305         adjacencyRowEnhanced1(rest,e1,e2,vars,globalKnownVars,mark,rowmark,(r,BackendDAE.SOLVABILITY_SOLVED(),{})::inRow,trytosolve,shared);
     5306        adjacencyRowEnhanced1(rest,e1,e2,vars,globalKnownVars,mark,rowmark,(r,BackendDAE.SOLVABILITY_SOLVED(),{})::inRow,trytosolve,size,shared);
    53065307    case(r::rest,_,DAE.CREF(componentRef=cr),_,_,_,_,_)
    53075308      equation
     
    53145315        false = Expression.expHasCrefNoPreorDer(e1,cr);
    53155316      then
    5316         adjacencyRowEnhanced1(rest,e1,e2,vars,globalKnownVars,mark,rowmark,(r,BackendDAE.SOLVABILITY_SOLVED(),{})::inRow,trytosolve,shared);
     5317        adjacencyRowEnhanced1(rest,e1,e2,vars,globalKnownVars,mark,rowmark,(r,BackendDAE.SOLVABILITY_SOLVED(),{})::inRow,trytosolve,size,shared);
    53175318    case(r::rest,DAE.CALL(path=path,expLst=explst,attr=DAE.CALL_ATTR(ty= DAE.T_COMPLEX(complexClassType=ClassInf.RECORD(path1)))),_,_,_,_,_,_)
    53185319      equation
     
    53265327        false = Expression.expHasCrefNoPreorDer(e2,cr1);
    53275328      then
    5328         adjacencyRowEnhanced1(rest,e1,e2,vars,globalKnownVars,mark,rowmark,(r,BackendDAE.SOLVABILITY_SOLVED(),{})::inRow,trytosolve,shared);
     5329        adjacencyRowEnhanced1(rest,e1,e2,vars,globalKnownVars,mark,rowmark,(r,BackendDAE.SOLVABILITY_SOLVED(),{})::inRow,trytosolve,size,shared);
    53295330    case(r::rest,_,DAE.CALL(path=path,expLst=explst,attr=DAE.CALL_ATTR(ty= DAE.T_COMPLEX(complexClassType=ClassInf.RECORD(path1)))),_,_,_,_,_)
    53305331      equation
     
    53385339        false = Expression.expHasCrefNoPreorDer(e1,cr1);
    53395340      then
    5340         adjacencyRowEnhanced1(rest,e1,e2,vars,globalKnownVars,mark,rowmark,(r,BackendDAE.SOLVABILITY_SOLVED(),{})::inRow,trytosolve,shared);
     5341        adjacencyRowEnhanced1(rest,e1,e2,vars,globalKnownVars,mark,rowmark,(r,BackendDAE.SOLVABILITY_SOLVED(),{})::inRow,trytosolve,size,shared);
    53415342    case(r::rest,DAE.TUPLE(PR=explst),DAE.CALL(),_,_,_,_,_)
    53425343      equation
     
    53535354        false = Expression.expHasCrefNoPreorDer(e2,cr1);
    53545355      then
    5355         adjacencyRowEnhanced1(rest,e1,e2,vars,globalKnownVars,mark,rowmark,(r,BackendDAE.SOLVABILITY_SOLVED(),{})::inRow,trytosolve,shared);
     5356        adjacencyRowEnhanced1(rest,e1,e2,vars,globalKnownVars,mark,rowmark,(r,BackendDAE.SOLVABILITY_SOLVED(),{})::inRow,trytosolve,size,shared);
    53565357    case(r::rest,_,_,_,_,_,_,_)
    53575358      // case: state derivative
    53585359      equation
     5360        // ticket #6806, only allow inverting of function if the sizes match
     5361        1 = size;
    53595362        // if not negated rowmark then linear or nonlinear
    53605363        true = intGt(r,0);
     
    53825385        end if;
    53835386      then
    5384         adjacencyRowEnhanced1(rest,e1,e2,vars,globalKnownVars,mark,rowmark,(r,solvab,cons)::inRow,trytosolve,shared);
     5387        adjacencyRowEnhanced1(rest,e1,e2,vars,globalKnownVars,mark,rowmark,(r,solvab,cons)::inRow,trytosolve,size,shared);
    53855388    case(r::rest,_,_,_,_,_,_,_)
    53865389      equation
     5390        // ticket #6806, only allow inverting of function if the sizes match
     5391        1 = size;
    53875392        rabs = intAbs(r);
    53885393        // if not negated rowmark then linear or nonlinear
     
    54085413        end if;
    54095414      then
    5410         adjacencyRowEnhanced1(rest,e1,e2,vars,globalKnownVars,mark,rowmark,(r,solvab,cons)::inRow,trytosolve,shared);
     5415        adjacencyRowEnhanced1(rest,e1,e2,vars,globalKnownVars,mark,rowmark,(r,solvab,cons)::inRow,trytosolve,size,shared);
    54115416    case(r::rest,_,_,_,_,_,_,_)
    54125417      then
    5413         adjacencyRowEnhanced1(rest,e1,e2,vars,globalKnownVars,mark,rowmark,(r,BackendDAE.SOLVABILITY_UNSOLVABLE(),{})::inRow,trytosolve,shared);
     5418        adjacencyRowEnhanced1(rest,e1,e2,vars,globalKnownVars,mark,rowmark,(r,BackendDAE.SOLVABILITY_UNSOLVABLE(),{})::inRow,trytosolve,size,shared);
    54145419  end matchcontinue;
    54155420end adjacencyRowEnhanced1;
Note: See TracChangeset for help on using the changeset viewer.