1 #include <petsc/private/ftnimpl.h>
2 #include <petscis.h>
3 #include <petscviewer.h>
4
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
12
13 static PetscInt *sprocs, *snumprocs, **sindices;
14 static PetscBool called;
islocaltoglobalmpnggetinfosize_(ISLocalToGlobalMapping * mapping,PetscInt * size,PetscInt * maxnumprocs,PetscErrorCode * ierr)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 }
28
islocaltoglobalmappinggetinfo_(ISLocalToGlobalMapping * mapping,PetscInt * size,PetscInt * procs,PetscInt * numprocs,PetscInt * indices,PetscErrorCode * ierr)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 }
47