[petsc-users] DMDACoor2d and DMDACoor3d in Fortran

Danyang Su danyang.su at gmail.com
Sun Apr 27 02:53:21 CDT 2014


Hi Barry,

Another question is about DMDAGetLocalBoundingBox in fortran.

PetscErrorCode  DMDAGetLocalBoundingBox(DM da,PetscReal lmin[],PetscReal 
lmax[])

The first value of lmin and lmax (lmin(0)) are always zero,  and 
lmin(1), lmin(2), and lmin(3) are for x, y, and z dimension, 
respectively.  And the returned value is index (local node index in x, 
y, z dim), not the coordinate. Correct?

Thanks and regards,

Danyang

On 25/04/2014 10:06 AM, Barry Smith wrote:
> On Apr 25, 2014, at 11:41 AM, Danyang Su <danyang.su at gmail.com> 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



More information about the petsc-users mailing list