1 #include <petsc/private/fortranimpl.h> 2 #include <petsc/private/f90impl.h> 3 #include <petscmat.h> 4 #include <petscviewer.h> 5 6 #if defined(PETSC_HAVE_FORTRAN_CAPS) 7 #define matgetvalues_ MATGETVALUES 8 #define matgetvalues0_ MATGETVALUES0 9 #define matgetvaluesnn1_ MATGETVALUESnn1 10 #define matgetvaluesnnnn_ MATGETVALUESnnnn 11 #define matgetvalues11_ MATGETVALUES11 12 #define matgetvalues1n_ MATGETVALUES1n 13 #define matgetvaluesn1_ MATGETVALUESn1 14 #define matsetvalues_ MATSETVALUES 15 #define matsetvaluesnnnn_ MATSETVALUESNNNN 16 #define matsetvalues0_ MATSETVALUES0 17 #define matsetvaluesnn1_ MATSETVALUESNN1 18 #define matsetvalues11_ MATSETVALUES11 19 #define matsetvalues1n_ MATSETVALUES1N 20 #define matsetvaluesn1_ MATSETVALUESN1 21 #define matsetvaluesblocked0_ MATSETVALUESBLOCKED0 22 #define matsetvaluesblocked2_ MATSETVALUESBLOCKED2 23 #define matsetvaluesblocked11_ MATSETVALUESBLOCKED11 24 #define matsetvaluesblocked111_ MATSETVALUESBLOCKED111 25 #define matsetvaluesblocked1n_ MATSETVALUESBLOCKED1N 26 #define matsetvaluesblockedn1_ MATSETVALUESBLOCKEDN1 27 #define matsetvaluesblockedlocal_ MATSETVALUESBLOCKEDLOCAL 28 #define matsetvaluesblockedlocal0_ MATSETVALUESBLOCKEDLOCAL0 29 #define matsetvaluesblockedlocal11_ MATSETVALUESBLOCKEDLOCAL11 30 #define matsetvaluesblockedlocal111_ MATSETVALUESBLOCKEDLOCAL111 31 #define matsetvaluesblockedlocal1n_ MATSETVALUESBLOCKEDLOCAL1N 32 #define matsetvaluesblockedlocaln1_ MATSETVALUESBLOCKEDLOCALN1 33 #define matsetvalueslocal_ MATSETVALUESLOCAL 34 #define matsetvalueslocal0_ MATSETVALUESLOCAL0 35 #define matsetvalueslocal11_ MATSETVALUESLOCAL11 36 #define matsetvalueslocal11nn_ MATSETVALUESLOCAL11NN 37 #define matsetvalueslocal111_ MATSETVALUESLOCAL111 38 #define matsetvalueslocal1n_ MATSETVALUESLOCAL1N 39 #define matsetvalueslocaln1_ MATSETVALUESLOCALN1 40 #define matgetrowmin_ MATGETROWMIN 41 #define matgetrowminabs_ MATGETROWMINABS 42 #define matgetrowmax_ MATGETROWMAX 43 #define matgetrowmaxabs_ MATGETROWMAXABS 44 #define matdestroymatrices_ MATDESTROYMATRICES 45 #define matdestroysubmatrices_ MATDESTROYSUBMATRICES 46 #define matgetfactor_ MATGETFACTOR 47 #define matfactorgetsolverpackage_ MATFACTORGETSOLVERPACKAGE 48 #define matgetrowij_ MATGETROWIJ 49 #define matrestorerowij_ MATRESTOREROWIJ 50 #define matgetrow_ MATGETROW 51 #define matrestorerow_ MATRESTOREROW 52 #define matload_ MATLOAD 53 #define matview_ MATVIEW 54 #define matseqaijgetarray_ MATSEQAIJGETARRAY 55 #define matseqaijrestorearray_ MATSEQAIJRESTOREARRAY 56 #define matdensegetarray_ MATDENSEGETARRAY 57 #define matdensegetarrayread_ MATDENSEGETARRAYREAD 58 #define matdenserestorearray_ MATDENSERESTOREARRAY 59 #define matdenserestorearrayread_ MATDENSERESTOREARRAYREAD 60 #define matconvert_ MATCONVERT 61 #define matcreatesubmatrices_ MATCREATESUBMATRICES 62 #define matcreatesubmatricesmpi_ MATCREATESUBMATRICESMPI 63 #define matzerorowscolumns_ MATZEROROWSCOLUMNS 64 #define matzerorowscolumnsis_ MATZEROROWSCOLUMNSIS 65 #define matzerorowsstencil_ MATZEROROWSSTENCIL 66 #define matzerorowscolumnsstencil_ MATZEROROWSCOLUMNSSTENCIL 67 #define matzerorows_ MATZEROROWS 68 #define matzerorowsis_ MATZEROROWSIS 69 #define matzerorowslocal_ MATZEROROWSLOCAL 70 #define matzerorowslocal0_ MATZEROROWSLOCAL0 71 #define matzerorowslocal1_ MATZEROROWSLOCAL1 72 #define matzerorowslocalis_ MATZEROROWSLOCALIS 73 #define matzerorowscolumnslocal_ MATZEROROWSCOLUMNSLOCAL 74 #define matzerorowscolumnslocalis_ MATZEROROWSCOLUMNSLOCALIS 75 #define matsetoptionsprefix_ MATSETOPTIONSPREFIX 76 #define matcreatevecs_ MATCREATEVECS 77 #define matnullspaceremove_ MATNULLSPACEREMOVE 78 #define matgetinfo_ MATGETINFO 79 #define matlufactor_ MATLUFACTOR 80 #define matilufactor_ MATILUFACTOR 81 #define matlufactorsymbolic_ MATLUFACTORSYMBOLIC 82 #define matlufactornumeric_ MATLUFACTORNUMERIC 83 #define matcholeskyfactor_ MATCHOLESKYFACTOR 84 #define matcholeskyfactorsymbolic_ MATCHOLESKYFACTORSYMBOLIC 85 #define matcholeskyfactornumeric_ MATCHOLESKYFACTORNUMERIC 86 #define matilufactorsymbolic_ MATILUFACTORSYMBOLIC 87 #define maticcfactorsymbolic_ MATICCFACTORSYMBOLIC 88 #define maticcfactor_ MATICCFACTOR 89 #define matfactorinfoinitialize_ MATFACTORINFOINITIALIZE 90 #define matnullspacesetfunction_ MATNULLSPACESETFUNCTION 91 #define matfindnonzerorows_ MATFINDNONZEROROWS 92 #define matgetsize_ MATGETSIZE 93 #define matgetsize00_ MATGETSIZE00 94 #define matgetsize10_ MATGETSIZE10 95 #define matgetsize01_ MATGETSIZE01 96 #define matgetlocalsize_ MATGETLOCALSIZE 97 #define matgetlocalsize00_ MATGETLOCALSIZE00 98 #define matgetlocalsize10_ MATGETLOCALSIZE10 99 #define matgetlocalsize01_ MATGETLOCALSIZE01 100 #define matsetnullspace_ MATSETNULLSPACE 101 #define matgetownershiprange_ MATGETOWNERSHIPRANGE 102 #define matgetownershiprange00_ MATGETOWNERSHIPRANGE00 103 #define matgetownershiprange10_ MATGETOWNERSHIPRANGE10 104 #define matgetownershiprange01_ MATGETOWNERSHIPRANGE01 105 #define matgetownershiprange11_ MATGETOWNERSHIPRANGE11 106 #define matgetownershipis_ MATGETOWNERSHIPIS 107 #define matgetownershiprangecolumn_ MATGETOWNERSHIPRANGECOLUMN 108 #define matviewfromoptions_ MATVIEWFROMOPTIONS 109 #define matdestroy_ MATDESTROY 110 #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE) 111 #define matsetvalues_ matsetvalues 112 #define matsetvaluesnnnn_ matsetvaluesnnnn 113 #define matsetvalues0_ matsetvalues0 114 #define matsetvaluesnn1_ matsetvaluesnn1 115 #define matsetvalues11_ matsetvalues11 116 #define matsetvaluesn1_ matsetvaluesn1 117 #define matsetvalues1n_ matsetvalues1n 118 #define matsetvalueslocal_ matsetvalueslocal 119 #define matsetvalueslocal0_ matsetvalueslocal0 120 #define matsetvalueslocal11_ matsetvalueslocal11 121 #define matsetvalueslocal11nn_ matsetvalueslocal11nn 122 #define matsetvalueslocal111_ matsetvalueslocal111 123 #define matsetvalueslocal1n_ matsetvalueslocal1n 124 #define matsetvalueslocaln1_ matsetvalueslocaln1 125 #define matsetvaluesblocked_ matsetvaluesblocked 126 #define matsetvaluesblocked0_ matsetvaluesblocked0 127 #define matsetvaluesblocked2_ matsetvaluesblocked2 128 #define matsetvaluesblocked11_ matsetvaluesblocked11 129 #define matsetvaluesblocked111_ matsetvaluesblocked111 130 #define matsetvaluesblocked1n_ matsetvaluesblocked1n 131 #define matsetvaluesblockedn1_ matsetvaluesblockedn1 132 #define matsetvaluesblockedlocal_ matsetvaluesblockedlocal 133 #define matsetvaluesblockedlocal0_ matsetvaluesblockedlocal0 134 #define matsetvaluesblockedlocal11_ matsetvaluesblockedlocal11 135 #define matsetvaluesblockedlocal111_ matsetvaluesblockedlocal111 136 #define matsetvaluesblockedlocal1n_ matsetvaluesblockedlocal1n 137 #define matsetvaluesblockedlocaln1_ matsetvaluesblockedlocaln1 138 #define matgetrowmin_ matgetrowmin 139 #define matgetrowminabs_ matgetrowminabs 140 #define matgetrowmax_ matgetrowmax 141 #define matgetrowmaxabs_ matgetrowmaxabs 142 #define matdestroymatrices_ matdestroymatrices 143 #define matdestroysubmatrices_ matdestroysubmatrices 144 #define matgetfactor_ matgetfactor 145 #define matfactorgetsolverpackage_ matfactorgetsolverpackage 146 #define matcreatevecs_ matcreatevecs 147 #define matgetrowij_ matgetrowij 148 #define matrestorerowij_ matrestorerowij 149 #define matgetrow_ matgetrow 150 #define matrestorerow_ matrestorerow 151 #define matview_ matview 152 #define matload_ matload 153 #define matseqaijgetarray_ matseqaijgetarray 154 #define matseqaijrestorearray_ matseqaijrestorearray 155 #define matdensegetarray_ matdensegetarray 156 #define matdensegetarrayread_ matdensegetarrayread 157 #define matdenserestorearray_ matdenserestorearray 158 #define matdenserestorearrayread_ matdenserestorearrayread 159 #define matconvert_ matconvert 160 #define matcreatesubmatrices_ matcreatesubmatrices 161 #define matcreatesubmatricesmpi_ matcreatesubmatricesmpi 162 #define matzerorowscolumns_ matzerorowscolumns 163 #define matzerorowscolumnsis_ matzerorowscolumnsis 164 #define matzerorowsstencil_ matzerorowsstencil 165 #define matzerorowscolumnsstencil_ matzerorowscolumnsstencil 166 #define matzerorows_ matzerorows 167 #define matzerorowsis_ matzerorowsis 168 #define matzerorowslocal_ matzerorowslocal 169 #define matzerorowslocalis_ matzerorowslocalis 170 #define matzerorowscolumnslocal_ matzerorowscolumnslocal 171 #define matzerorowscolumnslocalis_ matzerorowscolumnslocalis 172 #define matsetoptionsprefix_ matsetoptionsprefix 173 #define matnullspaceremove_ matnullspaceremove 174 #define matgetinfo_ matgetinfo 175 #define matlufactor_ matlufactor 176 #define matilufactor_ matilufactor 177 #define matlufactorsymbolic_ matlufactorsymbolic 178 #define matlufactornumeric_ matlufactornumeric 179 #define matcholeskyfactor_ matcholeskyfactor 180 #define matcholeskyfactorsymbolic_ matcholeskyfactorsymbolic 181 #define matcholeskyfactornumeric_ matcholeskyfactornumeric 182 #define matilufactorsymbolic_ matilufactorsymbolic 183 #define maticcfactorsymbolic_ maticcfactorsymbolic 184 #define maticcfactor_ maticcfactor 185 #define matfactorinfoinitialize_ matfactorinfoinitialize 186 #define matnullspacesetfunction_ matnullspacesetfunction 187 #define matfindnonzerorows_ matfindnonzerorows 188 #define matgetsize_ matgetsize 189 #define matgetsize00_ matgetsize00 190 #define matgetsize10_ matgetsize10 191 #define matgetsize01_ matgetsize01 192 #define matgetlocalsize_ matgetlocalsize 193 #define matgetlocalsize00_ matgetlocalsize00 194 #define matgetlocalsize10_ matgetlocalsize10 195 #define matgetlocalsize01_ matgetlocalsize01 196 #define matgetvalues_ matgetvalues 197 #define matgetvalues0_ matgetvalues0 198 #define matgetvaluesnn1_ matgetvaluesnn1 199 #define matgetvaluesnnnn_ matgetvaluesnnnn 200 #define matgetvalues11_ matgetvalues11 201 #define matgetvalues1n_ matgetvalues1n 202 #define matgetvaluesn1_ matgetvaluesn1 203 #define matsetnullspace_ matsetnullspace 204 #define matgetownershiprange_ matgetownershiprange 205 #define matgetownershiprange00_ matgetownershiprange00 206 #define matgetownershiprange10_ matgetownershiprange10 207 #define matgetownershiprange01_ matgetownershiprange01 208 #define matgetownershiprange11_ matgetownershiprange11 209 #define matgetownershipis_ matgetownershipis 210 #define matgetownershiprangecolumn_ matgetownershiprangecolumn 211 #define matviewfromoptions_ matviewfromoptions 212 #define matdestroy_ matdestroy 213 #endif 214 215 PETSC_EXTERN void matgetvalues_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], int *ierr) 216 { 217 *ierr = MatGetValues(*mat, *m, idxm, *n, idxn, v); 218 } 219 220 PETSC_EXTERN void matgetvalues0_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], int *ierr) 221 { 222 matgetvalues_(mat, m, idxm, n, idxn, v, ierr); 223 } 224 225 PETSC_EXTERN void matgetvaluesnn1_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], int *ierr) 226 { 227 matgetvalues_(mat, m, idxm, n, idxn, v, ierr); 228 } 229 230 PETSC_EXTERN void matgetvaluesnnnn_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], int *ierr) 231 { 232 matgetvalues_(mat, m, idxm, n, idxn, v, ierr); 233 } 234 235 PETSC_EXTERN void matgetvalues11_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], int *ierr) 236 { 237 matgetvalues_(mat, m, idxm, n, idxn, v, ierr); 238 } 239 240 PETSC_EXTERN void matgetvalues1n_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], int *ierr) 241 { 242 matgetvalues_(mat, m, idxm, n, idxn, v, ierr); 243 } 244 245 PETSC_EXTERN void matgetvaluesn1_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], int *ierr) 246 { 247 matgetvalues_(mat, m, idxm, n, idxn, v, ierr); 248 } 249 250 PETSC_EXTERN void matgetownershiprange_(Mat *mat, PetscInt *m, PetscInt *n, int *ierr) 251 { 252 CHKFORTRANNULLINTEGER(m); 253 CHKFORTRANNULLINTEGER(n); 254 *ierr = MatGetOwnershipRange(*mat, m, n); 255 } 256 257 PETSC_EXTERN void matgetownershiprange00_(Mat *mat, PetscInt *m, PetscInt *n, int *ierr) 258 { 259 CHKFORTRANNULLINTEGER(m); 260 CHKFORTRANNULLINTEGER(n); 261 *ierr = MatGetOwnershipRange(*mat, m, n); 262 } 263 264 PETSC_EXTERN void matgetownershiprange10_(Mat *mat, PetscInt *m, PetscInt *n, int *ierr) 265 { 266 CHKFORTRANNULLINTEGER(m); 267 CHKFORTRANNULLINTEGER(n); 268 *ierr = MatGetOwnershipRange(*mat, m, n); 269 } 270 271 PETSC_EXTERN void matgetownershiprange01_(Mat *mat, PetscInt *m, PetscInt *n, int *ierr) 272 { 273 CHKFORTRANNULLINTEGER(m); 274 CHKFORTRANNULLINTEGER(n); 275 *ierr = MatGetOwnershipRange(*mat, m, n); 276 } 277 278 PETSC_EXTERN void matgetownershiprange11_(Mat *mat, PetscInt *m, PetscInt *n, int *ierr) 279 { 280 CHKFORTRANNULLINTEGER(m); 281 CHKFORTRANNULLINTEGER(n); 282 *ierr = MatGetOwnershipRange(*mat, m, n); 283 } 284 285 PETSC_EXTERN void matgetownershipis_(Mat *mat, IS *m, IS *n, int *ierr) 286 { 287 CHKFORTRANNULLOBJECT(m); 288 CHKFORTRANNULLOBJECT(n); 289 *ierr = MatGetOwnershipIS(*mat, m, n); 290 } 291 292 PETSC_EXTERN void matgetownershiprangecolumn_(Mat *mat, PetscInt *m, PetscInt *n, int *ierr) 293 { 294 CHKFORTRANNULLINTEGER(m); 295 CHKFORTRANNULLINTEGER(n); 296 *ierr = MatGetOwnershipRangeColumn(*mat, m, n); 297 } 298 299 PETSC_EXTERN void matgetsize_(Mat *mat, PetscInt *m, PetscInt *n, int *ierr) 300 { 301 CHKFORTRANNULLINTEGER(m); 302 CHKFORTRANNULLINTEGER(n); 303 *ierr = MatGetSize(*mat, m, n); 304 } 305 306 PETSC_EXTERN void matgetsize00_(Mat *mat, PetscInt *m, PetscInt *n, int *ierr) 307 { 308 matgetsize_(mat, m, n, ierr); 309 } 310 311 PETSC_EXTERN void matgetsize10_(Mat *mat, PetscInt *m, PetscInt *n, int *ierr) 312 { 313 matgetsize_(mat, m, n, ierr); 314 } 315 316 PETSC_EXTERN void matgetsize01_(Mat *mat, PetscInt *m, PetscInt *n, int *ierr) 317 { 318 matgetsize_(mat, m, n, ierr); 319 } 320 321 PETSC_EXTERN void matgetlocalsize_(Mat *mat, PetscInt *m, PetscInt *n, int *ierr) 322 { 323 CHKFORTRANNULLINTEGER(m); 324 CHKFORTRANNULLINTEGER(n); 325 *ierr = MatGetLocalSize(*mat, m, n); 326 } 327 328 PETSC_EXTERN void matgetlocalsize00_(Mat *mat, PetscInt *m, PetscInt *n, int *ierr) 329 { 330 matgetlocalsize_(mat, m, n, ierr); 331 } 332 333 PETSC_EXTERN void matgetlocalsize10_(Mat *mat, PetscInt *m, PetscInt *n, int *ierr) 334 { 335 matgetlocalsize_(mat, m, n, ierr); 336 } 337 338 PETSC_EXTERN void matgetlocalsize01_(Mat *mat, PetscInt *m, PetscInt *n, int *ierr) 339 { 340 matgetlocalsize_(mat, m, n, ierr); 341 } 342 343 PETSC_EXTERN void matsetvaluesblocked_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], InsertMode *addv, int *ierr) 344 { 345 *ierr = MatSetValuesBlocked(*mat, *m, idxm, *n, idxn, v, *addv); 346 } 347 348 PETSC_EXTERN void matsetvaluesblocked2_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], F90Array2d *y, InsertMode *addv, int *ierr PETSC_F90_2PTR_PROTO(ptrd)) 349 { 350 PetscScalar *fa; 351 *ierr = F90Array2dAccess(y, MPIU_SCALAR, (void **)&fa PETSC_F90_2PTR_PARAM(ptrd)); 352 if (*ierr) return; 353 matsetvaluesblocked_(mat, m, idxm, n, idxn, fa, addv, ierr); 354 } 355 356 PETSC_EXTERN void matsetvaluesblocked0_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], InsertMode *addv, int *ierr) 357 { 358 matsetvaluesblocked_(mat, m, idxm, n, idxn, v, addv, ierr); 359 } 360 361 PETSC_EXTERN void matsetvaluesblocked11_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], InsertMode *addv, int *ierr) 362 { 363 matsetvaluesblocked_(mat, m, idxm, n, idxn, v, addv, ierr); 364 } 365 366 PETSC_EXTERN void matsetvaluesblocked111_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], InsertMode *addv, int *ierr) 367 { 368 matsetvaluesblocked_(mat, m, idxm, n, idxn, v, addv, ierr); 369 } 370 371 PETSC_EXTERN void matsetvaluesblocked1n_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], InsertMode *addv, int *ierr) 372 { 373 matsetvaluesblocked_(mat, m, idxm, n, idxn, v, addv, ierr); 374 } 375 376 PETSC_EXTERN void matsetvaluesblockedn1_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], InsertMode *addv, int *ierr) 377 { 378 matsetvaluesblocked_(mat, m, idxm, n, idxn, v, addv, ierr); 379 } 380 381 PETSC_EXTERN void matsetvaluesblockedlocal_(Mat *mat, PetscInt *nrow, PetscInt irow[], PetscInt *ncol, PetscInt icol[], PetscScalar y[], InsertMode *addv, int *ierr) 382 { 383 *ierr = MatSetValuesBlockedLocal(*mat, *nrow, irow, *ncol, icol, y, *addv); 384 } 385 386 PETSC_EXTERN void matsetvaluesblockedlocal0_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], InsertMode *addv, int *ierr) 387 { 388 matsetvaluesblockedlocal_(mat, m, idxm, n, idxn, v, addv, ierr); 389 } 390 391 PETSC_EXTERN void matsetvaluesblockedlocal11_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], InsertMode *addv, int *ierr) 392 { 393 matsetvaluesblockedlocal_(mat, m, idxm, n, idxn, v, addv, ierr); 394 } 395 396 PETSC_EXTERN void matsetvaluesblockedlocal111_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], InsertMode *addv, int *ierr) 397 { 398 matsetvaluesblockedlocal_(mat, m, idxm, n, idxn, v, addv, ierr); 399 } 400 401 PETSC_EXTERN void matsetvaluesblockedlocal1n_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], InsertMode *addv, int *ierr) 402 { 403 matsetvaluesblockedlocal_(mat, m, idxm, n, idxn, v, addv, ierr); 404 } 405 406 PETSC_EXTERN void matsetvaluesblockedlocaln1_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], InsertMode *addv, int *ierr) 407 { 408 matsetvaluesblockedlocal_(mat, m, idxm, n, idxn, v, addv, ierr); 409 } 410 411 PETSC_EXTERN void matsetvalues_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], InsertMode *addv, int *ierr) 412 { 413 *ierr = MatSetValues(*mat, *m, idxm, *n, idxn, v, *addv); 414 } 415 416 PETSC_EXTERN void matsetvaluesnnnn_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], InsertMode *addv, int *ierr) 417 { 418 matsetvalues_(mat, m, idxm, n, idxn, v, addv, ierr); 419 } 420 421 PETSC_EXTERN void matsetvalues0_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], InsertMode *addv, int *ierr) 422 { 423 matsetvalues_(mat, m, idxm, n, idxn, v, addv, ierr); 424 } 425 426 PETSC_EXTERN void matsetvaluesnn1_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], InsertMode *addv, int *ierr) 427 { 428 matsetvalues_(mat, m, idxm, n, idxn, v, addv, ierr); 429 } 430 431 PETSC_EXTERN void matsetvalues11_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], InsertMode *addv, int *ierr) 432 { 433 matsetvalues_(mat, m, idxm, n, idxn, v, addv, ierr); 434 } 435 436 PETSC_EXTERN void matsetvaluesn1_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], InsertMode *addv, int *ierr) 437 { 438 matsetvalues_(mat, m, idxm, n, idxn, v, addv, ierr); 439 } 440 441 PETSC_EXTERN void matsetvalues1n_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], InsertMode *addv, int *ierr) 442 { 443 matsetvalues_(mat, m, idxm, n, idxn, v, addv, ierr); 444 } 445 446 PETSC_EXTERN void matsetvalueslocal_(Mat *mat, PetscInt *nrow, PetscInt irow[], PetscInt *ncol, PetscInt icol[], PetscScalar y[], InsertMode *addv, int *ierr) 447 { 448 *ierr = MatSetValuesLocal(*mat, *nrow, irow, *ncol, icol, y, *addv); 449 } 450 451 PETSC_EXTERN void matsetvalueslocal0_(Mat *mat, PetscInt *nrow, PetscInt irow[], PetscInt *ncol, PetscInt icol[], PetscScalar y[], InsertMode *addv, int *ierr) 452 { 453 matsetvalueslocal_(mat, nrow, irow, ncol, icol, y, addv, ierr); 454 } 455 456 PETSC_EXTERN void matsetvalueslocal11_(Mat *mat, PetscInt *nrow, PetscInt irow[], PetscInt *ncol, PetscInt icol[], PetscScalar y[], InsertMode *addv, int *ierr) 457 { 458 matsetvalueslocal_(mat, nrow, irow, ncol, icol, y, addv, ierr); 459 } 460 461 PETSC_EXTERN void matsetvalueslocal11nn_(Mat *mat, PetscInt *nrow, PetscInt irow[], PetscInt *ncol, PetscInt icol[], PetscScalar y[], InsertMode *addv, int *ierr) 462 { 463 matsetvalueslocal_(mat, nrow, irow, ncol, icol, y, addv, ierr); 464 } 465 466 PETSC_EXTERN void matsetvalueslocal111_(Mat *mat, PetscInt *nrow, PetscInt irow[], PetscInt *ncol, PetscInt icol[], PetscScalar y[], InsertMode *addv, int *ierr) 467 { 468 matsetvalueslocal_(mat, nrow, irow, ncol, icol, y, addv, ierr); 469 } 470 471 PETSC_EXTERN void matsetvalueslocal1n_(Mat *mat, PetscInt *nrow, PetscInt irow[], PetscInt *ncol, PetscInt icol[], PetscScalar y[], InsertMode *addv, int *ierr) 472 { 473 matsetvalueslocal_(mat, nrow, irow, ncol, icol, y, addv, ierr); 474 } 475 476 PETSC_EXTERN void matsetvalueslocaln1_(Mat *mat, PetscInt *nrow, PetscInt irow[], PetscInt *ncol, PetscInt icol[], PetscScalar y[], InsertMode *addv, int *ierr) 477 { 478 matsetvalueslocal_(mat, nrow, irow, ncol, icol, y, addv, ierr); 479 } 480 481 PETSC_EXTERN void matgetrowmin_(Mat *mat, Vec *v, PetscInt idx[], int *ierr) 482 { 483 CHKFORTRANNULLINTEGER(idx); 484 *ierr = MatGetRowMin(*mat, *v, idx); 485 } 486 487 PETSC_EXTERN void matgetrowminabs_(Mat *mat, Vec *v, PetscInt idx[], int *ierr) 488 { 489 CHKFORTRANNULLINTEGER(idx); 490 *ierr = MatGetRowMinAbs(*mat, *v, idx); 491 } 492 493 PETSC_EXTERN void matgetrowmax_(Mat *mat, Vec *v, PetscInt idx[], int *ierr) 494 { 495 CHKFORTRANNULLINTEGER(idx); 496 *ierr = MatGetRowMax(*mat, *v, idx); 497 } 498 499 PETSC_EXTERN void matgetrowmaxabs_(Mat *mat, Vec *v, PetscInt idx[], int *ierr) 500 { 501 CHKFORTRANNULLINTEGER(idx); 502 *ierr = MatGetRowMaxAbs(*mat, *v, idx); 503 } 504 505 static PetscErrorCode ournullfunction(MatNullSpace sp, Vec x, void *ctx) 506 { 507 PetscCallFortranVoidFunction((*(void (*)(MatNullSpace *, Vec *, void *, PetscErrorCode *))(((PetscObject)sp)->fortran_func_pointers[0]))(&sp, &x, ctx, &ierr)); 508 return PETSC_SUCCESS; 509 } 510 511 PETSC_EXTERN void matnullspacesetfunction_(MatNullSpace *sp, PetscErrorCode (*rem)(MatNullSpace, Vec, void *), void *ctx, PetscErrorCode *ierr) 512 { 513 PetscObjectAllocateFortranPointers(*sp, 1); 514 ((PetscObject)*sp)->fortran_func_pointers[0] = (PetscVoidFunction)rem; 515 516 *ierr = MatNullSpaceSetFunction(*sp, ournullfunction, ctx); 517 } 518 519 PETSC_EXTERN void matcreatevecs_(Mat *mat, Vec *right, Vec *left, int *ierr) 520 { 521 CHKFORTRANNULLOBJECT(right); 522 CHKFORTRANNULLOBJECT(left); 523 *ierr = MatCreateVecs(*mat, right, left); 524 } 525 526 PETSC_EXTERN void matgetrowij_(Mat *B, PetscInt *shift, PetscBool *sym, PetscBool *blockcompressed, PetscInt *n, PetscInt *ia, size_t *iia, PetscInt *ja, size_t *jja, PetscBool *done, PetscErrorCode *ierr) 527 { 528 const PetscInt *IA, *JA; 529 *ierr = MatGetRowIJ(*B, *shift, *sym, *blockcompressed, n, &IA, &JA, done); 530 if (*ierr) return; 531 *iia = PetscIntAddressToFortran(ia, (PetscInt *)IA); 532 *jja = PetscIntAddressToFortran(ja, (PetscInt *)JA); 533 } 534 535 PETSC_EXTERN void matrestorerowij_(Mat *B, PetscInt *shift, PetscBool *sym, PetscBool *blockcompressed, PetscInt *n, PetscInt *ia, size_t *iia, PetscInt *ja, size_t *jja, PetscBool *done, PetscErrorCode *ierr) 536 { 537 const PetscInt *IA = PetscIntAddressFromFortran(ia, *iia), *JA = PetscIntAddressFromFortran(ja, *jja); 538 *ierr = MatRestoreRowIJ(*B, *shift, *sym, *blockcompressed, n, &IA, &JA, done); 539 } 540 541 /* 542 This is a poor way of storing the column and value pointers 543 generated by MatGetRow() to be returned with MatRestoreRow() 544 but there is not natural,good place else to store them. Hence 545 Fortran programmers can only have one outstanding MatGetRows() 546 at a time. 547 */ 548 static int matgetrowactive = 0; 549 static const PetscInt *my_ocols = 0; 550 static const PetscScalar *my_ovals = 0; 551 552 PETSC_EXTERN void matgetrow_(Mat *mat, PetscInt *row, PetscInt *ncols, PetscInt *cols, PetscScalar *vals, PetscErrorCode *ierr) 553 { 554 const PetscInt **oocols = &my_ocols; 555 const PetscScalar **oovals = &my_ovals; 556 557 if (matgetrowactive) { 558 *ierr = PetscError(PETSC_COMM_SELF, __LINE__, "MatGetRow_Fortran", __FILE__, PETSC_ERR_ARG_WRONGSTATE, PETSC_ERROR_INITIAL, "Cannot have two MatGetRow() active simultaneously\n\ 559 call MatRestoreRow() before calling MatGetRow() a second time"); 560 *ierr = PETSC_ERR_ARG_WRONGSTATE; 561 return; 562 } 563 564 CHKFORTRANNULLINTEGER(cols); 565 if (!cols) oocols = NULL; 566 CHKFORTRANNULLSCALAR(vals); 567 if (!vals) oovals = NULL; 568 569 *ierr = MatGetRow(*mat, *row, ncols, oocols, oovals); 570 if (*ierr) return; 571 572 if (oocols) { 573 *ierr = PetscArraycpy(cols, my_ocols, *ncols); 574 if (*ierr) return; 575 } 576 if (oovals) { 577 *ierr = PetscArraycpy(vals, my_ovals, *ncols); 578 if (*ierr) return; 579 } 580 matgetrowactive = 1; 581 } 582 583 PETSC_EXTERN void matrestorerow_(Mat *mat, PetscInt *row, PetscInt *ncols, PetscInt *cols, PetscScalar *vals, PetscErrorCode *ierr) 584 { 585 const PetscInt **oocols = &my_ocols; 586 const PetscScalar **oovals = &my_ovals; 587 588 if (!matgetrowactive) { 589 *ierr = PetscError(PETSC_COMM_SELF, __LINE__, "MatRestoreRow_Fortran", __FILE__, PETSC_ERR_ARG_WRONGSTATE, PETSC_ERROR_INITIAL, "Must call MatGetRow() first"); 590 *ierr = PETSC_ERR_ARG_WRONGSTATE; 591 return; 592 } 593 CHKFORTRANNULLINTEGER(cols); 594 if (!cols) oocols = NULL; 595 CHKFORTRANNULLSCALAR(vals); 596 if (!vals) oovals = NULL; 597 598 *ierr = MatRestoreRow(*mat, *row, ncols, oocols, oovals); 599 matgetrowactive = 0; 600 } 601 602 PETSC_EXTERN void matview_(Mat *mat, PetscViewer *vin, PetscErrorCode *ierr) 603 { 604 PetscViewer v; 605 PetscPatchDefaultViewers_Fortran(vin, v); 606 *ierr = MatView(*mat, v); 607 } 608 609 PETSC_EXTERN void matload_(Mat *mat, PetscViewer *vin, PetscErrorCode *ierr) 610 { 611 PetscViewer v; 612 PetscPatchDefaultViewers_Fortran(vin, v); 613 *ierr = MatLoad(*mat, v); 614 } 615 616 PETSC_EXTERN void matseqaijgetarray_(Mat *mat, PetscScalar *fa, size_t *ia, PetscErrorCode *ierr) 617 { 618 PetscScalar *mm; 619 PetscInt m, n; 620 621 *ierr = MatSeqAIJGetArray(*mat, &mm); 622 if (*ierr) return; 623 *ierr = MatGetSize(*mat, &m, &n); 624 if (*ierr) return; 625 *ierr = PetscScalarAddressToFortran((PetscObject)*mat, 1, fa, mm, m * n, ia); 626 if (*ierr) return; 627 } 628 629 PETSC_EXTERN void matseqaijrestorearray_(Mat *mat, PetscScalar *fa, size_t *ia, PetscErrorCode *ierr) 630 { 631 PetscScalar *lx; 632 PetscInt m, n; 633 634 *ierr = MatGetSize(*mat, &m, &n); 635 if (*ierr) return; 636 *ierr = PetscScalarAddressFromFortran((PetscObject)*mat, fa, *ia, m * n, &lx); 637 if (*ierr) return; 638 *ierr = MatSeqAIJRestoreArray(*mat, &lx); 639 if (*ierr) return; 640 } 641 642 PETSC_EXTERN void matdensegetarray_(Mat *mat, PetscScalar *fa, size_t *ia, PetscErrorCode *ierr) 643 { 644 PetscScalar *mm; 645 PetscInt m, n; 646 647 *ierr = MatDenseGetArray(*mat, &mm); 648 if (*ierr) return; 649 *ierr = MatGetSize(*mat, &m, &n); 650 if (*ierr) return; 651 *ierr = PetscScalarAddressToFortran((PetscObject)*mat, 1, fa, mm, m * n, ia); 652 if (*ierr) return; 653 } 654 655 PETSC_EXTERN void matdenserestorearray_(Mat *mat, PetscScalar *fa, size_t *ia, PetscErrorCode *ierr) 656 { 657 PetscScalar *lx; 658 PetscInt m, n; 659 660 *ierr = MatGetSize(*mat, &m, &n); 661 if (*ierr) return; 662 *ierr = PetscScalarAddressFromFortran((PetscObject)*mat, fa, *ia, m * n, &lx); 663 if (*ierr) return; 664 *ierr = MatDenseRestoreArray(*mat, &lx); 665 if (*ierr) return; 666 } 667 668 PETSC_EXTERN void matdensegetarrayread_(Mat *mat, PetscScalar *fa, size_t *ia, PetscErrorCode *ierr) 669 { 670 const PetscScalar *mm; 671 PetscInt m, n; 672 673 *ierr = MatDenseGetArrayRead(*mat, &mm); 674 if (*ierr) return; 675 *ierr = MatGetSize(*mat, &m, &n); 676 if (*ierr) return; 677 *ierr = PetscScalarAddressToFortran((PetscObject)*mat, 1, fa, (PetscScalar *)mm, m * n, ia); 678 if (*ierr) return; 679 } 680 681 PETSC_EXTERN void matdenserestorearrayread_(Mat *mat, PetscScalar *fa, size_t *ia, PetscErrorCode *ierr) 682 { 683 const PetscScalar *lx; 684 PetscInt m, n; 685 686 *ierr = MatGetSize(*mat, &m, &n); 687 if (*ierr) return; 688 *ierr = PetscScalarAddressFromFortran((PetscObject)*mat, fa, *ia, m * n, (PetscScalar **)&lx); 689 if (*ierr) return; 690 *ierr = MatDenseRestoreArrayRead(*mat, &lx); 691 if (*ierr) return; 692 } 693 694 PETSC_EXTERN void matfactorgetsolverpackage_(Mat *mat, char *name, PetscErrorCode *ierr, PETSC_FORTRAN_CHARLEN_T len) 695 { 696 const char *tname; 697 698 *ierr = MatFactorGetSolverType(*mat, &tname); 699 if (*ierr) return; 700 if (name != PETSC_NULL_CHARACTER_Fortran) { 701 *ierr = PetscStrncpy(name, tname, len); 702 if (*ierr) return; 703 } 704 FIXRETURNCHAR(PETSC_TRUE, name, len); 705 } 706 707 PETSC_EXTERN void matgetfactor_(Mat *mat, char *outtype, MatFactorType *ftype, Mat *M, PetscErrorCode *ierr, PETSC_FORTRAN_CHARLEN_T len) 708 { 709 char *t; 710 FIXCHAR(outtype, len, t); 711 *ierr = MatGetFactor(*mat, t, *ftype, M); 712 if (*ierr) return; 713 FREECHAR(outtype, t); 714 } 715 716 PETSC_EXTERN void matconvert_(Mat *mat, char *outtype, MatReuse *reuse, Mat *M, PetscErrorCode *ierr, PETSC_FORTRAN_CHARLEN_T len) 717 { 718 char *t; 719 FIXCHAR(outtype, len, t); 720 *ierr = MatConvert(*mat, t, *reuse, M); 721 if (*ierr) return; 722 FREECHAR(outtype, t); 723 } 724 725 /* 726 MatCreateSubmatrices() is slightly different from C since the 727 Fortran provides the array to hold the submatrix objects,while in C that 728 array is allocated by the MatCreateSubmatrices() 729 */ 730 PETSC_EXTERN void matcreatesubmatrices_(Mat *mat, PetscInt *n, IS *isrow, IS *iscol, MatReuse *scall, Mat *smat, PetscErrorCode *ierr) 731 { 732 Mat *lsmat; 733 PetscInt i; 734 735 if (*scall == MAT_INITIAL_MATRIX) { 736 *ierr = MatCreateSubMatrices(*mat, *n, isrow, iscol, *scall, &lsmat); 737 for (i = 0; i <= *n; i++) { /* lsmat[*n] might be a dummy matrix for saving data structure */ 738 smat[i] = lsmat[i]; 739 } 740 *ierr = PetscFree(lsmat); 741 } else { 742 *ierr = MatCreateSubMatrices(*mat, *n, isrow, iscol, *scall, &smat); 743 } 744 } 745 746 /* 747 MatCreateSubmatrices() is slightly different from C since the 748 Fortran provides the array to hold the submatrix objects,while in C that 749 array is allocated by the MatCreateSubmatrices() 750 */ 751 PETSC_EXTERN void matcreatesubmatricesmpi_(Mat *mat, PetscInt *n, IS *isrow, IS *iscol, MatReuse *scall, Mat *smat, PetscErrorCode *ierr) 752 { 753 Mat *lsmat; 754 PetscInt i; 755 756 if (*scall == MAT_INITIAL_MATRIX) { 757 *ierr = MatCreateSubMatricesMPI(*mat, *n, isrow, iscol, *scall, &lsmat); 758 for (i = 0; i <= *n; i++) { /* lsmat[*n] might be a dummy matrix for saving data structure */ 759 smat[i] = lsmat[i]; 760 } 761 *ierr = PetscFree(lsmat); 762 } else { 763 *ierr = MatCreateSubMatricesMPI(*mat, *n, isrow, iscol, *scall, &smat); 764 } 765 } 766 767 /* 768 MatDestroyMatrices() is slightly different from C since the 769 Fortran does not free the array of matrix objects, while in C that 770 the array is freed 771 */ 772 PETSC_EXTERN void matdestroymatrices_(PetscInt *n, Mat *smat, PetscErrorCode *ierr) 773 { 774 PetscInt i; 775 776 for (i = 0; i < *n; i++) { 777 PETSC_FORTRAN_OBJECT_F_DESTROYED_TO_C_NULL(&smat[i]); 778 *ierr = MatDestroy(&smat[i]); 779 if (*ierr) return; 780 PETSC_FORTRAN_OBJECT_C_NULL_TO_F_DESTROYED(&smat[i]); 781 } 782 } 783 784 /* 785 MatDestroySubMatrices() is slightly different from C since the 786 Fortran provides the array to hold the submatrix objects, while in C that 787 array is allocated by the MatCreateSubmatrices() 788 */ 789 PETSC_EXTERN void matdestroysubmatrices_(PetscInt *n, Mat *smat, PetscErrorCode *ierr) 790 { 791 Mat *lsmat; 792 PetscInt i; 793 794 *ierr = PetscMalloc1(*n + 1, &lsmat); 795 for (i = 0; i <= *n; i++) { 796 PETSC_FORTRAN_OBJECT_F_DESTROYED_TO_C_NULL(&smat[i]); 797 lsmat[i] = smat[i]; 798 } 799 *ierr = MatDestroySubMatrices(*n, &lsmat); 800 for (i = 0; i <= *n; i++) { PETSC_FORTRAN_OBJECT_C_NULL_TO_F_DESTROYED(&smat[i]); } 801 } 802 803 PETSC_EXTERN void matdestroy_(Mat *x, int *ierr) 804 { 805 PETSC_FORTRAN_OBJECT_F_DESTROYED_TO_C_NULL(x); 806 *ierr = MatDestroy(x); 807 if (*ierr) return; 808 PETSC_FORTRAN_OBJECT_C_NULL_TO_F_DESTROYED(x); 809 } 810 811 PETSC_EXTERN void matsetoptionsprefix_(Mat *mat, char *prefix, PetscErrorCode *ierr, PETSC_FORTRAN_CHARLEN_T len) 812 { 813 char *t; 814 815 FIXCHAR(prefix, len, t); 816 *ierr = MatSetOptionsPrefix(*mat, t); 817 if (*ierr) return; 818 FREECHAR(prefix, t); 819 } 820 821 PETSC_EXTERN void matnullspaceremove_(MatNullSpace *sp, Vec *vec, PetscErrorCode *ierr) 822 { 823 CHKFORTRANNULLOBJECT(*sp) 824 *ierr = MatNullSpaceRemove(*sp, *vec); 825 } 826 827 PETSC_EXTERN void matgetinfo_(Mat *mat, MatInfoType *flag, MatInfo *info, int *ierr) 828 { 829 *ierr = MatGetInfo(*mat, *flag, info); 830 } 831 832 PETSC_EXTERN void matlufactor_(Mat *mat, IS *row, IS *col, const MatFactorInfo *info, int *ierr) 833 { 834 *ierr = MatLUFactor(*mat, *row, *col, info); 835 } 836 837 PETSC_EXTERN void matilufactor_(Mat *mat, IS *row, IS *col, const MatFactorInfo *info, int *ierr) 838 { 839 *ierr = MatILUFactor(*mat, *row, *col, info); 840 } 841 842 PETSC_EXTERN void matlufactorsymbolic_(Mat *fact, Mat *mat, IS *row, IS *col, const MatFactorInfo *info, int *ierr) 843 { 844 *ierr = MatLUFactorSymbolic(*fact, *mat, *row, *col, info); 845 } 846 847 PETSC_EXTERN void matlufactornumeric_(Mat *fact, Mat *mat, const MatFactorInfo *info, int *ierr) 848 { 849 *ierr = MatLUFactorNumeric(*fact, *mat, info); 850 } 851 852 PETSC_EXTERN void matcholeskyfactor_(Mat *mat, IS *perm, const MatFactorInfo *info, int *ierr) 853 { 854 *ierr = MatCholeskyFactor(*mat, *perm, info); 855 } 856 857 PETSC_EXTERN void matcholeskyfactorsymbolic_(Mat *fact, Mat *mat, IS *perm, const MatFactorInfo *info, int *ierr) 858 { 859 *ierr = MatCholeskyFactorSymbolic(*fact, *mat, *perm, info); 860 } 861 862 PETSC_EXTERN void matcholeskyfactornumeric_(Mat *fact, Mat *mat, const MatFactorInfo *info, int *ierr) 863 { 864 *ierr = MatCholeskyFactorNumeric(*fact, *mat, info); 865 } 866 867 PETSC_EXTERN void matilufactorsymbolic_(Mat *fact, Mat *mat, IS *row, IS *col, const MatFactorInfo *info, int *ierr) 868 { 869 *ierr = MatILUFactorSymbolic(*fact, *mat, *row, *col, info); 870 } 871 872 PETSC_EXTERN void maticcfactorsymbolic_(Mat *fact, Mat *mat, IS *perm, const MatFactorInfo *info, int *ierr) 873 { 874 *ierr = MatICCFactorSymbolic(*fact, *mat, *perm, info); 875 } 876 877 PETSC_EXTERN void maticcfactor_(Mat *mat, IS *row, const MatFactorInfo *info, int *ierr) 878 { 879 *ierr = MatICCFactor(*mat, *row, info); 880 } 881 882 PETSC_EXTERN void matfactorinfoinitialize_(MatFactorInfo *info, int *ierr) 883 { 884 *ierr = MatFactorInfoInitialize(info); 885 } 886 PETSC_EXTERN void matzerorowslocal_(Mat *mat, PetscInt *numRows, PetscInt rows[], PetscScalar *diag, Vec *x, Vec *b, int *ierr) 887 { 888 *ierr = MatZeroRowsLocal(*mat, *numRows, rows, *diag, *x, *b); 889 } 890 PETSC_EXTERN void matzerorowslocal0_(Mat *mat, PetscInt *numRows, PetscInt rows[], PetscScalar *diag, Vec *x, Vec *b, int *ierr) 891 { 892 matzerorowslocal_(mat, numRows, rows, diag, x, b, ierr); 893 } 894 PETSC_EXTERN void matzerorowslocal1_(Mat *mat, PetscInt *numRows, PetscInt rows[], PetscScalar *diag, Vec *x, Vec *b, int *ierr) 895 { 896 matzerorowslocal_(mat, numRows, rows, diag, x, b, ierr); 897 } 898 PETSC_EXTERN void matviewfromoptions_(Mat *ao, PetscObject obj, char *type, PetscErrorCode *ierr, PETSC_FORTRAN_CHARLEN_T len) 899 { 900 char *t; 901 902 FIXCHAR(type, len, t); 903 CHKFORTRANNULLOBJECT(obj); 904 *ierr = MatViewFromOptions(*ao, obj, t); 905 if (*ierr) return; 906 FREECHAR(type, t); 907 } 908