On Mon, 2008-08-04 at 04:17 -0500, Matthew Knepley wrote: > 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(). Thanks. The man page states that: The result of this routine is dependent on the underlying matrix data structure, and may not even work for certain matrix types.
How do I find out which matrix types support it? and is there a method that works across all matrix types? Thanks, Ahmed > > 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) What is the correct way to get the number of nonzeros? > > > > Can someone please explain when I am doing wrong? > > > > Ahmed > > > > > > >