Skip to content
This repository was archived by the owner on May 18, 2019. It is now read-only.

Commit 894837c

Browse files
lochelOpenModelica-Hudson
authored andcommitted
Reimplementation of the c runtime homotopy support
1 parent 17e8841 commit 894837c

22 files changed

+166
-363
lines changed

Compiler/BackEnd/BackendDAEUtil.mo

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6818,8 +6818,6 @@ public function getSolvedSystem "Run the equation system pipeline."
68186818
output BackendDAE.BackendDAE outSimDAE;
68196819
output BackendDAE.BackendDAE outInitDAE;
68206820
output Option<BackendDAE.InlineData > outInlineData;
6821-
output Boolean outUseHomotopy "true if homotopy(...) is used during initialization";
6822-
output Option<BackendDAE.BackendDAE> outInitDAE_lambda0;
68236821
output list<BackendDAE.Equation> outRemovedInitialEquationLst;
68246822
protected
68256823
BackendDAE.BackendDAE dae, simDAE;
@@ -6877,7 +6875,7 @@ algorithm
68776875
end if;
68786876

68796877
// generate system for initialization
6880-
(outInitDAE, outUseHomotopy, outInitDAE_lambda0, outRemovedInitialEquationLst, globalKnownVars) := Initialization.solveInitialSystem(dae);
6878+
(outInitDAE, outRemovedInitialEquationLst, globalKnownVars) := Initialization.solveInitialSystem(dae);
68816879

68826880
// use function tree from initDAE further for simDAE
68836881
simDAE := BackendDAEUtil.setFunctionTree(dae, BackendDAEUtil.getFunctions(outInitDAE.shared));

Compiler/BackEnd/Initialization.mo

Lines changed: 1 addition & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -80,14 +80,11 @@ public function solveInitialSystem "author: lochel
8080
This function generates a algebraic system of equations for the initialization and solves it."
8181
input BackendDAE.BackendDAE inDAE "simulation system";
8282
output BackendDAE.BackendDAE outInitDAE "initialization system";
83-
output Boolean outUseHomotopy;
84-
output Option<BackendDAE.BackendDAE> outInitDAE_lambda0 "initialization system for lambda=0";
8583
output list<BackendDAE.Equation> outRemovedInitialEquations;
8684
output BackendDAE.Variables outGlobalKnownVars;
8785
protected
8886
BackendDAE.BackendDAE dae;
8987
BackendDAE.BackendDAE initdae;
90-
BackendDAE.BackendDAE initdae0;
9188
BackendDAE.EqSystem initsyst;
9289
BackendDAE.EqSystems systs;
9390
BackendDAE.EquationArray eqns, reeqns;
@@ -207,9 +204,6 @@ algorithm
207204

208205
// solve system
209206
initdae := BackendDAEUtil.transformBackendDAE(initdae, SOME((BackendDAE.NO_INDEX_REDUCTION(), BackendDAE.EXACT())), NONE(), NONE());
210-
if useHomotopy then
211-
initdae0 := BackendDAEUtil.copyBackendDAE(initdae);
212-
end if;
213207

214208
// simplify system
215209
initOptModules := BackendDAEUtil.getInitOptModules(NONE());
@@ -224,16 +218,6 @@ algorithm
224218
end if;
225219
end if;
226220

227-
// compute system for lambda=0
228-
if useHomotopy then
229-
initdae0 := BackendDAEUtil.setFunctionTree(initdae0, BackendDAEUtil.getFunctions(initdae.shared));
230-
initdae0 := BackendDAEUtil.postOptimizeDAE(initdae0, (replaceHomotopyWithSimplified, "replaceHomotopyWithSimplified")::initOptModules, matchingAlgorithm, daeHandler);
231-
outInitDAE_lambda0 := SOME(initdae0);
232-
initdae := BackendDAEUtil.setFunctionTree(initdae, BackendDAEUtil.getFunctions(initdae0.shared));
233-
else
234-
outInitDAE_lambda0 := NONE();
235-
end if;
236-
237221
// Remove the globalKnownVars for the initialization set again
238222
if not stringEq(Config.simCodeTarget(), "Cpp") then
239223
initdae.shared := BackendDAEUtil.setSharedGlobalKnownVars(initdae.shared, BackendVariable.emptyVars());
@@ -278,7 +262,6 @@ algorithm
278262
end if;
279263

280264
outInitDAE := initdae;
281-
outUseHomotopy := useHomotopy;
282265
outRemovedInitialEquations := removedEqns;
283266
else
284267
Error.addCompilerError("No system for the symbolic initialization was generated");
@@ -1136,13 +1119,9 @@ protected function preBalanceInitialSystem1 "author: lochel"
11361119
algorithm
11371120
(outVars, outEqs, outB, outDumpVars) := match (n, inB)
11381121
local
1139-
list<Integer> row;
1140-
Boolean b, useHomotopy;
1122+
Boolean b;
11411123
BackendDAE.Variables vars;
11421124
BackendDAE.EquationArray eqs;
1143-
list<BackendDAE.Var> rvarlst;
1144-
BackendDAE.Var var;
1145-
DAE.ComponentRef cref;
11461125
list<BackendDAE.Var> dumpVars;
11471126

