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 matsetvalues_ MATSETVALUES 8 #define matsetvaluesnnnn_ MATSETVALUESNNNN 9 #define matsetvalues0_ MATSETVALUES0 10 #define matsetvaluesnn1_ MATSETVALUESNN1 11 #define matsetvalues11_ MATSETVALUES11 12 #define matsetvalues1n_ MATSETVALUES1N 13 #define matsetvaluesn1_ MATSETVALUESN1 14 #define matsetvaluesblocked0_ MATSETVALUESBLOCKED0 15 #define matsetvaluesblocked2_ MATSETVALUESBLOCKED2 16 #define matsetvaluesblocked11_ MATSETVALUESBLOCKED11 17 #define matsetvaluesblocked111_ MATSETVALUESBLOCKED111 18 #define matsetvaluesblocked1n_ MATSETVALUESBLOCKED1N 19 #define matsetvaluesblockedn1_ MATSETVALUESBLOCKEDN1 20 #define matsetvaluesblockedlocal_ MATSETVALUESBLOCKEDLOCAL 21 #define matsetvaluesblockedlocal0_ MATSETVALUESBLOCKEDLOCAL0 22 #define matsetvaluesblockedlocal11_ MATSETVALUESBLOCKEDLOCAL11 23 #define matsetvaluesblockedlocal111_ MATSETVALUESBLOCKEDLOCAL111 24 #define matsetvaluesblockedlocal1n_ MATSETVALUESBLOCKEDLOCAL1N 25 #define matsetvaluesblockedlocaln1_ MATSETVALUESBLOCKEDLOCALN1 26 #define matsetvalueslocal_ MATSETVALUESLOCAL 27 #define matsetvalueslocal0_ MATSETVALUESLOCAL0 28 #define matsetvalueslocal11_ MATSETVALUESLOCAL11 29 #define matsetvalueslocal11nn_ MATSETVALUESLOCAL11NN 30 #define matsetvalueslocal111_ MATSETVALUESLOCAL111 31 #define matsetvalueslocal1n_ MATSETVALUESLOCAL1N 32 #define matsetvalueslocaln1_ MATSETVALUESLOCALN1 33 #define matgetrowmin_ MATGETROWMIN 34 #define matgetrowminabs_ MATGETROWMINABS 35 #define matgetrowmax_ MATGETROWMAX 36 #define matgetrowmaxabs_ MATGETROWMAXABS 37 #define matdestroymatrices_ MATDESTROYMATRICES 38 #define matdestroysubmatrices_ MATDESTROYSUBMATRICES 39 #define matgetfactor_ MATGETFACTOR 40 #define matfactorgetsolverpackage_ MATFACTORGETSOLVERPACKAGE 41 #define matgetrowij_ MATGETROWIJ 42 #define matrestorerowij_ MATRESTOREROWIJ 43 #define matgetrow_ MATGETROW 44 #define matrestorerow_ MATRESTOREROW 45 #define matload_ MATLOAD 46 #define matview_ MATVIEW 47 #define matseqaijgetarray_ MATSEQAIJGETARRAY 48 #define matseqaijrestorearray_ MATSEQAIJRESTOREARRAY 49 #define matdensegetarray_ MATDENSEGETARRAY 50 #define matdensegetarrayread_ MATDENSEGETARRAYREAD 51 #define matdenserestorearray_ MATDENSERESTOREARRAY 52 #define matdenserestorearrayread_ MATDENSERESTOREARRAYREAD 53 #define matconvert_ MATCONVERT 54 #define matcreatesubmatrices_ MATCREATESUBMATRICES 55 #define matcreatesubmatricesmpi_ MATCREATESUBMATRICESMPI 56 #define matzerorowscolumns_ MATZEROROWSCOLUMNS 57 #define matzerorowscolumnsis_ MATZEROROWSCOLUMNSIS 58 #define matzerorowsstencil_ MATZEROROWSSTENCIL 59 #define matzerorowscolumnsstencil_ MATZEROROWSCOLUMNSSTENCIL 60 #define matzerorows_ MATZEROROWS 61 #define matzerorowsis_ MATZEROROWSIS 62 #define matzerorowslocal_ MATZEROROWSLOCAL 63 #define matzerorowslocal0_ MATZEROROWSLOCAL0 64 #define matzerorowslocal1_ MATZEROROWSLOCAL1 65 #define matzerorowslocalis_ MATZEROROWSLOCALIS 66 #define matzerorowscolumnslocal_ MATZEROROWSCOLUMNSLOCAL 67 #define matzerorowscolumnslocalis_ MATZEROROWSCOLUMNSLOCALIS 68 #define matsetoptionsprefix_ MATSETOPTIONSPREFIX 69 #define matcreatevecs_ MATCREATEVECS 70 #define matnullspaceremove_ MATNULLSPACEREMOVE 71 #define matgetinfo_ MATGETINFO 72 #define matlufactor_ MATLUFACTOR 73 #define matilufactor_ MATILUFACTOR 74 #define matlufactorsymbolic_ MATLUFACTORSYMBOLIC 75 #define matlufactornumeric_ MATLUFACTORNUMERIC 76 #define matcholeskyfactor_ MATCHOLESKYFACTOR 77 #define matcholeskyfactorsymbolic_ MATCHOLESKYFACTORSYMBOLIC 78 #define matcholeskyfactornumeric_ MATCHOLESKYFACTORNUMERIC 79 #define matilufactorsymbolic_ MATILUFACTORSYMBOLIC 80 #define maticcfactorsymbolic_ MATICCFACTORSYMBOLIC 81 #define maticcfactor_ MATICCFACTOR 82 #define matfactorinfoinitialize_ MATFACTORINFOINITIALIZE 83 #define matnullspacesetfunction_ MATNULLSPACESETFUNCTION 84 #define matfindnonzerorows_ MATFINDNONZEROROWS 85 #define matgetsize_ MATGETSIZE 86 #define matgetsize00_ MATGETSIZE00 87 #define matgetsize10_ MATGETSIZE10 88 #define matgetsize01_ MATGETSIZE01 89 #define matgetlocalsize_ MATGETLOCALSIZE 90 #define matgetlocalsize00_ MATGETLOCALSIZE00 91 #define matgetlocalsize10_ MATGETLOCALSIZE10 92 #define matgetlocalsize01_ MATGETLOCALSIZE01 93 #define matsetnullspace_ MATSETNULLSPACE 94 #define matgetownershiprange_ MATGETOWNERSHIPRANGE 95 #define matgetownershiprange00_ MATGETOWNERSHIPRANGE00 96 #define matgetownershiprange10_ MATGETOWNERSHIPRANGE10 97 #define matgetownershiprange01_ MATGETOWNERSHIPRANGE01 98 #define matgetownershiprange11_ MATGETOWNERSHIPRANGE11 99 #define matgetownershipis_ MATGETOWNERSHIPIS 100 #define matgetownershiprangecolumn_ MATGETOWNERSHIPRANGECOLUMN 101 #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE) 102 #define matsetvalues_ matsetvalues 103 #define matsetvaluesnnnn_ matsetvaluesnnnn 104 #define matsetvalues0_ matsetvalues0 105 #define matsetvaluesnn1_ matsetvaluesnn1 106 #define matsetvalues11_ matsetvalues11 107 #define matsetvaluesn1_ matsetvaluesn1 108 #define matsetvalues1n_ matsetvalues1n 109 #define matsetvalueslocal_ matsetvalueslocal 110 #define matsetvalueslocal0_ matsetvalueslocal0 111 #define matsetvalueslocal11_ matsetvalueslocal11 112 #define matsetvalueslocal11nn_ matsetvalueslocal11nn 113 #define matsetvalueslocal111_ matsetvalueslocal111 114 #define matsetvalueslocal1n_ matsetvalueslocal1n 115 #define matsetvalueslocaln1_ matsetvalueslocaln1 116 #define matsetvaluesblocked_ matsetvaluesblocked 117 #define matsetvaluesblocked0_ matsetvaluesblocked0 118 #define matsetvaluesblocked2_ matsetvaluesblocked2 119 #define matsetvaluesblocked11_ matsetvaluesblocked11 120 #define matsetvaluesblocked111_ matsetvaluesblocked111 121 #define matsetvaluesblocked1n_ matsetvaluesblocked1n 122 #define matsetvaluesblockedn1_ matsetvaluesblockedn1 123 #define matsetvaluesblockedlocal_ matsetvaluesblockedlocal 124 #define matsetvaluesblockedlocal0_ matsetvaluesblockedlocal0 125 #define matsetvaluesblockedlocal11_ matsetvaluesblockedlocal11 126 #define matsetvaluesblockedlocal111_ matsetvaluesblockedlocal111 127 #define matsetvaluesblockedlocal1n_ matsetvaluesblockedlocal1n 128 #define matsetvaluesblockedlocaln1_ matsetvaluesblockedlocaln1 129 #define matgetrowmin_ matgetrowmin 130 #define matgetrowminabs_ matgetrowminabs 131 #define matgetrowmax_ matgetrowmax 132 #define matgetrowmaxabs_ matgetrowmaxabs 133 #define matdestroymatrices_ matdestroymatrices 134 #define matdestroysubmatrices_ matdestroysubmatrices 135 #define matgetfactor_ matgetfactor 136 #define matfactorgetsolverpackage_ matfactorgetsolverpackage 137 #define matcreatevecs_ matcreatevecs 138 #define matgetrowij_ matgetrowij 139 #define matrestorerowij_ matrestorerowij 140 #define matgetrow_ matgetrow 141 #define matrestorerow_ matrestorerow 142 #define matview_ matview 143 #define matload_ matload 144 #define matseqaijgetarray_ matseqaijgetarray 145 #define matseqaijrestorearray_ matseqaijrestorearray 146 #define matdensegetarray_ matdensegetarray 147 #define matdensegetarrayread_ matdensegetarrayread 148 #define matdenserestorearray_ matdenserestorearray 149 #define matdenserestorearrayread_ matdenserestorearrayread 150 #define matconvert_ matconvert 151 #define matcreatesubmatrices_ matcreatesubmatrices 152 #define matcreatesubmatricesmpi_ matcreatesubmatricesmpi 153 #define matzerorowscolumns_ matzerorowscolumns 154 #define matzerorowscolumnsis_ matzerorowscolumnsis 155 #define matzerorowsstencil_ matzerorowsstencil 156 #define matzerorowscolumnsstencil_ matzerorowscolumnsstencil 157 #define matzerorows_ matzerorows 158 #define matzerorowsis_ matzerorowsis 159 #define matzerorowslocal_ matzerorowslocal 160 #define matzerorowslocalis_ matzerorowslocalis 161 #define matzerorowscolumnslocal_ matzerorowscolumnslocal 162 #define matzerorowscolumnslocalis_ matzerorowscolumnslocalis 163 #define matsetoptionsprefix_ matsetoptionsprefix 164 #define matnullspaceremove_ matnullspaceremove 165 #define matgetinfo_ matgetinfo 166 #define matlufactor_ matlufactor 167 #define matilufactor_ matilufactor 168 #define matlufactorsymbolic_ matlufactorsymbolic 169 #define matlufactornumeric_ matlufactornumeric 170 #define matcholeskyfactor_ matcholeskyfactor 171 #define matcholeskyfactorsymbolic_ matcholeskyfactorsymbolic 172 #define matcholeskyfactornumeric_ matcholeskyfactornumeric 173 #define matilufactorsymbolic_ matilufactorsymbolic 174 #define maticcfactorsymbolic_ maticcfactorsymbolic 175 #define maticcfactor_ maticcfactor 176 #define matfactorinfoinitialize_ matfactorinfoinitialize 177 #define matnullspacesetfunction_ matnullspacesetfunction 178 #define matfindnonzerorows_ matfindnonzerorows 179 #define matgetsize_ matgetsize 180 #define matgetsize00_ matgetsize00 181 #define matgetsize10_ matgetsize10 182 #define matgetsize01_ matgetsize01 183 #define matgetlocalsize_ matgetlocalsize 184 #define matgetlocalsize00_ matgetlocalsize00 185 #define matgetlocalsize10_ matgetlocalsize10 186 #define matgetlocalsize01_ matgetlocalsize01 187 #define matsetnullspace_ matsetnullspace 188 #define matgetownershiprange_ matgetownershiprange 189 #define matgetownershiprange00_ matgetownershiprange00 190 #define matgetownershiprange10_ matgetownershiprange10 191 #define matgetownershiprange01_ matgetownershiprange01 192 #define matgetownershiprange11_ matgetownershiprange11 193 #define matgetownershipis_ matgetownershipis 194 #define matgetownershiprangecolumn_ matgetownershiprangecolumn 195 #endif 196 197 PETSC_EXTERN void PETSC_STDCALL matgetownershiprange_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr ) 198 { 199 CHKFORTRANNULLINTEGER(m); 200 CHKFORTRANNULLINTEGER(n); 201 *ierr = MatGetOwnershipRange(*mat,m,n); 202 } 203 204 PETSC_EXTERN void PETSC_STDCALL matgetownershiprange00_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr ) 205 { 206 CHKFORTRANNULLINTEGER(m); 207 CHKFORTRANNULLINTEGER(n); 208 *ierr = MatGetOwnershipRange(*mat,m,n); 209 } 210 211 PETSC_EXTERN void PETSC_STDCALL matgetownershiprange10_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr ) 212 { 213 CHKFORTRANNULLINTEGER(m); 214 CHKFORTRANNULLINTEGER(n); 215 *ierr = MatGetOwnershipRange(*mat,m,n); 216 } 217 218 PETSC_EXTERN void PETSC_STDCALL matgetownershiprange01_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr ) 219 { 220 CHKFORTRANNULLINTEGER(m); 221 CHKFORTRANNULLINTEGER(n); 222 *ierr = MatGetOwnershipRange(*mat,m,n); 223 } 224 225 PETSC_EXTERN void PETSC_STDCALL matgetownershiprange11_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr ) 226 { 227 CHKFORTRANNULLINTEGER(m); 228 CHKFORTRANNULLINTEGER(n); 229 *ierr = MatGetOwnershipRange(*mat,m,n); 230 } 231 232 PETSC_EXTERN void PETSC_STDCALL matgetownershipis_(Mat *mat,IS *m,IS *n, int *ierr ) 233 { 234 CHKFORTRANNULLOBJECT(m); 235 CHKFORTRANNULLOBJECT(n); 236 *ierr = MatGetOwnershipIS(*mat,m,n); 237 } 238 239 PETSC_EXTERN void PETSC_STDCALL matgetownershiprangecolumn_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr ) 240 { 241 CHKFORTRANNULLINTEGER(m); 242 CHKFORTRANNULLINTEGER(n); 243 *ierr = MatGetOwnershipRangeColumn(*mat,m,n); 244 } 245 246 PETSC_EXTERN void PETSC_STDCALL matgetsize_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr ) 247 { 248 CHKFORTRANNULLINTEGER(m); 249 CHKFORTRANNULLINTEGER(n); 250 *ierr = MatGetSize(*mat,m,n); 251 } 252 253 PETSC_EXTERN void PETSC_STDCALL matgetsize00_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr ) 254 { 255 matgetsize_(mat,m,n,ierr); 256 } 257 258 PETSC_EXTERN void PETSC_STDCALL matgetsize10_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr ) 259 { 260 matgetsize_(mat,m,n,ierr); 261 } 262 263 PETSC_EXTERN void PETSC_STDCALL matgetsize01_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr ) 264 { 265 matgetsize_(mat,m,n,ierr); 266 } 267 268 PETSC_EXTERN void PETSC_STDCALL matgetlocalsize_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr ) 269 { 270 CHKFORTRANNULLINTEGER(m); 271 CHKFORTRANNULLINTEGER(n); 272 *ierr = MatGetLocalSize(*mat,m,n); 273 } 274 275 PETSC_EXTERN void PETSC_STDCALL matgetlocalsize00_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr ) 276 { 277 matgetlocalsize_(mat,m,n,ierr); 278 } 279 280 PETSC_EXTERN void PETSC_STDCALL matgetlocalsize10_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr ) 281 { 282 matgetlocalsize_(mat,m,n,ierr); 283 } 284 285 PETSC_EXTERN void PETSC_STDCALL matgetlocalsize01_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr ) 286 { 287 matgetlocalsize_(mat,m,n,ierr); 288 } 289 290 PETSC_EXTERN void PETSC_STDCALL matsetvaluesblocked_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){ 291 *ierr = MatSetValuesBlocked(*mat,*m,idxm,*n,idxn,v,*addv); 292 } 293 294 PETSC_EXTERN void PETSC_STDCALL matsetvaluesblocked2_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], F90Array2d *y,InsertMode *addv, int *ierr PETSC_F90_2PTR_PROTO(ptrd)){ 295 PetscScalar *fa; 296 *ierr = F90Array2dAccess(y,MPIU_SCALAR,(void**)&fa PETSC_F90_2PTR_PARAM(ptrd));if (*ierr) return; 297 matsetvaluesblocked_(mat,m,idxm,n,idxn,fa,addv,ierr); 298 } 299 300 PETSC_EXTERN void PETSC_STDCALL matsetvaluesblocked0_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){ 301 matsetvaluesblocked_(mat,m,idxm,n,idxn,v,addv,ierr); 302 } 303 304 PETSC_EXTERN void PETSC_STDCALL matsetvaluesblocked11_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){ 305 matsetvaluesblocked_(mat,m,idxm,n,idxn,v,addv,ierr); 306 } 307 308 PETSC_EXTERN void PETSC_STDCALL matsetvaluesblocked111_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){ 309 matsetvaluesblocked_(mat,m,idxm,n,idxn,v,addv,ierr); 310 } 311 312 PETSC_EXTERN void PETSC_STDCALL matsetvaluesblocked1n_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){ 313 matsetvaluesblocked_(mat,m,idxm,n,idxn,v,addv,ierr); 314 } 315 316 PETSC_EXTERN void PETSC_STDCALL matsetvaluesblockedn1_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){ 317 matsetvaluesblocked_(mat,m,idxm,n,idxn,v,addv,ierr); 318 } 319 320 PETSC_EXTERN void PETSC_STDCALL matsetvaluesblockedlocal_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr ) 321 { 322 *ierr = MatSetValuesBlockedLocal(*mat,*nrow,irow,*ncol,icol,y,*addv); 323 } 324 325 PETSC_EXTERN void PETSC_STDCALL matsetvaluesblockedlocal0_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){ 326 matsetvaluesblockedlocal_(mat,m,idxm,n,idxn,v,addv,ierr); 327 } 328 329 PETSC_EXTERN void PETSC_STDCALL matsetvaluesblockedlocal11_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){ 330 matsetvaluesblockedlocal_(mat,m,idxm,n,idxn,v,addv,ierr); 331 } 332 333 PETSC_EXTERN void PETSC_STDCALL matsetvaluesblockedlocal111_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){ 334 matsetvaluesblockedlocal_(mat,m,idxm,n,idxn,v,addv,ierr); 335 } 336 337 PETSC_EXTERN void PETSC_STDCALL matsetvaluesblockedlocal1n_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){ 338 matsetvaluesblockedlocal_(mat,m,idxm,n,idxn,v,addv,ierr); 339 } 340 341 PETSC_EXTERN void PETSC_STDCALL matsetvaluesblockedlocaln1_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){ 342 matsetvaluesblockedlocal_(mat,m,idxm,n,idxn,v,addv,ierr); 343 } 344 345 PETSC_EXTERN void PETSC_STDCALL matsetvalues_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ) 346 { 347 *ierr = MatSetValues(*mat,*m,idxm,*n,idxn,v,*addv); 348 } 349 350 PETSC_EXTERN void PETSC_STDCALL matsetvaluesnnnn_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ) 351 { 352 matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr); 353 } 354 355 PETSC_EXTERN void PETSC_STDCALL matsetvalues0_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ) 356 { 357 matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr); 358 } 359 360 PETSC_EXTERN void PETSC_STDCALL matsetvaluesnn1_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ) 361 { 362 matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr); 363 } 364 365 PETSC_EXTERN void PETSC_STDCALL matsetvalues11_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ) 366 { 367 matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr); 368 } 369 370 PETSC_EXTERN void PETSC_STDCALL matsetvaluesn1_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ) 371 { 372 matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr); 373 } 374 375 PETSC_EXTERN void PETSC_STDCALL matsetvalues1n_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ) 376 { 377 matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr); 378 } 379 380 PETSC_EXTERN void PETSC_STDCALL matsetvalueslocal_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr ) 381 { 382 *ierr = MatSetValuesLocal(*mat,*nrow,irow,*ncol,icol,y,*addv); 383 } 384 385 PETSC_EXTERN void PETSC_STDCALL matsetvalueslocal0_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr ) 386 { 387 matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr); 388 } 389 390 PETSC_EXTERN void PETSC_STDCALL matsetvalueslocal11_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr ) 391 { 392 matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr); 393 } 394 395 PETSC_EXTERN void PETSC_STDCALL matsetvalueslocal11nn_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr ) 396 { 397 matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr); 398 } 399 400 PETSC_EXTERN void PETSC_STDCALL matsetvalueslocal111_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr ) 401 { 402 matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr); 403 } 404 405 PETSC_EXTERN void PETSC_STDCALL matsetvalueslocal1n_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr ) 406 { 407 matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr); 408 } 409 410 PETSC_EXTERN void PETSC_STDCALL matsetvalueslocaln1_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr ) 411 { 412 matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr); 413 } 414 415 PETSC_EXTERN void PETSC_STDCALL matgetrowmin_(Mat *mat,Vec *v,PetscInt idx[], int *ierr ) 416 { 417 CHKFORTRANNULLINTEGER(idx); 418 *ierr = MatGetRowMin(*mat,*v,idx); 419 } 420 421 PETSC_EXTERN void PETSC_STDCALL matgetrowminabs_(Mat *mat,Vec *v,PetscInt idx[], int *ierr ) 422 { 423 CHKFORTRANNULLINTEGER(idx); 424 *ierr = MatGetRowMinAbs(*mat,*v,idx); 425 } 426 427 PETSC_EXTERN void PETSC_STDCALL matgetrowmax_(Mat *mat,Vec *v,PetscInt idx[], int *ierr ) 428 { 429 CHKFORTRANNULLINTEGER(idx); 430 *ierr = MatGetRowMax(*mat,*v,idx); 431 } 432 433 PETSC_EXTERN void PETSC_STDCALL matgetrowmaxabs_(Mat *mat,Vec *v,PetscInt idx[], int *ierr ) 434 { 435 CHKFORTRANNULLINTEGER(idx); 436 *ierr = MatGetRowMaxAbs(*mat,*v,idx); 437 } 438 439 static PetscErrorCode ournullfunction(MatNullSpace sp,Vec x,void *ctx) 440 { 441 PetscErrorCode ierr = 0; 442 (*(void (PETSC_STDCALL *)(MatNullSpace*,Vec*,void*,PetscErrorCode*))(((PetscObject)sp)->fortran_func_pointers[0]))(&sp,&x,ctx,&ierr);CHKERRQ(ierr); 443 return 0; 444 } 445 446 PETSC_EXTERN void PETSC_STDCALL matnullspacesetfunction_(MatNullSpace *sp, PetscErrorCode (*rem)(MatNullSpace,Vec,void*),void *ctx,PetscErrorCode *ierr) 447 { 448 PetscObjectAllocateFortranPointers(*sp,1); 449 ((PetscObject)*sp)->fortran_func_pointers[0] = (PetscVoidFunction)rem; 450 451 *ierr = MatNullSpaceSetFunction(*sp,ournullfunction,ctx); 452 } 453 454 PETSC_EXTERN void PETSC_STDCALL matcreatevecs_(Mat *mat,Vec *right,Vec *left, int *ierr) 455 { 456 CHKFORTRANNULLOBJECT(right); 457 CHKFORTRANNULLOBJECT(left); 458 *ierr = MatCreateVecs(*mat,right,left); 459 } 460 461 PETSC_EXTERN void PETSC_STDCALL matgetrowij_(Mat *B,PetscInt *shift,PetscBool *sym,PetscBool *blockcompressed,PetscInt *n,PetscInt *ia,size_t *iia, 462 PetscInt *ja,size_t *jja,PetscBool *done,PetscErrorCode *ierr) 463 { 464 const PetscInt *IA,*JA; 465 *ierr = MatGetRowIJ(*B,*shift,*sym,*blockcompressed,n,&IA,&JA,done);if (*ierr) return; 466 *iia = PetscIntAddressToFortran(ia,(PetscInt*)IA); 467 *jja = PetscIntAddressToFortran(ja,(PetscInt*)JA); 468 } 469 470 PETSC_EXTERN void PETSC_STDCALL matrestorerowij_(Mat *B,PetscInt *shift,PetscBool *sym,PetscBool *blockcompressed, PetscInt *n,PetscInt *ia,size_t *iia, 471 PetscInt *ja,size_t *jja,PetscBool *done,PetscErrorCode *ierr) 472 { 473 const PetscInt *IA = PetscIntAddressFromFortran(ia,*iia),*JA = PetscIntAddressFromFortran(ja,*jja); 474 *ierr = MatRestoreRowIJ(*B,*shift,*sym,*blockcompressed,n,&IA,&JA,done); 475 } 476 477 /* 478 This is a poor way of storing the column and value pointers 479 generated by MatGetRow() to be returned with MatRestoreRow() 480 but there is not natural,good place else to store them. Hence 481 Fortran programmers can only have one outstanding MatGetRows() 482 at a time. 483 */ 484 static PetscErrorCode matgetrowactive = 0; 485 static const PetscInt *my_ocols = 0; 486 static const PetscScalar *my_ovals = 0; 487 488 PETSC_EXTERN void PETSC_STDCALL matgetrow_(Mat *mat,PetscInt *row,PetscInt *ncols,PetscInt *cols,PetscScalar *vals,PetscErrorCode *ierr) 489 { 490 const PetscInt **oocols = &my_ocols; 491 const PetscScalar **oovals = &my_ovals; 492 493 if (matgetrowactive) { 494 PetscError(PETSC_COMM_SELF,__LINE__,"MatGetRow_Fortran",__FILE__,PETSC_ERR_ARG_WRONGSTATE,PETSC_ERROR_INITIAL, 495 "Cannot have two MatGetRow() active simultaneously\n\ 496 call MatRestoreRow() before calling MatGetRow() a second time"); 497 *ierr = 1; 498 return; 499 } 500 501 CHKFORTRANNULLINTEGER(cols); if (!cols) oocols = NULL; 502 CHKFORTRANNULLSCALAR(vals); if (!vals) oovals = NULL; 503 504 *ierr = MatGetRow(*mat,*row,ncols,oocols,oovals); 505 if (*ierr) return; 506 507 if (oocols) { *ierr = PetscMemcpy(cols,my_ocols,(*ncols)*sizeof(PetscInt)); if (*ierr) return;} 508 if (oovals) { *ierr = PetscMemcpy(vals,my_ovals,(*ncols)*sizeof(PetscScalar)); if (*ierr) return;} 509 matgetrowactive = 1; 510 } 511 512 PETSC_EXTERN void PETSC_STDCALL matrestorerow_(Mat *mat,PetscInt *row,PetscInt *ncols,PetscInt *cols,PetscScalar *vals,PetscErrorCode *ierr) 513 { 514 const PetscInt **oocols = &my_ocols; 515 const PetscScalar **oovals = &my_ovals; 516 if (!matgetrowactive) { 517 PetscError(PETSC_COMM_SELF,__LINE__,"MatRestoreRow_Fortran",__FILE__,PETSC_ERR_ARG_WRONGSTATE,PETSC_ERROR_INITIAL, 518 "Must call MatGetRow() first"); 519 *ierr = 1; 520 return; 521 } 522 CHKFORTRANNULLINTEGER(cols); if (!cols) oocols = NULL; 523 CHKFORTRANNULLSCALAR(vals); if (!vals) oovals = NULL; 524 525 *ierr = MatRestoreRow(*mat,*row,ncols,oocols,oovals); 526 matgetrowactive = 0; 527 } 528 529 PETSC_EXTERN void PETSC_STDCALL matview_(Mat *mat,PetscViewer *vin,PetscErrorCode *ierr) 530 { 531 PetscViewer v; 532 PetscPatchDefaultViewers_Fortran(vin,v); 533 *ierr = MatView(*mat,v); 534 } 535 536 PETSC_EXTERN void PETSC_STDCALL matload_(Mat *mat,PetscViewer *vin,PetscErrorCode *ierr) 537 { 538 PetscViewer v; 539 PetscPatchDefaultViewers_Fortran(vin,v); 540 *ierr = MatLoad(*mat,v); 541 } 542 543 PETSC_EXTERN void PETSC_STDCALL matseqaijgetarray_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr) 544 { 545 PetscScalar *mm; 546 PetscInt m,n; 547 548 *ierr = MatSeqAIJGetArray(*mat,&mm); if (*ierr) return; 549 *ierr = MatGetSize(*mat,&m,&n); if (*ierr) return; 550 *ierr = PetscScalarAddressToFortran((PetscObject)*mat,1,fa,mm,m*n,ia); if (*ierr) return; 551 } 552 553 PETSC_EXTERN void PETSC_STDCALL matseqaijrestorearray_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr) 554 { 555 PetscScalar *lx; 556 PetscInt m,n; 557 558 *ierr = MatGetSize(*mat,&m,&n); if (*ierr) return; 559 *ierr = PetscScalarAddressFromFortran((PetscObject)*mat,fa,*ia,m*n,&lx);if (*ierr) return; 560 *ierr = MatSeqAIJRestoreArray(*mat,&lx);if (*ierr) return; 561 } 562 563 PETSC_EXTERN void PETSC_STDCALL matdensegetarray_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr) 564 { 565 PetscScalar *mm; 566 PetscInt m,n; 567 568 *ierr = MatDenseGetArray(*mat,&mm); if (*ierr) return; 569 *ierr = MatGetSize(*mat,&m,&n); if (*ierr) return; 570 *ierr = PetscScalarAddressToFortran((PetscObject)*mat,1,fa,mm,m*n,ia); if (*ierr) return; 571 } 572 573 PETSC_EXTERN void PETSC_STDCALL matdenserestorearray_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr) 574 { 575 PetscScalar *lx; 576 PetscInt m,n; 577 578 *ierr = MatGetSize(*mat,&m,&n); if (*ierr) return; 579 *ierr = PetscScalarAddressFromFortran((PetscObject)*mat,fa,*ia,m*n,&lx);if (*ierr) return; 580 *ierr = MatDenseRestoreArray(*mat,&lx);if (*ierr) return; 581 } 582 583 PETSC_EXTERN void PETSC_STDCALL matdensegetarrayread_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr) 584 { 585 const PetscScalar *mm; 586 PetscInt m,n; 587 588 *ierr = MatDenseGetArrayRead(*mat,&mm); if (*ierr) return; 589 *ierr = MatGetSize(*mat,&m,&n); if (*ierr) return; 590 *ierr = PetscScalarAddressToFortran((PetscObject)*mat,1,fa,(PetscScalar*)mm,m*n,ia); if (*ierr) return; 591 } 592 593 594 PETSC_EXTERN void PETSC_STDCALL matdenserestorearrayread_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr) 595 { 596 const PetscScalar *lx; 597 PetscInt m,n; 598 599 *ierr = MatGetSize(*mat,&m,&n); if (*ierr) return; 600 *ierr = PetscScalarAddressFromFortran((PetscObject)*mat,fa,*ia,m*n,(PetscScalar**)&lx);if (*ierr) return; 601 *ierr = MatDenseRestoreArrayRead(*mat,&lx);if (*ierr) return; 602 } 603 604 PETSC_EXTERN void PETSC_STDCALL matfactorgetsolverpackage_(Mat *mat,char* name PETSC_MIXED_LEN(len),PetscErrorCode *ierr PETSC_END_LEN(len)) 605 { 606 const char *tname; 607 608 *ierr = MatFactorGetSolverType(*mat,&tname);if (*ierr) return; 609 if (name != PETSC_NULL_CHARACTER_Fortran) { 610 *ierr = PetscStrncpy(name,tname,len);if (*ierr) return; 611 } 612 FIXRETURNCHAR(PETSC_TRUE,name,len); 613 } 614 615 PETSC_EXTERN void PETSC_STDCALL matgetfactor_(Mat *mat,char* outtype PETSC_MIXED_LEN(len),MatFactorType *ftype,Mat *M,PetscErrorCode *ierr PETSC_END_LEN(len)) 616 { 617 char *t; 618 FIXCHAR(outtype,len,t); 619 *ierr = MatGetFactor(*mat,t,*ftype,M);if (*ierr) return; 620 FREECHAR(outtype,t); 621 } 622 623 PETSC_EXTERN void PETSC_STDCALL matconvert_(Mat *mat,char* outtype PETSC_MIXED_LEN(len),MatReuse *reuse,Mat *M,PetscErrorCode *ierr PETSC_END_LEN(len)) 624 { 625 char *t; 626 FIXCHAR(outtype,len,t); 627 *ierr = MatConvert(*mat,t,*reuse,M);if (*ierr) return; 628 FREECHAR(outtype,t); 629 } 630 631 /* 632 MatCreateSubmatrices() is slightly different from C since the 633 Fortran provides the array to hold the submatrix objects,while in C that 634 array is allocated by the MatCreateSubmatrices() 635 */ 636 PETSC_EXTERN void PETSC_STDCALL matcreatesubmatrices_(Mat *mat,PetscInt *n,IS *isrow,IS *iscol,MatReuse *scall,Mat *smat,PetscErrorCode *ierr) 637 { 638 Mat *lsmat; 639 PetscInt i; 640 641 if (*scall == MAT_INITIAL_MATRIX) { 642 *ierr = MatCreateSubMatrices(*mat,*n,isrow,iscol,*scall,&lsmat); 643 for (i=0; i<=*n; i++) { /* lsmat[*n] might be a dummy matrix for saving data struc */ 644 smat[i] = lsmat[i]; 645 } 646 *ierr = PetscFree(lsmat); 647 } else { 648 *ierr = MatCreateSubMatrices(*mat,*n,isrow,iscol,*scall,&smat); 649 } 650 } 651 652 /* 653 MatCreateSubmatrices() is slightly different from C since the 654 Fortran provides the array to hold the submatrix objects,while in C that 655 array is allocated by the MatCreateSubmatrices() 656 */ 657 PETSC_EXTERN void PETSC_STDCALL matcreatesubmatricesmpi_(Mat *mat,PetscInt *n,IS *isrow,IS *iscol,MatReuse *scall,Mat *smat,PetscErrorCode *ierr) 658 { 659 Mat *lsmat; 660 PetscInt i; 661 662 if (*scall == MAT_INITIAL_MATRIX) { 663 *ierr = MatCreateSubMatricesMPI(*mat,*n,isrow,iscol,*scall,&lsmat); 664 for (i=0; i<=*n; i++) { /* lsmat[*n] might be a dummy matrix for saving data struc */ 665 smat[i] = lsmat[i]; 666 } 667 *ierr = PetscFree(lsmat); 668 } else { 669 *ierr = MatCreateSubMatricesMPI(*mat,*n,isrow,iscol,*scall,&smat); 670 } 671 } 672 673 /* 674 MatDestroyMatrices() is slightly different from C since the 675 Fortran does not free the array of matrix objects, while in C that 676 the array is freed 677 */ 678 PETSC_EXTERN void PETSC_STDCALL matdestroymatrices_(PetscInt *n,Mat *smat,PetscErrorCode *ierr) 679 { 680 PetscInt i; 681 682 for (i=0; i<*n; i++) { 683 *ierr = MatDestroy(&smat[i]);if (*ierr) return; 684 } 685 } 686 687 /* 688 MatDestroySubMatrices() is slightly different from C since the 689 Fortran provides the array to hold the submatrix objects, while in C that 690 array is allocated by the MatCreateSubmatrices() 691 */ 692 PETSC_EXTERN void PETSC_STDCALL matdestroysubmatrices_(PetscInt *n,Mat *smat,PetscErrorCode *ierr) 693 { 694 Mat *lsmat; 695 PetscInt i; 696 697 *ierr = PetscMalloc1(*n+1,&lsmat); 698 for (i=0; i<=*n; i++) { 699 lsmat[i] = smat[i]; 700 } 701 *ierr = MatDestroySubMatrices(*n,&lsmat); 702 } 703 704 PETSC_EXTERN void PETSC_STDCALL matsetoptionsprefix_(Mat *mat,char* prefix PETSC_MIXED_LEN(len),PetscErrorCode *ierr PETSC_END_LEN(len)) 705 { 706 char *t; 707 708 FIXCHAR(prefix,len,t); 709 *ierr = MatSetOptionsPrefix(*mat,t);if (*ierr) return; 710 FREECHAR(prefix,t); 711 } 712 713 PETSC_EXTERN void PETSC_STDCALL matnullspaceremove_(MatNullSpace *sp,Vec *vec,PetscErrorCode *ierr) 714 { 715 CHKFORTRANNULLOBJECT(*sp) 716 *ierr = MatNullSpaceRemove(*sp,*vec); 717 } 718 719 PETSC_EXTERN void PETSC_STDCALL matgetinfo_(Mat *mat,MatInfoType *flag,MatInfo *info, int *ierr) 720 { 721 *ierr = MatGetInfo(*mat,*flag,info); 722 } 723 724 PETSC_EXTERN void PETSC_STDCALL matlufactor_(Mat *mat,IS *row,IS *col,const MatFactorInfo *info, int *ierr) 725 { 726 *ierr = MatLUFactor(*mat,*row,*col,info); 727 } 728 729 PETSC_EXTERN void PETSC_STDCALL matilufactor_(Mat *mat,IS *row,IS *col,const MatFactorInfo *info, int *ierr) 730 { 731 *ierr = MatILUFactor(*mat,*row,*col,info); 732 } 733 734 PETSC_EXTERN void PETSC_STDCALL matlufactorsymbolic_(Mat *fact,Mat *mat,IS *row,IS *col,const MatFactorInfo *info, int *ierr) 735 { 736 *ierr = MatLUFactorSymbolic(*fact,*mat,*row,*col,info); 737 } 738 739 PETSC_EXTERN void PETSC_STDCALL matlufactornumeric_(Mat *fact,Mat *mat,const MatFactorInfo *info, int *ierr) 740 { 741 *ierr = MatLUFactorNumeric(*fact,*mat,info); 742 } 743 744 PETSC_EXTERN void PETSC_STDCALL matcholeskyfactor_(Mat *mat,IS *perm,const MatFactorInfo *info, int *ierr) 745 { 746 *ierr = MatCholeskyFactor(*mat,*perm,info); 747 } 748 749 PETSC_EXTERN void PETSC_STDCALL matcholeskyfactorsymbolic_(Mat *fact,Mat *mat,IS *perm,const MatFactorInfo *info, int *ierr) 750 { 751 *ierr = MatCholeskyFactorSymbolic(*fact,*mat,*perm,info); 752 } 753 754 PETSC_EXTERN void PETSC_STDCALL matcholeskyfactornumeric_(Mat *fact,Mat *mat,const MatFactorInfo *info, int *ierr) 755 { 756 *ierr = MatCholeskyFactorNumeric(*fact,*mat,info); 757 } 758 759 PETSC_EXTERN void PETSC_STDCALL matilufactorsymbolic_(Mat *fact,Mat *mat,IS *row,IS *col,const MatFactorInfo *info, int *ierr) 760 { 761 *ierr = MatILUFactorSymbolic(*fact,*mat,*row,*col,info); 762 } 763 764 PETSC_EXTERN void PETSC_STDCALL maticcfactorsymbolic_(Mat *fact,Mat *mat,IS *perm,const MatFactorInfo *info, int *ierr) 765 { 766 *ierr = MatICCFactorSymbolic(*fact,*mat,*perm,info); 767 } 768 769 PETSC_EXTERN void PETSC_STDCALL maticcfactor_(Mat *mat,IS *row,const MatFactorInfo *info, int *ierr) 770 { 771 *ierr = MatICCFactor(*mat,*row,info); 772 } 773 774 PETSC_EXTERN void PETSC_STDCALL matfactorinfoinitialize_(MatFactorInfo *info, int *ierr) 775 { 776 *ierr = MatFactorInfoInitialize(info); 777 } 778 PETSC_EXTERN void PETSC_STDCALL matzerorowslocal_(Mat *mat,PetscInt *numRows, PetscInt rows[],PetscScalar *diag,Vec *x,Vec *b, int *ierr) 779 { 780 *ierr = MatZeroRowsLocal(*mat,*numRows,rows,*diag,*x,*b); 781 } 782 PETSC_EXTERN void PETSC_STDCALL matzerorowslocal0_(Mat *mat,PetscInt *numRows, PetscInt rows[],PetscScalar *diag,Vec *x,Vec *b, int *ierr) 783 { 784 matzerorowslocal_(mat,numRows,rows,diag,x,b,ierr); 785 } 786 PETSC_EXTERN void PETSC_STDCALL matzerorowslocal1_(Mat *mat,PetscInt *numRows, PetscInt rows[],PetscScalar *diag,Vec *x,Vec *b, int *ierr) 787 { 788 matzerorowslocal_(mat,numRows,rows,diag,x,b,ierr); 789 } 790