On Apr 25, 2014, at 11:41 AM, Danyang Su <[email protected]> wrote:

> Hi All,
> 
> I tried to set the simulation domain using DMDA coordinates, following the 
> example dm/examples/tutorials/ex3.c. The 1D problem worked fine but the 2D 
> and 3D  failed because of the definition in coors2d and coords3d. What should 
> I use to define the variable coords2d and coords3d?

   Failed in compiling is not very useful. Much better to send the ENTIRE 
compiler error message.

   There is no DMDACoor2d or 3d in Fortran. You should use

> PetscScalar, pointer :: coords2d(:,:,:)   

note there is three indices, the first index is 0 or 1 for the x or y coordinate

  Similar for 3d.

Satish,

    Please see about adding a DMDACoor2d and 3d for Fortran.

Request-assigned: Satish, add a DMDACoor2d and 3d for Fortran.


   Barry



> 
> -->Codes section:
> 
> PetscScalar, pointer :: coords1d(:)
> DMDACoor2d, pointer :: coords2d(:,:)                !Failed in compiling
> DMDACoor3d, pointer :: coords3d(:,:,:)              !Failed in compiling
> Vec :: gc
> 
> !1D domain
> call DMGetGlobalVector(dmda_flow%da,gc,ierr)
> call DMDAVecGetArrayF90(dmda_flow%da,gc,coords1d,ierr)
> do ivx = nvxls,nvxle
>     coords1d(ivx-ibase) = xglat(ivx)
> end do
> call DMDAVecRestoreArrayF90(dmda_flow%da,gc,coords1d,ierr)
> call DMSetCoordinates(dmda_flow%da,gc,ierr)
> call DMRestoreGlobalVector(dmda_flow%da,gc,ierr)
> 
> 
> !2D domain
> call DMGetGlobalVector(dmda_flow%da,gc,ierr)
> call DMDAVecGetArrayF90(dmda_flow%da,gc,coords2d,ierr)
> do ivx = nvxls,nvxle
>     coords2d(ivx-ibase,ivy-ibase)%x = xglat(ivx)
>     coords2d(ivx-ibase,ivy-ibase)%y = yglat(ivy)
> end do
> call DMDAVecRestoreArrayF90(dmda_flow%da,gc,coords2d,ierr)
> call DMSetCoordinates(dmda_flow%da,gc,ierr)
> call DMRestoreGlobalVector(dmda_flow%da,gc,ierr)
> 
> Thanks and regards,
> 
> Danyang

Reply via email to