1af0996ceSBarry 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 15*19caf8f3SSatish Balay PETSC_EXTERN void 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; 24*19caf8f3SSatish Balay PETSC_EXTERN void 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 34*19caf8f3SSatish Balay PETSC_EXTERN void 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;} 39580bdb30SBarry Smith *ierr = PetscArraycpy(procs,sprocs,*size); if (*ierr) return; 40580bdb30SBarry Smith *ierr = PetscArraycpy(numprocs,snumprocs,*size); 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 } 47fe2efc57SMark 48*19caf8f3SSatish Balay PETSC_EXTERN void islocaltoglobalmappingviewfromoptions_(ISLocalToGlobalMapping *ao,PetscObject obj,char* type,PetscErrorCode *ierr,PETSC_FORTRAN_CHARLEN_T len) 49fe2efc57SMark { 50fe2efc57SMark char *t; 51fe2efc57SMark 52fe2efc57SMark FIXCHAR(type,len,t); 53fe2efc57SMark *ierr = ISLocalToGlobalMappingViewFromOptions(*ao,obj,t);if (*ierr) return; 54fe2efc57SMark FREECHAR(type,t); 55fe2efc57SMark } 56