Skip to content

Commit 1f06aed

Browse files
author
Willi Braun
committed
- quite big change to c simulation runtime
- solving non-linear systems (almost) always continuous - update debug output of non-linear systems - generate additional only relations - updated testsuite git-svn-id: https://openmodelica.org/svn/OpenModelica/trunk@13787 f25d12d1-65f4-0310-ae8a-bbce733d8d8e
1 parent 71fa358 commit 1f06aed

File tree

18 files changed

+476
-261
lines changed

18 files changed

+476
-261
lines changed

Compiler/BackEnd/BackendQSS.mo

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1016,7 +1016,7 @@ algorithm
10161016
list<SimCode.SimEqSystem> allEquations,algebraicEquations,residualEquations,startValueEquations,parameterEquations,removedEquations,sampleEquations,algorithmAndEquationAsserts;
10171017
list<SimCode.SimEqSystem> initialEquations;
10181018
list<DAE.Constraint> constraints;
1019-
list<BackendDAE.ZeroCrossing> zeroCrossings;
1019+
list<BackendDAE.ZeroCrossing> zeroCrossings,relations;
10201020
list<SimCode.SampleCondition> sampleConditions;
10211021
list<SimCode.HelpVarInfo> helpVarInfo;
10221022
list<SimCode.SimWhenClause> whenClauses;
@@ -1031,13 +1031,20 @@ algorithm
10311031
list<SimCode.SimEqSystem> eqs;
10321032
case (SimCode.SIMCODE(modelInfo,literals,recordDecls,externalFunctionIncludes,allEquations,odeEquations,
10331033
algebraicEquations,residualEquations,initialEquations,startValueEquations,
1034-
parameterEquations,removedEquations,algorithmAndEquationAsserts,constraints,zeroCrossings,
1034+
parameterEquations,removedEquations,algorithmAndEquationAsserts,constraints,zeroCrossings,relations,
10351035
sampleConditions,sampleEquations,helpVarInfo,whenClauses,discreteModelVars,extObjInfo,makefileParams,
10361036
delayedExps,jacobianMatrixes,simulationSettingsOpt,fileNamePrefix,crefToSimVarHT),_)
10371037
equation
10381038
{eqs} = odeEquations;
10391039
eqs = List.map1(eqs,replaceZC,zc_exps);
1040-
then SimCode.SIMCODE(modelInfo, literals, recordDecls, externalFunctionIncludes, allEquations, {eqs}, algebraicEquations, residualEquations, initialEquations, startValueEquations, parameterEquations, removedEquations, algorithmAndEquationAsserts, constraints, zeroCrossings, sampleConditions, sampleEquations, helpVarInfo, whenClauses, discreteModelVars, extObjInfo, makefileParams, delayedExps, jacobianMatrixes, simulationSettingsOpt, fileNamePrefix, crefToSimVarHT);
1040+
then SimCode.SIMCODE(modelInfo, literals, recordDecls, externalFunctionIncludes,
1041+
allEquations, {eqs}, algebraicEquations, residualEquations,
1042+
initialEquations, startValueEquations, parameterEquations,
1043+
removedEquations, algorithmAndEquationAsserts, constraints,
1044+
zeroCrossings, relations, sampleConditions, sampleEquations,
1045+
helpVarInfo, whenClauses, discreteModelVars, extObjInfo,
1046+
makefileParams, delayedExps, jacobianMatrixes,
1047+
simulationSettingsOpt, fileNamePrefix, crefToSimVarHT);
10411048

10421049
end match;
10431050
end replaceDiscontsInOde;

Compiler/BackEnd/ResidualCmp.mo

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -187,7 +187,7 @@ algorithm
187187
makefileParams = SimCode.MAKEFILE_PARAMS("","","","","","","","","",includeDirs,libs,"");
188188
delayexp = SimCode.DELAYED_EXPRESSIONS({},0);
189189
hashTable = SimCodeUtil.emptyHashTable();
190-
rescmp = SimCode.SIMCODE(modelInfo,{},recordDecls,externalFunctionIncludes,{},{},{},allEquations,allInitEquations,{},{},{},{},{},{},{},{},{},{},{},extObjInfo,makefileParams,delayexp,{},NONE(),filenamePrefix,hashTable);
190+
rescmp = SimCode.SIMCODE(modelInfo,{},recordDecls,externalFunctionIncludes,{},{},{},allEquations,allInitEquations,{},{},{},{},{},{},{},{},{},{},{},{},extObjInfo,makefileParams,delayexp,{},NONE(),filenamePrefix,hashTable);
191191
then
192192
rescmp;
193193
else

