Revision 4c2259d583e242ad4881ec98298d7787b5264c6a authored by Ben Hermans on 04 May 2020, 14:31:01 UTC, committed by Ben Hermans on 04 May 2020, 14:31:01 UTC
1 parent effd840
transpose.c
#include "types.h"
#include "global.h"
#include "constants.h"
ladel_sparse_matrix *ladel_transpose(ladel_sparse_matrix *M, int values, ladel_work* work)
{
if (!M || !work) return NULL;
ladel_int index;
ladel_int *col_pointers = work->array_int_ncol1;
for (index = 0; index < M->nrow; index++) col_pointers[index] = 0;
ladel_sparse_matrix *M_transpose = ladel_sparse_alloc(M->ncol, M->nrow, M->nzmax, -M->symmetry, values && M->values);
if (!M_transpose) return NULL;
ladel_int col, new_index, prev_col_count;
for (index = 0; index < M->nzmax; index++) col_pointers[M->i[index]]++;
M_transpose->p[0] = 0;
for (col = 1; col < M_transpose->ncol; col++)
{
prev_col_count = col_pointers[col-1];
col_pointers[col] += prev_col_count;
M_transpose->p[col] = prev_col_count;
col_pointers[col-1] = M_transpose->p[col-1];
}
M_transpose->p[M_transpose->ncol] = col_pointers[M_transpose->ncol-1];
col_pointers[M_transpose->ncol-1] = M_transpose->p[M_transpose->ncol-1];
for (col = 0; col < M->ncol; col++)
{
for (index = M->p[col]; index < M->p[col+1]; index++)
{
new_index = col_pointers[M->i[index]]++;
M_transpose->i[new_index] = col;
if (M_transpose->values) M_transpose->x[new_index] = M->x[index];
}
}
return M_transpose;
}

Computing file changes ...