37 #define MTMETIS_VER_MAJOR 0 38 #define MTMETIS_VER_MINOR 5 39 #define MTMETIS_VER_SUBMINOR 0 49 #ifndef MTMETIS_GRAPH_TYPES_DEFINED 51 #ifdef MTMETIS_64BIT_VERTICES 52 typedef uint64_t mtmetis_vtx_type;
54 typedef uint32_t mtmetis_vtx_type;
57 #ifdef MTMETIS_64BIT_EDGES 58 typedef uint64_t mtmetis_adj_type;
60 typedef uint32_t mtmetis_adj_type;
64 #ifdef MTMETIS_64BIT_WEIGHTS 65 typedef int64_t mtmetis_wgt_type;
67 typedef int32_t mtmetis_wgt_type;
72 #ifdef MTMETIS_64BIT_PARTITIONS 73 typedef uint64_t mtmetis_pid_type;
75 typedef uint32_t mtmetis_pid_type;
79 #ifdef MTMETIS_DOUBLE_REAL 80 typedef double mtmetis_real_type;
82 typedef float mtmetis_real_type;
90 typedef enum mtmetis_error_t {
92 MTMETIS_ERROR_INVALIDINPUT,
93 MTMETIS_ERROR_NOTENOUGHMEMORY,
94 MTMETIS_ERROR_THREADING
98 typedef enum mtmetis_option_t {
100 MTMETIS_OPTION_NPARTS,
101 MTMETIS_OPTION_NTHREADS,
103 MTMETIS_OPTION_NCUTS,
104 MTMETIS_OPTION_NRUNS,
105 MTMETIS_OPTION_NINITSOLUTIONS,
106 MTMETIS_OPTION_NITER,
107 MTMETIS_OPTION_UBFACTOR,
108 MTMETIS_OPTION_CTYPE,
109 MTMETIS_OPTION_CONTYPE,
110 MTMETIS_OPTION_LEAFMATCH,
111 MTMETIS_OPTION_RTYPE,
112 MTMETIS_OPTION_PTYPE,
113 MTMETIS_OPTION_VERBOSITY,
114 MTMETIS_OPTION_DISTRIBUTION,
115 MTMETIS_OPTION_RUNSTATS,
116 MTMETIS_OPTION_METIS,
117 MTMETIS_OPTION_REMOVEISLANDS,
118 MTMETIS_OPTION_VWGTDEGREE,
119 MTMETIS_OPTION_IGNORE,
120 MTMETIS_OPTION_HILLSIZE,
121 MTMETIS_OPTION_HS_SCANTYPE,
123 MTMETIS_OPTION_VERSION,
125 __MTMETIS_OPTION_TERM
129 typedef enum mtmetis_ctype_t {
138 typedef enum mtmetis_contype_t {
140 MTMETIS_CONTYPE_DENSE,
145 typedef enum mtmetis_rtype_t {
146 MTMETIS_RTYPE_GREEDY,
154 typedef enum mtmetis_ptype_t {
163 typedef enum mtmetis_hs_scan_t {
164 MTMETIS_HS_SCAN_SQRT,
167 MTMETIS_HS_SCAN_25PC,
168 MTMETIS_HS_SCAN_FULL,
172 typedef enum mtmetis_verbosity_t {
173 MTMETIS_VERBOSITY_NONE,
174 MTMETIS_VERBOSITY_LOW,
175 MTMETIS_VERBOSITY_MEDIUM,
176 MTMETIS_VERBOSITY_HIGH,
177 MTMETIS_VERBOSITY_MAXIMUM
178 } mtmetis_verbosity_t;
181 typedef enum mtmetis_dtype_t {
182 MTMETIS_DISTRIBUTION_BLOCK,
183 MTMETIS_DISTRIBUTION_CYCLIC,
184 MTMETIS_DISTRIBUTION_BLOCKCYCLIC
188 typedef enum mtmetis_part_t {
189 MTMETIS_VSEP_NULL = -1,
190 MTMETIS_VSEP_PARTA = 0,
191 MTMETIS_VSEP_PARTB = 1,
192 MTMETIS_VSEP_SEP = 2,
193 MTMETIS_VSEP_NPARTS = 3,
194 MTMETIS_ESEP_PARTA = 0,
195 MTMETIS_ESEP_PARTB = 1,
196 MTMETIS_ESEP_NPARTS = 2
200 typedef enum mtmetis_ignore_t {
201 MTMETIS_IGNORE_NONE = 0x00,
202 MTMETIS_IGNORE_VERTEXWEIGHTS = 0x01,
203 MTMETIS_IGNORE_EDGEWEIGHTS = 0x02
214 static size_t const MTMETIS_NOPTIONS = __MTMETIS_OPTION_TERM;
215 static double const MTMETIS_VAL_OFF = -DBL_MAX;
262 mtmetis_vtx_type
const * nvtxs,
263 mtmetis_vtx_type
const * ncon,
264 mtmetis_adj_type
const * xadj,
265 mtmetis_vtx_type
const * adjncy,
266 mtmetis_wgt_type
const * vwgt,
267 mtmetis_vtx_type
const * vsize,
268 mtmetis_wgt_type
const * adjwgt,
269 mtmetis_pid_type
const * nparts,
270 mtmetis_real_type
const * tpwgts,
271 mtmetis_real_type
const * ubvec,
272 double const * options,
273 mtmetis_wgt_type * r_edgecut,
274 mtmetis_pid_type * where);
300 mtmetis_vtx_type
const * nvtxs,
301 mtmetis_vtx_type
const * ncon,
302 mtmetis_adj_type
const * xadj,
303 mtmetis_vtx_type
const * adjncy,
304 mtmetis_wgt_type
const * vwgt,
305 mtmetis_vtx_type
const * vsize,
306 mtmetis_wgt_type
const * adjwgt,
307 mtmetis_pid_type
const * nparts,
308 mtmetis_real_type
const * tpwgts,
309 mtmetis_real_type
const * ubvec,
310 double const * options,
311 mtmetis_wgt_type * r_edgecut,
312 mtmetis_pid_type * where);
330 mtmetis_vtx_type
const * nvtxs,
331 mtmetis_adj_type
const * xadj,
332 mtmetis_vtx_type
const * adjncy,
333 mtmetis_wgt_type
const * vwgt,
334 double const * options,
335 mtmetis_pid_type * perm,
336 mtmetis_pid_type * iperm);
356 mtmetis_vtx_type nvtxs,
357 mtmetis_adj_type
const * xadj,
358 mtmetis_vtx_type
const * adjncy,
359 mtmetis_wgt_type
const * vwgt,
360 mtmetis_wgt_type
const * adjwgt,
361 double const * options,
362 mtmetis_pid_type * where,
363 mtmetis_wgt_type * r_edgecut);
int mtmetis_partition_explicit(mtmetis_vtx_type nvtxs, mtmetis_adj_type const *xadj, mtmetis_vtx_type const *adjncy, mtmetis_wgt_type const *vwgt, mtmetis_wgt_type const *adjwgt, double const *options, mtmetis_pid_type *where, mtmetis_wgt_type *r_edgecut)
Partition a graph using an explicit set of options detailing what tupe of operation to perform...
int MTMETIS_NodeND(mtmetis_vtx_type const *nvtxs, mtmetis_adj_type const *xadj, mtmetis_vtx_type const *adjncy, mtmetis_wgt_type const *vwgt, double const *options, mtmetis_pid_type *perm, mtmetis_pid_type *iperm)
Create a nested dissection ordering of a graph.
int MTMETIS_PartGraphRecursive(mtmetis_vtx_type const *nvtxs, mtmetis_vtx_type const *ncon, mtmetis_adj_type const *xadj, mtmetis_vtx_type const *adjncy, mtmetis_wgt_type const *vwgt, mtmetis_vtx_type const *vsize, mtmetis_wgt_type const *adjwgt, mtmetis_pid_type const *nparts, mtmetis_real_type const *tpwgts, mtmetis_real_type const *ubvec, double const *options, mtmetis_wgt_type *r_edgecut, mtmetis_pid_type *where)
Create a partitioning of a graph using recursive bisection.
int MTMETIS_PartGraphKway(mtmetis_vtx_type const *nvtxs, mtmetis_vtx_type const *ncon, mtmetis_adj_type const *xadj, mtmetis_vtx_type const *adjncy, mtmetis_wgt_type const *vwgt, mtmetis_vtx_type const *vsize, mtmetis_wgt_type const *adjwgt, mtmetis_pid_type const *nparts, mtmetis_real_type const *tpwgts, mtmetis_real_type const *ubvec, double const *options, mtmetis_wgt_type *r_edgecut, mtmetis_pid_type *where)
Create a direct k-way partitioning of a graph.
double * mtmetis_init_options(void)
Allocate and initialize a set of options for use with the mtmetis_partkway_explicit() function...
Definition: mtmetis.c:174