ctrl->minsize = 4;
ctrl->min_coarsen_factor = 0.75;
ctrl->maxlevel = 1<<30;
- ctrl->randomize = TRUE;
ctrl->coarsen_scheme = COARSEN_INDEPENDENT_EDGE_SET_HEAVEST_EDGE_PERNODE_SUPERNODES_FIRST;
ctrl->coarsen_mode = COARSEN_MODE_FORCEFUL;
free(grid);
}
-static void maximal_independent_vertex_set(SparseMatrix A, int randomize, int **vset, int *nvset, int *nzc){
+static void maximal_independent_vertex_set(SparseMatrix A, int **vset, int *nvset, int *nzc){
int i, ii, j, *ia, *ja, m, n, *p = NULL;
(void)n;
assert(A);
*nvset = 0;
*nzc = 0;
- if (!randomize){
- for (i = 0; i < m; i++){
- if ((*vset)[i] == MAX_IND_VTX_SET_U){
- (*vset)[i] = (*nvset)++;
- for (j = ia[i]; j < ia[i+1]; j++){
- if (i == ja[j]) continue;
- (*vset)[ja[j]] = MAX_IND_VTX_SET_F;
- (*nzc)++;
- }
- }
- }
- } else {
- p = random_permutation(m);
- for (ii = 0; ii < m; ii++){
- i = p[ii];
- if ((*vset)[i] == MAX_IND_VTX_SET_U){
- (*vset)[i] = (*nvset)++;
- for (j = ia[i]; j < ia[i+1]; j++){
- if (i == ja[j]) continue;
- (*vset)[ja[j]] = MAX_IND_VTX_SET_F;
- (*nzc)++;
- }
+ p = random_permutation(m);
+ for (ii = 0; ii < m; ii++){
+ i = p[ii];
+ if ((*vset)[i] == MAX_IND_VTX_SET_U){
+ (*vset)[i] = (*nvset)++;
+ for (j = ia[i]; j < ia[i+1]; j++){
+ if (i == ja[j]) continue;
+ (*vset)[ja[j]] = MAX_IND_VTX_SET_F;
+ (*nzc)++;
}
}
- free(p);
}
+ free(p);
(*nzc) += *nvset;
}
-
-static void maximal_independent_vertex_set_RS(SparseMatrix A, int randomize, int **vset, int *nvset, int *nzc){
+static void maximal_independent_vertex_set_RS(SparseMatrix A, int **vset, int *nvset, int *nzc){
/* The Ruge-Stuben coarsening scheme. Initially all vertices are in the U set (with marker MAX_IND_VTX_SET_U),
with gain equal to their degree. Select vertex with highest gain into a C set (with
marker >= MAX_IND_VTX_SET_C), and their neighbors j in F set (with marker MAX_IND_VTX_SET_F). The neighbors of
q = PriorityQueue_new(m, 2*(m-1));
- if (!randomize){
- for (i = 0; i < m; i++)
- PriorityQueue_push(q, i, ia[i+1] - ia[i]);
- } else {
- p = random_permutation(m);
- for (ii = 0; ii < m; ii++){
- i = p[ii];
- PriorityQueue_push(q, i, ia[i+1] - ia[i]);
- }
- free(p);
+ p = random_permutation(m);
+ for (ii = 0; ii < m; ii++){
+ i = p[ii];
+ PriorityQueue_push(q, i, ia[i+1] - ia[i]);
}
+ free(p);
while (PriorityQueue_pop(q, &i, &gain)){
assert((*vset)[i] == MAX_IND_VTX_SET_U);
}
-
-
-static void maximal_independent_edge_set(SparseMatrix A, int randomize, int **matching, int *nmatch){
+static void maximal_independent_edge_set(SparseMatrix A, int **matching, int *nmatch){
int i, ii, j, *ia, *ja, m, n, *p = NULL;
assert(A);
assert(SparseMatrix_known_strucural_symmetric(A));
for (i = 0; i < m; i++) (*matching)[i] = i;
*nmatch = n;
- if (!randomize){
- for (i = 0; i < m; i++){
- for (j = ia[i]; j < ia[i+1]; j++){
- if (i == ja[j]) continue;
- if ((*matching)[ja[j]] == ja[j] && (*matching)[i] == i){
- (*matching)[ja[j]] = i;
- (*matching)[i] = ja[j];
- (*nmatch)--;
- }
- }
- }
- } else {
- p = random_permutation(m);
- for (ii = 0; ii < m; ii++){
- i = p[ii];
- for (j = ia[i]; j < ia[i+1]; j++){
- if (i == ja[j]) continue;
- if ((*matching)[ja[j]] == ja[j] && (*matching)[i] == i){
- (*matching)[ja[j]] = i;
- (*matching)[i] = ja[j];
- (*nmatch)--;
- }
+ p = random_permutation(m);
+ for (ii = 0; ii < m; ii++){
+ i = p[ii];
+ for (j = ia[i]; j < ia[i+1]; j++){
+ if (i == ja[j]) continue;
+ if ((*matching)[ja[j]] == ja[j] && (*matching)[i] == i){
+ (*matching)[ja[j]] = i;
+ (*matching)[i] = ja[j];
+ (*nmatch)--;
}
}
- free(p);
}
+ free(p);
}
-
-
-static void maximal_independent_edge_set_heavest_edge_pernode(SparseMatrix A, int randomize, int **matching, int *nmatch){
+static void maximal_independent_edge_set_heavest_edge_pernode(SparseMatrix A, int **matching, int *nmatch){
int i, ii, j, *ia, *ja, m, n, *p = NULL;
double *a, amax = 0;
int first = TRUE, jamax = 0;
assert(A->type == MATRIX_TYPE_REAL);
a = A->a;
- if (!randomize){
- for (i = 0; i < m; i++){
- first = TRUE;
- for (j = ia[i]; j < ia[i+1]; j++){
- if (i == ja[j]) continue;
- if ((*matching)[ja[j]] == ja[j] && (*matching)[i] == i){
- if (first) {
- amax = a[j];
- jamax = ja[j];
- first = FALSE;
- } else {
- if (a[j] > amax){
- amax = a[j];
- jamax = ja[j];
- }
- }
- }
- }
- if (!first){
- (*matching)[jamax] = i;
- (*matching)[i] = jamax;
- (*nmatch)--;
- }
- }
- } else {
- p = random_permutation(m);
- for (ii = 0; ii < m; ii++){
- i = p[ii];
- if ((*matching)[i] != i) continue;
- first = TRUE;
- for (j = ia[i]; j < ia[i+1]; j++){
- if (i == ja[j]) continue;
- if ((*matching)[ja[j]] == ja[j] && (*matching)[i] == i){
- if (first) {
- amax = a[j];
- jamax = ja[j];
- first = FALSE;
- } else {
- if (a[j] > amax){
- amax = a[j];
- jamax = ja[j];
- }
- }
- }
- }
- if (!first){
- (*matching)[jamax] = i;
- (*matching)[i] = jamax;
- (*nmatch)--;
- }
+ p = random_permutation(m);
+ for (ii = 0; ii < m; ii++){
+ i = p[ii];
+ if ((*matching)[i] != i) continue;
+ first = TRUE;
+ for (j = ia[i]; j < ia[i+1]; j++){
+ if (i == ja[j]) continue;
+ if ((*matching)[ja[j]] == ja[j] && (*matching)[i] == i){
+ if (first) {
+ amax = a[j];
+ jamax = ja[j];
+ first = FALSE;
+ } else {
+ if (a[j] > amax){
+ amax = a[j];
+ jamax = ja[j];
+ }
+ }
+ }
+ }
+ if (!first){
+ (*matching)[jamax] = i;
+ (*matching)[i] = jamax;
+ (*nmatch)--;
}
- free(p);
}
+ free(p);
}
#define node_degree(i) (ia[(i)+1] - ia[(i)])
-static void maximal_independent_edge_set_heavest_edge_pernode_leaves_first(SparseMatrix A, int randomize, int **cluster, int **clusterp, int *ncluster){
+static void maximal_independent_edge_set_heavest_edge_pernode_leaves_first(SparseMatrix A, int **cluster, int **clusterp, int *ncluster){
int i, ii, j, *ia, *ja, m, n, *p = NULL, q;
(void)n;
double *a, amax = 0;
(*clusterp)[0] = 0;
nz = 0;
a = A->a;
- if (!randomize){
- for (i = 0; i < m; i++){
- if (matched[i] == MATCHED || node_degree(i) != 1) continue;
- q = ja[ia[i]];
- assert(matched[q] != MATCHED);
- matched[q] = MATCHED;
- (*cluster)[nz++] = q;
- for (j = ia[q]; j < ia[q+1]; j++){
- if (q == ja[j]) continue;
- if (node_degree(ja[j]) == 1){
- matched[ja[j]] = MATCHED;
- (*cluster)[nz++] = ja[j];
- }
- }
- ncmax = MAX(ncmax, nz - (*clusterp)[*ncluster]);
- nz0 = (*clusterp)[*ncluster];
- if (nz - nz0 <= MAX_CLUSTER_SIZE){
- (*clusterp)[++(*ncluster)] = nz;
- } else {
- (*clusterp)[++(*ncluster)] = ++nz0;
- nzz = nz0;
- for (k = nz0; k < nz && nzz < nz; k++){
- nzz += MAX_CLUSTER_SIZE - 1;
- nzz = MIN(nz, nzz);
- (*clusterp)[++(*ncluster)] = nzz;
- }
- }
-
- }
- #ifdef DEBUG_print
- if (Verbose)
- fprintf(stderr, "%d leaves and parents for %d clusters, largest cluster = %d\n",nz, *ncluster, ncmax);
-#endif
- for (i = 0; i < m; i++){
- first = TRUE;
- if (matched[i] == MATCHED) continue;
- for (j = ia[i]; j < ia[i+1]; j++){
- if (i == ja[j]) continue;
- if (matched[ja[j]] != MATCHED && matched[i] != MATCHED){
- if (first) {
- amax = a[j];
- jamax = ja[j];
- first = FALSE;
- } else {
- if (a[j] > amax){
- amax = a[j];
- jamax = ja[j];
- }
- }
- }
- }
- if (!first){
- matched[jamax] = MATCHED;
- matched[i] = MATCHED;
- (*cluster)[nz++] = i;
- (*cluster)[nz++] = jamax;
- (*clusterp)[++(*ncluster)] = nz;
- }
- }
-
- for (i = 0; i < m; i++){
- if (matched[i] == i){
- (*cluster)[nz++] = i;
- (*clusterp)[++(*ncluster)] = nz;
+ p = random_permutation(m);
+ for (ii = 0; ii < m; ii++){
+ i = p[ii];
+ if (matched[i] == MATCHED || node_degree(i) != 1) continue;
+ q = ja[ia[i]];
+ assert(matched[q] != MATCHED);
+ matched[q] = MATCHED;
+ (*cluster)[nz++] = q;
+ for (j = ia[q]; j < ia[q+1]; j++){
+ if (q == ja[j]) continue;
+ if (node_degree(ja[j]) == 1){
+ matched[ja[j]] = MATCHED;
+ (*cluster)[nz++] = ja[j];
}
}
- assert(nz == n);
-
- } else {
- p = random_permutation(m);
- for (ii = 0; ii < m; ii++){
- i = p[ii];
- if (matched[i] == MATCHED || node_degree(i) != 1) continue;
- q = ja[ia[i]];
- assert(matched[q] != MATCHED);
- matched[q] = MATCHED;
- (*cluster)[nz++] = q;
- for (j = ia[q]; j < ia[q+1]; j++){
- if (q == ja[j]) continue;
- if (node_degree(ja[j]) == 1){
- matched[ja[j]] = MATCHED;
- (*cluster)[nz++] = ja[j];
- }
- }
- ncmax = MAX(ncmax, nz - (*clusterp)[*ncluster]);
- nz0 = (*clusterp)[*ncluster];
- if (nz - nz0 <= MAX_CLUSTER_SIZE){
- (*clusterp)[++(*ncluster)] = nz;
- } else {
- (*clusterp)[++(*ncluster)] = ++nz0;
- nzz = nz0;
- for (k = nz0; k < nz && nzz < nz; k++){
- nzz += MAX_CLUSTER_SIZE - 1;
- nzz = MIN(nz, nzz);
- (*clusterp)[++(*ncluster)] = nzz;
- }
+ ncmax = MAX(ncmax, nz - (*clusterp)[*ncluster]);
+ nz0 = (*clusterp)[*ncluster];
+ if (nz - nz0 <= MAX_CLUSTER_SIZE){
+ (*clusterp)[++(*ncluster)] = nz;
+ } else {
+ (*clusterp)[++(*ncluster)] = ++nz0;
+ nzz = nz0;
+ for (k = nz0; k < nz && nzz < nz; k++){
+ nzz += MAX_CLUSTER_SIZE - 1;
+ nzz = MIN(nz, nzz);
+ (*clusterp)[++(*ncluster)] = nzz;
}
}
+ }
#ifdef DEBUG_print
- if (Verbose)
- fprintf(stderr, "%d leaves and parents for %d clusters, largest cluster = %d\n",nz, *ncluster, ncmax);
+ if (Verbose)
+ fprintf(stderr, "%d leaves and parents for %d clusters, largest cluster = %d\n",nz, *ncluster, ncmax);
#endif
- for (ii = 0; ii < m; ii++){
- i = p[ii];
- first = TRUE;
- if (matched[i] == MATCHED) continue;
- for (j = ia[i]; j < ia[i+1]; j++){
- if (i == ja[j]) continue;
- if (matched[ja[j]] != MATCHED && matched[i] != MATCHED){
- if (first) {
- amax = a[j];
- jamax = ja[j];
- first = FALSE;
- } else {
- if (a[j] > amax){
- amax = a[j];
- jamax = ja[j];
- }
- }
- }
- }
- if (!first){
- matched[jamax] = MATCHED;
- matched[i] = MATCHED;
- (*cluster)[nz++] = i;
- (*cluster)[nz++] = jamax;
- (*clusterp)[++(*ncluster)] = nz;
- }
+ for (ii = 0; ii < m; ii++){
+ i = p[ii];
+ first = TRUE;
+ if (matched[i] == MATCHED) continue;
+ for (j = ia[i]; j < ia[i+1]; j++){
+ if (i == ja[j]) continue;
+ if (matched[ja[j]] != MATCHED && matched[i] != MATCHED){
+ if (first) {
+ amax = a[j];
+ jamax = ja[j];
+ first = FALSE;
+ } else {
+ if (a[j] > amax){
+ amax = a[j];
+ jamax = ja[j];
+ }
+ }
+ }
+ }
+ if (!first){
+ matched[jamax] = MATCHED;
+ matched[i] = MATCHED;
+ (*cluster)[nz++] = i;
+ (*cluster)[nz++] = jamax;
+ (*clusterp)[++(*ncluster)] = nz;
}
+ }
- for (i = 0; i < m; i++){
- if (matched[i] == i){
- (*cluster)[nz++] = i;
- (*clusterp)[++(*ncluster)] = nz;
- }
+ for (i = 0; i < m; i++){
+ if (matched[i] == i){
+ (*cluster)[nz++] = i;
+ (*clusterp)[++(*ncluster)] = nz;
}
-
- free(p);
}
+ free(p);
+
free(matched);
}
-
-
-static void maximal_independent_edge_set_heavest_edge_pernode_supernodes_first(SparseMatrix A, int randomize, int **cluster, int **clusterp, int *ncluster){
+static void maximal_independent_edge_set_heavest_edge_pernode_supernodes_first(SparseMatrix A, int **cluster, int **clusterp, int *ncluster){
int i, ii, j, *ia, *ja, m, n, *p = NULL;
(void)n;
double *a, amax = 0;
if (nz > nz0) (*clusterp)[++(*ncluster)] = nz;
}
- if (!randomize){
- for (i = 0; i < m; i++){
- first = TRUE;
- if (matched[i] == MATCHED) continue;
- for (j = ia[i]; j < ia[i+1]; j++){
- if (i == ja[j]) continue;
- if (matched[ja[j]] != MATCHED && matched[i] != MATCHED){
- if (first) {
- amax = a[j];
- jamax = ja[j];
- first = FALSE;
- } else {
- if (a[j] > amax){
- amax = a[j];
- jamax = ja[j];
- }
- }
- }
- }
- if (!first){
- matched[jamax] = MATCHED;
- matched[i] = MATCHED;
- (*cluster)[nz++] = i;
- (*cluster)[nz++] = jamax;
- (*clusterp)[++(*ncluster)] = nz;
- }
- }
-
- for (i = 0; i < m; i++){
- if (matched[i] == i){
- (*cluster)[nz++] = i;
- (*clusterp)[++(*ncluster)] = nz;
- }
- }
- assert(nz == n);
-
- } else {
- p = random_permutation(m);
- for (ii = 0; ii < m; ii++){
- i = p[ii];
- first = TRUE;
- if (matched[i] == MATCHED) continue;
- for (j = ia[i]; j < ia[i+1]; j++){
- if (i == ja[j]) continue;
- if (matched[ja[j]] != MATCHED && matched[i] != MATCHED){
- if (first) {
- amax = a[j];
- jamax = ja[j];
- first = FALSE;
- } else {
- if (a[j] > amax){
- amax = a[j];
- jamax = ja[j];
- }
- }
- }
- }
- if (!first){
- matched[jamax] = MATCHED;
- matched[i] = MATCHED;
- (*cluster)[nz++] = i;
- (*cluster)[nz++] = jamax;
- (*clusterp)[++(*ncluster)] = nz;
- }
+ p = random_permutation(m);
+ for (ii = 0; ii < m; ii++){
+ i = p[ii];
+ first = TRUE;
+ if (matched[i] == MATCHED) continue;
+ for (j = ia[i]; j < ia[i+1]; j++){
+ if (i == ja[j]) continue;
+ if (matched[ja[j]] != MATCHED && matched[i] != MATCHED){
+ if (first) {
+ amax = a[j];
+ jamax = ja[j];
+ first = FALSE;
+ } else {
+ if (a[j] > amax){
+ amax = a[j];
+ jamax = ja[j];
+ }
+ }
+ }
+ }
+ if (!first){
+ matched[jamax] = MATCHED;
+ matched[i] = MATCHED;
+ (*cluster)[nz++] = i;
+ (*cluster)[nz++] = jamax;
+ (*clusterp)[++(*ncluster)] = nz;
}
+ }
- for (i = 0; i < m; i++){
- if (matched[i] == i){
- (*cluster)[nz++] = i;
- (*clusterp)[++(*ncluster)] = nz;
- }
+ for (i = 0; i < m; i++){
+ if (matched[i] == i){
+ (*cluster)[nz++] = i;
+ (*clusterp)[++(*ncluster)] = nz;
}
- free(p);
-
}
+ free(p);
free(super);
free(matched);
}
-static void maximal_independent_edge_set_heavest_edge_pernode_scaled(SparseMatrix A, int randomize, int **matching, int *nmatch){
+
+static void maximal_independent_edge_set_heavest_edge_pernode_scaled(SparseMatrix A, int **matching, int *nmatch){
int i, ii, j, *ia, *ja, m, n, *p = NULL;
double *a, amax = 0;
int first = TRUE, jamax = 0;
assert(A->type == MATRIX_TYPE_REAL);
a = A->a;
- if (!randomize){
- for (i = 0; i < m; i++){
- first = TRUE;
- for (j = ia[i]; j < ia[i+1]; j++){
- if (i == ja[j]) continue;
- if ((*matching)[ja[j]] == ja[j] && (*matching)[i] == i){
- if (first) {
- amax = a[j]/(ia[i+1]-ia[i])/(ia[ja[j]+1]-ia[ja[j]]);
- jamax = ja[j];
- first = FALSE;
- } else {
- if (a[j]/(ia[i+1]-ia[i])/(ia[ja[j]+1]-ia[ja[j]]) > amax){
- amax = a[j]/(ia[i+1]-ia[i])/(ia[ja[j]+1]-ia[ja[j]]);
- jamax = ja[j];
- }
- }
- }
- }
- if (!first){
- (*matching)[jamax] = i;
- (*matching)[i] = jamax;
- (*nmatch)--;
- }
- }
- } else {
- p = random_permutation(m);
- for (ii = 0; ii < m; ii++){
- i = p[ii];
- if ((*matching)[i] != i) continue;
- first = TRUE;
- for (j = ia[i]; j < ia[i+1]; j++){
- if (i == ja[j]) continue;
- if ((*matching)[ja[j]] == ja[j] && (*matching)[i] == i){
- if (first) {
- amax = a[j]/(ia[i+1]-ia[i])/(ia[ja[j]+1]-ia[ja[j]]);
- jamax = ja[j];
- first = FALSE;
- } else {
- if (a[j]/(ia[i+1]-ia[i])/(ia[ja[j]+1]-ia[ja[j]]) > amax){
- amax = a[j]/(ia[i+1]-ia[i])/(ia[ja[j]+1]-ia[ja[j]]);
- jamax = ja[j];
- }
- }
- }
- }
- if (!first){
- (*matching)[jamax] = i;
- (*matching)[i] = jamax;
- (*nmatch)--;
- }
+ p = random_permutation(m);
+ for (ii = 0; ii < m; ii++){
+ i = p[ii];
+ if ((*matching)[i] != i) continue;
+ first = TRUE;
+ for (j = ia[i]; j < ia[i+1]; j++){
+ if (i == ja[j]) continue;
+ if ((*matching)[ja[j]] == ja[j] && (*matching)[i] == i){
+ if (first) {
+ amax = a[j]/(ia[i+1]-ia[i])/(ia[ja[j]+1]-ia[ja[j]]);
+ jamax = ja[j];
+ first = FALSE;
+ } else {
+ if (a[j]/(ia[i+1]-ia[i])/(ia[ja[j]+1]-ia[ja[j]]) > amax){
+ amax = a[j]/(ia[i+1]-ia[i])/(ia[ja[j]+1]-ia[ja[j]]);
+ jamax = ja[j];
+ }
+ }
+ }
+ }
+ if (!first){
+ (*matching)[jamax] = i;
+ (*matching)[i] = jamax;
+ (*nmatch)--;
}
- free(p);
}
+ free(p);
}
static void Multilevel_coarsen_internal(SparseMatrix A, SparseMatrix *cA, SparseMatrix D, SparseMatrix *cD,
case COARSEN_INDEPENDENT_EDGE_SET_HEAVEST_CLUSTER_PERNODE_LEAVES_FIRST:
case COARSEN_INDEPENDENT_EDGE_SET_HEAVEST_EDGE_PERNODE_LEAVES_FIRST:
if (ctrl->coarsen_scheme == COARSEN_INDEPENDENT_EDGE_SET_HEAVEST_EDGE_PERNODE_LEAVES_FIRST) {
- maximal_independent_edge_set_heavest_edge_pernode_leaves_first(A, ctrl->randomize, &cluster, &clusterp, &ncluster);
+ maximal_independent_edge_set_heavest_edge_pernode_leaves_first(A, &cluster, &clusterp, &ncluster);
} else if (ctrl->coarsen_scheme == COARSEN_INDEPENDENT_EDGE_SET_HEAVEST_EDGE_PERNODE_SUPERNODES_FIRST) {
- maximal_independent_edge_set_heavest_edge_pernode_supernodes_first(A, ctrl->randomize, &cluster, &clusterp, &ncluster);
+ maximal_independent_edge_set_heavest_edge_pernode_supernodes_first(A, &cluster, &clusterp, &ncluster);
} else {
maximal_independent_edge_set_heavest_cluster_pernode_leaves_first(A, 4, &cluster, &clusterp, &ncluster);
}
break;
case COARSEN_INDEPENDENT_EDGE_SET:
- maximal_independent_edge_set(A, ctrl->randomize, &matching, &nmatch);
+ maximal_independent_edge_set(A, &matching, &nmatch);
case COARSEN_INDEPENDENT_EDGE_SET_HEAVEST_EDGE_PERNODE:
if (ctrl->coarsen_scheme == COARSEN_INDEPENDENT_EDGE_SET_HEAVEST_EDGE_PERNODE)
- maximal_independent_edge_set_heavest_edge_pernode(A, ctrl->randomize, &matching, &nmatch);
+ maximal_independent_edge_set_heavest_edge_pernode(A, &matching, &nmatch);
case COARSEN_INDEPENDENT_EDGE_SET_HEAVEST_EDGE_PERNODE_DEGREE_SCALED:
if (ctrl->coarsen_scheme == COARSEN_INDEPENDENT_EDGE_SET_HEAVEST_EDGE_PERNODE_DEGREE_SCALED)
- maximal_independent_edge_set_heavest_edge_pernode_scaled(A, ctrl->randomize, &matching, &nmatch);
+ maximal_independent_edge_set_heavest_edge_pernode_scaled(A, &matching, &nmatch);
nc = nmatch;
if ((ctrl->coarsen_mode == COARSEN_MODE_GENTLE && nc > ctrl->min_coarsen_factor*n) || nc == n || nc < ctrl->minsize) {
#ifdef DEBUG_PRINT
case COARSEN_INDEPENDENT_VERTEX_SET:
case COARSEN_INDEPENDENT_VERTEX_SET_RS:
if (ctrl->coarsen_scheme == COARSEN_INDEPENDENT_VERTEX_SET){
- maximal_independent_vertex_set(A, ctrl->randomize, &vset, &nvset, &nzc);
+ maximal_independent_vertex_set(A, &vset, &nvset, &nzc);
} else {
- maximal_independent_vertex_set_RS(A, ctrl->randomize, &vset, &nvset, &nzc);
+ maximal_independent_vertex_set_RS(A, &vset, &nvset, &nzc);
}
ia = A->ia;
ja = A->ja;