You can use a VecScatter, and PETSc will try to use the best MPI implementation.<br><br>  Matt<br><br><div class="gmail_quote">On Mon, Mar 9, 2009 at 1:24 AM, Khan, Irfan <span dir="ltr">&lt;<a href="mailto:irfan.khan@gatech.edu">irfan.khan@gatech.edu</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">Hi<br>
I have divided my processes into fluid compute ranks (n) and solid compute ranks (m), where n &gt; m. For most of the part, the fluid compute ranks communicate among themselves and so do the solid compute nodes. However twice during each timestep the some data is transfered between the fluid and solid compute nodes.<br>

<br>
For instance, the fluid compute nodes generate fluid force on the solid body that needs to be transmitted every time step and the solid compute node calculate the resulting displacement from the forces and transmit back the displacement information to the fluid nodes. The force and displacement vectors for total nodes are distributed randomly on the fluid and solid nodes. I have attached a pdf that basically shows that the distribution of vectors is random<br>

<br>
I am currently trying to use MPI_Allgatherv to accumulate all the data from send ranks to receive ranks, but I am sure this will be very costly for large data distributed over many ranks. Is there an efficient way to do this using PETSc?<br>

<br>
Please let me know if you need more information or better explanation.<br>
<br>
Thanks<br>
<font color="#888888">Irfan<br>
</font></blockquote></div><br><br clear="all"><br>-- <br>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<br>