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