<div dir="ltr">So basically one needs to correctly map<div><br></div><div>iPetsc, jPetsc -> iApplication, jApplication ?</div><div><br></div><div>Is there is any standard way to do this? Can I get petsc to automatically follow the same parallel topology as the host application?</div><div><br></div><div>Thanks,</div><div>Mani</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Sat, Aug 8, 2015 at 3:12 PM, Barry Smith <span dir="ltr"><<a href="mailto:bsmith@mcs.anl.gov" target="_blank">bsmith@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"><span class=""><br>
> On Aug 8, 2015, at 3:08 PM, Mani Chandra <<a href="mailto:mc0710@gmail.com">mc0710@gmail.com</a>> wrote:<br>
><br>
> Tried flipping the indices, I get a seg fault.<br>
<br>
</span>  You would have to be careful in exactly what you flip.  Note that the meaning of N1 and N2 etc would also be reversed between your code and the PETSc DMDA code.<br>
<br>
  I would create a tiny DMDA and put entires like 1 2 3 4 ... into the array so you can track where the values go<br>
<span class="HOEnZb"><font color="#888888"><br>
  Barry<br>
</font></span><div class="HOEnZb"><div class="h5"><br>
><br>
> On Sat, Aug 8, 2015 at 3:03 PM, Barry Smith <<a href="mailto:bsmith@mcs.anl.gov">bsmith@mcs.anl.gov</a>> wrote:<br>
><br>
> > On Aug 8, 2015, at 2:45 PM, Mani Chandra <<a href="mailto:mc0710@gmail.com">mc0710@gmail.com</a>> wrote:<br>
> ><br>
> > Thanks. Any suggestions for a fix?<br>
><br>
>   Just flip the meaning of the x indices and the y indices in the PETSc parts of the code?<br>
><br>
>   Also run with a very different N1 and  N2 (instead of equal size) to better test the code coupling.<br>
><br>
>   Barry<br>
><br>
><br>
> ><br>
> > Reorder the indices in arrayApplication?<br>
> ><br>
> > On Sat, Aug 8, 2015 at 2:19 PM, Matthew Knepley <<a href="mailto:knepley@gmail.com">knepley@gmail.com</a>> wrote:<br>
> > On Sat, Aug 8, 2015 at 1:52 PM, Mani Chandra <<a href="mailto:mc0710@gmail.com">mc0710@gmail.com</a>> wrote:<br>
> > Hi,<br>
> ><br>
> > I'm having trouble interfacing petsc to an application which I think is related to the ordering of the nodes. Here's what I'm trying to do:<br>
> ><br>
> > The application uses a structured grid with a global array having dimensions N1 x N2, which is then decomposed into a local array with dimensions NX1 x NX2.<br>
> ><br>
> > I create a Petsc DMDA using<br>
> ><br>
> >     DMDACreate2d(MPI_COMM_WORLD,<br>
> >                  DM_BOUNDARY_PERIODIC, DM_BOUNDARY_PERIODIC,<br>
> >                  DMDA_STENCIL_BOX,<br>
> >                  N1, N2,<br>
> >                  N1/NX1, N2/NX2,<br>
> >                  1, nghost, PETSC_NULL, PETSC_NULL,<br>
> >                  &dmda);<br>
> ><br>
> > and then use this to create a vec:<br>
> ><br>
> >   DMCreateGlobalVector(dmda, &vec);<br>
> ><br>
> > Now I copy the local contents of the application array to the petsc array using the following:<br>
> ><br>
> > Let i, j be the application indices and iPetsc and jPetsc be petsc's indices, then:<br>
> ><br>
> > DMDAGetCorners(dmda, &iStart, &jStart, &kStart,<br>
> >                                          &iSize, &jSize, &kSize<br>
> >                               );<br>
> ><br>
> ><br>
> > double **arrayPetsc;<br>
> > DMDAVecGetArray(dmda, vec, &arrayPetsc);<br>
> ><br>
> > for (int j=0, jPetsc=jStart; j<NX2, jPetsc<jStart+jSize; j++, jPetsc++)<br>
> > {<br>
> >   for (int i=0, iPetsc=iStart; i<NX1, iPetsc<iStart+iSize; i++, iPetsc++)<br>
> >   {<br>
> >      arrayPetsc[jPetsc][iPetsc] = arrayApplication[j][i];<br>
> >   }<br>
> > }<br>
> ><br>
> > DMDAVecRestoreArray(dmda, vec, &arrayPetsc);<br>
> ><br>
> > Now if I VecView(vec, viewer) and look at the data that petsc has, it looks right when run with 1 proc, but if I use 4 procs it's all messed up (see attached plots).<br>
> ><br>
> > I should probably be using the AO object but its not clear how. Could you help me out?<br>
> ><br>
> > It looks like you have the global order of processes reversed, meaning you have<br>
> ><br>
> >   1   3<br>
> ><br>
> >   0   2<br>
> ><br>
> > and it should be<br>
> ><br>
> >   2  3<br>
> ><br>
> >   0  1<br>
> ><br>
> >   Thanks,<br>
> ><br>
> >       Matt<br>
> ><br>
> > Thanks,<br>
> > Mani<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>
> ><br>
><br>
><br>
<br>
</div></div></blockquote></div><br></div>