#include "BSprivate.h" int BSnonlocalnz(BSspmat *,int *,BSprocinfo *); /*+ BScount_nz - Count the number of nonzeroes in a sparse matrix stored in the parallel format Input Parameters: . A - The sparse matrix (stored in parallel format) . procinfo - the usual processor info Returns: the number of nonzeros +*/ int BScount_nz(BSpar_mat *A, BSprocinfo *procinfo) { int i; int cl_ind, in_ind; int size, num_cols; BScl_2_inode *clique2inode; BSnumbering *color2clique; BSinode *inodes; int nnz; color2clique = A->color2clique; clique2inode = A->clique2inode; inodes = A->inodes->list; nnz = 0; for (i=0;ilength-1;i++) { /* do some local work */ for (cl_ind=color2clique->numbers[i]; cl_indnumbers[i+1];cl_ind++) { if (procinfo->my_id == clique2inode->proc[cl_ind]) { size = clique2inode->d_mats[cl_ind].size; if(A->icc_storage) nnz += (size*(size+1))/2; else nnz += (size*size); } for (in_ind=clique2inode->inode_index[cl_ind]; in_indinode_index[cl_ind+1];in_ind++) { size = inodes[in_ind].length; num_cols = inodes[in_ind].num_cols; nnz += size*num_cols; } } } if(!A->icc_storage) nnz = (nnz + A->num_rows)/2; return(nnz); } /*+ BSnonlocalnz - Count the number of nonzeroes in a sparse matrix stored in the original format Input Parameters: . A - The sparse matrix (stored in original format) . max_row_len - pointer to the the maximum length of any row . set on output . procinfo - the usual processor info Returns: number of nonlocal nonzeros +*/ int BSnonlocalnz(BSspmat *A,int *max_row_len,BSprocinfo *procinfo) { int count; int i, j; void (*map)(int,int *,int *,BSprocinfo *,BSmapping *); BSsprow *row; int mrow_len = 0; int *iwork; count = 0; for (i=0;inum_rows;i++) { if (A->rows[i]->length > mrow_len) mrow_len = A->rows[i]->length; } MY_MALLOCN(iwork,(int *),sizeof(int)*mrow_len,1); map = A->map->fglobal2proc; for (i=0;inum_rows;i++) { row = A->rows[i]; (*map)(row->length,row->col,iwork,procinfo,A->map); CHKERRN(0); for (j=0;jlength;j++) { if (iwork[j] != procinfo->my_id) count++; } } MY_FREE(iwork); (*max_row_len) = mrow_len; return(count); }