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