mt-Metis
mtmetis.h
Go to the documentation of this file.
1 
14 #ifndef MTMETIS_H
15 #define MTMETIS_H
16 
17 
18 
19 
20 /******************************************************************************
21 * INCLUDES ********************************************************************
22 ******************************************************************************/
23 
24 
25 #include <unistd.h>
26 #include <stdint.h>
27 #include <float.h>
28 
29 
30 
31 
32 /******************************************************************************
33 * MACROS **********************************************************************
34 ******************************************************************************/
35 
36 
37 #define MTMETIS_VER_MAJOR 0
38 #define MTMETIS_VER_MINOR 5
39 #define MTMETIS_VER_SUBMINOR 0
40 
41 
42 
43 
44 /******************************************************************************
45 * TYPES ***********************************************************************
46 ******************************************************************************/
47 
48 
49 #ifndef MTMETIS_GRAPH_TYPES_DEFINED
50 /* define these types for internal use */
51 #ifdef MTMETIS_64BIT_VERTICES
52 typedef uint64_t mtmetis_vtx_type;
53 #else
54 typedef uint32_t mtmetis_vtx_type;
55 #endif
56 
57 #ifdef MTMETIS_64BIT_EDGES
58 typedef uint64_t mtmetis_adj_type;
59 #else
60 typedef uint32_t mtmetis_adj_type;
61 #endif
62 
63 /* this must be signed for refinement to work */
64 #ifdef MTMETIS_64BIT_WEIGHTS
65 typedef int64_t mtmetis_wgt_type;
66 #else
67 typedef int32_t mtmetis_wgt_type;
68 #endif
69 #endif /* MTMETIS_GRAPH_TYPES_DEFINED */
70 
71 
72 #ifdef MTMETIS_64BIT_PARTITIONS
73 typedef uint64_t mtmetis_pid_type;
74 #else
75 typedef uint32_t mtmetis_pid_type;
76 #endif
77 
78 
79 #ifdef MTMETIS_DOUBLE_REAL
80 typedef double mtmetis_real_type;
81 #else
82 typedef float mtmetis_real_type;
83 #endif
84 
85 
86 
87 
88 /* enums *********************************************************************/
89 
90 typedef enum mtmetis_error_t {
91  MTMETIS_SUCCESS = 1,
92  MTMETIS_ERROR_INVALIDINPUT,
93  MTMETIS_ERROR_NOTENOUGHMEMORY,
94  MTMETIS_ERROR_THREADING
95 } mtmetis_error_t;
96 
97 
98 typedef enum mtmetis_option_t {
99  MTMETIS_OPTION_TIME,
100  MTMETIS_OPTION_NPARTS,
101  MTMETIS_OPTION_NTHREADS,
102  MTMETIS_OPTION_SEED,
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,
122  /* used only be command line */
123  MTMETIS_OPTION_VERSION,
124  MTMETIS_OPTION_HELP,
125  __MTMETIS_OPTION_TERM
126 } mtmetis_option_t;
127 
128 
129 typedef enum mtmetis_ctype_t {
130  MTMETIS_CTYPE_RM,
131  MTMETIS_CTYPE_SHEM,
132  MTMETIS_CTYPE_SLEM,
133  MTMETIS_CTYPE_MDM,
134  MTMETIS_CTYPE_FC
135 } mtmetis_ctype_t;
136 
137 
138 typedef enum mtmetis_contype_t {
139  MTMETIS_CONTYPE_CLS,
140  MTMETIS_CONTYPE_DENSE,
141  MTMETIS_CONTYPE_SORT
142 } mtmetis_contype_t;
143 
144 
145 typedef enum mtmetis_rtype_t {
146  MTMETIS_RTYPE_GREEDY,
147  MTMETIS_RTYPE_FM,
148  MTMETIS_RTYPE_SFM,
149  MTMETIS_RTYPE_SFG,
150  MTMETIS_RTYPE_HS
151 } mtmetis_rtype_t;
152 
153 
154 typedef enum mtmetis_ptype_t {
155  MTMETIS_PTYPE_KWAY,
156  MTMETIS_PTYPE_ESEP,
157  MTMETIS_PTYPE_RB,
158  MTMETIS_PTYPE_VSEP,
159  MTMETIS_PTYPE_ND
160 } mtmetis_ptype_t;
161 
162 
163 typedef enum mtmetis_hs_scan_t {
164  MTMETIS_HS_SCAN_SQRT,
165  MTMETIS_HS_SCAN_1PC,
166  MTMETIS_HS_SCAN_5PC,
167  MTMETIS_HS_SCAN_25PC,
168  MTMETIS_HS_SCAN_FULL,
169 } mtmetis_hs_scan_t;
170 
171 
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;
179 
180 
181 typedef enum mtmetis_dtype_t {
182  MTMETIS_DISTRIBUTION_BLOCK,
183  MTMETIS_DISTRIBUTION_CYCLIC,
184  MTMETIS_DISTRIBUTION_BLOCKCYCLIC
185 } mtmetis_dtype_t;
186 
187 
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
197 } mtmetis_part_t;
198 
199 
200 typedef enum mtmetis_ignore_t {
201  MTMETIS_IGNORE_NONE = 0x00,
202  MTMETIS_IGNORE_VERTEXWEIGHTS = 0x01,
203  MTMETIS_IGNORE_EDGEWEIGHTS = 0x02
204 } mtmetis_ignore_t;
205 
206 
207 
208 
209 /******************************************************************************
210 * CONSTANTS *******************************************************************
211 ******************************************************************************/
212 
213 
214 static size_t const MTMETIS_NOPTIONS = __MTMETIS_OPTION_TERM;
215 static double const MTMETIS_VAL_OFF = -DBL_MAX;
216 
217 
218 
219 
220 /******************************************************************************
221 * FUNCTION PROTOTYPES *********************************************************
222 ******************************************************************************/
223 
224 
225 #ifdef __cplusplus
226 extern "C" {
227 #endif
228 
229 
236 double * mtmetis_init_options(void);
237 
238 
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);
275 
276 
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);
313 
314 
329 int MTMETIS_NodeND(
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);
337 
338 
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);
364 
365 
366 
367 
368 #ifdef __cplusplus
369 }
370 #endif
371 
372 
373 
374 #endif
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