1*6dd63270SBarry Smith #include <petsc/private/ftnimpl.h> 2af0996ceSBarry Smith #include <petsc/private/dmdaimpl.h> 32219e2e3SSatish Balay 42219e2e3SSatish Balay #if defined(PETSC_HAVE_FORTRAN_CAPS) 52219e2e3SSatish Balay #define dmdagetownershipranges_ DMDAGETOWNERSHIPRANGES 6ce78bad3SBarry Smith #define dmdarestoreownershipranges_ DMDARESTOREOWNERSHIPRANGES 72219e2e3SSatish Balay #define dmdagetneighbors_ DMDAGETNEIGHBORS 8ce78bad3SBarry Smith #define dmdarestoreneighbors_ DMDARESTORENEIGHBORS 92219e2e3SSatish Balay #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE) 102219e2e3SSatish Balay #define dmdagetownershipranges_ dmdagetownershipranges 11ce78bad3SBarry Smith #define dmdarestoreownershipranges_ dmdarestoreownershipranges 122219e2e3SSatish Balay #define dmdagetneighbors_ dmdagetneighbors 13ce78bad3SBarry Smith #define dmdarestoreneighbors_ dmdarestoreneighbors 142219e2e3SSatish Balay #endif 152219e2e3SSatish Balay 16ce78bad3SBarry Smith PETSC_EXTERN void dmdagetneighbors_(DM *da, F90Array1d *ptr, PetscErrorCode *ierr PETSC_F90_2PTR_PROTO(ptrd)) 172219e2e3SSatish Balay { 182219e2e3SSatish Balay const PetscMPIInt *r; 19c73cfb54SMatthew G. Knepley PetscInt n, dim; 202219e2e3SSatish Balay 215975b3b6SBarry Smith *ierr = DMDAGetNeighbors(*da, &r); 225975b3b6SBarry Smith if (*ierr) return; 235975b3b6SBarry Smith *ierr = DMGetDimension(*da, &dim); 245975b3b6SBarry Smith if (*ierr) return; 25c73cfb54SMatthew G. Knepley if (dim == 2) n = 9; 268865f1eaSKarl Rupp else n = 27; 27ce78bad3SBarry Smith *ierr = F90Array1dCreate((PetscInt *)r, MPI_INT, 1, n, ptr PETSC_F90_2PTR_PARAM(ptrd)); 282219e2e3SSatish Balay } 292219e2e3SSatish Balay 30ce78bad3SBarry Smith PETSC_EXTERN void dmdarestoreneighbors_(DM *da, F90Array1d *ptr, PetscErrorCode *ierr PETSC_F90_2PTR_PROTO(ptrd)) 31ce78bad3SBarry Smith { 32ce78bad3SBarry Smith *ierr = F90Array1dDestroy(ptr, MPI_INT PETSC_F90_2PTR_PARAM(ptrd)); 33ce78bad3SBarry Smith } 34ce78bad3SBarry Smith 35ce78bad3SBarry Smith PETSC_EXTERN void dmdagetownershipranges_(DM *da, F90Array1d *lx, F90Array1d *ly, F90Array1d *lz, PetscErrorCode *ierr PETSC_F90_2PTR_PROTO(lxd) PETSC_F90_2PTR_PROTO(lyd) PETSC_F90_2PTR_PROTO(lzd)) 362219e2e3SSatish Balay { 372219e2e3SSatish Balay const PetscInt *gx, *gy, *gz; 38ce78bad3SBarry Smith PetscInt M, N, P; 392219e2e3SSatish Balay 40dfef5ea7SSatish Balay *ierr = DMDAGetInfo(*da, NULL, NULL, NULL, NULL, &M, &N, &P, NULL, NULL, NULL, NULL, NULL, NULL); 415975b3b6SBarry Smith if (*ierr) return; 425975b3b6SBarry Smith *ierr = DMDAGetOwnershipRanges(*da, &gx, &gy, &gz); 435975b3b6SBarry Smith if (*ierr) return; 44ce78bad3SBarry Smith if ((void *)lx != PETSC_NULL_INTEGER_POINTER_Fortran) { 45ce78bad3SBarry Smith *ierr = F90Array1dCreate((PetscInt *)gx, MPIU_INT, 1, M, lx PETSC_F90_2PTR_PARAM(lxd)); 46ce78bad3SBarry Smith if (*ierr) return; 478865f1eaSKarl Rupp } 48ce78bad3SBarry Smith if ((void *)ly != PETSC_NULL_INTEGER_POINTER_Fortran) { 49ce78bad3SBarry Smith *ierr = F90Array1dCreate((PetscInt *)gy, MPIU_INT, 1, N, ly PETSC_F90_2PTR_PARAM(lyd)); 50ce78bad3SBarry Smith if (*ierr) return; 518865f1eaSKarl Rupp } 52ce78bad3SBarry Smith if ((void *)lz != PETSC_NULL_INTEGER_POINTER_Fortran) *ierr = F90Array1dCreate((PetscInt *)gz, MPIU_INT, 1, P, lz PETSC_F90_2PTR_PARAM(lzd)); 538865f1eaSKarl Rupp } 54ce78bad3SBarry Smith 55ce78bad3SBarry Smith PETSC_EXTERN void dmdarestoreownershipranges_(DM *da, F90Array1d *lx, F90Array1d *ly, F90Array1d *lz, PetscErrorCode *ierr PETSC_F90_2PTR_PROTO(lxd) PETSC_F90_2PTR_PROTO(lyd) PETSC_F90_2PTR_PROTO(lzd)) 56ce78bad3SBarry Smith { 57ce78bad3SBarry Smith if ((void *)lx != PETSC_NULL_INTEGER_POINTER_Fortran) { 58ce78bad3SBarry Smith *ierr = F90Array1dDestroy(lx, MPIU_INT PETSC_F90_2PTR_PARAM(lxd)); 59ce78bad3SBarry Smith if (*ierr) return; 60ce78bad3SBarry Smith } 61ce78bad3SBarry Smith if ((void *)ly != PETSC_NULL_INTEGER_POINTER_Fortran) { 62ce78bad3SBarry Smith *ierr = F90Array1dDestroy(ly, MPIU_INT PETSC_F90_2PTR_PARAM(lyd)); 63ce78bad3SBarry Smith if (*ierr) return; 64ce78bad3SBarry Smith } 65ce78bad3SBarry Smith if ((void *)lz != PETSC_NULL_INTEGER_POINTER_Fortran) *ierr = F90Array1dDestroy(lz, MPIU_INT PETSC_F90_2PTR_PARAM(lzd)); 662219e2e3SSatish Balay } 67