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 matgetownershipis_ MATGETOWNERSHIPIS 95 #define matgetownershiprangecolumn_ MATGETOWNERSHIPRANGECOLUMN 96 #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE) 97 #define matsetvalues_ matsetvalues 98 #define matsetvaluesnnnn_ matsetvaluesnnnn 99 #define matsetvalues0_ matsetvalues0 100 #define matsetvaluesnn1_ matsetvaluesnn1 101 #define matsetvalues11_ matsetvalues11 102 #define matsetvaluesn1_ matsetvaluesn1 103 #define matsetvalues1n_ matsetvalues1n 104 #define matsetvalueslocal_ matsetvalueslocal 105 #define matsetvalueslocal0_ matsetvalueslocal0 106 #define matsetvalueslocal11_ matsetvalueslocal11 107 #define matsetvalueslocal11nn_ matsetvalueslocal11nn 108 #define matsetvalueslocal111_ matsetvalueslocal111 109 #define matsetvalueslocal1n_ matsetvalueslocal1n 110 #define matsetvalueslocaln1_ matsetvalueslocaln1 111 #define matsetvaluesblocked_ matsetvaluesblocked 112 #define matsetvaluesblocked0_ matsetvaluesblocked0 113 #define matsetvaluesblocked2_ matsetvaluesblocked2 114 #define matsetvaluesblocked11_ matsetvaluesblocked11 115 #define matsetvaluesblocked111_ matsetvaluesblocked111 116 #define matsetvaluesblocked1n_ matsetvaluesblocked1n 117 #define matsetvaluesblockedn1_ matsetvaluesblockedn1 118 #define matsetvaluesblockedlocal_ matsetvaluesblockedlocal 119 #define matsetvaluesblockedlocal0_ matsetvaluesblockedlocal0 120 #define matsetvaluesblockedlocal11_ matsetvaluesblockedlocal11 121 #define matsetvaluesblockedlocal111_ matsetvaluesblockedlocal111 122 #define matsetvaluesblockedlocal1n_ matsetvaluesblockedlocal1n 123 #define matsetvaluesblockedlocaln1_ matsetvaluesblockedlocaln1 124 #define matgetrowmin_ matgetrowmin 125 #define matgetrowminabs_ matgetrowminabs 126 #define matgetrowmax_ matgetrowmax 127 #define matgetrowmaxabs_ matgetrowmaxabs 128 #define matdestroymatrices_ matdestroymatrices 129 #define matdestroysubmatrices_ matdestroysubmatrices 130 #define matgetfactor_ matgetfactor 131 #define matfactorgetsolverpackage_ matfactorgetsolverpackage 132 #define matcreatevecs_ matcreatevecs 133 #define matgetrowij_ matgetrowij 134 #define matrestorerowij_ matrestorerowij 135 #define matgetrow_ matgetrow 136 #define matrestorerow_ matrestorerow 137 #define matview_ matview 138 #define matload_ matload 139 #define matseqaijgetarray_ matseqaijgetarray 140 #define matseqaijrestorearray_ matseqaijrestorearray 141 #define matdensegetarray_ matdensegetarray 142 #define matdensegetarrayread_ matdensegetarrayread 143 #define matdenserestorearray_ matdenserestorearray 144 #define matdenserestorearrayread_ matdenserestorearrayread 145 #define matconvert_ matconvert 146 #define matcreatesubmatrices_ matcreatesubmatrices 147 #define matzerorowscolumns_ matzerorowscolumns 148 #define matzerorowscolumnsis_ matzerorowscolumnsis 149 #define matzerorowsstencil_ matzerorowsstencil 150 #define matzerorowscolumnsstencil_ matzerorowscolumnsstencil 151 #define matzerorows_ matzerorows 152 #define matzerorowsis_ matzerorowsis 153 #define matzerorowslocal_ matzerorowslocal 154 #define matzerorowslocalis_ matzerorowslocalis 155 #define matzerorowscolumnslocal_ matzerorowscolumnslocal 156 #define matzerorowscolumnslocalis_ matzerorowscolumnslocalis 157 #define matsetoptionsprefix_ matsetoptionsprefix 158 #define matnullspaceremove_ matnullspaceremove 159 #define matgetinfo_ matgetinfo 160 #define matlufactor_ matlufactor 161 #define matilufactor_ matilufactor 162 #define matlufactorsymbolic_ matlufactorsymbolic 163 #define matlufactornumeric_ matlufactornumeric 164 #define matcholeskyfactor_ matcholeskyfactor 165 #define matcholeskyfactorsymbolic_ matcholeskyfactorsymbolic 166 #define matcholeskyfactornumeric_ matcholeskyfactornumeric 167 #define matilufactorsymbolic_ matilufactorsymbolic 168 #define maticcfactorsymbolic_ maticcfactorsymbolic 169 #define maticcfactor_ maticcfactor 170 #define matfactorinfoinitialize_ matfactorinfoinitialize 171 #define matnullspacesetfunction_ matnullspacesetfunction 172 #define matfindnonzerorows_ matfindnonzerorows 173 #define matgetsize_ matgetsize 174 #define matgetsize00_ matgetsize00 175 #define matgetsize10_ matgetsize10 176 #define matgetsize01_ matgetsize01 177 #define matgetlocalsize_ matgetlocalsize 178 #define matgetlocalsize00_ matgetlocalsize00 179 #define matgetlocalsize10_ matgetlocalsize10 180 #define matgetlocalsize01_ matgetlocalsize01 181 #define matsetnullspace_ matsetnullspace 182 #define matgetownershiprange_ matgetownershiprange 183 #define matgetownershipis_ matgetownershipis 184 #define matgetownershiprangecolumn_ matgetownershiprangecolumn 185 #endif 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);if (*ierr) return; 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);if (*ierr) return; 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 matsetoptionsprefix_(Mat *mat,char* prefix PETSC_MIXED_LEN(len),PetscErrorCode *ierr PETSC_END_LEN(len)) 646 { 647 char *t; 648 649 FIXCHAR(prefix,len,t); 650 *ierr = MatSetOptionsPrefix(*mat,t);if (*ierr) return; 651 FREECHAR(prefix,t); 652 } 653 654 PETSC_EXTERN void PETSC_STDCALL matnullspaceremove_(MatNullSpace *sp,Vec *vec,PetscErrorCode *ierr) 655 { 656 CHKFORTRANNULLOBJECT(*sp) 657 *ierr = MatNullSpaceRemove(*sp,*vec); 658 } 659 660 PETSC_EXTERN void PETSC_STDCALL matgetinfo_(Mat *mat,MatInfoType *flag,MatInfo *info, int *ierr) 661 { 662 *ierr = MatGetInfo(*mat,*flag,info); 663 } 664 665 PETSC_EXTERN void PETSC_STDCALL matlufactor_(Mat *mat,IS *row,IS *col,const MatFactorInfo *info, int *ierr) 666 { 667 *ierr = MatLUFactor(*mat,*row,*col,info); 668 } 669 670 PETSC_EXTERN void PETSC_STDCALL matilufactor_(Mat *mat,IS *row,IS *col,const MatFactorInfo *info, int *ierr) 671 { 672 *ierr = MatILUFactor(*mat,*row,*col,info); 673 } 674 675 PETSC_EXTERN void PETSC_STDCALL matlufactorsymbolic_(Mat *fact,Mat *mat,IS *row,IS *col,const MatFactorInfo *info, int *ierr) 676 { 677 *ierr = MatLUFactorSymbolic(*fact,*mat,*row,*col,info); 678 } 679 680 PETSC_EXTERN void PETSC_STDCALL matlufactornumeric_(Mat *fact,Mat *mat,const MatFactorInfo *info, int *ierr) 681 { 682 *ierr = MatLUFactorNumeric(*fact,*mat,info); 683 } 684 685 PETSC_EXTERN void PETSC_STDCALL matcholeskyfactor_(Mat *mat,IS *perm,const MatFactorInfo *info, int *ierr) 686 { 687 *ierr = MatCholeskyFactor(*mat,*perm,info); 688 } 689 690 PETSC_EXTERN void PETSC_STDCALL matcholeskyfactorsymbolic_(Mat *fact,Mat *mat,IS *perm,const MatFactorInfo *info, int *ierr) 691 { 692 *ierr = MatCholeskyFactorSymbolic(*fact,*mat,*perm,info); 693 } 694 695 PETSC_EXTERN void PETSC_STDCALL matcholeskyfactornumeric_(Mat *fact,Mat *mat,const MatFactorInfo *info, int *ierr) 696 { 697 *ierr = MatCholeskyFactorNumeric(*fact,*mat,info); 698 } 699 700 PETSC_EXTERN void PETSC_STDCALL matilufactorsymbolic_(Mat *fact,Mat *mat,IS *row,IS *col,const MatFactorInfo *info, int *ierr) 701 { 702 *ierr = MatILUFactorSymbolic(*fact,*mat,*row,*col,info); 703 } 704 705 PETSC_EXTERN void PETSC_STDCALL maticcfactorsymbolic_(Mat *fact,Mat *mat,IS *perm,const MatFactorInfo *info, int *ierr) 706 { 707 *ierr = MatICCFactorSymbolic(*fact,*mat,*perm,info); 708 } 709 710 PETSC_EXTERN void PETSC_STDCALL maticcfactor_(Mat *mat,IS *row,const MatFactorInfo *info, int *ierr) 711 { 712 *ierr = MatICCFactor(*mat,*row,info); 713 } 714 715 PETSC_EXTERN void PETSC_STDCALL matfactorinfoinitialize_(MatFactorInfo *info, int *ierr) 716 { 717 *ierr = MatFactorInfoInitialize(info); 718 } 719 PETSC_EXTERN void PETSC_STDCALL matzerorowslocal_(Mat *mat,PetscInt *numRows, PetscInt rows[],PetscScalar *diag,Vec *x,Vec *b, int *ierr) 720 { 721 *ierr = MatZeroRowsLocal(*mat,*numRows,rows,*diag,*x,*b); 722 } 723 PETSC_EXTERN void PETSC_STDCALL matzerorowslocal0_(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 PETSC_EXTERN void PETSC_STDCALL matzerorowslocal1_(Mat *mat,PetscInt *numRows, PetscInt rows[],PetscScalar *diag,Vec *x,Vec *b, int *ierr) 728 { 729 matzerorowslocal_(mat,numRows,rows,diag,x,b,ierr); 730 } 731