On Wed, Aug 8, 2012 at 2:25 PM, Jinquan Zhong <jzhong at scsolutions.com>wrote:
> If I understand you correctly, ScaLAPACK blocks don't have anything to do > with the sparse matrix structure.**** > > ** ** > > > ****************************************************************************************************************************************** > **** > > ** ** > > You are correct. What I meant was how to define the diagonal and > off-diagonal parts of each submatrix matrix A (LDA, LDB). For example, in > the following matrix,**** > > ** ** > > *Proc0* *Proc1* *Proc2***** > > 1 2 0 | 0 3 0 | 0 4**** > > *Proc0* 0 5 6 | 7 0 0 | 8 0**** > > 9 0 10 | 11 0 0 | 12 0**** > > -------------------------------------**** > > 13 0 14 | 15 16 17 | 0 0**** > > *Proc3* 0 18 0 | 19 20 21 | 0 0 <=== owned by Proc 5**** > > 0 0 0 | 22 23 0 | 24 0**** > > -------------------------------------**** > > *Proc6* 25 26 27 | 0 0 28 | 29 0**** > > 30 0 0 | 31 32 33 | 0 34**** > > ** ** > > I am not sure how to fill out the values for d_nz, d_nnz,o_nz, o_nnz > peoperly for the subblock (0 0 ;0 0; 24 0) owned by Proc 5 since it was > based on diagonal and off-diagonal parts. > Throw your 2D block cyclic nonsense out the window. These are sparse matrices and that layout would be terrible. Logically permute your matrices all you want, then define a global ordering and chunk it into contiguous blocks of rows (no partition of columns). Work this out with a pencil and paper. You should have a function that translates row/column pairs from your ordering to our ordering. Now compute the sparsity pattern in the new ordering. (Usually you can figure this out on paper as well.) Then preallocate and call MatSetValues() with the new (row,column) locations. -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20120808/f3fe957e/attachment-0001.html>
