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