xref: /petsc/src/sys/objects/ftn-custom/zoptionsf.c (revision b14c0cba86c80bea38e1b0328b4d7f26a0257820)
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)
11a530d236SBarry Smith #define petscsubcommview_                  PETSCSUBCOMMVIEW
12a530d236SBarry Smith #define petscsubcommgetparent_             PETSCSUBCOMMGETPARENT
13a530d236SBarry Smith #define petscsubcommgetcontiguousparent_   PETSCSUBCOMMGETCONTIGUOUSPARENT
14a530d236SBarry Smith #define petscsubcommgetchild_              PETSCSUBCOMMGETCHILD
15455a3cf9SBarry Smith #define petscoptionsallused_               PETSCOPTIONSALLUSED
1647340559SBarry Smith #define petscoptionsgetenumprivate_        PETSCOPTIONSGETENUMPRIVATE
1708f86b60SJed Brown #define petscoptionsgetbool_               PETSCOPTIONSGETBOOL
189306f9a3SSatish Balay #define petscoptionsgetintarray_           PETSCOPTIONSGETINTARRAY
199306f9a3SSatish Balay #define petscoptionssetvalue_              PETSCOPTIONSSETVALUE
209306f9a3SSatish Balay #define petscoptionsclearvalue_            PETSCOPTIONSCLEARVALUE
219306f9a3SSatish Balay #define petscoptionshasname_               PETSCOPTIONSHASNAME
229306f9a3SSatish Balay #define petscoptionsgetint_                PETSCOPTIONSGETINT
239306f9a3SSatish Balay #define petscoptionsgetreal_               PETSCOPTIONSGETREAL
247a7a6802SBarry Smith #define petscoptionsgetscalar_             PETSCOPTIONSGETSCALAR
259306f9a3SSatish Balay #define petscoptionsgetrealarray_          PETSCOPTIONSGETREALARRAY
269306f9a3SSatish Balay #define petscoptionsgetstring_             PETSCOPTIONSGETSTRING
279306f9a3SSatish Balay #define petscgetprogramname                PETSCGETPROGRAMNAME
289306f9a3SSatish Balay #define petscoptionsinsertfile_            PETSCOPTIONSINSERTFILE
29a542b6e8SBarry Smith #define petscoptionsclear_                 PETSCOPTIONSCLEAR
30ab66e762SBarry Smith #define petscoptionsinsertstring_          PETSCOPTIONSINSERTSTRING
313a15af8cSBlaise Bourdin #define petscoptionsview_                  PETSCOPTIONSVIEW
32ac9b46efSSatish Balay #define petscoptionsleft_                  PETSCOPTIONSLEFT
33a2865142SMatthew G. Knepley #define petscobjectviewfromoptions_        PETSCOBJECTVIEWFROMOPTIONS
349306f9a3SSatish Balay #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE)
35a530d236SBarry Smith #define petscsubcommview_                  petscsubcommview
36a530d236SBarry Smith #define petscsubcommgetparent_             petscsubcommgetparent
37a530d236SBarry Smith #define petscsubcommgetcontiguousparent_   petscsubcommgetcontiguousparent
38a530d236SBarry Smith #define petscsubcommgetchild_              petscsubcommgetchild
39455a3cf9SBarry Smith #define petscoptionsallused_               petscoptionsallused
4047340559SBarry Smith #define petscoptionsgetenumprivate_        petscoptionsgetenumprivate
4108f86b60SJed Brown #define petscoptionsgetbool_               petscoptionsgetbool
429306f9a3SSatish Balay #define petscoptionssetvalue_              petscoptionssetvalue
439306f9a3SSatish Balay #define petscoptionsclearvalue_            petscoptionsclearvalue
449306f9a3SSatish Balay #define petscoptionshasname_               petscoptionshasname
459306f9a3SSatish Balay #define petscoptionsgetint_                petscoptionsgetint
469306f9a3SSatish Balay #define petscoptionsgetreal_               petscoptionsgetreal
477a7a6802SBarry Smith #define petscoptionsgetscalar_             petscoptionsgetscalar
489306f9a3SSatish Balay #define petscoptionsgetrealarray_          petscoptionsgetrealarray
499306f9a3SSatish Balay #define petscoptionsgetstring_             petscoptionsgetstring
509306f9a3SSatish Balay #define petscoptionsgetintarray_           petscoptionsgetintarray
519306f9a3SSatish Balay #define petscgetprogramname_               petscgetprogramname
529306f9a3SSatish Balay #define petscoptionsinsertfile_            petscoptionsinsertfile
53a542b6e8SBarry Smith #define petscoptionsclear_                 petscoptionsclear
54ab66e762SBarry Smith #define petscoptionsinsertstring_          petscoptionsinsertstring
553a15af8cSBlaise Bourdin #define petscoptionsview_                  petscoptionsview
56ac9b46efSSatish Balay #define petscoptionsleft_                  petscoptionsleft
57a2865142SMatthew G. Knepley #define petscobjectviewfromoptions_        petscobjectviewfromoptions
589306f9a3SSatish Balay #endif
599306f9a3SSatish Balay 
609306f9a3SSatish Balay /* ---------------------------------------------------------------------*/
619306f9a3SSatish Balay 
6219caf8f3SSatish Balay PETSC_EXTERN void petscoptionsinsertstring_(PetscOptions *options,char* file,PetscErrorCode *ierr,PETSC_FORTRAN_CHARLEN_T len)
63ab66e762SBarry Smith {
64ab66e762SBarry Smith   char *c1;
65ab66e762SBarry Smith 
66ab66e762SBarry Smith   FIXCHAR(file,len,c1);
67d49bb8f9SBarry Smith   *ierr = PetscOptionsInsertString(*options,c1);if (*ierr) return;
68ab66e762SBarry Smith   FREECHAR(file,c1);
69ab66e762SBarry Smith }
70ab66e762SBarry Smith 
7119caf8f3SSatish Balay PETSC_EXTERN void petscoptionsinsertfile_(MPI_Fint *comm,PetscOptions *options,char* file,PetscBool *require,PetscErrorCode *ierr,PETSC_FORTRAN_CHARLEN_T len)
729306f9a3SSatish Balay {
739306f9a3SSatish Balay   char *c1;
749306f9a3SSatish Balay 
759306f9a3SSatish Balay   FIXCHAR(file,len,c1);
76d49bb8f9SBarry Smith   *ierr = PetscOptionsInsertFile(MPI_Comm_f2c(*comm),*options,c1,*require);if (*ierr) return;
779306f9a3SSatish Balay   FREECHAR(file,c1);
789306f9a3SSatish Balay }
799306f9a3SSatish Balay 
8019caf8f3SSatish Balay PETSC_EXTERN void petscoptionssetvalue_(PetscOptions *options,char* name,char* value,
8119caf8f3SSatish Balay                    PetscErrorCode *ierr,PETSC_FORTRAN_CHARLEN_T len1,PETSC_FORTRAN_CHARLEN_T len2)
829306f9a3SSatish Balay {
839306f9a3SSatish Balay   char *c1,*c2;
849306f9a3SSatish Balay 
859306f9a3SSatish Balay   FIXCHAR(name,len1,c1);
869306f9a3SSatish Balay   FIXCHAR(value,len2,c2);
87d49bb8f9SBarry Smith   *ierr = PetscOptionsSetValue(*options,c1,c2);if (*ierr) return;
889306f9a3SSatish Balay   FREECHAR(name,c1);
899306f9a3SSatish Balay   FREECHAR(value,c2);
909306f9a3SSatish Balay }
919306f9a3SSatish Balay 
9219caf8f3SSatish Balay PETSC_EXTERN void petscoptionsclear_(PetscOptions *options,PetscErrorCode *ierr)
93a542b6e8SBarry Smith {
94c5929fdfSBarry Smith   *ierr = PetscOptionsClear(*options);
95a542b6e8SBarry Smith }
96a542b6e8SBarry Smith 
9719caf8f3SSatish Balay PETSC_EXTERN void petscoptionsclearvalue_(PetscOptions *options,char* name,PetscErrorCode *ierr,PETSC_FORTRAN_CHARLEN_T len)
989306f9a3SSatish Balay {
999306f9a3SSatish Balay   char *c1;
1009306f9a3SSatish Balay 
1019306f9a3SSatish Balay   FIXCHAR(name,len,c1);
102d49bb8f9SBarry Smith   *ierr = PetscOptionsClearValue(*options,c1);if (*ierr) return;
1039306f9a3SSatish Balay   FREECHAR(name,c1);
1049306f9a3SSatish Balay }
1059306f9a3SSatish Balay 
10619caf8f3SSatish Balay PETSC_EXTERN void petscoptionshasname_(PetscOptions *options,char* pre,char* name,
10719caf8f3SSatish Balay                     PetscBool  *flg,PetscErrorCode *ierr,PETSC_FORTRAN_CHARLEN_T len1,PETSC_FORTRAN_CHARLEN_T len2)
1089306f9a3SSatish Balay {
1099306f9a3SSatish Balay   char *c1,*c2;
1109306f9a3SSatish Balay 
1119306f9a3SSatish Balay   FIXCHAR(pre,len1,c1);
1129306f9a3SSatish Balay   FIXCHAR(name,len2,c2);
113d49bb8f9SBarry Smith   *ierr = PetscOptionsHasName(*options,c1,c2,flg);if (*ierr) return;
1149306f9a3SSatish Balay   FREECHAR(pre,c1);
1159306f9a3SSatish Balay   FREECHAR(name,c2);
1169306f9a3SSatish Balay }
1179306f9a3SSatish Balay 
118455a3cf9SBarry Smith 
11919caf8f3SSatish Balay PETSC_EXTERN void petscoptionsgetint_(PetscOptions *opt,char* pre,char* name,
12019caf8f3SSatish Balay                     PetscInt *ivalue,PetscBool  *flg,PetscErrorCode *ierr,PETSC_FORTRAN_CHARLEN_T len1,PETSC_FORTRAN_CHARLEN_T len2)
1219306f9a3SSatish Balay {
1229306f9a3SSatish Balay   char      *c1,*c2;
123ace3abfcSBarry Smith   PetscBool flag;
1249306f9a3SSatish Balay 
1259306f9a3SSatish Balay   FIXCHAR(pre,len1,c1);
1269306f9a3SSatish Balay   FIXCHAR(name,len2,c2);
127d49bb8f9SBarry Smith   *ierr = PetscOptionsGetInt(*opt,c1,c2,ivalue,&flag);if (*ierr) return;
1285c550465SJed Brown   if (!FORTRANNULLBOOL(flg)) *flg = flag;
1299306f9a3SSatish Balay   FREECHAR(pre,c1);
1309306f9a3SSatish Balay   FREECHAR(name,c2);
1319306f9a3SSatish Balay }
1329306f9a3SSatish Balay 
13319caf8f3SSatish Balay PETSC_EXTERN void petscoptionsgetenumprivate_(PetscOptions *options,char* pre,char* name,const char *const*list,
13419caf8f3SSatish Balay                     PetscEnum *ivalue,PetscBool  *flg,PetscErrorCode *ierr,PETSC_FORTRAN_CHARLEN_T len1,PETSC_FORTRAN_CHARLEN_T len2)
13547340559SBarry Smith {
13647340559SBarry Smith   char      *c1,*c2;
13747340559SBarry Smith   PetscBool flag;
13847340559SBarry Smith 
13947340559SBarry Smith   FIXCHAR(pre,len1,c1);
14047340559SBarry Smith   FIXCHAR(name,len2,c2);
141d49bb8f9SBarry Smith   *ierr = PetscOptionsGetEnum(*options,c1,c2,list,ivalue,&flag);if (*ierr) return;
14247340559SBarry Smith   if (!FORTRANNULLBOOL(flg)) *flg = flag;
14347340559SBarry Smith   FREECHAR(pre,c1);
14447340559SBarry Smith   FREECHAR(name,c2);
14547340559SBarry Smith }
14647340559SBarry Smith 
14719caf8f3SSatish Balay PETSC_EXTERN void petscoptionsgetbool_(PetscOptions *options,char* pre,char* name,
14819caf8f3SSatish Balay                     PetscBool  *ivalue,PetscBool  *flg,PetscErrorCode *ierr,PETSC_FORTRAN_CHARLEN_T len1,PETSC_FORTRAN_CHARLEN_T len2)
1499306f9a3SSatish Balay {
1509306f9a3SSatish Balay   char      *c1,*c2;
151ace3abfcSBarry Smith   PetscBool flag;
1529306f9a3SSatish Balay 
1539306f9a3SSatish Balay   FIXCHAR(pre,len1,c1);
1549306f9a3SSatish Balay   FIXCHAR(name,len2,c2);
155d49bb8f9SBarry Smith   *ierr = PetscOptionsGetBool(*options,c1,c2,ivalue,&flag);if (*ierr) return;
1565c550465SJed Brown   if (!FORTRANNULLBOOL(flg)) *flg = flag;
1579306f9a3SSatish Balay   FREECHAR(pre,c1);
1589306f9a3SSatish Balay   FREECHAR(name,c2);
1599306f9a3SSatish Balay }
1609306f9a3SSatish Balay 
16119caf8f3SSatish Balay PETSC_EXTERN void petscoptionsgetreal_(PetscOptions *options,char* pre,char* name,
16219caf8f3SSatish Balay                     PetscReal *dvalue,PetscBool  *flg,PetscErrorCode *ierr,PETSC_FORTRAN_CHARLEN_T len1,PETSC_FORTRAN_CHARLEN_T len2)
1639306f9a3SSatish Balay {
1649306f9a3SSatish Balay   char *c1,*c2;
165ace3abfcSBarry Smith   PetscBool  flag;
1669306f9a3SSatish Balay 
1679306f9a3SSatish Balay   FIXCHAR(pre,len1,c1);
1689306f9a3SSatish Balay   FIXCHAR(name,len2,c2);
169d49bb8f9SBarry Smith   *ierr = PetscOptionsGetReal(*options,c1,c2,dvalue,&flag);if (*ierr) return;
1705c550465SJed Brown   if (!FORTRANNULLBOOL(flg)) *flg = flag;
1719306f9a3SSatish Balay   FREECHAR(pre,c1);
1729306f9a3SSatish Balay   FREECHAR(name,c2);
1739306f9a3SSatish Balay }
1749306f9a3SSatish Balay 
17519caf8f3SSatish Balay PETSC_EXTERN void petscoptionsgetscalar_(PetscOptions *options,char* pre,char* name,
17619caf8f3SSatish Balay                     PetscScalar *dvalue,PetscBool  *flg,PetscErrorCode *ierr,PETSC_FORTRAN_CHARLEN_T len1,PETSC_FORTRAN_CHARLEN_T len2)
1777a7a6802SBarry Smith {
1787a7a6802SBarry Smith   char *c1,*c2;
1797a7a6802SBarry Smith   PetscBool  flag;
1807a7a6802SBarry Smith 
1817a7a6802SBarry Smith   FIXCHAR(pre,len1,c1);
1827a7a6802SBarry Smith   FIXCHAR(name,len2,c2);
183d49bb8f9SBarry Smith   *ierr = PetscOptionsGetScalar(*options,c1,c2,dvalue,&flag);if (*ierr) return;
1847a7a6802SBarry Smith   if (!FORTRANNULLBOOL(flg)) *flg = flag;
1857a7a6802SBarry Smith   FREECHAR(pre,c1);
1867a7a6802SBarry Smith   FREECHAR(name,c2);
1877a7a6802SBarry Smith }
1887a7a6802SBarry Smith 
18919caf8f3SSatish Balay PETSC_EXTERN void petscoptionsgetrealarray_(PetscOptions *options,char* pre,char* name,
19019caf8f3SSatish Balay                 PetscReal *dvalue,PetscInt *nmax,PetscBool  *flg,PetscErrorCode *ierr,PETSC_FORTRAN_CHARLEN_T len1,PETSC_FORTRAN_CHARLEN_T len2)
1919306f9a3SSatish Balay {
1929306f9a3SSatish Balay   char      *c1,*c2;
193ace3abfcSBarry Smith   PetscBool flag;
1949306f9a3SSatish Balay 
1959306f9a3SSatish Balay   FIXCHAR(pre,len1,c1);
1969306f9a3SSatish Balay   FIXCHAR(name,len2,c2);
197d49bb8f9SBarry Smith   *ierr = PetscOptionsGetRealArray(*options,c1,c2,dvalue,nmax,&flag);if (*ierr) return;
1985c550465SJed Brown   if (!FORTRANNULLBOOL(flg)) *flg = flag;
1999306f9a3SSatish Balay   FREECHAR(pre,c1);
2009306f9a3SSatish Balay   FREECHAR(name,c2);
2019306f9a3SSatish Balay }
2029306f9a3SSatish Balay 
20319caf8f3SSatish Balay PETSC_EXTERN void petscoptionsgetintarray_(PetscOptions *options,char* pre,char* name,
20419caf8f3SSatish Balay                    PetscInt *dvalue,PetscInt *nmax,PetscBool  *flg,PetscErrorCode *ierr,PETSC_FORTRAN_CHARLEN_T len1,PETSC_FORTRAN_CHARLEN_T len2)
2059306f9a3SSatish Balay {
2069306f9a3SSatish Balay   char      *c1,*c2;
207ace3abfcSBarry Smith   PetscBool flag;
2089306f9a3SSatish Balay 
2099306f9a3SSatish Balay   FIXCHAR(pre,len1,c1);
2109306f9a3SSatish Balay   FIXCHAR(name,len2,c2);
211d49bb8f9SBarry Smith   *ierr = PetscOptionsGetIntArray(*options,c1,c2,dvalue,nmax,&flag);if (*ierr) return;
2125c550465SJed Brown   if (!FORTRANNULLBOOL(flg)) *flg = flag;
2139306f9a3SSatish Balay   FREECHAR(pre,c1);
2149306f9a3SSatish Balay   FREECHAR(name,c2);
2159306f9a3SSatish Balay }
2169306f9a3SSatish Balay 
21719caf8f3SSatish Balay PETSC_EXTERN void petscoptionsgetstring_(PetscOptions *options,char* pre,char* name,
21819caf8f3SSatish Balay                     char* string,PetscBool  *flg,
21919caf8f3SSatish Balay                     PetscErrorCode *ierr,PETSC_FORTRAN_CHARLEN_T len1,PETSC_FORTRAN_CHARLEN_T len2,PETSC_FORTRAN_CHARLEN_T len)
2209306f9a3SSatish Balay {
2219306f9a3SSatish Balay   char      *c1,*c2,*c3;
2224610e317SSatish Balay   size_t    len3;
223ace3abfcSBarry Smith   PetscBool flag;
2249306f9a3SSatish Balay 
2259306f9a3SSatish Balay   FIXCHAR(pre,len1,c1);
2269306f9a3SSatish Balay   FIXCHAR(name,len2,c2);
2279306f9a3SSatish Balay   c3   = string;
2289306f9a3SSatish Balay   len3 = len - 1;
2299306f9a3SSatish Balay 
230d49bb8f9SBarry Smith   *ierr = PetscOptionsGetString(*options,c1,c2,c3,len3,&flag);if (*ierr) return;
2315c550465SJed Brown   if (!FORTRANNULLBOOL(flg)) *flg = flag;
2329306f9a3SSatish Balay   FREECHAR(pre,c1);
2339306f9a3SSatish Balay   FREECHAR(name,c2);
2347c363081SBarry Smith   FIXRETURNCHAR(flag,string,len);
2359306f9a3SSatish Balay }
2369306f9a3SSatish Balay 
23719caf8f3SSatish Balay PETSC_EXTERN void petscgetprogramname_(char* name,PetscErrorCode *ierr,PETSC_FORTRAN_CHARLEN_T len_in)
2389306f9a3SSatish Balay {
2399306f9a3SSatish Balay   char   *tmp;
2404610e317SSatish Balay   size_t len;
2419306f9a3SSatish Balay   tmp   = name;
2429306f9a3SSatish Balay   len   = len_in - 1;
2439306f9a3SSatish Balay   *ierr = PetscGetProgramName(tmp,len);
2447c363081SBarry Smith   FIXRETURNCHAR(PETSC_TRUE,name,len_in);
2459306f9a3SSatish Balay }
2469306f9a3SSatish Balay 
24719caf8f3SSatish Balay PETSC_EXTERN void petscoptionsview_(PetscOptions *options,PetscViewer *vin,PetscErrorCode *ierr)
2483a15af8cSBlaise Bourdin {
2493a15af8cSBlaise Bourdin   PetscViewer v;
2503a15af8cSBlaise Bourdin 
2513a15af8cSBlaise Bourdin   PetscPatchDefaultViewers_Fortran(vin,v);
252c5929fdfSBarry Smith   *ierr = PetscOptionsView(*options,v);
2533a15af8cSBlaise Bourdin }
2543a15af8cSBlaise Bourdin 
25519caf8f3SSatish Balay PETSC_EXTERN void petscobjectviewfromoptions_(PetscObject *obj,PetscObject *bobj,char* option,PetscErrorCode *ierr,PETSC_FORTRAN_CHARLEN_T loption)
256a2865142SMatthew G. Knepley {
257685405a1SBarry Smith   char *o;
258a2865142SMatthew G. Knepley 
259a2865142SMatthew G. Knepley   FIXCHAR(option, loption, o);
260*b14c0cbaSBlaise Bourdin   CHKFORTRANNULLOBJECT(obj);
261d49bb8f9SBarry Smith   *ierr = PetscObjectViewFromOptions(*obj, *bobj, o);if (*ierr) return;
262a2865142SMatthew G. Knepley   FREECHAR(option, o);
263a2865142SMatthew G. Knepley }
264a530d236SBarry Smith 
265a530d236SBarry Smith PETSC_EXTERN void petscsubcommgetparent_(PetscSubcomm *scomm,MPI_Fint *pcomm, int *ierr)
266a530d236SBarry Smith {
267a530d236SBarry Smith   MPI_Comm tcomm;
268a530d236SBarry Smith   *ierr = PetscSubcommGetParent(*scomm,&tcomm);
269a530d236SBarry Smith   *pcomm = MPI_Comm_c2f(tcomm);
270a530d236SBarry Smith }
271a530d236SBarry Smith 
272a530d236SBarry Smith PETSC_EXTERN void petscsubcommgetcontiguousparent_(PetscSubcomm *scomm,MPI_Fint *pcomm, int *ierr)
273a530d236SBarry Smith {
274a530d236SBarry Smith   MPI_Comm tcomm;
275a530d236SBarry Smith   *ierr = PetscSubcommGetContiguousParent(*scomm,&tcomm);
276a530d236SBarry Smith   *pcomm = MPI_Comm_c2f(tcomm);
277a530d236SBarry Smith }
278a530d236SBarry Smith 
279a530d236SBarry Smith PETSC_EXTERN void petscsubcommgetchild_(PetscSubcomm *scomm,MPI_Fint *ccomm, int *ierr)
280a530d236SBarry Smith {
281a530d236SBarry Smith   MPI_Comm tcomm;
282a530d236SBarry Smith   *ierr = PetscSubcommGetChild(*scomm,&tcomm);
283a530d236SBarry Smith   *ccomm = MPI_Comm_c2f(tcomm);
284a530d236SBarry Smith }
285a530d236SBarry Smith 
286a530d236SBarry Smith PETSC_EXTERN void petscsubcommview_(PetscSubcomm *psubcomm,PetscViewer *viewer, int *ierr)
287a530d236SBarry Smith {
288a530d236SBarry Smith   PetscViewer v;
289a530d236SBarry Smith   PetscPatchDefaultViewers_Fortran(viewer,v);
290a530d236SBarry Smith   *ierr = PetscSubcommView(*psubcomm,v);
291a530d236SBarry Smith }
292