xref: /petsc/src/dm/impls/da/ftn-custom/zdaf.c (revision d724dfffc20f5834ebb4b97bb1e8ef89c8c2f0ed) !
1 #include <petsc-private/fortranimpl.h>
2 #include <petsc-private/daimpl.h>
3 
4 #if defined(PETSC_HAVE_FORTRAN_CAPS)
5 #define dmdagetownershipranges_        DMDAGETOWNERSHIPRANGES
6 #define dmdagetneighbors_              DMDAGETNEIGHBORS
7 #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE)
8 #define dmdagetownershipranges_        dmdagetownershipranges
9 #define dmdagetneighbors_              dmdagetneighbors
10 #endif
11 
12 EXTERN_C_BEGIN
13 void PETSC_STDCALL dmdagetneighbors_(DM *da,PetscMPIInt *ranks,PetscErrorCode *ierr)
14 {
15   const PetscMPIInt *r;
16   PetscInt          n;
17   DM_DA            *dd = (DM_DA*)(*da)->data;
18 
19   *ierr = DMDAGetNeighbors(*da,&r);if (*ierr) return;
20   if (dd->dim == 2) n = 9; else n = 27;
21   *ierr = PetscMemcpy(ranks,r,n*sizeof(PetscMPIInt));
22 }
23 
24 void PETSC_STDCALL dmdagetownershipranges_(DM *da,PetscInt lx[],PetscInt ly[],PetscInt lz[],PetscErrorCode *ierr)
25 {
26   const PetscInt *gx,*gy,*gz;
27   PetscInt       M,N,P,i;
28 
29   CHKFORTRANNULLINTEGER(lx);
30   CHKFORTRANNULLINTEGER(ly);
31   CHKFORTRANNULLINTEGER(lz);
32   *ierr = DMDAGetInfo(*da,0,0,0,0,&M,&N,&P,0,0,0,0,0,0);if (*ierr) return;
33   *ierr = DMDAGetOwnershipRanges(*da,&gx,&gy,&gz);if (*ierr) return;
34   if (lx) {for (i=0; i<M; i++) {lx[i] = gx[i];}}
35   if (ly) {for (i=0; i<N; i++) {ly[i] = gy[i];}}
36   if (lz) {for (i=0; i<P; i++) {lz[i] = gz[i];}}
37 }
38 
39 EXTERN_C_END
40