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 14*19caf8f3SSatish 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 192219e2e3SSatish Balay *ierr = DMDAGetNeighbors(*da,&r);if (*ierr) return; 20c73cfb54SMatthew G. Knepley *ierr = DMGetDimension(*da,&dim);if (*ierr) return; 21c73cfb54SMatthew G. Knepley if (dim == 2) n = 9; 228865f1eaSKarl Rupp else n = 27; 23580bdb30SBarry Smith *ierr = PetscArraycpy(ranks,r,n); 242219e2e3SSatish Balay } 252219e2e3SSatish Balay 26*19caf8f3SSatish Balay PETSC_EXTERN void dmdagetownershipranges_(DM *da,PetscInt lx[],PetscInt ly[],PetscInt lz[],PetscErrorCode *ierr) 272219e2e3SSatish Balay { 282219e2e3SSatish Balay const PetscInt *gx,*gy,*gz; 292219e2e3SSatish Balay PetscInt M,N,P,i; 302219e2e3SSatish Balay 312219e2e3SSatish Balay CHKFORTRANNULLINTEGER(lx); 322219e2e3SSatish Balay CHKFORTRANNULLINTEGER(ly); 332219e2e3SSatish Balay CHKFORTRANNULLINTEGER(lz); 342219e2e3SSatish Balay *ierr = DMDAGetInfo(*da,0,0,0,0,&M,&N,&P,0,0,0,0,0,0);if (*ierr) return; 352219e2e3SSatish Balay *ierr = DMDAGetOwnershipRanges(*da,&gx,&gy,&gz);if (*ierr) return; 368865f1eaSKarl Rupp if (lx) { 378865f1eaSKarl Rupp for (i=0; i<M; i++) lx[i] = gx[i]; 388865f1eaSKarl Rupp } 398865f1eaSKarl Rupp if (ly) { 408865f1eaSKarl Rupp for (i=0; i<N; i++) ly[i] = gy[i]; 418865f1eaSKarl Rupp } 428865f1eaSKarl Rupp if (lz) { 438865f1eaSKarl Rupp for (i=0; i<P; i++) lz[i] = gz[i]; 448865f1eaSKarl Rupp } 452219e2e3SSatish Balay } 462219e2e3SSatish Balay 47*19caf8f3SSatish Balay PETSC_EXTERN void dmdagetrefinementfactor_(DM *da,PetscInt *lx,PetscInt *ly,PetscInt *lz,PetscErrorCode *ierr) 481fd49c25SBarry Smith { 491fd49c25SBarry Smith CHKFORTRANNULLINTEGER(lx); 501fd49c25SBarry Smith CHKFORTRANNULLINTEGER(ly); 511fd49c25SBarry Smith CHKFORTRANNULLINTEGER(lz); 521fd49c25SBarry Smith *ierr = DMDAGetRefinementFactor(*da,lx,ly,lz); 531fd49c25SBarry Smith } 541fd49c25SBarry Smith 55