xref: /petsc/src/sys/objects/ftn-custom/zoptionsf.c (revision c0eeb27037e02b5ecab818014fd1729a0d2c1164)
19306f9a3SSatish Balay /*
29306f9a3SSatish Balay   This file contains Fortran stubs for Options routines.
39306f9a3SSatish Balay   These are not generated automatically since they require passing strings
49306f9a3SSatish Balay   between Fortran and C.
59306f9a3SSatish Balay */
69306f9a3SSatish Balay 
7af0996ceSBarry Smith #include <petsc/private/fortranimpl.h>
8665c2dedSJed Brown #include <petscviewer.h>
99306f9a3SSatish Balay 
10519f805aSKarl Rupp #if defined(PETSC_HAVE_FORTRAN_CAPS)
114bb2516aSBarry Smith   #define petscoptionsbegin_               PETSCOPTIONSBEGIN
124bb2516aSBarry Smith   #define petscoptionsend_                 PETSCOPTIONSEND
134bb2516aSBarry Smith   #define petscoptionsbool_                PETSCOPTIONSBOOL
144bb2516aSBarry Smith   #define petscoptionsboolarray_           PETSCOPTIONSBOOLARRAY
154bb2516aSBarry Smith   #define petscoptionsenumprivate_         PETSCOPTIONSENUMPRIVATE
164bb2516aSBarry Smith   #define petscoptionsint_                 PETSCOPTIONSINT
174bb2516aSBarry Smith   #define petscoptionsintarray_            PETSCOPTIONSINTARRAY
184bb2516aSBarry Smith   #define petscoptionsreal_                PETSCOPTIONSREAL
194bb2516aSBarry Smith   #define petscoptionsrealarray_           PETSCOPTIONSREALARRAY
204bb2516aSBarry Smith   #define petscoptionsscalar_              PETSCOPTIONSSCALAR
214bb2516aSBarry Smith   #define petscoptionsscalararray_         PETSCOPTIONSSCALARARRAY
22*c0eeb270SSatish Balay   #define petscoptionsstring_              PETSCOPTIONSSTRING
23a530d236SBarry Smith   #define petscsubcommview_                PETSCSUBCOMMVIEW
24a530d236SBarry Smith   #define petscsubcommgetparent_           PETSCSUBCOMMGETPARENT
25a530d236SBarry Smith   #define petscsubcommgetcontiguousparent_ PETSCSUBCOMMGETCONTIGUOUSPARENT
26a530d236SBarry Smith   #define petscsubcommgetchild_            PETSCSUBCOMMGETCHILD
27455a3cf9SBarry Smith   #define petscoptionsallused_             PETSCOPTIONSALLUSED
2847340559SBarry Smith   #define petscoptionsgetenumprivate_      PETSCOPTIONSGETENUMPRIVATE
2908f86b60SJed Brown   #define petscoptionsgetbool_             PETSCOPTIONSGETBOOL
30b0c0aa2bSBlaise Bourdin   #define petscoptionsgetboolarray_        PETSCOPTIONSGETBOOLARRAY
319306f9a3SSatish Balay   #define petscoptionsgetintarray_         PETSCOPTIONSGETINTARRAY
329306f9a3SSatish Balay   #define petscoptionssetvalue_            PETSCOPTIONSSETVALUE
339306f9a3SSatish Balay   #define petscoptionsclearvalue_          PETSCOPTIONSCLEARVALUE
349306f9a3SSatish Balay   #define petscoptionshasname_             PETSCOPTIONSHASNAME
359306f9a3SSatish Balay   #define petscoptionsgetint_              PETSCOPTIONSGETINT
369306f9a3SSatish Balay   #define petscoptionsgetreal_             PETSCOPTIONSGETREAL
377a7a6802SBarry Smith   #define petscoptionsgetscalar_           PETSCOPTIONSGETSCALAR
38b0c0aa2bSBlaise Bourdin   #define petscoptionsgetscalararray_      PETSCOPTIONSGETSCALARARRAY
399306f9a3SSatish Balay   #define petscoptionsgetrealarray_        PETSCOPTIONSGETREALARRAY
409306f9a3SSatish Balay   #define petscoptionsgetstring_           PETSCOPTIONSGETSTRING
419306f9a3SSatish Balay   #define petscgetprogramname              PETSCGETPROGRAMNAME
429306f9a3SSatish Balay   #define petscoptionsinsertfile_          PETSCOPTIONSINSERTFILE
43a542b6e8SBarry Smith   #define petscoptionsclear_               PETSCOPTIONSCLEAR
44ab66e762SBarry Smith   #define petscoptionsinsertstring_        PETSCOPTIONSINSERTSTRING
453a15af8cSBlaise Bourdin   #define petscoptionsview_                PETSCOPTIONSVIEW
46ac9b46efSSatish Balay   #define petscoptionsleft_                PETSCOPTIONSLEFT
47a2865142SMatthew G. Knepley   #define petscobjectviewfromoptions_      PETSCOBJECTVIEWFROMOPTIONS
489306f9a3SSatish Balay #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE)
494bb2516aSBarry Smith   #define petscoptionsbegin_               petscoptionsbegin
504bb2516aSBarry Smith   #define petscoptionsend_                 petscoptionsend
514bb2516aSBarry Smith   #define petscoptionsbool_                petscoptionsbool
524bb2516aSBarry Smith   #define petscoptionsboolarray_           petscoptionsboolarray
534bb2516aSBarry Smith   #define petscoptionsenumprivate_         petscoptionsenumprivate_
544bb2516aSBarry Smith   #define petscoptionsint_                 petscoptionsint
554bb2516aSBarry Smith   #define petscoptionsintarray_            petscoptionsintarray
564bb2516aSBarry Smith   #define petscoptionsreal_                petscoptionsreal
574bb2516aSBarry Smith   #define petscoptionsrealarray_           petscoptionsrealarray
584bb2516aSBarry Smith   #define petscoptionsscalar_              petscoptionsscalar
594bb2516aSBarry Smith   #define petscoptionsscalararray_         petscoptionsscalararray
604bb2516aSBarry Smith   #define petscoptionsstring_              petscoptionsstring
61a530d236SBarry Smith   #define petscsubcommview_                petscsubcommview
62a530d236SBarry Smith   #define petscsubcommgetparent_           petscsubcommgetparent
63a530d236SBarry Smith   #define petscsubcommgetcontiguousparent_ petscsubcommgetcontiguousparent
64a530d236SBarry Smith   #define petscsubcommgetchild_            petscsubcommgetchild
65455a3cf9SBarry Smith   #define petscoptionsallused_             petscoptionsallused
6647340559SBarry Smith   #define petscoptionsgetenumprivate_      petscoptionsgetenumprivate
6708f86b60SJed Brown   #define petscoptionsgetbool_             petscoptionsgetbool
68b0c0aa2bSBlaise Bourdin   #define petscoptionsgetboolarray_        petscoptionsgetboolarray
699306f9a3SSatish Balay   #define petscoptionssetvalue_            petscoptionssetvalue
709306f9a3SSatish Balay   #define petscoptionsclearvalue_          petscoptionsclearvalue
719306f9a3SSatish Balay   #define petscoptionshasname_             petscoptionshasname
729306f9a3SSatish Balay   #define petscoptionsgetint_              petscoptionsgetint
739306f9a3SSatish Balay   #define petscoptionsgetreal_             petscoptionsgetreal
747a7a6802SBarry Smith   #define petscoptionsgetscalar_           petscoptionsgetscalar
75b0c0aa2bSBlaise Bourdin   #define petscoptionsgetscalararray_      petscoptionsgetscalararray
769306f9a3SSatish Balay   #define petscoptionsgetrealarray_        petscoptionsgetrealarray
779306f9a3SSatish Balay   #define petscoptionsgetstring_           petscoptionsgetstring
789306f9a3SSatish Balay   #define petscoptionsgetintarray_         petscoptionsgetintarray
799306f9a3SSatish Balay   #define petscgetprogramname_             petscgetprogramname
809306f9a3SSatish Balay   #define petscoptionsinsertfile_          petscoptionsinsertfile
81a542b6e8SBarry Smith   #define petscoptionsclear_               petscoptionsclear
82ab66e762SBarry Smith   #define petscoptionsinsertstring_        petscoptionsinsertstring
833a15af8cSBlaise Bourdin   #define petscoptionsview_                petscoptionsview
84ac9b46efSSatish Balay   #define petscoptionsleft_                petscoptionsleft
85a2865142SMatthew G. Knepley   #define petscobjectviewfromoptions_      petscobjectviewfromoptions
869306f9a3SSatish Balay #endif
879306f9a3SSatish Balay 
884bb2516aSBarry Smith static PetscOptionItems PetscOptionsObjectBase, *PetscOptionsObject = NULL;
894bb2516aSBarry Smith 
904bb2516aSBarry Smith PETSC_EXTERN void petscoptionsbegin_(MPI_Fint *fcomm, char *prefix, char *mess, char *sec, PetscErrorCode *ierr, PETSC_FORTRAN_CHARLEN_T lenprefix, PETSC_FORTRAN_CHARLEN_T lenmess, PETSC_FORTRAN_CHARLEN_T lensec)
914bb2516aSBarry Smith {
924bb2516aSBarry Smith   MPI_Comm comm = MPI_Comm_f2c(*fcomm);
934bb2516aSBarry Smith   char    *cprefix, *cmess, *csec;
944bb2516aSBarry Smith 
954bb2516aSBarry Smith   FIXCHAR(prefix, lenprefix, cprefix);
964bb2516aSBarry Smith   FIXCHAR(mess, lenmess, cmess);
974bb2516aSBarry Smith   FIXCHAR(sec, lensec, csec);
984bb2516aSBarry Smith   if (PetscOptionsObject) {
994bb2516aSBarry Smith     *ierr = PETSC_ERR_ARG_WRONGSTATE;
1004bb2516aSBarry Smith     return;
1014bb2516aSBarry Smith   }
1024bb2516aSBarry Smith   PetscOptionsObject = &PetscOptionsObjectBase;
1034bb2516aSBarry Smith   *ierr              = PetscMemzero(PetscOptionsObject, sizeof(*PetscOptionsObject));
1044bb2516aSBarry Smith   if (*ierr) return;
1054bb2516aSBarry Smith   PetscOptionsObject->count = 1;
1064bb2516aSBarry Smith   *ierr                     = PetscOptionsBegin_Private(PetscOptionsObject, comm, cprefix, cmess, csec);
1074bb2516aSBarry Smith   if (*ierr) return;
1084bb2516aSBarry Smith   FREECHAR(prefix, cprefix);
1094bb2516aSBarry Smith   FREECHAR(mess, cmess);
1104bb2516aSBarry Smith   FREECHAR(sec, csec);
1114bb2516aSBarry Smith }
1124bb2516aSBarry Smith 
1134bb2516aSBarry Smith PETSC_EXTERN void petscoptionsend_(PetscErrorCode *ierr)
1144bb2516aSBarry Smith {
1154bb2516aSBarry Smith   if (!PetscOptionsObject) {
1164bb2516aSBarry Smith     *ierr = PETSC_ERR_ARG_WRONGSTATE;
1174bb2516aSBarry Smith     return;
1184bb2516aSBarry Smith   }
1194bb2516aSBarry Smith   PetscOptionsObject->count = 1;
1204bb2516aSBarry Smith   *ierr                     = PetscOptionsEnd_Private(PetscOptionsObject);
1214bb2516aSBarry Smith   PetscOptionsObject        = NULL;
1224bb2516aSBarry Smith }
1234bb2516aSBarry Smith 
1244bb2516aSBarry Smith PETSC_EXTERN void petscoptionsbool_(char *opt, char *text, char *man, PetscBool *currentvalue, PetscBool *value, PetscBool *set, PetscErrorCode *ierr, PETSC_FORTRAN_CHARLEN_T lenopt, PETSC_FORTRAN_CHARLEN_T lentext, PETSC_FORTRAN_CHARLEN_T lenman)
1254bb2516aSBarry Smith {
1264bb2516aSBarry Smith   char *copt, *ctext, *cman;
1274bb2516aSBarry Smith 
1284bb2516aSBarry Smith   FIXCHAR(opt, lenopt, copt);
1294bb2516aSBarry Smith   FIXCHAR(text, lentext, ctext);
1304bb2516aSBarry Smith   FIXCHAR(man, lenman, cman);
1314bb2516aSBarry Smith   if (!PetscOptionsObject) {
1324bb2516aSBarry Smith     *ierr = PETSC_ERR_ARG_WRONGSTATE;
1334bb2516aSBarry Smith     return;
1344bb2516aSBarry Smith   }
1354bb2516aSBarry Smith   PetscOptionsObject->count = 1;
1364bb2516aSBarry Smith   *ierr                     = PetscOptionsBool_Private(PetscOptionsObject, copt, ctext, cman, *currentvalue, value, set);
1374bb2516aSBarry Smith   if (*ierr) return;
1384bb2516aSBarry Smith   FREECHAR(opt, copt);
1394bb2516aSBarry Smith   FREECHAR(text, ctext);
1404bb2516aSBarry Smith   FREECHAR(man, cman);
1414bb2516aSBarry Smith }
1424bb2516aSBarry Smith 
1434bb2516aSBarry Smith PETSC_EXTERN void petscoptionsboolarray_(char *opt, char *text, char *man, PetscBool *dvalue, PetscInt *nmax, PetscBool *flg, PetscErrorCode *ierr, PETSC_FORTRAN_CHARLEN_T lenopt, PETSC_FORTRAN_CHARLEN_T lentext, PETSC_FORTRAN_CHARLEN_T lenman)
1444bb2516aSBarry Smith {
1454bb2516aSBarry Smith   char     *copt, *ctext, *cman;
1464bb2516aSBarry Smith   PetscBool flag;
1474bb2516aSBarry Smith 
1484bb2516aSBarry Smith   FIXCHAR(opt, lenopt, copt);
1494bb2516aSBarry Smith   FIXCHAR(text, lentext, ctext);
1504bb2516aSBarry Smith   FIXCHAR(man, lenman, cman);
1514bb2516aSBarry Smith   if (!PetscOptionsObject) {
1524bb2516aSBarry Smith     *ierr = PETSC_ERR_ARG_WRONGSTATE;
1534bb2516aSBarry Smith     return;
1544bb2516aSBarry Smith   }
1554bb2516aSBarry Smith   PetscOptionsObject->count = 1;
1564bb2516aSBarry Smith   *ierr                     = PetscOptionsBoolArray_Private(PetscOptionsObject, copt, ctext, cman, dvalue, nmax, &flag);
1574bb2516aSBarry Smith   if (*ierr) return;
1584bb2516aSBarry Smith   if (!FORTRANNULLBOOL(flg)) *flg = flag;
1594bb2516aSBarry Smith   FREECHAR(opt, copt);
1604bb2516aSBarry Smith   FREECHAR(text, ctext);
1614bb2516aSBarry Smith   FREECHAR(man, cman);
1624bb2516aSBarry Smith }
1634bb2516aSBarry Smith 
1644bb2516aSBarry Smith PETSC_EXTERN void petscoptionsenumprivate_(char *opt, char *text, char *man, const char *const *list, PetscEnum *currentvalue, PetscEnum *ivalue, PetscBool *flg, PetscErrorCode *ierr, PETSC_FORTRAN_CHARLEN_T lenopt, PETSC_FORTRAN_CHARLEN_T lentext, PETSC_FORTRAN_CHARLEN_T lenman)
1654bb2516aSBarry Smith {
1664bb2516aSBarry Smith   char     *copt, *ctext, *cman;
1674bb2516aSBarry Smith   PetscBool flag;
1684bb2516aSBarry Smith 
1694bb2516aSBarry Smith   FIXCHAR(opt, lenopt, copt);
1704bb2516aSBarry Smith   FIXCHAR(text, lentext, ctext);
1714bb2516aSBarry Smith   FIXCHAR(man, lenman, cman);
1724bb2516aSBarry Smith   if (!PetscOptionsObject) {
1734bb2516aSBarry Smith     *ierr = PETSC_ERR_ARG_WRONGSTATE;
1744bb2516aSBarry Smith     return;
1754bb2516aSBarry Smith   }
1764bb2516aSBarry Smith   PetscOptionsObject->count = 1;
1774bb2516aSBarry Smith   *ierr                     = PetscOptionsEnum_Private(PetscOptionsObject, copt, ctext, cman, list, *currentvalue, ivalue, &flag);
1784bb2516aSBarry Smith   if (*ierr) return;
1794bb2516aSBarry Smith   if (!FORTRANNULLBOOL(flg)) *flg = flag;
1804bb2516aSBarry Smith   FREECHAR(opt, copt);
1814bb2516aSBarry Smith   FREECHAR(text, ctext);
1824bb2516aSBarry Smith   FREECHAR(man, cman);
1834bb2516aSBarry Smith }
1844bb2516aSBarry Smith 
1854bb2516aSBarry Smith PETSC_EXTERN void petscoptionsint_(char *opt, char *text, char *man, PetscInt *currentvalue, PetscInt *value, PetscBool *set, PetscErrorCode *ierr, PETSC_FORTRAN_CHARLEN_T lenopt, PETSC_FORTRAN_CHARLEN_T lentext, PETSC_FORTRAN_CHARLEN_T lenman)
1864bb2516aSBarry Smith {
1874bb2516aSBarry Smith   char *copt, *ctext, *cman;
1884bb2516aSBarry Smith 
1894bb2516aSBarry Smith   FIXCHAR(opt, lenopt, copt);
1904bb2516aSBarry Smith   FIXCHAR(text, lentext, ctext);
1914bb2516aSBarry Smith   FIXCHAR(man, lenman, cman);
1924bb2516aSBarry Smith   if (!PetscOptionsObject) {
1934bb2516aSBarry Smith     *ierr = PETSC_ERR_ARG_WRONGSTATE;
1944bb2516aSBarry Smith     return;
1954bb2516aSBarry Smith   }
1964bb2516aSBarry Smith   PetscOptionsObject->count = 1;
1974bb2516aSBarry Smith   *ierr                     = PetscOptionsInt_Private(PetscOptionsObject, copt, ctext, cman, *currentvalue, value, set, PETSC_MIN_INT, PETSC_MAX_INT);
1984bb2516aSBarry Smith   if (*ierr) return;
1994bb2516aSBarry Smith   FREECHAR(opt, copt);
2004bb2516aSBarry Smith   FREECHAR(text, ctext);
2014bb2516aSBarry Smith   FREECHAR(man, cman);
2024bb2516aSBarry Smith }
2034bb2516aSBarry Smith 
2044bb2516aSBarry Smith PETSC_EXTERN void petscoptionsintarray_(char *opt, char *text, char *man, PetscInt *currentvalue, PetscInt *n, PetscBool *set, PetscErrorCode *ierr, PETSC_FORTRAN_CHARLEN_T lenopt, PETSC_FORTRAN_CHARLEN_T lentext, PETSC_FORTRAN_CHARLEN_T lenman)
2054bb2516aSBarry Smith {
2064bb2516aSBarry Smith   char *copt, *ctext, *cman;
2074bb2516aSBarry Smith 
2084bb2516aSBarry Smith   FIXCHAR(opt, lenopt, copt);
2094bb2516aSBarry Smith   FIXCHAR(text, lentext, ctext);
2104bb2516aSBarry Smith   FIXCHAR(man, lenman, cman);
2114bb2516aSBarry Smith   if (!PetscOptionsObject) {
2124bb2516aSBarry Smith     *ierr = PETSC_ERR_ARG_WRONGSTATE;
2134bb2516aSBarry Smith     return;
2144bb2516aSBarry Smith   }
2154bb2516aSBarry Smith   PetscOptionsObject->count = 1;
2164bb2516aSBarry Smith   *ierr                     = PetscOptionsIntArray_Private(PetscOptionsObject, copt, ctext, cman, currentvalue, n, set);
2174bb2516aSBarry Smith   if (*ierr) return;
2184bb2516aSBarry Smith   FREECHAR(opt, copt);
2194bb2516aSBarry Smith   FREECHAR(text, ctext);
2204bb2516aSBarry Smith   FREECHAR(man, cman);
2214bb2516aSBarry Smith }
2224bb2516aSBarry Smith 
2234bb2516aSBarry Smith PETSC_EXTERN void petscoptionsreal_(char *opt, char *text, char *man, PetscReal *currentvalue, PetscReal *value, PetscBool *set, PetscErrorCode *ierr, PETSC_FORTRAN_CHARLEN_T lenopt, PETSC_FORTRAN_CHARLEN_T lentext, PETSC_FORTRAN_CHARLEN_T lenman)
2244bb2516aSBarry Smith {
2254bb2516aSBarry Smith   char *copt, *ctext, *cman;
2264bb2516aSBarry Smith 
2274bb2516aSBarry Smith   FIXCHAR(opt, lenopt, copt);
2284bb2516aSBarry Smith   FIXCHAR(text, lentext, ctext);
2294bb2516aSBarry Smith   FIXCHAR(man, lenman, cman);
2304bb2516aSBarry Smith   if (!PetscOptionsObject) {
2314bb2516aSBarry Smith     *ierr = PETSC_ERR_ARG_WRONGSTATE;
2324bb2516aSBarry Smith     return;
2334bb2516aSBarry Smith   }
2344bb2516aSBarry Smith   PetscOptionsObject->count = 1;
23552ce0ab5SPierre Jolivet   *ierr                     = PetscOptionsReal_Private(PetscOptionsObject, copt, ctext, cman, *currentvalue, value, set, PETSC_MIN_REAL, PETSC_MAX_REAL);
2364bb2516aSBarry Smith   if (*ierr) return;
2374bb2516aSBarry Smith   FREECHAR(opt, copt);
2384bb2516aSBarry Smith   FREECHAR(text, ctext);
2394bb2516aSBarry Smith   FREECHAR(man, cman);
2404bb2516aSBarry Smith }
2414bb2516aSBarry Smith 
2424bb2516aSBarry Smith PETSC_EXTERN void petscoptionsrealarray_(char *opt, char *text, char *man, PetscReal *currentvalue, PetscInt *n, PetscBool *set, PetscErrorCode *ierr, PETSC_FORTRAN_CHARLEN_T lenopt, PETSC_FORTRAN_CHARLEN_T lentext, PETSC_FORTRAN_CHARLEN_T lenman)
2434bb2516aSBarry Smith {
2444bb2516aSBarry Smith   char *copt, *ctext, *cman;
2454bb2516aSBarry Smith 
2464bb2516aSBarry Smith   FIXCHAR(opt, lenopt, copt);
2474bb2516aSBarry Smith   FIXCHAR(text, lentext, ctext);
2484bb2516aSBarry Smith   FIXCHAR(man, lenman, cman);
2494bb2516aSBarry Smith   if (!PetscOptionsObject) {
2504bb2516aSBarry Smith     *ierr = PETSC_ERR_ARG_WRONGSTATE;
2514bb2516aSBarry Smith     return;
2524bb2516aSBarry Smith   }
2534bb2516aSBarry Smith   PetscOptionsObject->count = 1;
2544bb2516aSBarry Smith   *ierr                     = PetscOptionsRealArray_Private(PetscOptionsObject, copt, ctext, cman, currentvalue, n, set);
2554bb2516aSBarry Smith   if (*ierr) return;
2564bb2516aSBarry Smith   FREECHAR(opt, copt);
2574bb2516aSBarry Smith   FREECHAR(text, ctext);
2584bb2516aSBarry Smith   FREECHAR(man, cman);
2594bb2516aSBarry Smith }
2604bb2516aSBarry Smith 
2614bb2516aSBarry Smith PETSC_EXTERN void petscoptionsscalar_(char *opt, char *text, char *man, PetscScalar *currentvalue, PetscScalar *value, PetscBool *set, PetscErrorCode *ierr, PETSC_FORTRAN_CHARLEN_T lenopt, PETSC_FORTRAN_CHARLEN_T lentext, PETSC_FORTRAN_CHARLEN_T lenman)
2624bb2516aSBarry Smith {
2634bb2516aSBarry Smith   char *copt, *ctext, *cman;
2644bb2516aSBarry Smith 
2654bb2516aSBarry Smith   FIXCHAR(opt, lenopt, copt);
2664bb2516aSBarry Smith   FIXCHAR(text, lentext, ctext);
2674bb2516aSBarry Smith   FIXCHAR(man, lenman, cman);
2684bb2516aSBarry Smith   if (!PetscOptionsObject) {
2694bb2516aSBarry Smith     *ierr = PETSC_ERR_ARG_WRONGSTATE;
2704bb2516aSBarry Smith     return;
2714bb2516aSBarry Smith   }
2724bb2516aSBarry Smith   PetscOptionsObject->count = 1;
2734bb2516aSBarry Smith   *ierr                     = PetscOptionsScalar_Private(PetscOptionsObject, copt, ctext, cman, *currentvalue, value, set);
2744bb2516aSBarry Smith   if (*ierr) return;
2754bb2516aSBarry Smith   FREECHAR(opt, copt);
2764bb2516aSBarry Smith   FREECHAR(text, ctext);
2774bb2516aSBarry Smith   FREECHAR(man, cman);
2784bb2516aSBarry Smith }
2794bb2516aSBarry Smith 
2804bb2516aSBarry Smith PETSC_EXTERN void petscoptionsscalararray_(char *opt, char *text, char *man, PetscScalar *currentvalue, PetscInt *n, PetscBool *set, PetscErrorCode *ierr, PETSC_FORTRAN_CHARLEN_T lenopt, PETSC_FORTRAN_CHARLEN_T lentext, PETSC_FORTRAN_CHARLEN_T lenman)
2814bb2516aSBarry Smith {
2824bb2516aSBarry Smith   char *copt, *ctext, *cman;
2834bb2516aSBarry Smith 
2844bb2516aSBarry Smith   FIXCHAR(opt, lenopt, copt);
2854bb2516aSBarry Smith   FIXCHAR(text, lentext, ctext);
2864bb2516aSBarry Smith   FIXCHAR(man, lenman, cman);
2874bb2516aSBarry Smith   if (!PetscOptionsObject) {
2884bb2516aSBarry Smith     *ierr = PETSC_ERR_ARG_WRONGSTATE;
2894bb2516aSBarry Smith     return;
2904bb2516aSBarry Smith   }
2914bb2516aSBarry Smith   PetscOptionsObject->count = 1;
2924bb2516aSBarry Smith   *ierr                     = PetscOptionsScalarArray_Private(PetscOptionsObject, copt, ctext, cman, currentvalue, n, set);
2934bb2516aSBarry Smith   if (*ierr) return;
2944bb2516aSBarry Smith   FREECHAR(opt, copt);
2954bb2516aSBarry Smith   FREECHAR(text, ctext);
2964bb2516aSBarry Smith   FREECHAR(man, cman);
2974bb2516aSBarry Smith }
2984bb2516aSBarry Smith 
2994bb2516aSBarry Smith PETSC_EXTERN void petscoptionsstring_(char *opt, char *text, char *man, char *currentvalue, char *value, PetscBool *flg, PetscErrorCode *ierr, PETSC_FORTRAN_CHARLEN_T lenopt, PETSC_FORTRAN_CHARLEN_T lentext, PETSC_FORTRAN_CHARLEN_T lenman, PETSC_FORTRAN_CHARLEN_T lencurrent, PETSC_FORTRAN_CHARLEN_T lenvalue)
3004bb2516aSBarry Smith {
3014bb2516aSBarry Smith   char     *copt, *ctext, *cman, *ccurrent;
3024bb2516aSBarry Smith   PetscBool flag;
3034bb2516aSBarry Smith 
3044bb2516aSBarry Smith   FIXCHAR(opt, lenopt, copt);
3054bb2516aSBarry Smith   FIXCHAR(text, lentext, ctext);
3064bb2516aSBarry Smith   FIXCHAR(man, lenman, cman);
3074bb2516aSBarry Smith   FIXCHAR(currentvalue, lencurrent, ccurrent);
3084bb2516aSBarry Smith 
3094bb2516aSBarry Smith   if (!PetscOptionsObject) {
3104bb2516aSBarry Smith     *ierr = PETSC_ERR_ARG_WRONGSTATE;
3114bb2516aSBarry Smith     return;
3124bb2516aSBarry Smith   }
3134bb2516aSBarry Smith   PetscOptionsObject->count = 1;
3144bb2516aSBarry Smith 
3154bb2516aSBarry Smith   *ierr = PetscOptionsString_Private(PetscOptionsObject, copt, ctext, cman, ccurrent, value, lenvalue - 1, &flag);
3164bb2516aSBarry Smith   if (*ierr) return;
3174bb2516aSBarry Smith   if (!FORTRANNULLBOOL(flg)) *flg = flag;
3184bb2516aSBarry Smith   FREECHAR(opt, copt);
3194bb2516aSBarry Smith   FREECHAR(text, ctext);
3204bb2516aSBarry Smith   FREECHAR(man, cman);
3214bb2516aSBarry Smith   FREECHAR(currentvalue, ccurrent);
3224bb2516aSBarry Smith   FIXRETURNCHAR(flag, value, lenvalue);
3234bb2516aSBarry Smith }
3249306f9a3SSatish Balay 
32519caf8f3SSatish Balay PETSC_EXTERN void petscoptionsinsertstring_(PetscOptions *options, char *file, PetscErrorCode *ierr, PETSC_FORTRAN_CHARLEN_T len)
326ab66e762SBarry Smith {
327ab66e762SBarry Smith   char *c1;
328ab66e762SBarry Smith 
329ab66e762SBarry Smith   FIXCHAR(file, len, c1);
3305975b3b6SBarry Smith   *ierr = PetscOptionsInsertString(*options, c1);
3315975b3b6SBarry Smith   if (*ierr) return;
332ab66e762SBarry Smith   FREECHAR(file, c1);
333ab66e762SBarry Smith }
334ab66e762SBarry Smith 
33519caf8f3SSatish Balay PETSC_EXTERN void petscoptionsinsertfile_(MPI_Fint *comm, PetscOptions *options, char *file, PetscBool *require, PetscErrorCode *ierr, PETSC_FORTRAN_CHARLEN_T len)
3369306f9a3SSatish Balay {
3379306f9a3SSatish Balay   char *c1;
3389306f9a3SSatish Balay 
3399306f9a3SSatish Balay   FIXCHAR(file, len, c1);
3405975b3b6SBarry Smith   *ierr = PetscOptionsInsertFile(MPI_Comm_f2c(*comm), *options, c1, *require);
3415975b3b6SBarry Smith   if (*ierr) return;
3429306f9a3SSatish Balay   FREECHAR(file, c1);
3439306f9a3SSatish Balay }
3449306f9a3SSatish Balay 
3455975b3b6SBarry Smith PETSC_EXTERN void petscoptionssetvalue_(PetscOptions *options, char *name, char *value, PetscErrorCode *ierr, PETSC_FORTRAN_CHARLEN_T len1, PETSC_FORTRAN_CHARLEN_T len2)
3469306f9a3SSatish Balay {
3479306f9a3SSatish Balay   char *c1, *c2;
3489306f9a3SSatish Balay 
3499306f9a3SSatish Balay   FIXCHAR(name, len1, c1);
3509306f9a3SSatish Balay   FIXCHAR(value, len2, c2);
3515975b3b6SBarry Smith   *ierr = PetscOptionsSetValue(*options, c1, c2);
3525975b3b6SBarry Smith   if (*ierr) return;
3539306f9a3SSatish Balay   FREECHAR(name, c1);
3549306f9a3SSatish Balay   FREECHAR(value, c2);
3559306f9a3SSatish Balay }
3569306f9a3SSatish Balay 
35719caf8f3SSatish Balay PETSC_EXTERN void petscoptionsclear_(PetscOptions *options, PetscErrorCode *ierr)
358a542b6e8SBarry Smith {
359c5929fdfSBarry Smith   *ierr = PetscOptionsClear(*options);
360a542b6e8SBarry Smith }
361a542b6e8SBarry Smith 
36219caf8f3SSatish Balay PETSC_EXTERN void petscoptionsclearvalue_(PetscOptions *options, char *name, PetscErrorCode *ierr, PETSC_FORTRAN_CHARLEN_T len)
3639306f9a3SSatish Balay {
3649306f9a3SSatish Balay   char *c1;
3659306f9a3SSatish Balay 
3669306f9a3SSatish Balay   FIXCHAR(name, len, c1);
3675975b3b6SBarry Smith   *ierr = PetscOptionsClearValue(*options, c1);
3685975b3b6SBarry Smith   if (*ierr) return;
3699306f9a3SSatish Balay   FREECHAR(name, c1);
3709306f9a3SSatish Balay }
3719306f9a3SSatish Balay 
3725975b3b6SBarry Smith PETSC_EXTERN void petscoptionshasname_(PetscOptions *options, char *pre, char *name, PetscBool *flg, PetscErrorCode *ierr, PETSC_FORTRAN_CHARLEN_T len1, PETSC_FORTRAN_CHARLEN_T len2)
3739306f9a3SSatish Balay {
3749306f9a3SSatish Balay   char *c1, *c2;
3759306f9a3SSatish Balay 
3769306f9a3SSatish Balay   FIXCHAR(pre, len1, c1);
3779306f9a3SSatish Balay   FIXCHAR(name, len2, c2);
3785975b3b6SBarry Smith   *ierr = PetscOptionsHasName(*options, c1, c2, flg);
3795975b3b6SBarry Smith   if (*ierr) return;
3809306f9a3SSatish Balay   FREECHAR(pre, c1);
3819306f9a3SSatish Balay   FREECHAR(name, c2);
3829306f9a3SSatish Balay }
3839306f9a3SSatish Balay 
3845975b3b6SBarry Smith PETSC_EXTERN void petscoptionsgetint_(PetscOptions *opt, char *pre, char *name, PetscInt *ivalue, PetscBool *flg, PetscErrorCode *ierr, PETSC_FORTRAN_CHARLEN_T len1, PETSC_FORTRAN_CHARLEN_T len2)
3859306f9a3SSatish Balay {
3869306f9a3SSatish Balay   char     *c1, *c2;
387ace3abfcSBarry Smith   PetscBool flag;
3889306f9a3SSatish Balay 
3899306f9a3SSatish Balay   FIXCHAR(pre, len1, c1);
3909306f9a3SSatish Balay   FIXCHAR(name, len2, c2);
3915975b3b6SBarry Smith   *ierr = PetscOptionsGetInt(*opt, c1, c2, ivalue, &flag);
3925975b3b6SBarry Smith   if (*ierr) return;
3935c550465SJed Brown   if (!FORTRANNULLBOOL(flg)) *flg = flag;
3949306f9a3SSatish Balay   FREECHAR(pre, c1);
3959306f9a3SSatish Balay   FREECHAR(name, c2);
3969306f9a3SSatish Balay }
3979306f9a3SSatish Balay 
3985975b3b6SBarry Smith PETSC_EXTERN void petscoptionsgetenumprivate_(PetscOptions *options, char *pre, char *name, const char *const *list, PetscEnum *ivalue, PetscBool *flg, PetscErrorCode *ierr, PETSC_FORTRAN_CHARLEN_T len1, PETSC_FORTRAN_CHARLEN_T len2)
39947340559SBarry Smith {
40047340559SBarry Smith   char     *c1, *c2;
40147340559SBarry Smith   PetscBool flag;
40247340559SBarry Smith 
40347340559SBarry Smith   FIXCHAR(pre, len1, c1);
40447340559SBarry Smith   FIXCHAR(name, len2, c2);
4055975b3b6SBarry Smith   *ierr = PetscOptionsGetEnum(*options, c1, c2, list, ivalue, &flag);
4065975b3b6SBarry Smith   if (*ierr) return;
40747340559SBarry Smith   if (!FORTRANNULLBOOL(flg)) *flg = flag;
40847340559SBarry Smith   FREECHAR(pre, c1);
40947340559SBarry Smith   FREECHAR(name, c2);
41047340559SBarry Smith }
41147340559SBarry Smith 
4125975b3b6SBarry Smith PETSC_EXTERN void petscoptionsgetbool_(PetscOptions *options, char *pre, char *name, PetscBool *ivalue, PetscBool *flg, PetscErrorCode *ierr, PETSC_FORTRAN_CHARLEN_T len1, PETSC_FORTRAN_CHARLEN_T len2)
4139306f9a3SSatish Balay {
4149306f9a3SSatish Balay   char     *c1, *c2;
415ace3abfcSBarry Smith   PetscBool flag;
4169306f9a3SSatish Balay 
4179306f9a3SSatish Balay   FIXCHAR(pre, len1, c1);
4189306f9a3SSatish Balay   FIXCHAR(name, len2, c2);
4195975b3b6SBarry Smith   *ierr = PetscOptionsGetBool(*options, c1, c2, ivalue, &flag);
4205975b3b6SBarry Smith   if (*ierr) return;
4215c550465SJed Brown   if (!FORTRANNULLBOOL(flg)) *flg = flag;
4229306f9a3SSatish Balay   FREECHAR(pre, c1);
4239306f9a3SSatish Balay   FREECHAR(name, c2);
4249306f9a3SSatish Balay }
4259306f9a3SSatish Balay 
4265975b3b6SBarry Smith PETSC_EXTERN void petscoptionsgetboolarray_(PetscOptions *options, char *pre, char *name, PetscBool *dvalue, PetscInt *nmax, PetscBool *flg, PetscErrorCode *ierr, PETSC_FORTRAN_CHARLEN_T len1, PETSC_FORTRAN_CHARLEN_T len2)
427b0c0aa2bSBlaise Bourdin {
428b0c0aa2bSBlaise Bourdin   char     *c1, *c2;
429b0c0aa2bSBlaise Bourdin   PetscBool flag;
430b0c0aa2bSBlaise Bourdin 
431b0c0aa2bSBlaise Bourdin   FIXCHAR(pre, len1, c1);
432b0c0aa2bSBlaise Bourdin   FIXCHAR(name, len2, c2);
4335975b3b6SBarry Smith   *ierr = PetscOptionsGetBoolArray(*options, c1, c2, dvalue, nmax, &flag);
4345975b3b6SBarry Smith   if (*ierr) return;
435b0c0aa2bSBlaise Bourdin   if (!FORTRANNULLBOOL(flg)) *flg = flag;
436b0c0aa2bSBlaise Bourdin   FREECHAR(pre, c1);
437b0c0aa2bSBlaise Bourdin   FREECHAR(name, c2);
438b0c0aa2bSBlaise Bourdin }
439b0c0aa2bSBlaise Bourdin 
4405975b3b6SBarry Smith PETSC_EXTERN void petscoptionsgetreal_(PetscOptions *options, char *pre, char *name, PetscReal *dvalue, PetscBool *flg, PetscErrorCode *ierr, PETSC_FORTRAN_CHARLEN_T len1, PETSC_FORTRAN_CHARLEN_T len2)
4419306f9a3SSatish Balay {
4429306f9a3SSatish Balay   char     *c1, *c2;
443ace3abfcSBarry Smith   PetscBool flag;
4449306f9a3SSatish Balay 
4459306f9a3SSatish Balay   FIXCHAR(pre, len1, c1);
4469306f9a3SSatish Balay   FIXCHAR(name, len2, c2);
4475975b3b6SBarry Smith   *ierr = PetscOptionsGetReal(*options, c1, c2, dvalue, &flag);
4485975b3b6SBarry Smith   if (*ierr) return;
4495c550465SJed Brown   if (!FORTRANNULLBOOL(flg)) *flg = flag;
4509306f9a3SSatish Balay   FREECHAR(pre, c1);
4519306f9a3SSatish Balay   FREECHAR(name, c2);
4529306f9a3SSatish Balay }
4539306f9a3SSatish Balay 
4545975b3b6SBarry Smith PETSC_EXTERN void petscoptionsgetscalar_(PetscOptions *options, char *pre, char *name, PetscScalar *dvalue, PetscBool *flg, PetscErrorCode *ierr, PETSC_FORTRAN_CHARLEN_T len1, PETSC_FORTRAN_CHARLEN_T len2)
4557a7a6802SBarry Smith {
4567a7a6802SBarry Smith   char     *c1, *c2;
4577a7a6802SBarry Smith   PetscBool flag;
4587a7a6802SBarry Smith 
4597a7a6802SBarry Smith   FIXCHAR(pre, len1, c1);
4607a7a6802SBarry Smith   FIXCHAR(name, len2, c2);
4615975b3b6SBarry Smith   *ierr = PetscOptionsGetScalar(*options, c1, c2, dvalue, &flag);
4625975b3b6SBarry Smith   if (*ierr) return;
4637a7a6802SBarry Smith   if (!FORTRANNULLBOOL(flg)) *flg = flag;
4647a7a6802SBarry Smith   FREECHAR(pre, c1);
4657a7a6802SBarry Smith   FREECHAR(name, c2);
4667a7a6802SBarry Smith }
4677a7a6802SBarry Smith 
4685975b3b6SBarry Smith PETSC_EXTERN void petscoptionsgetscalararray_(PetscOptions *options, char *pre, char *name, PetscScalar *dvalue, PetscInt *nmax, PetscBool *flg, PetscErrorCode *ierr, PETSC_FORTRAN_CHARLEN_T len1, PETSC_FORTRAN_CHARLEN_T len2)
469b0c0aa2bSBlaise Bourdin {
470b0c0aa2bSBlaise Bourdin   char     *c1, *c2;
471b0c0aa2bSBlaise Bourdin   PetscBool flag;
472b0c0aa2bSBlaise Bourdin 
473b0c0aa2bSBlaise Bourdin   FIXCHAR(pre, len1, c1);
474b0c0aa2bSBlaise Bourdin   FIXCHAR(name, len2, c2);
4755975b3b6SBarry Smith   *ierr = PetscOptionsGetScalarArray(*options, c1, c2, dvalue, nmax, &flag);
4765975b3b6SBarry Smith   if (*ierr) return;
477b0c0aa2bSBlaise Bourdin   if (!FORTRANNULLBOOL(flg)) *flg = flag;
478b0c0aa2bSBlaise Bourdin   FREECHAR(pre, c1);
479b0c0aa2bSBlaise Bourdin   FREECHAR(name, c2);
480b0c0aa2bSBlaise Bourdin }
481b0c0aa2bSBlaise Bourdin 
4825975b3b6SBarry Smith PETSC_EXTERN void petscoptionsgetrealarray_(PetscOptions *options, char *pre, char *name, PetscReal *dvalue, PetscInt *nmax, PetscBool *flg, PetscErrorCode *ierr, PETSC_FORTRAN_CHARLEN_T len1, PETSC_FORTRAN_CHARLEN_T len2)
4839306f9a3SSatish Balay {
4849306f9a3SSatish Balay   char     *c1, *c2;
485ace3abfcSBarry Smith   PetscBool flag;
4869306f9a3SSatish Balay 
4879306f9a3SSatish Balay   FIXCHAR(pre, len1, c1);
4889306f9a3SSatish Balay   FIXCHAR(name, len2, c2);
4895975b3b6SBarry Smith   *ierr = PetscOptionsGetRealArray(*options, c1, c2, dvalue, nmax, &flag);
4905975b3b6SBarry Smith   if (*ierr) return;
4915c550465SJed Brown   if (!FORTRANNULLBOOL(flg)) *flg = flag;
4929306f9a3SSatish Balay   FREECHAR(pre, c1);
4939306f9a3SSatish Balay   FREECHAR(name, c2);
4949306f9a3SSatish Balay }
4959306f9a3SSatish Balay 
4965975b3b6SBarry Smith PETSC_EXTERN void petscoptionsgetintarray_(PetscOptions *options, char *pre, char *name, PetscInt *dvalue, PetscInt *nmax, PetscBool *flg, PetscErrorCode *ierr, PETSC_FORTRAN_CHARLEN_T len1, PETSC_FORTRAN_CHARLEN_T len2)
4979306f9a3SSatish Balay {
4989306f9a3SSatish Balay   char     *c1, *c2;
499ace3abfcSBarry Smith   PetscBool flag;
5009306f9a3SSatish Balay 
5019306f9a3SSatish Balay   FIXCHAR(pre, len1, c1);
5029306f9a3SSatish Balay   FIXCHAR(name, len2, c2);
5035975b3b6SBarry Smith   *ierr = PetscOptionsGetIntArray(*options, c1, c2, dvalue, nmax, &flag);
5045975b3b6SBarry Smith   if (*ierr) return;
5055c550465SJed Brown   if (!FORTRANNULLBOOL(flg)) *flg = flag;
5069306f9a3SSatish Balay   FREECHAR(pre, c1);
5079306f9a3SSatish Balay   FREECHAR(name, c2);
5089306f9a3SSatish Balay }
5099306f9a3SSatish Balay 
5105975b3b6SBarry Smith PETSC_EXTERN void petscoptionsgetstring_(PetscOptions *options, char *pre, char *name, char *string, PetscBool *flg, PetscErrorCode *ierr, PETSC_FORTRAN_CHARLEN_T len1, PETSC_FORTRAN_CHARLEN_T len2, PETSC_FORTRAN_CHARLEN_T len)
5119306f9a3SSatish Balay {
5129306f9a3SSatish Balay   char     *c1, *c2, *c3;
5134610e317SSatish Balay   size_t    len3;
514ace3abfcSBarry Smith   PetscBool flag;
5159306f9a3SSatish Balay 
5169306f9a3SSatish Balay   FIXCHAR(pre, len1, c1);
5179306f9a3SSatish Balay   FIXCHAR(name, len2, c2);
5189306f9a3SSatish Balay   c3   = string;
5199306f9a3SSatish Balay   len3 = len - 1;
5209306f9a3SSatish Balay 
5215975b3b6SBarry Smith   *ierr = PetscOptionsGetString(*options, c1, c2, c3, len3, &flag);
5225975b3b6SBarry Smith   if (*ierr) return;
5235c550465SJed Brown   if (!FORTRANNULLBOOL(flg)) *flg = flag;
5249306f9a3SSatish Balay   FREECHAR(pre, c1);
5259306f9a3SSatish Balay   FREECHAR(name, c2);
5267c363081SBarry Smith   FIXRETURNCHAR(flag, string, len);
5279306f9a3SSatish Balay }
5289306f9a3SSatish Balay 
52919caf8f3SSatish Balay PETSC_EXTERN void petscgetprogramname_(char *name, PetscErrorCode *ierr, PETSC_FORTRAN_CHARLEN_T len_in)
5309306f9a3SSatish Balay {
5319306f9a3SSatish Balay   char  *tmp;
5324610e317SSatish Balay   size_t len;
5339306f9a3SSatish Balay   tmp   = name;
5349306f9a3SSatish Balay   len   = len_in - 1;
5359306f9a3SSatish Balay   *ierr = PetscGetProgramName(tmp, len);
5367c363081SBarry Smith   FIXRETURNCHAR(PETSC_TRUE, name, len_in);
5379306f9a3SSatish Balay }
5389306f9a3SSatish Balay 
53919caf8f3SSatish Balay PETSC_EXTERN void petscoptionsview_(PetscOptions *options, PetscViewer *vin, PetscErrorCode *ierr)
5403a15af8cSBlaise Bourdin {
5413a15af8cSBlaise Bourdin   PetscViewer v;
5423a15af8cSBlaise Bourdin 
5433a15af8cSBlaise Bourdin   PetscPatchDefaultViewers_Fortran(vin, v);
544c5929fdfSBarry Smith   *ierr = PetscOptionsView(*options, v);
5453a15af8cSBlaise Bourdin }
5463a15af8cSBlaise Bourdin 
54719caf8f3SSatish Balay PETSC_EXTERN void petscobjectviewfromoptions_(PetscObject *obj, PetscObject *bobj, char *option, PetscErrorCode *ierr, PETSC_FORTRAN_CHARLEN_T loption)
548a2865142SMatthew G. Knepley {
549685405a1SBarry Smith   char *o;
550a2865142SMatthew G. Knepley 
551a2865142SMatthew G. Knepley   FIXCHAR(option, loption, o);
552b14c0cbaSBlaise Bourdin   CHKFORTRANNULLOBJECT(obj);
5535975b3b6SBarry Smith   *ierr = PetscObjectViewFromOptions(*obj, *bobj, o);
5545975b3b6SBarry Smith   if (*ierr) return;
555a2865142SMatthew G. Knepley   FREECHAR(option, o);
556a2865142SMatthew G. Knepley }
557a530d236SBarry Smith 
558a530d236SBarry Smith PETSC_EXTERN void petscsubcommgetparent_(PetscSubcomm *scomm, MPI_Fint *pcomm, int *ierr)
559a530d236SBarry Smith {
560a530d236SBarry Smith   MPI_Comm tcomm;
561a530d236SBarry Smith   *ierr  = PetscSubcommGetParent(*scomm, &tcomm);
562a530d236SBarry Smith   *pcomm = MPI_Comm_c2f(tcomm);
563a530d236SBarry Smith }
564a530d236SBarry Smith 
565a530d236SBarry Smith PETSC_EXTERN void petscsubcommgetcontiguousparent_(PetscSubcomm *scomm, MPI_Fint *pcomm, int *ierr)
566a530d236SBarry Smith {
567a530d236SBarry Smith   MPI_Comm tcomm;
568a530d236SBarry Smith   *ierr  = PetscSubcommGetContiguousParent(*scomm, &tcomm);
569a530d236SBarry Smith   *pcomm = MPI_Comm_c2f(tcomm);
570a530d236SBarry Smith }
571a530d236SBarry Smith 
572a530d236SBarry Smith PETSC_EXTERN void petscsubcommgetchild_(PetscSubcomm *scomm, MPI_Fint *ccomm, int *ierr)
573a530d236SBarry Smith {
574a530d236SBarry Smith   MPI_Comm tcomm;
575a530d236SBarry Smith   *ierr  = PetscSubcommGetChild(*scomm, &tcomm);
576a530d236SBarry Smith   *ccomm = MPI_Comm_c2f(tcomm);
577a530d236SBarry Smith }
578a530d236SBarry Smith 
579a530d236SBarry Smith PETSC_EXTERN void petscsubcommview_(PetscSubcomm *psubcomm, PetscViewer *viewer, int *ierr)
580a530d236SBarry Smith {
581a530d236SBarry Smith   PetscViewer v;
582a530d236SBarry Smith   PetscPatchDefaultViewers_Fortran(viewer, v);
583a530d236SBarry Smith   *ierr = PetscSubcommView(*psubcomm, v);
584a530d236SBarry Smith }
585