<div dir="ltr">Thanks, Jed!<br></div><div class="gmail_extra"><br><br><div class="gmail_quote">On 13 June 2014 14:43, Jed Brown <span dir="ltr"><<a href="mailto:jed@jedbrown.org" target="_blank">jed@jedbrown.org</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="">Anush Krishnan <<a href="mailto:anush@bu.edu">anush@bu.edu</a>> writes:<br>
<br>
> Hello petsc-users,<br>
><br>
> I created a vector using DMDACreate with 3 degrees of freedom. Is it<br>
> possible for me to access each vector corresponding to a degree of freedom?<br>
> Seeing that I need to access the array as [k][j][i][dof], does it mean that<br>
> the values of each component are not contiguous?<br>
<br>
</div>The values are interlaced.  This is generally better for memory<br>
performance (cache reuse).  See, for example, the PETSc-FUN3D papers or<br>
the various discretization frameworks that rediscover this every once in<br>
a while.<br>
<div class=""><br>
> Also, what is the difference between DMDAVecGetArray and DMDAVecGetArrayDOF?<br>
<br>
</div>With DMDAVecGetArray for multi-component problems, you usually write<br>
<br>
  typedef struct {PetscScalar u,v,w;} Field;<br>
  Field ***x;<br>
  DMDAVecGetArray(dm,X,&x);<br>
  ...<br>
  x[k][j][i].u = 1;<br>
<br>
With DMDAVecGetArrayDOF, you use an extra set of indices instead of the<br>
struct.<br>
</blockquote></div><br></div>