Actual source code: zdaf.c

  1: #include <petsc/private/fortranimpl.h>
  2: #include <petsc/private/dmdaimpl.h>

  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

 14: PETSC_EXTERN void dmdagetneighbors_(DM *da, PetscMPIInt *ranks, PetscErrorCode *ierr)
 15: {
 16:   const PetscMPIInt *r;
 17:   PetscInt           n, dim;

 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: }

 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;

 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: }

 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: }