xref: /petsc/src/vec/is/utils/ftn-custom/zisltogf.c (revision 19caf8f3c08b1f0ca9f5469bde385c134aa76c82)
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 
15*19caf8f3SSatish 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;
24*19caf8f3SSatish Balay PETSC_EXTERN void islocaltoglobalmpnggetinfosize_(ISLocalToGlobalMapping *mapping,PetscInt *size,PetscInt *maxnumprocs,PetscErrorCode *ierr)
25cf1aed2cSSatish Balay {
26cf1aed2cSSatish Balay   PetscInt i;
27cf1aed2cSSatish Balay   if (called) {*ierr = PETSC_ERR_ARG_WRONGSTATE; return;}
28cf1aed2cSSatish Balay   *ierr        = ISLocalToGlobalMappingGetInfo(*mapping,size,&sprocs,&snumprocs,&sindices); if (*ierr) return;
29cf1aed2cSSatish Balay   *maxnumprocs = 0;
30cf1aed2cSSatish Balay   for (i=0; i<*size; i++) *maxnumprocs = PetscMax(*maxnumprocs,snumprocs[i]);
31cf1aed2cSSatish Balay   called = PETSC_TRUE;
32cf1aed2cSSatish Balay }
33cf1aed2cSSatish Balay 
34*19caf8f3SSatish Balay PETSC_EXTERN void islocaltoglobalmappinggetinfo_(ISLocalToGlobalMapping *mapping,PetscInt *size,PetscInt *procs,PetscInt *numprocs,
35cf1aed2cSSatish Balay                                                   PetscInt *indices,PetscErrorCode *ierr)
36cf1aed2cSSatish Balay {
37cf1aed2cSSatish Balay   PetscInt i,j;
38cf1aed2cSSatish Balay   if (!called) {*ierr = PETSC_ERR_ARG_WRONGSTATE; return;}
39580bdb30SBarry Smith   *ierr = PetscArraycpy(procs,sprocs,*size); if (*ierr) return;
40580bdb30SBarry Smith   *ierr = PetscArraycpy(numprocs,snumprocs,*size); if (*ierr) return;
41cf1aed2cSSatish Balay   for (i=0; i<*size; i++) {
42cf1aed2cSSatish Balay     for (j=0; j<numprocs[i]; j++) indices[i + (*size)*j] = sindices[i][j];
43cf1aed2cSSatish Balay   }
44cf1aed2cSSatish Balay   *ierr  = ISLocalToGlobalMappingRestoreInfo(*mapping,size,&sprocs,&snumprocs,&sindices); if (*ierr) return;
45cf1aed2cSSatish Balay   called = PETSC_FALSE;
46cf1aed2cSSatish Balay }
47fe2efc57SMark 
48*19caf8f3SSatish Balay PETSC_EXTERN void islocaltoglobalmappingviewfromoptions_(ISLocalToGlobalMapping *ao,PetscObject obj,char* type,PetscErrorCode *ierr,PETSC_FORTRAN_CHARLEN_T len)
49fe2efc57SMark {
50fe2efc57SMark   char *t;
51fe2efc57SMark 
52fe2efc57SMark   FIXCHAR(type,len,t);
53fe2efc57SMark   *ierr = ISLocalToGlobalMappingViewFromOptions(*ao,obj,t);if (*ierr) return;
54fe2efc57SMark   FREECHAR(type,t);
55fe2efc57SMark }
56