<div dir="ltr"><div>Dear Jed,</div><div><br></div><div>Thanks for your help many times. These numbers mean the total number of elements to be added using MatSetValues(). For example, at process 0, 148767+5821 elements are added to matrix B. In other words, the length of arrays (i.e. <font>mat_b_i_partitioned, <font>mat_b_j_partitioned and <font>mat_b_val_partitioned) is 148767+5821. I used "ADD_VALUES" but "INSERT_VALUES" should be the same for my work.</font></font></font></div><div><br></div><div>As you suggested, I explicitly passed the number of local rows to MatSetSizes as shown below. The number of local rows agrees with a range of continuous row indices stored at array mat_b_i_partitioned. I also explicitly set up the number of local column=the matrix size. In this case, I get error message: "Sum of local lengths 156315 does not equal global length 52105, my local length 52105". I used 3 processes. I guess that number 156315 seems to be related with 3*size of my global column size. In my problem, the matrix is partitioned by rows but not by columns. In this case, how can I specify the local column size in MatSetSizes()? </div><div><br></div><div>Evan</div><div><br></div><div><div>// CODE<br></div><div>MatCreate(PETSC_COMM_WORLD,&B);<br>MatSetSizes(B, partitioned_row_size, ngedges_internal, ngedges_internal, ngedges_internal);<br>MatSetType(B,MATSBAIJ);<br>MatMPISBAIJSetPreallocation(B,1,0,d_nnz,0,o_nnz);<br></div><div>MatSetValues(B, nentries_mat_b_partitioned, mat_b_i_partitioned, nentries_mat_b_partitioned, mat_b_j_partitioned, mat_b_val_partitioned, ADD_VALUES);<br></div><div>MatAssemblyBegin(B,MAT_FINAL_ASSEMBLY);<br>MatAssemblyEnd(B,MAT_FINAL_ASSEMBLY);</div></div><div><br></div><div><br></div><div>//ERROR:</div><div>[0]PETSC ERROR: --------------------- Error Message --------------------------------------------------------------<br>[0]PETSC ERROR: Nonconforming object sizes<br>[0]PETSC ERROR: Sum of local lengths 156315 does not equal global length 52105, my local length 52105<br>  likely a call to VecSetSizes() or MatSetSizes() is wrong.</div><div><br></div><div><br></div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Nov 6, 2014 at 12:23 PM, Jed Brown <span dir="ltr"><<a href="mailto:jed@jedbrown.org" target="_blank">jed@jedbrown.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span>Evan Um <<a href="mailto:evanum@gmail.com">evanum@gmail.com</a>> writes:<br>
<br>
> Dear PETSC users,<br>
><br>
> I hope that I can have a comment about errors I got during sparse symmetric<br>
> matrix construction. In this example, I used three processes. The size of a<br>
> test matrix is 52105-by-52105. The length of array d_nnz and o_nnz is 17461<br>
> at rank 0, 17111 at rank 1 and 17535 at rank 2. The two arrays exactly<br>
> describe nnz of the diagonal and off-diagonal part. At rank 0, I tried<br>
> to add 148767 element for the diagonal part and 5821 for the off-diagonal<br>
> part. At rank 1, I tried to add 135826 and 19541 for the diagonal and<br>
> off-diagonal parts, respectively.<br>
<br>
</span>Do these numbers mean that the sum of all the entries in the the arrays<br>
are 148767, 135826, etc?<br>
<span><br>
> At rank 2, I tried to add 138155 and 0 for the diagonal and<br>
> off-diagonal parts. Rank 0 has matrix rows from 0 to 17460; rank 1<br>
> from 17460 to 34570 and rank 2 from 34570 to 52104.  During the run, I<br>
> got an error message: nnz cannot be greater than block row length:<br>
> local row 17124 value 38762560 rowlength 17368. My d_nnz and o_nnz<br>
> arrays never have a value such as 38762560.<br>
<br>
</span>Use MatGetOwnershipRange() and/or pass the local sizes to MatSetSizes.<br>
Your arrays are the wrong length, which is why the error refers to local<br>
row 17124 or rank 1 (which is larger than the array length of 17111).<br>
Valgrind would have told you this.<br>
</blockquote></div><br></div>