xref: /petsc/src/sys/objects/ftn-custom/zoptionsf.c (revision 4bb2516a9f08f79a30c7544bad46962d66afb2db)
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)
11*4bb2516aSBarry Smith   #define petscoptionsbegin_               PETSCOPTIONSBEGIN
12*4bb2516aSBarry Smith   #define petscoptionsend_                 PETSCOPTIONSEND
13*4bb2516aSBarry Smith   #define petscoptionsbool_                PETSCOPTIONSBOOL
14*4bb2516aSBarry Smith   #define petscoptionsboolarray_           PETSCOPTIONSBOOLARRAY
15*4bb2516aSBarry Smith   #define petscoptionsenumprivate_         PETSCOPTIONSENUMPRIVATE
16*4bb2516aSBarry Smith   #define petscoptionsint_                 PETSCOPTIONSINT
17*4bb2516aSBarry Smith   #define petscoptionsintarray_            PETSCOPTIONSINTARRAY
18*4bb2516aSBarry Smith   #define petscoptionsreal_                PETSCOPTIONSREAL
19*4bb2516aSBarry Smith   #define petscoptionsrealarray_           PETSCOPTIONSREALARRAY
20*4bb2516aSBarry Smith   #define petscoptionsscalar_              PETSCOPTIONSSCALAR
21*4bb2516aSBarry Smith   #define petscoptionsscalararray_         PETSCOPTIONSSCALARARRAY
22*4bb2516aSBarry Smith   #define petscoptionsstring               PETSCOPTIONSSTRING
23a530d236SBarry Smith   #define petscsubcommview_                PETSCSUBCOMMVIEW
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
2908f86b60SJed Brown   #define petscoptionsgetbool_             PETSCOPTIONSGETBOOL
30b0c0aa2bSBlaise Bourdin   #define petscoptionsgetboolarray_        PETSCOPTIONSGETBOOLARRAY
319306f9a3SSatish Balay   #define petscoptionsgetintarray_         PETSCOPTIONSGETINTARRAY
329306f9a3SSatish Balay   #define petscoptionssetvalue_            PETSCOPTIONSSETVALUE
339306f9a3SSatish Balay   #define petscoptionsclearvalue_          PETSCOPTIONSCLEARVALUE
349306f9a3SSatish Balay   #define petscoptionshasname_             PETSCOPTIONSHASNAME
359306f9a3SSatish Balay   #define petscoptionsgetint_              PETSCOPTIONSGETINT
369306f9a3SSatish Balay   #define petscoptionsgetreal_             PETSCOPTIONSGETREAL
377a7a6802SBarry Smith   #define petscoptionsgetscalar_           PETSCOPTIONSGETSCALAR
38b0c0aa2bSBlaise Bourdin   #define petscoptionsgetscalararray_      PETSCOPTIONSGETSCALARARRAY
399306f9a3SSatish Balay   #define petscoptionsgetrealarray_        PETSCOPTIONSGETREALARRAY
409306f9a3SSatish Balay   #define petscoptionsgetstring_           PETSCOPTIONSGETSTRING
419306f9a3SSatish Balay   #define petscgetprogramname              PETSCGETPROGRAMNAME
429306f9a3SSatish Balay   #define petscoptionsinsertfile_          PETSCOPTIONSINSERTFILE
43a542b6e8SBarry Smith   #define petscoptionsclear_               PETSCOPTIONSCLEAR
44ab66e762SBarry Smith   #define petscoptionsinsertstring_        PETSCOPTIONSINSERTSTRING
453a15af8cSBlaise Bourdin   #define petscoptionsview_                PETSCOPTIONSVIEW
46ac9b46efSSatish Balay   #define petscoptionsleft_                PETSCOPTIONSLEFT
47a2865142SMatthew G. Knepley   #define petscobjectviewfromoptions_      PETSCOBJECTVIEWFROMOPTIONS
489306f9a3SSatish Balay #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE)
49*4bb2516aSBarry Smith   #define petscoptionsbegin_               petscoptionsbegin
50*4bb2516aSBarry Smith   #define petscoptionsend_                 petscoptionsend
51*4bb2516aSBarry Smith   #define petscoptionsbool_                petscoptionsbool
52*4bb2516aSBarry Smith   #define petscoptionsboolarray_           petscoptionsboolarray
53*4bb2516aSBarry Smith   #define petscoptionsenumprivate_         petscoptionsenumprivate_
54*4bb2516aSBarry Smith   #define petscoptionsint_                 petscoptionsint
55*4bb2516aSBarry Smith   #define petscoptionsintarray_            petscoptionsintarray
56*4bb2516aSBarry Smith   #define petscoptionsreal_                petscoptionsreal
57*4bb2516aSBarry Smith   #define petscoptionsrealarray_           petscoptionsrealarray
58*4bb2516aSBarry Smith   #define petscoptionsscalar_              petscoptionsscalar
59*4bb2516aSBarry Smith   #define petscoptionsscalararray_         petscoptionsscalararray
60*4bb2516aSBarry Smith   #define petscoptionsstring_              petscoptionsstring
61a530d236SBarry Smith   #define petscsubcommview_                petscsubcommview
62a530d236SBarry Smith   #define petscsubcommgetparent_           petscsubcommgetparent
63a530d236SBarry Smith   #define petscsubcommgetcontiguousparent_ petscsubcommgetcontiguousparent
64a530d236SBarry Smith   #define petscsubcommgetchild_            petscsubcommgetchild
65455a3cf9SBarry Smith   #define petscoptionsallused_             petscoptionsallused
6647340559SBarry Smith   #define petscoptionsgetenumprivate_      petscoptionsgetenumprivate
6708f86b60SJed Brown   #define petscoptionsgetbool_             petscoptionsgetbool
68b0c0aa2bSBlaise Bourdin   #define petscoptionsgetboolarray_        petscoptionsgetboolarray
699306f9a3SSatish Balay   #define petscoptionssetvalue_            petscoptionssetvalue
709306f9a3SSatish Balay   #define petscoptionsclearvalue_          petscoptionsclearvalue
719306f9a3SSatish Balay   #define petscoptionshasname_             petscoptionshasname
729306f9a3SSatish Balay   #define petscoptionsgetint_              petscoptionsgetint
739306f9a3SSatish Balay   #define petscoptionsgetreal_             petscoptionsgetreal
747a7a6802SBarry Smith   #define petscoptionsgetscalar_           petscoptionsgetscalar
75b0c0aa2bSBlaise Bourdin   #define petscoptionsgetscalararray_      petscoptionsgetscalararray
769306f9a3SSatish Balay   #define petscoptionsgetrealarray_        petscoptionsgetrealarray
779306f9a3SSatish Balay   #define petscoptionsgetstring_           petscoptionsgetstring
789306f9a3SSatish Balay   #define petscoptionsgetintarray_         petscoptionsgetintarray
799306f9a3SSatish Balay   #define petscgetprogramname_             petscgetprogramname
809306f9a3SSatish Balay   #define petscoptionsinsertfile_          petscoptionsinsertfile
81a542b6e8SBarry Smith   #define petscoptionsclear_               petscoptionsclear
82ab66e762SBarry Smith   #define petscoptionsinsertstring_        petscoptionsinsertstring
833a15af8cSBlaise Bourdin   #define petscoptionsview_                petscoptionsview
84ac9b46efSSatish Balay   #define petscoptionsleft_                petscoptionsleft
85a2865142SMatthew G. Knepley   #define petscobjectviewfromoptions_      petscobjectviewfromoptions
869306f9a3SSatish Balay #endif
879306f9a3SSatish Balay 
88*4bb2516aSBarry Smith static PetscOptionItems PetscOptionsObjectBase, *PetscOptionsObject = NULL;
89*4bb2516aSBarry Smith 
90*4bb2516aSBarry 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)
91*4bb2516aSBarry Smith {
92*4bb2516aSBarry Smith   MPI_Comm comm = MPI_Comm_f2c(*fcomm);
93*4bb2516aSBarry Smith   char    *cprefix, *cmess, *csec;
94*4bb2516aSBarry Smith 
95*4bb2516aSBarry Smith   FIXCHAR(prefix, lenprefix, cprefix);
96*4bb2516aSBarry Smith   FIXCHAR(mess, lenmess, cmess);
97*4bb2516aSBarry Smith   FIXCHAR(sec, lensec, csec);
98*4bb2516aSBarry Smith   if (PetscOptionsObject) {
99*4bb2516aSBarry Smith     *ierr = PETSC_ERR_ARG_WRONGSTATE;
100*4bb2516aSBarry Smith     return;
101*4bb2516aSBarry Smith   }
102*4bb2516aSBarry Smith   PetscOptionsObject = &PetscOptionsObjectBase;
103*4bb2516aSBarry Smith   *ierr              = PetscMemzero(PetscOptionsObject, sizeof(*PetscOptionsObject));
104*4bb2516aSBarry Smith   if (*ierr) return;
105*4bb2516aSBarry Smith   PetscOptionsObject->count = 1;
106*4bb2516aSBarry Smith   *ierr                     = PetscOptionsBegin_Private(PetscOptionsObject, comm, cprefix, cmess, csec);
107*4bb2516aSBarry Smith   if (*ierr) return;
108*4bb2516aSBarry Smith   FREECHAR(prefix, cprefix);
109*4bb2516aSBarry Smith   FREECHAR(mess, cmess);
110*4bb2516aSBarry Smith   FREECHAR(sec, csec);
111*4bb2516aSBarry Smith }
112*4bb2516aSBarry Smith 
113*4bb2516aSBarry Smith PETSC_EXTERN void petscoptionsend_(PetscErrorCode *ierr)
114*4bb2516aSBarry Smith {
115*4bb2516aSBarry Smith   if (!PetscOptionsObject) {
116*4bb2516aSBarry Smith     *ierr = PETSC_ERR_ARG_WRONGSTATE;
117*4bb2516aSBarry Smith     return;
118*4bb2516aSBarry Smith   }
119*4bb2516aSBarry Smith   PetscOptionsObject->count = 1;
120*4bb2516aSBarry Smith   *ierr                     = PetscOptionsEnd_Private(PetscOptionsObject);
121*4bb2516aSBarry Smith   PetscOptionsObject        = NULL;
122*4bb2516aSBarry Smith }
123*4bb2516aSBarry Smith 
124*4bb2516aSBarry 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)
125*4bb2516aSBarry Smith {
126*4bb2516aSBarry Smith   char *copt, *ctext, *cman;
127*4bb2516aSBarry Smith 
128*4bb2516aSBarry Smith   FIXCHAR(opt, lenopt, copt);
129*4bb2516aSBarry Smith   FIXCHAR(text, lentext, ctext);
130*4bb2516aSBarry Smith   FIXCHAR(man, lenman, cman);
131*4bb2516aSBarry Smith   if (!PetscOptionsObject) {
132*4bb2516aSBarry Smith     *ierr = PETSC_ERR_ARG_WRONGSTATE;
133*4bb2516aSBarry Smith     return;
134*4bb2516aSBarry Smith   }
135*4bb2516aSBarry Smith   PetscOptionsObject->count = 1;
136*4bb2516aSBarry Smith   *ierr                     = PetscOptionsBool_Private(PetscOptionsObject, copt, ctext, cman, *currentvalue, value, set);
137*4bb2516aSBarry Smith   if (*ierr) return;
138*4bb2516aSBarry Smith   FREECHAR(opt, copt);
139*4bb2516aSBarry Smith   FREECHAR(text, ctext);
140*4bb2516aSBarry Smith   FREECHAR(man, cman);
141*4bb2516aSBarry Smith }
142*4bb2516aSBarry Smith 
143*4bb2516aSBarry 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)
144*4bb2516aSBarry Smith {
145*4bb2516aSBarry Smith   char     *copt, *ctext, *cman;
146*4bb2516aSBarry Smith   PetscBool flag;
147*4bb2516aSBarry Smith 
148*4bb2516aSBarry Smith   FIXCHAR(opt, lenopt, copt);
149*4bb2516aSBarry Smith   FIXCHAR(text, lentext, ctext);
150*4bb2516aSBarry Smith   FIXCHAR(man, lenman, cman);
151*4bb2516aSBarry Smith   if (!PetscOptionsObject) {
152*4bb2516aSBarry Smith     *ierr = PETSC_ERR_ARG_WRONGSTATE;
153*4bb2516aSBarry Smith     return;
154*4bb2516aSBarry Smith   }
155*4bb2516aSBarry Smith   PetscOptionsObject->count = 1;
156*4bb2516aSBarry Smith   *ierr                     = PetscOptionsBoolArray_Private(PetscOptionsObject, copt, ctext, cman, dvalue, nmax, &flag);
157*4bb2516aSBarry Smith   if (*ierr) return;
158*4bb2516aSBarry Smith   if (!FORTRANNULLBOOL(flg)) *flg = flag;
159*4bb2516aSBarry Smith   FREECHAR(opt, copt);
160*4bb2516aSBarry Smith   FREECHAR(text, ctext);
161*4bb2516aSBarry Smith   FREECHAR(man, cman);
162*4bb2516aSBarry Smith }
163*4bb2516aSBarry Smith 
164*4bb2516aSBarry 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)
165*4bb2516aSBarry Smith {
166*4bb2516aSBarry Smith   char     *copt, *ctext, *cman;
167*4bb2516aSBarry Smith   PetscBool flag;
168*4bb2516aSBarry Smith 
169*4bb2516aSBarry Smith   FIXCHAR(opt, lenopt, copt);
170*4bb2516aSBarry Smith   FIXCHAR(text, lentext, ctext);
171*4bb2516aSBarry Smith   FIXCHAR(man, lenman, cman);
172*4bb2516aSBarry Smith   if (!PetscOptionsObject) {
173*4bb2516aSBarry Smith     *ierr = PETSC_ERR_ARG_WRONGSTATE;
174*4bb2516aSBarry Smith     return;
175*4bb2516aSBarry Smith   }
176*4bb2516aSBarry Smith   PetscOptionsObject->count = 1;
177*4bb2516aSBarry Smith   *ierr                     = PetscOptionsEnum_Private(PetscOptionsObject, copt, ctext, cman, list, *currentvalue, ivalue, &flag);
178*4bb2516aSBarry Smith   if (*ierr) return;
179*4bb2516aSBarry Smith   if (!FORTRANNULLBOOL(flg)) *flg = flag;
180*4bb2516aSBarry Smith   FREECHAR(opt, copt);
181*4bb2516aSBarry Smith   FREECHAR(text, ctext);
182*4bb2516aSBarry Smith   FREECHAR(man, cman);
183*4bb2516aSBarry Smith }
184*4bb2516aSBarry Smith 
185*4bb2516aSBarry 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)
186*4bb2516aSBarry Smith {
187*4bb2516aSBarry Smith   char *copt, *ctext, *cman;
188*4bb2516aSBarry Smith 
189*4bb2516aSBarry Smith   FIXCHAR(opt, lenopt, copt);
190*4bb2516aSBarry Smith   FIXCHAR(text, lentext, ctext);
191*4bb2516aSBarry Smith   FIXCHAR(man, lenman, cman);
192*4bb2516aSBarry Smith   if (!PetscOptionsObject) {
193*4bb2516aSBarry Smith     *ierr = PETSC_ERR_ARG_WRONGSTATE;
194*4bb2516aSBarry Smith     return;
195*4bb2516aSBarry Smith   }
196*4bb2516aSBarry Smith   PetscOptionsObject->count = 1;
197*4bb2516aSBarry Smith   *ierr                     = PetscOptionsInt_Private(PetscOptionsObject, copt, ctext, cman, *currentvalue, value, set, PETSC_MIN_INT, PETSC_MAX_INT);
198*4bb2516aSBarry Smith   if (*ierr) return;
199*4bb2516aSBarry Smith   FREECHAR(opt, copt);
200*4bb2516aSBarry Smith   FREECHAR(text, ctext);
201*4bb2516aSBarry Smith   FREECHAR(man, cman);
202*4bb2516aSBarry Smith }
203*4bb2516aSBarry Smith 
204*4bb2516aSBarry 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)
205*4bb2516aSBarry Smith {
206*4bb2516aSBarry Smith   char *copt, *ctext, *cman;
207*4bb2516aSBarry Smith 
208*4bb2516aSBarry Smith   FIXCHAR(opt, lenopt, copt);
209*4bb2516aSBarry Smith   FIXCHAR(text, lentext, ctext);
210*4bb2516aSBarry Smith   FIXCHAR(man, lenman, cman);
211*4bb2516aSBarry Smith   if (!PetscOptionsObject) {
212*4bb2516aSBarry Smith     *ierr = PETSC_ERR_ARG_WRONGSTATE;
213*4bb2516aSBarry Smith     return;
214*4bb2516aSBarry Smith   }
215*4bb2516aSBarry Smith   PetscOptionsObject->count = 1;
216*4bb2516aSBarry Smith   *ierr                     = PetscOptionsIntArray_Private(PetscOptionsObject, copt, ctext, cman, currentvalue, n, set);
217*4bb2516aSBarry Smith   if (*ierr) return;
218*4bb2516aSBarry Smith   FREECHAR(opt, copt);
219*4bb2516aSBarry Smith   FREECHAR(text, ctext);
220*4bb2516aSBarry Smith   FREECHAR(man, cman);
221*4bb2516aSBarry Smith }
222*4bb2516aSBarry Smith 
223*4bb2516aSBarry 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)
224*4bb2516aSBarry Smith {
225*4bb2516aSBarry Smith   char *copt, *ctext, *cman;
226*4bb2516aSBarry Smith 
227*4bb2516aSBarry Smith   FIXCHAR(opt, lenopt, copt);
228*4bb2516aSBarry Smith   FIXCHAR(text, lentext, ctext);
229*4bb2516aSBarry Smith   FIXCHAR(man, lenman, cman);
230*4bb2516aSBarry Smith   if (!PetscOptionsObject) {
231*4bb2516aSBarry Smith     *ierr = PETSC_ERR_ARG_WRONGSTATE;
232*4bb2516aSBarry Smith     return;
233*4bb2516aSBarry Smith   }
234*4bb2516aSBarry Smith   PetscOptionsObject->count = 1;
235*4bb2516aSBarry Smith   *ierr                     = PetscOptionsReal_Private(PetscOptionsObject, copt, ctext, cman, *currentvalue, value, set);
236*4bb2516aSBarry Smith   if (*ierr) return;
237*4bb2516aSBarry Smith   FREECHAR(opt, copt);
238*4bb2516aSBarry Smith   FREECHAR(text, ctext);
239*4bb2516aSBarry Smith   FREECHAR(man, cman);
240*4bb2516aSBarry Smith }
241*4bb2516aSBarry Smith 
242*4bb2516aSBarry 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)
243*4bb2516aSBarry Smith {
244*4bb2516aSBarry Smith   char *copt, *ctext, *cman;
245*4bb2516aSBarry Smith 
246*4bb2516aSBarry Smith   FIXCHAR(opt, lenopt, copt);
247*4bb2516aSBarry Smith   FIXCHAR(text, lentext, ctext);
248*4bb2516aSBarry Smith   FIXCHAR(man, lenman, cman);
249*4bb2516aSBarry Smith   if (!PetscOptionsObject) {
250*4bb2516aSBarry Smith     *ierr = PETSC_ERR_ARG_WRONGSTATE;
251*4bb2516aSBarry Smith     return;
252*4bb2516aSBarry Smith   }
253*4bb2516aSBarry Smith   PetscOptionsObject->count = 1;
254*4bb2516aSBarry Smith   *ierr                     = PetscOptionsRealArray_Private(PetscOptionsObject, copt, ctext, cman, currentvalue, n, set);
255*4bb2516aSBarry Smith   if (*ierr) return;
256*4bb2516aSBarry Smith   FREECHAR(opt, copt);
257*4bb2516aSBarry Smith   FREECHAR(text, ctext);
258*4bb2516aSBarry Smith   FREECHAR(man, cman);
259*4bb2516aSBarry Smith }
260*4bb2516aSBarry Smith 
261*4bb2516aSBarry 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)
262*4bb2516aSBarry Smith {
263*4bb2516aSBarry Smith   char *copt, *ctext, *cman;
264*4bb2516aSBarry Smith 
265*4bb2516aSBarry Smith   FIXCHAR(opt, lenopt, copt);
266*4bb2516aSBarry Smith   FIXCHAR(text, lentext, ctext);
267*4bb2516aSBarry Smith   FIXCHAR(man, lenman, cman);
268*4bb2516aSBarry Smith   if (!PetscOptionsObject) {
269*4bb2516aSBarry Smith     *ierr = PETSC_ERR_ARG_WRONGSTATE;
270*4bb2516aSBarry Smith     return;
271*4bb2516aSBarry Smith   }
272*4bb2516aSBarry Smith   PetscOptionsObject->count = 1;
273*4bb2516aSBarry Smith   *ierr                     = PetscOptionsScalar_Private(PetscOptionsObject, copt, ctext, cman, *currentvalue, value, set);
274*4bb2516aSBarry Smith   if (*ierr) return;
275*4bb2516aSBarry Smith   FREECHAR(opt, copt);
276*4bb2516aSBarry Smith   FREECHAR(text, ctext);
277*4bb2516aSBarry Smith   FREECHAR(man, cman);
278*4bb2516aSBarry Smith }
279*4bb2516aSBarry Smith 
280*4bb2516aSBarry 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)
281*4bb2516aSBarry Smith {
282*4bb2516aSBarry Smith   char *copt, *ctext, *cman;
283*4bb2516aSBarry Smith 
284*4bb2516aSBarry Smith   FIXCHAR(opt, lenopt, copt);
285*4bb2516aSBarry Smith   FIXCHAR(text, lentext, ctext);
286*4bb2516aSBarry Smith   FIXCHAR(man, lenman, cman);
287*4bb2516aSBarry Smith   if (!PetscOptionsObject) {
288*4bb2516aSBarry Smith     *ierr = PETSC_ERR_ARG_WRONGSTATE;
289*4bb2516aSBarry Smith     return;
290*4bb2516aSBarry Smith   }
291*4bb2516aSBarry Smith   PetscOptionsObject->count = 1;
292*4bb2516aSBarry Smith   *ierr                     = PetscOptionsScalarArray_Private(PetscOptionsObject, copt, ctext, cman, currentvalue, n, set);
293*4bb2516aSBarry Smith   if (*ierr) return;
294*4bb2516aSBarry Smith   FREECHAR(opt, copt);
295*4bb2516aSBarry Smith   FREECHAR(text, ctext);
296*4bb2516aSBarry Smith   FREECHAR(man, cman);
297*4bb2516aSBarry Smith }
298*4bb2516aSBarry Smith 
299*4bb2516aSBarry 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)
300*4bb2516aSBarry Smith {
301*4bb2516aSBarry Smith   char     *copt, *ctext, *cman, *ccurrent;
302*4bb2516aSBarry Smith   PetscBool flag;
303*4bb2516aSBarry Smith 
304*4bb2516aSBarry Smith   FIXCHAR(opt, lenopt, copt);
305*4bb2516aSBarry Smith   FIXCHAR(text, lentext, ctext);
306*4bb2516aSBarry Smith   FIXCHAR(man, lenman, cman);
307*4bb2516aSBarry Smith   FIXCHAR(currentvalue, lencurrent, ccurrent);
308*4bb2516aSBarry Smith 
309*4bb2516aSBarry Smith   if (!PetscOptionsObject) {
310*4bb2516aSBarry Smith     *ierr = PETSC_ERR_ARG_WRONGSTATE;
311*4bb2516aSBarry Smith     return;
312*4bb2516aSBarry Smith   }
313*4bb2516aSBarry Smith   PetscOptionsObject->count = 1;
314*4bb2516aSBarry Smith 
315*4bb2516aSBarry Smith   *ierr = PetscOptionsString_Private(PetscOptionsObject, copt, ctext, cman, ccurrent, value, lenvalue - 1, &flag);
316*4bb2516aSBarry Smith   if (*ierr) return;
317*4bb2516aSBarry Smith   if (!FORTRANNULLBOOL(flg)) *flg = flag;
318*4bb2516aSBarry Smith   FREECHAR(opt, copt);
319*4bb2516aSBarry Smith   FREECHAR(text, ctext);
320*4bb2516aSBarry Smith   FREECHAR(man, cman);
321*4bb2516aSBarry Smith   FREECHAR(currentvalue, ccurrent);
322*4bb2516aSBarry Smith   FIXRETURNCHAR(flag, value, lenvalue);
323*4bb2516aSBarry Smith }
3249306f9a3SSatish Balay 
32519caf8f3SSatish Balay PETSC_EXTERN void petscoptionsinsertstring_(PetscOptions *options, char *file, PetscErrorCode *ierr, PETSC_FORTRAN_CHARLEN_T len)
326ab66e762SBarry Smith {
327ab66e762SBarry Smith   char *c1;
328ab66e762SBarry Smith 
329ab66e762SBarry Smith   FIXCHAR(file, len, c1);
3305975b3b6SBarry Smith   *ierr = PetscOptionsInsertString(*options, c1);
3315975b3b6SBarry Smith   if (*ierr) return;
332ab66e762SBarry Smith   FREECHAR(file, c1);
333ab66e762SBarry Smith }
334ab66e762SBarry Smith 
33519caf8f3SSatish Balay PETSC_EXTERN void petscoptionsinsertfile_(MPI_Fint *comm, PetscOptions *options, char *file, PetscBool *require, PetscErrorCode *ierr, PETSC_FORTRAN_CHARLEN_T len)
3369306f9a3SSatish Balay {
3379306f9a3SSatish Balay   char *c1;
3389306f9a3SSatish Balay 
3399306f9a3SSatish Balay   FIXCHAR(file, len, c1);
3405975b3b6SBarry Smith   *ierr = PetscOptionsInsertFile(MPI_Comm_f2c(*comm), *options, c1, *require);
3415975b3b6SBarry Smith   if (*ierr) return;
3429306f9a3SSatish Balay   FREECHAR(file, c1);
3439306f9a3SSatish Balay }
3449306f9a3SSatish Balay 
3455975b3b6SBarry Smith PETSC_EXTERN void petscoptionssetvalue_(PetscOptions *options, char *name, char *value, PetscErrorCode *ierr, PETSC_FORTRAN_CHARLEN_T len1, PETSC_FORTRAN_CHARLEN_T len2)
3469306f9a3SSatish Balay {
3479306f9a3SSatish Balay   char *c1, *c2;
3489306f9a3SSatish Balay 
3499306f9a3SSatish Balay   FIXCHAR(name, len1, c1);
3509306f9a3SSatish Balay   FIXCHAR(value, len2, c2);
3515975b3b6SBarry Smith   *ierr = PetscOptionsSetValue(*options, c1, c2);
3525975b3b6SBarry Smith   if (*ierr) return;
3539306f9a3SSatish Balay   FREECHAR(name, c1);
3549306f9a3SSatish Balay   FREECHAR(value, c2);
3559306f9a3SSatish Balay }
3569306f9a3SSatish Balay 
35719caf8f3SSatish Balay PETSC_EXTERN void petscoptionsclear_(PetscOptions *options, PetscErrorCode *ierr)
358a542b6e8SBarry Smith {
359c5929fdfSBarry Smith   *ierr = PetscOptionsClear(*options);
360a542b6e8SBarry Smith }
361a542b6e8SBarry Smith 
36219caf8f3SSatish Balay PETSC_EXTERN void petscoptionsclearvalue_(PetscOptions *options, char *name, PetscErrorCode *ierr, PETSC_FORTRAN_CHARLEN_T len)
3639306f9a3SSatish Balay {
3649306f9a3SSatish Balay   char *c1;
3659306f9a3SSatish Balay 
3669306f9a3SSatish Balay   FIXCHAR(name, len, c1);
3675975b3b6SBarry Smith   *ierr = PetscOptionsClearValue(*options, c1);
3685975b3b6SBarry Smith   if (*ierr) return;
3699306f9a3SSatish Balay   FREECHAR(name, c1);
3709306f9a3SSatish Balay }
3719306f9a3SSatish Balay 
3725975b3b6SBarry Smith PETSC_EXTERN void petscoptionshasname_(PetscOptions *options, char *pre, char *name, PetscBool *flg, PetscErrorCode *ierr, PETSC_FORTRAN_CHARLEN_T len1, PETSC_FORTRAN_CHARLEN_T len2)
3739306f9a3SSatish Balay {
3749306f9a3SSatish Balay   char *c1, *c2;
3759306f9a3SSatish Balay 
3769306f9a3SSatish Balay   FIXCHAR(pre, len1, c1);
3779306f9a3SSatish Balay   FIXCHAR(name, len2, c2);
3785975b3b6SBarry Smith   *ierr = PetscOptionsHasName(*options, c1, c2, flg);
3795975b3b6SBarry Smith   if (*ierr) return;
3809306f9a3SSatish Balay   FREECHAR(pre, c1);
3819306f9a3SSatish Balay   FREECHAR(name, c2);
3829306f9a3SSatish Balay }
3839306f9a3SSatish Balay 
3845975b3b6SBarry 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)
3859306f9a3SSatish Balay {
3869306f9a3SSatish Balay   char     *c1, *c2;
387ace3abfcSBarry Smith   PetscBool flag;
3889306f9a3SSatish Balay 
3899306f9a3SSatish Balay   FIXCHAR(pre, len1, c1);
3909306f9a3SSatish Balay   FIXCHAR(name, len2, c2);
3915975b3b6SBarry Smith   *ierr = PetscOptionsGetInt(*opt, c1, c2, ivalue, &flag);
3925975b3b6SBarry Smith   if (*ierr) return;
3935c550465SJed Brown   if (!FORTRANNULLBOOL(flg)) *flg = flag;
3949306f9a3SSatish Balay   FREECHAR(pre, c1);
3959306f9a3SSatish Balay   FREECHAR(name, c2);
3969306f9a3SSatish Balay }
3979306f9a3SSatish Balay 
3985975b3b6SBarry 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)
39947340559SBarry Smith {
40047340559SBarry Smith   char     *c1, *c2;
40147340559SBarry Smith   PetscBool flag;
40247340559SBarry Smith 
40347340559SBarry Smith   FIXCHAR(pre, len1, c1);
40447340559SBarry Smith   FIXCHAR(name, len2, c2);
4055975b3b6SBarry Smith   *ierr = PetscOptionsGetEnum(*options, c1, c2, list, ivalue, &flag);
4065975b3b6SBarry Smith   if (*ierr) return;
40747340559SBarry Smith   if (!FORTRANNULLBOOL(flg)) *flg = flag;
40847340559SBarry Smith   FREECHAR(pre, c1);
40947340559SBarry Smith   FREECHAR(name, c2);
41047340559SBarry Smith }
41147340559SBarry Smith 
4125975b3b6SBarry 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)
4139306f9a3SSatish Balay {
4149306f9a3SSatish Balay   char     *c1, *c2;
415ace3abfcSBarry Smith   PetscBool flag;
4169306f9a3SSatish Balay 
4179306f9a3SSatish Balay   FIXCHAR(pre, len1, c1);
4189306f9a3SSatish Balay   FIXCHAR(name, len2, c2);
4195975b3b6SBarry Smith   *ierr = PetscOptionsGetBool(*options, c1, c2, ivalue, &flag);
4205975b3b6SBarry Smith   if (*ierr) return;
4215c550465SJed Brown   if (!FORTRANNULLBOOL(flg)) *flg = flag;
4229306f9a3SSatish Balay   FREECHAR(pre, c1);
4239306f9a3SSatish Balay   FREECHAR(name, c2);
4249306f9a3SSatish Balay }
4259306f9a3SSatish Balay 
4265975b3b6SBarry 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)
427b0c0aa2bSBlaise Bourdin {
428b0c0aa2bSBlaise Bourdin   char     *c1, *c2;
429b0c0aa2bSBlaise Bourdin   PetscBool flag;
430b0c0aa2bSBlaise Bourdin 
431b0c0aa2bSBlaise Bourdin   FIXCHAR(pre, len1, c1);
432b0c0aa2bSBlaise Bourdin   FIXCHAR(name, len2, c2);
4335975b3b6SBarry Smith   *ierr = PetscOptionsGetBoolArray(*options, c1, c2, dvalue, nmax, &flag);
4345975b3b6SBarry Smith   if (*ierr) return;
435b0c0aa2bSBlaise Bourdin   if (!FORTRANNULLBOOL(flg)) *flg = flag;
436b0c0aa2bSBlaise Bourdin   FREECHAR(pre, c1);
437b0c0aa2bSBlaise Bourdin   FREECHAR(name, c2);
438b0c0aa2bSBlaise Bourdin }
439b0c0aa2bSBlaise Bourdin 
4405975b3b6SBarry 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)
4419306f9a3SSatish Balay {
4429306f9a3SSatish Balay   char     *c1, *c2;
443ace3abfcSBarry Smith   PetscBool flag;
4449306f9a3SSatish Balay 
4459306f9a3SSatish Balay   FIXCHAR(pre, len1, c1);
4469306f9a3SSatish Balay   FIXCHAR(name, len2, c2);
4475975b3b6SBarry Smith   *ierr = PetscOptionsGetReal(*options, c1, c2, dvalue, &flag);
4485975b3b6SBarry Smith   if (*ierr) return;
4495c550465SJed Brown   if (!FORTRANNULLBOOL(flg)) *flg = flag;
4509306f9a3SSatish Balay   FREECHAR(pre, c1);
4519306f9a3SSatish Balay   FREECHAR(name, c2);
4529306f9a3SSatish Balay }
4539306f9a3SSatish Balay 
4545975b3b6SBarry 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)
4557a7a6802SBarry Smith {
4567a7a6802SBarry Smith   char     *c1, *c2;
4577a7a6802SBarry Smith   PetscBool flag;
4587a7a6802SBarry Smith 
4597a7a6802SBarry Smith   FIXCHAR(pre, len1, c1);
4607a7a6802SBarry Smith   FIXCHAR(name, len2, c2);
4615975b3b6SBarry Smith   *ierr = PetscOptionsGetScalar(*options, c1, c2, dvalue, &flag);
4625975b3b6SBarry Smith   if (*ierr) return;
4637a7a6802SBarry Smith   if (!FORTRANNULLBOOL(flg)) *flg = flag;
4647a7a6802SBarry Smith   FREECHAR(pre, c1);
4657a7a6802SBarry Smith   FREECHAR(name, c2);
4667a7a6802SBarry Smith }
4677a7a6802SBarry Smith 
4685975b3b6SBarry 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)
469b0c0aa2bSBlaise Bourdin {
470b0c0aa2bSBlaise Bourdin   char     *c1, *c2;
471b0c0aa2bSBlaise Bourdin   PetscBool flag;
472b0c0aa2bSBlaise Bourdin 
473b0c0aa2bSBlaise Bourdin   FIXCHAR(pre, len1, c1);
474b0c0aa2bSBlaise Bourdin   FIXCHAR(name, len2, c2);
4755975b3b6SBarry Smith   *ierr = PetscOptionsGetScalarArray(*options, c1, c2, dvalue, nmax, &flag);
4765975b3b6SBarry Smith   if (*ierr) return;
477b0c0aa2bSBlaise Bourdin   if (!FORTRANNULLBOOL(flg)) *flg = flag;
478b0c0aa2bSBlaise Bourdin   FREECHAR(pre, c1);
479b0c0aa2bSBlaise Bourdin   FREECHAR(name, c2);
480b0c0aa2bSBlaise Bourdin }
481b0c0aa2bSBlaise Bourdin 
4825975b3b6SBarry 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)
4839306f9a3SSatish Balay {
4849306f9a3SSatish Balay   char     *c1, *c2;
485ace3abfcSBarry Smith   PetscBool flag;
4869306f9a3SSatish Balay 
4879306f9a3SSatish Balay   FIXCHAR(pre, len1, c1);
4889306f9a3SSatish Balay   FIXCHAR(name, len2, c2);
4895975b3b6SBarry Smith   *ierr = PetscOptionsGetRealArray(*options, c1, c2, dvalue, nmax, &flag);
4905975b3b6SBarry Smith   if (*ierr) return;
4915c550465SJed Brown   if (!FORTRANNULLBOOL(flg)) *flg = flag;
4929306f9a3SSatish Balay   FREECHAR(pre, c1);
4939306f9a3SSatish Balay   FREECHAR(name, c2);
4949306f9a3SSatish Balay }
4959306f9a3SSatish Balay 
4965975b3b6SBarry 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)
4979306f9a3SSatish Balay {
4989306f9a3SSatish Balay   char     *c1, *c2;
499ace3abfcSBarry Smith   PetscBool flag;
5009306f9a3SSatish Balay 
5019306f9a3SSatish Balay   FIXCHAR(pre, len1, c1);
5029306f9a3SSatish Balay   FIXCHAR(name, len2, c2);
5035975b3b6SBarry Smith   *ierr = PetscOptionsGetIntArray(*options, c1, c2, dvalue, nmax, &flag);
5045975b3b6SBarry Smith   if (*ierr) return;
5055c550465SJed Brown   if (!FORTRANNULLBOOL(flg)) *flg = flag;
5069306f9a3SSatish Balay   FREECHAR(pre, c1);
5079306f9a3SSatish Balay   FREECHAR(name, c2);
5089306f9a3SSatish Balay }
5099306f9a3SSatish Balay 
5105975b3b6SBarry 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)
5119306f9a3SSatish Balay {
5129306f9a3SSatish Balay   char     *c1, *c2, *c3;
5134610e317SSatish Balay   size_t    len3;
514ace3abfcSBarry Smith   PetscBool flag;
5159306f9a3SSatish Balay 
5169306f9a3SSatish Balay   FIXCHAR(pre, len1, c1);
5179306f9a3SSatish Balay   FIXCHAR(name, len2, c2);
5189306f9a3SSatish Balay   c3   = string;
5199306f9a3SSatish Balay   len3 = len - 1;
5209306f9a3SSatish Balay 
5215975b3b6SBarry Smith   *ierr = PetscOptionsGetString(*options, c1, c2, c3, len3, &flag);
5225975b3b6SBarry Smith   if (*ierr) return;
5235c550465SJed Brown   if (!FORTRANNULLBOOL(flg)) *flg = flag;
5249306f9a3SSatish Balay   FREECHAR(pre, c1);
5259306f9a3SSatish Balay   FREECHAR(name, c2);
5267c363081SBarry Smith   FIXRETURNCHAR(flag, string, len);
5279306f9a3SSatish Balay }
5289306f9a3SSatish Balay 
52919caf8f3SSatish Balay PETSC_EXTERN void petscgetprogramname_(char *name, PetscErrorCode *ierr, PETSC_FORTRAN_CHARLEN_T len_in)
5309306f9a3SSatish Balay {
5319306f9a3SSatish Balay   char  *tmp;
5324610e317SSatish Balay   size_t len;
5339306f9a3SSatish Balay   tmp   = name;
5349306f9a3SSatish Balay   len   = len_in - 1;
5359306f9a3SSatish Balay   *ierr = PetscGetProgramName(tmp, len);
5367c363081SBarry Smith   FIXRETURNCHAR(PETSC_TRUE, name, len_in);
5379306f9a3SSatish Balay }
5389306f9a3SSatish Balay 
53919caf8f3SSatish Balay PETSC_EXTERN void petscoptionsview_(PetscOptions *options, PetscViewer *vin, PetscErrorCode *ierr)
5403a15af8cSBlaise Bourdin {
5413a15af8cSBlaise Bourdin   PetscViewer v;
5423a15af8cSBlaise Bourdin 
5433a15af8cSBlaise Bourdin   PetscPatchDefaultViewers_Fortran(vin, v);
544c5929fdfSBarry Smith   *ierr = PetscOptionsView(*options, v);
5453a15af8cSBlaise Bourdin }
5463a15af8cSBlaise Bourdin 
54719caf8f3SSatish Balay PETSC_EXTERN void petscobjectviewfromoptions_(PetscObject *obj, PetscObject *bobj, char *option, PetscErrorCode *ierr, PETSC_FORTRAN_CHARLEN_T loption)
548a2865142SMatthew G. Knepley {
549685405a1SBarry Smith   char *o;
550a2865142SMatthew G. Knepley 
551a2865142SMatthew G. Knepley   FIXCHAR(option, loption, o);
552b14c0cbaSBlaise Bourdin   CHKFORTRANNULLOBJECT(obj);
5535975b3b6SBarry Smith   *ierr = PetscObjectViewFromOptions(*obj, *bobj, o);
5545975b3b6SBarry Smith   if (*ierr) return;
555a2865142SMatthew G. Knepley   FREECHAR(option, o);
556a2865142SMatthew G. Knepley }
557a530d236SBarry Smith 
558a530d236SBarry Smith PETSC_EXTERN void petscsubcommgetparent_(PetscSubcomm *scomm, MPI_Fint *pcomm, int *ierr)
559a530d236SBarry Smith {
560a530d236SBarry Smith   MPI_Comm tcomm;
561a530d236SBarry Smith   *ierr  = PetscSubcommGetParent(*scomm, &tcomm);
562a530d236SBarry Smith   *pcomm = MPI_Comm_c2f(tcomm);
563a530d236SBarry Smith }
564a530d236SBarry Smith 
565a530d236SBarry Smith PETSC_EXTERN void petscsubcommgetcontiguousparent_(PetscSubcomm *scomm, MPI_Fint *pcomm, int *ierr)
566a530d236SBarry Smith {
567a530d236SBarry Smith   MPI_Comm tcomm;
568a530d236SBarry Smith   *ierr  = PetscSubcommGetContiguousParent(*scomm, &tcomm);
569a530d236SBarry Smith   *pcomm = MPI_Comm_c2f(tcomm);
570a530d236SBarry Smith }
571a530d236SBarry Smith 
572a530d236SBarry Smith PETSC_EXTERN void petscsubcommgetchild_(PetscSubcomm *scomm, MPI_Fint *ccomm, int *ierr)
573a530d236SBarry Smith {
574a530d236SBarry Smith   MPI_Comm tcomm;
575a530d236SBarry Smith   *ierr  = PetscSubcommGetChild(*scomm, &tcomm);
576a530d236SBarry Smith   *ccomm = MPI_Comm_c2f(tcomm);
577a530d236SBarry Smith }
578a530d236SBarry Smith 
579a530d236SBarry Smith PETSC_EXTERN void petscsubcommview_(PetscSubcomm *psubcomm, PetscViewer *viewer, int *ierr)
580a530d236SBarry Smith {
581a530d236SBarry Smith   PetscViewer v;
582a530d236SBarry Smith   PetscPatchDefaultViewers_Fortran(viewer, v);
583a530d236SBarry Smith   *ierr = PetscSubcommView(*psubcomm, v);
584a530d236SBarry Smith }
585