<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Sat, Apr 9, 2016 at 3:34 AM, Yaoyu Hu <span dir="ltr"><<a href="mailto:huyaoyu1986@gmail.com" target="_blank">huyaoyu1986@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi everyone,<br>
<br>
I am trying to write a simple CFD program with PETSc and I have<br>
encountered some simple problems with vector scattering.<br>
<br>
I use finite volume method. When calculating the flux of a scalar<br>
variable on a control volume face, the values of the control volumes<br>
straddling the face should be obtained. The scalar values are stored<br>
in a parallel Vec. I thought that the calculation of the flux values<br>
of different faces can be performed, somehow, in parallel. By 'in<br>
parallel', I mean let different processors calculate the fluxes of<br>
different faces. Because the scalar values are stored in a parallel<br>
Vec, I have to do vector scattering to retrieve values that not stored<br>
on the local processor. And different processes may require different<br>
portions of the parallel Vec. And here comes the problem. It happened<br>
that one processor encountered a boundary face, and no vector<br>
scattering was needed. And this processor omitted the scattering<br>
operation. Then the whole program just halted because, I thought, all<br>
other processors were waiting for the processor to trigger a vector<br>
scattering.<br>
<br>
I actually have three questions here:<br>
<br>
(1)     Is it OK for different processors perform vector scattering to<br>
retrieve different portions of a parallel Vec in a single scattering<br>
operation? (By test I think it is OK…)<br></blockquote><div><br></div><div>Yes. Each process just asks for the values it needs.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
(2)     Should the processor, which is dealing with the boundary face<br>
flux, perform a sort of ‘dummy scattering’ operation? How it is done<br>
in the usual way?<br></blockquote><div><br></div><div>Yes. VecScatter is collective, so you need all processes to call it. Some</div><div>procs may request 0 entries.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
(3)     Am I miss using PETSc to do stuff ‘in parallel’? Should I<br>
perform the face flux calculation and other tasks alike in serial, and<br>
then only use PETSc to solve the discretized equations in parallel?<br></blockquote><div><br></div><div>No, everything can be done in parallel.</div><div><br></div><div>  Thanks,</div><div><br></div><div>    Matt</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Thanks in advance.<br>
<span class="HOEnZb"><font color="#888888"><br>
HU Yaoyu<br>
School of Mechanical Engineering,<br>
Shanghai Jiao Tong University, Shanghai, China.<br>
</font></span></blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature">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></div>