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;
islocaltoglobalmpnggetinfosize_(ISLocalToGlobalMapping * mapping,PetscInt * size,PetscInt * maxnumprocs,PetscErrorCode * ierr)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
islocaltoglobalmappinggetinfo_(ISLocalToGlobalMapping * mapping,PetscInt * size,PetscInt * procs,PetscInt * numprocs,PetscInt * indices,PetscErrorCode * ierr)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