<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Wed, Jan 21, 2015 at 6:25 AM, Jørgen Kvalsvik <span dir="ltr"><<a href="mailto:jorgekva@stud.ntnu.no" target="_blank">jorgekva@stud.ntnu.no</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi,<br>
<br>
I was unable to find this in the PETSc docs nor any relevant example through search engines.<br>
<br>
I have two matrices, A and B.<br></blockquote><div><br></div><div>Equality here also incorporates the sparsity pattern, so that two matrices with a different</div><div>sparsity pattern are not identical.</div><div><br></div><div>  Thanks,</div><div><br></div><div>    Matt</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
A:<br>
PetscScalar values[] = {<br>
10.0, 0, 0, 0, 0, 5.72,<br>
0.2, 0, 0, 0, 0, 0,<br>
0, 0, 4.2, 0, 0, 0,<br>
0, 0, 0, 3.4, 0, 0,<br>
0, 0, 3.14, 0, 0, 0,<br>
0, 0, 0, 0, 0, 0 };<br>
<br>
And an array [0..6] passed to both row and columns in my MatSetValues call.<br>
err = MatSetValues( A,<br>
      6, indices,<br>
      6, indices,<br>
      values, INSERT_VALUES );<br>
<br>
B is constructed from CSR:<br>
PetscInt csr_rows[] = { 0, 2, 3, 4, 5, 6, 6 };<br>
PetscInt csr_cols[] = { 0, 5, 0, 2, 3, 2 };<br>
PetscScalar csr_vals[] = { 10.0, 5.72, 0.2, 4.2, 3.4, 3.14 };<br>
<br>
for( int i = 0; i < rows - 1; ++i ) {<br>
    PetscInt row_entries = csr_rows[ i + 1 ] - csr_rows[ i ];<br>
<br>
    PetscInt row_index[] = { i };<br>
    PetscInt offset = csr_rows[ i ];<br>
<br>
    err = MatSetValues( A,<br>
          1, row_index,<br>
          row_entries, csr_cols + offset,<br>
          csr_vals + offset, INSERT_VALUES );<br>
}<br>
<br>
Printing them with PetscView gives:<br>
<br>
A:<br>
Matrix Object: 1 MPI processes<br>
  type: seqaij<br>
row 0: (0, 10)  (1, 0)  (2, 0)  (3, 0)  (4, 0)  (5, 5.72)<br>
row 1: (0, 0.2)  (1, 0)  (2, 0)  (3, 0)  (4, 0)  (5, 0)<br>
row 2: (0, 0)  (1, 0)  (2, 4.2)  (3, 0)  (4, 0)  (5, 0)<br>
row 3: (0, 0)  (1, 0)  (2, 0)  (3, 3.4)  (4, 0)  (5, 0)<br>
row 4: (0, 0)  (1, 0)  (2, 3.14)  (3, 0)  (4, 0)  (5, 0)<br>
row 5: (0, 0)  (1, 0)  (2, 0)  (3, 0)  (4, 0)  (5, 0)<br>
<br>
B:<br>
Matrix Object: 1 MPI processes<br>
  type: seqaij<br>
row 0: (0, 10)  (5, 5.72)<br>
row 1: (0, 0.2)<br>
row 2: (2, 4.2)<br>
row 3: (3, 3.4)<br>
row 4: (2, 3.14)<br>
row 5:<br>
<br>
Which, as far as I can tell, are identical matrices.<br>
<br>
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?<br>
<br>
Thanks<br>
</blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature">What most experimenters take for granted before they begin their experiments is infinitely more interesting than any results to which their experiments lead.<br>-- Norbert Wiener</div>
</div></div>