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