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