From fb1256521ac38cefb19d3c51bc283acf95e95872 Mon Sep 17 00:00:00 2001 From: mattijs <mattijs@hunt.opencfd.co.uk> Date: Thu, 30 Apr 2009 15:42:51 +0100 Subject: [PATCH] added options handling --- .../scotchDecomp/scotchDecomp.C | 128 +++++++++++++++--- 1 file changed, 109 insertions(+), 19 deletions(-) diff --git a/src/decompositionMethods/decompositionMethods/scotchDecomp/scotchDecomp.C b/src/decompositionMethods/decompositionMethods/scotchDecomp/scotchDecomp.C index 2746d8f4e9b..854172d5e15 100644 --- a/src/decompositionMethods/decompositionMethods/scotchDecomp/scotchDecomp.C +++ b/src/decompositionMethods/decompositionMethods/scotchDecomp/scotchDecomp.C @@ -22,7 +22,40 @@ License along with OpenFOAM; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -S Strat=b{job=t,map=t,poli=S,sep=(m{asc=b{bnd=d{pass=40,dif=1,rem=1}f{move=80,pass=-1,bal=0.005},org=f{move=80,pass=-1,bal=0.005},width=3},low=h{pass=10}f{move=80,pass=-1,bal=0.0005},type=h,vert=80,rat=0.8}|m{asc=b{bnd=d{pass=40,dif=1,rem=1}f{move=80,pass=-1,bal=0.005},org=f{move=80,pass=-1,bal=0.005},width=3},low=h{pass=10}f{move=80,pass=-1,bal=0.0005},type=h,vert=80,rat=0.8})} + Default strategy: + Strat=b + { + job=t, + map=t, + poli=S, + sep= + ( + m + { + asc=b + { + bnd=d{pass=40,dif=1,rem=1}f{move=80,pass=-1,bal=0.005}, + org=f{move=80,pass=-1,bal=0.005},width=3 + }, + low=h{pass=10}f{move=80,pass=-1,bal=0.0005}, + type=h, + vert=80, + rat=0.8 + } + | m + { + asc=b + { + bnd=d{pass=40,dif=1,rem=1}f{move=80,pass=-1,bal=0.005}, + org=f{move=80,pass=-1,bal=0.005}, + width=3}, + low=h{pass=10}f{move=80,pass=-1,bal=0.0005}, + type=h, + vert=80, + rat=0.8 + } + ) + } \*---------------------------------------------------------------------------*/ #include "scotchDecomp.H" @@ -31,6 +64,7 @@ S Strat=b{job=t,map=t,poli=S,sep=(m{asc=b{bnd=d{pass=40,dif=1,rem=1}f{move #include "IFstream.H" #include "Time.H" #include "cyclicPolyPatch.H" +#include "OFstream.H" extern "C" { @@ -113,46 +147,102 @@ Foam::label Foam::scotchDecomp::decompose check(SCOTCH_graphCheck(&grafdat), "SCOTCH_graphCheck"); + // Dump graph + if (decompositionDict_.found("scotchCoeffs")) + { + const dictionary& scotchCoeffs = + decompositionDict_.subDict("scotchCoeffs"); - //// Architecture - //// ~~~~~~~~~~~~ - //// (fully connected network topology since using switch) - // - //SCOTCH_Arch archdat; - //check(SCOTCH_archInit(&archdat), "SCOTCH_archInit"); - //check - //( - // // SCOTCH_archCmpltw for weighted. - // SCOTCH_archCmplt(&archdat, nProcessors_), - // "SCOTCH_archCmplt" - //); + Switch writeGraph(scotchCoeffs.lookup("writeGraph")); + if (writeGraph) + { + OFstream str(mesh_.time().path() / mesh_.name() + ".grf"); + + Info<< "Dumping Scotch graph file to " << str.name() << endl + << "Use this in combination with gpart." << endl; + + label version = 0; + str << version << nl; + // Numer of vertices + str << xadj.size()-1 << ' ' << adjncy.size() << nl; + // Numbering starts from 0 + label baseval = 0; + // Has weights? + label hasEdgeWeights = 0; + label hasVertexWeights = 0; + label numericflag = 10*hasEdgeWeights+hasVertexWeights; + str << baseval << ' ' << numericflag << nl; + for (label cellI = 0; cellI < xadj.size()-1; cellI++) + { + label start = xadj[cellI]; + label end = xadj[cellI+1]; + str << end-start; + + for (label i = start; i < end; i++) + { + str << ' ' << adjncy[i]; + } + str << nl; + } + } + } + // Architecture + // ~~~~~~~~~~~~ + // (fully connected network topology since using switch) + + SCOTCH_Arch archdat; + check(SCOTCH_archInit(&archdat), "SCOTCH_archInit"); + check + ( + // SCOTCH_archCmpltw for weighted. + SCOTCH_archCmplt(&archdat, nProcessors_), + "SCOTCH_archCmplt" + ); + //SCOTCH_Mapping mapdat; //SCOTCH_graphMapInit(&grafdat, &mapdat, &archdat, NULL); //SCOTCH_graphMapCompute(&grafdat, &mapdat, &stradat); /* Perform mapping */ + //SCOTCH_graphMapExit(&grafdat, &mapdat); - + finalDecomp.setSize(xadj.size()-1); + finalDecomp = 0; check ( - SCOTCH_graphPart + SCOTCH_graphMap ( &grafdat, - nProcessors_, // partnbr + &archdat, &stradat, // const SCOTCH_Strat * finalDecomp.begin() // parttab ), - "SCOTCH_graphPart" + "SCOTCH_graphMap" ); + + //finalDecomp.setSize(xadj.size()-1); + //check + //( + // SCOTCH_graphPart + // ( + // &grafdat, + // nProcessors_, // partnbr + // &stradat, // const SCOTCH_Strat * + // finalDecomp.begin() // parttab + // ), + // "SCOTCH_graphPart" + //); + // Release storage for graph SCOTCH_graphExit(&grafdat); + // Release storage for strategy SCOTCH_stratExit(&stradat); - //// Release storage for network topology - //SCOTCH_archExit(&archdat); + // Release storage for network topology + SCOTCH_archExit(&archdat); return 0; } -- GitLab