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 PETSC_SUCCESS; 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 int matgetrowactive = 0; 549 static const PetscInt *my_ocols = 0; 550 static const PetscScalar *my_ovals = 0; 551 552 PETSC_EXTERN void matgetrow_(Mat *mat, PetscInt *row, PetscInt *ncols, PetscInt *cols, PetscScalar *vals, PetscErrorCode *ierr) 553 { 554 const PetscInt **oocols = &my_ocols; 555 const PetscScalar **oovals = &my_ovals; 556 557 if (matgetrowactive) { 558 *ierr = PetscError(PETSC_COMM_SELF, __LINE__, "MatGetRow_Fortran", __FILE__, PETSC_ERR_ARG_WRONGSTATE, PETSC_ERROR_INITIAL, "Cannot have two MatGetRow() active simultaneously\n\ 559 call MatRestoreRow() before calling MatGetRow() a second time"); 560 *ierr = PETSC_ERR_ARG_WRONGSTATE; 561 return; 562 } 563 564 CHKFORTRANNULLINTEGER(cols); 565 if (!cols) oocols = NULL; 566 CHKFORTRANNULLSCALAR(vals); 567 if (!vals) oovals = NULL; 568 569 *ierr = MatGetRow(*mat, *row, ncols, oocols, oovals); 570 if (*ierr) return; 571 572 if (oocols) { 573 *ierr = PetscArraycpy(cols, my_ocols, *ncols); 574 if (*ierr) return; 575 } 576 if (oovals) { 577 *ierr = PetscArraycpy(vals, my_ovals, *ncols); 578 if (*ierr) return; 579 } 580 matgetrowactive = 1; 581 } 582 583 PETSC_EXTERN void matrestorerow_(Mat *mat, PetscInt *row, PetscInt *ncols, PetscInt *cols, PetscScalar *vals, PetscErrorCode *ierr) 584 { 585 const PetscInt **oocols = &my_ocols; 586 const PetscScalar **oovals = &my_ovals; 587 588 if (!matgetrowactive) { 589 *ierr = PetscError(PETSC_COMM_SELF, __LINE__, "MatRestoreRow_Fortran", __FILE__, PETSC_ERR_ARG_WRONGSTATE, PETSC_ERROR_INITIAL, "Must call MatGetRow() first"); 590 *ierr = PETSC_ERR_ARG_WRONGSTATE; 591 return; 592 } 593 CHKFORTRANNULLINTEGER(cols); 594 if (!cols) oocols = NULL; 595 CHKFORTRANNULLSCALAR(vals); 596 if (!vals) oovals = NULL; 597 598 *ierr = MatRestoreRow(*mat, *row, ncols, oocols, oovals); 599 matgetrowactive = 0; 600 } 601 602 PETSC_EXTERN void matview_(Mat *mat,PetscViewer *vin,PetscErrorCode *ierr) 603 { 604 PetscViewer v; 605 PetscPatchDefaultViewers_Fortran(vin,v); 606 *ierr = MatView(*mat,v); 607 } 608 609 PETSC_EXTERN void matload_(Mat *mat,PetscViewer *vin,PetscErrorCode *ierr) 610 { 611 PetscViewer v; 612 PetscPatchDefaultViewers_Fortran(vin,v); 613 *ierr = MatLoad(*mat,v); 614 } 615 616 PETSC_EXTERN void matseqaijgetarray_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr) 617 { 618 PetscScalar *mm; 619 PetscInt m,n; 620 621 *ierr = MatSeqAIJGetArray(*mat,&mm); if (*ierr) return; 622 *ierr = MatGetSize(*mat,&m,&n); if (*ierr) return; 623 *ierr = PetscScalarAddressToFortran((PetscObject)*mat,1,fa,mm,m*n,ia); if (*ierr) return; 624 } 625 626 PETSC_EXTERN void matseqaijrestorearray_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr) 627 { 628 PetscScalar *lx; 629 PetscInt m,n; 630 631 *ierr = MatGetSize(*mat,&m,&n); if (*ierr) return; 632 *ierr = PetscScalarAddressFromFortran((PetscObject)*mat,fa,*ia,m*n,&lx);if (*ierr) return; 633 *ierr = MatSeqAIJRestoreArray(*mat,&lx);if (*ierr) return; 634 } 635 636 PETSC_EXTERN void matdensegetarray_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr) 637 { 638 PetscScalar *mm; 639 PetscInt m,n; 640 641 *ierr = MatDenseGetArray(*mat,&mm); if (*ierr) return; 642 *ierr = MatGetSize(*mat,&m,&n); if (*ierr) return; 643 *ierr = PetscScalarAddressToFortran((PetscObject)*mat,1,fa,mm,m*n,ia); if (*ierr) return; 644 } 645 646 PETSC_EXTERN void matdenserestorearray_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr) 647 { 648 PetscScalar *lx; 649 PetscInt m,n; 650 651 *ierr = MatGetSize(*mat,&m,&n); if (*ierr) return; 652 *ierr = PetscScalarAddressFromFortran((PetscObject)*mat,fa,*ia,m*n,&lx);if (*ierr) return; 653 *ierr = MatDenseRestoreArray(*mat,&lx);if (*ierr) return; 654 } 655 656 PETSC_EXTERN void matdensegetarrayread_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr) 657 { 658 const PetscScalar *mm; 659 PetscInt m,n; 660 661 *ierr = MatDenseGetArrayRead(*mat,&mm); if (*ierr) return; 662 *ierr = MatGetSize(*mat,&m,&n); if (*ierr) return; 663 *ierr = PetscScalarAddressToFortran((PetscObject)*mat,1,fa,(PetscScalar*)mm,m*n,ia); if (*ierr) return; 664 } 665 666 PETSC_EXTERN void matdenserestorearrayread_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr) 667 { 668 const PetscScalar *lx; 669 PetscInt m,n; 670 671 *ierr = MatGetSize(*mat,&m,&n); if (*ierr) return; 672 *ierr = PetscScalarAddressFromFortran((PetscObject)*mat,fa,*ia,m*n,(PetscScalar**)&lx);if (*ierr) return; 673 *ierr = MatDenseRestoreArrayRead(*mat,&lx);if (*ierr) return; 674 } 675 676 PETSC_EXTERN void matfactorgetsolverpackage_(Mat *mat,char* name,PetscErrorCode *ierr,PETSC_FORTRAN_CHARLEN_T len) 677 { 678 const char *tname; 679 680 *ierr = MatFactorGetSolverType(*mat,&tname);if (*ierr) return; 681 if (name != PETSC_NULL_CHARACTER_Fortran) { 682 *ierr = PetscStrncpy(name,tname,len);if (*ierr) return; 683 } 684 FIXRETURNCHAR(PETSC_TRUE,name,len); 685 } 686 687 PETSC_EXTERN void matgetfactor_(Mat *mat,char* outtype,MatFactorType *ftype,Mat *M,PetscErrorCode *ierr,PETSC_FORTRAN_CHARLEN_T len) 688 { 689 char *t; 690 FIXCHAR(outtype,len,t); 691 *ierr = MatGetFactor(*mat,t,*ftype,M);if (*ierr) return; 692 FREECHAR(outtype,t); 693 } 694 695 PETSC_EXTERN void matconvert_(Mat *mat,char* outtype,MatReuse *reuse,Mat *M,PetscErrorCode *ierr,PETSC_FORTRAN_CHARLEN_T len) 696 { 697 char *t; 698 FIXCHAR(outtype,len,t); 699 *ierr = MatConvert(*mat,t,*reuse,M);if (*ierr) return; 700 FREECHAR(outtype,t); 701 } 702 703 /* 704 MatCreateSubmatrices() is slightly different from C since the 705 Fortran provides the array to hold the submatrix objects,while in C that 706 array is allocated by the MatCreateSubmatrices() 707 */ 708 PETSC_EXTERN void matcreatesubmatrices_(Mat *mat,PetscInt *n,IS *isrow,IS *iscol,MatReuse *scall,Mat *smat,PetscErrorCode *ierr) 709 { 710 Mat *lsmat; 711 PetscInt i; 712 713 if (*scall == MAT_INITIAL_MATRIX) { 714 *ierr = MatCreateSubMatrices(*mat,*n,isrow,iscol,*scall,&lsmat); 715 for (i=0; i<=*n; i++) { /* lsmat[*n] might be a dummy matrix for saving data structure */ 716 smat[i] = lsmat[i]; 717 } 718 *ierr = PetscFree(lsmat); 719 } else { 720 *ierr = MatCreateSubMatrices(*mat,*n,isrow,iscol,*scall,&smat); 721 } 722 } 723 724 /* 725 MatCreateSubmatrices() is slightly different from C since the 726 Fortran provides the array to hold the submatrix objects,while in C that 727 array is allocated by the MatCreateSubmatrices() 728 */ 729 PETSC_EXTERN void matcreatesubmatricesmpi_(Mat *mat,PetscInt *n,IS *isrow,IS *iscol,MatReuse *scall,Mat *smat,PetscErrorCode *ierr) 730 { 731 Mat *lsmat; 732 PetscInt i; 733 734 if (*scall == MAT_INITIAL_MATRIX) { 735 *ierr = MatCreateSubMatricesMPI(*mat,*n,isrow,iscol,*scall,&lsmat); 736 for (i=0; i<=*n; i++) { /* lsmat[*n] might be a dummy matrix for saving data structure */ 737 smat[i] = lsmat[i]; 738 } 739 *ierr = PetscFree(lsmat); 740 } else { 741 *ierr = MatCreateSubMatricesMPI(*mat,*n,isrow,iscol,*scall,&smat); 742 } 743 } 744 745 /* 746 MatDestroyMatrices() is slightly different from C since the 747 Fortran does not free the array of matrix objects, while in C that 748 the array is freed 749 */ 750 PETSC_EXTERN void matdestroymatrices_(PetscInt *n,Mat *smat,PetscErrorCode *ierr) 751 { 752 PetscInt i; 753 754 for (i=0; i<*n; i++) { 755 PETSC_FORTRAN_OBJECT_F_DESTROYED_TO_C_NULL(&smat[i]); 756 *ierr = MatDestroy(&smat[i]);if (*ierr) return; 757 PETSC_FORTRAN_OBJECT_C_NULL_TO_F_DESTROYED(&smat[i]); 758 } 759 } 760 761 /* 762 MatDestroySubMatrices() is slightly different from C since the 763 Fortran provides the array to hold the submatrix objects, while in C that 764 array is allocated by the MatCreateSubmatrices() 765 */ 766 PETSC_EXTERN void matdestroysubmatrices_(PetscInt *n,Mat *smat,PetscErrorCode *ierr) 767 { 768 Mat *lsmat; 769 PetscInt i; 770 771 *ierr = PetscMalloc1(*n+1,&lsmat); 772 for (i=0; i<=*n; i++) { 773 PETSC_FORTRAN_OBJECT_F_DESTROYED_TO_C_NULL(&smat[i]); 774 lsmat[i] = smat[i]; 775 } 776 *ierr = MatDestroySubMatrices(*n,&lsmat); 777 for (i=0; i<=*n; i++) { 778 PETSC_FORTRAN_OBJECT_C_NULL_TO_F_DESTROYED(&smat[i]); 779 } 780 } 781 782 PETSC_EXTERN void matdestroy_(Mat *x,int *ierr) 783 { 784 PETSC_FORTRAN_OBJECT_F_DESTROYED_TO_C_NULL(x); 785 *ierr = MatDestroy(x); if (*ierr) return; 786 PETSC_FORTRAN_OBJECT_C_NULL_TO_F_DESTROYED(x); 787 } 788 789 PETSC_EXTERN void matsetoptionsprefix_(Mat *mat,char* prefix,PetscErrorCode *ierr,PETSC_FORTRAN_CHARLEN_T len) 790 { 791 char *t; 792 793 FIXCHAR(prefix,len,t); 794 *ierr = MatSetOptionsPrefix(*mat,t);if (*ierr) return; 795 FREECHAR(prefix,t); 796 } 797 798 PETSC_EXTERN void matnullspaceremove_(MatNullSpace *sp,Vec *vec,PetscErrorCode *ierr) 799 { 800 CHKFORTRANNULLOBJECT(*sp) 801 *ierr = MatNullSpaceRemove(*sp,*vec); 802 } 803 804 PETSC_EXTERN void matgetinfo_(Mat *mat,MatInfoType *flag,MatInfo *info, int *ierr) 805 { 806 *ierr = MatGetInfo(*mat,*flag,info); 807 } 808 809 PETSC_EXTERN void matlufactor_(Mat *mat,IS *row,IS *col,const MatFactorInfo *info, int *ierr) 810 { 811 *ierr = MatLUFactor(*mat,*row,*col,info); 812 } 813 814 PETSC_EXTERN void matilufactor_(Mat *mat,IS *row,IS *col,const MatFactorInfo *info, int *ierr) 815 { 816 *ierr = MatILUFactor(*mat,*row,*col,info); 817 } 818 819 PETSC_EXTERN void matlufactorsymbolic_(Mat *fact,Mat *mat,IS *row,IS *col,const MatFactorInfo *info, int *ierr) 820 { 821 *ierr = MatLUFactorSymbolic(*fact,*mat,*row,*col,info); 822 } 823 824 PETSC_EXTERN void matlufactornumeric_(Mat *fact,Mat *mat,const MatFactorInfo *info, int *ierr) 825 { 826 *ierr = MatLUFactorNumeric(*fact,*mat,info); 827 } 828 829 PETSC_EXTERN void matcholeskyfactor_(Mat *mat,IS *perm,const MatFactorInfo *info, int *ierr) 830 { 831 *ierr = MatCholeskyFactor(*mat,*perm,info); 832 } 833 834 PETSC_EXTERN void matcholeskyfactorsymbolic_(Mat *fact,Mat *mat,IS *perm,const MatFactorInfo *info, int *ierr) 835 { 836 *ierr = MatCholeskyFactorSymbolic(*fact,*mat,*perm,info); 837 } 838 839 PETSC_EXTERN void matcholeskyfactornumeric_(Mat *fact,Mat *mat,const MatFactorInfo *info, int *ierr) 840 { 841 *ierr = MatCholeskyFactorNumeric(*fact,*mat,info); 842 } 843 844 PETSC_EXTERN void matilufactorsymbolic_(Mat *fact,Mat *mat,IS *row,IS *col,const MatFactorInfo *info, int *ierr) 845 { 846 *ierr = MatILUFactorSymbolic(*fact,*mat,*row,*col,info); 847 } 848 849 PETSC_EXTERN void maticcfactorsymbolic_(Mat *fact,Mat *mat,IS *perm,const MatFactorInfo *info, int *ierr) 850 { 851 *ierr = MatICCFactorSymbolic(*fact,*mat,*perm,info); 852 } 853 854 PETSC_EXTERN void maticcfactor_(Mat *mat,IS *row,const MatFactorInfo *info, int *ierr) 855 { 856 *ierr = MatICCFactor(*mat,*row,info); 857 } 858 859 PETSC_EXTERN void matfactorinfoinitialize_(MatFactorInfo *info, int *ierr) 860 { 861 *ierr = MatFactorInfoInitialize(info); 862 } 863 PETSC_EXTERN void matzerorowslocal_(Mat *mat,PetscInt *numRows, PetscInt rows[],PetscScalar *diag,Vec *x,Vec *b, int *ierr) 864 { 865 *ierr = MatZeroRowsLocal(*mat,*numRows,rows,*diag,*x,*b); 866 } 867 PETSC_EXTERN void matzerorowslocal0_(Mat *mat,PetscInt *numRows, PetscInt rows[],PetscScalar *diag,Vec *x,Vec *b, int *ierr) 868 { 869 matzerorowslocal_(mat,numRows,rows,diag,x,b,ierr); 870 } 871 PETSC_EXTERN void matzerorowslocal1_(Mat *mat,PetscInt *numRows, PetscInt rows[],PetscScalar *diag,Vec *x,Vec *b, int *ierr) 872 { 873 matzerorowslocal_(mat,numRows,rows,diag,x,b,ierr); 874 } 875 PETSC_EXTERN void matviewfromoptions_(Mat *ao,PetscObject obj,char* type,PetscErrorCode *ierr,PETSC_FORTRAN_CHARLEN_T len) 876 { 877 char *t; 878 879 FIXCHAR(type,len,t); 880 CHKFORTRANNULLOBJECT(obj); 881 *ierr = MatViewFromOptions(*ao,obj,t);if (*ierr) return; 882 FREECHAR(type,t); 883 } 884