Skip to content

Commit

Permalink
Adding initEquations_lambda0 to DAE
Browse files Browse the repository at this point in the history
  • Loading branch information
AnHeuermann authored and AnHeuermann committed Jan 22, 2021
1 parent 9220249 commit aafc860
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 6 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
24 changes: 19 additions & 5 deletions OMCompiler/Compiler/SimCode/SimCodeMain.mo
Expand Up @@ -1107,6 +1107,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 @@ -1153,7 +1154,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 @@ -1165,7 +1166,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 @@ -1198,6 +1199,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 @@ -1221,6 +1223,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 @@ -1255,7 +1258,9 @@ 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;
list<SimCode.SimEqSystem> initialEquations_lambda0;
list<SimCode.SimEqSystem> removedInitialEquations, jacobianEquations;
list<SimCodeVar.SimVar> jacobianSimvars, seedVars;
list<SimCode.SimEqSystem> startValueEquations; // --> updateBoundStartValues
list<SimCode.SimEqSystem> maxValueEquations; // --> updateBoundMaxValues
Expand Down Expand Up @@ -1293,7 +1298,14 @@ algorithm

// generate equations for initDAE
(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);
Expand Down Expand Up @@ -1338,6 +1350,8 @@ algorithm
SymbolicJacsNLS := {};
(initialEquations, modelInfo, SymbolicJacsTemp) := SimCodeUtil.addAlgebraicLoopsModelInfo(initialEquations, modelInfo);
SymbolicJacsNLS := listAppend(SymbolicJacsTemp, SymbolicJacsNLS);
(initialEquations_lambda0, modelInfo, SymbolicJacsTemp) := SimCodeUtil.addAlgebraicLoopsModelInfo(initialEquations_lambda0, modelInfo);
SymbolicJacsNLS := listAppend(SymbolicJacsTemp, SymbolicJacsNLS);
(parameterEquations, modelInfo, SymbolicJacsTemp) := SimCodeUtil.addAlgebraicLoopsModelInfo(parameterEquations, modelInfo);
SymbolicJacsNLS := listAppend(SymbolicJacsTemp, SymbolicJacsNLS);
// check for datareconciliation is present and pass the matrixnames
Expand Down Expand Up @@ -1422,7 +1436,7 @@ algorithm
algebraicEquations = {},
clockedPartitions = {},
initialEquations = initialEquations,
initialEquations_lambda0 = {},
initialEquations_lambda0 = initialEquations_lambda0,
removedInitialEquations = removedInitialEquations,
startValueEquations = startValueEquations,
nominalValueEquations = nominalValueEquations,
Expand Down

0 comments on commit aafc860

Please sign in to comment.