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