Skip to content

Commit

Permalink
- #3138: add assertions for not dependent parameters
Browse files Browse the repository at this point in the history
git-svn-id: https://openmodelica.org/svn/OpenModelica/trunk@24474 f25d12d1-65f4-0310-ae8a-bbce733d8d8e
  • Loading branch information
lochel committed Feb 7, 2015
1 parent 9e45cdf commit 0bb85f6
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 9 deletions.
9 changes: 7 additions & 2 deletions Compiler/BackEnd/Initialization.mo
Expand Up @@ -84,6 +84,7 @@ public function solveInitialSystem "author: lochel
output Boolean outUseHomotopy;
output list<BackendDAE.Equation> outRemovedInitialEquations;
output list<BackendDAE.Var> outPrimaryParameters "already sorted";
output list<BackendDAE.Var> outAllPrimaryParameters "already sorted";
protected
BackendDAE.BackendDAE dae;
BackendDAE.Variables initVars;
Expand Down Expand Up @@ -114,7 +115,7 @@ algorithm
dae := inlineWhenForInitialization(inDAE);
// fcall2(Flags.DUMP_INITIAL_SYSTEM, BackendDump.dumpBackendDAE, dae, "inlineWhenForInitialization");

(initVars, outPrimaryParameters) := selectInitializationVariablesDAE(dae);
(initVars, outPrimaryParameters, outAllPrimaryParameters) := selectInitializationVariablesDAE(dae);
// fcall2(Flags.DUMP_INITIAL_SYSTEM, BackendDump.dumpVariables, initVars, "selected initialization variables");
hs := collectPreVariables(dae);
BackendDAE.DAE(systs, shared as BackendDAE.SHARED(knownVars=knvars,
Expand Down Expand Up @@ -262,6 +263,7 @@ algorithm
outUseHomotopy := false;
outRemovedInitialEquations := {};
outPrimaryParameters := {};
outAllPrimaryParameters := {};
end try;
end solveInitialSystem;

Expand Down Expand Up @@ -839,6 +841,7 @@ protected function selectInitializationVariablesDAE "author: lochel
input BackendDAE.BackendDAE inDAE;
output BackendDAE.Variables outVars;
output list<BackendDAE.Var> outPrimaryParameters := {};
output list<BackendDAE.Var> outAllPrimaryParameters := {};
protected
list<BackendDAE.EqSystem> systs;
BackendDAE.Variables knownVars, alias, allParameters;
Expand Down Expand Up @@ -875,7 +878,7 @@ algorithm
// BackendDump.dumpIncidenceMatrix(m);
// BackendDump.dumpIncidenceMatrix(mT);

// match the system (nVars+nAddVars == nEqns+nAddEqs)
// match the system
ass1 := arrayCreate(nParam, -1);
ass2 := arrayCreate(nParam, -1);
Matching.matchingExternalsetIncidenceMatrix(nParam, nParam, m);
Expand Down Expand Up @@ -905,6 +908,7 @@ algorithm
if 1 == secondary[j] then
outVars := BackendVariable.addVar(p, outVars);
else
outAllPrimaryParameters := p::outAllPrimaryParameters;
try
bindExp := BackendVariable.varBindExpStartValue(p);
if not Expression.isConst(bindExp) then
Expand All @@ -916,6 +920,7 @@ algorithm
end for;

outPrimaryParameters := listReverse(outPrimaryParameters);
outAllPrimaryParameters := listReverse(outAllPrimaryParameters);
end if;
end selectInitializationVariablesDAE;

Expand Down
17 changes: 10 additions & 7 deletions Compiler/SimCode/SimCodeUtil.mo
Expand Up @@ -1547,6 +1547,7 @@ algorithm
Integer highestSimEqIndex;
SimCode.BackendMapping backendMapping;
list<BackendDAE.Var> primaryParameters "already sorted";
list<BackendDAE.Var> allPrimaryParameters "already sorted";

case (dlow, class_, _, fileDir, _,_, _, _, _, _, _, _, _) equation
System.tmpTickReset(0);
Expand All @@ -1558,7 +1559,7 @@ algorithm
// fcall(Flags.FAILTRACE, print, "is that Cpp? : " + Dump.printBoolStr(ifcpp) + "\n");

// generate initDAE before replacing pre(alias)!
(initDAE, useHomotopy, removedInitialEquationLst, primaryParameters) = Initialization.solveInitialSystem(dlow);
(initDAE, useHomotopy, removedInitialEquationLst, primaryParameters, allPrimaryParameters) = Initialization.solveInitialSystem(dlow);

if Flags.isSet(Flags.ITERATION_VARS) then
BackendDAEOptimize.listAllIterationVariables(dlow);
Expand Down Expand Up @@ -1604,7 +1605,7 @@ algorithm
((uniqueEqIndex, minValueEquations)) = BackendDAEUtil.foldEqSystem(dlow, createMinValueEquations, (uniqueEqIndex, {}));
((uniqueEqIndex, maxValueEquations)) = BackendDAEUtil.foldEqSystem(dlow, createMaxValueEquations, (uniqueEqIndex, {}));
((uniqueEqIndex, parameterEquations)) = BackendDAEUtil.foldEqSystem(dlow, createVarNominalAssertFromVars, (uniqueEqIndex, {}));
(uniqueEqIndex, parameterEquations) = createParameterEquations(uniqueEqIndex, parameterEquations, primaryParameters);
(uniqueEqIndex, parameterEquations) = createParameterEquations(uniqueEqIndex, parameterEquations, primaryParameters, allPrimaryParameters);

((uniqueEqIndex, algorithmAndEquationAsserts)) = BackendDAEUtil.foldEqSystem(dlow, createAlgorithmAndEquationAsserts, (uniqueEqIndex, {}));
discreteModelVars = BackendDAEUtil.foldEqSystem(dlow, extractDiscreteModelVars, {});
Expand Down Expand Up @@ -6656,11 +6657,12 @@ protected function createParameterEquations
input Integer inUniqueEqIndex;
input list<SimCode.SimEqSystem> acc;
input list<BackendDAE.Var> inPrimaryParameters "already sorted";
input list<BackendDAE.Var> inAllPrimaryParameters "already sorted";
output Integer outUniqueEqIndex := inUniqueEqIndex;
output list<SimCode.SimEqSystem> outParameterEquations := {};
protected
list<SimCode.SimEqSystem> simvarasserts;
list<DAE.Algorithm> varasserts := {};
list<DAE.Algorithm> varasserts;
list<DAE.Algorithm> varasserts2;
BackendDAE.Var p;
SimCode.SimEqSystem simEq;
Expand All @@ -6672,14 +6674,15 @@ algorithm
for p in inPrimaryParameters loop
(simEq, outUniqueEqIndex) := makeSolved_SES_SIMPLE_ASSIGN_fromStartValue(p, outUniqueEqIndex);
outParameterEquations := simEq::outParameterEquations;

// get min/max and nominal asserts
varasserts2 := createVarAsserts(p);
varasserts := listAppend(varasserts, varasserts2);
end for;
outParameterEquations := listReverse(outParameterEquations);

// get min/max and nominal asserts
varasserts := {};
for p in inAllPrimaryParameters loop
varasserts2 := createVarAsserts(p);
varasserts := listAppend(varasserts, varasserts2);
end for;
(simvarasserts, outUniqueEqIndex) := List.mapFold(varasserts, dlowAlgToSimEqSystem, outUniqueEqIndex);

outParameterEquations := listAppend(outParameterEquations, simvarasserts);
Expand Down

0 comments on commit 0bb85f6

Please sign in to comment.