xref: /petsc/src/sys/objects/ftn-custom/zoptionsf.c (revision 1690c2ae071c7584458d4e437df7b47bc4686b3c)
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
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
2808f86b60SJed Brown   #define petscoptionsgetbool_             PETSCOPTIONSGETBOOL
29b0c0aa2bSBlaise Bourdin   #define petscoptionsgetboolarray_        PETSCOPTIONSGETBOOLARRAY
309306f9a3SSatish Balay   #define petscoptionsgetintarray_         PETSCOPTIONSGETINTARRAY
319306f9a3SSatish Balay   #define petscoptionsgetint_              PETSCOPTIONSGETINT
329306f9a3SSatish Balay   #define petscoptionsgetreal_             PETSCOPTIONSGETREAL
337a7a6802SBarry Smith   #define petscoptionsgetscalar_           PETSCOPTIONSGETSCALAR
34b0c0aa2bSBlaise Bourdin   #define petscoptionsgetscalararray_      PETSCOPTIONSGETSCALARARRAY
359306f9a3SSatish Balay   #define petscoptionsgetrealarray_        PETSCOPTIONSGETREALARRAY
369306f9a3SSatish Balay   #define petscoptionsgetstring_           PETSCOPTIONSGETSTRING
379306f9a3SSatish Balay   #define petscgetprogramname              PETSCGETPROGRAMNAME
389306f9a3SSatish Balay #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE)
394bb2516aSBarry Smith   #define petscoptionsbegin_               petscoptionsbegin
404bb2516aSBarry Smith   #define petscoptionsend_                 petscoptionsend
414bb2516aSBarry Smith   #define petscoptionsbool_                petscoptionsbool
424bb2516aSBarry Smith   #define petscoptionsboolarray_           petscoptionsboolarray
4347582d61SSatish Balay   #define petscoptionsenumprivate_         petscoptionsenumprivate
444bb2516aSBarry Smith   #define petscoptionsint_                 petscoptionsint
454bb2516aSBarry Smith   #define petscoptionsintarray_            petscoptionsintarray
464bb2516aSBarry Smith   #define petscoptionsreal_                petscoptionsreal
474bb2516aSBarry Smith   #define petscoptionsrealarray_           petscoptionsrealarray
484bb2516aSBarry Smith   #define petscoptionsscalar_              petscoptionsscalar
494bb2516aSBarry Smith   #define petscoptionsscalararray_         petscoptionsscalararray
504bb2516aSBarry Smith   #define petscoptionsstring_              petscoptionsstring
51a530d236SBarry Smith   #define petscsubcommgetparent_           petscsubcommgetparent
52a530d236SBarry Smith   #define petscsubcommgetcontiguousparent_ petscsubcommgetcontiguousparent
53a530d236SBarry Smith   #define petscsubcommgetchild_            petscsubcommgetchild
54455a3cf9SBarry Smith   #define petscoptionsallused_             petscoptionsallused
5547340559SBarry Smith   #define petscoptionsgetenumprivate_      petscoptionsgetenumprivate
5608f86b60SJed Brown   #define petscoptionsgetbool_             petscoptionsgetbool
57b0c0aa2bSBlaise Bourdin   #define petscoptionsgetboolarray_        petscoptionsgetboolarray
589306f9a3SSatish Balay   #define petscoptionsgetint_              petscoptionsgetint
599306f9a3SSatish Balay   #define petscoptionsgetreal_             petscoptionsgetreal
607a7a6802SBarry Smith   #define petscoptionsgetscalar_           petscoptionsgetscalar
61b0c0aa2bSBlaise Bourdin   #define petscoptionsgetscalararray_      petscoptionsgetscalararray
629306f9a3SSatish Balay   #define petscoptionsgetrealarray_        petscoptionsgetrealarray
639306f9a3SSatish Balay   #define petscoptionsgetstring_           petscoptionsgetstring
649306f9a3SSatish Balay   #define petscoptionsgetintarray_         petscoptionsgetintarray
659306f9a3SSatish Balay   #define petscgetprogramname_             petscgetprogramname
669306f9a3SSatish Balay #endif
679306f9a3SSatish Balay 
684bb2516aSBarry Smith static PetscOptionItems PetscOptionsObjectBase, *PetscOptionsObject = NULL;
694bb2516aSBarry Smith 
704bb2516aSBarry 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)
714bb2516aSBarry Smith {
724bb2516aSBarry Smith   MPI_Comm comm = MPI_Comm_f2c(*fcomm);
734bb2516aSBarry Smith   char    *cprefix, *cmess, *csec;
744bb2516aSBarry Smith 
754bb2516aSBarry Smith   FIXCHAR(prefix, lenprefix, cprefix);
764bb2516aSBarry Smith   FIXCHAR(mess, lenmess, cmess);
774bb2516aSBarry Smith   FIXCHAR(sec, lensec, csec);
784bb2516aSBarry Smith   if (PetscOptionsObject) {
794bb2516aSBarry Smith     *ierr = PETSC_ERR_ARG_WRONGSTATE;
804bb2516aSBarry Smith     return;
814bb2516aSBarry Smith   }
824bb2516aSBarry Smith   PetscOptionsObject = &PetscOptionsObjectBase;
834bb2516aSBarry Smith   *ierr              = PetscMemzero(PetscOptionsObject, sizeof(*PetscOptionsObject));
844bb2516aSBarry Smith   if (*ierr) return;
854bb2516aSBarry Smith   PetscOptionsObject->count = 1;
864bb2516aSBarry Smith   *ierr                     = PetscOptionsBegin_Private(PetscOptionsObject, comm, cprefix, cmess, csec);
874bb2516aSBarry Smith   if (*ierr) return;
884bb2516aSBarry Smith   FREECHAR(prefix, cprefix);
894bb2516aSBarry Smith   FREECHAR(mess, cmess);
904bb2516aSBarry Smith   FREECHAR(sec, csec);
914bb2516aSBarry Smith }
924bb2516aSBarry Smith 
934bb2516aSBarry Smith PETSC_EXTERN void petscoptionsend_(PetscErrorCode *ierr)
944bb2516aSBarry Smith {
954bb2516aSBarry Smith   if (!PetscOptionsObject) {
964bb2516aSBarry Smith     *ierr = PETSC_ERR_ARG_WRONGSTATE;
974bb2516aSBarry Smith     return;
984bb2516aSBarry Smith   }
994bb2516aSBarry Smith   PetscOptionsObject->count = 1;
1004bb2516aSBarry Smith   *ierr                     = PetscOptionsEnd_Private(PetscOptionsObject);
1014bb2516aSBarry Smith   PetscOptionsObject        = NULL;
1024bb2516aSBarry Smith }
1034bb2516aSBarry Smith 
1044bb2516aSBarry 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)
1054bb2516aSBarry Smith {
1064bb2516aSBarry Smith   char *copt, *ctext, *cman;
1074bb2516aSBarry Smith 
1084bb2516aSBarry Smith   FIXCHAR(opt, lenopt, copt);
1094bb2516aSBarry Smith   FIXCHAR(text, lentext, ctext);
1104bb2516aSBarry Smith   FIXCHAR(man, lenman, cman);
1114bb2516aSBarry Smith   if (!PetscOptionsObject) {
1124bb2516aSBarry Smith     *ierr = PETSC_ERR_ARG_WRONGSTATE;
1134bb2516aSBarry Smith     return;
1144bb2516aSBarry Smith   }
1154bb2516aSBarry Smith   PetscOptionsObject->count = 1;
1164bb2516aSBarry Smith   *ierr                     = PetscOptionsBool_Private(PetscOptionsObject, copt, ctext, cman, *currentvalue, value, set);
1174bb2516aSBarry Smith   if (*ierr) return;
1184bb2516aSBarry Smith   FREECHAR(opt, copt);
1194bb2516aSBarry Smith   FREECHAR(text, ctext);
1204bb2516aSBarry Smith   FREECHAR(man, cman);
1214bb2516aSBarry Smith }
1224bb2516aSBarry Smith 
1234bb2516aSBarry 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)
1244bb2516aSBarry Smith {
1254bb2516aSBarry Smith   char     *copt, *ctext, *cman;
1264bb2516aSBarry Smith   PetscBool flag;
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                     = PetscOptionsBoolArray_Private(PetscOptionsObject, copt, ctext, cman, dvalue, nmax, &flag);
1374bb2516aSBarry Smith   if (*ierr) return;
1384bb2516aSBarry Smith   if (!FORTRANNULLBOOL(flg)) *flg = flag;
1394bb2516aSBarry Smith   FREECHAR(opt, copt);
1404bb2516aSBarry Smith   FREECHAR(text, ctext);
1414bb2516aSBarry Smith   FREECHAR(man, cman);
1424bb2516aSBarry Smith }
1434bb2516aSBarry Smith 
1444bb2516aSBarry 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)
1454bb2516aSBarry Smith {
1464bb2516aSBarry Smith   char     *copt, *ctext, *cman;
1474bb2516aSBarry Smith   PetscBool flag;
1484bb2516aSBarry Smith 
1494bb2516aSBarry Smith   FIXCHAR(opt, lenopt, copt);
1504bb2516aSBarry Smith   FIXCHAR(text, lentext, ctext);
1514bb2516aSBarry Smith   FIXCHAR(man, lenman, cman);
1524bb2516aSBarry Smith   if (!PetscOptionsObject) {
1534bb2516aSBarry Smith     *ierr = PETSC_ERR_ARG_WRONGSTATE;
1544bb2516aSBarry Smith     return;
1554bb2516aSBarry Smith   }
1564bb2516aSBarry Smith   PetscOptionsObject->count = 1;
1574bb2516aSBarry Smith   *ierr                     = PetscOptionsEnum_Private(PetscOptionsObject, copt, ctext, cman, list, *currentvalue, ivalue, &flag);
1584bb2516aSBarry Smith   if (*ierr) return;
1594bb2516aSBarry Smith   if (!FORTRANNULLBOOL(flg)) *flg = flag;
1604bb2516aSBarry Smith   FREECHAR(opt, copt);
1614bb2516aSBarry Smith   FREECHAR(text, ctext);
1624bb2516aSBarry Smith   FREECHAR(man, cman);
1634bb2516aSBarry Smith }
1644bb2516aSBarry Smith 
1654bb2516aSBarry 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)
1664bb2516aSBarry Smith {
1674bb2516aSBarry Smith   char *copt, *ctext, *cman;
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;
177*1690c2aeSBarry Smith   *ierr                     = PetscOptionsInt_Private(PetscOptionsObject, copt, ctext, cman, *currentvalue, value, set, PETSC_INT_MIN, PETSC_INT_MAX);
1784bb2516aSBarry Smith   if (*ierr) return;
1794bb2516aSBarry Smith   FREECHAR(opt, copt);
1804bb2516aSBarry Smith   FREECHAR(text, ctext);
1814bb2516aSBarry Smith   FREECHAR(man, cman);
1824bb2516aSBarry Smith }
1834bb2516aSBarry Smith 
1844bb2516aSBarry 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)
1854bb2516aSBarry Smith {
1864bb2516aSBarry Smith   char *copt, *ctext, *cman;
1874bb2516aSBarry Smith 
1884bb2516aSBarry Smith   FIXCHAR(opt, lenopt, copt);
1894bb2516aSBarry Smith   FIXCHAR(text, lentext, ctext);
1904bb2516aSBarry Smith   FIXCHAR(man, lenman, cman);
1914bb2516aSBarry Smith   if (!PetscOptionsObject) {
1924bb2516aSBarry Smith     *ierr = PETSC_ERR_ARG_WRONGSTATE;
1934bb2516aSBarry Smith     return;
1944bb2516aSBarry Smith   }
1954bb2516aSBarry Smith   PetscOptionsObject->count = 1;
1964bb2516aSBarry Smith   *ierr                     = PetscOptionsIntArray_Private(PetscOptionsObject, copt, ctext, cman, currentvalue, n, set);
1974bb2516aSBarry Smith   if (*ierr) return;
1984bb2516aSBarry Smith   FREECHAR(opt, copt);
1994bb2516aSBarry Smith   FREECHAR(text, ctext);
2004bb2516aSBarry Smith   FREECHAR(man, cman);
2014bb2516aSBarry Smith }
2024bb2516aSBarry Smith 
2034bb2516aSBarry 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)
2044bb2516aSBarry Smith {
2054bb2516aSBarry Smith   char *copt, *ctext, *cman;
2064bb2516aSBarry Smith 
2074bb2516aSBarry Smith   FIXCHAR(opt, lenopt, copt);
2084bb2516aSBarry Smith   FIXCHAR(text, lentext, ctext);
2094bb2516aSBarry Smith   FIXCHAR(man, lenman, cman);
2104bb2516aSBarry Smith   if (!PetscOptionsObject) {
2114bb2516aSBarry Smith     *ierr = PETSC_ERR_ARG_WRONGSTATE;
2124bb2516aSBarry Smith     return;
2134bb2516aSBarry Smith   }
2144bb2516aSBarry Smith   PetscOptionsObject->count = 1;
21552ce0ab5SPierre Jolivet   *ierr                     = PetscOptionsReal_Private(PetscOptionsObject, copt, ctext, cman, *currentvalue, value, set, PETSC_MIN_REAL, PETSC_MAX_REAL);
2164bb2516aSBarry Smith   if (*ierr) return;
2174bb2516aSBarry Smith   FREECHAR(opt, copt);
2184bb2516aSBarry Smith   FREECHAR(text, ctext);
2194bb2516aSBarry Smith   FREECHAR(man, cman);
2204bb2516aSBarry Smith }
2214bb2516aSBarry Smith 
2224bb2516aSBarry 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)
2234bb2516aSBarry Smith {
2244bb2516aSBarry Smith   char *copt, *ctext, *cman;
2254bb2516aSBarry Smith 
2264bb2516aSBarry Smith   FIXCHAR(opt, lenopt, copt);
2274bb2516aSBarry Smith   FIXCHAR(text, lentext, ctext);
2284bb2516aSBarry Smith   FIXCHAR(man, lenman, cman);
2294bb2516aSBarry Smith   if (!PetscOptionsObject) {
2304bb2516aSBarry Smith     *ierr = PETSC_ERR_ARG_WRONGSTATE;
2314bb2516aSBarry Smith     return;
2324bb2516aSBarry Smith   }
2334bb2516aSBarry Smith   PetscOptionsObject->count = 1;
2344bb2516aSBarry Smith   *ierr                     = PetscOptionsRealArray_Private(PetscOptionsObject, copt, ctext, cman, currentvalue, n, set);
2354bb2516aSBarry Smith   if (*ierr) return;
2364bb2516aSBarry Smith   FREECHAR(opt, copt);
2374bb2516aSBarry Smith   FREECHAR(text, ctext);
2384bb2516aSBarry Smith   FREECHAR(man, cman);
2394bb2516aSBarry Smith }
2404bb2516aSBarry Smith 
2414bb2516aSBarry 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)
2424bb2516aSBarry Smith {
2434bb2516aSBarry Smith   char *copt, *ctext, *cman;
2444bb2516aSBarry Smith 
2454bb2516aSBarry Smith   FIXCHAR(opt, lenopt, copt);
2464bb2516aSBarry Smith   FIXCHAR(text, lentext, ctext);
2474bb2516aSBarry Smith   FIXCHAR(man, lenman, cman);
2484bb2516aSBarry Smith   if (!PetscOptionsObject) {
2494bb2516aSBarry Smith     *ierr = PETSC_ERR_ARG_WRONGSTATE;
2504bb2516aSBarry Smith     return;
2514bb2516aSBarry Smith   }
2524bb2516aSBarry Smith   PetscOptionsObject->count = 1;
2534bb2516aSBarry Smith   *ierr                     = PetscOptionsScalar_Private(PetscOptionsObject, copt, ctext, cman, *currentvalue, value, set);
2544bb2516aSBarry Smith   if (*ierr) return;
2554bb2516aSBarry Smith   FREECHAR(opt, copt);
2564bb2516aSBarry Smith   FREECHAR(text, ctext);
2574bb2516aSBarry Smith   FREECHAR(man, cman);
2584bb2516aSBarry Smith }
2594bb2516aSBarry Smith 
2604bb2516aSBarry 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)
2614bb2516aSBarry Smith {
2624bb2516aSBarry Smith   char *copt, *ctext, *cman;
2634bb2516aSBarry Smith 
2644bb2516aSBarry Smith   FIXCHAR(opt, lenopt, copt);
2654bb2516aSBarry Smith   FIXCHAR(text, lentext, ctext);
2664bb2516aSBarry Smith   FIXCHAR(man, lenman, cman);
2674bb2516aSBarry Smith   if (!PetscOptionsObject) {
2684bb2516aSBarry Smith     *ierr = PETSC_ERR_ARG_WRONGSTATE;
2694bb2516aSBarry Smith     return;
2704bb2516aSBarry Smith   }
2714bb2516aSBarry Smith   PetscOptionsObject->count = 1;
2724bb2516aSBarry Smith   *ierr                     = PetscOptionsScalarArray_Private(PetscOptionsObject, copt, ctext, cman, currentvalue, n, set);
2734bb2516aSBarry Smith   if (*ierr) return;
2744bb2516aSBarry Smith   FREECHAR(opt, copt);
2754bb2516aSBarry Smith   FREECHAR(text, ctext);
2764bb2516aSBarry Smith   FREECHAR(man, cman);
2774bb2516aSBarry Smith }
2784bb2516aSBarry Smith 
2794bb2516aSBarry 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)
2804bb2516aSBarry Smith {
2814bb2516aSBarry Smith   char     *copt, *ctext, *cman, *ccurrent;
2824bb2516aSBarry Smith   PetscBool flag;
2834bb2516aSBarry Smith 
2844bb2516aSBarry Smith   FIXCHAR(opt, lenopt, copt);
2854bb2516aSBarry Smith   FIXCHAR(text, lentext, ctext);
2864bb2516aSBarry Smith   FIXCHAR(man, lenman, cman);
2874bb2516aSBarry Smith   FIXCHAR(currentvalue, lencurrent, ccurrent);
2884bb2516aSBarry Smith 
2894bb2516aSBarry Smith   if (!PetscOptionsObject) {
2904bb2516aSBarry Smith     *ierr = PETSC_ERR_ARG_WRONGSTATE;
2914bb2516aSBarry Smith     return;
2924bb2516aSBarry Smith   }
2934bb2516aSBarry Smith   PetscOptionsObject->count = 1;
2944bb2516aSBarry Smith 
2954bb2516aSBarry Smith   *ierr = PetscOptionsString_Private(PetscOptionsObject, copt, ctext, cman, ccurrent, value, lenvalue - 1, &flag);
2964bb2516aSBarry Smith   if (*ierr) return;
2974bb2516aSBarry Smith   if (!FORTRANNULLBOOL(flg)) *flg = flag;
2984bb2516aSBarry Smith   FREECHAR(opt, copt);
2994bb2516aSBarry Smith   FREECHAR(text, ctext);
3004bb2516aSBarry Smith   FREECHAR(man, cman);
3014bb2516aSBarry Smith   FREECHAR(currentvalue, ccurrent);
3024bb2516aSBarry Smith   FIXRETURNCHAR(flag, value, lenvalue);
3034bb2516aSBarry Smith }
3049306f9a3SSatish Balay 
3055975b3b6SBarry 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)
3069306f9a3SSatish Balay {
3079306f9a3SSatish Balay   char     *c1, *c2;
308ace3abfcSBarry Smith   PetscBool flag;
3099306f9a3SSatish Balay 
3109306f9a3SSatish Balay   FIXCHAR(pre, len1, c1);
3119306f9a3SSatish Balay   FIXCHAR(name, len2, c2);
3125975b3b6SBarry Smith   *ierr = PetscOptionsGetInt(*opt, c1, c2, ivalue, &flag);
3135975b3b6SBarry Smith   if (*ierr) return;
3145c550465SJed Brown   if (!FORTRANNULLBOOL(flg)) *flg = flag;
3159306f9a3SSatish Balay   FREECHAR(pre, c1);
3169306f9a3SSatish Balay   FREECHAR(name, c2);
3179306f9a3SSatish Balay }
3189306f9a3SSatish Balay 
3195975b3b6SBarry 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)
32047340559SBarry Smith {
32147340559SBarry Smith   char     *c1, *c2;
32247340559SBarry Smith   PetscBool flag;
32347340559SBarry Smith 
32447340559SBarry Smith   FIXCHAR(pre, len1, c1);
32547340559SBarry Smith   FIXCHAR(name, len2, c2);
3265975b3b6SBarry Smith   *ierr = PetscOptionsGetEnum(*options, c1, c2, list, ivalue, &flag);
3275975b3b6SBarry Smith   if (*ierr) return;
32847340559SBarry Smith   if (!FORTRANNULLBOOL(flg)) *flg = flag;
32947340559SBarry Smith   FREECHAR(pre, c1);
33047340559SBarry Smith   FREECHAR(name, c2);
33147340559SBarry Smith }
33247340559SBarry Smith 
3335975b3b6SBarry 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)
3349306f9a3SSatish Balay {
3359306f9a3SSatish Balay   char     *c1, *c2;
336ace3abfcSBarry Smith   PetscBool flag;
3379306f9a3SSatish Balay 
3389306f9a3SSatish Balay   FIXCHAR(pre, len1, c1);
3399306f9a3SSatish Balay   FIXCHAR(name, len2, c2);
3405975b3b6SBarry Smith   *ierr = PetscOptionsGetBool(*options, c1, c2, ivalue, &flag);
3415975b3b6SBarry Smith   if (*ierr) return;
3425c550465SJed Brown   if (!FORTRANNULLBOOL(flg)) *flg = flag;
3439306f9a3SSatish Balay   FREECHAR(pre, c1);
3449306f9a3SSatish Balay   FREECHAR(name, c2);
3459306f9a3SSatish Balay }
3469306f9a3SSatish Balay 
3475975b3b6SBarry 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)
348b0c0aa2bSBlaise Bourdin {
349b0c0aa2bSBlaise Bourdin   char     *c1, *c2;
350b0c0aa2bSBlaise Bourdin   PetscBool flag;
351b0c0aa2bSBlaise Bourdin 
352b0c0aa2bSBlaise Bourdin   FIXCHAR(pre, len1, c1);
353b0c0aa2bSBlaise Bourdin   FIXCHAR(name, len2, c2);
3545975b3b6SBarry Smith   *ierr = PetscOptionsGetBoolArray(*options, c1, c2, dvalue, nmax, &flag);
3555975b3b6SBarry Smith   if (*ierr) return;
356b0c0aa2bSBlaise Bourdin   if (!FORTRANNULLBOOL(flg)) *flg = flag;
357b0c0aa2bSBlaise Bourdin   FREECHAR(pre, c1);
358b0c0aa2bSBlaise Bourdin   FREECHAR(name, c2);
359b0c0aa2bSBlaise Bourdin }
360b0c0aa2bSBlaise Bourdin 
3615975b3b6SBarry 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)
3629306f9a3SSatish Balay {
3639306f9a3SSatish Balay   char     *c1, *c2;
364ace3abfcSBarry Smith   PetscBool flag;
3659306f9a3SSatish Balay 
3669306f9a3SSatish Balay   FIXCHAR(pre, len1, c1);
3679306f9a3SSatish Balay   FIXCHAR(name, len2, c2);
3685975b3b6SBarry Smith   *ierr = PetscOptionsGetReal(*options, c1, c2, dvalue, &flag);
3695975b3b6SBarry Smith   if (*ierr) return;
3705c550465SJed Brown   if (!FORTRANNULLBOOL(flg)) *flg = flag;
3719306f9a3SSatish Balay   FREECHAR(pre, c1);
3729306f9a3SSatish Balay   FREECHAR(name, c2);
3739306f9a3SSatish Balay }
3749306f9a3SSatish Balay 
3755975b3b6SBarry 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)
3767a7a6802SBarry Smith {
3777a7a6802SBarry Smith   char     *c1, *c2;
3787a7a6802SBarry Smith   PetscBool flag;
3797a7a6802SBarry Smith 
3807a7a6802SBarry Smith   FIXCHAR(pre, len1, c1);
3817a7a6802SBarry Smith   FIXCHAR(name, len2, c2);
3825975b3b6SBarry Smith   *ierr = PetscOptionsGetScalar(*options, c1, c2, dvalue, &flag);
3835975b3b6SBarry Smith   if (*ierr) return;
3847a7a6802SBarry Smith   if (!FORTRANNULLBOOL(flg)) *flg = flag;
3857a7a6802SBarry Smith   FREECHAR(pre, c1);
3867a7a6802SBarry Smith   FREECHAR(name, c2);
3877a7a6802SBarry Smith }
3887a7a6802SBarry Smith 
3895975b3b6SBarry 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)
390b0c0aa2bSBlaise Bourdin {
391b0c0aa2bSBlaise Bourdin   char     *c1, *c2;
392b0c0aa2bSBlaise Bourdin   PetscBool flag;
393b0c0aa2bSBlaise Bourdin 
394b0c0aa2bSBlaise Bourdin   FIXCHAR(pre, len1, c1);
395b0c0aa2bSBlaise Bourdin   FIXCHAR(name, len2, c2);
3965975b3b6SBarry Smith   *ierr = PetscOptionsGetScalarArray(*options, c1, c2, dvalue, nmax, &flag);
3975975b3b6SBarry Smith   if (*ierr) return;
398b0c0aa2bSBlaise Bourdin   if (!FORTRANNULLBOOL(flg)) *flg = flag;
399b0c0aa2bSBlaise Bourdin   FREECHAR(pre, c1);
400b0c0aa2bSBlaise Bourdin   FREECHAR(name, c2);
401b0c0aa2bSBlaise Bourdin }
402b0c0aa2bSBlaise Bourdin 
4035975b3b6SBarry 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)
4049306f9a3SSatish Balay {
4059306f9a3SSatish Balay   char     *c1, *c2;
406ace3abfcSBarry Smith   PetscBool flag;
4079306f9a3SSatish Balay 
4089306f9a3SSatish Balay   FIXCHAR(pre, len1, c1);
4099306f9a3SSatish Balay   FIXCHAR(name, len2, c2);
4105975b3b6SBarry Smith   *ierr = PetscOptionsGetRealArray(*options, c1, c2, dvalue, nmax, &flag);
4115975b3b6SBarry Smith   if (*ierr) return;
4125c550465SJed Brown   if (!FORTRANNULLBOOL(flg)) *flg = flag;
4139306f9a3SSatish Balay   FREECHAR(pre, c1);
4149306f9a3SSatish Balay   FREECHAR(name, c2);
4159306f9a3SSatish Balay }
4169306f9a3SSatish Balay 
4175975b3b6SBarry 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)
4189306f9a3SSatish Balay {
4199306f9a3SSatish Balay   char     *c1, *c2;
420ace3abfcSBarry Smith   PetscBool flag;
4219306f9a3SSatish Balay 
4229306f9a3SSatish Balay   FIXCHAR(pre, len1, c1);
4239306f9a3SSatish Balay   FIXCHAR(name, len2, c2);
4245975b3b6SBarry Smith   *ierr = PetscOptionsGetIntArray(*options, c1, c2, dvalue, nmax, &flag);
4255975b3b6SBarry Smith   if (*ierr) return;
4265c550465SJed Brown   if (!FORTRANNULLBOOL(flg)) *flg = flag;
4279306f9a3SSatish Balay   FREECHAR(pre, c1);
4289306f9a3SSatish Balay   FREECHAR(name, c2);
4299306f9a3SSatish Balay }
4309306f9a3SSatish Balay 
4315975b3b6SBarry 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)
4329306f9a3SSatish Balay {
4339306f9a3SSatish Balay   char     *c1, *c2, *c3;
4344610e317SSatish Balay   size_t    len3;
435ace3abfcSBarry Smith   PetscBool flag;
4369306f9a3SSatish Balay 
4379306f9a3SSatish Balay   FIXCHAR(pre, len1, c1);
4389306f9a3SSatish Balay   FIXCHAR(name, len2, c2);
4399306f9a3SSatish Balay   c3   = string;
4409306f9a3SSatish Balay   len3 = len - 1;
4419306f9a3SSatish Balay 
4425975b3b6SBarry Smith   *ierr = PetscOptionsGetString(*options, c1, c2, c3, len3, &flag);
4435975b3b6SBarry Smith   if (*ierr) return;
4445c550465SJed Brown   if (!FORTRANNULLBOOL(flg)) *flg = flag;
4459306f9a3SSatish Balay   FREECHAR(pre, c1);
4469306f9a3SSatish Balay   FREECHAR(name, c2);
4477c363081SBarry Smith   FIXRETURNCHAR(flag, string, len);
4489306f9a3SSatish Balay }
4499306f9a3SSatish Balay 
45019caf8f3SSatish Balay PETSC_EXTERN void petscgetprogramname_(char *name, PetscErrorCode *ierr, PETSC_FORTRAN_CHARLEN_T len_in)
4519306f9a3SSatish Balay {
4529306f9a3SSatish Balay   char  *tmp;
4534610e317SSatish Balay   size_t len;
4549306f9a3SSatish Balay   tmp   = name;
4559306f9a3SSatish Balay   len   = len_in - 1;
4569306f9a3SSatish Balay   *ierr = PetscGetProgramName(tmp, len);
4577c363081SBarry Smith   FIXRETURNCHAR(PETSC_TRUE, name, len_in);
4589306f9a3SSatish Balay }
4599306f9a3SSatish Balay 
460a530d236SBarry Smith PETSC_EXTERN void petscsubcommgetparent_(PetscSubcomm *scomm, MPI_Fint *pcomm, int *ierr)
461a530d236SBarry Smith {
462a530d236SBarry Smith   MPI_Comm tcomm;
463a530d236SBarry Smith   *ierr  = PetscSubcommGetParent(*scomm, &tcomm);
464a530d236SBarry Smith   *pcomm = MPI_Comm_c2f(tcomm);
465a530d236SBarry Smith }
466a530d236SBarry Smith 
467a530d236SBarry Smith PETSC_EXTERN void petscsubcommgetcontiguousparent_(PetscSubcomm *scomm, MPI_Fint *pcomm, int *ierr)
468a530d236SBarry Smith {
469a530d236SBarry Smith   MPI_Comm tcomm;
470a530d236SBarry Smith   *ierr  = PetscSubcommGetContiguousParent(*scomm, &tcomm);
471a530d236SBarry Smith   *pcomm = MPI_Comm_c2f(tcomm);
472a530d236SBarry Smith }
473a530d236SBarry Smith 
474a530d236SBarry Smith PETSC_EXTERN void petscsubcommgetchild_(PetscSubcomm *scomm, MPI_Fint *ccomm, int *ierr)
475a530d236SBarry Smith {
476a530d236SBarry Smith   MPI_Comm tcomm;
477a530d236SBarry Smith   *ierr  = PetscSubcommGetChild(*scomm, &tcomm);
478a530d236SBarry Smith   *ccomm = MPI_Comm_c2f(tcomm);
479a530d236SBarry Smith }
480