<div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr">Thanks Barry and Jed,<div><br></div><div>I think I understood now.</div><div><br></div><div>One more question. We usually have a code pattern in some PETSc DMDA examples as follows:</div><div><br></div><div><div>DMDAVecGetArrayRead(da,localU,&uarray);</div><div>DMDAVecGetArray(da,F,&f);</div></div><div><br></div><div>DMDAGetCorners(da,&xs,&ys,NULL,&xm,&ym,NULL);<br></div><div><br></div><div><div>for (j=ys; j<ys+ym; j++) {</div><div>    for (i=xs; i<xs+xm; i++) {\</div></div><div>      f[j][i] = uarray[j][i] - uarray[j-1][i];</div><div>}</div><div>}</div><div><br></div><div>Why we are using global i, j here? Should not we use i=i-xs, j=j-ys?  Aren't uarray and f  local arrays?</div><div><br></div><div>Thanks,</div><div><br>Fande Kong,</div><div><br></div><div><br></div><div><br></div></div></div></div></div></div><br><div class="gmail_quote"><div dir="ltr">On Tue, Jan 8, 2019 at 3:40 PM Smith, Barry F. <<a href="mailto:bsmith@mcs.anl.gov">bsmith@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"><br>
<br>
> On Jan 8, 2019, at 4:35 PM, Jed Brown <<a href="mailto:jed@jedbrown.org" target="_blank">jed@jedbrown.org</a>> wrote:<br>
> <br>
> "Smith, Barry F. via petsc-users" <<a href="mailto:petsc-users@mcs.anl.gov" target="_blank">petsc-users@mcs.anl.gov</a>> writes:<br>
> <br>
>>> On Jan 8, 2019, at 4:11 PM, Fande Kong via petsc-users <<a href="mailto:petsc-users@mcs.anl.gov" target="_blank">petsc-users@mcs.anl.gov</a>> wrote:<br>
>>> <br>
>>> Hi All,<br>
>>> <br>
>>> I was wondering how to convert a regular (2D DMDA) grid coordinate (i,j) to a global index that is used for global matrices and vectors. Do we have any API on this? <br>
>> <br>
>>    You can convert the global i,j to a local I,J by subtracting off the xs, ys, then convert to the local vector numbering with something like I+J*xm then add that value to the rstart returned from VecGetOwnershipRange() <br>
> <br>
> If the value may be in your ghosted/halo region, you can use<br>
> <br>
>  VecGetLocalToGlobalMapping(vec, ltog);<br>
>  ISLocalToGlobalMappingApply(ltog, 1, &local, &global);<br>
<br>
   Oh, yes I was ignoring the case where the questioning process didn't own the value. <br>
<br>
   In the general case where the i,j may not be within the ghost region of the process it is on you can use the ao obtained from DMDAGetAO() to map from the natural (application) ordering to the PETSc ordering. Obtain the natural ordering value with something like i + j*M. <br>
<br>
</blockquote></div>