Compiler/BackEnd/SimCode.mo

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@ uniontype SimCode
9494
//list<DAE.Statement> algorithmAndEquationAsserts;
9595
list<DAE.Constraint> constraints;
9696
list<BackendDAE.ZeroCrossing> zeroCrossings;
97+
list<BackendDAE.ZeroCrossing> relations;
9798
list<SampleCondition> sampleConditions;
9899
list<SimEqSystem> sampleEquations;
99100
list<HelpVarInfo> helpVarInfo;

Compiler/BackEnd/SimCodeUtil.mo

Lines changed: 63 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1829,7 +1829,7 @@ algorithm
18291829
list<SimCode.SimEqSystem> algorithmAndEquationAsserts;
18301830
//list<DAE.Statement> algorithmAndEquationAsserts;
18311831
list<DAE.Constraint> constraints;
1832-
list<BackendDAE.ZeroCrossing> zeroCrossings, sampleZC;
1832+
list<BackendDAE.ZeroCrossing> zeroCrossings, sampleZC, relations;
18331833
list<SimCode.SimWhenClause> whenClauses;
18341834
list<SimCode.SampleCondition> sampleConditions;
18351835
list<BackendDAE.Equation> sampleEqns;
@@ -1872,7 +1872,8 @@ algorithm
18721872
extObjInfo = createExtObjInfo(shared);
18731873

18741874
whenClauses = createSimWhenClauses(dlow2, helpVarInfo);
1875-
zeroCrossings = getZeroCrossings(dlow2, ifcpp);
1875+
zeroCrossings = Util.if_(ifcpp,getRelations(dlow2),getZeroCrossings(dlow2));
1876+
relations = getRelations(dlow2);
18761877
sampleZC = getSamples(dlow2);
18771878
zeroCrossings = Util.if_(ifcpp,listAppend(zeroCrossings,sampleZC),zeroCrossings);
18781879
(sampleConditions, helpVarInfo) = prepareSampleConditions(sampleZC,helpVarInfo,{});
@@ -1952,6 +1953,7 @@ algorithm
19521953
algorithmAndEquationAsserts,
19531954
constraints,
19541955
zeroCrossings,
1956+
relations,
19551957
sampleConditions,
19561958
sampleEquations,
19571959
helpVarInfo,
@@ -2202,7 +2204,7 @@ algorithm
22022204
list<SimCode.SimEqSystem> allEquations,algebraicEquations,residualEquations,startValueEquations,parameterEquations,removedEquations,sampleEquations,algorithmAndEquationAsserts;
22032205
list<SimCode.SimEqSystem> initialEquations;
22042206
list<DAE.Constraint> constraints;
2205-
list<BackendDAE.ZeroCrossing> zeroCrossings;
2207+
list<BackendDAE.ZeroCrossing> zeroCrossings, relations;
22062208
list<SimCode.SampleCondition> sampleConditions;
22072209
list<SimCode.HelpVarInfo> helpVarInfo;
22082210
list<SimCode.SimWhenClause> whenClauses;
@@ -2221,11 +2223,11 @@ algorithm
22212223
list<SimCode.Function> functions;
22222224

22232225
case (SimCode.SIMCODE(modelInfo,literals,recordDecls,externalFunctionIncludes,allEquations,odeEquations,algebraicEquations,residualEquations,initialEquations,startValueEquations,
2224-
parameterEquations,removedEquations,algorithmAndEquationAsserts,constraints,zeroCrossings,sampleConditions,sampleEquations,helpVarInfo,whenClauses,
2226+
parameterEquations,removedEquations,algorithmAndEquationAsserts,constraints,zeroCrossings,relations,sampleConditions,sampleEquations,helpVarInfo,whenClauses,
22252227
discreteModelVars,extObjInfo,makefileParams,delayedExps,_,simulationSettingsOpt,fileNamePrefix,crefToSimVarHT),inJacobians)
22262228
then
22272229
SimCode.SIMCODE(modelInfo,literals,recordDecls,externalFunctionIncludes,allEquations,odeEquations,algebraicEquations,residualEquations,initialEquations,startValueEquations,
2228-
parameterEquations,removedEquations,algorithmAndEquationAsserts,constraints,zeroCrossings,sampleConditions,sampleEquations,helpVarInfo,whenClauses,
2230+
parameterEquations,removedEquations,algorithmAndEquationAsserts,constraints,zeroCrossings,relations,sampleConditions,sampleEquations,helpVarInfo,whenClauses,
22292231
discreteModelVars,extObjInfo,makefileParams,delayedExps,inJacobians,simulationSettingsOpt,fileNamePrefix,crefToSimVarHT);
22302232

