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