2014-05-09 5:47 GMT+0200, Jed Brown <[email protected]>: > marco restelli <[email protected]> writes: >> Matt, thanks but this I don't understand. What I want is getting three >> arrays (i,j,coeff) with all the nonzero local coefficients, so that I >> can send them around with MPI. >> >> MatGetSubmatrices would give me some PETSc objects, which I can not >> pass to MPI, right? > > I'm not sure you want this, but you can use MatGetRowIJ and similar to > access the representation you're asking for if you are dead set on > depending on a specific data format rather than using generic > interfaces. >
Jed, thank you. This is probably not the PETSc solution, but still it might a solution! I have found this example for MatGetRowIJ: http://www.stce.rwth-aachen.de/trac/petsc/browser/src/mat/examples/tests/ex79f.F?rev=a52934f9a5da430fdd891fa538a66c376435ec4c My understanding is that I need to: 1) get the sequential part of the matrix, i.e. those rows stored on this processor call MatMPIAIJGetSeqAIJ(A,Ad,Ao,icol,iicol,ierr) 2) get the indexes of these rows call MatGetOwnershipRange(A,rstart,rend,ierr) 3) get the indexes i,j of the local portion of the matrix (compressed form) call MatGetRowIJ(Ad,one,zero,zero,n,ia,iia,ja,jja,done,ierr) 4) get the corresponding elements call MatGetArray(Ad,aa,aaa,ierr) 5) WARNING: the row indexes obtained with MatGetRowIJ are local to this processor, so they must be corrected with rstart to obtain the corresponding global indexes 6) clean-up Does this make sense? Marco
