Skip to content

Commit

Permalink
[SimCode] update daeMode (#728)
Browse files Browse the repository at this point in the history
- add lambda 0 equation system (homotopy) for daeMode
 - ticket #5806
  • Loading branch information
kabdelhak committed Feb 10, 2020
1 parent cbd3637 commit c67fe97
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 5 deletions.
3 changes: 2 additions & 1 deletion OMCompiler/Compiler/BackEnd/DAEMode.mo
Expand Up @@ -80,6 +80,7 @@ public function getEqSystemDAEmode "Run the equation system pipeline."
input Option<list<String>> strPostOptModules = NONE();
output BackendDAE.BackendDAE outDAEmode;
output BackendDAE.BackendDAE outInitDAE;
output Option<BackendDAE.BackendDAE> outInitDAE_lambda0_option;
output list<BackendDAE.Equation> outRemovedInitialEquationLst;
protected
BackendDAE.BackendDAE dae, simDAE;
Expand Down Expand Up @@ -124,7 +125,7 @@ algorithm
end if;

// generate system for initialization
(outInitDAE, _, outRemovedInitialEquationLst, globalKnownVars, dae) := Initialization.solveInitialSystem(dae);
(outInitDAE, outInitDAE_lambda0_option, outRemovedInitialEquationLst, globalKnownVars, dae) := Initialization.solveInitialSystem(dae);

// use function tree from initDAE further for simDAE
simDAE := BackendDAEUtil.setFunctionTree(dae, BackendDAEUtil.getFunctions(outInitDAE.shared));
Expand Down
19 changes: 15 additions & 4 deletions OMCompiler/Compiler/SimCode/SimCodeMain.mo
Expand Up @@ -1028,6 +1028,7 @@ algorithm
Real timeSimCode, timeTemplates, timeBackend, timeFrontend;
BackendDAE.BackendDAE initDAE;
list<BackendDAE.Equation> removedInitialEquationLst;
Option<BackendDAE.BackendDAE> initDAE_lambda0_option;
Real fsize;
Absyn.ComponentRef classNameCref;

Expand Down Expand Up @@ -1074,7 +1075,7 @@ algorithm
end if;

//BackendDump.printBackendDAE(dlow);
(bdae, initDAE, removedInitialEquationLst) := DAEMode.getEqSystemDAEmode(dlow,inFileNamePrefix);
(bdae, initDAE, initDAE_lambda0_option, removedInitialEquationLst) := DAEMode.getEqSystemDAEmode(dlow,inFileNamePrefix);
ExecStat.execStat("Backend");

timeBackend := System.realtimeTock(ClockIndexes.RT_CLOCK_BACKEND);
Expand All @@ -1086,7 +1087,7 @@ algorithm
ExecStat.execStat("Serialize solved system");
end if;

(libs, file_dir, timeSimCode, timeTemplates) := generateModelCodeDAE(bdae, initDAE, removedInitialEquationLst, SymbolTable.getAbsyn(), className, filenameprefix, inSimSettingsOpt, args);
(libs, file_dir, timeSimCode, timeTemplates) := generateModelCodeDAE(bdae, initDAE, initDAE_lambda0_option, removedInitialEquationLst, SymbolTable.getAbsyn(), className, filenameprefix, inSimSettingsOpt, args);
timeSimCode := System.realtimeTock(ClockIndexes.RT_CLOCK_SIMCODE);
timeTemplates := System.realtimeTock(ClockIndexes.RT_CLOCK_TEMPLATES);

Expand Down Expand Up @@ -1119,6 +1120,7 @@ protected function generateModelCodeDAE
and call the template target generator. "
input BackendDAE.BackendDAE inBackendDAE;
input BackendDAE.BackendDAE inInitDAE;
input Option<BackendDAE.BackendDAE> initDAE_lambda0_option;
input list<BackendDAE.Equation> inRemovedInitialEquationLst;
input Absyn.Program p;
input Absyn.Path className;
Expand All @@ -1142,6 +1144,7 @@ protected
Integer numCheckpoints;
list<SimCodeVar.SimVar> tempVars = {};
BackendDAE.BackendDAE emptyBDAE;
BackendDAE.BackendDAE initDAE_lambda0;

SimCode.ModelInfo modelInfo;
SimCode.ExtObjInfo extObjInfo;
Expand Down Expand Up @@ -1176,7 +1179,7 @@ protected
tuple<Option<BackendDAE.SymbolicJacobian>, BackendDAE.SparsePattern, BackendDAE.SparseColoring> daeModeJac;
SimCode.JacobianMatrix symDAESparsPattern;
list<SimCode.JacobianMatrix> symJacs, SymbolicJacs, SymbolicJacsNLS, SymbolicJacsTemp, SymbolicJacsStateSelect;
list<SimCode.SimEqSystem> initialEquations, removedInitialEquations, jacobianEquations;
list<SimCode.SimEqSystem> initialEquations, initialEquations_lambda0, removedInitialEquations, jacobianEquations;
list<SimCodeVar.SimVar> jacobianSimvars, seedVars;
list<SimCode.SimEqSystem> startValueEquations; // --> updateBoundStartValues
list<SimCode.SimEqSystem> maxValueEquations; // --> updateBoundMaxValues
Expand Down Expand Up @@ -1216,6 +1219,14 @@ algorithm
(initialEquations, uniqueEqIndex, tempVars) := SimCodeUtil.createInitialEquations(inInitDAE, uniqueEqIndex, tempVars);
//initialEquations := listReverse(initialEquations);

// generate equations for initDAE_lambda0
if isSome(initDAE_lambda0_option) then
SOME(initDAE_lambda0) := initDAE_lambda0_option;
(initialEquations_lambda0, uniqueEqIndex, tempVars) := SimCodeUtil.createInitialEquations_lambda0(initDAE_lambda0, uniqueEqIndex, tempVars);
else
initialEquations_lambda0 := {};
end if;

// generate equations for removed initial equations
(removedInitialEquations, uniqueEqIndex, tempVars) := SimCodeUtil.createNonlinearResidualEquations(inRemovedInitialEquationLst, uniqueEqIndex, tempVars, inBackendDAE.shared.functionTree);
//removedInitialEquations := listReverse(removedInitialEquations);
Expand Down Expand Up @@ -1343,7 +1354,7 @@ algorithm
{},
{},
initialEquations,
{},
initialEquations_lambda0,
removedInitialEquations,
startValueEquations,
nominalValueEquations,
Expand Down

0 comments on commit c67fe97

Please sign in to comment.