1*6dd63270SBarry Smith #include <petsc/private/ftnimpl.h> 2cf1aed2cSSatish Balay #include <petscis.h> 3cf1aed2cSSatish Balay #include <petscviewer.h> 4cf1aed2cSSatish Balay 5cf1aed2cSSatish Balay #if defined(PETSC_HAVE_FORTRAN_CAPS) 6cf1aed2cSSatish Balay #define islocaltoglobalmpnggetinfosize_ ISLOCALTOGLOBALMPNGGETINFOSIZE 7cf1aed2cSSatish Balay #define islocaltoglobalmappinggetinfo_ ISLOCALTOGLOBALMAPPINGGETINFO 8cf1aed2cSSatish Balay #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE) 9cf1aed2cSSatish Balay #define islocaltoglobalmpnggetinfosize_ islocaltoglobalmpnggetinfosize 10cf1aed2cSSatish Balay #define islocaltoglobalmappinggetinfo_ islocaltoglobalmappinggetinfo 11cf1aed2cSSatish Balay #endif 12cf1aed2cSSatish Balay 13cf1aed2cSSatish Balay static PetscInt *sprocs, *snumprocs, **sindices; 14cf1aed2cSSatish Balay static PetscBool called; 1519caf8f3SSatish Balay PETSC_EXTERN void islocaltoglobalmpnggetinfosize_(ISLocalToGlobalMapping *mapping, PetscInt *size, PetscInt *maxnumprocs, PetscErrorCode *ierr) 16cf1aed2cSSatish Balay { 17cf1aed2cSSatish Balay PetscInt i; 185975b3b6SBarry Smith if (called) { 195975b3b6SBarry Smith *ierr = PETSC_ERR_ARG_WRONGSTATE; 205975b3b6SBarry Smith return; 215975b3b6SBarry Smith } 225975b3b6SBarry Smith *ierr = ISLocalToGlobalMappingGetInfo(*mapping, size, &sprocs, &snumprocs, &sindices); 235975b3b6SBarry Smith if (*ierr) return; 24cf1aed2cSSatish Balay *maxnumprocs = 0; 25cf1aed2cSSatish Balay for (i = 0; i < *size; i++) *maxnumprocs = PetscMax(*maxnumprocs, snumprocs[i]); 26cf1aed2cSSatish Balay called = PETSC_TRUE; 27cf1aed2cSSatish Balay } 28cf1aed2cSSatish Balay 295975b3b6SBarry Smith PETSC_EXTERN void islocaltoglobalmappinggetinfo_(ISLocalToGlobalMapping *mapping, PetscInt *size, PetscInt *procs, PetscInt *numprocs, PetscInt *indices, PetscErrorCode *ierr) 30cf1aed2cSSatish Balay { 31cf1aed2cSSatish Balay PetscInt i, j; 325975b3b6SBarry Smith if (!called) { 335975b3b6SBarry Smith *ierr = PETSC_ERR_ARG_WRONGSTATE; 345975b3b6SBarry Smith return; 355975b3b6SBarry Smith } 365975b3b6SBarry Smith *ierr = PetscArraycpy(procs, sprocs, *size); 375975b3b6SBarry Smith if (*ierr) return; 385975b3b6SBarry Smith *ierr = PetscArraycpy(numprocs, snumprocs, *size); 395975b3b6SBarry Smith if (*ierr) return; 40cf1aed2cSSatish Balay for (i = 0; i < *size; i++) { 41cf1aed2cSSatish Balay for (j = 0; j < numprocs[i]; j++) indices[i + (*size) * j] = sindices[i][j]; 42cf1aed2cSSatish Balay } 435975b3b6SBarry Smith *ierr = ISLocalToGlobalMappingRestoreInfo(*mapping, size, &sprocs, &snumprocs, &sindices); 445975b3b6SBarry Smith if (*ierr) return; 45cf1aed2cSSatish Balay called = PETSC_FALSE; 46cf1aed2cSSatish Balay } 47