xref: /petsc/src/sys/objects/ftn-custom/zoptionsf.c (revision 6dd63270497ad23dcf16ae500a87ff2b2a0b7474)
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 
7*6dd63270SBarry Smith #include <petsc/private/ftnimpl.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
22c0eeb270SSatish Balay   #define petscoptionsstring_              PETSCOPTIONSSTRING
23a530d236SBarry Smith   #define petscsubcommgetparent_           PETSCSUBCOMMGETPARENT
24a530d236SBarry Smith   #define petscsubcommgetcontiguousparent_ PETSCSUBCOMMGETCONTIGUOUSPARENT
25a530d236SBarry Smith   #define petscsubcommgetchild_            PETSCSUBCOMMGETCHILD
26455a3cf9SBarry Smith   #define petscoptionsallused_             PETSCOPTIONSALLUSED
2747340559SBarry Smith   #define petscoptionsgetenumprivate_      PETSCOPTIONSGETENUMPRIVATE
289306f9a3SSatish Balay   #define petscoptionsgetstring_           PETSCOPTIONSGETSTRING
299306f9a3SSatish Balay #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE)
304bb2516aSBarry Smith   #define petscoptionsbegin_               petscoptionsbegin
314bb2516aSBarry Smith   #define petscoptionsend_                 petscoptionsend
324bb2516aSBarry Smith   #define petscoptionsbool_                petscoptionsbool
334bb2516aSBarry Smith   #define petscoptionsboolarray_           petscoptionsboolarray
3447582d61SSatish Balay   #define petscoptionsenumprivate_         petscoptionsenumprivate
354bb2516aSBarry Smith   #define petscoptionsint_                 petscoptionsint
364bb2516aSBarry Smith   #define petscoptionsintarray_            petscoptionsintarray
374bb2516aSBarry Smith   #define petscoptionsreal_                petscoptionsreal
384bb2516aSBarry Smith   #define petscoptionsrealarray_           petscoptionsrealarray
394bb2516aSBarry Smith   #define petscoptionsscalar_              petscoptionsscalar
404bb2516aSBarry Smith   #define petscoptionsscalararray_         petscoptionsscalararray
414bb2516aSBarry Smith   #define petscoptionsstring_              petscoptionsstring
42a530d236SBarry Smith   #define petscsubcommgetparent_           petscsubcommgetparent
43a530d236SBarry Smith   #define petscsubcommgetcontiguousparent_ petscsubcommgetcontiguousparent
44a530d236SBarry Smith   #define petscsubcommgetchild_            petscsubcommgetchild
45455a3cf9SBarry Smith   #define petscoptionsallused_             petscoptionsallused
4647340559SBarry Smith   #define petscoptionsgetenumprivate_      petscoptionsgetenumprivate
479306f9a3SSatish Balay   #define petscoptionsgetstring_           petscoptionsgetstring
489306f9a3SSatish Balay #endif
499306f9a3SSatish Balay 
50ce78bad3SBarry Smith static struct _n_PetscOptionItems PetscOptionsObjectBase;
51ce78bad3SBarry Smith static PetscOptionItems           PetscOptionsObject = NULL;
524bb2516aSBarry Smith 
534bb2516aSBarry 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)
544bb2516aSBarry Smith {
554bb2516aSBarry Smith   MPI_Comm comm = MPI_Comm_f2c(*fcomm);
564bb2516aSBarry Smith   char    *cprefix, *cmess, *csec;
574bb2516aSBarry Smith 
584bb2516aSBarry Smith   FIXCHAR(prefix, lenprefix, cprefix);
594bb2516aSBarry Smith   FIXCHAR(mess, lenmess, cmess);
604bb2516aSBarry Smith   FIXCHAR(sec, lensec, csec);
614bb2516aSBarry Smith   if (PetscOptionsObject) {
624bb2516aSBarry Smith     *ierr = PETSC_ERR_ARG_WRONGSTATE;
634bb2516aSBarry Smith     return;
644bb2516aSBarry Smith   }
654bb2516aSBarry Smith   PetscOptionsObject = &PetscOptionsObjectBase;
664bb2516aSBarry Smith   *ierr              = PetscMemzero(PetscOptionsObject, sizeof(*PetscOptionsObject));
674bb2516aSBarry Smith   if (*ierr) return;
684bb2516aSBarry Smith   PetscOptionsObject->count = 1;
694bb2516aSBarry Smith   *ierr                     = PetscOptionsBegin_Private(PetscOptionsObject, comm, cprefix, cmess, csec);
704bb2516aSBarry Smith   if (*ierr) return;
714bb2516aSBarry Smith   FREECHAR(prefix, cprefix);
724bb2516aSBarry Smith   FREECHAR(mess, cmess);
734bb2516aSBarry Smith   FREECHAR(sec, csec);
744bb2516aSBarry Smith }
754bb2516aSBarry Smith 
764bb2516aSBarry Smith PETSC_EXTERN void petscoptionsend_(PetscErrorCode *ierr)
774bb2516aSBarry Smith {
784bb2516aSBarry Smith   if (!PetscOptionsObject) {
794bb2516aSBarry Smith     *ierr = PETSC_ERR_ARG_WRONGSTATE;
804bb2516aSBarry Smith     return;
814bb2516aSBarry Smith   }
824bb2516aSBarry Smith   PetscOptionsObject->count = 1;
834bb2516aSBarry Smith   *ierr                     = PetscOptionsEnd_Private(PetscOptionsObject);
844bb2516aSBarry Smith   PetscOptionsObject        = NULL;
854bb2516aSBarry Smith }
864bb2516aSBarry Smith 
874bb2516aSBarry 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)
884bb2516aSBarry Smith {
894bb2516aSBarry Smith   char *copt, *ctext, *cman;
904bb2516aSBarry Smith 
914bb2516aSBarry Smith   FIXCHAR(opt, lenopt, copt);
924bb2516aSBarry Smith   FIXCHAR(text, lentext, ctext);
934bb2516aSBarry Smith   FIXCHAR(man, lenman, cman);
944bb2516aSBarry Smith   if (!PetscOptionsObject) {
954bb2516aSBarry Smith     *ierr = PETSC_ERR_ARG_WRONGSTATE;
964bb2516aSBarry Smith     return;
974bb2516aSBarry Smith   }
984bb2516aSBarry Smith   PetscOptionsObject->count = 1;
994bb2516aSBarry Smith   *ierr                     = PetscOptionsBool_Private(PetscOptionsObject, copt, ctext, cman, *currentvalue, value, set);
1004bb2516aSBarry Smith   if (*ierr) return;
1014bb2516aSBarry Smith   FREECHAR(opt, copt);
1024bb2516aSBarry Smith   FREECHAR(text, ctext);
1034bb2516aSBarry Smith   FREECHAR(man, cman);
1044bb2516aSBarry Smith }
1054bb2516aSBarry Smith 
1064bb2516aSBarry 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)
1074bb2516aSBarry Smith {
1084bb2516aSBarry Smith   char     *copt, *ctext, *cman;
1094bb2516aSBarry Smith   PetscBool flag;
1104bb2516aSBarry Smith 
1114bb2516aSBarry Smith   FIXCHAR(opt, lenopt, copt);
1124bb2516aSBarry Smith   FIXCHAR(text, lentext, ctext);
1134bb2516aSBarry Smith   FIXCHAR(man, lenman, cman);
1144bb2516aSBarry Smith   if (!PetscOptionsObject) {
1154bb2516aSBarry Smith     *ierr = PETSC_ERR_ARG_WRONGSTATE;
1164bb2516aSBarry Smith     return;
1174bb2516aSBarry Smith   }
1184bb2516aSBarry Smith   PetscOptionsObject->count = 1;
1194bb2516aSBarry Smith   *ierr                     = PetscOptionsBoolArray_Private(PetscOptionsObject, copt, ctext, cman, dvalue, nmax, &flag);
1204bb2516aSBarry Smith   if (*ierr) return;
1214bb2516aSBarry Smith   if (!FORTRANNULLBOOL(flg)) *flg = flag;
1224bb2516aSBarry Smith   FREECHAR(opt, copt);
1234bb2516aSBarry Smith   FREECHAR(text, ctext);
1244bb2516aSBarry Smith   FREECHAR(man, cman);
1254bb2516aSBarry Smith }
1264bb2516aSBarry Smith 
1274bb2516aSBarry 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)
1284bb2516aSBarry Smith {
1294bb2516aSBarry Smith   char     *copt, *ctext, *cman;
1304bb2516aSBarry Smith   PetscBool flag;
1314bb2516aSBarry Smith 
1324bb2516aSBarry Smith   FIXCHAR(opt, lenopt, copt);
1334bb2516aSBarry Smith   FIXCHAR(text, lentext, ctext);
1344bb2516aSBarry Smith   FIXCHAR(man, lenman, cman);
1354bb2516aSBarry Smith   if (!PetscOptionsObject) {
1364bb2516aSBarry Smith     *ierr = PETSC_ERR_ARG_WRONGSTATE;
1374bb2516aSBarry Smith     return;
1384bb2516aSBarry Smith   }
1394bb2516aSBarry Smith   PetscOptionsObject->count = 1;
1404bb2516aSBarry Smith   *ierr                     = PetscOptionsEnum_Private(PetscOptionsObject, copt, ctext, cman, list, *currentvalue, ivalue, &flag);
1414bb2516aSBarry Smith   if (*ierr) return;
1424bb2516aSBarry Smith   if (!FORTRANNULLBOOL(flg)) *flg = flag;
1434bb2516aSBarry Smith   FREECHAR(opt, copt);
1444bb2516aSBarry Smith   FREECHAR(text, ctext);
1454bb2516aSBarry Smith   FREECHAR(man, cman);
1464bb2516aSBarry Smith }
1474bb2516aSBarry Smith 
1484bb2516aSBarry 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)
1494bb2516aSBarry Smith {
1504bb2516aSBarry Smith   char *copt, *ctext, *cman;
1514bb2516aSBarry Smith 
1524bb2516aSBarry Smith   FIXCHAR(opt, lenopt, copt);
1534bb2516aSBarry Smith   FIXCHAR(text, lentext, ctext);
1544bb2516aSBarry Smith   FIXCHAR(man, lenman, cman);
1554bb2516aSBarry Smith   if (!PetscOptionsObject) {
1564bb2516aSBarry Smith     *ierr = PETSC_ERR_ARG_WRONGSTATE;
1574bb2516aSBarry Smith     return;
1584bb2516aSBarry Smith   }
1594bb2516aSBarry Smith   PetscOptionsObject->count = 1;
1601690c2aeSBarry Smith   *ierr                     = PetscOptionsInt_Private(PetscOptionsObject, copt, ctext, cman, *currentvalue, value, set, PETSC_INT_MIN, PETSC_INT_MAX);
1614bb2516aSBarry Smith   if (*ierr) return;
1624bb2516aSBarry Smith   FREECHAR(opt, copt);
1634bb2516aSBarry Smith   FREECHAR(text, ctext);
1644bb2516aSBarry Smith   FREECHAR(man, cman);
1654bb2516aSBarry Smith }
1664bb2516aSBarry Smith 
1674bb2516aSBarry 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)
1684bb2516aSBarry Smith {
1694bb2516aSBarry Smith   char *copt, *ctext, *cman;
1704bb2516aSBarry Smith 
1714bb2516aSBarry Smith   FIXCHAR(opt, lenopt, copt);
1724bb2516aSBarry Smith   FIXCHAR(text, lentext, ctext);
1734bb2516aSBarry Smith   FIXCHAR(man, lenman, cman);
1744bb2516aSBarry Smith   if (!PetscOptionsObject) {
1754bb2516aSBarry Smith     *ierr = PETSC_ERR_ARG_WRONGSTATE;
1764bb2516aSBarry Smith     return;
1774bb2516aSBarry Smith   }
1784bb2516aSBarry Smith   PetscOptionsObject->count = 1;
1794bb2516aSBarry Smith   *ierr                     = PetscOptionsIntArray_Private(PetscOptionsObject, copt, ctext, cman, currentvalue, n, set);
1804bb2516aSBarry Smith   if (*ierr) return;
1814bb2516aSBarry Smith   FREECHAR(opt, copt);
1824bb2516aSBarry Smith   FREECHAR(text, ctext);
1834bb2516aSBarry Smith   FREECHAR(man, cman);
1844bb2516aSBarry Smith }
1854bb2516aSBarry Smith 
1864bb2516aSBarry 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)
1874bb2516aSBarry Smith {
1884bb2516aSBarry Smith   char *copt, *ctext, *cman;
1894bb2516aSBarry Smith 
1904bb2516aSBarry Smith   FIXCHAR(opt, lenopt, copt);
1914bb2516aSBarry Smith   FIXCHAR(text, lentext, ctext);
1924bb2516aSBarry Smith   FIXCHAR(man, lenman, cman);
1934bb2516aSBarry Smith   if (!PetscOptionsObject) {
1944bb2516aSBarry Smith     *ierr = PETSC_ERR_ARG_WRONGSTATE;
1954bb2516aSBarry Smith     return;
1964bb2516aSBarry Smith   }
1974bb2516aSBarry Smith   PetscOptionsObject->count = 1;
19852ce0ab5SPierre Jolivet   *ierr                     = PetscOptionsReal_Private(PetscOptionsObject, copt, ctext, cman, *currentvalue, value, set, PETSC_MIN_REAL, PETSC_MAX_REAL);
1994bb2516aSBarry Smith   if (*ierr) return;
2004bb2516aSBarry Smith   FREECHAR(opt, copt);
2014bb2516aSBarry Smith   FREECHAR(text, ctext);
2024bb2516aSBarry Smith   FREECHAR(man, cman);
2034bb2516aSBarry Smith }
2044bb2516aSBarry Smith 
2054bb2516aSBarry 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)
2064bb2516aSBarry Smith {
2074bb2516aSBarry Smith   char *copt, *ctext, *cman;
2084bb2516aSBarry Smith 
2094bb2516aSBarry Smith   FIXCHAR(opt, lenopt, copt);
2104bb2516aSBarry Smith   FIXCHAR(text, lentext, ctext);
2114bb2516aSBarry Smith   FIXCHAR(man, lenman, cman);
2124bb2516aSBarry Smith   if (!PetscOptionsObject) {
2134bb2516aSBarry Smith     *ierr = PETSC_ERR_ARG_WRONGSTATE;
2144bb2516aSBarry Smith     return;
2154bb2516aSBarry Smith   }
2164bb2516aSBarry Smith   PetscOptionsObject->count = 1;
2174bb2516aSBarry Smith   *ierr                     = PetscOptionsRealArray_Private(PetscOptionsObject, copt, ctext, cman, currentvalue, n, set);
2184bb2516aSBarry Smith   if (*ierr) return;
2194bb2516aSBarry Smith   FREECHAR(opt, copt);
2204bb2516aSBarry Smith   FREECHAR(text, ctext);
2214bb2516aSBarry Smith   FREECHAR(man, cman);
2224bb2516aSBarry Smith }
2234bb2516aSBarry Smith 
2244bb2516aSBarry 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)
2254bb2516aSBarry Smith {
2264bb2516aSBarry Smith   char *copt, *ctext, *cman;
2274bb2516aSBarry Smith 
2284bb2516aSBarry Smith   FIXCHAR(opt, lenopt, copt);
2294bb2516aSBarry Smith   FIXCHAR(text, lentext, ctext);
2304bb2516aSBarry Smith   FIXCHAR(man, lenman, cman);
2314bb2516aSBarry Smith   if (!PetscOptionsObject) {
2324bb2516aSBarry Smith     *ierr = PETSC_ERR_ARG_WRONGSTATE;
2334bb2516aSBarry Smith     return;
2344bb2516aSBarry Smith   }
2354bb2516aSBarry Smith   PetscOptionsObject->count = 1;
2364bb2516aSBarry Smith   *ierr                     = PetscOptionsScalar_Private(PetscOptionsObject, copt, ctext, cman, *currentvalue, value, set);
2374bb2516aSBarry Smith   if (*ierr) return;
2384bb2516aSBarry Smith   FREECHAR(opt, copt);
2394bb2516aSBarry Smith   FREECHAR(text, ctext);
2404bb2516aSBarry Smith   FREECHAR(man, cman);
2414bb2516aSBarry Smith }
2424bb2516aSBarry Smith 
2434bb2516aSBarry 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)
2444bb2516aSBarry Smith {
2454bb2516aSBarry Smith   char *copt, *ctext, *cman;
2464bb2516aSBarry Smith 
2474bb2516aSBarry Smith   FIXCHAR(opt, lenopt, copt);
2484bb2516aSBarry Smith   FIXCHAR(text, lentext, ctext);
2494bb2516aSBarry Smith   FIXCHAR(man, lenman, cman);
2504bb2516aSBarry Smith   if (!PetscOptionsObject) {
2514bb2516aSBarry Smith     *ierr = PETSC_ERR_ARG_WRONGSTATE;
2524bb2516aSBarry Smith     return;
2534bb2516aSBarry Smith   }
2544bb2516aSBarry Smith   PetscOptionsObject->count = 1;
2554bb2516aSBarry Smith   *ierr                     = PetscOptionsScalarArray_Private(PetscOptionsObject, copt, ctext, cman, currentvalue, n, set);
2564bb2516aSBarry Smith   if (*ierr) return;
2574bb2516aSBarry Smith   FREECHAR(opt, copt);
2584bb2516aSBarry Smith   FREECHAR(text, ctext);
2594bb2516aSBarry Smith   FREECHAR(man, cman);
2604bb2516aSBarry Smith }
2614bb2516aSBarry Smith 
2624bb2516aSBarry 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)
2634bb2516aSBarry Smith {
2644bb2516aSBarry Smith   char     *copt, *ctext, *cman, *ccurrent;
2654bb2516aSBarry Smith   PetscBool flag;
2664bb2516aSBarry Smith 
2674bb2516aSBarry Smith   FIXCHAR(opt, lenopt, copt);
2684bb2516aSBarry Smith   FIXCHAR(text, lentext, ctext);
2694bb2516aSBarry Smith   FIXCHAR(man, lenman, cman);
2704bb2516aSBarry Smith   FIXCHAR(currentvalue, lencurrent, ccurrent);
2714bb2516aSBarry Smith 
2724bb2516aSBarry Smith   if (!PetscOptionsObject) {
2734bb2516aSBarry Smith     *ierr = PETSC_ERR_ARG_WRONGSTATE;
2744bb2516aSBarry Smith     return;
2754bb2516aSBarry Smith   }
2764bb2516aSBarry Smith   PetscOptionsObject->count = 1;
2774bb2516aSBarry Smith 
2784bb2516aSBarry Smith   *ierr = PetscOptionsString_Private(PetscOptionsObject, copt, ctext, cman, ccurrent, value, lenvalue - 1, &flag);
2794bb2516aSBarry Smith   if (*ierr) return;
2804bb2516aSBarry Smith   if (!FORTRANNULLBOOL(flg)) *flg = flag;
2814bb2516aSBarry Smith   FREECHAR(opt, copt);
2824bb2516aSBarry Smith   FREECHAR(text, ctext);
2834bb2516aSBarry Smith   FREECHAR(man, cman);
2844bb2516aSBarry Smith   FREECHAR(currentvalue, ccurrent);
2854bb2516aSBarry Smith   FIXRETURNCHAR(flag, value, lenvalue);
2864bb2516aSBarry Smith }
2879306f9a3SSatish Balay 
288ce78bad3SBarry Smith PETSC_EXTERN void petscoptionsgetenumprivate_(PetscOptions *opt, char *pre, char *name, const char *const *list, PetscEnum *ivalue, PetscBool *flg, PetscErrorCode *ierr, PETSC_FORTRAN_CHARLEN_T len1, PETSC_FORTRAN_CHARLEN_T len2)
2899306f9a3SSatish Balay {
2909306f9a3SSatish Balay   char     *c1, *c2;
291ace3abfcSBarry Smith   PetscBool flag;
2929306f9a3SSatish Balay 
2939306f9a3SSatish Balay   FIXCHAR(pre, len1, c1);
2949306f9a3SSatish Balay   FIXCHAR(name, len2, c2);
295ce78bad3SBarry Smith   *ierr = PetscOptionsGetEnum(*opt, c1, c2, list, ivalue, &flag);
2965975b3b6SBarry Smith   if (*ierr) return;
2975c550465SJed Brown   if (!FORTRANNULLBOOL(flg)) *flg = flag;
2989306f9a3SSatish Balay   FREECHAR(pre, c1);
2999306f9a3SSatish Balay   FREECHAR(name, c2);
3009306f9a3SSatish Balay }
3019306f9a3SSatish Balay 
3025975b3b6SBarry 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)
3039306f9a3SSatish Balay {
3049306f9a3SSatish Balay   char     *c1, *c2, *c3;
3054610e317SSatish Balay   size_t    len3;
306ace3abfcSBarry Smith   PetscBool flag;
3079306f9a3SSatish Balay 
3089306f9a3SSatish Balay   FIXCHAR(pre, len1, c1);
3099306f9a3SSatish Balay   FIXCHAR(name, len2, c2);
3109306f9a3SSatish Balay   c3   = string;
3119306f9a3SSatish Balay   len3 = len - 1;
3129306f9a3SSatish Balay 
3135975b3b6SBarry Smith   *ierr = PetscOptionsGetString(*options, c1, c2, c3, len3, &flag);
3145975b3b6SBarry Smith   if (*ierr) return;
3155c550465SJed Brown   if (!FORTRANNULLBOOL(flg)) *flg = flag;
3169306f9a3SSatish Balay   FREECHAR(pre, c1);
3179306f9a3SSatish Balay   FREECHAR(name, c2);
3187c363081SBarry Smith   FIXRETURNCHAR(flag, string, len);
3199306f9a3SSatish Balay }
320a530d236SBarry Smith PETSC_EXTERN void petscsubcommgetparent_(PetscSubcomm *scomm, MPI_Fint *pcomm, int *ierr)
321a530d236SBarry Smith {
322a530d236SBarry Smith   MPI_Comm tcomm;
323ce78bad3SBarry Smith 
324a530d236SBarry Smith   *ierr  = PetscSubcommGetParent(*scomm, &tcomm);
325a530d236SBarry Smith   *pcomm = MPI_Comm_c2f(tcomm);
326a530d236SBarry Smith }
327a530d236SBarry Smith 
328a530d236SBarry Smith PETSC_EXTERN void petscsubcommgetcontiguousparent_(PetscSubcomm *scomm, MPI_Fint *pcomm, int *ierr)
329a530d236SBarry Smith {
330a530d236SBarry Smith   MPI_Comm tcomm;
331ce78bad3SBarry Smith 
332a530d236SBarry Smith   *ierr  = PetscSubcommGetContiguousParent(*scomm, &tcomm);
333a530d236SBarry Smith   *pcomm = MPI_Comm_c2f(tcomm);
334a530d236SBarry Smith }
335a530d236SBarry Smith 
336a530d236SBarry Smith PETSC_EXTERN void petscsubcommgetchild_(PetscSubcomm *scomm, MPI_Fint *ccomm, int *ierr)
337a530d236SBarry Smith {
338a530d236SBarry Smith   MPI_Comm tcomm;
339ce78bad3SBarry Smith 
340a530d236SBarry Smith   *ierr  = PetscSubcommGetChild(*scomm, &tcomm);
341a530d236SBarry Smith   *ccomm = MPI_Comm_c2f(tcomm);
342a530d236SBarry Smith }
343