1*af0996ceSBarry Smith #include <petsc/private/fortranimpl.h> 2cf1aed2cSSatish Balay #include <petscis.h> 3cf1aed2cSSatish Balay #include <petscviewer.h> 4cf1aed2cSSatish Balay 5cf1aed2cSSatish Balay #if defined(PETSC_HAVE_FORTRAN_CAPS) 6cf1aed2cSSatish Balay #define islocaltoglobalmappingview_ ISLOCALTOGLOBALMAPPINGVIEW 7cf1aed2cSSatish Balay #define islocaltoglobalmpnggetinfosize_ ISLOCALTOGLOBALMPNGGETINFOSIZE 8cf1aed2cSSatish Balay #define islocaltoglobalmappinggetinfo_ ISLOCALTOGLOBALMAPPINGGETINFO 9cf1aed2cSSatish Balay #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE) 10cf1aed2cSSatish Balay #define islocaltoglobalmappingview_ islocaltoglobalmappingview 11cf1aed2cSSatish Balay #define islocaltoglobalmpnggetinfosize_ islocaltoglobalmpnggetinfosize 12cf1aed2cSSatish Balay #define islocaltoglobalmappinggetinfo_ islocaltoglobalmappinggetinfo 13cf1aed2cSSatish Balay #endif 14cf1aed2cSSatish Balay 15cf1aed2cSSatish Balay PETSC_EXTERN void PETSC_STDCALL islocaltoglobalmappingview_(ISLocalToGlobalMapping *mapping,PetscViewer *viewer,PetscErrorCode *ierr) 16cf1aed2cSSatish Balay { 17cf1aed2cSSatish Balay PetscViewer v; 18cf1aed2cSSatish Balay PetscPatchDefaultViewers_Fortran(viewer,v); 19cf1aed2cSSatish Balay *ierr = ISLocalToGlobalMappingView(*mapping,v); 20cf1aed2cSSatish Balay } 21cf1aed2cSSatish Balay 22cf1aed2cSSatish Balay static PetscInt *sprocs, *snumprocs, **sindices; 23cf1aed2cSSatish Balay static PetscBool called; 24cf1aed2cSSatish Balay PETSC_EXTERN void PETSC_STDCALL islocaltoglobalmpnggetinfosize_(ISLocalToGlobalMapping *mapping,PetscInt *size,PetscInt *maxnumprocs,PetscErrorCode *ierr) 25cf1aed2cSSatish Balay { 26cf1aed2cSSatish Balay PetscInt i; 27cf1aed2cSSatish Balay if (called) {*ierr = PETSC_ERR_ARG_WRONGSTATE; return;} 28cf1aed2cSSatish Balay *ierr = ISLocalToGlobalMappingGetInfo(*mapping,size,&sprocs,&snumprocs,&sindices); if (*ierr) return; 29cf1aed2cSSatish Balay *maxnumprocs = 0; 30cf1aed2cSSatish Balay for (i=0; i<*size; i++) *maxnumprocs = PetscMax(*maxnumprocs,snumprocs[i]); 31cf1aed2cSSatish Balay called = PETSC_TRUE; 32cf1aed2cSSatish Balay } 33cf1aed2cSSatish Balay 34cf1aed2cSSatish Balay PETSC_EXTERN void PETSC_STDCALL islocaltoglobalmappinggetinfo_(ISLocalToGlobalMapping *mapping,PetscInt *size,PetscInt *procs,PetscInt *numprocs, 35cf1aed2cSSatish Balay PetscInt *indices,PetscErrorCode *ierr) 36cf1aed2cSSatish Balay { 37cf1aed2cSSatish Balay PetscInt i,j; 38cf1aed2cSSatish Balay if (!called) {*ierr = PETSC_ERR_ARG_WRONGSTATE; return;} 39cf1aed2cSSatish Balay *ierr = PetscMemcpy(procs,sprocs,*size*sizeof(PetscInt)); if (*ierr) return; 40cf1aed2cSSatish Balay *ierr = PetscMemcpy(numprocs,snumprocs,*size*sizeof(PetscInt)); if (*ierr) return; 41cf1aed2cSSatish Balay for (i=0; i<*size; i++) { 42cf1aed2cSSatish Balay for (j=0; j<numprocs[i]; j++) indices[i + (*size)*j] = sindices[i][j]; 43cf1aed2cSSatish Balay } 44cf1aed2cSSatish Balay *ierr = ISLocalToGlobalMappingRestoreInfo(*mapping,size,&sprocs,&snumprocs,&sindices); if (*ierr) return; 45cf1aed2cSSatish Balay called = PETSC_FALSE; 46cf1aed2cSSatish Balay } 47