00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 void Balance2Way(CtrlType *, GraphType *, int *, floattype);
00017 void Bnd2WayBalance(CtrlType *, GraphType *, int *);
00018 void General2WayBalance(CtrlType *, GraphType *, int *);
00019
00020
00021 void BucketSortKeysInc(int, int, idxtype *, idxtype *, idxtype *);
00022
00023
00024 void CreateCoarseGraph(CtrlType *, GraphType *, int, idxtype *, idxtype *);
00025 void CreateCoarseGraphNoMask(CtrlType *, GraphType *, int, idxtype *, idxtype *);
00026 void CreateCoarseGraph_NVW(CtrlType *, GraphType *, int, idxtype *, idxtype *);
00027 GraphType *SetUpCoarseGraph(GraphType *, int, int);
00028 void ReAdjustMemory(GraphType *, GraphType *, int);
00029
00030
00031 int CheckGraph(GraphType *);
00032
00033
00034 GraphType *Coarsen2Way(CtrlType *, GraphType *);
00035
00036
00037 void CompressGraph(CtrlType *, GraphType *, int, idxtype *, idxtype *, idxtype *, idxtype *);
00038 void PruneGraph(CtrlType *, GraphType *, int, idxtype *, idxtype *, idxtype *, floattype);
00039
00040
00041 int ComputeCut(GraphType *, idxtype *);
00042 int CheckBnd(GraphType *);
00043 int CheckBnd2(GraphType *);
00044 int CheckNodeBnd(GraphType *, int);
00045 int CheckRInfo(RInfoType *);
00046 int CheckNodePartitionParams(GraphType *);
00047 int IsSeparable(GraphType *);
00048
00049
00050 void METIS_EstimateMemory(int *, idxtype *, idxtype *, int *, int *, int *);
00051 void EstimateCFraction(int, idxtype *, idxtype *, floattype *, floattype *);
00052 int ComputeCoarseGraphSize(int, idxtype *, idxtype *, int, idxtype *, idxtype *, idxtype *);
00053
00054
00055 void FM_2WayEdgeRefine(CtrlType *, GraphType *, int *, int);
00056
00057
00058 void Change2CNumbering(int, idxtype *, idxtype *);
00059 void Change2FNumbering(int, idxtype *, idxtype *, idxtype *);
00060 void Change2FNumbering2(int, idxtype *, idxtype *);
00061 void Change2FNumberingOrder(int, idxtype *, idxtype *, idxtype *, idxtype *);
00062 void ChangeMesh2CNumbering(int, idxtype *);
00063 void ChangeMesh2FNumbering(int, idxtype *, int, idxtype *, idxtype *);
00064 void ChangeMesh2FNumbering2(int, idxtype *, int, int, idxtype *, idxtype *);
00065
00066
00067 void METIS_PARTGRAPHRECURSIVE(int *, idxtype *, idxtype *, idxtype *, idxtype *, int *, int *, int *, int *, int *, idxtype *);
00068 void metis_partgraphrecursive(int *, idxtype *, idxtype *, idxtype *, idxtype *, int *, int *, int *, int *, int *, idxtype *);
00069 void metis_partgraphrecursive_(int *, idxtype *, idxtype *, idxtype *, idxtype *, int *, int *, int *, int *, int *, idxtype *);
00070 void metis_partgraphrecursive__(int *, idxtype *, idxtype *, idxtype *, idxtype *, int *, int *, int *, int *, int *, idxtype *);
00071 void METIS_WPARTGRAPHRECURSIVE(int *, idxtype *, idxtype *, idxtype *, idxtype *, int *, int *, int *, floattype *, int *, int *, idxtype *);
00072 void metis_wpartgraphrecursive(int *, idxtype *, idxtype *, idxtype *, idxtype *, int *, int *, int *, floattype *, int *, int *, idxtype *);
00073 void metis_wpartgraphrecursive_(int *, idxtype *, idxtype *, idxtype *, idxtype *, int *, int *, int *, floattype *, int *, int *, idxtype *);
00074 void metis_wpartgraphrecursive__(int *, idxtype *, idxtype *, idxtype *, idxtype *, int *, int *, int *, floattype *, int *, int *, idxtype *);
00075 void METIS_PARTGRAPHKWAY(int *, idxtype *, idxtype *, idxtype *, idxtype *, int *, int *, int *, int *, int *, idxtype *);
00076 void metis_partgraphkway(int *, idxtype *, idxtype *, idxtype *, idxtype *, int *, int *, int *, int *, int *, idxtype *);
00077 void metis_partgraphkway_(int *, idxtype *, idxtype *, idxtype *, idxtype *, int *, int *, int *, int *, int *, idxtype *);
00078 void metis_partgraphkway__(int *, idxtype *, idxtype *, idxtype *, idxtype *, int *, int *, int *, int *, int *, idxtype *);
00079 void METIS_WPARTGRAPHKWAY(int *, idxtype *, idxtype *, idxtype *, idxtype *, int *, int *, int *, floattype *, int *, int *, idxtype *);
00080 void metis_wpartgraphkway(int *, idxtype *, idxtype *, idxtype *, idxtype *, int *, int *, int *, floattype *, int *, int *, idxtype *);
00081 void metis_wpartgraphkway_(int *, idxtype *, idxtype *, idxtype *, idxtype *, int *, int *, int *, floattype *, int *, int *, idxtype *);
00082 void metis_wpartgraphkway__(int *, idxtype *, idxtype *, idxtype *, idxtype *, int *, int *, int *, floattype *, int *, int *, idxtype *);
00083 void METIS_EDGEND(int *, idxtype *, idxtype *, int *, int *, idxtype *, idxtype *);
00084 void metis_edgend(int *, idxtype *, idxtype *, int *, int *, idxtype *, idxtype *);
00085 void metis_edgend_(int *, idxtype *, idxtype *, int *, int *, idxtype *, idxtype *);
00086 void metis_edgend__(int *, idxtype *, idxtype *, int *, int *, idxtype *, idxtype *);
00087 void METIS_NODEND(int *, idxtype *, idxtype *, int *, int *, idxtype *, idxtype *);
00088 void metis_nodend(int *, idxtype *, idxtype *, int *, int *, idxtype *, idxtype *);
00089 void metis_nodend_(int *, idxtype *, idxtype *, int *, int *, idxtype *, idxtype *);
00090 void metis_nodend__(int *, idxtype *, idxtype *, int *, int *, idxtype *, idxtype *);
00091 void METIS_NODEWND(int *, idxtype *, idxtype *, idxtype *, int *, int *, idxtype *, idxtype *);
00092 void metis_nodewnd(int *, idxtype *, idxtype *, idxtype *, int *, int *, idxtype *, idxtype *);
00093 void metis_nodewnd_(int *, idxtype *, idxtype *, idxtype *, int *, int *, idxtype *, idxtype *);
00094 void metis_nodewnd__(int *, idxtype *, idxtype *, idxtype *, int *, int *, idxtype *, idxtype *);
00095 void METIS_PARTMESHNODAL(int *, int *, idxtype *, int *, int *, int *, int *, idxtype *, idxtype *);
00096 void metis_partmeshnodal(int *, int *, idxtype *, int *, int *, int *, int *, idxtype *, idxtype *);
00097 void metis_partmeshnodal_(int *, int *, idxtype *, int *, int *, int *, int *, idxtype *, idxtype *);
00098 void metis_partmeshnodal__(int *, int *, idxtype *, int *, int *, int *, int *, idxtype *, idxtype *);
00099 void METIS_PARTMESHDUAL(int *, int *, idxtype *, int *, int *, int *, int *, idxtype *, idxtype *);
00100 void metis_partmeshdual(int *, int *, idxtype *, int *, int *, int *, int *, idxtype *, idxtype *);
00101 void metis_partmeshdual_(int *, int *, idxtype *, int *, int *, int *, int *, idxtype *, idxtype *);
00102 void metis_partmeshdual__(int *, int *, idxtype *, int *, int *, int *, int *, idxtype *, idxtype *);
00103 void METIS_MESHTONODAL(int *, int *, idxtype *, int *, int *, idxtype *, idxtype *);
00104 void metis_meshtonodal(int *, int *, idxtype *, int *, int *, idxtype *, idxtype *);
00105 void metis_meshtonodal_(int *, int *, idxtype *, int *, int *, idxtype *, idxtype *);
00106 void metis_meshtonodal__(int *, int *, idxtype *, int *, int *, idxtype *, idxtype *);
00107 void METIS_MESHTODUAL(int *, int *, idxtype *, int *, int *, idxtype *, idxtype *);
00108 void metis_meshtodual(int *, int *, idxtype *, int *, int *, idxtype *, idxtype *);
00109 void metis_meshtodual_(int *, int *, idxtype *, int *, int *, idxtype *, idxtype *);
00110 void metis_meshtodual__(int *, int *, idxtype *, int *, int *, idxtype *, idxtype *);
00111 void METIS_ESTIMATEMEMORY(int *, idxtype *, idxtype *, int *, int *, int *);
00112 void metis_estimatememory(int *, idxtype *, idxtype *, int *, int *, int *);
00113 void metis_estimatememory_(int *, idxtype *, idxtype *, int *, int *, int *);
00114 void metis_estimatememory__(int *, idxtype *, idxtype *, int *, int *, int *);
00115 void METIS_MCPARTGRAPHRECURSIVE(int *, int *, idxtype *, idxtype *, idxtype *, idxtype *, int *, int *, int *, int *, int *, idxtype *);
00116 void metis_mcpartgraphrecursive(int *, int *, idxtype *, idxtype *, idxtype *, idxtype *, int *, int *, int *, int *, int *, idxtype *);
00117 void metis_mcpartgraphrecursive_(int *, int *, idxtype *, idxtype *, idxtype *, idxtype *, int *, int *, int *, int *, int *, idxtype *);
00118 void metis_mcpartgraphrecursive__(int *, int *, idxtype *, idxtype *, idxtype *, idxtype *, int *, int *, int *, int *, int *, idxtype *);
00119 void METIS_MCPARTGRAPHKWAY(int *, int *, idxtype *, idxtype *, idxtype *, idxtype *, int *, int *, int *, floattype *, int *, int *, idxtype *);
00120 void metis_mcpartgraphkway(int *, int *, idxtype *, idxtype *, idxtype *, idxtype *, int *, int *, int *, floattype *, int *, int *, idxtype *);
00121 void metis_mcpartgraphkway_(int *, int *, idxtype *, idxtype *, idxtype *, idxtype *, int *, int *, int *, floattype *, int *, int *, idxtype *);
00122 void metis_mcpartgraphkway__(int *, int *, idxtype *, idxtype *, idxtype *, idxtype *, int *, int *, int *, floattype *, int *, int *, idxtype *);
00123 void METIS_PARTGRAPHVKWAY(int *, idxtype *, idxtype *, idxtype *, idxtype *, int *, int *, int *, int *, int *, idxtype *);
00124 void metis_partgraphvkway(int *, idxtype *, idxtype *, idxtype *, idxtype *, int *, int *, int *, int *, int *, idxtype *);
00125 void metis_partgraphvkway_(int *, idxtype *, idxtype *, idxtype *, idxtype *, int *, int *, int *, int *, int *, idxtype *);
00126 void metis_partgraphvkway__(int *, idxtype *, idxtype *, idxtype *, idxtype *, int *, int *, int *, int *, int *, idxtype *);
00127 void METIS_WPARTGRAPHVKWAY(int *, idxtype *, idxtype *, idxtype *, idxtype *, int *, int *, int *, floattype *, int *, int *, idxtype *);
00128 void metis_wpartgraphvkway(int *, idxtype *, idxtype *, idxtype *, idxtype *, int *, int *, int *, floattype *, int *, int *, idxtype *);
00129 void metis_wpartgraphvkway_(int *, idxtype *, idxtype *, idxtype *, idxtype *, int *, int *, int *, floattype *, int *, int *, idxtype *);
00130 void metis_wpartgraphvkway__(int *, idxtype *, idxtype *, idxtype *, idxtype *, int *, int *, int *, floattype *, int *, int *, idxtype *);
00131
00132
00133 void SetUpGraph(GraphType *, int, int, int, idxtype *, idxtype *, idxtype *, idxtype *, int);
00134 void SetUpGraphKway(GraphType *, int, idxtype *, idxtype *);
00135 void SetUpGraph2(GraphType *, int, int, idxtype *, idxtype *, floattype *, idxtype *);
00136 void VolSetUpGraph(GraphType *, int, int, int, idxtype *, idxtype *, idxtype *, idxtype *, int);
00137 void RandomizeGraph(GraphType *);
00138 int IsConnectedSubdomain(CtrlType *, GraphType *, int, int);
00139 int IsConnected(CtrlType *, GraphType *, int);
00140 int IsConnected2(GraphType *, int);
00141 int FindComponents(CtrlType *, GraphType *, idxtype *, idxtype *);
00142
00143
00144 void Init2WayPartition(CtrlType *, GraphType *, int *, floattype);
00145 void InitSeparator(CtrlType *, GraphType *, floattype);
00146 void GrowBisection(CtrlType *, GraphType *, int *, floattype);
00147 void GrowBisectionNode(CtrlType *, GraphType *, floattype);
00148 void RandomBisection(CtrlType *, GraphType *, int *, floattype);
00149
00150
00151 void METIS_PartGraphKway(int *, idxtype *, idxtype *, idxtype *, idxtype *, int *, int *, int *, int *, int *, idxtype *);
00152 void METIS_WPartGraphKway(int *, idxtype *, idxtype *, idxtype *, idxtype *, int *, int *, int *, floattype *, int *, int *, idxtype *);
00153 int MlevelKWayPartitioning(CtrlType *, GraphType *, int, idxtype *, floattype *, floattype);
00154
00155
00156 void METIS_PartGraphVKway(int *, idxtype *, idxtype *, idxtype *, idxtype *, int *, int *, int *, int *, int *, idxtype *);
00157 void METIS_WPartGraphVKway(int *, idxtype *, idxtype *, idxtype *, idxtype *, int *, int *, int *, floattype *, int *, int *, idxtype *);
00158 int MlevelVolKWayPartitioning(CtrlType *, GraphType *, int, idxtype *, floattype *, floattype);
00159
00160
00161 void Random_KWayEdgeRefine(CtrlType *, GraphType *, int, floattype *, floattype, int, int);
00162 void Greedy_KWayEdgeRefine(CtrlType *, GraphType *, int, floattype *, floattype, int);
00163 void Greedy_KWayEdgeBalance(CtrlType *, GraphType *, int, floattype *, floattype, int);
00164
00165
00166 void RefineKWay(CtrlType *, GraphType *, GraphType *, int, floattype *, floattype);
00167 void AllocateKWayPartitionMemory(CtrlType *, GraphType *, int);
00168 void ComputeKWayPartitionParams(CtrlType *, GraphType *, int);
00169 void ProjectKWayPartition(CtrlType *, GraphType *, int);
00170 int IsBalanced(idxtype *, int, floattype *, floattype);
00171 void ComputeKWayBoundary(CtrlType *, GraphType *, int);
00172 void ComputeKWayBalanceBoundary(CtrlType *, GraphType *, int);
00173
00174
00175 void Random_KWayVolRefine(CtrlType *, GraphType *, int, floattype *, floattype, int, int);
00176 void Random_KWayVolRefineMConn(CtrlType *, GraphType *, int, floattype *, floattype, int, int);
00177 void Greedy_KWayVolBalance(CtrlType *, GraphType *, int, floattype *, floattype, int);
00178 void Greedy_KWayVolBalanceMConn(CtrlType *, GraphType *, int, floattype *, floattype, int);
00179 void KWayVolUpdate(CtrlType *, GraphType *, int, int, int, idxtype *, idxtype *, idxtype *);
00180 void ComputeKWayVolume(GraphType *, int, idxtype *, idxtype *, idxtype *);
00181 int ComputeVolume(GraphType *, idxtype *);
00182 void CheckVolKWayPartitionParams(CtrlType *, GraphType *, int);
00183 void ComputeVolSubDomainGraph(GraphType *, int, idxtype *, idxtype *);
00184 void EliminateVolSubDomainEdges(CtrlType *, GraphType *, int, floattype *);
00185 void EliminateVolComponents(CtrlType *, GraphType *, int, floattype *, floattype);
00186
00187
00188 void RefineVolKWay(CtrlType *, GraphType *, GraphType *, int, floattype *, floattype);
00189 void AllocateVolKWayPartitionMemory(CtrlType *, GraphType *, int);
00190 void ComputeVolKWayPartitionParams(CtrlType *, GraphType *, int);
00191 void ComputeKWayVolGains(CtrlType *, GraphType *, int);
00192 void ProjectVolKWayPartition(CtrlType *, GraphType *, int);
00193 void ComputeVolKWayBoundary(CtrlType *, GraphType *, int);
00194 void ComputeVolKWayBalanceBoundary(CtrlType *, GraphType *, int);
00195
00196
00197 void Match_RM(CtrlType *, GraphType *);
00198 void Match_RM_NVW(CtrlType *, GraphType *);
00199 void Match_HEM(CtrlType *, GraphType *);
00200 void Match_SHEM(CtrlType *, GraphType *);
00201
00202
00203 void MocBalance2Way(CtrlType *, GraphType *, floattype *, floattype);
00204 void MocGeneral2WayBalance(CtrlType *, GraphType *, floattype *, floattype);
00205
00206
00207 void MocBalance2Way2(CtrlType *, GraphType *, floattype *, floattype *);
00208 void MocGeneral2WayBalance2(CtrlType *, GraphType *, floattype *, floattype *);
00209 void SelectQueue3(int, floattype *, floattype *, int *, int *, PQueueType [MAXNCON][2], floattype *);
00210
00211
00212 GraphType *MCCoarsen2Way(CtrlType *, GraphType *);
00213
00214
00215 void AllocateWorkSpace(CtrlType *, GraphType *, int);
00216 void FreeWorkSpace(CtrlType *, GraphType *);
00217 int WspaceAvail(CtrlType *);
00218 idxtype *idxwspacemalloc(CtrlType *, memsize_t);
00219 void idxwspacefree(CtrlType *, int);
00220 floattype *fwspacemalloc(CtrlType *, memsize_t);
00221 void fwspacefree(CtrlType *, memsize_t);
00222 GraphType *CreateGraph(void);
00223 void InitGraph(GraphType *);
00224 void FreeGraph(GraphType *);
00225
00226
00227 void METIS_MeshToDual(int *, int *, idxtype *, int *, int *, idxtype *, idxtype *);
00228 void METIS_MeshToNodal(int *, int *, idxtype *, int *, int *, idxtype *, idxtype *);
00229 void GENDUALMETIS(int, int, int, idxtype *, idxtype *, idxtype *adjncy);
00230 void TRINODALMETIS(int, int, idxtype *, idxtype *, idxtype *adjncy);
00231 void TETNODALMETIS(int, int, idxtype *, idxtype *, idxtype *adjncy);
00232 void HEXNODALMETIS(int, int, idxtype *, idxtype *, idxtype *adjncy);
00233 void QUADNODALMETIS(int, int, idxtype *, idxtype *, idxtype *adjncy);
00234
00235
00236 void METIS_PartMeshNodal(int *, int *, idxtype *, int *, int *, int *, int *, idxtype *, idxtype *);
00237 void METIS_PartMeshDual(int *, int *, idxtype *, int *, int *, int *, int *, idxtype *, idxtype *);
00238
00239
00240 void MocFM_2WayEdgeRefine(CtrlType *, GraphType *, floattype *, int);
00241 void SelectQueue(int, floattype *, floattype *, int *, int *, PQueueType [MAXNCON][2]);
00242 int BetterBalance(int, floattype *, floattype *, floattype *);
00243 floattype Compute2WayHLoadImbalance(int, floattype *, floattype *);
00244 void Compute2WayHLoadImbalanceVec(int, floattype *, floattype *, floattype *);
00245
00246
00247 void MocFM_2WayEdgeRefine2(CtrlType *, GraphType *, floattype *, floattype *, int);
00248 void SelectQueue2(int, floattype *, floattype *, int *, int *, PQueueType [MAXNCON][2], floattype *);
00249 int IsBetter2wayBalance(int, floattype *, floattype *, floattype *);
00250
00251
00252 void MinCover(idxtype *, idxtype *, int, int, idxtype *, int *);
00253 int MinCover_Augment(idxtype *, idxtype *, int, idxtype *, idxtype *, idxtype *, int);
00254 void MinCover_Decompose(idxtype *, idxtype *, int, int, idxtype *, idxtype *, int *);
00255 void MinCover_ColDFS(idxtype *, idxtype *, int, idxtype *, idxtype *, int);
00256 void MinCover_RowDFS(idxtype *, idxtype *, int, idxtype *, idxtype *, int);
00257
00258
00259 void MocInit2WayPartition(CtrlType *, GraphType *, floattype *, floattype);
00260 void MocGrowBisection(CtrlType *, GraphType *, floattype *, floattype);
00261 void MocRandomBisection(CtrlType *, GraphType *, floattype *, floattype);
00262 void MocInit2WayBalance(CtrlType *, GraphType *, floattype *);
00263 int SelectQueueoneWay(int, floattype *, floattype *, int, PQueueType [MAXNCON][2]);
00264
00265
00266 void MocInit2WayPartition2(CtrlType *, GraphType *, floattype *, floattype *);
00267 void MocGrowBisection2(CtrlType *, GraphType *, floattype *, floattype *);
00268 void MocGrowBisectionNew2(CtrlType *, GraphType *, floattype *, floattype *);
00269 void MocInit2WayBalance2(CtrlType *, GraphType *, floattype *, floattype *);
00270 int SelectQueueOneWay2(int, floattype *, PQueueType [MAXNCON][2], floattype *);
00271
00272
00273 void METIS_mCPartGraphKway(int *, int *, idxtype *, idxtype *, idxtype *, idxtype *, int *, int *, int *, floattype *, int *, int *, idxtype *);
00274 int MCMlevelKWayPartitioning(CtrlType *, GraphType *, int, idxtype *, floattype *);
00275
00276
00277 void MCRandom_KWayEdgeRefineHorizontal(CtrlType *, GraphType *, int, floattype *, int);
00278 void MCGreedy_KWayEdgeBalanceHorizontal(CtrlType *, GraphType *, int, floattype *, int);
00279 int AreAllHVwgtsBelow(int, floattype, floattype *, floattype, floattype *, floattype *);
00280 int AreAllHVwgtsAbove(int, floattype, floattype *, floattype, floattype *, floattype *);
00281 void ComputeHKWayLoadImbalance(int, int, floattype *, floattype *);
00282 int MocIsHBalanced(int, int, floattype *, floattype *);
00283 int IsHBalanceBetterFT(int, int, floattype *, floattype *, floattype *, floattype *);
00284 int IsHBalanceBetterTT(int, int, floattype *, floattype *, floattype *, floattype *);
00285
00286
00287 void MocRefineKWayHorizontal(CtrlType *, GraphType *, GraphType *, int, floattype *);
00288 void MocAllocateKWayPartitionMemory(CtrlType *, GraphType *, int);
00289 void MocComputeKWayPartitionParams(CtrlType *, GraphType *, int);
00290 void MocProjectKWayPartition(CtrlType *, GraphType *, int);
00291 void MocComputeKWayBalanceBoundary(CtrlType *, GraphType *, int);
00292
00293
00294 void MCMatch_RM(CtrlType *, GraphType *);
00295 void MCMatch_HEM(CtrlType *, GraphType *);
00296 void MCMatch_SHEM(CtrlType *, GraphType *);
00297 void MCMatch_SHEBM(CtrlType *, GraphType *, int);
00298 void MCMatch_SBHEM(CtrlType *, GraphType *, int);
00299 floattype BetterVBalance(int, int, floattype *, floattype *, floattype *);
00300 int AreAllVwgtsBelowFast(int, floattype *, floattype *, floattype);
00301
00302
00303 void genmmd(int, idxtype *, idxtype *, idxtype *, idxtype *, int , idxtype *, idxtype *, idxtype *, idxtype *, int, int *);
00304 void mmdelm(int, idxtype *xadj, idxtype *, idxtype *, idxtype *, idxtype *, idxtype *, idxtype *, idxtype *, int, int);
00305 int mmdint(int, idxtype *xadj, idxtype *, idxtype *, idxtype *, idxtype *, idxtype *, idxtype *, idxtype *);
00306 void mmdnum(int, idxtype *, idxtype *, idxtype *);
00307 void mmdupd(int, int, idxtype *, idxtype *, int, int *, idxtype *, idxtype *, idxtype *, idxtype *, idxtype *, idxtype *, int, int *tag);
00308
00309
00310 void METIS_mCPartGraphRecursive(int *, int *, idxtype *, idxtype *, idxtype *, idxtype *, int *, int *, int *, int *, int *, idxtype *);
00311 void METIS_mCHPartGraphRecursive(int *, int *, idxtype *, idxtype *, idxtype *, idxtype *, int *, int *, int *, floattype *, int *, int *, idxtype *);
00312 void METIS_mCPartGraphRecursiveInternal(int *, int *, idxtype *, idxtype *, floattype *, idxtype *, int *, int *, int *, idxtype *);
00313 void METIS_mCHPartGraphRecursiveInternal(int *, int *, idxtype *, idxtype *, floattype *, idxtype *, int *, floattype *, int *, int *, idxtype *);
00314 int MCMlevelRecursiveBisection(CtrlType *, GraphType *, int, idxtype *, floattype, int);
00315 int MCHMlevelRecursiveBisection(CtrlType *, GraphType *, int, idxtype *, floattype *, int);
00316 void MCMlevelEdgeBisection(CtrlType *, GraphType *, floattype *, floattype);
00317 void MCHMlevelEdgeBisection(CtrlType *, GraphType *, floattype *, floattype *);
00318
00319
00320 void MocRefine2Way(CtrlType *, GraphType *, GraphType *, floattype *, floattype);
00321 void MocAllocate2WayPartitionMemory(CtrlType *, GraphType *);
00322 void MocCompute2WayPartitionParams(CtrlType *, GraphType *);
00323 void MocProject2WayPartition(CtrlType *, GraphType *);
00324
00325
00326 void MocRefine2Way2(CtrlType *, GraphType *, GraphType *, floattype *, floattype *);
00327
00328
00329 int AreAllVwgtsBelow(int, floattype, floattype *, floattype, floattype *, floattype);
00330 int AreAnyVwgtsBelow(int, floattype, floattype *, floattype, floattype *, floattype);
00331 int AreAllVwgtsAbove(int, floattype, floattype *, floattype, floattype *, floattype);
00332 floattype ComputeLoadImbalance(int, int, floattype *, floattype *);
00333 int AreAllBelow(int, floattype *, floattype *);
00334
00335
00336 void iidxsort(int, idxtype *);
00337 void iintsort(int, int *);
00338 void ikeysort(int, KeyValueType *);
00339 void ikeyvalsort(int, KeyValueType *);
00340
00341
00342 void METIS_EdgeND(int *, idxtype *, idxtype *, int *, int *, idxtype *, idxtype *);
00343 void METIS_NodeND(int *, idxtype *, idxtype *, int *, int *, idxtype *, idxtype *);
00344 void METIS_NodeWND(int *, idxtype *, idxtype *, idxtype *, int *, int *, idxtype *, idxtype *);
00345 void MlevelNestedDissection(CtrlType *, GraphType *, idxtype *, floattype, int);
00346 void MlevelNestedDissectionCC(CtrlType *, GraphType *, idxtype *, floattype, int);
00347 void MlevelNodeBisectionMultiple(CtrlType *, GraphType *, int *, floattype);
00348 void MlevelNodeBisection(CtrlType *, GraphType *, int *, floattype);
00349 void SplitGraphOrder(CtrlType *, GraphType *, GraphType *, GraphType *);
00350 void MMDOrder(CtrlType *, GraphType *, idxtype *, int);
00351 int SplitGraphOrderCC(CtrlType *, GraphType *, GraphType *, int, idxtype *, idxtype *);
00352
00353
00354 void METIS_PartGraphKway2(int *, idxtype *, idxtype *, idxtype *, idxtype *, int *, int *, int *, int *, int *, idxtype *);
00355 void METIS_WPartGraphKway2(int *, idxtype *, idxtype *, idxtype *, idxtype *, int *, int *, int *, floattype *, int *, int *, idxtype *);
00356 void METIS_NodeNDP(int, idxtype *, idxtype *, int, int *, idxtype *, idxtype *, idxtype *);
00357 void MlevelNestedDissectionP(CtrlType *, GraphType *, idxtype *, int, int, int, idxtype *);
00358 void METIS_NodeComputeSeparator(int *, idxtype *, idxtype *, idxtype *, idxtype *, int *, int *, idxtype *);
00359 void METIS_EdgeComputeSeparator(int *, idxtype *, idxtype *, idxtype *, idxtype *, int *, int *, idxtype *);
00360 void METIS_mCPartGraphRecursive2(int *nvtxs, int *ncon, idxtype *xadj, idxtype *adjncy, idxtype *vwgt, idxtype *adjwgt, int *wgtflag, int *numflag, int *nparts, floattype *tpwgts, int *options, int *edgecut, idxtype *part);
00361 int MCMlevelRecursiveBisection2(CtrlType *ctrl, GraphType *graph, int nparts, floattype *tpwgts, idxtype *part, floattype ubfactor, int fpart);
00362
00363
00364
00365
00366 void METIS_PartGraphRecursive(int *, idxtype *, idxtype *, idxtype *, idxtype *, int *, int *, int *, int *, int *, idxtype *);
00367 void METIS_WPartGraphRecursive(int *, idxtype *, idxtype *, idxtype *, idxtype *, int *, int *, int *, floattype *, int *, int *, idxtype *);
00368 int MlevelRecursiveBisection(CtrlType *, GraphType *, int, idxtype *, floattype *, floattype, int);
00369 void MlevelEdgeBisection(CtrlType *, GraphType *, int *, floattype);
00370 void SplitGraphPart(CtrlType *, GraphType *, GraphType *, GraphType *);
00371 void SetUpSplitGraph(GraphType *, GraphType *, int, int);
00372
00373
00374 void PQueueInit(CtrlType *ctrl, PQueueType *, int, int);
00375 void PQueueReset(PQueueType *);
00376 void PQueueFree(CtrlType *ctrl, PQueueType *);
00377 int PQueueGetSize(PQueueType *);
00378 int PQueueInsert(PQueueType *, int, int);
00379 int PQueueDelete(PQueueType *, int, int);
00380 int PQueueUpdate(PQueueType *, int, int, int);
00381 void PQueueUpdateUp(PQueueType *, int, int, int);
00382 int PQueueGetMax(PQueueType *);
00383 int PQueueSeeMax(PQueueType *);
00384 int PQueueGetKey(PQueueType *);
00385 int CheckHeap(PQueueType *);
00386
00387
00388 void Refine2Way(CtrlType *, GraphType *, GraphType *, int *, floattype ubfactor);
00389 void Allocate2WayPartitionMemory(CtrlType *, GraphType *);
00390 void Compute2WayPartitionParams(CtrlType *, GraphType *);
00391 void Project2WayPartition(CtrlType *, GraphType *);
00392
00393
00394 void ConstructSeparator(CtrlType *, GraphType *, floattype);
00395 void ConstructMinCoverSeparator0(CtrlType *, GraphType *, floattype);
00396 void ConstructMinCoverSeparator(CtrlType *, GraphType *, floattype);
00397
00398
00399 void FM_2WayNodeRefine(CtrlType *, GraphType *, floattype, int);
00400 void FM_2WayNodeRefineEqWgt(CtrlType *, GraphType *, int);
00401 void FM_2WayNodeRefine_OneSided(CtrlType *, GraphType *, floattype, int);
00402 void FM_2WayNodeBalance(CtrlType *, GraphType *, floattype);
00403 int ComputeMaxNodeGain(int, idxtype *, idxtype *, idxtype *);
00404
00405
00406 void Refine2WayNode(CtrlType *, GraphType *, GraphType *, floattype);
00407 void Allocate2WayNodePartitionMemory(CtrlType *, GraphType *);
00408 void Compute2WayNodePartitionParams(CtrlType *, GraphType *);
00409 void Project2WayNodePartition(CtrlType *, GraphType *);
00410
00411
00412 void ComputePartitionInfo(GraphType *, int, idxtype *);
00413 void ComputePartitionInfoBipartite(GraphType *, int, idxtype *);
00414 void ComputePartitionBalance(GraphType *, int, idxtype *, floattype *);
00415 floattype ComputeElementBalance(int, int, idxtype *);
00416 void Moc_ComputePartitionBalance(GraphType *graph, int nparts, idxtype *where, floattype *ubvec);
00417
00418
00419 void Random_KWayEdgeRefineMConn(CtrlType *, GraphType *, int, floattype *, floattype, int, int);
00420 void Greedy_KWayEdgeBalanceMConn(CtrlType *, GraphType *, int, floattype *, floattype, int);
00421 void PrintSubDomainGraph(GraphType *, int, idxtype *);
00422 void ComputeSubDomainGraph(GraphType *, int, idxtype *, idxtype *);
00423 void EliminateSubDomainEdges(CtrlType *, GraphType *, int, floattype *);
00424 void MoveGroupMConn(CtrlType *, GraphType *, idxtype *, idxtype *, int, int, int, idxtype *);
00425 void EliminateComponents(CtrlType *, GraphType *, int, floattype *, floattype);
00426 void MoveGroup(CtrlType *, GraphType *, int, int, int, idxtype *, idxtype *);
00427
00428
00429 void InitTimers(CtrlType *);
00430 void PrintTimers(CtrlType *);
00431 double seconds(void);
00432
00433
00434 void errexit(char *,...);
00435 #ifndef DMALLOC
00436 int *imalloc(size_t, char *);
00437 idxtype *idxmalloc(size_t, char *);
00438 floattype *fmalloc(size_t, char *);
00439 int *ismalloc(size_t, int, char *);
00440 idxtype *idxsmalloc(size_t, idxtype, char *);
00441 void *GKmalloc(size_t, char *);
00442 #endif
00443
00444 int *iset(int n, int val, int *x);
00445 idxtype *idxset(int n, idxtype val, idxtype *x);
00446 floattype *sset(int n, floattype val, floattype *x);
00447 int iamax(int, int *);
00448 int idxamax(int, idxtype *);
00449 int idxamax_strd(int, idxtype *, int);
00450 int samax(int, floattype *);
00451 int samax2(int, floattype *);
00452 int idxamin(int, idxtype *);
00453 int samin(int, floattype *);
00454 int idxsum(int, idxtype *);
00455 int idxsum_strd(int, idxtype *, int);
00456 void idxadd(int, idxtype *, idxtype *);
00457 int charsum(int, char *);
00458 int isum(int, int *);
00459 floattype ssum(int, floattype *);
00460 floattype ssum_strd(int n, floattype *x, int);
00461 void sscale(int n, floattype, floattype *x);
00462 floattype snorm2(int, floattype *);
00463 floattype sdot(int n, floattype *, floattype *);
00464 void saxpy(int, floattype, floattype *, int, floattype *, int);
00465 void RandomPermute(int, idxtype *, int);
00466 int ispow2(int);
00467 void InitRandom(int);
00468 int log2Int(int);
00469
00470
00471
00472
00473
00474
00475
00476
00477
00478
00479
00480
00481
00482
00483
00484 void ReadGraph(GraphType *, char *, int *);
00485 void WritePartition(char *, idxtype *, int, int);
00486 void WriteMeshPartition(char *, int, int, idxtype *, int, idxtype *);
00487 void WritePermutation(char *, idxtype *, int);
00488 int CheckGraph(GraphType *);
00489 idxtype *ReadMesh(char *, int *, int *, int *);
00490 void WriteGraph(char *, int, idxtype *, idxtype *);
00491
00492
00493 void ComputeFillIn(GraphType *, idxtype *);
00494 idxtype ComputeFillIn2(GraphType *, idxtype *);
00495 int smbfct(int, idxtype *, idxtype *, idxtype *, idxtype *, idxtype *, int *, idxtype *, idxtype *, int *);
00496
00497
00498
00499
00500
00501 void Test_PartGraph(int, idxtype *, idxtype *);
00502 int VerifyPart(int, idxtype *, idxtype *, idxtype *, idxtype *, int, int, idxtype *);
00503 int VerifyWPart(int, idxtype *, idxtype *, idxtype *, idxtype *, int, floattype *, int, idxtype *);
00504 void Test_PartGraphV(int, idxtype *, idxtype *);
00505 int VerifyPartV(int, idxtype *, idxtype *, idxtype *, idxtype *, int, int, idxtype *);
00506 int VerifyWPartV(int, idxtype *, idxtype *, idxtype *, idxtype *, int, floattype *, int, idxtype *);
00507 void Test_PartGraphmC(int, idxtype *, idxtype *);
00508 int VerifyPartmC(int, int, idxtype *, idxtype *, idxtype *, idxtype *, int, floattype *, int, idxtype *);
00509 void Test_ND(int, idxtype *, idxtype *);
00510 int VerifyND(int, idxtype *, idxtype *);
00511