22312233
end match;
@@ -6916,26 +6918,39 @@ end traverseSampleAndReplacewithH;
69166918

69176919
protected function getZeroCrossings
69186920
input BackendDAE.BackendDAE dlow;
6919-
input Boolean inifcpp;
69206921
output list<BackendDAE.ZeroCrossing> zc;
69216922
algorithm
6922-
zc := matchcontinue (dlow, inifcpp)
6923+
zc := matchcontinue (dlow)
69236924

6924-
case (BackendDAE.DAE(shared=BackendDAE.SHARED(eventInfo=BackendDAE.EVENT_INFO(zeroCrossingLst=zc))),false)
6925+
case (BackendDAE.DAE(shared=BackendDAE.SHARED(eventInfo=BackendDAE.EVENT_INFO(zeroCrossingLst=zc))))
69256926
then
69266927
zc;
6928+
6929+
case (_)
6930+
equation
6931+
Error.addMessage(Error.INTERNAL_ERROR, {"getZeroCrossings failed"});
6932+
then
6933+
fail();
6934+
end matchcontinue;
6935+
end getZeroCrossings;
69276936

6928-
case (BackendDAE.DAE(shared=BackendDAE.SHARED(eventInfo=BackendDAE.EVENT_INFO(relationsLst=zc))),true)
6937+
protected function getRelations
6938+
input BackendDAE.BackendDAE dlow;
6939+
output list<BackendDAE.ZeroCrossing> zc;
6940+
algorithm
6941+
zc := matchcontinue (dlow)
6942+
6943+
case (BackendDAE.DAE(shared=BackendDAE.SHARED(eventInfo=BackendDAE.EVENT_INFO(relationsLst=zc))))
69296944
then
69306945
zc;
69316946

6932-
case (_,_)
6947+
case (_)
69336948
equation
69346949
Error.addMessage(Error.INTERNAL_ERROR, {"getZeroCrossings failed"});
69356950
then
69366951
fail();
69376952
end matchcontinue;
6938-
end getZeroCrossings;
6953+
end getRelations;
69396954

69406955
protected function getSamples
69416956
input BackendDAE.BackendDAE dlow;
@@ -12564,7 +12579,7 @@ algorithm
1256412579
list<SimCode.SimEqSystem> allEquations,algebraicEquations,residualEquations,startValueEquations,parameterEquations,removedEquations,sampleEquations,algorithmAndEquationAsserts;
1256512580
list<SimCode.SimEqSystem> initialEquations;
1256612581
list<DAE.Constraint> constraints;
12567-
list<BackendDAE.ZeroCrossing> zeroCrossings;
12582+
list<BackendDAE.ZeroCrossing> zeroCrossings, relations;
1256812583
list<SimCode.SampleCondition> sampleConditions;
1256912584
list<SimCode.HelpVarInfo> helpVarInfo;
1257012585
list<SimCode.SimWhenClause> whenClauses;
@@ -12591,7 +12606,7 @@ algorithm
1259112606
inSimCode;
1259212607

