59 const float *values = spm->
values;
78 for ( i=0; i<spm->
n; i++ )
80 int has_nonzero_diag = 0;
86 for ( j=begin; j<end; j++ )
88 if ( rowptr[j] == diag ) {
89 has_nonzero_diag = (values[j] != (float)0.0);
97 if ( !has_nonzero_diag ) {
98 if ( *zeros_n == size ) {
102 newlist = realloc( *zeros_list,
104 if ( newlist == NULL ) {
107 *zeros_list = newlist;
110 (*zeros_list)[(*zeros_n)++] = diag;
172 *zeros_list = malloc( (*zeros_n) *
sizeof(
spm_int_t ) );
173 if ( *zeros_list == NULL ) {
184 fprintf( stderr,
"spmGetDiagonalZeros: Unsupported for IJV matrices\n");
197 if ( *zeros_n == 0 ) {
202 newlist = realloc( *zeros_list,
204 if ( newlist == NULL ) {
210 *zeros_list = newlist;
static spm_int_t spm_imin(spm_int_t a, spm_int_t b)
Internal function to compute min(a,b).
static spm_int_t spm_imax(spm_int_t a, spm_int_t b)
Internal function to compute max(a,b).
static int s_spm_get_diagonal_zeros_csx(const spmatrix_t *spm, spm_int_t *zeros_n, spm_int_t **zeros_list)
Scan a CSC or CSR matrix for zero or missing diagonal entries.
int s_spmGetDiagonalZeros(const spmatrix_t *spm, spm_int_t *zeros_n, spm_int_t **zeros_list)
Detect unknowns with a zero or missing diagonal entry.
struct spmatrix_s spmatrix_t
The sparse matrix data structure.
spm_int_t spmFindBase(const spmatrix_t *spm)
Search the base used in the spm structure.
int spm_int_t
The main integer datatype used in spm arrays.