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