1259312608
case SimCode.SIMCODE(modelInfo,literals,recordDecls,externalFunctionIncludes,allEquations,odeEquations,algebraicEquations,residualEquations,initialEquations,startValueEquations,
12594-
parameterEquations,removedEquations,algorithmAndEquationAsserts,constraints,zeroCrossings,sampleConditions,sampleEquations,helpVarInfo,whenClauses,
12609+
parameterEquations,removedEquations,algorithmAndEquationAsserts,constraints,zeroCrossings,relations,sampleConditions,sampleEquations,helpVarInfo,whenClauses,
1259512610
discreteModelVars,extObjInfo,makefileParams,delayedExps,jacobianMatrixes,simulationSettingsOpt,fileNamePrefix,crefToSimVarHT)
1259612611
equation
1259712612
SimCode.MODELINFO(name, directory, varInfo, vars, functions, labels) = modelInfo;
@@ -12607,7 +12622,7 @@ algorithm
1260712622
modelInfo = SimCode.MODELINFO(name, directory, varInfo, vars, functions, labels);
1260812623
then
1260912624
SimCode.SIMCODE(modelInfo,literals,recordDecls,externalFunctionIncludes,allEquations,odeEquations,algebraicEquations,residualEquations,initialEquations,startValueEquations,
12610-
parameterEquations,removedEquations,algorithmAndEquationAsserts,constraints,zeroCrossings,sampleConditions,sampleEquations,helpVarInfo,whenClauses,
12625+
parameterEquations,removedEquations,algorithmAndEquationAsserts,constraints,zeroCrossings,relations,sampleConditions,sampleEquations,helpVarInfo,whenClauses,
1261112626
discreteModelVars,extObjInfo,makefileParams,delayedExps,jacobianMatrixes,simulationSettingsOpt,fileNamePrefix,crefToSimVarHT);
1261212627

1261312628
case inSimCode
@@ -12878,7 +12893,7 @@ algorithm
1287812893
list<SimCode.SimEqSystem> removedEquations;
1287912894
list<SimCode.SimEqSystem> algorithmAndEquationAsserts;
1288012895
list<DAE.Constraint> constraints;
12881-
list<BackendDAE.ZeroCrossing> zeroCrossings;
12896+
list<BackendDAE.ZeroCrossing> zeroCrossings, relations;
1288212897
list<SimCode.SampleCondition> sampleConditions;
1288312898
list<SimCode.SimEqSystem> sampleEquations;
1288412899
list<SimCode.HelpVarInfo> helpVarInfo;
@@ -12894,7 +12909,14 @@ algorithm
1289412909
SimCode.HashTableCrefToSimVar crefToSimVarHT "hidden from typeview - used by cref2simvar() for cref -> SIMVAR lookup available in templates.";
1289512910
A a;
1289612911

12897-
case (SimCode.SIMCODE(modelInfo, literals, recordDecls, externalFunctionIncludes, allEquations, odeEquations, algebraicEquations, residualEquations, initialEquations, startValueEquations, parameterEquations, removedEquations, algorithmAndEquationAsserts, constraints, zeroCrossings, sampleConditions, sampleEquations, helpVarInfo, whenClauses, discreteModelVars, extObjInfo, makefileParams, delayedExps, jacobianMatrixes, simulationSettingsOpt, fileNamePrefix, crefToSimVarHT),_,a)
12912+
case (SimCode.SIMCODE(modelInfo, literals, recordDecls, externalFunctionIncludes,
12913+
allEquations, odeEquations, algebraicEquations, residualEquations,
12914+
initialEquations, startValueEquations, parameterEquations,
12915+
removedEquations, algorithmAndEquationAsserts, constraints,
12916+
zeroCrossings, relations, sampleConditions, sampleEquations,
12917+
helpVarInfo, whenClauses, discreteModelVars, extObjInfo,
12918+
makefileParams, delayedExps, jacobianMatrixes,
12919+
simulationSettingsOpt, fileNamePrefix, crefToSimVarHT),_,a)
1289812920
equation
1289912921
(literals,a) = List.mapFoldTuple(literals,func,a);
1290012922
(allEquations,a) = traverseExpsEqSystems(allEquations,func,a,{});
@@ -12914,7 +12936,14 @@ algorithm
1291412936
/* TODO:extObjInfo */
1291512937
/* TODO:delayedExps */
1291612938
/* TODO:jacobianMatrixes */
12917-
then (SimCode.SIMCODE(modelInfo, literals, recordDecls, externalFunctionIncludes, allEquations, odeEquations, algebraicEquations, residualEquations, initialEquations, startValueEquations, parameterEquations, removedEquations, algorithmAndEquationAsserts, constraints, zeroCrossings, sampleConditions, sampleEquations, helpVarInfo, whenClauses, discreteModelVars, extObjInfo, makefileParams, delayedExps, jacobianMatrixes, simulationSettingsOpt, fileNamePrefix, crefToSimVarHT),a);
12939+
then (SimCode.SIMCODE(modelInfo, literals, recordDecls, externalFunctionIncludes,
12940+
allEquations, odeEquations, algebraicEquations, residualEquations,
12941+
initialEquations, startValueEquations, parameterEquations,
12942+
removedEquations, algorithmAndEquationAsserts, constraints,
12943+
zeroCrossings, relations, sampleConditions, sampleEquations,
12944+
helpVarInfo, whenClauses, discreteModelVars, extObjInfo,
12945+
makefileParams, delayedExps, jacobianMatrixes,
12946+
simulationSettingsOpt, fileNamePrefix, crefToSimVarHT),a);
1291812947
end match;
1291912948
end traverseExpsSimCode;
1292012949

