Ordered the COO format also along the columns to have a correct CSR format
This commit is contained in:
parent
8ac6093e34
commit
d8ea559c92
|
|
@ -18,6 +18,18 @@ CompareRow (const void *a, const void *b)
|
||||||
0 ;
|
0 ;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
CompareColumn (const void *a, const void *b)
|
||||||
|
{
|
||||||
|
Element *A = (Element *) a ;
|
||||||
|
Element *B = (Element *) b ;
|
||||||
|
|
||||||
|
return
|
||||||
|
(A->col > B->col) ? 1 :
|
||||||
|
(A->col < B->col) ? -1 :
|
||||||
|
0 ;
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
Compress (Int *Ai, Int *Bp, int num_rows, int n_COO)
|
Compress (Int *Ai, Int *Bp, int num_rows, int n_COO)
|
||||||
{
|
{
|
||||||
|
|
@ -117,6 +129,23 @@ KLU_convert_matrix_in_CSR /* return TRUE if successful, FALSE otherwise
|
||||||
/* Order the MatrixCOO along the rows */
|
/* Order the MatrixCOO along the rows */
|
||||||
qsort (MatrixCOO, (size_t)nz, sizeof(Element), CompareRow) ;
|
qsort (MatrixCOO, (size_t)nz, sizeof(Element), CompareRow) ;
|
||||||
|
|
||||||
|
/* Order the MatrixCOO along the columns */
|
||||||
|
i = 0 ;
|
||||||
|
while (i < nz)
|
||||||
|
{
|
||||||
|
for (j = i + 1 ; j < nz ; j++)
|
||||||
|
{
|
||||||
|
if (MatrixCOO [j].row != MatrixCOO [i].row)
|
||||||
|
{
|
||||||
|
break ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
qsort (MatrixCOO + i, (size_t)(j - i), sizeof(Element), CompareColumn) ;
|
||||||
|
|
||||||
|
i = j ;
|
||||||
|
}
|
||||||
|
|
||||||
for (i = 0 ; i < nz ; i++)
|
for (i = 0 ; i < nz ; i++)
|
||||||
{
|
{
|
||||||
Ap_COO [i] = MatrixCOO [i].row ;
|
Ap_COO [i] = MatrixCOO [i].row ;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue