<div dir="ltr"><div>Dear Jed,</div><div><br></div><div>In my problem, each process has a part of contiguous rows of matrix B. In this partitioned matrix, locations of non-zero elements are irregular because it is a part of unstructured matrix. It is hard to define the distribution of a vector that the partitioned matrix B is multiplied with. Both  MatSetSizes(B, partitioned_row_size, partitioned_row_size, ngedges_internal, ngedges_internal) and MatSetSizes(B, partitioned_row_size, PETSC_DECIDE, ngedges_internal, ngedges_internal) produced segmentation fault errors. How should MatSetSizes() be used for row-based-partitioned unstructured matrices? </div><div><br></div><div>Evan</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Nov 6, 2014 at 4:48 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 Jed,<br>
><br>
> Thanks for your help many times. These numbers mean the total number of<br>
> elements to be added using MatSetValues(). For example, at process 0,<br>
> 148767+5821 elements are added to matrix B. In other words, the length of<br>
> arrays (i.e. mat_b_i_partitioned, mat_b_j_partitioned and<br>
> mat_b_val_partitioned)<br>
> is 148767+5821. I used "ADD_VALUES" but "INSERT_VALUES" should be the same<br>
> for my work.<br>
><br>
> As you suggested, I explicitly passed the number of local rows to<br>
> MatSetSizes as shown below. The number of local rows agrees with a range of<br>
> continuous row indices stored at array mat_b_i_partitioned. I also<br>
> explicitly set up the number of local column=the matrix size. In this case,<br>
> I get error message: "Sum of local lengths 156315 does not equal global<br>
> length 52105, my local length 52105". I used 3 processes. I guess<br>
> that number 156315 seems to be related with 3*size of my global column<br>
> size. In my problem, the matrix is partitioned by rows but not by columns.<br>
<br>
</span>Column ownership there refers to the distributiov of a vector that your<br>
matrix can be multiplied with, not with the ownership of entries (that<br>
is row-based for all of these formats, though others like MATELEMENTAL<br>
use totally different distributions for the entries).  Since you have a<br>
square matrix, you probably want<br>
<br>
MatSetSizes(B, partitioned_row_size, partitioned_row_size, ngedges_internal, ngedges_internal);<br>
</blockquote></div><br></div>