@@ -81,7 +81,6 @@ public uniontype Graph
8181end Graph ;
8282
8383
84-
8584public function createTaskGraph
8685 input BackendDAE . BackendDAE inDAE;
8786
@@ -90,6 +89,7 @@ algorithm
9089 (_,_) := BackendDAEUtil . mapEqSystemAndFold(inDAE, createTaskGraph0, false );
9190end createTaskGraph;
9291
92+
9393protected 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
160159end 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
164163author: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;
233245end 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+
235280protected function prepareXML " map-function for deletion of forbidden chars from given string
236281author: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;
314366end 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;
664728end 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