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 76dd63270SBarry 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 14*4d81f786SBarry Smith #define petscoptionsbool3_ PETSCOPTIONSBOOL3 154bb2516aSBarry Smith #define petscoptionsboolarray_ PETSCOPTIONSBOOLARRAY 164bb2516aSBarry Smith #define petscoptionsenumprivate_ PETSCOPTIONSENUMPRIVATE 174bb2516aSBarry Smith #define petscoptionsint_ PETSCOPTIONSINT 184bb2516aSBarry Smith #define petscoptionsintarray_ PETSCOPTIONSINTARRAY 194bb2516aSBarry Smith #define petscoptionsreal_ PETSCOPTIONSREAL 204bb2516aSBarry Smith #define petscoptionsrealarray_ PETSCOPTIONSREALARRAY 214bb2516aSBarry Smith #define petscoptionsscalar_ PETSCOPTIONSSCALAR 224bb2516aSBarry Smith #define petscoptionsscalararray_ PETSCOPTIONSSCALARARRAY 23c0eeb270SSatish Balay #define petscoptionsstring_ PETSCOPTIONSSTRING 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 299306f9a3SSatish Balay #define petscoptionsgetstring_ PETSCOPTIONSGETSTRING 309306f9a3SSatish Balay #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE) 314bb2516aSBarry Smith #define petscoptionsbegin_ petscoptionsbegin 324bb2516aSBarry Smith #define petscoptionsend_ petscoptionsend 334bb2516aSBarry Smith #define petscoptionsbool_ petscoptionsbool 34*4d81f786SBarry Smith #define petscoptionsbool3_ petscoptionsbool3 354bb2516aSBarry Smith #define petscoptionsboolarray_ petscoptionsboolarray 3647582d61SSatish Balay #define petscoptionsenumprivate_ petscoptionsenumprivate 374bb2516aSBarry Smith #define petscoptionsint_ petscoptionsint 384bb2516aSBarry Smith #define petscoptionsintarray_ petscoptionsintarray 394bb2516aSBarry Smith #define petscoptionsreal_ petscoptionsreal 404bb2516aSBarry Smith #define petscoptionsrealarray_ petscoptionsrealarray 414bb2516aSBarry Smith #define petscoptionsscalar_ petscoptionsscalar 424bb2516aSBarry Smith #define petscoptionsscalararray_ petscoptionsscalararray 434bb2516aSBarry Smith #define petscoptionsstring_ petscoptionsstring 44a530d236SBarry Smith #define petscsubcommgetparent_ petscsubcommgetparent 45a530d236SBarry Smith #define petscsubcommgetcontiguousparent_ petscsubcommgetcontiguousparent 46a530d236SBarry Smith #define petscsubcommgetchild_ petscsubcommgetchild 47455a3cf9SBarry Smith #define petscoptionsallused_ petscoptionsallused 4847340559SBarry Smith #define petscoptionsgetenumprivate_ petscoptionsgetenumprivate 499306f9a3SSatish Balay #define petscoptionsgetstring_ petscoptionsgetstring 509306f9a3SSatish Balay #endif 519306f9a3SSatish Balay 52ce78bad3SBarry Smith static struct _n_PetscOptionItems PetscOptionsObjectBase; 53ce78bad3SBarry Smith static PetscOptionItems PetscOptionsObject = NULL; 544bb2516aSBarry Smith 554bb2516aSBarry 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) 564bb2516aSBarry Smith { 574bb2516aSBarry Smith MPI_Comm comm = MPI_Comm_f2c(*fcomm); 584bb2516aSBarry Smith char *cprefix, *cmess, *csec; 594bb2516aSBarry Smith 604bb2516aSBarry Smith FIXCHAR(prefix, lenprefix, cprefix); 614bb2516aSBarry Smith FIXCHAR(mess, lenmess, cmess); 624bb2516aSBarry Smith FIXCHAR(sec, lensec, csec); 634bb2516aSBarry Smith if (PetscOptionsObject) { 644bb2516aSBarry Smith *ierr = PETSC_ERR_ARG_WRONGSTATE; 654bb2516aSBarry Smith return; 664bb2516aSBarry Smith } 674bb2516aSBarry Smith PetscOptionsObject = &PetscOptionsObjectBase; 684bb2516aSBarry Smith *ierr = PetscMemzero(PetscOptionsObject, sizeof(*PetscOptionsObject)); 694bb2516aSBarry Smith if (*ierr) return; 704bb2516aSBarry Smith PetscOptionsObject->count = 1; 714bb2516aSBarry Smith *ierr = PetscOptionsBegin_Private(PetscOptionsObject, comm, cprefix, cmess, csec); 724bb2516aSBarry Smith if (*ierr) return; 734bb2516aSBarry Smith FREECHAR(prefix, cprefix); 744bb2516aSBarry Smith FREECHAR(mess, cmess); 754bb2516aSBarry Smith FREECHAR(sec, csec); 764bb2516aSBarry Smith } 774bb2516aSBarry Smith 784bb2516aSBarry Smith PETSC_EXTERN void petscoptionsend_(PetscErrorCode *ierr) 794bb2516aSBarry Smith { 804bb2516aSBarry Smith if (!PetscOptionsObject) { 814bb2516aSBarry Smith *ierr = PETSC_ERR_ARG_WRONGSTATE; 824bb2516aSBarry Smith return; 834bb2516aSBarry Smith } 844bb2516aSBarry Smith PetscOptionsObject->count = 1; 854bb2516aSBarry Smith *ierr = PetscOptionsEnd_Private(PetscOptionsObject); 864bb2516aSBarry Smith PetscOptionsObject = NULL; 874bb2516aSBarry Smith } 884bb2516aSBarry Smith 894bb2516aSBarry 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) 904bb2516aSBarry Smith { 914bb2516aSBarry Smith char *copt, *ctext, *cman; 924bb2516aSBarry Smith 934bb2516aSBarry Smith FIXCHAR(opt, lenopt, copt); 944bb2516aSBarry Smith FIXCHAR(text, lentext, ctext); 954bb2516aSBarry Smith FIXCHAR(man, lenman, cman); 964bb2516aSBarry Smith if (!PetscOptionsObject) { 974bb2516aSBarry Smith *ierr = PETSC_ERR_ARG_WRONGSTATE; 984bb2516aSBarry Smith return; 994bb2516aSBarry Smith } 1004bb2516aSBarry Smith PetscOptionsObject->count = 1; 1014bb2516aSBarry Smith *ierr = PetscOptionsBool_Private(PetscOptionsObject, copt, ctext, cman, *currentvalue, value, set); 1024bb2516aSBarry Smith if (*ierr) return; 1034bb2516aSBarry Smith FREECHAR(opt, copt); 1044bb2516aSBarry Smith FREECHAR(text, ctext); 1054bb2516aSBarry Smith FREECHAR(man, cman); 1064bb2516aSBarry Smith } 1074bb2516aSBarry Smith 108*4d81f786SBarry Smith PETSC_EXTERN void petscoptionsbool3_(char *opt, char *text, char *man, PetscBool3 *currentvalue, PetscBool3 *value, PetscBool *set, PetscErrorCode *ierr, PETSC_FORTRAN_CHARLEN_T lenopt, PETSC_FORTRAN_CHARLEN_T lentext, PETSC_FORTRAN_CHARLEN_T lenman) 109*4d81f786SBarry Smith { 110*4d81f786SBarry Smith char *copt, *ctext, *cman; 111*4d81f786SBarry Smith 112*4d81f786SBarry Smith FIXCHAR(opt, lenopt, copt); 113*4d81f786SBarry Smith FIXCHAR(text, lentext, ctext); 114*4d81f786SBarry Smith FIXCHAR(man, lenman, cman); 115*4d81f786SBarry Smith if (!PetscOptionsObject) { 116*4d81f786SBarry Smith *ierr = PETSC_ERR_ARG_WRONGSTATE; 117*4d81f786SBarry Smith return; 118*4d81f786SBarry Smith } 119*4d81f786SBarry Smith PetscOptionsObject->count = 1; 120*4d81f786SBarry Smith *ierr = PetscOptionsBool3_Private(PetscOptionsObject, copt, ctext, cman, *currentvalue, value, set); 121*4d81f786SBarry Smith if (*ierr) return; 122*4d81f786SBarry Smith FREECHAR(opt, copt); 123*4d81f786SBarry Smith FREECHAR(text, ctext); 124*4d81f786SBarry Smith FREECHAR(man, cman); 125*4d81f786SBarry Smith } 126*4d81f786SBarry Smith 1274bb2516aSBarry 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) 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 = PetscOptionsBoolArray_Private(PetscOptionsObject, copt, ctext, cman, dvalue, nmax, &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 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) 1494bb2516aSBarry Smith { 1504bb2516aSBarry Smith char *copt, *ctext, *cman; 1514bb2516aSBarry Smith PetscBool flag; 1524bb2516aSBarry Smith 1534bb2516aSBarry Smith FIXCHAR(opt, lenopt, copt); 1544bb2516aSBarry Smith FIXCHAR(text, lentext, ctext); 1554bb2516aSBarry Smith FIXCHAR(man, lenman, cman); 1564bb2516aSBarry Smith if (!PetscOptionsObject) { 1574bb2516aSBarry Smith *ierr = PETSC_ERR_ARG_WRONGSTATE; 1584bb2516aSBarry Smith return; 1594bb2516aSBarry Smith } 1604bb2516aSBarry Smith PetscOptionsObject->count = 1; 1614bb2516aSBarry Smith *ierr = PetscOptionsEnum_Private(PetscOptionsObject, copt, ctext, cman, list, *currentvalue, ivalue, &flag); 1624bb2516aSBarry Smith if (*ierr) return; 1634bb2516aSBarry Smith if (!FORTRANNULLBOOL(flg)) *flg = flag; 1644bb2516aSBarry Smith FREECHAR(opt, copt); 1654bb2516aSBarry Smith FREECHAR(text, ctext); 1664bb2516aSBarry Smith FREECHAR(man, cman); 1674bb2516aSBarry Smith } 1684bb2516aSBarry Smith 1694bb2516aSBarry 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) 1704bb2516aSBarry Smith { 1714bb2516aSBarry Smith char *copt, *ctext, *cman; 1724bb2516aSBarry Smith 1734bb2516aSBarry Smith FIXCHAR(opt, lenopt, copt); 1744bb2516aSBarry Smith FIXCHAR(text, lentext, ctext); 1754bb2516aSBarry Smith FIXCHAR(man, lenman, cman); 1764bb2516aSBarry Smith if (!PetscOptionsObject) { 1774bb2516aSBarry Smith *ierr = PETSC_ERR_ARG_WRONGSTATE; 1784bb2516aSBarry Smith return; 1794bb2516aSBarry Smith } 1804bb2516aSBarry Smith PetscOptionsObject->count = 1; 1811690c2aeSBarry Smith *ierr = PetscOptionsInt_Private(PetscOptionsObject, copt, ctext, cman, *currentvalue, value, set, PETSC_INT_MIN, PETSC_INT_MAX); 1824bb2516aSBarry Smith if (*ierr) return; 1834bb2516aSBarry Smith FREECHAR(opt, copt); 1844bb2516aSBarry Smith FREECHAR(text, ctext); 1854bb2516aSBarry Smith FREECHAR(man, cman); 1864bb2516aSBarry Smith } 1874bb2516aSBarry Smith 1884bb2516aSBarry 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) 1894bb2516aSBarry Smith { 1904bb2516aSBarry Smith char *copt, *ctext, *cman; 1914bb2516aSBarry Smith 1924bb2516aSBarry Smith FIXCHAR(opt, lenopt, copt); 1934bb2516aSBarry Smith FIXCHAR(text, lentext, ctext); 1944bb2516aSBarry Smith FIXCHAR(man, lenman, cman); 1954bb2516aSBarry Smith if (!PetscOptionsObject) { 1964bb2516aSBarry Smith *ierr = PETSC_ERR_ARG_WRONGSTATE; 1974bb2516aSBarry Smith return; 1984bb2516aSBarry Smith } 1994bb2516aSBarry Smith PetscOptionsObject->count = 1; 2004bb2516aSBarry Smith *ierr = PetscOptionsIntArray_Private(PetscOptionsObject, copt, ctext, cman, currentvalue, n, set); 2014bb2516aSBarry Smith if (*ierr) return; 2024bb2516aSBarry Smith FREECHAR(opt, copt); 2034bb2516aSBarry Smith FREECHAR(text, ctext); 2044bb2516aSBarry Smith FREECHAR(man, cman); 2054bb2516aSBarry Smith } 2064bb2516aSBarry Smith 2074bb2516aSBarry 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) 2084bb2516aSBarry Smith { 2094bb2516aSBarry Smith char *copt, *ctext, *cman; 2104bb2516aSBarry Smith 2114bb2516aSBarry Smith FIXCHAR(opt, lenopt, copt); 2124bb2516aSBarry Smith FIXCHAR(text, lentext, ctext); 2134bb2516aSBarry Smith FIXCHAR(man, lenman, cman); 2144bb2516aSBarry Smith if (!PetscOptionsObject) { 2154bb2516aSBarry Smith *ierr = PETSC_ERR_ARG_WRONGSTATE; 2164bb2516aSBarry Smith return; 2174bb2516aSBarry Smith } 2184bb2516aSBarry Smith PetscOptionsObject->count = 1; 21952ce0ab5SPierre Jolivet *ierr = PetscOptionsReal_Private(PetscOptionsObject, copt, ctext, cman, *currentvalue, value, set, PETSC_MIN_REAL, PETSC_MAX_REAL); 2204bb2516aSBarry Smith if (*ierr) return; 2214bb2516aSBarry Smith FREECHAR(opt, copt); 2224bb2516aSBarry Smith FREECHAR(text, ctext); 2234bb2516aSBarry Smith FREECHAR(man, cman); 2244bb2516aSBarry Smith } 2254bb2516aSBarry Smith 2264bb2516aSBarry 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) 2274bb2516aSBarry Smith { 2284bb2516aSBarry Smith char *copt, *ctext, *cman; 2294bb2516aSBarry Smith 2304bb2516aSBarry Smith FIXCHAR(opt, lenopt, copt); 2314bb2516aSBarry Smith FIXCHAR(text, lentext, ctext); 2324bb2516aSBarry Smith FIXCHAR(man, lenman, cman); 2334bb2516aSBarry Smith if (!PetscOptionsObject) { 2344bb2516aSBarry Smith *ierr = PETSC_ERR_ARG_WRONGSTATE; 2354bb2516aSBarry Smith return; 2364bb2516aSBarry Smith } 2374bb2516aSBarry Smith PetscOptionsObject->count = 1; 2384bb2516aSBarry Smith *ierr = PetscOptionsRealArray_Private(PetscOptionsObject, copt, ctext, cman, currentvalue, n, set); 2394bb2516aSBarry Smith if (*ierr) return; 2404bb2516aSBarry Smith FREECHAR(opt, copt); 2414bb2516aSBarry Smith FREECHAR(text, ctext); 2424bb2516aSBarry Smith FREECHAR(man, cman); 2434bb2516aSBarry Smith } 2444bb2516aSBarry Smith 2454bb2516aSBarry 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) 2464bb2516aSBarry Smith { 2474bb2516aSBarry Smith char *copt, *ctext, *cman; 2484bb2516aSBarry Smith 2494bb2516aSBarry Smith FIXCHAR(opt, lenopt, copt); 2504bb2516aSBarry Smith FIXCHAR(text, lentext, ctext); 2514bb2516aSBarry Smith FIXCHAR(man, lenman, cman); 2524bb2516aSBarry Smith if (!PetscOptionsObject) { 2534bb2516aSBarry Smith *ierr = PETSC_ERR_ARG_WRONGSTATE; 2544bb2516aSBarry Smith return; 2554bb2516aSBarry Smith } 2564bb2516aSBarry Smith PetscOptionsObject->count = 1; 2574bb2516aSBarry Smith *ierr = PetscOptionsScalar_Private(PetscOptionsObject, copt, ctext, cman, *currentvalue, value, set); 2584bb2516aSBarry Smith if (*ierr) return; 2594bb2516aSBarry Smith FREECHAR(opt, copt); 2604bb2516aSBarry Smith FREECHAR(text, ctext); 2614bb2516aSBarry Smith FREECHAR(man, cman); 2624bb2516aSBarry Smith } 2634bb2516aSBarry Smith 2644bb2516aSBarry 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) 2654bb2516aSBarry Smith { 2664bb2516aSBarry Smith char *copt, *ctext, *cman; 2674bb2516aSBarry Smith 2684bb2516aSBarry Smith FIXCHAR(opt, lenopt, copt); 2694bb2516aSBarry Smith FIXCHAR(text, lentext, ctext); 2704bb2516aSBarry Smith FIXCHAR(man, lenman, cman); 2714bb2516aSBarry Smith if (!PetscOptionsObject) { 2724bb2516aSBarry Smith *ierr = PETSC_ERR_ARG_WRONGSTATE; 2734bb2516aSBarry Smith return; 2744bb2516aSBarry Smith } 2754bb2516aSBarry Smith PetscOptionsObject->count = 1; 2764bb2516aSBarry Smith *ierr = PetscOptionsScalarArray_Private(PetscOptionsObject, copt, ctext, cman, currentvalue, n, set); 2774bb2516aSBarry Smith if (*ierr) return; 2784bb2516aSBarry Smith FREECHAR(opt, copt); 2794bb2516aSBarry Smith FREECHAR(text, ctext); 2804bb2516aSBarry Smith FREECHAR(man, cman); 2814bb2516aSBarry Smith } 2824bb2516aSBarry Smith 2834bb2516aSBarry 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) 2844bb2516aSBarry Smith { 2854bb2516aSBarry Smith char *copt, *ctext, *cman, *ccurrent; 2864bb2516aSBarry Smith PetscBool flag; 2874bb2516aSBarry Smith 2884bb2516aSBarry Smith FIXCHAR(opt, lenopt, copt); 2894bb2516aSBarry Smith FIXCHAR(text, lentext, ctext); 2904bb2516aSBarry Smith FIXCHAR(man, lenman, cman); 2914bb2516aSBarry Smith FIXCHAR(currentvalue, lencurrent, ccurrent); 2924bb2516aSBarry Smith 2934bb2516aSBarry Smith if (!PetscOptionsObject) { 2944bb2516aSBarry Smith *ierr = PETSC_ERR_ARG_WRONGSTATE; 2954bb2516aSBarry Smith return; 2964bb2516aSBarry Smith } 2974bb2516aSBarry Smith PetscOptionsObject->count = 1; 2984bb2516aSBarry Smith 2994bb2516aSBarry Smith *ierr = PetscOptionsString_Private(PetscOptionsObject, copt, ctext, cman, ccurrent, value, lenvalue - 1, &flag); 3004bb2516aSBarry Smith if (*ierr) return; 3014bb2516aSBarry Smith if (!FORTRANNULLBOOL(flg)) *flg = flag; 3024bb2516aSBarry Smith FREECHAR(opt, copt); 3034bb2516aSBarry Smith FREECHAR(text, ctext); 3044bb2516aSBarry Smith FREECHAR(man, cman); 3054bb2516aSBarry Smith FREECHAR(currentvalue, ccurrent); 3064bb2516aSBarry Smith FIXRETURNCHAR(flag, value, lenvalue); 3074bb2516aSBarry Smith } 3089306f9a3SSatish Balay 309ce78bad3SBarry 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) 3109306f9a3SSatish Balay { 3119306f9a3SSatish Balay char *c1, *c2; 312ace3abfcSBarry Smith PetscBool flag; 3139306f9a3SSatish Balay 3149306f9a3SSatish Balay FIXCHAR(pre, len1, c1); 3159306f9a3SSatish Balay FIXCHAR(name, len2, c2); 316ce78bad3SBarry Smith *ierr = PetscOptionsGetEnum(*opt, c1, c2, list, ivalue, &flag); 3175975b3b6SBarry Smith if (*ierr) return; 3185c550465SJed Brown if (!FORTRANNULLBOOL(flg)) *flg = flag; 3199306f9a3SSatish Balay FREECHAR(pre, c1); 3209306f9a3SSatish Balay FREECHAR(name, c2); 3219306f9a3SSatish Balay } 3229306f9a3SSatish Balay 3235975b3b6SBarry 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) 3249306f9a3SSatish Balay { 3259306f9a3SSatish Balay char *c1, *c2, *c3; 3264610e317SSatish Balay size_t len3; 327ace3abfcSBarry Smith PetscBool flag; 3289306f9a3SSatish Balay 3299306f9a3SSatish Balay FIXCHAR(pre, len1, c1); 3309306f9a3SSatish Balay FIXCHAR(name, len2, c2); 3319306f9a3SSatish Balay c3 = string; 3329306f9a3SSatish Balay len3 = len - 1; 3339306f9a3SSatish Balay 3345975b3b6SBarry Smith *ierr = PetscOptionsGetString(*options, c1, c2, c3, len3, &flag); 3355975b3b6SBarry Smith if (*ierr) return; 3365c550465SJed Brown if (!FORTRANNULLBOOL(flg)) *flg = flag; 3379306f9a3SSatish Balay FREECHAR(pre, c1); 3389306f9a3SSatish Balay FREECHAR(name, c2); 3397c363081SBarry Smith FIXRETURNCHAR(flag, string, len); 3409306f9a3SSatish Balay } 341a530d236SBarry Smith PETSC_EXTERN void petscsubcommgetparent_(PetscSubcomm *scomm, MPI_Fint *pcomm, int *ierr) 342a530d236SBarry Smith { 343a530d236SBarry Smith MPI_Comm tcomm; 344ce78bad3SBarry Smith 345a530d236SBarry Smith *ierr = PetscSubcommGetParent(*scomm, &tcomm); 346a530d236SBarry Smith *pcomm = MPI_Comm_c2f(tcomm); 347a530d236SBarry Smith } 348a530d236SBarry Smith 349a530d236SBarry Smith PETSC_EXTERN void petscsubcommgetcontiguousparent_(PetscSubcomm *scomm, MPI_Fint *pcomm, int *ierr) 350a530d236SBarry Smith { 351a530d236SBarry Smith MPI_Comm tcomm; 352ce78bad3SBarry Smith 353a530d236SBarry Smith *ierr = PetscSubcommGetContiguousParent(*scomm, &tcomm); 354a530d236SBarry Smith *pcomm = MPI_Comm_c2f(tcomm); 355a530d236SBarry Smith } 356a530d236SBarry Smith 357a530d236SBarry Smith PETSC_EXTERN void petscsubcommgetchild_(PetscSubcomm *scomm, MPI_Fint *ccomm, int *ierr) 358a530d236SBarry Smith { 359a530d236SBarry Smith MPI_Comm tcomm; 360ce78bad3SBarry Smith 361a530d236SBarry Smith *ierr = PetscSubcommGetChild(*scomm, &tcomm); 362a530d236SBarry Smith *ccomm = MPI_Comm_c2f(tcomm); 363a530d236SBarry Smith } 364