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 1519caf8f3SSatish 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; 2419caf8f3SSatish Balay PETSC_EXTERN void islocaltoglobalmpnggetinfosize_(ISLocalToGlobalMapping *mapping, PetscInt *size, PetscInt *maxnumprocs, PetscErrorCode *ierr) 25cf1aed2cSSatish Balay { 26cf1aed2cSSatish Balay PetscInt i; 27*5975b3b6SBarry Smith if (called) { 28*5975b3b6SBarry Smith *ierr = PETSC_ERR_ARG_WRONGSTATE; 29*5975b3b6SBarry Smith return; 30*5975b3b6SBarry Smith } 31*5975b3b6SBarry Smith *ierr = ISLocalToGlobalMappingGetInfo(*mapping, size, &sprocs, &snumprocs, &sindices); 32*5975b3b6SBarry Smith if (*ierr) return; 33cf1aed2cSSatish Balay *maxnumprocs = 0; 34cf1aed2cSSatish Balay for (i = 0; i < *size; i++) *maxnumprocs = PetscMax(*maxnumprocs, snumprocs[i]); 35cf1aed2cSSatish Balay called = PETSC_TRUE; 36cf1aed2cSSatish Balay } 37cf1aed2cSSatish Balay 38*5975b3b6SBarry Smith PETSC_EXTERN void islocaltoglobalmappinggetinfo_(ISLocalToGlobalMapping *mapping, PetscInt *size, PetscInt *procs, PetscInt *numprocs, PetscInt *indices, PetscErrorCode *ierr) 39cf1aed2cSSatish Balay { 40cf1aed2cSSatish Balay PetscInt i, j; 41*5975b3b6SBarry Smith if (!called) { 42*5975b3b6SBarry Smith *ierr = PETSC_ERR_ARG_WRONGSTATE; 43*5975b3b6SBarry Smith return; 44*5975b3b6SBarry Smith } 45*5975b3b6SBarry Smith *ierr = PetscArraycpy(procs, sprocs, *size); 46*5975b3b6SBarry Smith if (*ierr) return; 47*5975b3b6SBarry Smith *ierr = PetscArraycpy(numprocs, snumprocs, *size); 48*5975b3b6SBarry Smith if (*ierr) return; 49cf1aed2cSSatish Balay for (i = 0; i < *size; i++) { 50cf1aed2cSSatish Balay for (j = 0; j < numprocs[i]; j++) indices[i + (*size) * j] = sindices[i][j]; 51cf1aed2cSSatish Balay } 52*5975b3b6SBarry Smith *ierr = ISLocalToGlobalMappingRestoreInfo(*mapping, size, &sprocs, &snumprocs, &sindices); 53*5975b3b6SBarry Smith if (*ierr) return; 54cf1aed2cSSatish Balay called = PETSC_FALSE; 55cf1aed2cSSatish Balay } 56fe2efc57SMark 5719caf8f3SSatish Balay PETSC_EXTERN void islocaltoglobalmappingviewfromoptions_(ISLocalToGlobalMapping *ao, PetscObject obj, char *type, PetscErrorCode *ierr, PETSC_FORTRAN_CHARLEN_T len) 58fe2efc57SMark { 59fe2efc57SMark char *t; 60fe2efc57SMark 61fe2efc57SMark FIXCHAR(type, len, t); 62b14c0cbaSBlaise Bourdin CHKFORTRANNULLOBJECT(obj); 63*5975b3b6SBarry Smith *ierr = ISLocalToGlobalMappingViewFromOptions(*ao, obj, t); 64*5975b3b6SBarry Smith if (*ierr) return; 65fe2efc57SMark FREECHAR(type, t); 66fe2efc57SMark } 67