<div dir="ltr">Thanks, Jed. That was helpful.<br><div class="gmail_extra"><br><div class="gmail_quote">On 9 November 2013 21:15, Jed Brown <span dir="ltr"><<a href="mailto:jedbrown@mcs.anl.gov" target="_blank">jedbrown@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"><div class="im">Anush Krishnan <<a href="mailto:anush@bu.edu">anush@bu.edu</a>> writes:<br>
> Thank you very much! That worked.<br>
<br>
</div>Great!<br>
<div class="im"><br>
> I also have a couple of general questions regarding this:<br>
><br>
> 1. In this case, I followed your advice and created a single matrix G of<br>
> type MPIAIJ and assembled it. How do I decide if I should rather use Block<br>
> Matrices (MPIBAIJ) or MatGetLocalSubMatrix to set it up?<br>
<br>
</div>BAIJ only does square blocks and you don't have block structurex to<br>
begin with (because you don't interlace the x- and y-components of the<br>
fields).<br>
<br>
MatGetLocalSubMatrix is a convenience when it makes sense to assembled<br>
blocks on their own.  That probably doesn't apply here because you don't<br>
have a reason to assemble, say, the gradient of pressure in the<br>
y-direction only.<br>
<div class="im"><br>
> 2. Various functions exist to help us access the correct indices when<br>
> required (e.g. DMDAGetAO, DMCompositeGetGlobalISs, DMDAGetCorners,<br>
> VecGetOwnershipRange, etc.) And sometimes, there are multiple ways by which<br>
> we can obtain the same indices. In such cases, are some of these functions<br>
> preferable to others (either because they are faster or need to allocate<br>
> less memory)?<br>
<br>
</div>Many uses of AO are fairly heavy-weight because any global-to-local<br>
operation either needs non-scalable memory or a lookup structure that is<br>
slower than an array.<br>
<br>
DMDAGetCorners() is extremely cheap and doesn't use much memory, so if<br>
that is all you need, use that.  DMCompositeGetGlobalISs() is cheap on<br>
its own, but accessing the resulting ISs often boils down to an array of<br>
indices, which would mildly increase your memory bandwidth demands if<br>
you do it in a performance-sensitive traversal.  Usually these things<br>
are only needed during setup, at which point they are cheap as long as<br>
they are scalable.<br>
</blockquote></div><br></div></div>