62 spm_cconj_fct_t conjfct,
69 for(jj=0; jj<dofi; jj++)
72 for(ii=0; ii<jj; ii++) {
77 A[ lda * (row + jj) + (row + ii) ] = *valptr;
80 for(ii=jj+1; ii<dofi; ii++, valptr++)
83 A[ lda * (row + jj) + (row + ii) ] = *valptr;
85 A[ lda * (row + ii) + (row + jj) ] = conjfct(*valptr);
132 const spm_cconj_fct_t conjfct,
139 for(jj=0; jj<dofj; jj++)
141 for(ii=0; ii<dofi; ii++, valptr++)
143 A[ lda * (col + jj) + (row + ii) ] = conjfct(*valptr);
189 const spm_cconj_fct_t conjfct,
196 for(ii=0; ii<dofi; ii++)
198 for(jj=0; jj<dofj; jj++, valptr++)
200 A[ lda * (col + jj) + (row + ii) ] = conjfct(*valptr);
251 const spm_cconj_fct_t conjfct,
311 const spm_cconj_fct_t conjfct,
389 spm_cconj_fct_t conjfct;
391#if defined(PRECISION_c) || defined(PRECISION_z)
393 conjfct = __spm_cconj;
402 assert( dofi == dofj );
459 for(j=0; j<spm->
n; j++, colptr++, loc2glob++)
461 jg = spm->
replicated ? j : (*loc2glob) - baseval;
462 if ( spm->
dof > 0 ) {
467 dofj = dofs[jg+1] - dofs[jg];
468 col = dofs[jg] - baseval;
471 for(k=colptr[0]; k<colptr[1]; k++, rowptr++)
473 ig = (*rowptr - baseval);
474 if ( spm->
dof > 0 ) {
479 dofi = dofs[ig+1] - dofs[ig];
480 row = dofs[ig] - baseval;
484 row, dofi, col, dofj, valptr,
486 valptr += dofi * dofj;
541 for(i=0; i<spm->
n; i++, rowptr++, loc2glob++)
543 ig = spm->
replicated ? i : (*loc2glob) - baseval;
544 if ( spm->
dof > 0 ) {
549 dofi = dofs[ig+1] - dofs[ig];
550 row = dofs[ig] - baseval;
553 for(k=rowptr[0]; k<rowptr[1]; k++, colptr++)
555 jg = (*colptr - baseval);
556 if ( spm->
dof > 0 ) {
561 dofj = dofs[jg+1] - dofs[jg];
562 col = dofs[jg] - baseval;
566 row, dofi, col, dofj, valptr,
568 valptr += dofi * dofj;
621 for(k=0; k<spm->
nnz; k++, rowptr++, colptr++)
623 i = *rowptr - baseval;
624 j = *colptr - baseval;
626 if ( spm->
dof > 0 ) {
633 dofi = dofs[i+1] - dofs[i];
634 row = dofs[i] - baseval;
635 dofj = dofs[j+1] - dofs[j];
636 col = dofs[j] - baseval;
640 row, dofi, col, dofj, valptr,
642 valptr += dofi * dofj;
676 fprintf( stderr,
"spm2dense: Conversion to dense matrix with distributed spm is not available\n");
733 if ( cabsf( A[ j * lda + i ] ) != 0. ) {
float _Complex spm_complex32_t
enum spm_layout_e spm_layout_t
Direction of the matrix storage.
enum spm_mtxtype_e spm_mtxtype_t
Matrix symmetry type property.
static void c_spm_2dense_elt_gen_col(const spm_int_t row, const spm_int_t dofi, const spm_int_t col, const spm_int_t dofj, const spm_cconj_fct_t conjfct, const spm_complex32_t *valptr, spm_complex32_t *A, const spm_int_t lda)
Convert to dense a general element matrix with column major storage.
static void c_spmCSC2dense(const spmatrix_t *spm, spm_complex32_t *A)
Convert a CSC matrix into a dense matrix.
static void c_spm_2dense_elt_gen(const spm_layout_t layout, const spm_int_t row, const spm_int_t dofi, const spm_int_t col, const spm_int_t dofj, const spm_cconj_fct_t conjfct, const spm_complex32_t *valptr, spm_complex32_t *A, const spm_int_t lda)
Convert to dense a general element matrix.
void c_spm2dense(const spmatrix_t *spm, spm_complex32_t *A)
Convert a sparse matrix into a dense matrix.
static void c_spmIJV2dense(const spmatrix_t *spm, spm_complex32_t *A)
Convert a IJV matrix into a dense matrix.
static void c_spm_2dense_elt_sym_diag(spm_int_t row, spm_int_t dofi, spm_cconj_fct_t conjfct, const spm_complex32_t *valptr, spm_complex32_t *A, spm_int_t lda)
Convert to dense a diagonal element within a symmetric/hermitian matrix with column/row major storage...
static void c_spmCSR2dense(const spmatrix_t *spm, spm_complex32_t *A)
Convert a CSR matrix into a dense matrix.
static void c_spm_2dense_elt_sym_offd(const spm_layout_t layout, const spm_int_t row, const spm_int_t dofi, const spm_int_t col, const spm_int_t dofj, const spm_cconj_fct_t conjfct, const spm_complex32_t *valptr, spm_complex32_t *A, const spm_int_t lda)
Convert to dense an off-diagonal element matrix in the symmetric/hermitian case.
static void c_spm_2dense_elt_gen_row(const spm_int_t row, const spm_int_t dofi, const spm_int_t col, const spm_int_t dofj, const spm_cconj_fct_t conjfct, const spm_complex32_t *valptr, spm_complex32_t *A, const spm_int_t lda)
Convert to dense a general element matrix with row major storage.
static void c_spm_2dense_elt(const spm_mtxtype_t mtxtype, const spm_layout_t layout, const spm_int_t row, const spm_int_t dofi, const spm_int_t col, const spm_int_t dofj, const spm_complex32_t *valptr, spm_complex32_t *A, const spm_int_t lda)
Convert to dense an element matrix.
void c_spmDensePrint(FILE *f, spm_int_t m, spm_int_t n, const spm_complex32_t *A, spm_int_t lda)
Print a dense matrix to the given file.
int spm_int_t
The main integer datatype used in spm arrays.
The sparse matrix data structure.
static void c_spmPrintElt(FILE *f, spm_int_t i, spm_int_t j, spm_complex32_t A)
Subroutines to print one element of an spm structure.