how do you access the nonzero elements in SeqAIJ matrices

Matthew Knepley knepley at gmail.com
Mon Aug 4 04:17:40 CDT 2008


On Mon, Aug 4, 2008 at 3:14 AM, Ahmed El Zein <ahmed at azein.com> wrote:
> I am working on a project where I would like to copy a sparse matrix in
> CSR format.
>
> I have tried MatGetRow() which works OK but I would really like to get
> pointers to the 3 arrays directly.
>
> I also tried MatGetRowIJ() which allows me to get the i and j arrays but
> I can't see how to access the nonzero elements.

You can use MatGetArray().

  Matt

> and finally I attempted to access the arrays directly like this:
> Mat_SeqAIJ  *a = (Mat_SeqAIJ*)A->data;
> MatScalar *val = a->a;
> PetscInt  *ptr = a->i;
> PetscInt  *ind = a->j;
>
> However when accessing directly I get different values for ptr and
> SIGSEGV when accessing val or ind.
>
> also I get a bogus number for a->nz (134630032 instead of 21)
>
> Can someone please explain when I am doing wrong?
>
> Ahmed
>
>



-- 
What most experimenters take for granted before they begin their
experiments is infinitely more interesting than any results to which
their experiments lead.
-- Norbert Wiener




More information about the petsc-dev mailing list