@@ -13058,7 +13087,7 @@ algorithm
1305813087
list<SimCode.SimEqSystem> removedEquations;
1305913088
list<SimCode.SimEqSystem> algorithmAndEquationAsserts;
1306013089
list<DAE.Constraint> constraints;
13061-
list<BackendDAE.ZeroCrossing> zeroCrossings;
13090+
list<BackendDAE.ZeroCrossing> zeroCrossings, relations;
1306213091
list<SimCode.SampleCondition> sampleConditions;
1306313092
list<SimCode.SimEqSystem> sampleEquations;
1306413093
list<SimCode.HelpVarInfo> helpVarInfo;
@@ -13073,8 +13102,22 @@ algorithm
1307313102
//*** a protected section *** not exported to SimCodeTV
1307413103
SimCode.HashTableCrefToSimVar crefToSimVarHT "hidden from typeview - used by cref2simvar() for cref -> SIMVAR lookup available in templates.";
1307513104

13076-
case (SimCode.SIMCODE(modelInfo, _, recordDecls, externalFunctionIncludes, allEquations, odeEquations, algebraicEquations, residualEquations, initialEquations, startValueEquations, parameterEquations, removedEquations, algorithmAndEquationAsserts, constraints, zeroCrossings, sampleConditions, sampleEquations, helpVarInfo, whenClauses, discreteModelVars, extObjInfo, makefileParams, delayedExps, jacobianMatrixes, simulationSettingsOpt, fileNamePrefix, crefToSimVarHT),_)
13077-
then SimCode.SIMCODE(modelInfo, literals, recordDecls, externalFunctionIncludes, allEquations, odeEquations, algebraicEquations, residualEquations, initialEquations, startValueEquations, parameterEquations, removedEquations, algorithmAndEquationAsserts, constraints, zeroCrossings, sampleConditions, sampleEquations, helpVarInfo, whenClauses, discreteModelVars, extObjInfo, makefileParams, delayedExps, jacobianMatrixes, simulationSettingsOpt, fileNamePrefix, crefToSimVarHT);
13105+
case (SimCode.SIMCODE(modelInfo, _, recordDecls, externalFunctionIncludes,
13106+
allEquations, odeEquations, algebraicEquations, residualEquations,
13107+
initialEquations, startValueEquations, parameterEquations,
13108+
removedEquations, algorithmAndEquationAsserts, constraints,
13109+
zeroCrossings, relations, sampleConditions, sampleEquations,
13110+
helpVarInfo, whenClauses, discreteModelVars, extObjInfo,
13111+
makefileParams, delayedExps, jacobianMatrixes,
13112+
simulationSettingsOpt, fileNamePrefix, crefToSimVarHT),_)
13113+
then SimCode.SIMCODE(modelInfo, literals, recordDecls, externalFunctionIncludes,
13114+
allEquations, odeEquations, algebraicEquations, residualEquations,
13115+
initialEquations, startValueEquations, parameterEquations,
13116+
removedEquations, algorithmAndEquationAsserts, constraints,
13117+
zeroCrossings, relations, sampleConditions, sampleEquations,
13118+
helpVarInfo, whenClauses, discreteModelVars, extObjInfo,
13119+
makefileParams, delayedExps, jacobianMatrixes,
13120+
simulationSettingsOpt, fileNamePrefix, crefToSimVarHT);
1307813121
end match;
1307913122
end setSimCodeLiterals;
1308013123

0 commit comments

Comments
 (0)