/* * Copyright 1997, Regents of the University of Minnesota * * proto.h * * This file contains header files * * Started 10/19/95 * George * * $Id: proto.h,v 1.1 1998/11/27 17:59:28 karypis Exp $ * */ /* Modified 2 July 2001 by JRG to compile for Windows under lcc: * changed "log2" to "logtwo" */ /* balance.c */ void Balance2Way(CtrlType *, GraphType *, int *, float); void Bnd2WayBalance(CtrlType *, GraphType *, int *); void General2WayBalance(CtrlType *, GraphType *, int *); /* bucketsort.c */ void BucketSortKeysInc(int, int, idxtype *, idxtype *, idxtype *); /* ccgraph.c */ void CreateCoarseGraph(CtrlType *, GraphType *, int, idxtype *, idxtype *); void CreateCoarseGraphNoMask(CtrlType *, GraphType *, int, idxtype *, idxtype *); void CreateCoarseGraph_NVW(CtrlType *, GraphType *, int, idxtype *, idxtype *); GraphType *SetUpCoarseGraph(GraphType *, int, int); void ReAdjustMemory(GraphType *, GraphType *, int); /* coarsen.c */ GraphType *Coarsen2Way(CtrlType *, GraphType *); /* compress.c */ void CompressGraph(CtrlType *, GraphType *, int, idxtype *, idxtype *, idxtype *, idxtype *); void PruneGraph(CtrlType *, GraphType *, int, idxtype *, idxtype *, idxtype *, float); /* debug.c */ int ComputeCut(GraphType *, idxtype *); int CheckBnd(GraphType *); int CheckBnd2(GraphType *); int CheckNodeBnd(GraphType *, int); int CheckRInfo(RInfoType *); int CheckNodePartitionParams(GraphType *); int IsSeparable(GraphType *); /* estmem.c */ void METIS_EstimateMemory(int *, idxtype *, idxtype *, int *, int *, int *); void EstimateCFraction(int, idxtype *, idxtype *, float *, float *); int ComputeCoarseGraphSize(int, idxtype *, idxtype *, int, idxtype *, idxtype *, idxtype *); /* fm.c */ void FM_2WayEdgeRefine(CtrlType *, GraphType *, int *, int); /* fortran.c */ void Change2CNumbering(int, idxtype *, idxtype *); void Change2FNumbering(int, idxtype *, idxtype *, idxtype *); void Change2FNumbering2(int, idxtype *, idxtype *); void Change2FNumberingOrder(int, idxtype *, idxtype *, idxtype *, idxtype *); void ChangeMesh2CNumbering(int, idxtype *); void ChangeMesh2FNumbering(int, idxtype *, int, idxtype *, idxtype *); void ChangeMesh2FNumbering2(int, idxtype *, int, int, idxtype *, idxtype *); /* frename.c */ void METIS_PARTGRAPHRECURSIVE(int *, idxtype *, idxtype *, idxtype *, idxtype *, int *, int *, int *, int *, int *, idxtype *); void metis_partgraphrecursive(int *, idxtype *, idxtype *, idxtype *, idxtype *, int *, int *, int *, int *, int *, idxtype *); void metis_partgraphrecursive_(int *, idxtype *, idxtype *, idxtype *, idxtype *, int *, int *, int *, int *, int *, idxtype *); void metis_partgraphrecursive__(int *, idxtype *, idxtype *, idxtype *, idxtype *, int *, int *, int *, int *, int *, idxtype *); void METIS_WPARTGRAPHRECURSIVE(int *, idxtype *, idxtype *, idxtype *, idxtype *, int *, int *, int *, float *, int *, int *, idxtype *); void metis_wpartgraphrecursive(int *, idxtype *, idxtype *, idxtype *, idxtype *, int *, int *, int *, float *, int *, int *, idxtype *); void metis_wpartgraphrecursive_(int *, idxtype *, idxtype *, idxtype *, idxtype *, int *, int *, int *, float *, int *, int *, idxtype *); void metis_wpartgraphrecursive__(int *, idxtype *, idxtype *, idxtype *, idxtype *, int *, int *, int *, float *, int *, int *, idxtype *); void METIS_PARTGRAPHKWAY(int *, idxtype *, idxtype *, idxtype *, idxtype *, int *, int *, int *, int *, int *, idxtype *); void metis_partgraphkway(int *, idxtype *, idxtype *, idxtype *, idxtype *, int *, int *, int *, int *, int *, idxtype *); void metis_partgraphkway_(int *, idxtype *, idxtype *, idxtype *, idxtype *, int *, int *, int *, int *, int *, idxtype *); void metis_partgraphkway__(int *, idxtype *, idxtype *, idxtype *, idxtype *, int *, int *, int *, int *, int *, idxtype *); void METIS_WPARTGRAPHKWAY(int *, idxtype *, idxtype *, idxtype *, idxtype *, int *, int *, int *, float *, int *, int *, idxtype *); void metis_wpartgraphkway(int *, idxtype *, idxtype *, idxtype *, idxtype *, int *, int *, int *, float *, int *, int *, idxtype *); void metis_wpartgraphkway_(int *, idxtype *, idxtype *, idxtype *, idxtype *, int *, int *, int *, float *, int *, int *, idxtype *); void metis_wpartgraphkway__(int *, idxtype *, idxtype *, idxtype *, idxtype *, int *, int *, int *, float *, int *, int *, idxtype *); void METIS_EDGEND(int *, idxtype *, idxtype *, int *, int *, idxtype *, idxtype *); void metis_edgend(int *, idxtype *, idxtype *, int *, int *, idxtype *, idxtype *); void metis_edgend_(int *, idxtype *, idxtype *, int *, int *, idxtype *, idxtype *); void metis_edgend__(int *, idxtype *, idxtype *, int *, int *, idxtype *, idxtype *); void METIS_NODEND(int *, idxtype *, idxtype *, int *, int *, idxtype *, idxtype *); void metis_nodend(int *, idxtype *, idxtype *, int *, int *, idxtype *, idxtype *); void metis_nodend_(int *, idxtype *, idxtype *, int *, int *, idxtype *, idxtype *); void metis_nodend__(int *, idxtype *, idxtype *, int *, int *, idxtype *, idxtype *); void METIS_NODEWND(int *, idxtype *, idxtype *, idxtype *, int *, int *, idxtype *, idxtype *); void metis_nodewnd(int *, idxtype *, idxtype *, idxtype *, int *, int *, idxtype *, idxtype *); void metis_nodewnd_(int *, idxtype *, idxtype *, idxtype *, int *, int *, idxtype *, idxtype *); void metis_nodewnd__(int *, idxtype *, idxtype *, idxtype *, int *, int *, idxtype *, idxtype *); void METIS_PARTMESHNODAL(int *, int *, idxtype *, int *, int *, int *, int *, idxtype *, idxtype *); void metis_partmeshnodal(int *, int *, idxtype *, int *, int *, int *, int *, idxtype *, idxtype *); void metis_partmeshnodal_(int *, int *, idxtype *, int *, int *, int *, int *, idxtype *, idxtype *); void metis_partmeshnodal__(int *, int *, idxtype *, int *, int *, int *, int *, idxtype *, idxtype *); void METIS_PARTMESHDUAL(int *, int *, idxtype *, int *, int *, int *, int *, idxtype *, idxtype *); void metis_partmeshdual(int *, int *, idxtype *, int *, int *, int *, int *, idxtype *, idxtype *); void metis_partmeshdual_(int *, int *, idxtype *, int *, int *, int *, int *, idxtype *, idxtype *); void metis_partmeshdual__(int *, int *, idxtype *, int *, int *, int *, int *, idxtype *, idxtype *); void METIS_MESHTONODAL(int *, int *, idxtype *, int *, int *, idxtype *, idxtype *); void metis_meshtonodal(int *, int *, idxtype *, int *, int *, idxtype *, idxtype *); void metis_meshtonodal_(int *, int *, idxtype *, int *, int *, idxtype *, idxtype *); void metis_meshtonodal__(int *, int *, idxtype *, int *, int *, idxtype *, idxtype *); void METIS_MESHTODUAL(int *, int *, idxtype *, int *, int *, idxtype *, idxtype *); void metis_meshtodual(int *, int *, idxtype *, int *, int *, idxtype *, idxtype *); void metis_meshtodual_(int *, int *, idxtype *, int *, int *, idxtype *, idxtype *); void metis_meshtodual__(int *, int *, idxtype *, int *, int *, idxtype *, idxtype *); void METIS_ESTIMATEMEMORY(int *, idxtype *, idxtype *, int *, int *, int *); void metis_estimatememory(int *, idxtype *, idxtype *, int *, int *, int *); void metis_estimatememory_(int *, idxtype *, idxtype *, int *, int *, int *); void metis_estimatememory__(int *, idxtype *, idxtype *, int *, int *, int *); void METIS_MCPARTGRAPHRECURSIVE(int *, int *, idxtype *, idxtype *, idxtype *, idxtype *, int *, int *, int *, int *, int *, idxtype *); void metis_mcpartgraphrecursive(int *, int *, idxtype *, idxtype *, idxtype *, idxtype *, int *, int *, int *, int *, int *, idxtype *); void metis_mcpartgraphrecursive_(int *, int *, idxtype *, idxtype *, idxtype *, idxtype *, int *, int *, int *, int *, int *, idxtype *); void metis_mcpartgraphrecursive__(int *, int *, idxtype *, idxtype *, idxtype *, idxtype *, int *, int *, int *, int *, int *, idxtype *); void METIS_MCPARTGRAPHKWAY(int *, int *, idxtype *, idxtype *, idxtype *, idxtype *, int *, int *, int *, float *, int *, int *, idxtype *); void metis_mcpartgraphkway(int *, int *, idxtype *, idxtype *, idxtype *, idxtype *, int *, int *, int *, float *, int *, int *, idxtype *); void metis_mcpartgraphkway_(int *, int *, idxtype *, idxtype *, idxtype *, idxtype *, int *, int *, int *, float *, int *, int *, idxtype *); void metis_mcpartgraphkway__(int *, int *, idxtype *, idxtype *, idxtype *, idxtype *, int *, int *, int *, float *, int *, int *, idxtype *); void METIS_PARTGRAPHVKWAY(int *, idxtype *, idxtype *, idxtype *, idxtype *, int *, int *, int *, int *, int *, idxtype *); void metis_partgraphvkway(int *, idxtype *, idxtype *, idxtype *, idxtype *, int *, int *, int *, int *, int *, idxtype *); void metis_partgraphvkway_(int *, idxtype *, idxtype *, idxtype *, idxtype *, int *, int *, int *, int *, int *, idxtype *); void metis_partgraphvkway__(int *, idxtype *, idxtype *, idxtype *, idxtype *, int *, int *, int *, int *, int *, idxtype *); void METIS_WPARTGRAPHVKWAY(int *, idxtype *, idxtype *, idxtype *, idxtype *, int *, int *, int *, float *, int *, int *, idxtype *); void metis_wpartgraphvkway(int *, idxtype *, idxtype *, idxtype *, idxtype *, int *, int *, int *, float *, int *, int *, idxtype *); void metis_wpartgraphvkway_(int *, idxtype *, idxtype *, idxtype *, idxtype *, int *, int *, int *, float *, int *, int *, idxtype *); void metis_wpartgraphvkway__(int *, idxtype *, idxtype *, idxtype *, idxtype *, int *, int *, int *, float *, int *, int *, idxtype *); /* graph.c */ void SetUpGraph(GraphType *, int, int, int, idxtype *, idxtype *, idxtype *, idxtype *, int); void SetUpGraphKway(GraphType *, int, idxtype *, idxtype *); void SetUpGraph2(GraphType *, int, int, idxtype *, idxtype *, float *, idxtype *); void VolSetUpGraph(GraphType *, int, int, int, idxtype *, idxtype *, idxtype *, idxtype *, int); void RandomizeGraph(GraphType *); int IsConnectedSubdomain(CtrlType *, GraphType *, int, int); int IsConnected(CtrlType *, GraphType *, int); int IsConnected2(GraphType *, int); int FindComponents(CtrlType *, GraphType *, idxtype *, idxtype *); /* initpart.c */ void Init2WayPartition(CtrlType *, GraphType *, int *, float); void InitSeparator(CtrlType *, GraphType *, float); void GrowBisection(CtrlType *, GraphType *, int *, float); void GrowBisectionNode(CtrlType *, GraphType *, float); void RandomBisection(CtrlType *, GraphType *, int *, float); /* kmetis.c */ void METIS_PartGraphKway(int *, idxtype *, idxtype *, idxtype *, idxtype *, int *, int *, int *, int *, int *, idxtype *); void METIS_WPartGraphKway(int *, idxtype *, idxtype *, idxtype *, idxtype *, int *, int *, int *, float *, int *, int *, idxtype *); int MlevelKWayPartitioning(CtrlType *, GraphType *, int, idxtype *, float *, float); /* kvmetis.c */ void METIS_PartGraphVKway(int *, idxtype *, idxtype *, idxtype *, idxtype *, int *, int *, int *, int *, int *, idxtype *); void METIS_WPartGraphVKway(int *, idxtype *, idxtype *, idxtype *, idxtype *, int *, int *, int *, float *, int *, int *, idxtype *); int MlevelVolKWayPartitioning(CtrlType *, GraphType *, int, idxtype *, float *, float); /* kwayfm.c */ void Random_KWayEdgeRefine(CtrlType *, GraphType *, int, float *, float, int, int); void Greedy_KWayEdgeRefine(CtrlType *, GraphType *, int, float *, float, int); void Greedy_KWayEdgeBalance(CtrlType *, GraphType *, int, float *, float, int); /* kwayrefine.c */ void RefineKWay(CtrlType *, GraphType *, GraphType *, int, float *, float); void AllocateKWayPartitionMemory(CtrlType *, GraphType *, int); void ComputeKWayPartitionParams(CtrlType *, GraphType *, int); void ProjectKWayPartition(CtrlType *, GraphType *, int); int IsBalanced(idxtype *, int, float *, float); void ComputeKWayBoundary(CtrlType *, GraphType *, int); void ComputeKWayBalanceBoundary(CtrlType *, GraphType *, int); /* kwayvolfm.c */ void Random_KWayVolRefine(CtrlType *, GraphType *, int, float *, float, int, int); void Random_KWayVolRefineMConn(CtrlType *, GraphType *, int, float *, float, int, int); void Greedy_KWayVolBalance(CtrlType *, GraphType *, int, float *, float, int); void Greedy_KWayVolBalanceMConn(CtrlType *, GraphType *, int, float *, float, int); void KWayVolUpdate(CtrlType *, GraphType *, int, int, int, idxtype *, idxtype *, idxtype *); void ComputeKWayVolume(GraphType *, int, idxtype *, idxtype *, idxtype *); int ComputeVolume(GraphType *, idxtype *); void CheckVolKWayPartitionParams(CtrlType *, GraphType *, int); void ComputeVolSubDomainGraph(GraphType *, int, idxtype *, idxtype *); void EliminateVolSubDomainEdges(CtrlType *, GraphType *, int, float *); void EliminateVolComponents(CtrlType *, GraphType *, int, float *, float); /* kwayvolrefine.c */ void RefineVolKWay(CtrlType *, GraphType *, GraphType *, int, float *, float); void AllocateVolKWayPartitionMemory(CtrlType *, GraphType *, int); void ComputeVolKWayPartitionParams(CtrlType *, GraphType *, int); void ComputeKWayVolGains(CtrlType *, GraphType *, int); void ProjectVolKWayPartition(CtrlType *, GraphType *, int); void ComputeVolKWayBoundary(CtrlType *, GraphType *, int); void ComputeVolKWayBalanceBoundary(CtrlType *, GraphType *, int); /* match.c */ void Match_RM(CtrlType *, GraphType *); void Match_RM_NVW(CtrlType *, GraphType *); void Match_HEM(CtrlType *, GraphType *); void Match_SHEM(CtrlType *, GraphType *); /* mbalance.c */ void MocBalance2Way(CtrlType *, GraphType *, float *, float); void MocGeneral2WayBalance(CtrlType *, GraphType *, float *, float); /* mbalance2.c */ void MocBalance2Way2(CtrlType *, GraphType *, float *, float *); void MocGeneral2WayBalance2(CtrlType *, GraphType *, float *, float *); void SelectQueue3(int, float *, float *, int *, int *, PQueueType [MAXNCON][2], float *); /* mcoarsen.c */ GraphType *MCCoarsen2Way(CtrlType *, GraphType *); /* memory.c */ void AllocateWorkSpace(CtrlType *, GraphType *, int); void FreeWorkSpace(CtrlType *, GraphType *); int WspaceAvail(CtrlType *); idxtype *idxwspacemalloc(CtrlType *, int); void idxwspacefree(CtrlType *, int); float *fwspacemalloc(CtrlType *, int); void fwspacefree(CtrlType *, int); GraphType *CreateGraph(void); void InitGraph(GraphType *); void FreeGraph(GraphType *); /* mesh.c */ void METIS_MeshToDual(int *, int *, idxtype *, int *, int *, idxtype *, idxtype *); void METIS_MeshToNodal(int *, int *, idxtype *, int *, int *, idxtype *, idxtype *); void GENDUALMETIS(int, int, int, idxtype *, idxtype *, idxtype *adjncy); void TRINODALMETIS(int, int, idxtype *, idxtype *, idxtype *adjncy); void TETNODALMETIS(int, int, idxtype *, idxtype *, idxtype *adjncy); void HEXNODALMETIS(int, int, idxtype *, idxtype *, idxtype *adjncy); void QUADNODALMETIS(int, int, idxtype *, idxtype *, idxtype *adjncy); /* meshpart.c */ void METIS_PartMeshNodal(int *, int *, idxtype *, int *, int *, int *, int *, idxtype *, idxtype *); void METIS_PartMeshDual(int *, int *, idxtype *, int *, int *, int *, int *, idxtype *, idxtype *); /* mfm.c */ void MocFM_2WayEdgeRefine(CtrlType *, GraphType *, float *, int); void SelectQueue(int, float *, float *, int *, int *, PQueueType [MAXNCON][2]); int BetterBalance(int, float *, float *, float *); float Compute2WayHLoadImbalance(int, float *, float *); void Compute2WayHLoadImbalanceVec(int, float *, float *, float *); /* mfm2.c */ void MocFM_2WayEdgeRefine2(CtrlType *, GraphType *, float *, float *, int); void SelectQueue2(int, float *, float *, int *, int *, PQueueType [MAXNCON][2], float *); int IsBetter2wayBalance(int, float *, float *, float *); /* mincover.o */ void MinCover(idxtype *, idxtype *, int, int, idxtype *, int *); int MinCover_Augment(idxtype *, idxtype *, int, idxtype *, idxtype *, idxtype *, int); void MinCover_Decompose(idxtype *, idxtype *, int, int, idxtype *, idxtype *, int *); void MinCover_ColDFS(idxtype *, idxtype *, int, idxtype *, idxtype *, int); void MinCover_RowDFS(idxtype *, idxtype *, int, idxtype *, idxtype *, int); /* minitpart.c */ void MocInit2WayPartition(CtrlType *, GraphType *, float *, float); void MocGrowBisection(CtrlType *, GraphType *, float *, float); void MocRandomBisection(CtrlType *, GraphType *, float *, float); void MocInit2WayBalance(CtrlType *, GraphType *, float *); int SelectQueueoneWay(int, float *, float *, int, PQueueType [MAXNCON][2]); /* minitpart2.c */ void MocInit2WayPartition2(CtrlType *, GraphType *, float *, float *); void MocGrowBisection2(CtrlType *, GraphType *, float *, float *); void MocGrowBisectionNew2(CtrlType *, GraphType *, float *, float *); void MocInit2WayBalance2(CtrlType *, GraphType *, float *, float *); int SelectQueueOneWay2(int, float *, PQueueType [MAXNCON][2], float *); /* mkmetis.c */ void METIS_mCPartGraphKway(int *, int *, idxtype *, idxtype *, idxtype *, idxtype *, int *, int *, int *, float *, int *, int *, idxtype *); int MCMlevelKWayPartitioning(CtrlType *, GraphType *, int, idxtype *, float *); /* mkwayfmh.c */ void MCRandom_KWayEdgeRefineHorizontal(CtrlType *, GraphType *, int, float *, int); void MCGreedy_KWayEdgeBalanceHorizontal(CtrlType *, GraphType *, int, float *, int); int AreAllHVwgtsBelow(int, float, float *, float, float *, float *); int AreAllHVwgtsAbove(int, float, float *, float, float *, float *); void ComputeHKWayLoadImbalance(int, int, float *, float *); int MocIsHBalanced(int, int, float *, float *); int IsHBalanceBetterFT(int, int, float *, float *, float *, float *); int IsHBalanceBetterTT(int, int, float *, float *, float *, float *); /* mkwayrefine.c */ void MocRefineKWayHorizontal(CtrlType *, GraphType *, GraphType *, int, float *); void MocAllocateKWayPartitionMemory(CtrlType *, GraphType *, int); void MocComputeKWayPartitionParams(CtrlType *, GraphType *, int); void MocProjectKWayPartition(CtrlType *, GraphType *, int); void MocComputeKWayBalanceBoundary(CtrlType *, GraphType *, int); /* mmatch.c */ void MCMatch_RM(CtrlType *, GraphType *); void MCMatch_HEM(CtrlType *, GraphType *); void MCMatch_SHEM(CtrlType *, GraphType *); void MCMatch_SHEBM(CtrlType *, GraphType *, int); void MCMatch_SBHEM(CtrlType *, GraphType *, int); float BetterVBalance(int, int, float *, float *, float *); int AreAllVwgtsBelowFast(int, float *, float *, float); /* mmd.c */ void genmmd(int, idxtype *, idxtype *, idxtype *, idxtype *, int , idxtype *, idxtype *, idxtype *, idxtype *, int, int *); void mmdelm(int, idxtype *xadj, idxtype *, idxtype *, idxtype *, idxtype *, idxtype *, idxtype *, idxtype *, int, int); int mmdint(int, idxtype *xadj, idxtype *, idxtype *, idxtype *, idxtype *, idxtype *, idxtype *, idxtype *); void mmdnum(int, idxtype *, idxtype *, idxtype *); void mmdupd(int, int, idxtype *, idxtype *, int, int *, idxtype *, idxtype *, idxtype *, idxtype *, idxtype *, idxtype *, int, int *tag); /* mpmetis.c */ void METIS_mCPartGraphRecursive(int *, int *, idxtype *, idxtype *, idxtype *, idxtype *, int *, int *, int *, int *, int *, idxtype *); void METIS_mCHPartGraphRecursive(int *, int *, idxtype *, idxtype *, idxtype *, idxtype *, int *, int *, int *, float *, int *, int *, idxtype *); void METIS_mCPartGraphRecursiveInternal(int *, int *, idxtype *, idxtype *, float *, idxtype *, int *, int *, int *, idxtype *); void METIS_mCHPartGraphRecursiveInternal(int *, int *, idxtype *, idxtype *, float *, idxtype *, int *, float *, int *, int *, idxtype *); int MCMlevelRecursiveBisection(CtrlType *, GraphType *, int, idxtype *, float, int); int MCHMlevelRecursiveBisection(CtrlType *, GraphType *, int, idxtype *, float *, int); void MCMlevelEdgeBisection(CtrlType *, GraphType *, float *, float); void MCHMlevelEdgeBisection(CtrlType *, GraphType *, float *, float *); /* mrefine.c */ void MocRefine2Way(CtrlType *, GraphType *, GraphType *, float *, float); void MocAllocate2WayPartitionMemory(CtrlType *, GraphType *); void MocCompute2WayPartitionParams(CtrlType *, GraphType *); void MocProject2WayPartition(CtrlType *, GraphType *); /* mrefine2.c */ void MocRefine2Way2(CtrlType *, GraphType *, GraphType *, float *, float *); /* mutil.c */ int AreAllVwgtsBelow(int, float, float *, float, float *, float); int AreAnyVwgtsBelow(int, float, float *, float, float *, float); int AreAllVwgtsAbove(int, float, float *, float, float *, float); float ComputeLoadImbalance(int, int, float *, float *); int AreAllBelow(int, float *, float *); /* myqsort.c */ void iidxsort(int, idxtype *); void iintsort(int, int *); void ikeysort(int, KeyValueType *); void ikeyvalsort(int, KeyValueType *); /* ometis.c */ void METIS_EdgeND(int *, idxtype *, idxtype *, int *, int *, idxtype *, idxtype *); void METIS_NodeND(int *, idxtype *, idxtype *, int *, int *, idxtype *, idxtype *); void METIS_NodeWND(int *, idxtype *, idxtype *, idxtype *, int *, int *, idxtype *, idxtype *); void MlevelNestedDissection(CtrlType *, GraphType *, idxtype *, float, int); void MlevelNestedDissectionCC(CtrlType *, GraphType *, idxtype *, float, int); void MlevelNodeBisectionMultiple(CtrlType *, GraphType *, int *, float); void MlevelNodeBisection(CtrlType *, GraphType *, int *, float); void SplitGraphOrder(CtrlType *, GraphType *, GraphType *, GraphType *); void MMDOrder(CtrlType *, GraphType *, idxtype *, int); int SplitGraphOrderCC(CtrlType *, GraphType *, GraphType *, int, idxtype *, idxtype *); /* parmetis.c */ void METIS_PartGraphKway2(int *, idxtype *, idxtype *, idxtype *, idxtype *, int *, int *, int *, int *, int *, idxtype *); void METIS_WPartGraphKway2(int *, idxtype *, idxtype *, idxtype *, idxtype *, int *, int *, int *, float *, int *, int *, idxtype *); void METIS_NodeNDP(int, idxtype *, idxtype *, int, int *, idxtype *, idxtype *, idxtype *); void MlevelNestedDissectionP(CtrlType *, GraphType *, idxtype *, int, int, int, idxtype *); void METIS_NodeComputeSeparator(int *, idxtype *, idxtype *, idxtype *, idxtype *, int *, int *, idxtype *); void METIS_EdgeComputeSeparator(int *, idxtype *, idxtype *, idxtype *, idxtype *, int *, int *, idxtype *); /* pmetis.c */ void METIS_PartGraphRecursive(int *, idxtype *, idxtype *, idxtype *, idxtype *, int *, int *, int *, int *, int *, idxtype *); void METIS_WPartGraphRecursive(int *, idxtype *, idxtype *, idxtype *, idxtype *, int *, int *, int *, float *, int *, int *, idxtype *); int MlevelRecursiveBisection(CtrlType *, GraphType *, int, idxtype *, float *, float, int); void MlevelEdgeBisection(CtrlType *, GraphType *, int *, float); void SplitGraphPart(CtrlType *, GraphType *, GraphType *, GraphType *); void SetUpSplitGraph(GraphType *, GraphType *, int, int); /* pqueue.c */ void PQueueInit(CtrlType *ctrl, PQueueType *, int, int); void PQueueReset(PQueueType *); void PQueueFree(CtrlType *ctrl, PQueueType *); int PQueueGetSize(PQueueType *); int PQueueInsert(PQueueType *, int, int); int PQueueDelete(PQueueType *, int, int); int PQueueUpdate(PQueueType *, int, int, int); void PQueueUpdateUp(PQueueType *, int, int, int); int PQueueGetMax(PQueueType *); int PQueueSeeMax(PQueueType *); int PQueueGetKey(PQueueType *); int CheckHeap(PQueueType *); /* refine.c */ void Refine2Way(CtrlType *, GraphType *, GraphType *, int *, float ubfactor); void Allocate2WayPartitionMemory(CtrlType *, GraphType *); void Compute2WayPartitionParams(CtrlType *, GraphType *); void Project2WayPartition(CtrlType *, GraphType *); /* separator.c */ void ConstructSeparator(CtrlType *, GraphType *, float); void ConstructMinCoverSeparator0(CtrlType *, GraphType *, float); void ConstructMinCoverSeparator(CtrlType *, GraphType *, float); /* sfm.c */ void FM_2WayNodeRefine(CtrlType *, GraphType *, float, int); void FM_2WayNodeRefineEqWgt(CtrlType *, GraphType *, int); void FM_2WayNodeRefine_OneSided(CtrlType *, GraphType *, float, int); void FM_2WayNodeBalance(CtrlType *, GraphType *, float); int ComputeMaxNodeGain(int, idxtype *, idxtype *, idxtype *); /* srefine.c */ void Refine2WayNode(CtrlType *, GraphType *, GraphType *, float); void Allocate2WayNodePartitionMemory(CtrlType *, GraphType *); void Compute2WayNodePartitionParams(CtrlType *, GraphType *); void Project2WayNodePartition(CtrlType *, GraphType *); /* stat.c */ void ComputePartitionInfo(GraphType *, int, idxtype *); void ComputePartitionInfoBipartite(GraphType *, int, idxtype *); void ComputePartitionBalance(GraphType *, int, idxtype *, float *); float ComputeElementBalance(int, int, idxtype *); /* subdomains.c */ void Random_KWayEdgeRefineMConn(CtrlType *, GraphType *, int, float *, float, int, int); void Greedy_KWayEdgeBalanceMConn(CtrlType *, GraphType *, int, float *, float, int); void PrintSubDomainGraph(GraphType *, int, idxtype *); void ComputeSubDomainGraph(GraphType *, int, idxtype *, idxtype *); void EliminateSubDomainEdges(CtrlType *, GraphType *, int, float *); void MoveGroupMConn(CtrlType *, GraphType *, idxtype *, idxtype *, int, int, int, idxtype *); void EliminateComponents(CtrlType *, GraphType *, int, float *, float); void MoveGroup(CtrlType *, GraphType *, int, int, int, idxtype *, idxtype *); /* timing.c */ void InitTimers(CtrlType *); void PrintTimers(CtrlType *); double seconds(void); /* util.c */ void errexit(char *,...); #ifndef DMALLOC int *imalloc(int, char *); idxtype *idxmalloc(int, char *); float *fmalloc(int, char *); int *ismalloc(int, int, char *); idxtype *idxsmalloc(int, idxtype, char *); void *GKmalloc(int, char *); #endif /*void GKfree(void **,...); */ int *iset(int n, int val, int *x); idxtype *idxset(int n, idxtype val, idxtype *x); float *sset(int n, float val, float *x); int iamax(int, int *); int idxamax(int, idxtype *); int idxamax_strd(int, idxtype *, int); int samax(int, float *); int samax2(int, float *); int idxamin(int, idxtype *); int samin(int, float *); int idxsum(int, idxtype *); int idxsum_strd(int, idxtype *, int); void idxadd(int, idxtype *, idxtype *); int charsum(int, char *); int isum(int, int *); float ssum(int, float *); float ssum_strd(int n, float *x, int); void sscale(int n, float, float *x); float snorm2(int, float *); float sdot(int n, float *, float *); void saxpy(int, float, float *, int, float *, int); void RandomPermute(int, idxtype *, int); double drand48(); void srand48(long); int ispow2(int); void InitRandom(int); int logtwo(int); /*************************************************************** * Programs Directory ****************************************************************/ /* io.c */ void ReadGraph(GraphType *, char *, int *); void WritePartition(char *, idxtype *, int, int); void WriteMeshPartition(char *, int, int, idxtype *, int, idxtype *); void WritePermutation(char *, idxtype *, int); int CheckGraph(GraphType *); idxtype *ReadMesh(char *, int *, int *, int *); void WriteGraph(char *, int, idxtype *, idxtype *); /* smbfactor.c */ void ComputeFillIn(GraphType *, idxtype *); idxtype ComputeFillIn2(GraphType *, idxtype *); int smbfct(int, idxtype *, idxtype *, idxtype *, idxtype *, idxtype *, int *, idxtype *, idxtype *, int *); /*************************************************************** * Test Directory ****************************************************************/ void Test_PartGraph(int, idxtype *, idxtype *); int VerifyPart(int, idxtype *, idxtype *, idxtype *, idxtype *, int, int, idxtype *); int VerifyWPart(int, idxtype *, idxtype *, idxtype *, idxtype *, int, float *, int, idxtype *); void Test_PartGraphV(int, idxtype *, idxtype *); int VerifyPartV(int, idxtype *, idxtype *, idxtype *, idxtype *, int, int, idxtype *); int VerifyWPartV(int, idxtype *, idxtype *, idxtype *, idxtype *, int, float *, int, idxtype *); void Test_PartGraphmC(int, idxtype *, idxtype *); int VerifyPartmC(int, int, idxtype *, idxtype *, idxtype *, idxtype *, int, float *, int, idxtype *); void Test_ND(int, idxtype *, idxtype *); int VerifyND(int, idxtype *, idxtype *);