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 #ifdef 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