[petsc-users] MatEqual and explicit zero behaviour
Jørgen Kvalsvik
jorgekva at stud.ntnu.no
Wed Jan 21 06:25:17 CST 2015
Hi,
I was unable to find this in the PETSc docs nor any relevant example
through search engines.
I have two matrices, A and B.
A:
PetscScalar values[] = {
10.0, 0, 0, 0, 0, 5.72,
0.2, 0, 0, 0, 0, 0,
0, 0, 4.2, 0, 0, 0,
0, 0, 0, 3.4, 0, 0,
0, 0, 3.14, 0, 0, 0,
0, 0, 0, 0, 0, 0 };
And an array [0..6] passed to both row and columns in my MatSetValues call.
err = MatSetValues( A,
6, indices,
6, indices,
values, INSERT_VALUES );
B is constructed from CSR:
PetscInt csr_rows[] = { 0, 2, 3, 4, 5, 6, 6 };
PetscInt csr_cols[] = { 0, 5, 0, 2, 3, 2 };
PetscScalar csr_vals[] = { 10.0, 5.72, 0.2, 4.2, 3.4, 3.14 };
for( int i = 0; i < rows - 1; ++i ) {
PetscInt row_entries = csr_rows[ i + 1 ] - csr_rows[ i ];
PetscInt row_index[] = { i };
PetscInt offset = csr_rows[ i ];
err = MatSetValues( A,
1, row_index,
row_entries, csr_cols + offset,
csr_vals + offset, INSERT_VALUES );
}
Printing them with PetscView gives:
A:
Matrix Object: 1 MPI processes
type: seqaij
row 0: (0, 10) (1, 0) (2, 0) (3, 0) (4, 0) (5, 5.72)
row 1: (0, 0.2) (1, 0) (2, 0) (3, 0) (4, 0) (5, 0)
row 2: (0, 0) (1, 0) (2, 4.2) (3, 0) (4, 0) (5, 0)
row 3: (0, 0) (1, 0) (2, 0) (3, 3.4) (4, 0) (5, 0)
row 4: (0, 0) (1, 0) (2, 3.14) (3, 0) (4, 0) (5, 0)
row 5: (0, 0) (1, 0) (2, 0) (3, 0) (4, 0) (5, 0)
B:
Matrix Object: 1 MPI processes
type: seqaij
row 0: (0, 10) (5, 5.72)
row 1: (0, 0.2)
row 2: (2, 4.2)
row 3: (3, 3.4)
row 4: (2, 3.14)
row 5:
Which, as far as I can tell, are identical matrices.
But here's the problem. When I compare them with MatEqual it gives me
false, which I did not expect. Is there some undocumented behaviour
regarding explicit and implicit zeroes, and is this intentional? Is it
not possible to compare matrices with different structures?
Thanks
More information about the petsc-users
mailing list