xref: /petsc/src/dm/impls/da/ftn-custom/zdaf.c (revision b0dcfd164860a975c76f90dabf1036901aab1c4e)
1*6dd63270SBarry Smith #include <petsc/private/ftnimpl.h>
2af0996ceSBarry Smith #include <petsc/private/dmdaimpl.h>
32219e2e3SSatish Balay 
42219e2e3SSatish Balay #if defined(PETSC_HAVE_FORTRAN_CAPS)
52219e2e3SSatish Balay   #define dmdagetownershipranges_     DMDAGETOWNERSHIPRANGES
6ce78bad3SBarry Smith   #define dmdarestoreownershipranges_ DMDARESTOREOWNERSHIPRANGES
72219e2e3SSatish Balay   #define dmdagetneighbors_           DMDAGETNEIGHBORS
8ce78bad3SBarry Smith   #define dmdarestoreneighbors_       DMDARESTORENEIGHBORS
92219e2e3SSatish Balay #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE)
102219e2e3SSatish Balay   #define dmdagetownershipranges_     dmdagetownershipranges
11ce78bad3SBarry Smith   #define dmdarestoreownershipranges_ dmdarestoreownershipranges
122219e2e3SSatish Balay   #define dmdagetneighbors_           dmdagetneighbors
13ce78bad3SBarry Smith   #define dmdarestoreneighbors_       dmdarestoreneighbors
142219e2e3SSatish Balay #endif
152219e2e3SSatish Balay 
dmdagetneighbors_(DM * da,F90Array1d * ptr,PetscErrorCode * ierr PETSC_F90_2PTR_PROTO (ptrd))16ce78bad3SBarry Smith PETSC_EXTERN void dmdagetneighbors_(DM *da, F90Array1d *ptr, PetscErrorCode *ierr PETSC_F90_2PTR_PROTO(ptrd))
172219e2e3SSatish Balay {
182219e2e3SSatish Balay   const PetscMPIInt *r;
19c73cfb54SMatthew G. Knepley   PetscInt           n, dim;
202219e2e3SSatish Balay 
215975b3b6SBarry Smith   *ierr = DMDAGetNeighbors(*da, &r);
225975b3b6SBarry Smith   if (*ierr) return;
235975b3b6SBarry Smith   *ierr = DMGetDimension(*da, &dim);
245975b3b6SBarry Smith   if (*ierr) return;
25c73cfb54SMatthew G. Knepley   if (dim == 2) n = 9;
268865f1eaSKarl Rupp   else n = 27;
27ce78bad3SBarry Smith   *ierr = F90Array1dCreate((PetscInt *)r, MPI_INT, 1, n, ptr PETSC_F90_2PTR_PARAM(ptrd));
282219e2e3SSatish Balay }
292219e2e3SSatish Balay 
dmdarestoreneighbors_(DM * da,F90Array1d * ptr,PetscErrorCode * ierr PETSC_F90_2PTR_PROTO (ptrd))30ce78bad3SBarry Smith PETSC_EXTERN void dmdarestoreneighbors_(DM *da, F90Array1d *ptr, PetscErrorCode *ierr PETSC_F90_2PTR_PROTO(ptrd))
31ce78bad3SBarry Smith {
32ce78bad3SBarry Smith   *ierr = F90Array1dDestroy(ptr, MPI_INT PETSC_F90_2PTR_PARAM(ptrd));
33ce78bad3SBarry Smith }
34ce78bad3SBarry Smith 
dmdagetownershipranges_(DM * da,F90Array1d * lx,F90Array1d * ly,F90Array1d * lz,PetscErrorCode * ierr PETSC_F90_2PTR_PROTO (lxd)PETSC_F90_2PTR_PROTO (lyd)PETSC_F90_2PTR_PROTO (lzd))35ce78bad3SBarry Smith PETSC_EXTERN void dmdagetownershipranges_(DM *da, F90Array1d *lx, F90Array1d *ly, F90Array1d *lz, PetscErrorCode *ierr PETSC_F90_2PTR_PROTO(lxd) PETSC_F90_2PTR_PROTO(lyd) PETSC_F90_2PTR_PROTO(lzd))
362219e2e3SSatish Balay {
372219e2e3SSatish Balay   const PetscInt *gx, *gy, *gz;
38ce78bad3SBarry Smith   PetscInt        M, N, P;
392219e2e3SSatish Balay 
40dfef5ea7SSatish Balay   *ierr = DMDAGetInfo(*da, NULL, NULL, NULL, NULL, &M, &N, &P, NULL, NULL, NULL, NULL, NULL, NULL);
415975b3b6SBarry Smith   if (*ierr) return;
425975b3b6SBarry Smith   *ierr = DMDAGetOwnershipRanges(*da, &gx, &gy, &gz);
435975b3b6SBarry Smith   if (*ierr) return;
44ce78bad3SBarry Smith   if ((void *)lx != PETSC_NULL_INTEGER_POINTER_Fortran) {
45ce78bad3SBarry Smith     *ierr = F90Array1dCreate((PetscInt *)gx, MPIU_INT, 1, M, lx PETSC_F90_2PTR_PARAM(lxd));
46ce78bad3SBarry Smith     if (*ierr) return;
478865f1eaSKarl Rupp   }
48ce78bad3SBarry Smith   if ((void *)ly != PETSC_NULL_INTEGER_POINTER_Fortran) {
49ce78bad3SBarry Smith     *ierr = F90Array1dCreate((PetscInt *)gy, MPIU_INT, 1, N, ly PETSC_F90_2PTR_PARAM(lyd));
50ce78bad3SBarry Smith     if (*ierr) return;
518865f1eaSKarl Rupp   }
52ce78bad3SBarry Smith   if ((void *)lz != PETSC_NULL_INTEGER_POINTER_Fortran) *ierr = F90Array1dCreate((PetscInt *)gz, MPIU_INT, 1, P, lz PETSC_F90_2PTR_PARAM(lzd));
538865f1eaSKarl Rupp }
54ce78bad3SBarry Smith 
dmdarestoreownershipranges_(DM * da,F90Array1d * lx,F90Array1d * ly,F90Array1d * lz,PetscErrorCode * ierr PETSC_F90_2PTR_PROTO (lxd)PETSC_F90_2PTR_PROTO (lyd)PETSC_F90_2PTR_PROTO (lzd))55ce78bad3SBarry Smith PETSC_EXTERN void dmdarestoreownershipranges_(DM *da, F90Array1d *lx, F90Array1d *ly, F90Array1d *lz, PetscErrorCode *ierr PETSC_F90_2PTR_PROTO(lxd) PETSC_F90_2PTR_PROTO(lyd) PETSC_F90_2PTR_PROTO(lzd))
56ce78bad3SBarry Smith {
57ce78bad3SBarry Smith   if ((void *)lx != PETSC_NULL_INTEGER_POINTER_Fortran) {
58ce78bad3SBarry Smith     *ierr = F90Array1dDestroy(lx, MPIU_INT PETSC_F90_2PTR_PARAM(lxd));
59ce78bad3SBarry Smith     if (*ierr) return;
60ce78bad3SBarry Smith   }
61ce78bad3SBarry Smith   if ((void *)ly != PETSC_NULL_INTEGER_POINTER_Fortran) {
62ce78bad3SBarry Smith     *ierr = F90Array1dDestroy(ly, MPIU_INT PETSC_F90_2PTR_PARAM(lyd));
63ce78bad3SBarry Smith     if (*ierr) return;
64ce78bad3SBarry Smith   }
65ce78bad3SBarry Smith   if ((void *)lz != PETSC_NULL_INTEGER_POINTER_Fortran) *ierr = F90Array1dDestroy(lz, MPIU_INT PETSC_F90_2PTR_PARAM(lzd));
662219e2e3SSatish Balay }
67