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