xref: /petsc/src/dm/impls/da/ftn-custom/zdaf.c (revision b0dcfd164860a975c76f90dabf1036901aab1c4e) !
1 #include <petsc/private/ftnimpl.h>
2 #include <petsc/private/dmdaimpl.h>
3 
4 #if defined(PETSC_HAVE_FORTRAN_CAPS)
5   #define dmdagetownershipranges_     DMDAGETOWNERSHIPRANGES
6   #define dmdarestoreownershipranges_ DMDARESTOREOWNERSHIPRANGES
7   #define dmdagetneighbors_           DMDAGETNEIGHBORS
8   #define dmdarestoreneighbors_       DMDARESTORENEIGHBORS
9 #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE)
10   #define dmdagetownershipranges_     dmdagetownershipranges
11   #define dmdarestoreownershipranges_ dmdarestoreownershipranges
12   #define dmdagetneighbors_           dmdagetneighbors
13   #define dmdarestoreneighbors_       dmdarestoreneighbors
14 #endif
15 
dmdagetneighbors_(DM * da,F90Array1d * ptr,PetscErrorCode * ierr PETSC_F90_2PTR_PROTO (ptrd))16 PETSC_EXTERN void dmdagetneighbors_(DM *da, F90Array1d *ptr, PetscErrorCode *ierr PETSC_F90_2PTR_PROTO(ptrd))
17 {
18   const PetscMPIInt *r;
19   PetscInt           n, dim;
20 
21   *ierr = DMDAGetNeighbors(*da, &r);
22   if (*ierr) return;
23   *ierr = DMGetDimension(*da, &dim);
24   if (*ierr) return;
25   if (dim == 2) n = 9;
26   else n = 27;
27   *ierr = F90Array1dCreate((PetscInt *)r, MPI_INT, 1, n, ptr PETSC_F90_2PTR_PARAM(ptrd));
28 }
29 
dmdarestoreneighbors_(DM * da,F90Array1d * ptr,PetscErrorCode * ierr PETSC_F90_2PTR_PROTO (ptrd))30 PETSC_EXTERN void dmdarestoreneighbors_(DM *da, F90Array1d *ptr, PetscErrorCode *ierr PETSC_F90_2PTR_PROTO(ptrd))
31 {
32   *ierr = F90Array1dDestroy(ptr, MPI_INT PETSC_F90_2PTR_PARAM(ptrd));
33 }
34 
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))35 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))
36 {
37   const PetscInt *gx, *gy, *gz;
38   PetscInt        M, N, P;
39 
40   *ierr = DMDAGetInfo(*da, NULL, NULL, NULL, NULL, &M, &N, &P, NULL, NULL, NULL, NULL, NULL, NULL);
41   if (*ierr) return;
42   *ierr = DMDAGetOwnershipRanges(*da, &gx, &gy, &gz);
43   if (*ierr) return;
44   if ((void *)lx != PETSC_NULL_INTEGER_POINTER_Fortran) {
45     *ierr = F90Array1dCreate((PetscInt *)gx, MPIU_INT, 1, M, lx PETSC_F90_2PTR_PARAM(lxd));
46     if (*ierr) return;
47   }
48   if ((void *)ly != PETSC_NULL_INTEGER_POINTER_Fortran) {
49     *ierr = F90Array1dCreate((PetscInt *)gy, MPIU_INT, 1, N, ly PETSC_F90_2PTR_PARAM(lyd));
50     if (*ierr) return;
51   }
52   if ((void *)lz != PETSC_NULL_INTEGER_POINTER_Fortran) *ierr = F90Array1dCreate((PetscInt *)gz, MPIU_INT, 1, P, lz PETSC_F90_2PTR_PARAM(lzd));
53 }
54 
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))55 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 {
57   if ((void *)lx != PETSC_NULL_INTEGER_POINTER_Fortran) {
58     *ierr = F90Array1dDestroy(lx, MPIU_INT PETSC_F90_2PTR_PARAM(lxd));
59     if (*ierr) return;
60   }
61   if ((void *)ly != PETSC_NULL_INTEGER_POINTER_Fortran) {
62     *ierr = F90Array1dDestroy(ly, MPIU_INT PETSC_F90_2PTR_PARAM(lyd));
63     if (*ierr) return;
64   }
65   if ((void *)lz != PETSC_NULL_INTEGER_POINTER_Fortran) *ierr = F90Array1dDestroy(lz, MPIU_INT PETSC_F90_2PTR_PARAM(lzd));
66 }
67