Skip to content

Commit bcaed16

Browse files
author
Volker Waurich
committed
TaskGraph can handle SingleWhenEquations, improved eqDesc
git-svn-id: https://openmodelica.org/svn/OpenModelica/trunk@16315 f25d12d1-65f4-0310-ae8a-bbce733d8d8e
1 parent cbf92e8 commit bcaed16

File tree

1 file changed

+82
-19
lines changed

1 file changed

+82
-19
lines changed

Compiler/BackEnd/HpcOmTaskGraph.mo

Lines changed: 82 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,6 @@ public uniontype Graph
8181
end Graph;
8282

8383

84-
8584
public function createTaskGraph
8685
input BackendDAE.BackendDAE inDAE;
8786

@@ -90,6 +89,7 @@ algorithm
9089
(_,_) := BackendDAEUtil.mapEqSystemAndFold(inDAE, createTaskGraph0, false);
9190
end createTaskGraph;
9291

92+
9393
protected function createTaskGraph0
9494

9595
input BackendDAE.EqSystem isyst;
@@ -108,7 +108,6 @@ algorithm
108108
Integer numberOfVars;
109109
array<Integer> varSccMapping; //Map each variable to the scc which solves her
110110
list<String> eqDescs;
111-
112111
case (BackendDAE.EQSYSTEM(matching=BackendDAE.MATCHING(comps=comps), orderedVars=BackendDAE.VARIABLES(numberOfVars=numberOfVars)),(BackendDAE.SHARED(functionTree=sharedFuncs),_))
113112
equation
114113
varSccMapping = createVarSccMapping(comps, numberOfVars);
@@ -160,7 +159,7 @@ algorithm
160159
end createTaskGraph1;
161160

162161

163-
protected function getEquationStrings " gets the equation for every StrongComponent
162+
protected function getEquationStrings " gets the equation and the variable its solved for for every StrongComponent
164163
author:Waurich TUD 2013-06"
165164
input BackendDAE.StrongComponents iComps;
166165
input BackendDAE.EqSystem iEqSystem;
@@ -184,6 +183,7 @@ algorithm
184183
Integer v;
185184
List<BackendDAE.Equation> eqnLst;
186185
List<BackendDAE.Var> varLst;
186+
array<Integer> ass2;
187187
List<Integer> es;
188188
List<Integer> vs;
189189
List<String> descLst;
@@ -194,44 +194,89 @@ algorithm
194194
String desc;
195195
Option<list<tuple<Integer, Integer, BackendDAE.Equation>>> jac;
196196
BackendDAE.JacobianType jacT;
197-
BackendDAE.EquationArray orderedEqs;
197+
BackendDAE.EquationArray orderedEqs;
198198
BackendDAE.Variables orderedVars;
199199
BackendDAE.Equation eqn;
200200
BackendDAE.Var var;
201-
case(BackendDAE.SINGLEEQUATION(eqn = i, var = v), BackendDAE.EQSYSTEM(orderedEqs = orderedEqs, orderedVars = orderedVars),_)
201+
case(BackendDAE.SINGLEEQUATION(eqn = i, var = v), BackendDAE.EQSYSTEM(orderedEqs = orderedEqs, orderedVars = orderedVars),_)
202202
equation
203-
eqnLst = BackendEquation.equationList(orderedEqs); //get the equation string
203+
//get the equation string
204+
eqnLst = BackendEquation.equationList(orderedEqs);
204205
eqn = listGet(eqnLst,i);
205206
eqString = BackendDump.equationString(eqn);
206207
eqDescLst = stringListStringChar(eqString);
207208
eqDescLst = List.map(eqDescLst,prepareXML);
208209
eqString =stringCharListString(eqDescLst);
209-
print("eq"+&intString(i)+&" var"+&intString(v)+&"\n");
210-
//// check matching between vars and eqs!!!!!!!!!!!!!!!!/////////////////////////
211-
212-
varLst = BackendVariable.varList(orderedVars); //get the variable string
210+
//get the variable string
211+
varLst = BackendVariable.varList(orderedVars);
213212
var = listGet(varLst,v);
214-
varString = BackendDump.varString(var);
215-
varDescLst = stringListStringChar(varString);
216-
varDescLst = shortenVarString(varDescLst);
217-
varString =stringCharListString(varDescLst);
213+
varString = getVarString(var);
218214
desc = (eqString +& " FOR " +& varString);
219215
descLst = desc::iEqDesc;
220216
then descLst;
221217
case(BackendDAE.EQUATIONSYSTEM(eqns = es, vars = vs, jac = jac, jacType = jacT), BackendDAE.EQSYSTEM(orderedEqs = orderedEqs, orderedVars = orderedVars),_)
222-
equation
218+
equation
223219
eqnLst = BackendEquation.equationList(orderedEqs);
224220
desc = ("Equation System");
225221
descLst = desc::iEqDesc;
226222
then descLst;
223+
case(BackendDAE.SINGLEWHENEQUATION(eqn = i, vars = vs), BackendDAE.EQSYSTEM(orderedEqs = orderedEqs, orderedVars = orderedVars, matching= BackendDAE.MATCHING(ass2 = ass2)),_)
224+
equation
225+
//get the equation string
226+
eqnLst = BackendEquation.equationList(orderedEqs);
227+
eqn = listGet(eqnLst,i);
228+
eqString = BackendDump.equationString(eqn);
229+
eqDescLst = stringListStringChar(eqString);
230+
eqDescLst = List.map(eqDescLst,prepareXML);
231+
eqString =stringCharListString(eqDescLst);
232+
//get the variable string
233+
varLst = BackendVariable.varList(orderedVars);
234+
var = listGet(varLst,arrayGet(ass2,i));
235+
varString = getVarString(var);
236+
desc = (eqString +& " FOR " +& varString);
237+
descLst = desc::iEqDesc;
238+
then descLst;
227239
else
228-
equation
229-
desc = ("no singleEquation");
230-
descLst = desc::iEqDesc;
240+
equation
241+
desc = ("no singleEquation");
242+
descLst = desc::iEqDesc;
231243
then descLst;
232244
end matchcontinue;
233245
end getEquationStrings2;
234246

