diff --git a/include/spm.h b/include/spm.h index fbe39e71e925c31540c3a598feaf2393334e6393..58a9689dd1a10cc6289702d0319a7a4ef20e7145 100644 --- a/include/spm.h +++ b/include/spm.h @@ -48,9 +48,9 @@ */ typedef struct spmatrix_s { spm_mtxtype_t mtxtype; /**< Matrix structure: SpmGeneral, SpmSymmetric - or SpmHermitian. */ + or SpmHermitian. */ spm_coeftype_t flttype; /**< values datatype: SpmPattern, SpmFloat, SpmDouble, - SpmComplex32 or SpmComplex64 */ + SpmComplex32 or SpmComplex64 */ spm_fmttype_t fmttype; /**< Matrix storage format: SpmCSC, SpmCSR, SpmIJV */ spm_int_t gN; /**< Global number of vertices in the compressed graph (Computed) */ @@ -64,8 +64,8 @@ typedef struct spmatrix_s { spm_int_t nnzexp; /**< Local number of non zeroes in the compressed graph (Computed) */ spm_int_t dof; /**< Number of degrees of freedom per unknown, - if > 0, constant degree of freedom - otherwise, irregular degree of freedom (refer to dofs) */ + if > 0, constant degree of freedom + otherwise, irregular degree of freedom (refer to dofs) */ spm_int_t *dofs; /**< Array of the first column of each element in the expanded matrix [+baseval] */ spm_layout_t layout; /**< SpmColMajor, or SpmRowMajor */ @@ -98,9 +98,9 @@ void spmGenFakeValues( spmatrix_t *spm ); double spmNorm( spm_normtype_t ntype, const spmatrix_t *spm ); int spmMatVec( spm_trans_t trans, const void *alpha, const spmatrix_t *spm, const void *x, const void *beta, void *y ); int spmMatMat( spm_trans_t trans, spm_int_t n, - const void *alpha, const spmatrix_t *A, - const void *B, spm_int_t ldb, - const void *beta, void *C, spm_int_t ldc ); + const void *alpha, const spmatrix_t *A, + const void *B, spm_int_t ldb, + const void *beta, void *C, spm_int_t ldc ); void spmScalMatrix( double alpha, spmatrix_t *spm ); void spmScalVector( spm_coeftype_t flt, double alpha, spm_int_t n, void *x, spm_int_t incx ); @@ -146,9 +146,9 @@ int spmSave( const spmatrix_t *spm, FILE *outfile ); * @{ */ int spmReadDriver( spm_driver_t driver, - const char *filename, - spmatrix_t *spm, - MPI_Comm spm_comm ); + const char *filename, + spmatrix_t *spm, + MPI_Comm spm_comm ); /** * @} * @name SPM debug subroutines diff --git a/src/integer_sort_mtypes.c b/src/integer_sort_mtypes.c index b1662a00881c1b5aefc1d0c674f1d15d1736ffd4..882974fa05cb4e3990c763df762be2fe00a173e0 100644 --- a/src/integer_sort_mtypes.c +++ b/src/integer_sort_mtypes.c @@ -78,10 +78,10 @@ typedef struct log(MAX_THRESH_2)). Since total_elements has type size_t, we get as upper bound for log (total_elements): bits per unsigned char (CHAR_BIT) * sizeof(size_t). */ -#define STACK_SIZE_2 (CHAR_BIT * sizeof (spm_int_t)) -#define PUSH_2(low, high) ((void) ((top->lo = (low)), (top->hi = (high)), ++top)) -#define POP_2(low, high) ((void) (--top, (low = top->lo), (high = top->hi))) -#define STACK_NOT_EMPTY_2 (stack < top) +#define STACK_SIZE_2 (CHAR_BIT * sizeof (spm_int_t)) +#define PUSH_2(low, high) ((void) ((top->lo = (low)), (top->hi = (high)), ++top)) +#define POP_2(low, high) ((void) (--top, (low = top->lo), (high = top->hi))) +#define STACK_NOT_EMPTY_2 (stack < top) #endif /* MAX_THRESH_2 */ diff --git a/src/z_spm.c b/src/z_spm.c index 2dc33b8ab7d6ad9565da62ff4c9f86863a7cb7b3..37f534d7a45c9329161efba68ca2d5523a49d1e8 100644 --- a/src/z_spm.c +++ b/src/z_spm.c @@ -50,42 +50,42 @@ z_spmSort( spmatrix_t *spm ) (void)sortptr; if (spm->dof > 1){ - fprintf(stderr, "z_spmSort: Number of dof (%d) greater than one not supported\n", (int)spm->dof); - exit(1); + fprintf(stderr, "z_spmSort: Number of dof (%d) greater than one not supported\n", (int)spm->dof); + exit(1); } /* Sort in place each subset */ if ( spm->fmttype == SpmCSC ) { - for (i=0; i<n; i++, colptr++) - { - size = colptr[1] - colptr[0]; + for (i=0; i<n; i++, colptr++) + { + size = colptr[1] - colptr[0]; #if defined(PRECISION_p) - spmIntSort1Asc1( rowptr, size ); + spmIntSort1Asc1( rowptr, size ); #else - sortptr[0] = rowptr; - sortptr[1] = values; - z_spmIntFltSortAsc( sortptr, size ); + sortptr[0] = rowptr; + sortptr[1] = values; + z_spmIntFltSortAsc( sortptr, size ); #endif - rowptr += size; - values += size; - } + rowptr += size; + values += size; + } } else if ( spm->fmttype == SpmCSR ) { - for (i=0; i<n; i++, rowptr++) - { - size = rowptr[1] - rowptr[0]; + for (i=0; i<n; i++, rowptr++) + { + size = rowptr[1] - rowptr[0]; #if defined(PRECISION_p) - spmIntSort1Asc1( rowptr, size ); + spmIntSort1Asc1( rowptr, size ); #else - sortptr[0] = colptr; - sortptr[1] = values; - z_spmIntFltSortAsc( sortptr, size ); + sortptr[0] = colptr; + sortptr[1] = values; + z_spmIntFltSortAsc( sortptr, size ); #endif - colptr += size; - values += size; - } + colptr += size; + values += size; + } } } @@ -128,55 +128,55 @@ z_spmMergeDuplicate( spmatrix_t *spm ) spm_int_t merge = 0; if ( spm->fmttype == SpmCSC ) { - idx = 0; - for (i=0; i<n; i++, colptr++) - { - size = colptr[1] - colptr[0]; - for (j = 0; j < size; - j++, oldrow++, oldval+=dof2, newrow++, newval+=dof2, idx++) - { - if ( newrow != oldrow ) { - newrow[0] = oldrow[0]; + idx = 0; + for (i=0; i<n; i++, colptr++) + { + size = colptr[1] - colptr[0]; + for (j = 0; j < size; + j++, oldrow++, oldval+=dof2, newrow++, newval+=dof2, idx++) + { + if ( newrow != oldrow ) { + newrow[0] = oldrow[0]; #if !defined(PRECISION_p) - memcpy( newval, oldval, dof2 * sizeof(spm_complex64_t) ); + memcpy( newval, oldval, dof2 * sizeof(spm_complex64_t) ); #endif - } + } - while( ((j+1) < size) && (newrow[0] == oldrow[1]) ) { - j++; oldrow++; oldval+=dof2; + while( ((j+1) < size) && (newrow[0] == oldrow[1]) ) { + j++; oldrow++; oldval+=dof2; #if !defined(PRECISION_p) - /* Merge the two sets of values */ - for (d = 0; d < dof2; d++) { - newval[d] += oldval[d]; - } + /* Merge the two sets of values */ + for (d = 0; d < dof2; d++) { + newval[d] += oldval[d]; + } #endif - merge++; - } - } - assert( ((merge == 0) && ( colptr[1] == idx+baseval)) || - ((merge != 0) && ( colptr[1] > idx+baseval)) ); - - colptr[1] = idx + baseval; - } - assert( ((merge == 0) && (spm->nnz == idx)) || - ((merge != 0) && (spm->nnz - merge == idx)) ); - - if (merge > 0) { - spm->nnz = spm->nnz - merge; - spm->gnnz = spm->nnz; - - newrow = malloc( spm->nnz * sizeof(spm_int_t) ); - memcpy( newrow, spm->rowptr, spm->nnz * sizeof(spm_int_t) ); - free(spm->rowptr); - spm->rowptr = newrow; + merge++; + } + } + assert( ((merge == 0) && ( colptr[1] == idx+baseval)) || + ((merge != 0) && ( colptr[1] > idx+baseval)) ); + + colptr[1] = idx + baseval; + } + assert( ((merge == 0) && (spm->nnz == idx)) || + ((merge != 0) && (spm->nnz - merge == idx)) ); + + if (merge > 0) { + spm->nnz = spm->nnz - merge; + spm->gnnz = spm->nnz; + + newrow = malloc( spm->nnz * sizeof(spm_int_t) ); + memcpy( newrow, spm->rowptr, spm->nnz * sizeof(spm_int_t) ); + free(spm->rowptr); + spm->rowptr = newrow; #if !defined(PRECISION_p) - newval = malloc( spm->nnz * dof2 * sizeof(spm_int_t) ); - memcpy( newval, spm->values, spm->nnz * dof2 * sizeof(spm_complex64_t) ); - free(spm->values); - spm->values = newval; + newval = malloc( spm->nnz * dof2 * sizeof(spm_int_t) ); + memcpy( newval, spm->values, spm->nnz * dof2 * sizeof(spm_complex64_t) ); + free(spm->values); + spm->values = newval; #endif - } + } } (void)d; @@ -223,153 +223,153 @@ z_spmSymmetrize( spmatrix_t *spm ) toaddsze = 0; if ( (spm->fmttype == SpmCSC) || (spm->fmttype == SpmCSR) ) { - if (spm->fmttype == SpmCSC) { - oldcol = spm->colptr; - coltmp = spm->colptr; - oldrow = spm->rowptr; - rowtmp = spm->rowptr; - } - else { - oldcol = spm->rowptr; - coltmp = spm->rowptr; - oldrow = spm->colptr; - rowtmp = spm->colptr; - } - - baseval = oldcol[0]; - for (i=0; i<n; i++, coltmp++) - { - size = coltmp[1] - coltmp[0]; - for (r=0; r<size; r++, rowtmp++ ) - { - j = rowtmp[0]-baseval; - if ( i != j ) { - /* Look for the element (j, i) */ - spm_int_t frow = oldcol[ j ] - baseval; - spm_int_t lrow = oldcol[ j+1 ] - baseval; - int found = 0; - - for (k = frow; (k < lrow); k++) - { - if (i == (oldrow[k]-baseval)) - { - found = 1; - break; - } - else if ( i < (oldrow[k]-baseval)) - { - /* The spm is sorted so we will not find it later */ - break; - } - } - - if ( !found ) { - if ( newcol == NULL ) { - newcol = malloc( (spm->n+1) * sizeof(spm_int_t) ); - for (k=0; k<spm->n; k++) { - newcol[k] = oldcol[k+1] - oldcol[k]; - } - - /* Let's start with a buffer that will contain 5% of extra elements */ - toaddsze = spm_imax( 0.05 * (double)spm->nnz, 1 ); - toaddtab = malloc( 2*toaddsze * sizeof(spm_int_t) ); - } - - if (toaddcnt >= toaddsze) { - toaddsze *= 2; - toaddtab = (spm_int_t*)realloc( toaddtab, 2*toaddsze*sizeof(spm_int_t) ); - } - - /* Newcol stores the number of elements per column */ - newcol[ j ]++; - /* toaddtab stores the couples (j, i) to be added in the final sparse matrix */ - toaddtab[ toaddcnt * 2 ] = j; - toaddtab[ toaddcnt * 2 + 1 ] = i; - toaddcnt++; - } - } - } - } - - if (toaddcnt > 0) { - spm_int_t newsize, oldsize; - - /* Sort the array per column */ - spmIntSort2Asc1(toaddtab, toaddcnt); - - spm->nnz = spm->nnz + toaddcnt; - spm->gnnz = spm->nnz; - - newrow = malloc( spm->nnz * sizeof(spm_int_t) ); + if (spm->fmttype == SpmCSC) { + oldcol = spm->colptr; + coltmp = spm->colptr; + oldrow = spm->rowptr; + rowtmp = spm->rowptr; + } + else { + oldcol = spm->rowptr; + coltmp = spm->rowptr; + oldrow = spm->colptr; + rowtmp = spm->colptr; + } + + baseval = oldcol[0]; + for (i=0; i<n; i++, coltmp++) + { + size = coltmp[1] - coltmp[0]; + for (r=0; r<size; r++, rowtmp++ ) + { + j = rowtmp[0]-baseval; + if ( i != j ) { + /* Look for the element (j, i) */ + spm_int_t frow = oldcol[ j ] - baseval; + spm_int_t lrow = oldcol[ j+1 ] - baseval; + int found = 0; + + for (k = frow; (k < lrow); k++) + { + if (i == (oldrow[k]-baseval)) + { + found = 1; + break; + } + else if ( i < (oldrow[k]-baseval)) + { + /* The spm is sorted so we will not find it later */ + break; + } + } + + if ( !found ) { + if ( newcol == NULL ) { + newcol = malloc( (spm->n+1) * sizeof(spm_int_t) ); + for (k=0; k<spm->n; k++) { + newcol[k] = oldcol[k+1] - oldcol[k]; + } + + /* Let's start with a buffer that will contain 5% of extra elements */ + toaddsze = spm_imax( 0.05 * (double)spm->nnz, 1 ); + toaddtab = malloc( 2*toaddsze * sizeof(spm_int_t) ); + } + + if (toaddcnt >= toaddsze) { + toaddsze *= 2; + toaddtab = (spm_int_t*)realloc( toaddtab, 2*toaddsze*sizeof(spm_int_t) ); + } + + /* Newcol stores the number of elements per column */ + newcol[ j ]++; + /* toaddtab stores the couples (j, i) to be added in the final sparse matrix */ + toaddtab[ toaddcnt * 2 ] = j; + toaddtab[ toaddcnt * 2 + 1 ] = i; + toaddcnt++; + } + } + } + } + + if (toaddcnt > 0) { + spm_int_t newsize, oldsize; + + /* Sort the array per column */ + spmIntSort2Asc1(toaddtab, toaddcnt); + + spm->nnz = spm->nnz + toaddcnt; + spm->gnnz = spm->nnz; + + newrow = malloc( spm->nnz * sizeof(spm_int_t) ); #if !defined(PRECISION_p) - newval = malloc( spm->nnz * dof2 * sizeof(spm_complex64_t) ); + newval = malloc( spm->nnz * dof2 * sizeof(spm_complex64_t) ); #endif - coltmp = newcol; - rowtmp = newrow; - valtmp = newval; - oldval = spm->values; - toaddtmp = toaddtab; - - newsize = coltmp[0]; - coltmp[0] = baseval; - for (i=0; i<n; i++, coltmp++, oldcol++) - { - /* Copy the existing elements */ - oldsize = oldcol[1] - oldcol[0]; - memcpy( rowtmp, oldrow, oldsize * sizeof(spm_int_t) ); + coltmp = newcol; + rowtmp = newrow; + valtmp = newval; + oldval = spm->values; + toaddtmp = toaddtab; + + newsize = coltmp[0]; + coltmp[0] = baseval; + for (i=0; i<n; i++, coltmp++, oldcol++) + { + /* Copy the existing elements */ + oldsize = oldcol[1] - oldcol[0]; + memcpy( rowtmp, oldrow, oldsize * sizeof(spm_int_t) ); #if !defined(PRECISION_p) - memcpy( valtmp, oldval, oldsize * dof2 * sizeof(spm_complex64_t) ); + memcpy( valtmp, oldval, oldsize * dof2 * sizeof(spm_complex64_t) ); #endif - oldrow += oldsize; - rowtmp += oldsize; - oldval += oldsize * dof2; - valtmp += oldsize * dof2; + oldrow += oldsize; + rowtmp += oldsize; + oldval += oldsize * dof2; + valtmp += oldsize * dof2; - /* Some elements have been added */ - assert( newsize >= oldsize ); - if ( newsize > oldsize ) { - int added = 0; - int tobeadded = newsize - oldsize; + /* Some elements have been added */ + assert( newsize >= oldsize ); + if ( newsize > oldsize ) { + int added = 0; + int tobeadded = newsize - oldsize; - /* At least one element is equal to i */ - assert( toaddtmp[0] == i ); + /* At least one element is equal to i */ + assert( toaddtmp[0] == i ); - /* Let's add the new vertices */ - while( (added < tobeadded) && (toaddtmp[0] == i) ) { - rowtmp[0] = toaddtmp[1] + baseval; - rowtmp++; toaddtmp+=2; added++; - } - assert( added == tobeadded ); + /* Let's add the new vertices */ + while( (added < tobeadded) && (toaddtmp[0] == i) ) { + rowtmp[0] = toaddtmp[1] + baseval; + rowtmp++; toaddtmp+=2; added++; + } + assert( added == tobeadded ); #if !defined(PRECISION_p) - /* Add 0.s for the associated values */ - memset( valtmp, 0, added * dof2 * sizeof(spm_complex64_t) ); - valtmp += added * dof2; + /* Add 0.s for the associated values */ + memset( valtmp, 0, added * dof2 * sizeof(spm_complex64_t) ); + valtmp += added * dof2; #endif - } - - /* Use oldsize as temporary variable to update the new colptr */ - oldsize = newsize; - newsize = coltmp[1]; - coltmp[1] = coltmp[0] + oldsize; - } - - assert( coltmp[0]-baseval == spm->nnz ); - free( toaddtab ); - free( spm->colptr ); - free( spm->rowptr ); - free( spm->values ); - if (spm->fmttype == SpmCSC) { - spm->colptr = newcol; - spm->rowptr = newrow; - } - else { - spm->colptr = newrow; - spm->rowptr = newcol; - } - spm->values = newval; - } + } + + /* Use oldsize as temporary variable to update the new colptr */ + oldsize = newsize; + newsize = coltmp[1]; + coltmp[1] = coltmp[0] + oldsize; + } + + assert( coltmp[0]-baseval == spm->nnz ); + free( toaddtab ); + free( spm->colptr ); + free( spm->rowptr ); + free( spm->values ); + if (spm->fmttype == SpmCSC) { + spm->colptr = newcol; + spm->rowptr = newrow; + } + else { + spm->colptr = newrow; + spm->rowptr = newcol; + } + spm->values = newval; + } } return toaddcnt; diff --git a/src/z_spm_integer.c b/src/z_spm_integer.c index f0ef07bddbbbe3517418c761538a43a9b81799bb..760a999a30ff63f4c41aad4b143d3f1e6584498a 100644 --- a/src/z_spm_integer.c +++ b/src/z_spm_integer.c @@ -94,24 +94,24 @@ static size_t intsortsize_iif[3] = { sizeof(spm_int_t), sizeof(spm_int_t), sizeo #define INTSORTSIZE(x) (intsortsize_iif[x]) #define INTSORTNTAB 3 #define INTSORTSWAP(p,q) do { \ - spm_int_t t; \ - long disp_p = (((spm_int_t*)p)-((spm_int_t*)base_ptr)); \ - long disp_q = (((spm_int_t*)q)-((spm_int_t*)base_ptr)); \ - spm_int_t * intptr = *(pbase+1); \ - spm_complex64_t * fltptr = *(pbase+2); \ - spm_complex64_t f; \ - /* swap integers */ \ - t = *((spm_int_t *) (p)); \ - *((spm_int_t *) (p)) = *((spm_int_t *) (q)); \ - *((spm_int_t *) (q)) = t; \ - /* swap on second integer array */ \ - t = intptr[disp_p]; \ - intptr[disp_p] = intptr[disp_q]; \ - intptr[disp_q] = t; \ - /* swap corresponding values */ \ - f = fltptr[disp_p]; \ - fltptr[disp_p] = fltptr[disp_q]; \ - fltptr[disp_q] = f; \ + spm_int_t t; \ + long disp_p = (((spm_int_t*)p)-((spm_int_t*)base_ptr)); \ + long disp_q = (((spm_int_t*)q)-((spm_int_t*)base_ptr)); \ + spm_int_t * intptr = *(pbase+1); \ + spm_complex64_t * fltptr = *(pbase+2); \ + spm_complex64_t f; \ + /* swap integers */ \ + t = *((spm_int_t *) (p)); \ + *((spm_int_t *) (p)) = *((spm_int_t *) (q)); \ + *((spm_int_t *) (q)) = t; \ + /* swap on second integer array */ \ + t = intptr[disp_p]; \ + intptr[disp_p] = intptr[disp_q]; \ + intptr[disp_q] = t; \ + /* swap corresponding values */ \ + f = fltptr[disp_p]; \ + fltptr[disp_p] = fltptr[disp_q]; \ + fltptr[disp_q] = f; \ } while (0) static inline int diff --git a/src/z_spm_matrixvector.c b/src/z_spm_matrixvector.c index 9396cd45efe55520b50469cfa88f72216c9f5498..f0fc6c63dd8076a456ad0afab425820952a887aa 100644 --- a/src/z_spm_matrixvector.c +++ b/src/z_spm_matrixvector.c @@ -63,11 +63,11 @@ *******************************************************************************/ int z_spmGeCSCv(const spm_trans_t trans, - spm_complex64_t alpha, - const spmatrix_t *spm, - const spm_complex64_t *x, - spm_complex64_t beta, - spm_complex64_t *y ) + spm_complex64_t alpha, + const spmatrix_t *spm, + const spm_complex64_t *x, + spm_complex64_t beta, + spm_complex64_t *y ) { const spm_complex64_t *valptr = (spm_complex64_t*)(spm->values); const spm_complex64_t *xptr = (const spm_complex64_t*)x; @@ -76,73 +76,73 @@ z_spmGeCSCv(const spm_trans_t trans, if ( (spm == NULL) || (x == NULL) || (y == NULL ) ) { - return SPM_ERR_BADPARAMETER; + return SPM_ERR_BADPARAMETER; } if( spm->mtxtype != SpmGeneral ) { - return SPM_ERR_BADPARAMETER; + return SPM_ERR_BADPARAMETER; } baseval = spmFindBase( spm ); /* first, y = beta*y */ if( beta == 0. ) { - memset( yptr, 0, spm->gN * sizeof(spm_complex64_t) ); + memset( yptr, 0, spm->gN * sizeof(spm_complex64_t) ); } else { - for( i=0; i<spm->gN; i++, yptr++ ) { - (*yptr) *= beta; - } - yptr = y; + for( i=0; i<spm->gN; i++, yptr++ ) { + (*yptr) *= beta; + } + yptr = y; } if( alpha != 0. ) { - /** - * SpmNoTrans - */ - if( trans == SpmNoTrans ) - { - for( col=0; col < spm->gN; col++ ) - { - for( i=spm->colptr[col]; i<spm->colptr[col+1]; i++ ) - { - row = spm->rowptr[i-baseval]-baseval; - yptr[row] += alpha * valptr[i-baseval] * xptr[col]; - } - } - } - /** - * SpmTrans - */ - else if( trans == SpmTrans ) - { - for( col=0; col < spm->gN; col++ ) - { - for( i=spm->colptr[col]; i<spm->colptr[col+1]; i++ ) - { - row = spm->rowptr[i-baseval]-baseval; - yptr[col] += alpha * valptr[i-baseval] * xptr[row]; - } - } - } + /** + * SpmNoTrans + */ + if( trans == SpmNoTrans ) + { + for( col=0; col < spm->gN; col++ ) + { + for( i=spm->colptr[col]; i<spm->colptr[col+1]; i++ ) + { + row = spm->rowptr[i-baseval]-baseval; + yptr[row] += alpha * valptr[i-baseval] * xptr[col]; + } + } + } + /** + * SpmTrans + */ + else if( trans == SpmTrans ) + { + for( col=0; col < spm->gN; col++ ) + { + for( i=spm->colptr[col]; i<spm->colptr[col+1]; i++ ) + { + row = spm->rowptr[i-baseval]-baseval; + yptr[col] += alpha * valptr[i-baseval] * xptr[row]; + } + } + } #if defined(PRECISION_c) || defined(PRECISION_z) - else if( trans == SpmConjTrans ) - { - for( col=0; col < spm->gN; col++ ) - { - for( i=spm->colptr[col]; i<spm->colptr[col+1]; i++ ) - { - row = spm->rowptr[i-baseval]-baseval; - yptr[col] += alpha * conj( valptr[i-baseval] ) * xptr[row]; - } - } - } + else if( trans == SpmConjTrans ) + { + for( col=0; col < spm->gN; col++ ) + { + for( i=spm->colptr[col]; i<spm->colptr[col+1]; i++ ) + { + row = spm->rowptr[i-baseval]-baseval; + yptr[col] += alpha * conj( valptr[i-baseval] ) * xptr[row]; + } + } + } #endif - else - { - return SPM_ERR_BADPARAMETER; - } + else + { + return SPM_ERR_BADPARAMETER; + } } return SPM_SUCCESS; @@ -184,10 +184,10 @@ z_spmGeCSCv(const spm_trans_t trans, *******************************************************************************/ int z_spmSyCSCv( spm_complex64_t alpha, - const spmatrix_t *spm, - const spm_complex64_t *x, - spm_complex64_t beta, - spm_complex64_t *y ) + const spmatrix_t *spm, + const spm_complex64_t *x, + spm_complex64_t beta, + spm_complex64_t *y ) { const spm_complex64_t *valptr = (spm_complex64_t*)spm->values; const spm_complex64_t *xptr = x; @@ -196,40 +196,40 @@ z_spmSyCSCv( spm_complex64_t alpha, if ( (spm == NULL) || (x == NULL) || (y == NULL ) ) { - return SPM_ERR_BADPARAMETER; + return SPM_ERR_BADPARAMETER; } if( spm->mtxtype != SpmSymmetric ) { - return SPM_ERR_BADPARAMETER; + return SPM_ERR_BADPARAMETER; } baseval = spmFindBase( spm ); /* First, y = beta*y */ if( beta == 0. ) { - memset( yptr, 0, spm->gN * sizeof(spm_complex64_t) ); + memset( yptr, 0, spm->gN * sizeof(spm_complex64_t) ); } else { - for( i=0; i<spm->gN; i++, yptr++ ) { - (*yptr) *= beta; - } - yptr = y; + for( i=0; i<spm->gN; i++, yptr++ ) { + (*yptr) *= beta; + } + yptr = y; } if( alpha != 0. ) { - for( col=0; col < spm->gN; col++ ) - { - for( i=spm->colptr[col]; i < spm->colptr[col+1]; i++ ) - { - row = spm->rowptr[i-baseval]-baseval; - yptr[row] += alpha * valptr[i-baseval] * xptr[col]; - if( col != row ) - { - yptr[col] += alpha * valptr[i-baseval] * xptr[row]; - } - } - } + for( col=0; col < spm->gN; col++ ) + { + for( i=spm->colptr[col]; i < spm->colptr[col+1]; i++ ) + { + row = spm->rowptr[i-baseval]-baseval; + yptr[row] += alpha * valptr[i-baseval] * xptr[col]; + if( col != row ) + { + yptr[col] += alpha * valptr[i-baseval] * xptr[row]; + } + } + } } return SPM_SUCCESS; @@ -272,10 +272,10 @@ z_spmSyCSCv( spm_complex64_t alpha, *******************************************************************************/ int z_spmHeCSCv( spm_complex64_t alpha, - const spmatrix_t *spm, - const spm_complex64_t *x, - spm_complex64_t beta, - spm_complex64_t *y ) + const spmatrix_t *spm, + const spm_complex64_t *x, + spm_complex64_t beta, + spm_complex64_t *y ) { const spm_complex64_t *valptr = (spm_complex64_t*)spm->values; const spm_complex64_t *xptr = x; @@ -284,42 +284,42 @@ z_spmHeCSCv( spm_complex64_t alpha, if ( (spm == NULL) || (x == NULL) || (y == NULL ) ) { - return SPM_ERR_BADPARAMETER; + return SPM_ERR_BADPARAMETER; } if( spm->mtxtype != SpmHermitian ) { - return SPM_ERR_BADPARAMETER; + return SPM_ERR_BADPARAMETER; } /* First, y = beta*y */ if( beta == 0. ) { - memset( yptr, 0, spm->gN * sizeof(spm_complex64_t) ); + memset( yptr, 0, spm->gN * sizeof(spm_complex64_t) ); } else { - for( i=0; i<spm->gN; i++, yptr++ ) { - (*yptr) *= beta; - } - yptr = y; + for( i=0; i<spm->gN; i++, yptr++ ) { + (*yptr) *= beta; + } + yptr = y; } baseval = spmFindBase( spm ); if( alpha != 0. ) { - for( col=0; col < spm->gN; col++ ) - { - for( i=spm->colptr[col]; i < spm->colptr[col+1]; i++ ) - { - row=spm->rowptr[i-baseval]-baseval; - if( col != row ) { - yptr[row] += alpha * valptr[i-baseval] * xptr[col]; - yptr[col] += alpha * conj( valptr[i-baseval] ) * xptr[row]; - } - else { - yptr[row] += alpha * creal(valptr[i-baseval]) * xptr[col]; - } - } - } + for( col=0; col < spm->gN; col++ ) + { + for( i=spm->colptr[col]; i < spm->colptr[col+1]; i++ ) + { + row=spm->rowptr[i-baseval]-baseval; + if( col != row ) { + yptr[row] += alpha * valptr[i-baseval] * xptr[col]; + yptr[col] += alpha * conj( valptr[i-baseval] ) * xptr[row]; + } + else { + yptr[row] += alpha * creal(valptr[i-baseval]) * xptr[col]; + } + } + } } return SPM_SUCCESS; @@ -365,11 +365,11 @@ z_spmHeCSCv( spm_complex64_t alpha, *******************************************************************************/ int z_spmCSCMatVec(const spm_trans_t trans, - const void *alphaptr, - const spmatrix_t *spm, - const void *xptr, - const void *betaptr, - void *yptr ) + const void *alphaptr, + const spmatrix_t *spm, + const void *xptr, + const void *betaptr, + void *yptr ) { const spm_complex64_t *x = (const spm_complex64_t*)xptr; spm_complex64_t *y = (spm_complex64_t*)yptr; @@ -381,13 +381,13 @@ z_spmCSCMatVec(const spm_trans_t trans, switch (spm->mtxtype) { #if defined(PRECISION_z) || defined(PRECISION_c) case SpmHermitian: - return z_spmHeCSCv( alpha, spm, x, beta, y ); + return z_spmHeCSCv( alpha, spm, x, beta, y ); #endif case SpmSymmetric: - return z_spmSyCSCv( alpha, spm, x, beta, y ); + return z_spmSyCSCv( alpha, spm, x, beta, y ); case SpmGeneral: default: - return z_spmGeCSCv( trans, alpha, spm, x, beta, y ); + return z_spmGeCSCv( trans, alpha, spm, x, beta, y ); } } @@ -446,14 +446,14 @@ z_spmCSCMatVec(const spm_trans_t trans, *******************************************************************************/ int z_spmCSCMatMat(const spm_trans_t trans, - spm_int_t n, - const void *alphaptr, - const spmatrix_t *A, - const void *Bptr, - spm_int_t ldb, - const void *betaptr, - void *Cptr, - spm_int_t ldc ) + spm_int_t n, + const void *alphaptr, + const spmatrix_t *A, + const void *Bptr, + spm_int_t ldb, + const void *betaptr, + void *Cptr, + spm_int_t ldc ) { const spm_complex64_t *B = (const spm_complex64_t*)Bptr; spm_complex64_t *C = (spm_complex64_t*)Cptr; @@ -466,21 +466,21 @@ z_spmCSCMatMat(const spm_trans_t trans, switch (A->mtxtype) { #if defined(PRECISION_z) || defined(PRECISION_c) case SpmHermitian: - for( i=0; i<n; i++ ){ - rc = z_spmHeCSCv( alpha, A, B + i * ldb, beta, C + i *ldc ); - } - break; + for( i=0; i<n; i++ ){ + rc = z_spmHeCSCv( alpha, A, B + i * ldb, beta, C + i *ldc ); + } + break; #endif case SpmSymmetric: - for( i=0; i<n; i++ ){ - rc = z_spmSyCSCv( alpha, A, B + i * ldb, beta, C + i *ldc ); - } - break; + for( i=0; i<n; i++ ){ + rc = z_spmSyCSCv( alpha, A, B + i * ldb, beta, C + i *ldc ); + } + break; case SpmGeneral: default: - for( i=0; i<n; i++ ){ - rc = z_spmGeCSCv( trans, alpha, A, B + i * ldb, beta, C + i *ldc ); - } + for( i=0; i<n; i++ ){ + rc = z_spmGeCSCv( trans, alpha, A, B + i * ldb, beta, C + i *ldc ); + } } return rc; }