xref: /petsc/src/vec/is/utils/ftn-custom/zisltogf.c (revision fe2efc57b7777594bce7568e90822861480cbdc8)
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 
15cf1aed2cSSatish Balay PETSC_EXTERN void PETSC_STDCALL 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;
24cf1aed2cSSatish Balay PETSC_EXTERN void PETSC_STDCALL 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 
34cf1aed2cSSatish Balay PETSC_EXTERN void PETSC_STDCALL 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 }
47*fe2efc57SMark 
48*fe2efc57SMark PETSC_EXTERN void PETSC_STDCALL islocaltoglobalmappingviewfromoptions_(ISLocalToGlobalMapping *ao,PetscObject obj,char* type PETSC_MIXED_LEN(len),PetscErrorCode *ierr PETSC_END_LEN(len))
49*fe2efc57SMark {
50*fe2efc57SMark   char *t;
51*fe2efc57SMark 
52*fe2efc57SMark   FIXCHAR(type,len,t);
53*fe2efc57SMark   *ierr = ISLocalToGlobalMappingViewFromOptions(*ao,obj,t);if (*ierr) return;
54*fe2efc57SMark   FREECHAR(type,t);
55*fe2efc57SMark }
56