247+
248+
protected function getVarString "get the var string for a given variable. shortens the String. if necessary insert der operator
249+
author:waurich TUD 2013-06"
250+
input BackendDAE.Var inVar;
251+
output String varString;
252+
algorithm
253+
varString := matchcontinue(inVar)
254+
local
255+
BackendDAE.VarKind kind;
256+
list<String> varDescLst;
257+
case(_)
258+
equation
259+
true = BackendVariable.isNonStateVar(inVar);
260+
varString = BackendDump.varString(inVar);
261+
varDescLst = stringListStringChar(varString);
262+
varDescLst = shortenVarString(varDescLst);
263+
varString = stringCharListString(varDescLst);
264+
then
265+
varString;
266+
case(_)
267+
equation
268+
false = BackendVariable.isNonStateVar(inVar);
269+
varString = BackendDump.varString(inVar);
270+
varDescLst = stringListStringChar(varString);
271+
varDescLst = shortenVarString(varDescLst);
272+
varString = stringCharListString(varDescLst);
273+
varString = (" der(" +& varString +& ")");
274+
then
275+
varString;
276+
end matchcontinue;
277+
end getVarString;
278+
279+
235280
protected function prepareXML " map-function for deletion of forbidden chars from given string
236281
author:Waurich TUD 2013-06"
237282
input String iString;
@@ -310,6 +355,13 @@ algorithm
310355
tmpVars = List.filter1OnTrue(tmpVars, isTupleMember, varIdc);
311356
print(List.toString(tmpVars, tupleToString, "Component " +& BackendDump.strongComponentString(component) +& " unsolved vars_post", "{", ";", "}", true) +& "\n");
312357
then tmpVars;
358+
case(BackendDAE.SINGLEWHENEQUATION(vars=varIdc),_)
359+
equation
360+
tmpVars = getVarsBySCC(component, incidenceMatrix);
361+
print(List.toString(tmpVars, tupleToString, "Component " +& BackendDump.strongComponentString(component) +& " unsolved vars_pre", "{", ";", "}", true) +& "\n");
362+
tmpVars = List.filter1OnTrue(tmpVars, isTupleMember, varIdc);
363+
print(List.toString(tmpVars, tupleToString, "Component " +& BackendDump.strongComponentString(component) +& " unsolved vars_post", "{", ";", "}", true) +& "\n");
364+
then tmpVars;
313365
end matchcontinue;
314366
end getUnsolvedVarsBySCC;
315367

@@ -376,6 +428,13 @@ algorithm
376428
eqnVars = List.flatten(List.map1(eqns, getVarsByEqn, incidenceMatrix));
377429
//print("Error in createTaskGraph1! Unsupported component-type Equationsystem with jacType varying.\n");
378430
then eqnVars;
431+
case (BackendDAE.SINGLEWHENEQUATION(eqn=eqnIdx),_)
432+
equation
433+
eqnVars = getVarsByEqn(eqnIdx,incidenceMatrix);
434+
dumpStr = List.toString(eqnVars, tupleToString, "", "{", ";", "}", true);
435+
print("Eqn " +& intString(eqnIdx) +& " vars: " +& dumpStr +& "\n");
436+
//print("Error in createTaskGraph1! Unsupported component-type Equationsystem with jacType varying.\n");
437+
then eqnVars;
379438
else
380439
equation
381440
print("Error in createTaskGraph1! Unsupported component-type \n");
@@ -524,6 +583,10 @@ algorithm
524583
equation
525584
tmpVarSccMapping = List.fold1(compVarIdc,updateMapping,iSccIdx,varSccMapping);
526585
then iSccIdx+1;
586+
case(BackendDAE.SINGLEWHENEQUATION(vars = compVarIdc),_,_)
587+
equation
588+
tmpVarSccMapping = List.fold1(compVarIdc,updateMapping,iSccIdx,varSccMapping);
589+
then iSccIdx+1;
527590
else
528591
equation
529592
print("createVarSccMapping0 - Unsupported component-type.");
@@ -659,6 +722,7 @@ algorithm
659722
String name;
660723
list<Variable> variables;
661724
case(_, GRAPH(name = name, components = components, variables = variables))
725+
equation
662726
then GRAPH(name, component::components, variables);
663727
end match;
664728
end addSccToGraph;
@@ -717,7 +781,6 @@ algorithm
717781
GraphML.Graph tmpGraph;
718782
case(STRONGCONNECTEDCOMPONENT(text=compText,compIdx=compIdx, dependencySCCs=dependencySCCs, description=nodeDesc),_)
719783
equation
720-
//nodeDesc = intString(compIdx); // just for debug
721784
tmpGraph = GraphML.addNode("Component" +& intString(compIdx), compText, GraphML.COLOR_GREEN, GraphML.RECTANGLE(), SOME(nodeDesc), iGraph);
722785
tmpGraph = List.fold1(dependencySCCs, addSccDepToGraph, compIdx, tmpGraph);
723786
then tmpGraph;

0 commit comments

Comments
 (0)