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