@@ -1800,7 +1800,7 @@ algorithm
18001800 matchcontinue (inBackendDAE,inClassName,filenamePrefix,inString11,functions,externalFunctionIncludes,includeDirs,libs,simSettingsOpt,recordDecls,literals,args)
18011801 local
18021802 String cname, fileDir;
1803- Integer n_h,maxDelayedExpIndex,uniqueEqIndex;
1803+ Integer n_h,maxDelayedExpIndex,uniqueEqIndex,nonLinearCount ;
18041804 Integer numberOfInitialEquations, numberOfInitialAlgorithms;
18051805 list<SimCode.HelpVarInfo> helpVarInfo;
18061806 BackendDAE.BackendDAE dlow,dlow2;
@@ -1878,6 +1878,10 @@ algorithm
18781878 (uniqueEqIndex,odeEquations,algebraicEquations,allEquations,tempvars) = createEquationsForSystems(systs,shared,helpVarInfo,uniqueEqIndex,{},{},{},{});
18791879
18801880 modelInfo = addTempVars(tempvars,modelInfo);
1881+
1882+ // update indexNonLinear in SES_NONLINEAR and count
1883+ (allEquations,nonLinearCount) = updateNonLinearSys(allEquations, 0);
1884+ modelInfo = addnonLinearCount(nonLinearCount,modelInfo);
18811885
18821886 odeEquations = makeEqualLengthLists(odeEquations,Config.noProc());
18831887
@@ -1988,12 +1992,13 @@ algorithm
19881992 Integer numIntParams,numBoolParams,numOutVars,numInVars,numInitialEquations,numInitialAlgorithms,numInitialResiduals,numExternalObjects,numStringAlgVars;
19891993 Integer numStringParamVars,numStringAliasVars,numJacobianVars;
19901994 Option<Integer> dimODE1stOrder,dimODE2ndOrder;
1995+ Integer numNonLinearResFunctions;
19911996 case({},_) then modelInfo;
19921997 case(_,SimCode.MODELINFO(name,directory,varInfo,vars,functions,labels))
19931998 equation
19941999 SimCode.VARINFO(numHelpVars,numZeroCrossings,numTimeEvents,numStateVars,numAlgVars,numIntAlgVars,numBoolAlgVars,numAlgAliasVars,numIntAliasVars,numBoolAliasVars,numParams,
19952000 numIntParams,numBoolParams,numOutVars,numInVars,numInitialEquations,numInitialAlgorithms,numInitialResiduals,numExternalObjects,numStringAlgVars,
1996- numStringParamVars,numStringAliasVars,numJacobianVars,dimODE1stOrder,dimODE2ndOrder) = varInfo;
2001+ numStringParamVars,numStringAliasVars,numJacobianVars,numNonLinearResFunctions, dimODE1stOrder,dimODE2ndOrder) = varInfo;
19972002 SimCode.SIMVARS(stateVars,derivativeVars,algVars,intAlgVars,boolAlgVars,inputVars,outputVars,aliasVars,intAliasVars,boolAliasVars,paramVars,intParamVars,boolParamVars,
19982003 stringAlgVars,stringParamVars,stringAliasVars,extObjVars,jacobianVars,constVars,intConstVars,boolConstVars,stringConstVars) = vars;
19992004
@@ -2007,7 +2012,7 @@ algorithm
20072012
20082013 varInfo = SimCode.VARINFO(numHelpVars,numZeroCrossings,numTimeEvents,numStateVars,numAlgVars,numIntAlgVars,numBoolAlgVars,numAlgAliasVars,numIntAliasVars,numBoolAliasVars,numParams,
20092014 numIntParams,numBoolParams,numOutVars,numInVars,numInitialEquations,numInitialAlgorithms,numInitialResiduals,numExternalObjects,numStringAlgVars,
2010- numStringParamVars,numStringAliasVars,numJacobianVars,dimODE1stOrder,dimODE2ndOrder);
2015+ numStringParamVars,numStringAliasVars,numJacobianVars,numNonLinearResFunctions, dimODE1stOrder,dimODE2ndOrder);
20112016 vars = SimCode.SIMVARS(stateVars,derivativeVars,algVars,intAlgVars,boolAlgVars,inputVars,outputVars,aliasVars,intAliasVars,boolAliasVars,paramVars,intParamVars,boolParamVars,
20122017 stringAlgVars,stringParamVars,stringAliasVars,extObjVars,jacobianVars,constVars,intConstVars,boolConstVars,stringConstVars);
20132018 then
@@ -2094,6 +2099,37 @@ algorithm
20942099 end match;
20952100end addTempVars1;
20962101
2102+ protected function addnonLinearCount
2103+ input Integer nonLinearCount;
2104+ input SimCode.ModelInfo modelInfo;
2105+ output SimCode.ModelInfo omodelInfo;
2106+ algorithm
2107+ omodelInfo := match(nonLinearCount,modelInfo)
2108+ local
2109+ Absyn.Path name;
2110+ String directory;
2111+ SimCode.VarInfo varInfo;
2112+ SimCode.SimVars vars;
2113+ list<SimCode.Function> functions;
2114+ list<String> labels;
2115+ Integer numHelpVars,numZeroCrossings,numTimeEvents,numStateVars,numAlgVars,numIntAlgVars,numBoolAlgVars,numAlgAliasVars,numIntAliasVars,numBoolAliasVars,numParams;
2116+ Integer numIntParams,numBoolParams,numOutVars,numInVars,numInitialEquations,numInitialAlgorithms,numInitialResiduals,numExternalObjects,numStringAlgVars;
2117+ Integer numStringParamVars,numStringAliasVars,numJacobianVars;
2118+ Option<Integer> dimODE1stOrder,dimODE2ndOrder;
2119+ Integer numNonLinearResFunctions;
2120+ case(_,SimCode.MODELINFO(name,directory,varInfo,vars,functions,labels))
2121+ equation
2122+ SimCode.VARINFO(numHelpVars,numZeroCrossings,numTimeEvents,numStateVars,numAlgVars,numIntAlgVars,numBoolAlgVars,numAlgAliasVars,numIntAliasVars,numBoolAliasVars,numParams,
2123+ numIntParams,numBoolParams,numOutVars,numInVars,numInitialEquations,numInitialAlgorithms,numInitialResiduals,numExternalObjects,numStringAlgVars,
2124+ numStringParamVars,numStringAliasVars,numJacobianVars,numNonLinearResFunctions,dimODE1stOrder,dimODE2ndOrder) = varInfo;
2125+ varInfo = SimCode.VARINFO(numHelpVars,numZeroCrossings,numTimeEvents,numStateVars,numAlgVars,numIntAlgVars,numBoolAlgVars,numAlgAliasVars,numIntAliasVars,numBoolAliasVars,numParams,
2126+ numIntParams,numBoolParams,numOutVars,numInVars,numInitialEquations,numInitialAlgorithms,numInitialResiduals,numExternalObjects,numStringAlgVars,
2127+ numStringParamVars,numStringAliasVars,numJacobianVars,nonLinearCount,dimODE1stOrder,dimODE2ndOrder);
2128+ then
2129+ SimCode.MODELINFO(name,directory,varInfo,vars,functions,labels);
2130+ end match;
2131+ end addnonLinearCount;
2132+
20972133protected function createEquationsForSystems
20982134 input BackendDAE.EqSystems inSysts;
20992135 input BackendDAE.Shared shared;
@@ -2422,6 +2458,45 @@ algorithm
24222458 end matchcontinue;
24232459end addLinearizationMatrixes;
24242460
2461+
2462+ protected function updateNonLinearSys
2463+ "count and updte all nonlinear system"
2464+ input list<SimCode.SimEqSystem> inEqns;
2465+ input Integer inIndex;
2466+ output list<SimCode.SimEqSystem> outEqns;
2467+ output Integer outIndex;
2468+ algorithm
2469+ (outEqns,outIndex) := matchcontinue(inEqns, inIndex)
2470+ local
2471+ Integer index, indx;
2472+ list<SimCode.SimEqSystem> eqs, rest, res;
2473+ list<DAE.ComponentRef> crefs;
2474+ SimCode.SimEqSystem eq,cont;
2475+ list<SimCode.SimVar> discVars;
2476+ list<SimCode.SimEqSystem> discEqs;
2477+ list<Integer> values;
2478+ list<Integer> value_dims;
2479+ case ({},_)
2480+ then ({},inIndex);
2481+ case(SimCode.SES_NONLINEAR(index, eqs, crefs, _)::rest,_)
2482+ equation
2483+ (res,indx) = updateNonLinearSys(rest,inIndex+1);
2484+ res = listAppend({SimCode.SES_NONLINEAR(index, eqs, crefs, inIndex)},res);
2485+ then (res,indx);
2486+ case(SimCode.SES_MIXED(index, cont, discVars, discEqs, values, value_dims)::rest,_)
2487+ equation
2488+ ({cont},indx) = updateNonLinearSys({cont},inIndex);
2489+ (res,indx) = updateNonLinearSys(rest,indx);
2490+ res = listAppend({SimCode.SES_MIXED(index, cont, discVars, discEqs, values, value_dims)},res);
2491+ then (res,indx);
2492+ case(eq::rest,_)
2493+ equation
2494+ (res,indx) = updateNonLinearSys(rest,inIndex);
2495+ res = listAppend({eq},res);
2496+ then (res,indx);
2497+ end matchcontinue;
2498+ end updateNonLinearSys;
2499+
24252500protected function collectDelayExpressions
24262501"Put expression into a list if it is a call to delay().
24272502Useable as a function parameter for Expression.traverseExpression."
@@ -3609,7 +3684,7 @@ algorithm
36093684 //index = System.tmpTick();
36103685 (resEqs,uniqueEqIndex,tempvars) = createNonlinearResidualEquations({eqn},iuniqueEqIndex,itempvars);
36113686 then
3612- ({SimCode . SES_NONLINEAR (uniqueEqIndex, resEqs, {cr})},uniqueEqIndex+ 1 ,tempvars);
3687+ ({SimCode.SES_NONLINEAR(uniqueEqIndex, resEqs, {cr},0 )},uniqueEqIndex+1,tempvars);
36133688
36143689 // state nonlinear
36153690 case (eqNum, varNum,
@@ -3624,7 +3699,7 @@ algorithm
36243699 //index = System.tmpTick();
36253700 (resEqs,uniqueEqIndex,tempvars) = createNonlinearResidualEquations({eqn},iuniqueEqIndex,itempvars);
36263701 then
3627- ({SimCode . SES_NONLINEAR (uniqueEqIndex, resEqs, {cr_1})},uniqueEqIndex+ 1 ,tempvars);
3702+ ({SimCode.SES_NONLINEAR(uniqueEqIndex, resEqs, {cr_1},0 )},uniqueEqIndex+1,tempvars);
36283703
36293704 // Algorithm for single variable.
36303705 case (eqNum, varNum, BackendDAE.EQSYSTEM(orderedVars=vars,orderedEqs=eqns),_, helpVarInfo, false, true,_,_)
@@ -4493,7 +4568,7 @@ algorithm
44934568 (resEqs,uniqueEqIndex,tempvars) = createNonlinearResidualEquations(reqns,uniqueEqIndex,tempvars);
44944569 simequations = listAppend(simequations,resEqs);
44954570 then
4496- ({SimCode . SES_NONLINEAR (uniqueEqIndex, simequations, tcrs)},uniqueEqIndex+ 1 ,tempvars);
4571+ ({SimCode.SES_NONLINEAR(uniqueEqIndex, simequations, tcrs,0 )},uniqueEqIndex+1,tempvars);
44974572 end matchcontinue;
44984573end createTornSystem;
44994574
@@ -4644,7 +4719,7 @@ algorithm
46444719 (resEqs,uniqueEqIndex,tempvars) = createNonlinearResidualEquations(reqns,uniqueEqIndex,tempvars);
46454720 simeqnsystem1 = listAppend(simeqnsystem,resEqs);
46464721 then
4647- (SimCode . SES_NONLINEAR (uniqueEqIndex, simeqnsystem1, tcrs),uniqueEqIndex+ 1 ,tempvars);
4722+ (SimCode.SES_NONLINEAR(uniqueEqIndex, simeqnsystem1, tcrs,0 ),uniqueEqIndex+1,tempvars);
46484723 else
46494724 equation
46504725 Debug.fprint(Flags.FAILTRACE, "-generateTearingSystem failed \n");
@@ -4847,7 +4922,7 @@ algorithm
48474922 crefs = BackendVariable.getAllCrefFromVariables(v);
48484923 (resEqs,uniqueEqIndex,tempvars) = createNonlinearResidualEquations(eqn_lst,iuniqueEqIndex,itempvars);
48494924 then
4850- ({SimCode . SES_NONLINEAR (uniqueEqIndex, resEqs, crefs)},uniqueEqIndex+ 1 ,tempvars);
4925+ ({SimCode.SES_NONLINEAR(uniqueEqIndex, resEqs, crefs,0 )},uniqueEqIndex+1,tempvars);
48514926
48524927 // No analytic jacobian available. Generate non-linear system.
48534928 case (mixedEvent,skipDiscInAlgorithm,v,kv,eqn,constrs,clsAttrs,NONE(),BackendDAE.JAC_NO_ANALYTIC(),helpVarInfo,_,_,_)
@@ -4857,7 +4932,7 @@ algorithm
48574932 crefs = BackendVariable.getAllCrefFromVariables(v);
48584933 (resEqs,uniqueEqIndex,tempvars) = createNonlinearResidualEquations(eqn_lst,iuniqueEqIndex,itempvars);
48594934 then
4860- ({SimCode . SES_NONLINEAR (uniqueEqIndex, resEqs, crefs)},uniqueEqIndex+ 1 ,tempvars);
4935+ ({SimCode.SES_NONLINEAR(uniqueEqIndex, resEqs, crefs,0 )},uniqueEqIndex+1,tempvars);
48614936
48624937 // failure
48634938 else
@@ -5400,7 +5475,7 @@ algorithm
54005475 crefs = List.map(inVars,BackendVariable.varCref);
54015476 (resEqs,uniqueEqIndex,tempvars) = createNonlinearResidualEquations({inEquation},iuniqueEqIndex,itempvars);
54025477 then
5403- ({SimCode . SES_NONLINEAR (uniqueEqIndex, resEqs, crefs)},uniqueEqIndex+ 1 ,tempvars);
5478+ ({SimCode.SES_NONLINEAR(uniqueEqIndex, resEqs, crefs,0 )},uniqueEqIndex+1,tempvars);
54045479 // failure
54055480 else
54065481 equation
@@ -6739,7 +6814,7 @@ algorithm
67396814 numInitialResiduals = numInitialEquations+numInitialAlgorithms;
67406815 then
67416816 SimCode.VARINFO(numHelpVars, ng_1, ng_sam_1, nx, ny, ny_int, ny_bool, na, na_int, na_bool, np, np_int, np_bool, numOutVars, numInVars,
6742- numInitialEquations, numInitialAlgorithms, numInitialResiduals, next, ny_string, np_string, na_string, 0 ,SOME (dim_1),SOME (dim_2));
6817+ numInitialEquations, numInitialAlgorithms, numInitialResiduals, next, ny_string, np_string, na_string, 0, 0, SOME(dim_1),SOME(dim_2));
67436818 case (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_)
67446819 equation
67456820 Error.addMessage(Error.INTERNAL_ERROR, {"createVarInfoCPP failed"});
@@ -9724,7 +9799,7 @@ algorithm
97249799 list<SimCode.SimVar> vars;
97259800 list<DAE.Exp> elst,elst1;
97269801 list<tuple<Integer, Integer, SimCode.SimEqSystem>> simJac,simJac1;
9727- Integer index;
9802+ Integer index, indexNonLinear ;
97289803 list<DAE.ComponentRef> crefs;
97299804 SimCode.SimEqSystem cont,cont1,elseWhenEq,elseWhen;
97309805 list<SimCode.SimEqSystem> discEqs,discEqs1;
@@ -9768,11 +9843,11 @@ algorithm
97689843 divtplLst2 = listAppend(divtplLst,divtplLst1);
97699844 then
97709845 (SimCode.SES_LINEAR(index,partOfMixed,vars,elst1,simJac1),divtplLst2);
9771- case (SimCode . SES_NONLINEAR (index = index,eqs = discEqs, crefs = crefs),inDlowMode)
9846+ case (SimCode.SES_NONLINEAR(index = index,eqs = discEqs, crefs = crefs, indexNonLinear = indexNonLinear ),inDlowMode)
97729847 equation
97739848 (discEqs,divtplLst) = listMap1_2(discEqs,addDivExpErrorMsgtoSimEqSystem,inDlowMode);
97749849 then
9775- (SimCode . SES_NONLINEAR (index,discEqs,crefs),divtplLst);
9850+ (SimCode.SES_NONLINEAR(index,discEqs,crefs,indexNonLinear ),divtplLst);
97769851 case (SimCode.SES_MIXED(index,cont,vars,discEqs,values,value_dims),inDlowMode)
97779852 equation
97789853 (cont1,divtplLst) = addDivExpErrorMsgtoSimEqSystem(cont,inDlowMode);
@@ -12517,7 +12592,7 @@ algorithm
1251712592 list<DAE.Statement> stmts;
1251812593 SimCode.SimEqSystem cont;
1251912594 list<SimCode.SimEqSystem> discEqs,eqs;
12520- Integer index;
12595+ Integer index,indexNonLinear ;
1252112596 Boolean partOfMixed;
1252212597 list<SimCode.SimVar> vars,discVars;
1252312598 list<DAE.Exp> beqs;
@@ -12547,10 +12622,10 @@ algorithm
1254712622 equation
1254812623 /* TODO: Me */
1254912624 then (SimCode.SES_LINEAR(index,partOfMixed,vars,beqs,simJac),a);
12550- case (SimCode . SES_NONLINEAR (index,eqs,crefs),func ,a)
12625+ case (SimCode.SES_NONLINEAR(index,eqs,crefs,indexNonLinear ),func,a)
1255112626 equation
1255212627 /* TODO: Me */
12553- then (SimCode . SES_NONLINEAR (index,eqs,crefs),a);
12628+ then (SimCode.SES_NONLINEAR(index,eqs,crefs,indexNonLinear ),a);
1255412629 case (SimCode.SES_MIXED(index,cont,discVars,discEqs,values,values_dims),func,a)
1255512630 equation
1255612631 /* TODO: Me */
0 commit comments