xref: /petsc/src/sys/objects/ftn-custom/zoptionsf.c (revision fe7aa59fd2aa140db60e6d3bcaddfca3cbec1354)
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/ftnimpl.h>
8 #include <petscviewer.h>
9 
10 #if defined(PETSC_HAVE_FORTRAN_CAPS)
11   #define petscoptionsbegin_               PETSCOPTIONSBEGIN
12   #define petscoptionsend_                 PETSCOPTIONSEND
13   #define petscoptionsbool_                PETSCOPTIONSBOOL
14   #define petscoptionsbool3_               PETSCOPTIONSBOOL3
15   #define petscoptionsboolarray_           PETSCOPTIONSBOOLARRAY
16   #define petscoptionsenumprivate_         PETSCOPTIONSENUMPRIVATE
17   #define petscoptionsint_                 PETSCOPTIONSINT
18   #define petscoptionsintarray_            PETSCOPTIONSINTARRAY
19   #define petscoptionsreal_                PETSCOPTIONSREAL
20   #define petscoptionsrealarray_           PETSCOPTIONSREALARRAY
21   #define petscoptionsscalar_              PETSCOPTIONSSCALAR
22   #define petscoptionsscalararray_         PETSCOPTIONSSCALARARRAY
23   #define petscoptionsstring_              PETSCOPTIONSSTRING
24   #define petscsubcommgetparent_           PETSCSUBCOMMGETPARENT
25   #define petscsubcommgetcontiguousparent_ PETSCSUBCOMMGETCONTIGUOUSPARENT
26   #define petscsubcommgetchild_            PETSCSUBCOMMGETCHILD
27   #define petscoptionsallused_             PETSCOPTIONSALLUSED
28   #define petscoptionsgetenumprivate_      PETSCOPTIONSGETENUMPRIVATE
29   #define petscoptionsgetstring_           PETSCOPTIONSGETSTRING
30 #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE)
31   #define petscoptionsbegin_               petscoptionsbegin
32   #define petscoptionsend_                 petscoptionsend
33   #define petscoptionsbool_                petscoptionsbool
34   #define petscoptionsbool3_               petscoptionsbool3
35   #define petscoptionsboolarray_           petscoptionsboolarray
36   #define petscoptionsenumprivate_         petscoptionsenumprivate
37   #define petscoptionsint_                 petscoptionsint
38   #define petscoptionsintarray_            petscoptionsintarray
39   #define petscoptionsreal_                petscoptionsreal
40   #define petscoptionsrealarray_           petscoptionsrealarray
41   #define petscoptionsscalar_              petscoptionsscalar
42   #define petscoptionsscalararray_         petscoptionsscalararray
43   #define petscoptionsstring_              petscoptionsstring
44   #define petscsubcommgetparent_           petscsubcommgetparent
45   #define petscsubcommgetcontiguousparent_ petscsubcommgetcontiguousparent
46   #define petscsubcommgetchild_            petscsubcommgetchild
47   #define petscoptionsallused_             petscoptionsallused
48   #define petscoptionsgetenumprivate_      petscoptionsgetenumprivate
49   #define petscoptionsgetstring_           petscoptionsgetstring
50 #endif
51 
52 static struct _n_PetscOptionItems PetscOptionsObjectBase;
53 static PetscOptionItems           PetscOptionsObject = NULL;
54 
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)55 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)
56 {
57   MPI_Comm comm = MPI_Comm_f2c(*fcomm);
58   char    *cprefix, *cmess, *csec;
59 
60   FIXCHAR(prefix, lenprefix, cprefix);
61   FIXCHAR(mess, lenmess, cmess);
62   FIXCHAR(sec, lensec, csec);
63   if (PetscOptionsObject) {
64     *ierr = PETSC_ERR_ARG_WRONGSTATE;
65     return;
66   }
67   PetscOptionsObject = &PetscOptionsObjectBase;
68   *ierr              = PetscMemzero(PetscOptionsObject, sizeof(*PetscOptionsObject));
69   if (*ierr) return;
70   PetscOptionsObject->count = 1;
71   *ierr                     = PetscOptionsBegin_Private(PetscOptionsObject, comm, cprefix, cmess, csec);
72   if (*ierr) return;
73   FREECHAR(prefix, cprefix);
74   FREECHAR(mess, cmess);
75   FREECHAR(sec, csec);
76 }
77 
petscoptionsend_(PetscErrorCode * ierr)78 PETSC_EXTERN void petscoptionsend_(PetscErrorCode *ierr)
79 {
80   if (!PetscOptionsObject) {
81     *ierr = PETSC_ERR_ARG_WRONGSTATE;
82     return;
83   }
84   PetscOptionsObject->count = 1;
85   *ierr                     = PetscOptionsEnd_Private(PetscOptionsObject);
86   PetscOptionsObject        = NULL;
87 }
88 
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)89 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)
90 {
91   char *copt, *ctext, *cman;
92 
93   FIXCHAR(opt, lenopt, copt);
94   FIXCHAR(text, lentext, ctext);
95   FIXCHAR(man, lenman, cman);
96   if (!PetscOptionsObject) {
97     *ierr = PETSC_ERR_ARG_WRONGSTATE;
98     return;
99   }
100   PetscOptionsObject->count = 1;
101   *ierr                     = PetscOptionsBool_Private(PetscOptionsObject, copt, ctext, cman, *currentvalue, value, set);
102   if (*ierr) return;
103   FREECHAR(opt, copt);
104   FREECHAR(text, ctext);
105   FREECHAR(man, cman);
106 }
107 
petscoptionsbool3_(char * opt,char * text,char * man,PetscBool3 * currentvalue,PetscBool3 * value,PetscBool * set,PetscErrorCode * ierr,PETSC_FORTRAN_CHARLEN_T lenopt,PETSC_FORTRAN_CHARLEN_T lentext,PETSC_FORTRAN_CHARLEN_T lenman)108 PETSC_EXTERN void petscoptionsbool3_(char *opt, char *text, char *man, PetscBool3 *currentvalue, PetscBool3 *value, PetscBool *set, PetscErrorCode *ierr, PETSC_FORTRAN_CHARLEN_T lenopt, PETSC_FORTRAN_CHARLEN_T lentext, PETSC_FORTRAN_CHARLEN_T lenman)
109 {
110   char *copt, *ctext, *cman;
111 
112   FIXCHAR(opt, lenopt, copt);
113   FIXCHAR(text, lentext, ctext);
114   FIXCHAR(man, lenman, cman);
115   if (!PetscOptionsObject) {
116     *ierr = PETSC_ERR_ARG_WRONGSTATE;
117     return;
118   }
119   PetscOptionsObject->count = 1;
120   *ierr                     = PetscOptionsBool3_Private(PetscOptionsObject, copt, ctext, cman, *currentvalue, value, set);
121   if (*ierr) return;
122   FREECHAR(opt, copt);
123   FREECHAR(text, ctext);
124   FREECHAR(man, cman);
125 }
126 
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)127 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)
128 {
129   char     *copt, *ctext, *cman;
130   PetscBool flag;
131 
132   FIXCHAR(opt, lenopt, copt);
133   FIXCHAR(text, lentext, ctext);
134   FIXCHAR(man, lenman, cman);
135   if (!PetscOptionsObject) {
136     *ierr = PETSC_ERR_ARG_WRONGSTATE;
137     return;
138   }
139   PetscOptionsObject->count = 1;
140   *ierr                     = PetscOptionsBoolArray_Private(PetscOptionsObject, copt, ctext, cman, dvalue, nmax, &flag);
141   if (*ierr) return;
142   if (!FORTRANNULLBOOL(flg)) *flg = flag;
143   FREECHAR(opt, copt);
144   FREECHAR(text, ctext);
145   FREECHAR(man, cman);
146 }
147 
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)148 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)
149 {
150   char     *copt, *ctext, *cman;
151   PetscBool flag;
152 
153   FIXCHAR(opt, lenopt, copt);
154   FIXCHAR(text, lentext, ctext);
155   FIXCHAR(man, lenman, cman);
156   if (!PetscOptionsObject) {
157     *ierr = PETSC_ERR_ARG_WRONGSTATE;
158     return;
159   }
160   PetscOptionsObject->count = 1;
161   *ierr                     = PetscOptionsEnum_Private(PetscOptionsObject, copt, ctext, cman, list, *currentvalue, ivalue, &flag);
162   if (*ierr) return;
163   if (!FORTRANNULLBOOL(flg)) *flg = flag;
164   FREECHAR(opt, copt);
165   FREECHAR(text, ctext);
166   FREECHAR(man, cman);
167 }
168 
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)169 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)
170 {
171   char *copt, *ctext, *cman;
172 
173   FIXCHAR(opt, lenopt, copt);
174   FIXCHAR(text, lentext, ctext);
175   FIXCHAR(man, lenman, cman);
176   if (!PetscOptionsObject) {
177     *ierr = PETSC_ERR_ARG_WRONGSTATE;
178     return;
179   }
180   PetscOptionsObject->count = 1;
181   *ierr                     = PetscOptionsInt_Private(PetscOptionsObject, copt, ctext, cman, *currentvalue, value, set, PETSC_INT_MIN, PETSC_INT_MAX);
182   if (*ierr) return;
183   FREECHAR(opt, copt);
184   FREECHAR(text, ctext);
185   FREECHAR(man, cman);
186 }
187 
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)188 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)
189 {
190   char *copt, *ctext, *cman;
191 
192   FIXCHAR(opt, lenopt, copt);
193   FIXCHAR(text, lentext, ctext);
194   FIXCHAR(man, lenman, cman);
195   if (!PetscOptionsObject) {
196     *ierr = PETSC_ERR_ARG_WRONGSTATE;
197     return;
198   }
199   PetscOptionsObject->count = 1;
200   *ierr                     = PetscOptionsIntArray_Private(PetscOptionsObject, copt, ctext, cman, currentvalue, n, set);
201   if (*ierr) return;
202   FREECHAR(opt, copt);
203   FREECHAR(text, ctext);
204   FREECHAR(man, cman);
205 }
206 
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)207 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)
208 {
209   char *copt, *ctext, *cman;
210 
211   FIXCHAR(opt, lenopt, copt);
212   FIXCHAR(text, lentext, ctext);
213   FIXCHAR(man, lenman, cman);
214   if (!PetscOptionsObject) {
215     *ierr = PETSC_ERR_ARG_WRONGSTATE;
216     return;
217   }
218   PetscOptionsObject->count = 1;
219   *ierr                     = PetscOptionsReal_Private(PetscOptionsObject, copt, ctext, cman, *currentvalue, value, set, PETSC_MIN_REAL, PETSC_MAX_REAL);
220   if (*ierr) return;
221   FREECHAR(opt, copt);
222   FREECHAR(text, ctext);
223   FREECHAR(man, cman);
224 }
225 
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)226 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)
227 {
228   char *copt, *ctext, *cman;
229 
230   FIXCHAR(opt, lenopt, copt);
231   FIXCHAR(text, lentext, ctext);
232   FIXCHAR(man, lenman, cman);
233   if (!PetscOptionsObject) {
234     *ierr = PETSC_ERR_ARG_WRONGSTATE;
235     return;
236   }
237   PetscOptionsObject->count = 1;
238   *ierr                     = PetscOptionsRealArray_Private(PetscOptionsObject, copt, ctext, cman, currentvalue, n, set);
239   if (*ierr) return;
240   FREECHAR(opt, copt);
241   FREECHAR(text, ctext);
242   FREECHAR(man, cman);
243 }
244 
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)245 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)
246 {
247   char *copt, *ctext, *cman;
248 
249   FIXCHAR(opt, lenopt, copt);
250   FIXCHAR(text, lentext, ctext);
251   FIXCHAR(man, lenman, cman);
252   if (!PetscOptionsObject) {
253     *ierr = PETSC_ERR_ARG_WRONGSTATE;
254     return;
255   }
256   PetscOptionsObject->count = 1;
257   *ierr                     = PetscOptionsScalar_Private(PetscOptionsObject, copt, ctext, cman, *currentvalue, value, set);
258   if (*ierr) return;
259   FREECHAR(opt, copt);
260   FREECHAR(text, ctext);
261   FREECHAR(man, cman);
262 }
263 
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)264 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)
265 {
266   char *copt, *ctext, *cman;
267 
268   FIXCHAR(opt, lenopt, copt);
269   FIXCHAR(text, lentext, ctext);
270   FIXCHAR(man, lenman, cman);
271   if (!PetscOptionsObject) {
272     *ierr = PETSC_ERR_ARG_WRONGSTATE;
273     return;
274   }
275   PetscOptionsObject->count = 1;
276   *ierr                     = PetscOptionsScalarArray_Private(PetscOptionsObject, copt, ctext, cman, currentvalue, n, set);
277   if (*ierr) return;
278   FREECHAR(opt, copt);
279   FREECHAR(text, ctext);
280   FREECHAR(man, cman);
281 }
282 
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)283 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)
284 {
285   char     *copt, *ctext, *cman, *ccurrent;
286   PetscBool flag;
287 
288   FIXCHAR(opt, lenopt, copt);
289   FIXCHAR(text, lentext, ctext);
290   FIXCHAR(man, lenman, cman);
291   FIXCHAR(currentvalue, lencurrent, ccurrent);
292 
293   if (!PetscOptionsObject) {
294     *ierr = PETSC_ERR_ARG_WRONGSTATE;
295     return;
296   }
297   PetscOptionsObject->count = 1;
298 
299   *ierr = PetscOptionsString_Private(PetscOptionsObject, copt, ctext, cman, ccurrent, value, lenvalue - 1, &flag);
300   if (*ierr) return;
301   if (!FORTRANNULLBOOL(flg)) *flg = flag;
302   FREECHAR(opt, copt);
303   FREECHAR(text, ctext);
304   FREECHAR(man, cman);
305   FREECHAR(currentvalue, ccurrent);
306   FIXRETURNCHAR(flag, value, lenvalue);
307 }
308 
petscoptionsgetenumprivate_(PetscOptions * opt,char * pre,char * name,const char * const * list,PetscEnum * ivalue,PetscBool * flg,PetscErrorCode * ierr,PETSC_FORTRAN_CHARLEN_T len1,PETSC_FORTRAN_CHARLEN_T len2)309 PETSC_EXTERN void petscoptionsgetenumprivate_(PetscOptions *opt, char *pre, char *name, const char *const *list, PetscEnum *ivalue, PetscBool *flg, PetscErrorCode *ierr, PETSC_FORTRAN_CHARLEN_T len1, PETSC_FORTRAN_CHARLEN_T len2)
310 {
311   char     *c1, *c2;
312   PetscBool flag;
313 
314   FIXCHAR(pre, len1, c1);
315   FIXCHAR(name, len2, c2);
316   *ierr = PetscOptionsGetEnum(*opt, c1, c2, list, ivalue, &flag);
317   if (*ierr) return;
318   if (!FORTRANNULLBOOL(flg)) *flg = flag;
319   FREECHAR(pre, c1);
320   FREECHAR(name, c2);
321 }
322 
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)323 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)
324 {
325   char     *c1, *c2, *c3;
326   size_t    len3;
327   PetscBool flag;
328 
329   FIXCHAR(pre, len1, c1);
330   FIXCHAR(name, len2, c2);
331   c3   = string;
332   len3 = len - 1;
333 
334   *ierr = PetscOptionsGetString(*options, c1, c2, c3, len3, &flag);
335   if (*ierr) return;
336   if (!FORTRANNULLBOOL(flg)) *flg = flag;
337   FREECHAR(pre, c1);
338   FREECHAR(name, c2);
339   FIXRETURNCHAR(flag, string, len);
340 }
petscsubcommgetparent_(PetscSubcomm * scomm,MPI_Fint * pcomm,int * ierr)341 PETSC_EXTERN void petscsubcommgetparent_(PetscSubcomm *scomm, MPI_Fint *pcomm, int *ierr)
342 {
343   MPI_Comm tcomm;
344 
345   *ierr  = PetscSubcommGetParent(*scomm, &tcomm);
346   *pcomm = MPI_Comm_c2f(tcomm);
347 }
348 
petscsubcommgetcontiguousparent_(PetscSubcomm * scomm,MPI_Fint * pcomm,int * ierr)349 PETSC_EXTERN void petscsubcommgetcontiguousparent_(PetscSubcomm *scomm, MPI_Fint *pcomm, int *ierr)
350 {
351   MPI_Comm tcomm;
352 
353   *ierr  = PetscSubcommGetContiguousParent(*scomm, &tcomm);
354   *pcomm = MPI_Comm_c2f(tcomm);
355 }
356 
petscsubcommgetchild_(PetscSubcomm * scomm,MPI_Fint * ccomm,int * ierr)357 PETSC_EXTERN void petscsubcommgetchild_(PetscSubcomm *scomm, MPI_Fint *ccomm, int *ierr)
358 {
359   MPI_Comm tcomm;
360 
361   *ierr  = PetscSubcommGetChild(*scomm, &tcomm);
362   *ccomm = MPI_Comm_c2f(tcomm);
363 }
364