[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