Skip to content

Commit

Permalink
- fix #2204
Browse files Browse the repository at this point in the history
git-svn-id: https://openmodelica.org/svn/OpenModelica/trunk@16433 f25d12d1-65f4-0310-ae8a-bbce733d8d8e
  • Loading branch information
lochel committed Jun 21, 2013
1 parent a3e1a2a commit 960b411
Show file tree
Hide file tree
Showing 5 changed files with 137 additions and 7 deletions.
4 changes: 2 additions & 2 deletions Compiler/BackEnd/BackendDAEUtil.mo
Expand Up @@ -8014,7 +8014,7 @@ algorithm
Debug.execStat("expandAlgorithmsbyInitStmts",CevalScript.RT_CLOCK_EXECSTAT_BACKEND_MODULES);
Debug.fcall2(Flags.DUMP_INDX_DAE, BackendDump.dumpBackendDAE, outSODE, "dumpindxdae");
Debug.fcall(Flags.DUMP_BACKENDDAE_INFO, BackendDump.dumpCompShort, outSODE);
Debug.fcall(Flags.DUMP_EQNINORDER, BackendDump.dumpEqnsSolved, outSODE);
Debug.fcall2(Flags.DUMP_EQNINORDER, BackendDump.dumpEqnsSolved, outSODE, "indxdae: eqns in order");
checkBackendDAEWithErrorMsg(outSODE);
end getSolvedSystem;

Expand Down Expand Up @@ -8462,7 +8462,7 @@ algorithm

Debug.fcall2(Flags.DUMP_INDX_DAE, BackendDump.dumpBackendDAE, outSODE, "dumpindxdae");
Debug.fcall(Flags.DUMP_BACKENDDAE_INFO, BackendDump.dumpCompShort, outSODE);
Debug.fcall(Flags.DUMP_EQNINORDER, BackendDump.dumpEqnsSolved, outSODE);
Debug.fcall2(Flags.DUMP_EQNINORDER, BackendDump.dumpEqnsSolved, outSODE, "system for jacobians");
end getSolvedSystemforJacobians;

