<div dir="ltr"><div>Thanks Matt and Zhang for the answers.</div><div><br></div><div>That is right, VecScatter will be the solution to my problem. And MPI_Exscan is the function that I was looking for. <br><br>The only thing that I though, very inefficient, was get the subvector using the IS that I need, and the scatter it with VecScatterCreateToAll. In this way I got all the elements in sequential form and then apply scatter operations based on the ranges of the final Vector ( created to contain the selected elements), it works.<br></div><div><br></div><div>For suer I will try MPI_Exscan.</div><div><br></div><div>Kind regards!</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">El jue., 7 de may. de 2020 a la(s) 21:57, Junchao Zhang (<a href="mailto:junchao.zhang@gmail.com">junchao.zhang@gmail.com</a>) escribió:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">You have to compute the length of the new vector (i.e., total number of selected elements), and then create a VecMPI  with this length. PETSc will compute a balanced layout for the vector. Then you create a vecscatter that scatters selected elements from the old vector to the new vector. You may need MPI_Exscan to build correct index mapping.<div><br></div><div><div><div><div dir="ltr"><div dir="ltr">--Junchao Zhang</div></div></div><br></div></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Thu, May 7, 2020 at 3:37 PM Emmanuel Ayala <<a href="mailto:juaneah@gmail.com" target="_blank">juaneah@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">Hi, I hope everyone is well.<br><br>I have a MPI vector, I selected some elements of this vector and for some processes there is not selected elements (I stored the indices elements into an array). So, I wan to to create a MPI vector using these selected elements, the selected elements must be fully distributed in a MPI vector, but I do not figure out how to do it properly. <br><br>If I use VecGetSubVector, it creates a MPI vector, but in those processes where there is not selected elements, the subvector portion is empty, this means that the resultant vector is unbalanced.<br><br>If I use:<br><br>VecScatterCreate(Vec x,IS ix,Vec y,IS iy,VecScatter *ctx);<br>VecScatterBegin(VecScatter ctx,Vec x,Vec y,INSERT VALUES,SCATTER FORWARD);<br>VecScatterEnd(VecScatter ctx,Vec x,Vec y,INSERT VALUES,SCATTER FORWARD);<br><br>The vector is still unbalanced.<br><br>Any suggestion?<br><br>Kind regards.</div>
</blockquote></div>
</blockquote></div>