#include #if defined(HAVE_METIS_) #include "metis.h" /* extern int METIS_PartGraphKway(int *, int *, int *, int *, int *, int *, int *, int *, float *, float, int *, int *, int *); */ int metis_PartGraphKway_C(int *n, int *ixadj, int *iadj, int *ivwg, int *iajw, int *nparts, float *weights, int *graphpart) { int res = -1; idx_t objval = 0; idx_t options[METIS_NOPTIONS]; //printf("Inside Metis/C interface\n"); idx_t ncon=1; METIS_SetDefaultOptions(options); options[METIS_OPTION_NUMBERING] = 1; //printf("n:%p ncon:%p ixadj:%p iadj:%p npart:%p weights:%p options:%p objval:%p graphpart: %p\n",n,&ncon,ixadj,iadj,nparts,NULL,options,&objval,graphpart); /* fprintf(stderr,"From metis_int: %f\n",weights[0]); */ if (weights[0] == -1.0) { res = METIS_PartGraphKway((idx_t*)n,(idx_t *)&ncon,(idx_t *)ixadj,(idx_t *)iadj, NULL,NULL,NULL,(idx_t *)nparts,NULL,NULL,options, &objval,(idx_t *)graphpart); } else { /* res = METIS_PartGraphKway((idx_t*)n,(idx_t *)&ncon,(idx_t *)ixadj,(idx_t *)iadj, */ /* NULL,NULL,NULL,(idx_t *)nparts,NULL,NULL,NULL, */ /* &objval,(idx_t *)graphpart); */ res = METIS_PartGraphKway((idx_t*)n,(idx_t *)&ncon,(idx_t *)ixadj,(idx_t *)iadj, NULL,NULL,NULL,(idx_t *)nparts,weights,NULL,options, &objval,(idx_t *)graphpart); } if (res == METIS_OK) { return(0); } else { return res; } } #else int metis_PartGraphKway_C(int *n, int *ixadj, int *iadj, int *ivwg, int *iajw, int *nparts, float *weights, int *graphpart) { return(-1); } #endif