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