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 1419caf8f3SSatish 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 195975b3b6SBarry Smith *ierr = DMDAGetNeighbors(*da, &r); 205975b3b6SBarry Smith if (*ierr) return; 215975b3b6SBarry Smith *ierr = DMGetDimension(*da, &dim); 225975b3b6SBarry Smith if (*ierr) return; 23c73cfb54SMatthew G. Knepley if (dim == 2) n = 9; 248865f1eaSKarl Rupp else n = 27; 25580bdb30SBarry Smith *ierr = PetscArraycpy(ranks, r, n); 262219e2e3SSatish Balay } 272219e2e3SSatish Balay 2819caf8f3SSatish Balay PETSC_EXTERN void dmdagetownershipranges_(DM *da, PetscInt lx[], PetscInt ly[], PetscInt lz[], PetscErrorCode *ierr) 292219e2e3SSatish Balay { 302219e2e3SSatish Balay const PetscInt *gx, *gy, *gz; 312219e2e3SSatish Balay PetscInt M, N, P, i; 322219e2e3SSatish Balay 332219e2e3SSatish Balay CHKFORTRANNULLINTEGER(lx); 342219e2e3SSatish Balay CHKFORTRANNULLINTEGER(ly); 352219e2e3SSatish Balay CHKFORTRANNULLINTEGER(lz); 36*dfef5ea7SSatish Balay *ierr = DMDAGetInfo(*da, NULL, NULL, NULL, NULL, &M, &N, &P, NULL, NULL, NULL, NULL, NULL, NULL); 375975b3b6SBarry Smith if (*ierr) return; 385975b3b6SBarry Smith *ierr = DMDAGetOwnershipRanges(*da, &gx, &gy, &gz); 395975b3b6SBarry Smith if (*ierr) return; 408865f1eaSKarl Rupp if (lx) { 418865f1eaSKarl Rupp for (i = 0; i < M; i++) lx[i] = gx[i]; 428865f1eaSKarl Rupp } 438865f1eaSKarl Rupp if (ly) { 448865f1eaSKarl Rupp for (i = 0; i < N; i++) ly[i] = gy[i]; 458865f1eaSKarl Rupp } 468865f1eaSKarl Rupp if (lz) { 478865f1eaSKarl Rupp for (i = 0; i < P; i++) lz[i] = gz[i]; 488865f1eaSKarl Rupp } 492219e2e3SSatish Balay } 502219e2e3SSatish Balay 5119caf8f3SSatish Balay PETSC_EXTERN void dmdagetrefinementfactor_(DM *da, PetscInt *lx, PetscInt *ly, PetscInt *lz, PetscErrorCode *ierr) 521fd49c25SBarry Smith { 531fd49c25SBarry Smith CHKFORTRANNULLINTEGER(lx); 541fd49c25SBarry Smith CHKFORTRANNULLINTEGER(ly); 551fd49c25SBarry Smith CHKFORTRANNULLINTEGER(lz); 561fd49c25SBarry Smith *ierr = DMDAGetRefinementFactor(*da, lx, ly, lz); 571fd49c25SBarry Smith } 58