<div dir="ltr">On Mon, Oct 21, 2013 at 7:14 AM, Åsmund Ervik <span dir="ltr"><<a href="mailto:asmund.ervik@ntnu.no" target="_blank">asmund.ervik@ntnu.no</a>></span> wrote:<br><div class="gmail_extra"><div class="gmail_quote">
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Thanks Jed,<br>
<br>
The following works fine (for future reference):<br>
<br>
  call DMDASetUniformCoordinates(SolScal,0.1,1.0,0.0,1.2,0.0,1.0,ierr)<br>
<br>
  call DMGetCoordinatesLocal(SolScal,coordVec,ierr)<br>
  call DMGetCoordinateDM(SolScal,CoordDM,ierr)<br>
  call DMDAVecGetArrayF90(CoordDM,coordVec,coords,ierr)<br>
<br>
  write(*,*) coords(:,0,0,0)<br>
  write(*,*) coords(:,imax-1,jmax-1,kmax-1)<br>
gives<br>
  0.1  0.0  0.0<br>
  1.0  1.2  1.0<br>
<br>
Perfect. Not very logical though, that we need this new DM, so perhaps<br>
add an example/something in the manual?<br></blockquote><div><br></div><div>A DM describes a data layout over a topology. Here is the topology is a</div><div>Cartesian grid, and 'dm' describes the data layout of your solution vector.</div>
<div>If you want the layout of the coordinate vector then you need another</div><div>DM, namely 'coordDM'.</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">

I'm by the way planning to send you a Fortran example solving van der<br>
Pol with a 3D DMDA (if you want it). I could include the above code in<br>
that example if desired.  The example is written with some utility<br>
functions (discussed in emails a few weeks ago) such that it is easy to<br>
reuse 95% of a legacy code solving van der Pol (or other PDE). The main<br>
motivation for adding this example (IMO) is that none of the current DM<br>
examples show how DMDAs are used for solving a PDE in a very simple<br>
case, particularly not for Fortran.<br>
<br>
One question in this regard: can you have examples split into two files?<br>
That makes it easier to use Fortran modules in this case.<br>
<span class="HOEnZb"><font color="#888888"><br>
<br>
Åsmund<br>
</font></span><div class="HOEnZb"><div class="h5"><br>
<br>
On 21. okt. 2013 13:55, Jed Brown wrote:<br>
> Åsmund Ervik <<a href="mailto:asmund.ervik@ntnu.no">asmund.ervik@ntnu.no</a>> writes:<br>
><br>
>> Dear all,<br>
>><br>
>> I'm using a DMDA to manage my grid, and I want to have uniform<br>
>> coordinates, so I use DMDASetUniformCoordinates. Since I let PETSc<br>
>> decide the grid partitioning, I need to get the local coordinates, i.e.<br>
>> xmin,xmax for the local grid. I found the function<br>
>> DMGetCoordinatesLocal, but I can't seem to figure out how it works (not<br>
>> in the manual, examples are confusing). What I do is<br>
>><br>
>>   call DMDASetUniformCoordinates(SolScal,0.1,1.0,0.0,1.2,0.0,1.0,ierr)<br>
>>   call DMGetCoordinatesLocal(SolScal,coordVec,ierr)<br>
>>   call DMDAVecGetArrayF90(SolScal,coordVec,coords,ierr)<br>
>><br>
>> Then I have the "coords" F90 array, which has the same dimensions as my<br>
>> local part of the DA, i.e. dof:imax:jmax:kmax (all starting at 0).<br>
><br>
> Actually, the dimensions are dim:imax:jmax:kmax.  Use<br>
><br>
>   call DMGetCoordinateDM(SolScal,CoordDM,ierr)<br>
>   call DMDAVecGetArrayF90(CoordDM,coordVec,coords,ierr)<br>
><br>
>> Where in this array can I find the values xmin,xmax etc? It looks<br>
>> really strange, e.g. a slice in i-direction gives 0.10 0.00 1.20 0.55<br>
>> 0.00<br>
>><br>
>> I do realize I can compute these on my own, but I think using<br>
>> DMGetCoordinatesLocal has less potential for errors.<br>
>><br>
>> Best regards,<br>
>> Åsmund Ervik<br>
</div></div></blockquote></div><br><br clear="all"><div><br></div>-- <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
</div></div>