#include "BSprivate.h"
/*+ BSsort_rows - Sort the rows of A by column number
Input Parameters:
. A - a sparse matrix
Output Parameters:
. A - a sparse matrix with rows in sorted order
Returns:
void
+*/
void BSsort_rows(BSspmat *A, BSpermutation *perm, BSdistribution *distr,
int max_row_len)
{
int i, j, k;
int ind, *colptr;
int count;
BSpermutation *iperm, *tperm;
FLOAT *dwork;
BSsprow *row;
FLOAT *nzptr;
iperm = BSalloc_permutation(A->num_rows); CHKERR(0);
BSperm2iperm(perm,iperm); CHKERR(0);
MY_MALLOC(dwork,(FLOAT *),sizeof(FLOAT)*max_row_len,1);
tperm = BSalloc_permutation(max_row_len); CHKERR(0);
count = 0;
for (i=0;i<distr->max+1;i++) {
ind = iperm->perm[count];
row = A->rows[ind];
BSreset_permutation(row->length,tperm); CHKERR(0);
colptr = row->col;
for (j=0;j<row->length;j++) tperm->perm[j] = j;
BSheap_sort1(row->length,colptr,tperm->perm); CHKERR(0);
for (j=0;j<distr->distribution[i];j++) {
ind = iperm->perm[count];
row = A->rows[ind];
nzptr = row->nz;
BSiperm_dvec(nzptr,dwork,tperm); CHKERR(0);
for (k=0;k<row->length;k++) {
nzptr[k] = dwork[k];
}
count++;
}
}
BSfree_permutation(iperm); CHKERR(0);
BSfree_permutation(tperm); CHKERR(0);
MY_FREE(dwork);
}
syntax highlighted by Code2HTML, v. 0.9.1