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));if (*ierr) return; 352 matsetvaluesblocked_(mat,m,idxm,n,idxn,fa,addv,ierr); 353 } 354 355 PETSC_EXTERN void matsetvaluesblocked0_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr) 356 { 357 matsetvaluesblocked_(mat,m,idxm,n,idxn,v,addv,ierr); 358 } 359 360 PETSC_EXTERN void matsetvaluesblocked11_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr) 361 { 362 matsetvaluesblocked_(mat,m,idxm,n,idxn,v,addv,ierr); 363 } 364 365 PETSC_EXTERN void matsetvaluesblocked111_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr) 366 { 367 matsetvaluesblocked_(mat,m,idxm,n,idxn,v,addv,ierr); 368 } 369 370 PETSC_EXTERN void matsetvaluesblocked1n_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr) 371 { 372 matsetvaluesblocked_(mat,m,idxm,n,idxn,v,addv,ierr); 373 } 374 375 PETSC_EXTERN void matsetvaluesblockedn1_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr) 376 { 377 matsetvaluesblocked_(mat,m,idxm,n,idxn,v,addv,ierr); 378 } 379 380 PETSC_EXTERN void matsetvaluesblockedlocal_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr) 381 { 382 *ierr = MatSetValuesBlockedLocal(*mat,*nrow,irow,*ncol,icol,y,*addv); 383 } 384 385 PETSC_EXTERN void matsetvaluesblockedlocal0_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr) 386 { 387 matsetvaluesblockedlocal_(mat,m,idxm,n,idxn,v,addv,ierr); 388 } 389 390 PETSC_EXTERN void matsetvaluesblockedlocal11_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr) 391 { 392 matsetvaluesblockedlocal_(mat,m,idxm,n,idxn,v,addv,ierr); 393 } 394 395 PETSC_EXTERN void matsetvaluesblockedlocal111_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr) 396 { 397 matsetvaluesblockedlocal_(mat,m,idxm,n,idxn,v,addv,ierr); 398 } 399 400 PETSC_EXTERN void matsetvaluesblockedlocal1n_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr) 401 { 402 matsetvaluesblockedlocal_(mat,m,idxm,n,idxn,v,addv,ierr); 403 } 404 405 PETSC_EXTERN void matsetvaluesblockedlocaln1_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr) 406 { 407 matsetvaluesblockedlocal_(mat,m,idxm,n,idxn,v,addv,ierr); 408 } 409 410 PETSC_EXTERN void matsetvalues_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr) 411 { 412 *ierr = MatSetValues(*mat,*m,idxm,*n,idxn,v,*addv); 413 } 414 415 PETSC_EXTERN void matsetvaluesnnnn_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr) 416 { 417 matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr); 418 } 419 420 PETSC_EXTERN void matsetvalues0_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr) 421 { 422 matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr); 423 } 424 425 PETSC_EXTERN void matsetvaluesnn1_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr) 426 { 427 matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr); 428 } 429 430 PETSC_EXTERN void matsetvalues11_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr) 431 { 432 matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr); 433 } 434 435 PETSC_EXTERN void matsetvaluesn1_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr) 436 { 437 matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr); 438 } 439 440 PETSC_EXTERN void matsetvalues1n_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr) 441 { 442 matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr); 443 } 444 445 PETSC_EXTERN void matsetvalueslocal_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr) 446 { 447 *ierr = MatSetValuesLocal(*mat,*nrow,irow,*ncol,icol,y,*addv); 448 } 449 450 PETSC_EXTERN void matsetvalueslocal0_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr) 451 { 452 matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr); 453 } 454 455 PETSC_EXTERN void matsetvalueslocal11_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr) 456 { 457 matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr); 458 } 459 460 PETSC_EXTERN void matsetvalueslocal11nn_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr) 461 { 462 matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr); 463 } 464 465 PETSC_EXTERN void matsetvalueslocal111_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr) 466 { 467 matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr); 468 } 469 470 PETSC_EXTERN void matsetvalueslocal1n_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr) 471 { 472 matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr); 473 } 474 475 PETSC_EXTERN void matsetvalueslocaln1_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr) 476 { 477 matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr); 478 } 479 480 PETSC_EXTERN void matgetrowmin_(Mat *mat,Vec *v,PetscInt idx[], int *ierr) 481 { 482 CHKFORTRANNULLINTEGER(idx); 483 *ierr = MatGetRowMin(*mat,*v,idx); 484 } 485 486 PETSC_EXTERN void matgetrowminabs_(Mat *mat,Vec *v,PetscInt idx[], int *ierr) 487 { 488 CHKFORTRANNULLINTEGER(idx); 489 *ierr = MatGetRowMinAbs(*mat,*v,idx); 490 } 491 492 PETSC_EXTERN void matgetrowmax_(Mat *mat,Vec *v,PetscInt idx[], int *ierr) 493 { 494 CHKFORTRANNULLINTEGER(idx); 495 *ierr = MatGetRowMax(*mat,*v,idx); 496 } 497 498 PETSC_EXTERN void matgetrowmaxabs_(Mat *mat,Vec *v,PetscInt idx[], int *ierr) 499 { 500 CHKFORTRANNULLINTEGER(idx); 501 *ierr = MatGetRowMaxAbs(*mat,*v,idx); 502 } 503 504 static PetscErrorCode ournullfunction(MatNullSpace sp,Vec x,void *ctx) 505 { 506 PetscCallFortranVoidFunction((*(void (*)(MatNullSpace*,Vec*,void*,PetscErrorCode*))(((PetscObject)sp)->fortran_func_pointers[0]))(&sp,&x,ctx,&ierr)); 507 return 0; 508 } 509 510 PETSC_EXTERN void matnullspacesetfunction_(MatNullSpace *sp, PetscErrorCode (*rem)(MatNullSpace,Vec,void*),void *ctx,PetscErrorCode *ierr) 511 { 512 PetscObjectAllocateFortranPointers(*sp,1); 513 ((PetscObject)*sp)->fortran_func_pointers[0] = (PetscVoidFunction)rem; 514 515 *ierr = MatNullSpaceSetFunction(*sp,ournullfunction,ctx); 516 } 517 518 PETSC_EXTERN void matcreatevecs_(Mat *mat,Vec *right,Vec *left, int *ierr) 519 { 520 CHKFORTRANNULLOBJECT(right); 521 CHKFORTRANNULLOBJECT(left); 522 *ierr = MatCreateVecs(*mat,right,left); 523 } 524 525 PETSC_EXTERN void matgetrowij_(Mat *B,PetscInt *shift,PetscBool *sym,PetscBool *blockcompressed,PetscInt *n,PetscInt *ia,size_t *iia, 526 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);if (*ierr) return; 530 *iia = PetscIntAddressToFortran(ia,(PetscInt*)IA); 531 *jja = PetscIntAddressToFortran(ja,(PetscInt*)JA); 532 } 533 534 PETSC_EXTERN void matrestorerowij_(Mat *B,PetscInt *shift,PetscBool *sym,PetscBool *blockcompressed, PetscInt *n,PetscInt *ia,size_t *iia, 535 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 PetscErrorCode 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 PetscError(PETSC_COMM_SELF,__LINE__,"MatGetRow_Fortran",__FILE__,PETSC_ERR_ARG_WRONGSTATE,PETSC_ERROR_INITIAL, 559 "Cannot have two MatGetRow() active simultaneously\n\ 560 call MatRestoreRow() before calling MatGetRow() a second time"); 561 *ierr = 1; 562 return; 563 } 564 565 CHKFORTRANNULLINTEGER(cols); if (!cols) oocols = NULL; 566 CHKFORTRANNULLSCALAR(vals); if (!vals) oovals = NULL; 567 568 *ierr = MatGetRow(*mat,*row,ncols,oocols,oovals); 569 if (*ierr) return; 570 571 if (oocols) { *ierr = PetscArraycpy(cols,my_ocols,*ncols); if (*ierr) return;} 572 if (oovals) { *ierr = PetscArraycpy(vals,my_ovals,*ncols); if (*ierr) return;} 573 matgetrowactive = 1; 574 } 575 576 PETSC_EXTERN void matrestorerow_(Mat *mat,PetscInt *row,PetscInt *ncols,PetscInt *cols,PetscScalar *vals,PetscErrorCode *ierr) 577 { 578 const PetscInt **oocols = &my_ocols; 579 const PetscScalar **oovals = &my_ovals; 580 if (!matgetrowactive) { 581 PetscError(PETSC_COMM_SELF,__LINE__,"MatRestoreRow_Fortran",__FILE__,PETSC_ERR_ARG_WRONGSTATE,PETSC_ERROR_INITIAL, 582 "Must call MatGetRow() first"); 583 *ierr = 1; 584 return; 585 } 586 CHKFORTRANNULLINTEGER(cols); if (!cols) oocols = NULL; 587 CHKFORTRANNULLSCALAR(vals); if (!vals) oovals = NULL; 588 589 *ierr = MatRestoreRow(*mat,*row,ncols,oocols,oovals); 590 matgetrowactive = 0; 591 } 592 593 PETSC_EXTERN void matview_(Mat *mat,PetscViewer *vin,PetscErrorCode *ierr) 594 { 595 PetscViewer v; 596 PetscPatchDefaultViewers_Fortran(vin,v); 597 *ierr = MatView(*mat,v); 598 } 599 600 PETSC_EXTERN void matload_(Mat *mat,PetscViewer *vin,PetscErrorCode *ierr) 601 { 602 PetscViewer v; 603 PetscPatchDefaultViewers_Fortran(vin,v); 604 *ierr = MatLoad(*mat,v); 605 } 606 607 PETSC_EXTERN void matseqaijgetarray_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr) 608 { 609 PetscScalar *mm; 610 PetscInt m,n; 611 612 *ierr = MatSeqAIJGetArray(*mat,&mm); if (*ierr) return; 613 *ierr = MatGetSize(*mat,&m,&n); if (*ierr) return; 614 *ierr = PetscScalarAddressToFortran((PetscObject)*mat,1,fa,mm,m*n,ia); if (*ierr) return; 615 } 616 617 PETSC_EXTERN void matseqaijrestorearray_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr) 618 { 619 PetscScalar *lx; 620 PetscInt m,n; 621 622 *ierr = MatGetSize(*mat,&m,&n); if (*ierr) return; 623 *ierr = PetscScalarAddressFromFortran((PetscObject)*mat,fa,*ia,m*n,&lx);if (*ierr) return; 624 *ierr = MatSeqAIJRestoreArray(*mat,&lx);if (*ierr) return; 625 } 626 627 PETSC_EXTERN void matdensegetarray_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr) 628 { 629 PetscScalar *mm; 630 PetscInt m,n; 631 632 *ierr = MatDenseGetArray(*mat,&mm); if (*ierr) return; 633 *ierr = MatGetSize(*mat,&m,&n); if (*ierr) return; 634 *ierr = PetscScalarAddressToFortran((PetscObject)*mat,1,fa,mm,m*n,ia); if (*ierr) return; 635 } 636 637 PETSC_EXTERN void matdenserestorearray_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr) 638 { 639 PetscScalar *lx; 640 PetscInt m,n; 641 642 *ierr = MatGetSize(*mat,&m,&n); if (*ierr) return; 643 *ierr = PetscScalarAddressFromFortran((PetscObject)*mat,fa,*ia,m*n,&lx);if (*ierr) return; 644 *ierr = MatDenseRestoreArray(*mat,&lx);if (*ierr) return; 645 } 646 647 PETSC_EXTERN void matdensegetarrayread_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr) 648 { 649 const PetscScalar *mm; 650 PetscInt m,n; 651 652 *ierr = MatDenseGetArrayRead(*mat,&mm); if (*ierr) return; 653 *ierr = MatGetSize(*mat,&m,&n); if (*ierr) return; 654 *ierr = PetscScalarAddressToFortran((PetscObject)*mat,1,fa,(PetscScalar*)mm,m*n,ia); if (*ierr) return; 655 } 656 657 PETSC_EXTERN void matdenserestorearrayread_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr) 658 { 659 const PetscScalar *lx; 660 PetscInt m,n; 661 662 *ierr = MatGetSize(*mat,&m,&n); if (*ierr) return; 663 *ierr = PetscScalarAddressFromFortran((PetscObject)*mat,fa,*ia,m*n,(PetscScalar**)&lx);if (*ierr) return; 664 *ierr = MatDenseRestoreArrayRead(*mat,&lx);if (*ierr) return; 665 } 666 667 PETSC_EXTERN void matfactorgetsolverpackage_(Mat *mat,char* name,PetscErrorCode *ierr,PETSC_FORTRAN_CHARLEN_T len) 668 { 669 const char *tname; 670 671 *ierr = MatFactorGetSolverType(*mat,&tname);if (*ierr) return; 672 if (name != PETSC_NULL_CHARACTER_Fortran) { 673 *ierr = PetscStrncpy(name,tname,len);if (*ierr) return; 674 } 675 FIXRETURNCHAR(PETSC_TRUE,name,len); 676 } 677 678 PETSC_EXTERN void matgetfactor_(Mat *mat,char* outtype,MatFactorType *ftype,Mat *M,PetscErrorCode *ierr,PETSC_FORTRAN_CHARLEN_T len) 679 { 680 char *t; 681 FIXCHAR(outtype,len,t); 682 *ierr = MatGetFactor(*mat,t,*ftype,M);if (*ierr) return; 683 FREECHAR(outtype,t); 684 } 685 686 PETSC_EXTERN void matconvert_(Mat *mat,char* outtype,MatReuse *reuse,Mat *M,PetscErrorCode *ierr,PETSC_FORTRAN_CHARLEN_T len) 687 { 688 char *t; 689 FIXCHAR(outtype,len,t); 690 *ierr = MatConvert(*mat,t,*reuse,M);if (*ierr) return; 691 FREECHAR(outtype,t); 692 } 693 694 /* 695 MatCreateSubmatrices() is slightly different from C since the 696 Fortran provides the array to hold the submatrix objects,while in C that 697 array is allocated by the MatCreateSubmatrices() 698 */ 699 PETSC_EXTERN void matcreatesubmatrices_(Mat *mat,PetscInt *n,IS *isrow,IS *iscol,MatReuse *scall,Mat *smat,PetscErrorCode *ierr) 700 { 701 Mat *lsmat; 702 PetscInt i; 703 704 if (*scall == MAT_INITIAL_MATRIX) { 705 *ierr = MatCreateSubMatrices(*mat,*n,isrow,iscol,*scall,&lsmat); 706 for (i=0; i<=*n; i++) { /* lsmat[*n] might be a dummy matrix for saving data struc */ 707 smat[i] = lsmat[i]; 708 } 709 *ierr = PetscFree(lsmat); 710 } else { 711 *ierr = MatCreateSubMatrices(*mat,*n,isrow,iscol,*scall,&smat); 712 } 713 } 714 715 /* 716 MatCreateSubmatrices() is slightly different from C since the 717 Fortran provides the array to hold the submatrix objects,while in C that 718 array is allocated by the MatCreateSubmatrices() 719 */ 720 PETSC_EXTERN void matcreatesubmatricesmpi_(Mat *mat,PetscInt *n,IS *isrow,IS *iscol,MatReuse *scall,Mat *smat,PetscErrorCode *ierr) 721 { 722 Mat *lsmat; 723 PetscInt i; 724 725 if (*scall == MAT_INITIAL_MATRIX) { 726 *ierr = MatCreateSubMatricesMPI(*mat,*n,isrow,iscol,*scall,&lsmat); 727 for (i=0; i<=*n; i++) { /* lsmat[*n] might be a dummy matrix for saving data struc */ 728 smat[i] = lsmat[i]; 729 } 730 *ierr = PetscFree(lsmat); 731 } else { 732 *ierr = MatCreateSubMatricesMPI(*mat,*n,isrow,iscol,*scall,&smat); 733 } 734 } 735 736 /* 737 MatDestroyMatrices() is slightly different from C since the 738 Fortran does not free the array of matrix objects, while in C that 739 the array is freed 740 */ 741 PETSC_EXTERN void matdestroymatrices_(PetscInt *n,Mat *smat,PetscErrorCode *ierr) 742 { 743 PetscInt i; 744 745 for (i=0; i<*n; i++) { 746 PETSC_FORTRAN_OBJECT_F_DESTROYED_TO_C_NULL(&smat[i]); 747 *ierr = MatDestroy(&smat[i]);if (*ierr) return; 748 PETSC_FORTRAN_OBJECT_C_NULL_TO_F_DESTROYED(&smat[i]); 749 } 750 } 751 752 /* 753 MatDestroySubMatrices() is slightly different from C since the 754 Fortran provides the array to hold the submatrix objects, while in C that 755 array is allocated by the MatCreateSubmatrices() 756 */ 757 PETSC_EXTERN void matdestroysubmatrices_(PetscInt *n,Mat *smat,PetscErrorCode *ierr) 758 { 759 Mat *lsmat; 760 PetscInt i; 761 762 *ierr = PetscMalloc1(*n+1,&lsmat); 763 for (i=0; i<=*n; i++) { 764 PETSC_FORTRAN_OBJECT_F_DESTROYED_TO_C_NULL(&smat[i]); 765 lsmat[i] = smat[i]; 766 } 767 *ierr = MatDestroySubMatrices(*n,&lsmat); 768 for (i=0; i<=*n; i++) { 769 PETSC_FORTRAN_OBJECT_C_NULL_TO_F_DESTROYED(&smat[i]); 770 } 771 } 772 773 PETSC_EXTERN void matdestroy_(Mat *x,int *ierr) 774 { 775 PETSC_FORTRAN_OBJECT_F_DESTROYED_TO_C_NULL(x); 776 *ierr = MatDestroy(x); if (*ierr) return; 777 PETSC_FORTRAN_OBJECT_C_NULL_TO_F_DESTROYED(x); 778 } 779 780 PETSC_EXTERN void matsetoptionsprefix_(Mat *mat,char* prefix,PetscErrorCode *ierr,PETSC_FORTRAN_CHARLEN_T len) 781 { 782 char *t; 783 784 FIXCHAR(prefix,len,t); 785 *ierr = MatSetOptionsPrefix(*mat,t);if (*ierr) return; 786 FREECHAR(prefix,t); 787 } 788 789 PETSC_EXTERN void matnullspaceremove_(MatNullSpace *sp,Vec *vec,PetscErrorCode *ierr) 790 { 791 CHKFORTRANNULLOBJECT(*sp) 792 *ierr = MatNullSpaceRemove(*sp,*vec); 793 } 794 795 PETSC_EXTERN void matgetinfo_(Mat *mat,MatInfoType *flag,MatInfo *info, int *ierr) 796 { 797 *ierr = MatGetInfo(*mat,*flag,info); 798 } 799 800 PETSC_EXTERN void matlufactor_(Mat *mat,IS *row,IS *col,const MatFactorInfo *info, int *ierr) 801 { 802 *ierr = MatLUFactor(*mat,*row,*col,info); 803 } 804 805 PETSC_EXTERN void matilufactor_(Mat *mat,IS *row,IS *col,const MatFactorInfo *info, int *ierr) 806 { 807 *ierr = MatILUFactor(*mat,*row,*col,info); 808 } 809 810 PETSC_EXTERN void matlufactorsymbolic_(Mat *fact,Mat *mat,IS *row,IS *col,const MatFactorInfo *info, int *ierr) 811 { 812 *ierr = MatLUFactorSymbolic(*fact,*mat,*row,*col,info); 813 } 814 815 PETSC_EXTERN void matlufactornumeric_(Mat *fact,Mat *mat,const MatFactorInfo *info, int *ierr) 816 { 817 *ierr = MatLUFactorNumeric(*fact,*mat,info); 818 } 819 820 PETSC_EXTERN void matcholeskyfactor_(Mat *mat,IS *perm,const MatFactorInfo *info, int *ierr) 821 { 822 *ierr = MatCholeskyFactor(*mat,*perm,info); 823 } 824 825 PETSC_EXTERN void matcholeskyfactorsymbolic_(Mat *fact,Mat *mat,IS *perm,const MatFactorInfo *info, int *ierr) 826 { 827 *ierr = MatCholeskyFactorSymbolic(*fact,*mat,*perm,info); 828 } 829 830 PETSC_EXTERN void matcholeskyfactornumeric_(Mat *fact,Mat *mat,const MatFactorInfo *info, int *ierr) 831 { 832 *ierr = MatCholeskyFactorNumeric(*fact,*mat,info); 833 } 834 835 PETSC_EXTERN void matilufactorsymbolic_(Mat *fact,Mat *mat,IS *row,IS *col,const MatFactorInfo *info, int *ierr) 836 { 837 *ierr = MatILUFactorSymbolic(*fact,*mat,*row,*col,info); 838 } 839 840 PETSC_EXTERN void maticcfactorsymbolic_(Mat *fact,Mat *mat,IS *perm,const MatFactorInfo *info, int *ierr) 841 { 842 *ierr = MatICCFactorSymbolic(*fact,*mat,*perm,info); 843 } 844 845 PETSC_EXTERN void maticcfactor_(Mat *mat,IS *row,const MatFactorInfo *info, int *ierr) 846 { 847 *ierr = MatICCFactor(*mat,*row,info); 848 } 849 850 PETSC_EXTERN void matfactorinfoinitialize_(MatFactorInfo *info, int *ierr) 851 { 852 *ierr = MatFactorInfoInitialize(info); 853 } 854 PETSC_EXTERN void matzerorowslocal_(Mat *mat,PetscInt *numRows, PetscInt rows[],PetscScalar *diag,Vec *x,Vec *b, int *ierr) 855 { 856 *ierr = MatZeroRowsLocal(*mat,*numRows,rows,*diag,*x,*b); 857 } 858 PETSC_EXTERN void matzerorowslocal0_(Mat *mat,PetscInt *numRows, PetscInt rows[],PetscScalar *diag,Vec *x,Vec *b, int *ierr) 859 { 860 matzerorowslocal_(mat,numRows,rows,diag,x,b,ierr); 861 } 862 PETSC_EXTERN void matzerorowslocal1_(Mat *mat,PetscInt *numRows, PetscInt rows[],PetscScalar *diag,Vec *x,Vec *b, int *ierr) 863 { 864 matzerorowslocal_(mat,numRows,rows,diag,x,b,ierr); 865 } 866 PETSC_EXTERN void matviewfromoptions_(Mat *ao,PetscObject obj,char* type,PetscErrorCode *ierr,PETSC_FORTRAN_CHARLEN_T len) 867 { 868 char *t; 869 870 FIXCHAR(type,len,t); 871 CHKFORTRANNULLOBJECT(obj); 872 *ierr = MatViewFromOptions(*ao,obj,t);if (*ierr) return; 873 FREECHAR(type,t); 874 } 875