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 #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE) 25 #define petscoptionsgetenumprivate_ petscoptionsgetenumprivate 26 #define petscoptionsgetbool_ petscoptionsgetbool 27 #define petscoptionssetvalue_ petscoptionssetvalue 28 #define petscoptionsclearvalue_ petscoptionsclearvalue 29 #define petscoptionshasname_ petscoptionshasname 30 #define petscoptionsgetint_ petscoptionsgetint 31 #define petscoptionsgetreal_ petscoptionsgetreal 32 #define petscoptionsgetrealarray_ petscoptionsgetrealarray 33 #define petscoptionsgetstring_ petscoptionsgetstring 34 #define petscoptionsgetintarray_ petscoptionsgetintarray 35 #define petscgetprogramname_ petscgetprogramname 36 #define petscoptionsinsertfile_ petscoptionsinsertfile 37 #define petscoptionsclear_ petscoptionsclear 38 #define petscoptionsinsertstring_ petscoptionsinsertstring 39 #endif 40 41 EXTERN_C_BEGIN 42 43 /* ---------------------------------------------------------------------*/ 44 45 void PETSC_STDCALL petscoptionsinsertstring_(CHAR file PETSC_MIXED_LEN(len),PetscErrorCode *ierr PETSC_END_LEN(len)) 46 { 47 char *c1; 48 49 FIXCHAR(file,len,c1); 50 *ierr = PetscOptionsInsertString(c1); 51 FREECHAR(file,c1); 52 } 53 54 void PETSC_STDCALL petscoptionsinsertfile_(MPI_Fint *comm,CHAR file PETSC_MIXED_LEN(len),PetscBool *require,PetscErrorCode *ierr PETSC_END_LEN(len)) 55 { 56 char *c1; 57 58 FIXCHAR(file,len,c1); 59 *ierr = PetscOptionsInsertFile(MPI_Comm_f2c(*comm),c1,*require); 60 FREECHAR(file,c1); 61 } 62 63 void PETSC_STDCALL petscoptionssetvalue_(CHAR name PETSC_MIXED_LEN(len1),CHAR value PETSC_MIXED_LEN(len2), 64 PetscErrorCode *ierr PETSC_END_LEN(len1) PETSC_END_LEN(len2)) 65 { 66 char *c1,*c2; 67 68 FIXCHAR(name,len1,c1); 69 FIXCHAR(value,len2,c2); 70 *ierr = PetscOptionsSetValue(c1,c2); 71 FREECHAR(name,c1); 72 FREECHAR(value,c2); 73 } 74 75 void PETSC_STDCALL petscoptionsclear_(PetscErrorCode *ierr) 76 { 77 *ierr = PetscOptionsClear(); 78 } 79 80 void PETSC_STDCALL petscoptionsclearvalue_(CHAR name PETSC_MIXED_LEN(len),PetscErrorCode *ierr PETSC_END_LEN(len)) 81 { 82 char *c1; 83 84 FIXCHAR(name,len,c1); 85 *ierr = PetscOptionsClearValue(c1); 86 FREECHAR(name,c1); 87 } 88 89 void PETSC_STDCALL petscoptionshasname_(CHAR pre PETSC_MIXED_LEN(len1),CHAR name PETSC_MIXED_LEN(len2), 90 PetscBool *flg,PetscErrorCode *ierr PETSC_END_LEN(len1) PETSC_END_LEN(len2)) 91 { 92 char *c1,*c2; 93 94 FIXCHAR(pre,len1,c1); 95 FIXCHAR(name,len2,c2); 96 *ierr = PetscOptionsHasName(c1,c2,flg); 97 FREECHAR(pre,c1); 98 FREECHAR(name,c2); 99 } 100 101 void PETSC_STDCALL petscoptionsgetint_(CHAR pre PETSC_MIXED_LEN(len1),CHAR name PETSC_MIXED_LEN(len2), 102 PetscInt *ivalue,PetscBool *flg,PetscErrorCode *ierr PETSC_END_LEN(len1) PETSC_END_LEN(len2)) 103 { 104 char *c1,*c2; 105 PetscBool flag; 106 107 FIXCHAR(pre,len1,c1); 108 FIXCHAR(name,len2,c2); 109 *ierr = PetscOptionsGetInt(c1,c2,ivalue,&flag); 110 if (!FORTRANNULLBOOL(flg)) *flg = flag; 111 FREECHAR(pre,c1); 112 FREECHAR(name,c2); 113 } 114 115 void PETSC_STDCALL petscoptionsgetenumprivate_(CHAR pre PETSC_MIXED_LEN(len1),CHAR name PETSC_MIXED_LEN(len2),const char *const*list, 116 PetscEnum *ivalue,PetscBool *flg,PetscErrorCode *ierr PETSC_END_LEN(len1) PETSC_END_LEN(len2)) 117 { 118 char *c1,*c2; 119 PetscBool flag; 120 121 FIXCHAR(pre,len1,c1); 122 FIXCHAR(name,len2,c2); 123 *ierr = PetscOptionsGetEnum(c1,c2,list,ivalue,&flag); 124 if (!FORTRANNULLBOOL(flg)) *flg = flag; 125 FREECHAR(pre,c1); 126 FREECHAR(name,c2); 127 } 128 129 void PETSC_STDCALL petscoptionsgetbool_(CHAR pre PETSC_MIXED_LEN(len1),CHAR name PETSC_MIXED_LEN(len2), 130 PetscBool *ivalue,PetscBool *flg,PetscErrorCode *ierr PETSC_END_LEN(len1) PETSC_END_LEN(len2)) 131 { 132 char *c1,*c2; 133 PetscBool flag; 134 135 FIXCHAR(pre,len1,c1); 136 FIXCHAR(name,len2,c2); 137 *ierr = PetscOptionsGetBool(c1,c2,ivalue,&flag); 138 if (!FORTRANNULLBOOL(flg)) *flg = flag; 139 FREECHAR(pre,c1); 140 FREECHAR(name,c2); 141 } 142 143 void PETSC_STDCALL petscoptionsgetreal_(CHAR pre PETSC_MIXED_LEN(len1),CHAR name PETSC_MIXED_LEN(len2), 144 PetscReal *dvalue,PetscBool *flg,PetscErrorCode *ierr PETSC_END_LEN(len1) PETSC_END_LEN(len2)) 145 { 146 char *c1,*c2; 147 PetscBool flag; 148 149 FIXCHAR(pre,len1,c1); 150 FIXCHAR(name,len2,c2); 151 *ierr = PetscOptionsGetReal(c1,c2,dvalue,&flag); 152 if (!FORTRANNULLBOOL(flg)) *flg = flag; 153 FREECHAR(pre,c1); 154 FREECHAR(name,c2); 155 } 156 157 void PETSC_STDCALL petscoptionsgetrealarray_(CHAR pre PETSC_MIXED_LEN(len1),CHAR name PETSC_MIXED_LEN(len2), 158 PetscReal *dvalue,PetscInt *nmax,PetscBool *flg,PetscErrorCode *ierr PETSC_END_LEN(len1) PETSC_END_LEN(len2)) 159 { 160 char *c1,*c2; 161 PetscBool flag; 162 163 FIXCHAR(pre,len1,c1); 164 FIXCHAR(name,len2,c2); 165 *ierr = PetscOptionsGetRealArray(c1,c2,dvalue,nmax,&flag); 166 if (!FORTRANNULLBOOL(flg)) *flg = flag; 167 FREECHAR(pre,c1); 168 FREECHAR(name,c2); 169 } 170 171 void PETSC_STDCALL petscoptionsgetintarray_(CHAR pre PETSC_MIXED_LEN(len1),CHAR name PETSC_MIXED_LEN(len2), 172 PetscInt *dvalue,PetscInt *nmax,PetscBool *flg,PetscErrorCode *ierr PETSC_END_LEN(len1) PETSC_END_LEN(len2)) 173 { 174 char *c1,*c2; 175 PetscBool flag; 176 177 FIXCHAR(pre,len1,c1); 178 FIXCHAR(name,len2,c2); 179 *ierr = PetscOptionsGetIntArray(c1,c2,dvalue,nmax,&flag); 180 if (!FORTRANNULLBOOL(flg)) *flg = flag; 181 FREECHAR(pre,c1); 182 FREECHAR(name,c2); 183 } 184 185 void PETSC_STDCALL petscoptionsgetstring_(CHAR pre PETSC_MIXED_LEN(len1),CHAR name PETSC_MIXED_LEN(len2), 186 CHAR string PETSC_MIXED_LEN(len),PetscBool *flg, 187 PetscErrorCode *ierr PETSC_END_LEN(len1) PETSC_END_LEN(len2) PETSC_END_LEN(len)) 188 { 189 char *c1,*c2,*c3; 190 size_t len3; 191 PetscBool flag; 192 193 FIXCHAR(pre,len1,c1); 194 FIXCHAR(name,len2,c2); 195 c3 = string; 196 len3 = len - 1; 197 198 *ierr = PetscOptionsGetString(c1,c2,c3,len3,&flag); 199 if (!FORTRANNULLBOOL(flg)) *flg = flag; 200 FREECHAR(pre,c1); 201 FREECHAR(name,c2); 202 FIXRETURNCHAR(flag,string,len); 203 } 204 205 void PETSC_STDCALL petscgetprogramname_(CHAR name PETSC_MIXED_LEN(len_in),PetscErrorCode *ierr PETSC_END_LEN(len_in)) 206 { 207 char *tmp; 208 size_t len; 209 tmp = name; 210 len = len_in - 1; 211 *ierr = PetscGetProgramName(tmp,len); 212 FIXRETURNCHAR(PETSC_TRUE,name,len_in); 213 } 214 215 EXTERN_C_END 216 217