Skip to content

Commit

Permalink
- added function to dump a bipartite graph as GraphML for a set of eq…
Browse files Browse the repository at this point in the history
…uations and vars.

git-svn-id: https://openmodelica.org/svn/OpenModelica/trunk@18536 f25d12d1-65f4-0310-ae8a-bbce733d8d8e
  • Loading branch information
Volker Waurich committed Dec 20, 2013
1 parent 34d1ef0 commit e36d657
Showing 1 changed file with 27 additions and 0 deletions.
27 changes: 27 additions & 0 deletions Compiler/BackEnd/HpcOmEqSystems.mo
Original file line number Diff line number Diff line change
Expand Up @@ -1814,9 +1814,11 @@ case(_,BackendDAE.EQUATIONSYSTEM(eqns=allEqs,vars=allVars, jac=_, jacType=_))
varLst = List.map1(allVars,List.getIndexFirst,varLst);
vars = BackendVariable.listVar(varLst);
mEqSys = arrayCreate(listLength(allVars), {});
//mEqSysT = arrayCreate(listLength(allVars), {});
numberOfEqs = BackendDAEUtil.equationArraySize(eqs);
numberOfVars = listLength(allVars);
(mEqSys,mEqSysT) = BackendDAEUtil.incidenceMatrixDispatch(vars,eqs,{},mEqSys, 0, numberOfEqs, intLt(0, numberOfEqs), BackendDAE.ABSOLUTE(), NONE());
//(mEqSys,mEqSysT) = BackendDAEUtil.incidenceMatrixDispatch(vars,eqs,{},mEqSysT, 0, numberOfEqs, intLt(0, numberOfEqs), BackendDAE.ABSOLUTE(), NONE());
BackendDump.dumpVariables(vars, "vars of the torn system");
BackendDump.dumpEquationArray(eqs,"eqs of the torn system");
BackendDump.dumpIncidenceMatrix(mEqSys);
Expand All @@ -1835,6 +1837,31 @@ case(_,BackendDAE.EQUATIONSYSTEM(eqns=allEqs,vars=allVars, jac=_, jacType=_))
end dumpEquationSystemGraphML;


public function dumpEquationSystemGraphML1
input BackendDAE.Variables varsIn;
input BackendDAE.EquationArray eqsIn;
input BackendDAE.IncidenceMatrix mIn;
input String name;
protected
Integer nameAttIdx,typeAttIdx, numberOfVars,numberOfEqs;
list<Integer> varRange,eqRange;
BackendDAE.IncidenceMatrix m;
GraphML.Graph graph;
algorithm
numberOfEqs := BackendDAEUtil.equationArraySize(eqsIn);
numberOfVars := BackendVariable.varsSize(varsIn);
varRange := List.intRange(numberOfVars);
eqRange := List.intRange(numberOfEqs);
graph := GraphML.getGraph("EqSystemGraph", true);
(typeAttIdx,graph) := GraphML.addAttribute("", "type", GraphML.TYPE_STRING(), GraphML.TARGET_NODE(), graph);
(nameAttIdx,graph) := GraphML.addAttribute("", "name", GraphML.TYPE_STRING(), GraphML.TARGET_NODE(), graph);
graph := List.fold2(varRange,addVarNodeToGraph,varsIn,{nameAttIdx,typeAttIdx}, graph);
graph := List.fold2(eqRange,addEqNodeToGraph,eqsIn,{nameAttIdx,typeAttIdx}, graph);
graph := List.fold1(eqRange,addEdgeToGraph,mIn,graph);
GraphML.dumpGraph(graph,name+&".graphml");
end dumpEquationSystemGraphML1;


protected function addEdgeToGraph "adds an edge to the graph by traversing the incidence matrix.
author:Waurich TUD 2013-12"
input Integer eqIdx;
Expand Down

0 comments on commit e36d657

Please sign in to comment.