xref: /petsc/src/dm/impls/da/ftn-custom/zdaf.c (revision dfef5ea798a36ccc664ca1bbe435d183ec21e5c1)
1af0996ceSBarry Smith #include <petsc/private/fortranimpl.h>
2af0996ceSBarry Smith #include <petsc/private/dmdaimpl.h>
32219e2e3SSatish Balay 
42219e2e3SSatish Balay #if defined(PETSC_HAVE_FORTRAN_CAPS)
52219e2e3SSatish Balay   #define dmdagetownershipranges_  DMDAGETOWNERSHIPRANGES
62219e2e3SSatish Balay   #define dmdagetneighbors_        DMDAGETNEIGHBORS
71fd49c25SBarry Smith   #define dmdagetrefinementfactor_ DMDAGETREFINEMENTFACTOR
82219e2e3SSatish Balay #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE)
92219e2e3SSatish Balay   #define dmdagetownershipranges_  dmdagetownershipranges
102219e2e3SSatish Balay   #define dmdagetneighbors_        dmdagetneighbors
111fd49c25SBarry Smith   #define dmdagetrefinementfactor_ dmdagetrefinementfactor
122219e2e3SSatish Balay #endif
132219e2e3SSatish Balay 
1419caf8f3SSatish Balay PETSC_EXTERN void dmdagetneighbors_(DM *da, PetscMPIInt *ranks, PetscErrorCode *ierr)
152219e2e3SSatish Balay {
162219e2e3SSatish Balay   const PetscMPIInt *r;
17c73cfb54SMatthew G. Knepley   PetscInt           n, dim;
182219e2e3SSatish Balay 
195975b3b6SBarry Smith   *ierr = DMDAGetNeighbors(*da, &r);
205975b3b6SBarry Smith   if (*ierr) return;
215975b3b6SBarry Smith   *ierr = DMGetDimension(*da, &dim);
225975b3b6SBarry Smith   if (*ierr) return;
23c73cfb54SMatthew G. Knepley   if (dim == 2) n = 9;
248865f1eaSKarl Rupp   else n = 27;
25580bdb30SBarry Smith   *ierr = PetscArraycpy(ranks, r, n);
262219e2e3SSatish Balay }
272219e2e3SSatish Balay 
2819caf8f3SSatish Balay PETSC_EXTERN void dmdagetownershipranges_(DM *da, PetscInt lx[], PetscInt ly[], PetscInt lz[], PetscErrorCode *ierr)
292219e2e3SSatish Balay {
302219e2e3SSatish Balay   const PetscInt *gx, *gy, *gz;
312219e2e3SSatish Balay   PetscInt        M, N, P, i;
322219e2e3SSatish Balay 
332219e2e3SSatish Balay   CHKFORTRANNULLINTEGER(lx);
342219e2e3SSatish Balay   CHKFORTRANNULLINTEGER(ly);
352219e2e3SSatish Balay   CHKFORTRANNULLINTEGER(lz);
36*dfef5ea7SSatish Balay   *ierr = DMDAGetInfo(*da, NULL, NULL, NULL, NULL, &M, &N, &P, NULL, NULL, NULL, NULL, NULL, NULL);
375975b3b6SBarry Smith   if (*ierr) return;
385975b3b6SBarry Smith   *ierr = DMDAGetOwnershipRanges(*da, &gx, &gy, &gz);
395975b3b6SBarry Smith   if (*ierr) return;
408865f1eaSKarl Rupp   if (lx) {
418865f1eaSKarl Rupp     for (i = 0; i < M; i++) lx[i] = gx[i];
428865f1eaSKarl Rupp   }
438865f1eaSKarl Rupp   if (ly) {
448865f1eaSKarl Rupp     for (i = 0; i < N; i++) ly[i] = gy[i];
458865f1eaSKarl Rupp   }
468865f1eaSKarl Rupp   if (lz) {
478865f1eaSKarl Rupp     for (i = 0; i < P; i++) lz[i] = gz[i];
488865f1eaSKarl Rupp   }
492219e2e3SSatish Balay }
502219e2e3SSatish Balay 
5119caf8f3SSatish Balay PETSC_EXTERN void dmdagetrefinementfactor_(DM *da, PetscInt *lx, PetscInt *ly, PetscInt *lz, PetscErrorCode *ierr)
521fd49c25SBarry Smith {
531fd49c25SBarry Smith   CHKFORTRANNULLINTEGER(lx);
541fd49c25SBarry Smith   CHKFORTRANNULLINTEGER(ly);
551fd49c25SBarry Smith   CHKFORTRANNULLINTEGER(lz);
561fd49c25SBarry Smith   *ierr = DMDAGetRefinementFactor(*da, lx, ly, lz);
571fd49c25SBarry Smith }
58