non-local values being dropped in MatSetValues
Barry Smith
bsmith at mcs.anl.gov
Fri Jul 17 20:02:02 CDT 2009
Stephan,
I'm sorry for your wasted time finding this bug. I have fixed it
in the Mecurial version of PETSc 3.0.0 and in petsc-dev. It will be
fixed in the next 3.0.0 patch that we release.
Barry
On Jul 17, 2009, at 7:44 AM, Stephan Kramer wrote:
> Hello
>
> We've spend sometime debugging a problem were in the assembly of a
> parallel MPIAIJ matrix, some values that were created on a process
> other than the owner of the row seemed to disappear. I think I
> narrowed it down to what I think is a bug in MatSetValues_MPIAIJ,
> but please tell me if I'm wrong.
>
> The situation is the following: I'm calling MatSetValues with the
> flag ADD_VALUES and with matrix option MAT_IGNORE_ZERO_ENTRIES. I'm
> inserting multiple values at once, multiple columns and rows, so I
> provide a rank-2 matrix of values. As I'm calling this from fortran
> I'm also using MAT_COLUMN_ORIENTED. Now for provided rows that are
> not owned by the process, it jumps to mpiaij.c:394 (line numbers as
> in petsc-dev). On line 399, it checks for zero entries, but only
> checks the very first entry of the (non-owned) row. If however other
> entries of that same row are nonzero, the entire row is still
> dropped. Note that this is independent of row_oriented/
> column_oriented as line 396 does exactly the same.
>
> If I don't set the option MAT_IGNORE_ZERO_ENTRIES the problem
> disappears. In that case however we would either have to preallocate
> substantially more nonzeros, or complicate the matrix assembly in
> our code by taking out the zero entries ourselves and call
> MatSetValues for each entry seperately.
>
> Your help would be much appreciated,
> Cheers
> Stephan
>
>
> --
> Stephan Kramer <s.kramer at imperial.ac.uk>
> Applied Modelling and Computation Group,
> Department of Earth Science and Engineering,
> Imperial College London
More information about the petsc-users
mailing list