xref: /petsc/src/vec/is/utils/ftn-custom/zisltogf.c (revision cf1aed2ce99d23e50336629af3ca8cf096900abb)
1*cf1aed2cSSatish Balay #include <petsc-private/fortranimpl.h>
2*cf1aed2cSSatish Balay #include <petscis.h>
3*cf1aed2cSSatish Balay #include <petscviewer.h>
4*cf1aed2cSSatish Balay 
5*cf1aed2cSSatish Balay #if defined(PETSC_HAVE_FORTRAN_CAPS)
6*cf1aed2cSSatish Balay #define islocaltoglobalmappingview_       ISLOCALTOGLOBALMAPPINGVIEW
7*cf1aed2cSSatish Balay #define islocaltoglobalmpnggetinfosize_   ISLOCALTOGLOBALMPNGGETINFOSIZE
8*cf1aed2cSSatish Balay #define islocaltoglobalmappinggetinfo_    ISLOCALTOGLOBALMAPPINGGETINFO
9*cf1aed2cSSatish Balay #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE)
10*cf1aed2cSSatish Balay #define islocaltoglobalmappingview_       islocaltoglobalmappingview
11*cf1aed2cSSatish Balay #define islocaltoglobalmpnggetinfosize_   islocaltoglobalmpnggetinfosize
12*cf1aed2cSSatish Balay #define islocaltoglobalmappinggetinfo_    islocaltoglobalmappinggetinfo
13*cf1aed2cSSatish Balay #endif
14*cf1aed2cSSatish Balay 
15*cf1aed2cSSatish Balay PETSC_EXTERN void PETSC_STDCALL islocaltoglobalmappingview_(ISLocalToGlobalMapping *mapping,PetscViewer *viewer,PetscErrorCode *ierr)
16*cf1aed2cSSatish Balay {
17*cf1aed2cSSatish Balay   PetscViewer v;
18*cf1aed2cSSatish Balay   PetscPatchDefaultViewers_Fortran(viewer,v);
19*cf1aed2cSSatish Balay   *ierr = ISLocalToGlobalMappingView(*mapping,v);
20*cf1aed2cSSatish Balay }
21*cf1aed2cSSatish Balay 
22*cf1aed2cSSatish Balay static PetscInt  *sprocs, *snumprocs, **sindices;
23*cf1aed2cSSatish Balay static PetscBool called;
24*cf1aed2cSSatish Balay PETSC_EXTERN void PETSC_STDCALL islocaltoglobalmpnggetinfosize_(ISLocalToGlobalMapping *mapping,PetscInt *size,PetscInt *maxnumprocs,PetscErrorCode *ierr)
25*cf1aed2cSSatish Balay {
26*cf1aed2cSSatish Balay   PetscInt i;
27*cf1aed2cSSatish Balay   if (called) {*ierr = PETSC_ERR_ARG_WRONGSTATE; return;}
28*cf1aed2cSSatish Balay   *ierr        = ISLocalToGlobalMappingGetInfo(*mapping,size,&sprocs,&snumprocs,&sindices); if (*ierr) return;
29*cf1aed2cSSatish Balay   *maxnumprocs = 0;
30*cf1aed2cSSatish Balay   for (i=0; i<*size; i++) *maxnumprocs = PetscMax(*maxnumprocs,snumprocs[i]);
31*cf1aed2cSSatish Balay   called = PETSC_TRUE;
32*cf1aed2cSSatish Balay }
33*cf1aed2cSSatish Balay 
34*cf1aed2cSSatish Balay PETSC_EXTERN void PETSC_STDCALL islocaltoglobalmappinggetinfo_(ISLocalToGlobalMapping *mapping,PetscInt *size,PetscInt *procs,PetscInt *numprocs,
35*cf1aed2cSSatish Balay                                                   PetscInt *indices,PetscErrorCode *ierr)
36*cf1aed2cSSatish Balay {
37*cf1aed2cSSatish Balay   PetscInt i,j;
38*cf1aed2cSSatish Balay   if (!called) {*ierr = PETSC_ERR_ARG_WRONGSTATE; return;}
39*cf1aed2cSSatish Balay   *ierr = PetscMemcpy(procs,sprocs,*size*sizeof(PetscInt)); if (*ierr) return;
40*cf1aed2cSSatish Balay   *ierr = PetscMemcpy(numprocs,snumprocs,*size*sizeof(PetscInt)); if (*ierr) return;
41*cf1aed2cSSatish Balay   for (i=0; i<*size; i++) {
42*cf1aed2cSSatish Balay     for (j=0; j<numprocs[i]; j++) indices[i + (*size)*j] = sindices[i][j];
43*cf1aed2cSSatish Balay   }
44*cf1aed2cSSatish Balay   *ierr  = ISLocalToGlobalMappingRestoreInfo(*mapping,size,&sprocs,&snumprocs,&sindices); if (*ierr) return;
45*cf1aed2cSSatish Balay   called = PETSC_FALSE;
46*cf1aed2cSSatish Balay }
47