xref: /petsc/src/vec/is/utils/ftn-custom/zisltogf.c (revision 5975b3b6e3931510e2a64a701673cbe1930c6f42)
1af0996ceSBarry Smith #include <petsc/private/fortranimpl.h>
2cf1aed2cSSatish Balay #include <petscis.h>
3cf1aed2cSSatish Balay #include <petscviewer.h>
4cf1aed2cSSatish Balay 
5cf1aed2cSSatish Balay #if defined(PETSC_HAVE_FORTRAN_CAPS)
6cf1aed2cSSatish Balay   #define islocaltoglobalmappingview_     ISLOCALTOGLOBALMAPPINGVIEW
7cf1aed2cSSatish Balay   #define islocaltoglobalmpnggetinfosize_ ISLOCALTOGLOBALMPNGGETINFOSIZE
8cf1aed2cSSatish Balay   #define islocaltoglobalmappinggetinfo_  ISLOCALTOGLOBALMAPPINGGETINFO
9cf1aed2cSSatish Balay #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE)
10cf1aed2cSSatish Balay   #define islocaltoglobalmappingview_     islocaltoglobalmappingview
11cf1aed2cSSatish Balay   #define islocaltoglobalmpnggetinfosize_ islocaltoglobalmpnggetinfosize
12cf1aed2cSSatish Balay   #define islocaltoglobalmappinggetinfo_  islocaltoglobalmappinggetinfo
13cf1aed2cSSatish Balay #endif
14cf1aed2cSSatish Balay 
1519caf8f3SSatish Balay PETSC_EXTERN void islocaltoglobalmappingview_(ISLocalToGlobalMapping *mapping, PetscViewer *viewer, PetscErrorCode *ierr)
16cf1aed2cSSatish Balay {
17cf1aed2cSSatish Balay   PetscViewer v;
18cf1aed2cSSatish Balay   PetscPatchDefaultViewers_Fortran(viewer, v);
19cf1aed2cSSatish Balay   *ierr = ISLocalToGlobalMappingView(*mapping, v);
20cf1aed2cSSatish Balay }
21cf1aed2cSSatish Balay 
22cf1aed2cSSatish Balay static PetscInt  *sprocs, *snumprocs, **sindices;
23cf1aed2cSSatish Balay static PetscBool  called;
2419caf8f3SSatish Balay PETSC_EXTERN void islocaltoglobalmpnggetinfosize_(ISLocalToGlobalMapping *mapping, PetscInt *size, PetscInt *maxnumprocs, PetscErrorCode *ierr)
25cf1aed2cSSatish Balay {
26cf1aed2cSSatish Balay   PetscInt i;
27*5975b3b6SBarry Smith   if (called) {
28*5975b3b6SBarry Smith     *ierr = PETSC_ERR_ARG_WRONGSTATE;
29*5975b3b6SBarry Smith     return;
30*5975b3b6SBarry Smith   }
31*5975b3b6SBarry Smith   *ierr = ISLocalToGlobalMappingGetInfo(*mapping, size, &sprocs, &snumprocs, &sindices);
32*5975b3b6SBarry Smith   if (*ierr) return;
33cf1aed2cSSatish Balay   *maxnumprocs = 0;
34cf1aed2cSSatish Balay   for (i = 0; i < *size; i++) *maxnumprocs = PetscMax(*maxnumprocs, snumprocs[i]);
35cf1aed2cSSatish Balay   called = PETSC_TRUE;
36cf1aed2cSSatish Balay }
37cf1aed2cSSatish Balay 
38*5975b3b6SBarry Smith PETSC_EXTERN void islocaltoglobalmappinggetinfo_(ISLocalToGlobalMapping *mapping, PetscInt *size, PetscInt *procs, PetscInt *numprocs, PetscInt *indices, PetscErrorCode *ierr)
39cf1aed2cSSatish Balay {
40cf1aed2cSSatish Balay   PetscInt i, j;
41*5975b3b6SBarry Smith   if (!called) {
42*5975b3b6SBarry Smith     *ierr = PETSC_ERR_ARG_WRONGSTATE;
43*5975b3b6SBarry Smith     return;
44*5975b3b6SBarry Smith   }
45*5975b3b6SBarry Smith   *ierr = PetscArraycpy(procs, sprocs, *size);
46*5975b3b6SBarry Smith   if (*ierr) return;
47*5975b3b6SBarry Smith   *ierr = PetscArraycpy(numprocs, snumprocs, *size);
48*5975b3b6SBarry Smith   if (*ierr) return;
49cf1aed2cSSatish Balay   for (i = 0; i < *size; i++) {
50cf1aed2cSSatish Balay     for (j = 0; j < numprocs[i]; j++) indices[i + (*size) * j] = sindices[i][j];
51cf1aed2cSSatish Balay   }
52*5975b3b6SBarry Smith   *ierr = ISLocalToGlobalMappingRestoreInfo(*mapping, size, &sprocs, &snumprocs, &sindices);
53*5975b3b6SBarry Smith   if (*ierr) return;
54cf1aed2cSSatish Balay   called = PETSC_FALSE;
55cf1aed2cSSatish Balay }
56fe2efc57SMark 
5719caf8f3SSatish Balay PETSC_EXTERN void islocaltoglobalmappingviewfromoptions_(ISLocalToGlobalMapping *ao, PetscObject obj, char *type, PetscErrorCode *ierr, PETSC_FORTRAN_CHARLEN_T len)
58fe2efc57SMark {
59fe2efc57SMark   char *t;
60fe2efc57SMark 
61fe2efc57SMark   FIXCHAR(type, len, t);
62b14c0cbaSBlaise Bourdin   CHKFORTRANNULLOBJECT(obj);
63*5975b3b6SBarry Smith   *ierr = ISLocalToGlobalMappingViewFromOptions(*ao, obj, t);
64*5975b3b6SBarry Smith   if (*ierr) return;
65fe2efc57SMark   FREECHAR(type, t);
66fe2efc57SMark }
67