1 #include <petsc/private/fortranimpl.h> 2 #include <petscmat.h> 3 #include <petscviewer.h> 4 5 #if defined(PETSC_HAVE_FORTRAN_CAPS) 6 #define matgetrowmin_ MATGETROWMIN 7 #define matgetrowminabs_ MATGETROWMINABS 8 #define matgetrowmax_ MATGETROWMAX 9 #define matgetrowmaxabs_ MATGETROWMAXABS 10 #define matdestroymatrices_ MATDESTROYMATRICES 11 #define matgetfactor_ MATGETFACTOR 12 #define matfactorgetsolverpackage_ MATFACTORGETSOLVERPACKAGE 13 #define matgetrowij_ MATGETROWIJ 14 #define matrestorerowij_ MATRESTOREROWIJ 15 #define matgetrow_ MATGETROW 16 #define matrestorerow_ MATRESTOREROW 17 #define matload_ MATLOAD 18 #define matview_ MATVIEW 19 #define matseqaijgetarray_ MATSEQAIJGETARRAY 20 #define matseqaijrestorearray_ MATSEQAIJRESTOREARRAY 21 #define matdensegetarray_ MATDENSEGETARRAY 22 #define matdenserestorearray_ MATDENSERESTOREARRAY 23 #define matconvert_ MATCONVERT 24 #define matgetsubmatrices_ MATGETSUBMATRICES 25 #define matzerorowscolumns_ MATZEROROWSCOLUMNS 26 #define matzerorowscolumnsis_ MATZEROROWSCOLUMNSIS 27 #define matzerorowsstencil_ MATZEROROWSSTENCIL 28 #define matzerorowscolumnsstencil_ MATZEROROWSCOLUMNSSTENCIL 29 #define matzerorows_ MATZEROROWS 30 #define matzerorowsis_ MATZEROROWSIS 31 #define matzerorowslocal_ MATZEROROWSLOCAL 32 #define matzerorowslocalis_ MATZEROROWSLOCALIS 33 #define matzerorowscolumnslocal_ MATZEROROWSCOLUMNSLOCAL 34 #define matzerorowscolumnslocalis_ MATZEROROWSCOLUMNSLOCALIS 35 #define matsetoptionsprefix_ MATSETOPTIONSPREFIX 36 #define matcreatevecs_ MATCREATEVECS 37 #define matnullspaceremove_ MATNULLSPACEREMOVE 38 #define matgetinfo_ MATGETINFO 39 #define matlufactor_ MATLUFACTOR 40 #define matilufactor_ MATILUFACTOR 41 #define matlufactorsymbolic_ MATLUFACTORSYMBOLIC 42 #define matlufactornumeric_ MATLUFACTORNUMERIC 43 #define matcholeskyfactor_ MATCHOLESKYFACTOR 44 #define matcholeskyfactorsymbolic_ MATCHOLESKYFACTORSYMBOLIC 45 #define matcholeskyfactornumeric_ MATCHOLESKYFACTORNUMERIC 46 #define matilufactorsymbolic_ MATILUFACTORSYMBOLIC 47 #define maticcfactorsymbolic_ MATICCFACTORSYMBOLIC 48 #define maticcfactor_ MATICCFACTOR 49 #define matfactorinfoinitialize_ MATFACTORINFOINITIALIZE 50 #define matnullspacesetfunction_ MATNULLSPACESETFUNCTION 51 #define matfindnonzerorows_ MATFINDNONZEROROWS 52 #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE) 53 #define matgetrowmin_ matgetrowmin 54 #define matgetrowminabs_ matgetrowminabs 55 #define matgetrowmax_ matgetrowmax 56 #define matgetrowmaxabs_ matgetrowmaxabs 57 #define matdestroymatrices_ matdestroymatrices 58 #define matgetfactor_ matgetfactor 59 #define matfactorgetsolverpackage_ matfactorgetsolverpackage 60 #define matcreatevecs_ matcreatevecs 61 #define matgetrowij_ matgetrowij 62 #define matrestorerowij_ matrestorerowij 63 #define matgetrow_ matgetrow 64 #define matrestorerow_ matrestorerow 65 #define matview_ matview 66 #define matload_ matload 67 #define matseqaijgetarray_ matseqaijgetarray 68 #define matseqaijrestorearray_ matseqaijrestorearray 69 #define matdensegetarray_ matdensegetarray 70 #define matdenserestorearray_ matdenserestorearray 71 #define matconvert_ matconvert 72 #define matgetsubmatrices_ matgetsubmatrices 73 #define matzerorowscolumns_ matzerorowscolumns 74 #define matzerorowscolumnsis_ matzerorowscolumnsis 75 #define matzerorowsstencil_ matzerorowsstencil 76 #define matzerorowscolumnsstencil_ matzerorowscolumnsstencil 77 #define matzerorows_ matzerorows 78 #define matzerorowsis_ matzerorowsis 79 #define matzerorowslocal_ matzerorowslocal 80 #define matzerorowslocalis_ matzerorowslocalis 81 #define matzerorowscolumnslocal_ matzerorowscolumnslocal 82 #define matzerorowscolumnslocalis_ matzerorowscolumnslocalis 83 #define matsetoptionsprefix_ matsetoptionsprefix 84 #define matnullspaceremove_ matnullspaceremove 85 #define matgetinfo_ matgetinfo 86 #define matlufactor_ matlufactor 87 #define matilufactor_ matilufactor 88 #define matlufactorsymbolic_ matlufactorsymbolic 89 #define matlufactornumeric_ matlufactornumeric 90 #define matcholeskyfactor_ matcholeskyfactor 91 #define matcholeskyfactorsymbolic_ matcholeskyfactorsymbolic 92 #define matcholeskyfactornumeric_ matcholeskyfactornumeric 93 #define matilufactorsymbolic_ matilufactorsymbolic 94 #define maticcfactorsymbolic_ maticcfactorsymbolic 95 #define maticcfactor_ maticcfactor 96 #define matfactorinfoinitialize_ matfactorinfoinitialize 97 #define matnullspacesetfunction_ matnullspacesetfunction 98 #define matfindnonzerorows_ matfindnonzerorows 99 #endif 100 101 PETSC_EXTERN void PETSC_STDCALL matgetrowmin_(Mat *mat,Vec *v,PetscInt idx[], int *ierr ) 102 { 103 CHKFORTRANNULLINTEGER(idx); 104 *ierr = MatGetRowMin(*mat,*v,idx); 105 } 106 PETSC_EXTERN void PETSC_STDCALL matgetrowminabs_(Mat *mat,Vec *v,PetscInt idx[], int *ierr ) 107 { 108 CHKFORTRANNULLINTEGER(idx); 109 *ierr = MatGetRowMinAbs(*mat,*v,idx); 110 } 111 112 PETSC_EXTERN void PETSC_STDCALL matgetrowmax_(Mat *mat,Vec *v,PetscInt idx[], int *ierr ) 113 { 114 CHKFORTRANNULLINTEGER(idx); 115 *ierr = MatGetRowMax(*mat,*v,idx); 116 } 117 118 PETSC_EXTERN void PETSC_STDCALL matgetrowmaxabs_(Mat *mat,Vec *v,PetscInt idx[], int *ierr ) 119 { 120 CHKFORTRANNULLINTEGER(idx); 121 *ierr = MatGetRowMaxAbs(*mat,*v,idx); 122 } 123 124 static PetscErrorCode ournullfunction(MatNullSpace sp,Vec x,void *ctx) 125 { 126 PetscErrorCode ierr = 0; 127 (*(void (PETSC_STDCALL *)(MatNullSpace*,Vec*,void*,PetscErrorCode*))(((PetscObject)sp)->fortran_func_pointers[0]))(&sp,&x,ctx,&ierr);CHKERRQ(ierr); 128 return 0; 129 } 130 131 PETSC_EXTERN void PETSC_STDCALL matnullspacesetfunction_(MatNullSpace *sp, PetscErrorCode (*rem)(MatNullSpace,Vec,void*),void *ctx,PetscErrorCode *ierr) 132 { 133 PetscObjectAllocateFortranPointers(*sp,1); 134 ((PetscObject)*sp)->fortran_func_pointers[0] = (PetscVoidFunction)rem; 135 136 *ierr = MatNullSpaceSetFunction(*sp,ournullfunction,ctx); 137 } 138 139 PETSC_EXTERN void PETSC_STDCALL matcreatevecs_(Mat *mat,Vec *right,Vec *left, int *ierr) 140 { 141 CHKFORTRANNULLOBJECT(right); 142 CHKFORTRANNULLOBJECT(left); 143 *ierr = MatCreateVecs(*mat,right,left); 144 } 145 146 PETSC_EXTERN void PETSC_STDCALL matgetrowij_(Mat *B,PetscInt *shift,PetscBool *sym,PetscBool *blockcompressed,PetscInt *n,PetscInt *ia,size_t *iia, 147 PetscInt *ja,size_t *jja,PetscBool *done,PetscErrorCode *ierr) 148 { 149 const PetscInt *IA,*JA; 150 *ierr = MatGetRowIJ(*B,*shift,*sym,*blockcompressed,n,&IA,&JA,done);if (*ierr) return; 151 *iia = PetscIntAddressToFortran(ia,(PetscInt*)IA); 152 *jja = PetscIntAddressToFortran(ja,(PetscInt*)JA); 153 } 154 155 PETSC_EXTERN void PETSC_STDCALL matrestorerowij_(Mat *B,PetscInt *shift,PetscBool *sym,PetscBool *blockcompressed, PetscInt *n,PetscInt *ia,size_t *iia, 156 PetscInt *ja,size_t *jja,PetscBool *done,PetscErrorCode *ierr) 157 { 158 const PetscInt *IA = PetscIntAddressFromFortran(ia,*iia),*JA = PetscIntAddressFromFortran(ja,*jja); 159 *ierr = MatRestoreRowIJ(*B,*shift,*sym,*blockcompressed,n,&IA,&JA,done); 160 } 161 162 /* 163 This is a poor way of storing the column and value pointers 164 generated by MatGetRow() to be returned with MatRestoreRow() 165 but there is not natural,good place else to store them. Hence 166 Fortran programmers can only have one outstanding MatGetRows() 167 at a time. 168 */ 169 static PetscErrorCode matgetrowactive = 0; 170 static const PetscInt *my_ocols = 0; 171 static const PetscScalar *my_ovals = 0; 172 173 PETSC_EXTERN void PETSC_STDCALL matgetrow_(Mat *mat,PetscInt *row,PetscInt *ncols,PetscInt *cols,PetscScalar *vals,PetscErrorCode *ierr) 174 { 175 const PetscInt **oocols = &my_ocols; 176 const PetscScalar **oovals = &my_ovals; 177 178 if (matgetrowactive) { 179 PetscError(PETSC_COMM_SELF,__LINE__,"MatGetRow_Fortran",__FILE__,PETSC_ERR_ARG_WRONGSTATE,PETSC_ERROR_INITIAL, 180 "Cannot have two MatGetRow() active simultaneously\n\ 181 call MatRestoreRow() before calling MatGetRow() a second time"); 182 *ierr = 1; 183 return; 184 } 185 186 CHKFORTRANNULLINTEGER(cols); if (!cols) oocols = NULL; 187 CHKFORTRANNULLSCALAR(vals); if (!vals) oovals = NULL; 188 189 *ierr = MatGetRow(*mat,*row,ncols,oocols,oovals); 190 if (*ierr) return; 191 192 if (oocols) { *ierr = PetscMemcpy(cols,my_ocols,(*ncols)*sizeof(PetscInt)); if (*ierr) return;} 193 if (oovals) { *ierr = PetscMemcpy(vals,my_ovals,(*ncols)*sizeof(PetscScalar)); if (*ierr) return;} 194 matgetrowactive = 1; 195 } 196 197 PETSC_EXTERN void PETSC_STDCALL matrestorerow_(Mat *mat,PetscInt *row,PetscInt *ncols,PetscInt *cols,PetscScalar *vals,PetscErrorCode *ierr) 198 { 199 const PetscInt **oocols = &my_ocols; 200 const PetscScalar **oovals = &my_ovals; 201 if (!matgetrowactive) { 202 PetscError(PETSC_COMM_SELF,__LINE__,"MatRestoreRow_Fortran",__FILE__,PETSC_ERR_ARG_WRONGSTATE,PETSC_ERROR_INITIAL, 203 "Must call MatGetRow() first"); 204 *ierr = 1; 205 return; 206 } 207 CHKFORTRANNULLINTEGER(cols); if (!cols) oocols = NULL; 208 CHKFORTRANNULLSCALAR(vals); if (!vals) oovals = NULL; 209 210 *ierr = MatRestoreRow(*mat,*row,ncols,oocols,oovals); 211 matgetrowactive = 0; 212 } 213 214 PETSC_EXTERN void PETSC_STDCALL matview_(Mat *mat,PetscViewer *vin,PetscErrorCode *ierr) 215 { 216 PetscViewer v; 217 PetscPatchDefaultViewers_Fortran(vin,v); 218 *ierr = MatView(*mat,v); 219 } 220 221 PETSC_EXTERN void PETSC_STDCALL matload_(Mat *mat,PetscViewer *vin,PetscErrorCode *ierr) 222 { 223 PetscViewer v; 224 PetscPatchDefaultViewers_Fortran(vin,v); 225 *ierr = MatLoad(*mat,v); 226 } 227 228 PETSC_EXTERN void PETSC_STDCALL matseqaijgetarray_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr) 229 { 230 PetscScalar *mm; 231 PetscInt m,n; 232 233 *ierr = MatSeqAIJGetArray(*mat,&mm); if (*ierr) return; 234 *ierr = MatGetSize(*mat,&m,&n); if (*ierr) return; 235 *ierr = PetscScalarAddressToFortran((PetscObject)*mat,1,fa,mm,m*n,ia); if (*ierr) return; 236 } 237 238 PETSC_EXTERN void PETSC_STDCALL matseqaijrestorearray_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr) 239 { 240 PetscScalar *lx; 241 PetscInt m,n; 242 243 *ierr = MatGetSize(*mat,&m,&n); if (*ierr) return; 244 *ierr = PetscScalarAddressFromFortran((PetscObject)*mat,fa,*ia,m*n,&lx);if (*ierr) return; 245 *ierr = MatSeqAIJRestoreArray(*mat,&lx);if (*ierr) return; 246 } 247 248 PETSC_EXTERN void PETSC_STDCALL matdensegetarray_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr) 249 { 250 PetscScalar *mm; 251 PetscInt m,n; 252 253 *ierr = MatDenseGetArray(*mat,&mm); if (*ierr) return; 254 *ierr = MatGetSize(*mat,&m,&n); if (*ierr) return; 255 *ierr = PetscScalarAddressToFortran((PetscObject)*mat,1,fa,mm,m*n,ia); if (*ierr) return; 256 } 257 258 PETSC_EXTERN void PETSC_STDCALL matdenserestorearray_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr) 259 { 260 PetscScalar *lx; 261 PetscInt m,n; 262 263 *ierr = MatGetSize(*mat,&m,&n); if (*ierr) return; 264 *ierr = PetscScalarAddressFromFortran((PetscObject)*mat,fa,*ia,m*n,&lx);if (*ierr) return; 265 *ierr = MatDenseRestoreArray(*mat,&lx);if (*ierr) return; 266 } 267 268 PETSC_EXTERN void PETSC_STDCALL matfactorgetsolverpackage_(Mat *mat,CHAR name PETSC_MIXED_LEN(len),PetscErrorCode *ierr PETSC_END_LEN(len)) 269 { 270 const char *tname; 271 272 *ierr = MatFactorGetSolverPackage(*mat,&tname);if (*ierr) return; 273 if (name != PETSC_NULL_CHARACTER_Fortran) { 274 *ierr = PetscStrncpy(name,tname,len);if (*ierr) return; 275 } 276 FIXRETURNCHAR(PETSC_TRUE,name,len); 277 } 278 279 PETSC_EXTERN void PETSC_STDCALL matgetfactor_(Mat *mat,CHAR outtype PETSC_MIXED_LEN(len),MatFactorType *ftype,Mat *M,PetscErrorCode *ierr PETSC_END_LEN(len)) 280 { 281 char *t; 282 FIXCHAR(outtype,len,t); 283 *ierr = MatGetFactor(*mat,t,*ftype,M); 284 FREECHAR(outtype,t); 285 } 286 287 PETSC_EXTERN void PETSC_STDCALL matconvert_(Mat *mat,CHAR outtype PETSC_MIXED_LEN(len),MatReuse *reuse,Mat *M,PetscErrorCode *ierr PETSC_END_LEN(len)) 288 { 289 char *t; 290 FIXCHAR(outtype,len,t); 291 *ierr = MatConvert(*mat,t,*reuse,M); 292 FREECHAR(outtype,t); 293 } 294 295 /* 296 MatGetSubmatrices() is slightly different from C since the 297 Fortran provides the array to hold the submatrix objects,while in C that 298 array is allocated by the MatGetSubmatrices() 299 */ 300 PETSC_EXTERN void PETSC_STDCALL matgetsubmatrices_(Mat *mat,PetscInt *n,IS *isrow,IS *iscol,MatReuse *scall,Mat *smat,PetscErrorCode *ierr) 301 { 302 Mat *lsmat; 303 PetscInt i; 304 305 if (*scall == MAT_INITIAL_MATRIX) { 306 *ierr = MatGetSubMatrices(*mat,*n,isrow,iscol,*scall,&lsmat); 307 for (i=0; i<*n; i++) { 308 smat[i] = lsmat[i]; 309 } 310 *ierr = PetscFree(lsmat); 311 } else { 312 *ierr = MatGetSubMatrices(*mat,*n,isrow,iscol,*scall,&smat); 313 } 314 } 315 316 /* 317 MatDestroyMatrices() is slightly different from C since the 318 Fortran provides the array to hold the submatrix objects,while in C that 319 array is allocated by the MatGetSubmatrices() 320 */ 321 PETSC_EXTERN void PETSC_STDCALL matdestroymatrices_(Mat *mat,PetscInt *n,Mat *smat,PetscErrorCode *ierr) 322 { 323 PetscInt i; 324 325 for (i=0; i<*n; i++) { 326 *ierr = MatDestroy(&smat[i]);if (*ierr) return; 327 } 328 } 329 330 PETSC_EXTERN void PETSC_STDCALL matzerorowscolumns_(Mat *mat,PetscInt *numRows,PetscInt *rows,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr) 331 { 332 CHKFORTRANNULLOBJECTDEREFERENCE(x); 333 CHKFORTRANNULLOBJECTDEREFERENCE(b); 334 *ierr = MatZeroRowsColumns(*mat,*numRows,rows,*diag,*x,*b); 335 } 336 337 PETSC_EXTERN void PETSC_STDCALL matzerorowscolumnsis_(Mat *mat,IS *is,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr) 338 { 339 CHKFORTRANNULLOBJECTDEREFERENCE(x); 340 CHKFORTRANNULLOBJECTDEREFERENCE(b); 341 *ierr = MatZeroRowsColumnsIS(*mat,*is,*diag,*x,*b); 342 } 343 344 PETSC_EXTERN void PETSC_STDCALL matzerorowsstencil_(Mat *mat,PetscInt *numRows,MatStencil *rows,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr) 345 { 346 CHKFORTRANNULLOBJECTDEREFERENCE(x); 347 CHKFORTRANNULLOBJECTDEREFERENCE(b); 348 *ierr = MatZeroRowsStencil(*mat,*numRows,rows,*diag,*x,*b); 349 } 350 351 PETSC_EXTERN void PETSC_STDCALL matzerorowscolumnsstencil_(Mat *mat,PetscInt *numRows,MatStencil *rows,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr) 352 { 353 CHKFORTRANNULLOBJECTDEREFERENCE(x); 354 CHKFORTRANNULLOBJECTDEREFERENCE(b); 355 *ierr = MatZeroRowsColumnsStencil(*mat,*numRows,rows,*diag,*x,*b); 356 } 357 358 PETSC_EXTERN void PETSC_STDCALL matzerorows_(Mat *mat,PetscInt *numRows,PetscInt *rows,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr) 359 { 360 CHKFORTRANNULLOBJECTDEREFERENCE(x); 361 CHKFORTRANNULLOBJECTDEREFERENCE(b); 362 *ierr = MatZeroRows(*mat,*numRows,rows,*diag,*x,*b); 363 } 364 365 PETSC_EXTERN void PETSC_STDCALL matzerorowsis_(Mat *mat,IS *is,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr) 366 { 367 CHKFORTRANNULLOBJECTDEREFERENCE(x); 368 CHKFORTRANNULLOBJECTDEREFERENCE(b); 369 *ierr = MatZeroRowsIS(*mat,*is,*diag,*x,*b); 370 } 371 372 PETSC_EXTERN void PETSC_STDCALL matzerorowslocal_(Mat *mat,PetscInt *numRows,PetscInt *rows,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr) 373 { 374 CHKFORTRANNULLOBJECTDEREFERENCE(x); 375 CHKFORTRANNULLOBJECTDEREFERENCE(b); 376 *ierr = MatZeroRowsLocal(*mat,*numRows,rows,*diag,*x,*b); 377 } 378 379 PETSC_EXTERN void PETSC_STDCALL matzerorowslocalis_(Mat *mat,IS *is,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr) 380 { 381 CHKFORTRANNULLOBJECTDEREFERENCE(x); 382 CHKFORTRANNULLOBJECTDEREFERENCE(b); 383 *ierr = MatZeroRowsLocalIS(*mat,*is,*diag,*x,*b); 384 } 385 386 PETSC_EXTERN void PETSC_STDCALL matzerorowscolumnslocal_(Mat *mat,PetscInt *numRows,PetscInt *rows,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr) 387 { 388 CHKFORTRANNULLOBJECTDEREFERENCE(x); 389 CHKFORTRANNULLOBJECTDEREFERENCE(b); 390 *ierr = MatZeroRowsColumnsLocal(*mat,*numRows,rows,*diag,*x,*b); 391 } 392 393 PETSC_EXTERN void PETSC_STDCALL matzerorowscolumnslocalis_(Mat *mat,IS *is,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr) 394 { 395 CHKFORTRANNULLOBJECTDEREFERENCE(x); 396 CHKFORTRANNULLOBJECTDEREFERENCE(b); 397 *ierr = MatZeroRowsColumnsLocalIS(*mat,*is,*diag,*x,*b); 398 } 399 400 PETSC_EXTERN void PETSC_STDCALL matsetoptionsprefix_(Mat *mat,CHAR prefix PETSC_MIXED_LEN(len),PetscErrorCode *ierr PETSC_END_LEN(len)) 401 { 402 char *t; 403 404 FIXCHAR(prefix,len,t); 405 *ierr = MatSetOptionsPrefix(*mat,t); 406 FREECHAR(prefix,t); 407 } 408 409 PETSC_EXTERN void PETSC_STDCALL matnullspaceremove_(MatNullSpace *sp,Vec *vec,PetscErrorCode *ierr) 410 { 411 *ierr = MatNullSpaceRemove(*sp,*vec); 412 } 413 414 PETSC_EXTERN void PETSC_STDCALL matgetinfo_(Mat *mat,MatInfoType *flag,MatInfo *info, int *__ierr) 415 { 416 *__ierr = MatGetInfo(*mat,*flag,info); 417 } 418 419 PETSC_EXTERN void PETSC_STDCALL matlufactor_(Mat *mat,IS *row,IS *col, const MatFactorInfo *info, int *__ierr) 420 { 421 *__ierr = MatLUFactor(*mat,*row,*col,info); 422 } 423 424 PETSC_EXTERN void PETSC_STDCALL matilufactor_(Mat *mat,IS *row,IS *col, const MatFactorInfo *info, int *__ierr) 425 { 426 *__ierr = MatILUFactor(*mat,*row,*col,info); 427 } 428 429 PETSC_EXTERN void PETSC_STDCALL matlufactorsymbolic_(Mat *fact,Mat *mat,IS *row,IS *col, const MatFactorInfo *info, int *__ierr) 430 { 431 *__ierr = MatLUFactorSymbolic(*fact,*mat,*row,*col,info); 432 } 433 434 PETSC_EXTERN void PETSC_STDCALL matlufactornumeric_(Mat *fact,Mat *mat, const MatFactorInfo *info, int *__ierr) 435 { 436 *__ierr = MatLUFactorNumeric(*fact,*mat,info); 437 } 438 439 PETSC_EXTERN void PETSC_STDCALL matcholeskyfactor_(Mat *mat,IS *perm, const MatFactorInfo *info, int *__ierr) 440 { 441 *__ierr = MatCholeskyFactor(*mat,*perm,info); 442 } 443 444 PETSC_EXTERN void PETSC_STDCALL matcholeskyfactorsymbolic_(Mat *fact,Mat *mat,IS *perm, const MatFactorInfo *info, int *__ierr) 445 { 446 *__ierr = MatCholeskyFactorSymbolic(*fact,*mat,*perm,info); 447 } 448 449 PETSC_EXTERN void PETSC_STDCALL matcholeskyfactornumeric_(Mat *fact,Mat *mat, const MatFactorInfo *info, int *__ierr) 450 { 451 *__ierr = MatCholeskyFactorNumeric(*fact,*mat,info); 452 } 453 454 PETSC_EXTERN void PETSC_STDCALL matilufactorsymbolic_(Mat *fact,Mat *mat,IS *row,IS *col, const MatFactorInfo *info, int *__ierr) 455 { 456 *__ierr = MatILUFactorSymbolic(*fact,*mat,*row,*col,info); 457 } 458 459 PETSC_EXTERN void PETSC_STDCALL maticcfactorsymbolic_(Mat *fact,Mat *mat,IS *perm, const MatFactorInfo *info, int *__ierr) 460 { 461 *__ierr = MatICCFactorSymbolic(*fact,*mat,*perm,info); 462 } 463 464 PETSC_EXTERN void PETSC_STDCALL maticcfactor_(Mat *mat,IS *row, const MatFactorInfo *info, int *__ierr) 465 { 466 *__ierr = MatICCFactor(*mat,*row,info); 467 } 468 469 PETSC_EXTERN void PETSC_STDCALL matfactorinfoinitialize_(MatFactorInfo *info, int *__ierr) 470 { 471 *__ierr = MatFactorInfoInitialize(info); 472 } 473