/*************************************************
Expand Down
3 changes: 3 additions & 0 deletions Compiler/BackEnd/BackendDump.mo
Expand Up @@ -726,11 +726,14 @@ end dumpBackendDAEVarList;
public function dumpEqnsSolved "function dumpEqnsSolved
This function dumps the equations in the order they have to be calculate."
input BackendDAE.BackendDAE inBackendDAE;
input String heading;
protected
BackendDAE.EqSystems eqs;
algorithm
print("\n" +& heading +& "\n" +& UNDERLINE +& "\n");
BackendDAE.DAE(eqs=eqs) := inBackendDAE;
List.map_0(eqs, dumpEqnsSolved1);
print("\n");
end dumpEqnsSolved;

protected function dumpEqnsSolved1 "function dumpEqnsSolved1
Expand Down
3 changes: 1 addition & 2 deletions Compiler/BackEnd/BackendVariable.mo
Expand Up @@ -254,8 +254,7 @@ algorithm
end match;
end setVarStartValue;

public function setVarStartValueOption
"function: setVarStartValueOption
public function setVarStartValueOption "function setVarStartValueOption
author: Frenkel TUD
Sets the start value attribute of a variable."
input BackendDAE.Var inVar;
Expand Down
132 changes: 130 additions & 2 deletions Compiler/BackEnd/Initialization.mo
Expand Up @@ -188,11 +188,13 @@ algorithm

// simplify system
(initdae, Util.SUCCESS()) = BackendDAEUtil.pastoptimiseDAE(initdae, pastOptModules, matchingAlgorithm, daeHandler);

Debug.fcall2(Flags.DUMP_INITIAL_SYSTEM, BackendDump.dumpBackendDAE, initdae, "solved initial system");

// warn about iteration variables with default zero start attribute
Debug.fcall(Flags.INITIALIZATION, warnAboutIterationVariablesWithDefaultZeroStartAttribute, initdae);

b = Flags.isSet(Flags.DUMP_EQNINORDER) and Flags.isSet(Flags.DUMP_INITIAL_SYSTEM);
Debug.bcall(b, BackendDump.dumpEqnsSolved, initdae);
Debug.bcall2(b, BackendDump.dumpEqnsSolved, initdae, "initial system: eqns in order");
then SOME(initdae);

else then NONE();
Expand Down Expand Up @@ -649,6 +651,132 @@ algorithm
outTpl := (e, hs);
end collectPreVariablesEquation;

// =============================================================================
// warn about iteration variables with default zero start attribute
//
// =============================================================================

public function warnAboutIterationVariablesWithDefaultZeroStartAttribute "function warnAboutIterationVariablesWithDefaultZeroStartAttribute
author: lochel
This function ... read the function name."
input BackendDAE.BackendDAE inBackendDAE;
protected
BackendDAE.EqSystems eqs;
algorithm
BackendDAE.DAE(eqs=eqs) := inBackendDAE;
List.map_0(eqs, warnAboutIterationVariablesWithDefaultZeroStartAttribute1);
end warnAboutIterationVariablesWithDefaultZeroStartAttribute;

protected function warnAboutIterationVariablesWithDefaultZeroStartAttribute1 "function warnAboutIterationVariablesWithDefaultZeroStartAttribute1
author: lochel"
input BackendDAE.EqSystem inEqSystem;
protected
BackendDAE.Variables vars;
BackendDAE.StrongComponents comps;
algorithm
BackendDAE.EQSYSTEM(orderedVars=vars,
matching=BackendDAE.MATCHING(comps=comps)) := inEqSystem;
warnAboutIterationVariablesWithDefaultZeroStartAttribute2(comps, vars);
end warnAboutIterationVariablesWithDefaultZeroStartAttribute1;

protected function warnAboutIterationVariablesWithDefaultZeroStartAttribute2 "function warnAboutIterationVariablesWithDefaultZeroStartAttribute2
author: lochel"
input BackendDAE.StrongComponents inComps;
input BackendDAE.Variables inVars;
algorithm
_ := matchcontinue(inComps, inVars)
local
BackendDAE.StrongComponents rest;
list<BackendDAE.Var> varlst;
list<Integer> vlst;
Boolean linear;
String str;

case ({}, _) then ();

case (BackendDAE.MIXEDEQUATIONSYSTEM(disc_vars=vlst)::rest, _) equation
varlst = List.map1r(vlst, BackendVariable.getVarAt, inVars);
varlst = filterVarsWithoutStartValue(varlst);
false = List.isEmpty(varlst);

Error.addCompilerWarning("Iteration variables with default zero start attribute in mixed equation system:");
warnAboutVars(varlst);
warnAboutIterationVariablesWithDefaultZeroStartAttribute2(rest, inVars);
then ();

case (BackendDAE.EQUATIONSYSTEM(vars=vlst)::rest, _) equation
varlst = List.map1r(vlst, BackendVariable.getVarAt, inVars);
varlst = filterVarsWithoutStartValue(varlst);
false = List.isEmpty(varlst);

Error.addCompilerWarning("Iteration variables with default zero start attribute in equation system:");
warnAboutVars(varlst);
warnAboutIterationVariablesWithDefaultZeroStartAttribute2(rest, inVars);
then ();

case (BackendDAE.TORNSYSTEM(tearingvars=vlst, linear=linear)::rest, _) equation
varlst = List.map1r(vlst, BackendVariable.getVarAt, inVars);
varlst = filterVarsWithoutStartValue(varlst);
false = List.isEmpty(varlst);

str = Util.if_(linear, "linear", "nonlinear");
Error.addCompilerWarning("Iteration variables with default zero start attribute in torn " +& str +& "equation system:");
warnAboutVars(varlst);
warnAboutIterationVariablesWithDefaultZeroStartAttribute2(rest, inVars);
then ();

case (_::rest, _) equation
warnAboutIterationVariablesWithDefaultZeroStartAttribute2(rest, inVars);
then ();
end matchcontinue;
end warnAboutIterationVariablesWithDefaultZeroStartAttribute2;

function filterVarsWithoutStartValue "function filterVarsWithoutStartValue
author: lochel"
input list<BackendDAE.Var> inVars;
output list<BackendDAE.Var> outVars;
algorithm
outVars := matchcontinue(inVars)
local
BackendDAE.Var v;
list<BackendDAE.Var> vars;

case ({}) then {};

case (v::vars) equation
_ = BackendVariable.varStartValueFail(v);
vars = filterVarsWithoutStartValue(vars);
then vars;

case (v::vars) equation
vars = filterVarsWithoutStartValue(vars);
then v::vars;

else then fail();
end matchcontinue;
end filterVarsWithoutStartValue;

function warnAboutVars "function warnAboutVars
author: lochel"
input list<BackendDAE.Var> inVars;
algorithm
_ := match(inVars)
local
BackendDAE.Var v;
list<BackendDAE.Var> vars;
String crStr;

case ({}) then ();

case (v::vars) equation
crStr = BackendDump.varString(v);
Error.addCompilerWarning(" " +& crStr);

warnAboutVars(vars);
then ();
end match;
end warnAboutVars;

// =============================================================================
// section for selecting initialization variables
//
Expand Down
2 changes: 1 addition & 1 deletion Compiler/BackEnd/SimCodeUtil.mo
Expand Up @@ -6791,7 +6791,7 @@ algorithm
syst = BackendDAEUtil.setEqSystemMatching(syst, BackendDAE.MATCHING(v1, v2, {}));
(syst, comps) = BackendDAETransform.strongComponents(syst, shared);
paramdlow = BackendDAE.DAE({syst}, shared);
Debug.fcall(Flags.PARAM_DLOW_DUMP, BackendDump.dumpEqnsSolved, paramdlow);
Debug.fcall2(Flags.PARAM_DLOW_DUMP, BackendDump.dumpEqnsSolved, paramdlow, "parameters: eqns in order");
(parameterEquations, _, uniqueEqIndex, _) = createEquations(false, false, true, false, false, syst, shared, comps, iuniqueEqIndex, {});

ialgs = BackendEquation.traverseBackendDAEEqns(ie, traverseAlgorithmFinder, {});
Expand Down

0 comments on commit 960b411

Please sign in to comment.