xref: /petsc/src/dm/impls/da/ftn-custom/zdaf.c (revision 98d129c30f3ee9fdddc40fdbc5a989b7be64f888)
1 #include <petsc/private/fortranimpl.h>
2 #include <petsc/private/dmdaimpl.h>
3 
4 #if defined(PETSC_HAVE_FORTRAN_CAPS)
5   #define dmdagetownershipranges_  DMDAGETOWNERSHIPRANGES
6   #define dmdagetneighbors_        DMDAGETNEIGHBORS
7   #define dmdagetrefinementfactor_ DMDAGETREFINEMENTFACTOR
8 #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE)
9   #define dmdagetownershipranges_  dmdagetownershipranges
10   #define dmdagetneighbors_        dmdagetneighbors
11   #define dmdagetrefinementfactor_ dmdagetrefinementfactor
12 #endif
13 
14 PETSC_EXTERN void dmdagetneighbors_(DM *da, PetscMPIInt *ranks, PetscErrorCode *ierr)
15 {
16   const PetscMPIInt *r;
17   PetscInt           n, dim;
18 
19   *ierr = DMDAGetNeighbors(*da, &r);
20   if (*ierr) return;
21   *ierr = DMGetDimension(*da, &dim);
22   if (*ierr) return;
23   if (dim == 2) n = 9;
24   else n = 27;
25   *ierr = PetscArraycpy(ranks, r, n);
26 }
27 
28 PETSC_EXTERN void dmdagetownershipranges_(DM *da, PetscInt lx[], PetscInt ly[], PetscInt lz[], PetscErrorCode *ierr)
29 {
30   const PetscInt *gx, *gy, *gz;
31   PetscInt        M, N, P, i;
32 
33   CHKFORTRANNULLINTEGER(lx);
34   CHKFORTRANNULLINTEGER(ly);
35   CHKFORTRANNULLINTEGER(lz);
36   *ierr = DMDAGetInfo(*da, NULL, NULL, NULL, NULL, &M, &N, &P, NULL, NULL, NULL, NULL, NULL, NULL);
37   if (*ierr) return;
38   *ierr = DMDAGetOwnershipRanges(*da, &gx, &gy, &gz);
39   if (*ierr) return;
40   if (lx) {
41     for (i = 0; i < M; i++) lx[i] = gx[i];
42   }
43   if (ly) {
44     for (i = 0; i < N; i++) ly[i] = gy[i];
45   }
46   if (lz) {
47     for (i = 0; i < P; i++) lz[i] = gz[i];
48   }
49 }
50 
51 PETSC_EXTERN void dmdagetrefinementfactor_(DM *da, PetscInt *lx, PetscInt *ly, PetscInt *lz, PetscErrorCode *ierr)
52 {
53   CHKFORTRANNULLINTEGER(lx);
54   CHKFORTRANNULLINTEGER(ly);
55   CHKFORTRANNULLINTEGER(lz);
56   *ierr = DMDAGetRefinementFactor(*da, lx, ly, lz);
57 }
58