1: #include <petsc/private/fortranimpl.h> 2: #include <petscpc.h> 4: #if defined(PETSC_HAVE_FORTRAN_CAPS) 5: #define pcmgsetlevels_ PCMGSETLEVELS 6: #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE) 7: #define pcmgsetlevels_ pcmgsetlevels 8: #endif 10: PETSC_EXTERN void pcmgsetlevels_(PC *pc, PetscInt *levels, MPI_Fint fcomms[], PetscErrorCode *ierr) 11: { 12: MPI_Comm *ccomms = NULL; 13: CHKFORTRANNULLMPICOMM(fcomms); 14: if (fcomms) { 15: *ierr = PetscMalloc1(*levels, &ccomms); 16: if (*ierr) return; 17: for (PetscInt i = 0; i < *levels; i++) { ccomms[i] = MPI_Comm_f2c(fcomms[i]); } 18: } 19: *ierr = PCMGSetLevels(*pc, *levels, ccomms); 20: if (*ierr) return; 21: if (fcomms) *ierr = PetscFree(ccomms); 22: }