#include #if defined(HAVE_METIS_) #include "psb_metis_int.h" #if defined(METIS_REAL_32) int metis_PartGraphKway_C(idx_t *n, idx_t *ixadj, idx_t *iadj, idx_t *ivwg, idx_t *iajw, idx_t *nparts, float *weights, idx_t *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; } } #elif defined(METIS_REAL_64) int metis_PartGraphKway_C(idx_t *n, idx_t *ixadj, idx_t *iadj, idx_t *ivwg, idx_t *iajw, idx_t *nparts, double *weights, idx_t *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(idx_t *n, idx_t *ixadj, idx_t *iadj, idx_t *ivwg, idx_t *iajw, idx_t *nparts, float *weights, idx_t *graphpart) { return(-1); } #endif #endif