11481127
case (0, false)

Compiler/BackEnd/OpenTURNS.mo

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -80,15 +80,12 @@ public function generateOpenTURNSInterface "generates the dll and the python scr
8080
input Absyn.Program inProgram;
8181
input String templateFile "the filename to the template file (python script)";
8282
output String scriptFile "the name of the generated file";
83-
84-
protected
83+
protected
8584
String cname_str,fileNamePrefix,fileDir,cname_last_str;
8685
list<String> libs;
8786
BackendDAE.BackendDAE dae,strippedDae;
8887
SimCode.SimulationSettings simSettings;
8988
BackendDAE.BackendDAE initDAE;
90-
Option<BackendDAE.BackendDAE> initDAE_lambda0;
91-
Boolean useHomotopy "true if homotopy(...) is used during initialization";
9289
list<BackendDAE.Equation> removedInitialEquationLst;
9390
algorithm
9491
cname_str := Absyn.pathString(inPath);
@@ -110,13 +107,13 @@ algorithm
110107
// Strip correlation vector from dae to be able to compile (bug in OpenModelica with vectors of records )
111108
strippedDae := stripCorrelationFromDae(inDaelow);
112109

113-
(strippedDae, initDAE, _, useHomotopy, initDAE_lambda0, removedInitialEquationLst) := BackendDAEUtil.getSolvedSystem(strippedDae,"");
110+
(strippedDae, initDAE, _, removedInitialEquationLst) := BackendDAEUtil.getSolvedSystem(strippedDae,"");
114111

115112
//print("strippedDae :");
116113
//BackendDump.dump(strippedDae);
117114
_ := System.realtimeTock(ClockIndexes.RT_CLOCK_BACKEND); // Is this necessary?
118115

119-
(libs, fileDir, _, _) := SimCodeMain.generateModelCode(strippedDae, initDAE, NONE(), useHomotopy, initDAE_lambda0, removedInitialEquationLst,inProgram, inPath, cname_str, SOME(simSettings), Absyn.FUNCTIONARGS({}, {}));
116+
(libs, fileDir, _, _) := SimCodeMain.generateModelCode(strippedDae, initDAE, NONE(), removedInitialEquationLst,inProgram, inPath, cname_str, SOME(simSettings), Absyn.FUNCTIONARGS({}, {}));
120117

121118
//print("..compiling, fileNamePrefix = "+fileNamePrefix+"\n");
122119
CevalScript.compileModel(fileNamePrefix , libs);

Compiler/Main/Main.mo

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -593,15 +593,13 @@ protected
593593
BackendDAE.BackendDAE dlow;
594594
BackendDAE.BackendDAE initDAE;
595595
Option<BackendDAE.InlineData> inlineData;
596-
Boolean useHomotopy "true if homotopy(...) is used during initialization";
597-
Option<BackendDAE.BackendDAE> initDAE_lambda0;
598596
list<BackendDAE.Equation> removedInitialEquationLst;
599597
algorithm
600598
if Config.simulationCg() then
601599
info := BackendDAE.EXTRA_INFO(DAEUtil.daeDescription(dae), Absyn.pathString(inClassName));
602600
dlow := BackendDAECreate.lower(dae, inCache, inEnv, info);
603-
(dlow, initDAE, inlineData, useHomotopy, initDAE_lambda0, removedInitialEquationLst) := BackendDAEUtil.getSolvedSystem(dlow, "");
604-
simcodegen(dlow, initDAE, inlineData, useHomotopy, initDAE_lambda0, removedInitialEquationLst, inClassName, ap);
601+
(dlow, initDAE, inlineData, removedInitialEquationLst) := BackendDAEUtil.getSolvedSystem(dlow, "");
602+
simcodegen(dlow, initDAE, inlineData, removedInitialEquationLst, inClassName, ap);
605603
end if;
606604
end optimizeDae;
607605

@@ -610,8 +608,6 @@ protected function simcodegen "
610608
input BackendDAE.BackendDAE inBackendDAE;
611609
input BackendDAE.BackendDAE inInitDAE;
612610
input Option<BackendDAE.InlineData> inInlineData;
613-
input Boolean inUseHomotopy "true if homotopy(...) is used during initialization";
614-
input Option<BackendDAE.BackendDAE> inInitDAE_lambda0;
615611
input list<BackendDAE.Equation> inRemovedInitialEquationLst;
616612
input Absyn.Path inClassName;
617613
input Absyn.Program inProgram;
@@ -632,7 +628,7 @@ algorithm
632628
SimCodeMain.createSimulationSettings(0.0, 1.0, 500, 1e-6, "dassl", "", "mat", ".*", "");
633629

