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