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