xref: /petsc/src/ksp/pc/impls/mg/ftn-custom/zmgf.c (revision 5975b3b6e3931510e2a64a701673cbe1930c6f42)
1af0996ceSBarry Smith #include <petsc/private/fortranimpl.h>
2c6db04a5SJed Brown #include <petscpc.h>
3e54e4138SSatish Balay 
4e54e4138SSatish Balay #if defined(PETSC_HAVE_FORTRAN_CAPS)
5e54e4138SSatish Balay   #define pcmgsetlevels_ PCMGSETLEVELS
6e54e4138SSatish Balay #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE)
7e54e4138SSatish Balay   #define pcmgsetlevels_ pcmgsetlevels
8e54e4138SSatish Balay #endif
9e54e4138SSatish Balay 
1005552d4bSJunchao Zhang PETSC_EXTERN void pcmgsetlevels_(PC *pc, PetscInt *levels, MPI_Fint fcomms[], PetscErrorCode *ierr)
11e54e4138SSatish Balay {
1205552d4bSJunchao Zhang   MPI_Comm *ccomms = NULL;
1305552d4bSJunchao Zhang   CHKFORTRANNULLMPICOMM(fcomms);
1405552d4bSJunchao Zhang   if (fcomms) {
15*5975b3b6SBarry Smith     *ierr = PetscMalloc1(*levels, &ccomms);
16*5975b3b6SBarry Smith     if (*ierr) return;
17*5975b3b6SBarry Smith     for (PetscInt i = 0; i < *levels; i++) { ccomms[i] = MPI_Comm_f2c(fcomms[i]); }
1805552d4bSJunchao Zhang   }
19*5975b3b6SBarry Smith   *ierr = PCMGSetLevels(*pc, *levels, ccomms);
20*5975b3b6SBarry Smith   if (*ierr) return;
2105552d4bSJunchao Zhang   if (fcomms) *ierr = PetscFree(ccomms);
22e54e4138SSatish Balay }
23