<div dir="ltr"><div class="gmail_quote"><div dir="ltr">On Tue, Dec 18, 2018 at 10:37 AM Marco Tiberga via petsc-users <<a href="mailto:petsc-users@mcs.anl.gov">petsc-users@mcs.anl.gov</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 lang="EN-GB">
<div class="gmail-m_-4580396696375039647WordSection1">
<p class="MsoNormal">Dear all,<u></u><u></u></p>
<p class="MsoNormal"> <u></u><u></u></p>
<p class="MsoNormal">We are using PETSc in our (Fortran) CFD code, which we have recently parallelized. 
<u></u><u></u></p>
<p class="MsoNormal"> <u></u><u></u></p>
<p class="MsoNormal">We need to access the values stored in the solution vector to assemble the matrix of the linear system. In particular, we need to access the values on the local elements, plus the ones on the first neighbors, which might be handled by other
 processes.<u></u><u></u></p>
<p class="MsoNormal">Hence, we defined our solution vector as MPI Vec with ghost values.<u></u><u></u></p>
<p class="MsoNormal"> <u></u><u></u></p>
<p class="MsoNormal">At the moment, to access all the required values, at each time step we update the ghost values, then call ‘VecGhostGetLocalForm’ and finally ‘VecGetArrayReadF90’.<u></u><u></u></p>
<p class="MsoNormal">Since all these procedures are collective, we store the gotten values in a local Fortran array (of length n_local + n_ghosts) and then proceed with the parallel matrix assembly.<u></u><u></u></p>
<p class="MsoNormal">The code works perfectly, so I believe we are doing things in the right way.<u></u><u></u></p>
<p class="MsoNormal"> <u></u><u></u></p>
<p class="MsoNormal">However, I was wondering whether there is a more efficient way to access the local values of a ghosted vector; something not collective,</p></div></div></blockquote><div><br></div><div>These are just "Logically Collective" so there is no communication.</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div lang="EN-GB"><div class="gmail-m_-4580396696375039647WordSection1"><p class="MsoNormal"> so that we could access the values on-demand while assembling the matrix.</p></div></div></blockquote><div><br></div><div>You can.</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div lang="EN-GB"><div class="gmail-m_-4580396696375039647WordSection1"><p class="MsoNormal">
<u></u><u></u></p>
<p class="MsoNormal">In this way, we could avoid storing the values in Fortran array, thus saving memory.</p></div></div></blockquote><div><br></div><div>The array is not being copied. It is just an F90 view into the actual storage.</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div lang="EN-GB"><div class="gmail-m_-4580396696375039647WordSection1">
<p class="MsoNormal">Less important issue, but it puzzles me: Why is VecGetArrayReadF90 collective while its C counterpart VecGetArrayRead is not?</p></div></div></blockquote><div><br></div><div>It is also Logically Collective. The current webpage has this correct.</div><div><br></div><div>  Thanks,</div><div><br></div><div>     Matt</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div lang="EN-GB"><div class="gmail-m_-4580396696375039647WordSection1"><p class="MsoNormal"> (same thing for VecRestoreArrayReadF90 and VecRestoreArrayRead).<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal"> <u></u><u></u></p>
<p class="MsoNormal">Thanks a lot for your time and help.<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal"> <u></u><u></u></p>
<p class="MsoNormal" style="margin-bottom:12pt">Best regards,<u></u><u></u></p>
<p class="MsoNormal" style="margin-bottom:12pt">Marco Tiberga<u></u><u></u></p>
<p class="MsoNormal">PhD candidate<u></u><u></u></p>
<p class="MsoNormal"><span style="color:rgb(0,176,240)">Delft University of Technology</span><u></u><u></u></p>
<p class="MsoNormal">Faculty of Applied Sciences<u></u><u></u></p>
<p class="MsoNormal">Radiation Science & Technology Department<u></u><u></u></p>
<p class="MsoNormal">Mekelweg 15, 2629 JB Delft, The Netherlands<u></u><u></u></p>
<p class="MsoNormal" style="margin-bottom:2pt">E-Mail:<span style="color:gray"> </span><a href="mailto:m.tiberga@tudelft.nl" target="_blank">m.tiberga@tudelft.nl</a><u></u><u></u></p>
<p class="MsoNormal"><span lang="NL">Website: </span><a href="http://www.nera.rst.tudelft.nl/" target="_blank"><span lang="NL">http://www.nera.rst.tudelft.nl/</span></a><span lang="NL"><u></u><u></u></span></p>
<p class="MsoNormal"><span lang="NL"> <u></u><u></u></span></p>
<p class="MsoNormal"><span lang="NL"> <u></u><u></u></span></p>
</div>
</div>

</blockquote></div><br clear="all"><div><br></div>-- <br><div dir="ltr" class="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div>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</div><div><br></div><div><a href="http://www.cse.buffalo.edu/~knepley/" target="_blank">https://www.cse.buffalo.edu/~knepley/</a><br></div></div></div></div></div></div></div></div>