634630
System.realtimeTock(ClockIndexes.RT_CLOCK_BACKEND); // Is this necessary?
635-
SimCodeMain.generateModelCode(inBackendDAE, inInitDAE, inInlineData, inUseHomotopy, inInitDAE_lambda0, inRemovedInitialEquationLst, inProgram, inClassName, cname, SOME(sim_settings), Absyn.FUNCTIONARGS({}, {}));
631+
SimCodeMain.generateModelCode(inBackendDAE, inInitDAE, inInlineData, inRemovedInitialEquationLst, inProgram, inClassName, cname, SOME(sim_settings), Absyn.FUNCTIONARGS({}, {}));
636632

637633
execStat("Codegen Done");
638634
end if;

Compiler/SimCode/HpcOmSimCodeMain.mo

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -67,8 +67,6 @@ public function createSimCode "
6767
Entry point to create SimCode from BackendDAE."
6868
input BackendDAE.BackendDAE inBackendDAE;
6969
input BackendDAE.BackendDAE inInitDAE;
70-
input Boolean inUseHomotopy "true if homotopy(...) is used during initialization";
71-
input Option<BackendDAE.BackendDAE> inInitDAE_lambda0;
7270
input list<BackendDAE.Equation> inRemovedInitialEquationLst;
7371
input Absyn.Path inClassName;
7472
input String filenamePrefix;
@@ -132,7 +130,7 @@ algorithm
132130
//Setup
133131
//-----
134132
(simCode,(lastEqMappingIdx,equationSccMapping)) =
135-
SimCodeUtil.createSimCode( inBackendDAE, inInitDAE, NONE(), inUseHomotopy, inInitDAE_lambda0, inRemovedInitialEquationLst, inClassName, filenamePrefix, inString11, functions,
133+
SimCodeUtil.createSimCode( inBackendDAE, inInitDAE, NONE(), inRemovedInitialEquationLst, inClassName, filenamePrefix, inString11, functions,
136134
externalFunctionIncludes, includeDirs, libs,libPaths,program, simSettingsOpt, recordDecls, literals, args );
137135

138136
//get simCode-backendDAE mappings
@@ -187,7 +185,7 @@ algorithm
187185
//-----
188186
System.realtimeTick(ClockIndexes.RT_CLOCK_EXECSTAT_HPCOM_MODULES);
189187
(simCode,(lastEqMappingIdx,equationSccMapping)) =
190-
SimCodeUtil.createSimCode( inBackendDAE, inInitDAE, NONE(), inUseHomotopy, inInitDAE_lambda0, inRemovedInitialEquationLst, inClassName, filenamePrefix, inString11, functions,
188+
SimCodeUtil.createSimCode( inBackendDAE, inInitDAE, NONE(), inRemovedInitialEquationLst, inClassName, filenamePrefix, inString11, functions,
191189
externalFunctionIncludes, includeDirs, libs,libPaths,program, simSettingsOpt, recordDecls, literals, args );
192190

193191
//get simCode-backendDAE mappings

Compiler/SimCode/SerializeModelInfo.mo

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,6 @@ algorithm
8888
File.write(file,"{\"eqIndex\":0,\"tag\":\"dummy\"}");
8989
min(serializeEquation(file,eq,"initial",withOperations) for eq in SimCodeUtil.sortEqSystems(code.initialEquations));
9090
min(serializeEquation(file,eq,"removed-initial",withOperations) for eq in SimCodeUtil.sortEqSystems(code.removedInitialEquations));
91-
min(serializeEquation(file,eq,"initial-lambda0",withOperations) for eq in SimCodeUtil.sortEqSystems(code.initialEquations_lambda0));
9291
min(serializeEquation(file,eq,"regular",withOperations) for eq in SimCodeUtil.sortEqSystems(code.allEquations));
9392
min(serializeEquation(file,eq,"synchronous",withOperations) for eq in SimCodeUtil.sortEqSystems(SimCodeUtil.getClockedEquations(SimCodeUtil.getSubPartitions(code.clockedPartitions))));
9493
min(serializeEquation(file,eq,"start",withOperations) for eq in SimCodeUtil.sortEqSystems(code.startValueEquations));

Compiler/SimCode/SimCode.mo

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -108,9 +108,7 @@ uniontype SimCode
108108
list<list<SimEqSystem>> odeEquations;
109109
list<list<SimEqSystem>> algebraicEquations;
110110
list<ClockedPartition> clockedPartitions;
111-
Boolean useHomotopy "true if homotopy(...) is used during initialization";
112111
list<SimEqSystem> initialEquations;
113-
list<SimEqSystem> initialEquations_lambda0;
114112
list<SimEqSystem> removedInitialEquations;
115113
list<SimEqSystem> startValueEquations;
116114
list<SimEqSystem> nominalValueEquations;

0 commit comments

Comments
 (0)