From 34a40f0ead6e371914c7d0b6a3646fe51034c37f Mon Sep 17 00:00:00 2001 From: Mathieu Faverge <mathieu.faverge@inria.fr> Date: Mon, 14 Nov 2016 16:46:37 -0500 Subject: [PATCH] Trying to fix an issue in convert test with 0 becoming -0 in imaginary part of diagonal-elements but does not work --- z_spm_2dense.c | 20 ++++++++++++++++---- z_spm_convert_to_csc.c | 4 +++- z_spm_convert_to_csr.c | 4 +++- 3 files changed, 22 insertions(+), 6 deletions(-) diff --git a/z_spm_2dense.c b/z_spm_2dense.c index 03f06c3d..ad9933ff 100644 --- a/z_spm_2dense.c +++ b/z_spm_2dense.c @@ -117,8 +117,14 @@ z_spmCSC2dense( const pastix_spm_t *spm ) { for(ii=0; ii<dofi; ii++, valptr++) { - A[ (col + jj) * lda + (row + ii) ] = *valptr; - A[ (row + ii) * lda + (col + jj) ] = conj(*valptr); + if( col+jj == row+ii ) { + /* Make sure the matrix is hermitian */ + A[ (col + jj) * lda + (row + ii) ] = creal(*valptr) + I * 0.; + } + else { + A[ (col + jj) * lda + (row + ii) ] = *valptr; + A[ (row + ii) * lda + (col + jj) ] = conj(*valptr); + } } } } @@ -268,8 +274,14 @@ z_spmCSR2dense( const pastix_spm_t *spm ) { for(ii=0; ii<dofi; ii++, valptr++) { - A[ (col + jj) * lda + (row + ii) ] = *valptr; - A[ (row + ii) * lda + (col + jj) ] = conj(*valptr); + if( col+jj == row+ii ) { + /* Make sure the matrix is hermitian */ + A[ (col + jj) * lda + (row + ii) ] = creal(*valptr) + I * 0.; + } + else { + A[ (col + jj) * lda + (row + ii) ] = *valptr; + A[ (row + ii) * lda + (col + jj) ] = conj(*valptr); + } } } } diff --git a/z_spm_convert_to_csc.c b/z_spm_convert_to_csc.c index bd76019c..ed0db67d 100644 --- a/z_spm_convert_to_csc.c +++ b/z_spm_convert_to_csc.c @@ -161,7 +161,9 @@ z_spmConvertCSR2CSC( pastix_spm_t *spm ) pastix_int_t i; for(i=0; i<spm->nnz; i++, valptr++){ - *valptr = conj( *valptr ); + if (spm->rowptr[i] != spm->colptr[i]) { + *valptr = conj( *valptr ); + } } } #endif diff --git a/z_spm_convert_to_csr.c b/z_spm_convert_to_csr.c index c1d0d458..026df262 100644 --- a/z_spm_convert_to_csr.c +++ b/z_spm_convert_to_csr.c @@ -53,7 +53,9 @@ z_spmConvertCSC2CSR( pastix_spm_t *spm ) pastix_int_t i; for(i=0; i<spm->nnz; i++, valptr++){ - *valptr = conj( *valptr ); + if (spm->rowptr[i] != spm->colptr[i]) { + *valptr = conj( *valptr ); + } } } #endif -- GitLab