xref: /petsc/src/dm/impls/da/ftn-custom/zdaf.c (revision ce78bad369055609e946c9d2c25ea67a45873e27)
1*ce78bad3SBarry Smith #include <petsc/private/f90impl.h>
2af0996ceSBarry Smith #include <petsc/private/dmdaimpl.h>
32219e2e3SSatish Balay 
42219e2e3SSatish Balay #if defined(PETSC_HAVE_FORTRAN_CAPS)
52219e2e3SSatish Balay   #define dmdagetownershipranges_     DMDAGETOWNERSHIPRANGES
6*ce78bad3SBarry Smith   #define dmdarestoreownershipranges_ DMDARESTOREOWNERSHIPRANGES
72219e2e3SSatish Balay   #define dmdagetneighbors_           DMDAGETNEIGHBORS
8*ce78bad3SBarry Smith   #define dmdarestoreneighbors_       DMDARESTORENEIGHBORS
92219e2e3SSatish Balay #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE)
102219e2e3SSatish Balay   #define dmdagetownershipranges_     dmdagetownershipranges
11*ce78bad3SBarry Smith   #define dmdarestoreownershipranges_ dmdarestoreownershipranges
122219e2e3SSatish Balay   #define dmdagetneighbors_           dmdagetneighbors
13*ce78bad3SBarry Smith   #define dmdarestoreneighbors_       dmdarestoreneighbors
142219e2e3SSatish Balay #endif
152219e2e3SSatish Balay 
16*ce78bad3SBarry 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;
27*ce78bad3SBarry Smith   *ierr = F90Array1dCreate((PetscInt *)r, MPI_INT, 1, n, ptr PETSC_F90_2PTR_PARAM(ptrd));
282219e2e3SSatish Balay }
292219e2e3SSatish Balay 
30*ce78bad3SBarry Smith PETSC_EXTERN void dmdarestoreneighbors_(DM *da, F90Array1d *ptr, PetscErrorCode *ierr PETSC_F90_2PTR_PROTO(ptrd))
31*ce78bad3SBarry Smith {
32*ce78bad3SBarry Smith   *ierr = F90Array1dDestroy(ptr, MPI_INT PETSC_F90_2PTR_PARAM(ptrd));
33*ce78bad3SBarry Smith }
34*ce78bad3SBarry Smith 
35*ce78bad3SBarry 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;
38*ce78bad3SBarry 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;
44*ce78bad3SBarry Smith   if ((void *)lx != PETSC_NULL_INTEGER_POINTER_Fortran) {
45*ce78bad3SBarry Smith     *ierr = F90Array1dCreate((PetscInt *)gx, MPIU_INT, 1, M, lx PETSC_F90_2PTR_PARAM(lxd));
46*ce78bad3SBarry Smith     if (*ierr) return;
478865f1eaSKarl Rupp   }
48*ce78bad3SBarry Smith   if ((void *)ly != PETSC_NULL_INTEGER_POINTER_Fortran) {
49*ce78bad3SBarry Smith     *ierr = F90Array1dCreate((PetscInt *)gy, MPIU_INT, 1, N, ly PETSC_F90_2PTR_PARAM(lyd));
50*ce78bad3SBarry Smith     if (*ierr) return;
518865f1eaSKarl Rupp   }
52*ce78bad3SBarry 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 }
54*ce78bad3SBarry Smith 
55*ce78bad3SBarry 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))
56*ce78bad3SBarry Smith {
57*ce78bad3SBarry Smith   if ((void *)lx != PETSC_NULL_INTEGER_POINTER_Fortran) {
58*ce78bad3SBarry Smith     *ierr = F90Array1dDestroy(lx, MPIU_INT PETSC_F90_2PTR_PARAM(lxd));
59*ce78bad3SBarry Smith     if (*ierr) return;
60*ce78bad3SBarry Smith   }
61*ce78bad3SBarry Smith   if ((void *)ly != PETSC_NULL_INTEGER_POINTER_Fortran) {
62*ce78bad3SBarry Smith     *ierr = F90Array1dDestroy(ly, MPIU_INT PETSC_F90_2PTR_PARAM(lyd));
63*ce78bad3SBarry Smith     if (*ierr) return;
64*ce78bad3SBarry Smith   }
65*ce78bad3SBarry Smith   if ((void *)lz != PETSC_NULL_INTEGER_POINTER_Fortran) *ierr = F90Array1dDestroy(lz, MPIU_INT PETSC_F90_2PTR_PARAM(lzd));
662219e2e3SSatish Balay }
67