xref: /petsc/src/sys/objects/ftn-custom/zoptionsf.c (revision 1147fc2a6bf7922defbbca15fc6c33f234803ff0)
1 /*
2   This file contains Fortran stubs for Options routines.
3   These are not generated automatically since they require passing strings
4   between Fortran and C.
5 */
6 
7 #include <petsc-private/fortranimpl.h>
8 
9 #if defined(PETSC_HAVE_FORTRAN_CAPS)
10 #define petscoptionsgetenumprivate_        PETSCOPTIONSGETENUMPRIVATE
11 #define petscoptionsgetbool_               PETSCOPTIONSGETBOOL
12 #define petscoptionsgetintarray_           PETSCOPTIONSGETINTARRAY
13 #define petscoptionssetvalue_              PETSCOPTIONSSETVALUE
14 #define petscoptionsclearvalue_            PETSCOPTIONSCLEARVALUE
15 #define petscoptionshasname_               PETSCOPTIONSHASNAME
16 #define petscoptionsgetint_                PETSCOPTIONSGETINT
17 #define petscoptionsgetreal_               PETSCOPTIONSGETREAL
18 #define petscoptionsgetrealarray_          PETSCOPTIONSGETREALARRAY
19 #define petscoptionsgetstring_             PETSCOPTIONSGETSTRING
20 #define petscgetprogramname                PETSCGETPROGRAMNAME
21 #define petscoptionsinsertfile_            PETSCOPTIONSINSERTFILE
22 #define petscoptionsclear_                 PETSCOPTIONSCLEAR
23 #define petscoptionsinsertstring_          PETSCOPTIONSINSERTSTRING
24 #define petscoptionsview_                  PETSCOPTIONSVIEW
25 #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE)
26 #define petscoptionsgetenumprivate_        petscoptionsgetenumprivate
27 #define petscoptionsgetbool_               petscoptionsgetbool
28 #define petscoptionssetvalue_              petscoptionssetvalue
29 #define petscoptionsclearvalue_            petscoptionsclearvalue
30 #define petscoptionshasname_               petscoptionshasname
31 #define petscoptionsgetint_                petscoptionsgetint
32 #define petscoptionsgetreal_               petscoptionsgetreal
33 #define petscoptionsgetrealarray_          petscoptionsgetrealarray
34 #define petscoptionsgetstring_             petscoptionsgetstring
35 #define petscoptionsgetintarray_           petscoptionsgetintarray
36 #define petscgetprogramname_               petscgetprogramname
37 #define petscoptionsinsertfile_            petscoptionsinsertfile
38 #define petscoptionsclear_                 petscoptionsclear
39 #define petscoptionsinsertstring_          petscoptionsinsertstring
40 #define petscoptionsview_                  petscoptionsview
41 #endif
42 
43 EXTERN_C_BEGIN
44 
45 /* ---------------------------------------------------------------------*/
46 
47 void PETSC_STDCALL petscoptionsinsertstring_(CHAR file PETSC_MIXED_LEN(len),PetscErrorCode *ierr PETSC_END_LEN(len))
48 {
49   char *c1;
50 
51   FIXCHAR(file,len,c1);
52   *ierr = PetscOptionsInsertString(c1);
53   FREECHAR(file,c1);
54 }
55 
56 void PETSC_STDCALL petscoptionsinsertfile_(MPI_Fint *comm,CHAR file PETSC_MIXED_LEN(len),PetscBool  *require,PetscErrorCode *ierr PETSC_END_LEN(len))
57 {
58   char *c1;
59 
60   FIXCHAR(file,len,c1);
61   *ierr = PetscOptionsInsertFile(MPI_Comm_f2c(*comm),c1,*require);
62   FREECHAR(file,c1);
63 }
64 
65 void PETSC_STDCALL petscoptionssetvalue_(CHAR name PETSC_MIXED_LEN(len1),CHAR value PETSC_MIXED_LEN(len2),
66                    PetscErrorCode *ierr PETSC_END_LEN(len1) PETSC_END_LEN(len2))
67 {
68   char *c1,*c2;
69 
70   FIXCHAR(name,len1,c1);
71   FIXCHAR(value,len2,c2);
72   *ierr = PetscOptionsSetValue(c1,c2);
73   FREECHAR(name,c1);
74   FREECHAR(value,c2);
75 }
76 
77 void PETSC_STDCALL petscoptionsclear_(PetscErrorCode *ierr)
78 {
79   *ierr = PetscOptionsClear();
80 }
81 
82 void PETSC_STDCALL petscoptionsclearvalue_(CHAR name PETSC_MIXED_LEN(len),PetscErrorCode *ierr PETSC_END_LEN(len))
83 {
84   char *c1;
85 
86   FIXCHAR(name,len,c1);
87   *ierr = PetscOptionsClearValue(c1);
88   FREECHAR(name,c1);
89 }
90 
91 void PETSC_STDCALL petscoptionshasname_(CHAR pre PETSC_MIXED_LEN(len1),CHAR name PETSC_MIXED_LEN(len2),
92                     PetscBool  *flg,PetscErrorCode *ierr PETSC_END_LEN(len1) PETSC_END_LEN(len2))
93 {
94   char *c1,*c2;
95 
96   FIXCHAR(pre,len1,c1);
97   FIXCHAR(name,len2,c2);
98   *ierr = PetscOptionsHasName(c1,c2,flg);
99   FREECHAR(pre,c1);
100   FREECHAR(name,c2);
101 }
102 
103 void PETSC_STDCALL petscoptionsgetint_(CHAR pre PETSC_MIXED_LEN(len1),CHAR name PETSC_MIXED_LEN(len2),
104                     PetscInt *ivalue,PetscBool  *flg,PetscErrorCode *ierr PETSC_END_LEN(len1) PETSC_END_LEN(len2))
105 {
106   char *c1,*c2;
107   PetscBool  flag;
108 
109   FIXCHAR(pre,len1,c1);
110   FIXCHAR(name,len2,c2);
111   *ierr = PetscOptionsGetInt(c1,c2,ivalue,&flag);
112   if (!FORTRANNULLBOOL(flg)) *flg = flag;
113   FREECHAR(pre,c1);
114   FREECHAR(name,c2);
115 }
116 
117 void PETSC_STDCALL petscoptionsgetenumprivate_(CHAR pre PETSC_MIXED_LEN(len1),CHAR name PETSC_MIXED_LEN(len2),const char *const*list,
118                     PetscEnum *ivalue,PetscBool  *flg,PetscErrorCode *ierr PETSC_END_LEN(len1) PETSC_END_LEN(len2))
119 {
120   char *c1,*c2;
121   PetscBool  flag;
122 
123   FIXCHAR(pre,len1,c1);
124   FIXCHAR(name,len2,c2);
125   *ierr = PetscOptionsGetEnum(c1,c2,list,ivalue,&flag);
126   if (!FORTRANNULLBOOL(flg)) *flg = flag;
127   FREECHAR(pre,c1);
128   FREECHAR(name,c2);
129 }
130 
131 void PETSC_STDCALL petscoptionsgetbool_(CHAR pre PETSC_MIXED_LEN(len1),CHAR name PETSC_MIXED_LEN(len2),
132                     PetscBool  *ivalue,PetscBool  *flg,PetscErrorCode *ierr PETSC_END_LEN(len1) PETSC_END_LEN(len2))
133 {
134   char *c1,*c2;
135   PetscBool  flag;
136 
137   FIXCHAR(pre,len1,c1);
138   FIXCHAR(name,len2,c2);
139   *ierr = PetscOptionsGetBool(c1,c2,ivalue,&flag);
140   if (!FORTRANNULLBOOL(flg)) *flg = flag;
141   FREECHAR(pre,c1);
142   FREECHAR(name,c2);
143 }
144 
145 void PETSC_STDCALL petscoptionsgetreal_(CHAR pre PETSC_MIXED_LEN(len1),CHAR name PETSC_MIXED_LEN(len2),
146                     PetscReal *dvalue,PetscBool  *flg,PetscErrorCode *ierr PETSC_END_LEN(len1) PETSC_END_LEN(len2))
147 {
148   char *c1,*c2;
149   PetscBool  flag;
150 
151   FIXCHAR(pre,len1,c1);
152   FIXCHAR(name,len2,c2);
153   *ierr = PetscOptionsGetReal(c1,c2,dvalue,&flag);
154   if (!FORTRANNULLBOOL(flg)) *flg = flag;
155   FREECHAR(pre,c1);
156   FREECHAR(name,c2);
157 }
158 
159 void PETSC_STDCALL petscoptionsgetrealarray_(CHAR pre PETSC_MIXED_LEN(len1),CHAR name PETSC_MIXED_LEN(len2),
160                 PetscReal *dvalue,PetscInt *nmax,PetscBool  *flg,PetscErrorCode *ierr PETSC_END_LEN(len1) PETSC_END_LEN(len2))
161 {
162   char *c1,*c2;
163   PetscBool  flag;
164 
165   FIXCHAR(pre,len1,c1);
166   FIXCHAR(name,len2,c2);
167   *ierr = PetscOptionsGetRealArray(c1,c2,dvalue,nmax,&flag);
168   if (!FORTRANNULLBOOL(flg)) *flg = flag;
169   FREECHAR(pre,c1);
170   FREECHAR(name,c2);
171 }
172 
173 void PETSC_STDCALL petscoptionsgetintarray_(CHAR pre PETSC_MIXED_LEN(len1),CHAR name PETSC_MIXED_LEN(len2),
174                    PetscInt *dvalue,PetscInt *nmax,PetscBool  *flg,PetscErrorCode *ierr PETSC_END_LEN(len1) PETSC_END_LEN(len2))
175 {
176   char *c1,*c2;
177   PetscBool  flag;
178 
179   FIXCHAR(pre,len1,c1);
180   FIXCHAR(name,len2,c2);
181   *ierr = PetscOptionsGetIntArray(c1,c2,dvalue,nmax,&flag);
182   if (!FORTRANNULLBOOL(flg)) *flg = flag;
183   FREECHAR(pre,c1);
184   FREECHAR(name,c2);
185 }
186 
187 void PETSC_STDCALL petscoptionsgetstring_(CHAR pre PETSC_MIXED_LEN(len1),CHAR name PETSC_MIXED_LEN(len2),
188                     CHAR string PETSC_MIXED_LEN(len),PetscBool  *flg,
189                     PetscErrorCode *ierr PETSC_END_LEN(len1) PETSC_END_LEN(len2) PETSC_END_LEN(len))
190 {
191   char *c1,*c2,*c3;
192   size_t len3;
193   PetscBool  flag;
194 
195   FIXCHAR(pre,len1,c1);
196   FIXCHAR(name,len2,c2);
197   c3   = string;
198   len3 = len - 1;
199 
200   *ierr = PetscOptionsGetString(c1,c2,c3,len3,&flag);
201   if (!FORTRANNULLBOOL(flg)) *flg = flag;
202   FREECHAR(pre,c1);
203   FREECHAR(name,c2);
204   FIXRETURNCHAR(flag,string,len);
205 }
206 
207 void PETSC_STDCALL petscgetprogramname_(CHAR name PETSC_MIXED_LEN(len_in),PetscErrorCode *ierr PETSC_END_LEN(len_in))
208 {
209   char *tmp;
210   size_t len;
211   tmp = name;
212   len = len_in - 1;
213   *ierr = PetscGetProgramName(tmp,len);
214   FIXRETURNCHAR(PETSC_TRUE,name,len_in);
215 }
216 
217 void PETSC_STDCALL petscoptionsview_(PetscViewer *vin,PetscErrorCode *ierr)
218 {
219   PetscViewer v;
220 
221   PetscPatchDefaultViewers_Fortran(vin,v);
222   *ierr = PetscOptionsView(v);
223 }
224 
225 EXTERN_C_END
226 
227