xref: /petsc/src/vec/is/utils/ftn-custom/zisltogf.c (revision b0dcfd164860a975c76f90dabf1036901aab1c4e)
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