<div dir="ltr"><div><div>Thanks a lot, sorry I didn't catch the SELF from my sequential version.<br><br></div>Best,<br></div>Ehsan<br></div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Jun 28, 2016 at 12:22 PM, Barry Smith <span dir="ltr"><<a href="mailto:bsmith@mcs.anl.gov" target="_blank">bsmith@mcs.anl.gov</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><br>
  Only parallel vectors can be multiplied with parallel matrices and the vector and matrix must exist on the same MPI communicator. In your case you are trying to multiple a sequential vector by a parallel matrix.  You should use VecCreateMPI(PETSC_COMM_WORLD, PETSC_DECIDE, size_,&vol_);<br>
                                                                                                                                         ^^^^^^<br>
                      use PETSC_COMM_WORLD or the communicator you used in creating the matrix, don't use PETSC_COMM_SELF<br>
<div class="HOEnZb"><div class="h5"><br>
<br>
> On Jun 28, 2016, at 9:14 AM, ehsan sadrfaridpour <<a href="mailto:it.sadr@gmail.com">it.sadr@gmail.com</a>> wrote:<br>
><br>
> Hi,<br>
> Sorry for long email. My questions are in the bottom.<br>
><br>
> I try to use MatMult to multiply a vector to a matrix but I face below problem.<br>
> [0]PETSC ERROR: --------------------- Error Message --------------------------------------------------------------<br>
> [0]PETSC ERROR: Nonconforming object sizes<br>
> [0]PETSC ERROR: Incompatible partition of A (20) and xx (40)<br>
> [0]PETSC ERROR: See <a href="http://www.mcs.anl.gov/petsc/documentation/faq.html" rel="noreferrer" target="_blank">http://www.mcs.anl.gov/petsc/documentation/faq.html</a> for trouble shooting.<br>
> [1]PETSC ERROR: --------------------- Error Message --------------------------------------------------------------<br>
> [1]PETSC ERROR: Nonconforming object sizes<br>
> [1]PETSC ERROR: Incompatible partition of A (20) and xx (40)<br>
> [1]PETSC ERROR: See <a href="http://www.mcs.anl.gov/petsc/documentation/faq.html" rel="noreferrer" target="_blank">http://www.mcs.anl.gov/petsc/documentation/faq.html</a> for trouble shooting.<br>
> [1]PETSC ERROR: Petsc Release Version 3.6.3, unknown<br>
><br>
> I use 2 process for this. I check the local ranges with VecGetOwnershipRange and MatGetOwnershipRange commands and they reveal that the matrix is distributed between processes while the vector is exist completely on both processes.<br>
> in rank:1, vector start:0, end:40, matrix start:20, end:40<br>
> in rank:0, vector start:0, end:40, matrix start:0, end:20<br>
><br>
> I created the vector "vol_" using below commands.<br>
>    Vec vol_;<br>
>     VecCreateMPI(PETSC_COMM_SELF, PETSC_DECIDE, size_,&vol_);<br>
>     VecSet(vol_,val);           //Sets all components of a vector to a single scalar value.<br>
>     VecAssemblyBegin(vol_);<br>
>     VecAssemblyEnd(vol_);<br>
><br>
> My questions:<br>
> A- What should I do differently to create a scattered vector in the first place?<br>
> B- If my vector initialization is ok, what should I do now to scatter the vector among the processes?<br>
> I saw the VecScatter function, but I am not sure how to use it, if it is the right function.<br>
><br>
> Best,<br>
> Ehsan<br>
><br>
<br>
</div></div></blockquote></div><br></div>