1ce0a2cd1SBarry Smith #include "private/fortranimpl.h" 2f4e70085SSatish Balay #include "petscmat.h" 3f4e70085SSatish Balay 4f4e70085SSatish Balay #if defined(PETSC_HAVE_FORTRAN_CAPS) 57d6bfa3bSBarry Smith #define matdestroymatrices_ MATDESTROYMATRICES 65dffd610SBarry Smith #define matgetfactor_ MATGETFACTOR 735bd34faSBarry Smith #define matfactorgetsolverpackage_ MATFACTORGETSOLVERPACKAGE 8f4e70085SSatish Balay #define matgetrowij_ MATGETROWIJ 9f4e70085SSatish Balay #define matrestorerowij_ MATRESTOREROWIJ 10f4e70085SSatish Balay #define matgetrow_ MATGETROW 11f4e70085SSatish Balay #define matrestorerow_ MATRESTOREROW 12f7e310deSShri Abhyankar #define matload_ MATLOAD 13f4e70085SSatish Balay #define matview_ MATVIEW 14f4e70085SSatish Balay #define matgetarray_ MATGETARRAY 15f4e70085SSatish Balay #define matrestorearray_ MATRESTOREARRAY 16f4e70085SSatish Balay #define matconvert_ MATCONVERT 17f4e70085SSatish Balay #define matgetsubmatrices_ MATGETSUBMATRICES 18f4e70085SSatish Balay #define matzerorows_ MATZEROROWS 19f4e70085SSatish Balay #define matzerorowsis_ MATZEROROWSIS 20f4e70085SSatish Balay #define matzerorowslocal_ MATZEROROWSLOCAL 21f4e70085SSatish Balay #define matzerorowslocalis_ MATZEROROWSLOCALIS 221eea217eSSatish Balay #define matsetoptionsprefix_ MATSETOPTIONSPREFIX 237c54600cSBarry Smith #define matgetvecs_ MATGETVECS 245ba43861SSatish Balay #define matnullspaceremove_ MATNULLSPACEREMOV 255ba43861SSatish Balay #define matgetinfo_ MATGETINFO 2622688b47SSatish Balay #define matlufactor_ MATLUFACTOR 2722688b47SSatish Balay #define matilufactor_ MATILUFACTOR 2822688b47SSatish Balay #define matlufactorsymbolic_ MATLUFACTORSYMBOLIC 2922688b47SSatish Balay #define matlufactornumeric_ MATLUFACTORNUMERIC 3022688b47SSatish Balay #define matcholeskyfactor_ MATCHOLESKYFACTOR 3122688b47SSatish Balay #define matcholeskyfactorsymbolic_ MATCHOLESKYFACTORSYMBOLIC 3222688b47SSatish Balay #define matcholeskyfactornumeric_ MATCHOLESKYFACTORNUMERIC 3322688b47SSatish Balay #define matilufactorsymbolic_ MATILUFACTORSYMBOLIC 3422688b47SSatish Balay #define maticcfactorsymbolic_ MATICCFACTORSYMBOLIC 3522688b47SSatish Balay #define maticcfactor_ MATICCFACTOR 3622688b47SSatish Balay #define matfactorinfoinitialize_ MATFACTORINFOINITIALIZE 37b22b330cSBarry Smith #define matnullspacesetfunction_ MATNULLSPACESETFUNCTION 38f4e70085SSatish Balay #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE) 397d6bfa3bSBarry Smith #define matdestroymatrices_ matdestroymatrices_ 405dffd610SBarry Smith #define matgetfactor_ matgetfactor 4135bd34faSBarry Smith #define matfactorgetsolverpackage_ matfactorgetsolverpackage 427c54600cSBarry Smith #define matgetvecs_ matgetvecs 43f4e70085SSatish Balay #define matgetrowij_ matgetrowij 44f4e70085SSatish Balay #define matrestorerowij_ matrestorerowij 45f4e70085SSatish Balay #define matgetrow_ matgetrow 46f4e70085SSatish Balay #define matrestorerow_ matrestorerow 47f4e70085SSatish Balay #define matview_ matview 48f7e310deSShri Abhyankar #define matload_ matload 49f4e70085SSatish Balay #define matgetarray_ matgetarray 50f4e70085SSatish Balay #define matrestorearray_ matrestorearray 51f4e70085SSatish Balay #define matconvert_ matconvert 52f4e70085SSatish Balay #define matgetsubmatrices_ matgetsubmatrices 53f4e70085SSatish Balay #define matzerorows_ matzerorows 54f4e70085SSatish Balay #define matzerorowsis_ matzerorowsis 55f4e70085SSatish Balay #define matzerorowslocal_ matzerorowslocal 56f4e70085SSatish Balay #define matzerorowslocalis_ matzerorowslocalis 571eea217eSSatish Balay #define matsetoptionsprefix_ matsetoptionsprefix 58812c3f48SMatthew Knepley #define matnullspaceremove_ matnullspaceremove 595ba43861SSatish Balay #define matgetinfo_ matgetinfo 6022688b47SSatish Balay #define matlufactor_ matlufactor 6122688b47SSatish Balay #define matilufactor_ matilufactor 6222688b47SSatish Balay #define matlufactorsymbolic_ matlufactorsymbolic 6322688b47SSatish Balay #define matlufactornumeric_ matlufactornumeric 6422688b47SSatish Balay #define matcholeskyfactor_ matcholeskyfactor 6522688b47SSatish Balay #define matcholeskyfactorsymbolic_ matcholeskyfactorsymbolic 6622688b47SSatish Balay #define matcholeskyfactornumeric_ matcholeskyfactornumeric 6722688b47SSatish Balay #define matilufactorsymbolic_ matilufactorsymbolic 6822688b47SSatish Balay #define maticcfactorsymbolic_ maticcfactorsymbolic 6922688b47SSatish Balay #define maticcfactor_ maticcfactor 7022688b47SSatish Balay #define matfactorinfoinitialize_ matfactorinfoinitialize 71b22b330cSBarry Smith #define matnullspacesetfunction_ matnullspacesetfunction 72f4e70085SSatish Balay #endif 73f4e70085SSatish Balay 74f4e70085SSatish Balay EXTERN_C_BEGIN 75f4e70085SSatish Balay 76b22b330cSBarry Smith static PetscErrorCode ournullfunction(MatNullSpace sp,Vec x,void *ctx) 77b22b330cSBarry Smith { 78b22b330cSBarry Smith PetscErrorCode ierr = 0; 79b22b330cSBarry Smith (*(void (PETSC_STDCALL *)(MatNullSpace*,Vec*,void*,PetscErrorCode*))(((PetscObject)sp)->fortran_func_pointers[0]))(&sp,&x,ctx,&ierr);CHKERRQ(ierr); 80b22b330cSBarry Smith return 0; 81b22b330cSBarry Smith } 82b22b330cSBarry Smith 83b22b330cSBarry Smith void PETSC_STDCALL matnullspacesetfunction_(MatNullSpace *sp, PetscErrorCode (*rem)(MatNullSpace,Vec,void*),void *ctx,PetscErrorCode *ierr) 84b22b330cSBarry Smith { 85b22b330cSBarry Smith PetscObjectAllocateFortranPointers(*sp,1); 86b22b330cSBarry Smith ((PetscObject)*sp)->fortran_func_pointers[0] = (PetscVoidFunction)rem; 87b22b330cSBarry Smith *ierr = MatNullSpaceSetFunction(*sp,ournullfunction,ctx); 88b22b330cSBarry Smith } 89b22b330cSBarry Smith 907c54600cSBarry Smith void PETSC_STDCALL matgetvecs_(Mat *mat,Vec *right,Vec *left, int *ierr ) 917c54600cSBarry Smith { 927c54600cSBarry Smith CHKFORTRANNULLOBJECT(right); 937c54600cSBarry Smith CHKFORTRANNULLOBJECT(left); 947c54600cSBarry Smith *ierr = MatGetVecs(*mat,right,left); 957c54600cSBarry Smith } 967c54600cSBarry Smith 97ace3abfcSBarry Smith void PETSC_STDCALL matgetrowij_(Mat *B,PetscInt *shift,PetscBool *sym,PetscBool *blockcompressed,PetscInt *n,PetscInt *ia,size_t *iia, 98ace3abfcSBarry Smith PetscInt *ja,size_t *jja,PetscBool *done,PetscErrorCode *ierr) 99f4e70085SSatish Balay { 100f4e70085SSatish Balay PetscInt *IA,*JA; 1018f7157efSSatish Balay *ierr = MatGetRowIJ(*B,*shift,*sym,*blockcompressed,n,&IA,&JA,done);if (*ierr) return; 102f4e70085SSatish Balay *iia = PetscIntAddressToFortran(ia,IA); 103f4e70085SSatish Balay *jja = PetscIntAddressToFortran(ja,JA); 104f4e70085SSatish Balay } 105f4e70085SSatish Balay 106ace3abfcSBarry Smith void PETSC_STDCALL matrestorerowij_(Mat *B,PetscInt *shift,PetscBool *sym,PetscBool *blockcompressed, PetscInt *n,PetscInt *ia,size_t *iia, 107ace3abfcSBarry Smith PetscInt *ja,size_t *jja,PetscBool *done,PetscErrorCode *ierr) 108f4e70085SSatish Balay { 109f4e70085SSatish Balay PetscInt *IA = PetscIntAddressFromFortran(ia,*iia),*JA = PetscIntAddressFromFortran(ja,*jja); 1108f7157efSSatish Balay *ierr = MatRestoreRowIJ(*B,*shift,*sym,*blockcompressed,n,&IA,&JA,done); 111f4e70085SSatish Balay } 112f4e70085SSatish Balay 113f4e70085SSatish Balay /* 114f4e70085SSatish Balay This is a poor way of storing the column and value pointers 115f4e70085SSatish Balay generated by MatGetRow() to be returned with MatRestoreRow() 116f4e70085SSatish Balay but there is not natural,good place else to store them. Hence 117f4e70085SSatish Balay Fortran programmers can only have one outstanding MatGetRows() 118f4e70085SSatish Balay at a time. 119f4e70085SSatish Balay */ 120f4e70085SSatish Balay static PetscErrorCode matgetrowactive = 0; 121f4e70085SSatish Balay static const PetscInt *my_ocols = 0; 122f4e70085SSatish Balay static const PetscScalar *my_ovals = 0; 123f4e70085SSatish Balay 124f4e70085SSatish Balay void PETSC_STDCALL matgetrow_(Mat *mat,PetscInt *row,PetscInt *ncols,PetscInt *cols,PetscScalar *vals,PetscErrorCode *ierr) 125f4e70085SSatish Balay { 126f4e70085SSatish Balay const PetscInt **oocols = &my_ocols; 127f4e70085SSatish Balay const PetscScalar **oovals = &my_ovals; 128f4e70085SSatish Balay 129f4e70085SSatish Balay if (matgetrowactive) { 130d736bfebSBarry Smith PetscError(PETSC_COMM_SELF,__LINE__,"MatGetRow_Fortran",__FILE__,__SDIR__,PETSC_ERR_ARG_WRONGSTATE,PETSC_ERROR_INITIAL, 131f4e70085SSatish Balay "Cannot have two MatGetRow() active simultaneously\n\ 132f4e70085SSatish Balay call MatRestoreRow() before calling MatGetRow() a second time"); 133f4e70085SSatish Balay *ierr = 1; 134f4e70085SSatish Balay return; 135f4e70085SSatish Balay } 136f4e70085SSatish Balay 137f4e70085SSatish Balay CHKFORTRANNULLINTEGER(cols); if (!cols) oocols = PETSC_NULL; 138f4e70085SSatish Balay CHKFORTRANNULLSCALAR(vals); if (!vals) oovals = PETSC_NULL; 139f4e70085SSatish Balay 140f4e70085SSatish Balay *ierr = MatGetRow(*mat,*row,ncols,oocols,oovals); 141f4e70085SSatish Balay if (*ierr) return; 142f4e70085SSatish Balay 143f4e70085SSatish Balay if (oocols) { *ierr = PetscMemcpy(cols,my_ocols,(*ncols)*sizeof(PetscInt)); if (*ierr) return;} 144f4e70085SSatish Balay if (oovals) { *ierr = PetscMemcpy(vals,my_ovals,(*ncols)*sizeof(PetscScalar)); if (*ierr) return; } 145f4e70085SSatish Balay matgetrowactive = 1; 146f4e70085SSatish Balay } 147f4e70085SSatish Balay 148f4e70085SSatish Balay void PETSC_STDCALL matrestorerow_(Mat *mat,PetscInt *row,PetscInt *ncols,PetscInt *cols,PetscScalar *vals,PetscErrorCode *ierr) 149f4e70085SSatish Balay { 150f4e70085SSatish Balay const PetscInt **oocols = &my_ocols; 151f4e70085SSatish Balay const PetscScalar **oovals = &my_ovals; 152f4e70085SSatish Balay if (!matgetrowactive) { 153d736bfebSBarry Smith PetscError(PETSC_COMM_SELF,__LINE__,"MatRestoreRow_Fortran",__FILE__,__SDIR__,PETSC_ERR_ARG_WRONGSTATE,PETSC_ERROR_INITIAL, 154f4e70085SSatish Balay "Must call MatGetRow() first"); 155f4e70085SSatish Balay *ierr = 1; 156f4e70085SSatish Balay return; 157f4e70085SSatish Balay } 158f4e70085SSatish Balay CHKFORTRANNULLINTEGER(cols); if (!cols) oocols = PETSC_NULL; 159f4e70085SSatish Balay CHKFORTRANNULLSCALAR(vals); if (!vals) oovals = PETSC_NULL; 160f4e70085SSatish Balay 161f4e70085SSatish Balay *ierr = MatRestoreRow(*mat,*row,ncols,oocols,oovals); 162f4e70085SSatish Balay matgetrowactive = 0; 163f4e70085SSatish Balay } 164f4e70085SSatish Balay 165f4e70085SSatish Balay void PETSC_STDCALL matview_(Mat *mat,PetscViewer *vin,PetscErrorCode *ierr) 166f4e70085SSatish Balay { 167f4e70085SSatish Balay PetscViewer v; 168f4e70085SSatish Balay PetscPatchDefaultViewers_Fortran(vin,v); 169f4e70085SSatish Balay *ierr = MatView(*mat,v); 170f4e70085SSatish Balay } 171f4e70085SSatish Balay 172112444f4SShri Abhyankar void PETSC_STDCALL matload_(Mat *mat,PetscViewer *vin,PetscErrorCode *ierr) 173f7e310deSShri Abhyankar { 174f7e310deSShri Abhyankar PetscViewer v; 175f7e310deSShri Abhyankar PetscPatchDefaultViewers_Fortran(vin,v); 176112444f4SShri Abhyankar *ierr = MatLoad(*mat,v); 177f7e310deSShri Abhyankar } 178f7e310deSShri Abhyankar 179f4e70085SSatish Balay void PETSC_STDCALL matgetarray_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr) 180f4e70085SSatish Balay { 181f4e70085SSatish Balay PetscScalar *mm; 182f4e70085SSatish Balay PetscInt m,n; 183f4e70085SSatish Balay 184f4e70085SSatish Balay *ierr = MatGetArray(*mat,&mm); if (*ierr) return; 185f4e70085SSatish Balay *ierr = MatGetSize(*mat,&m,&n); if (*ierr) return; 186f91d1997SBarry Smith *ierr = PetscScalarAddressToFortran((PetscObject)*mat,1,fa,mm,m*n,ia); if (*ierr) return; 187f4e70085SSatish Balay } 188f4e70085SSatish Balay 189f4e70085SSatish Balay void PETSC_STDCALL matrestorearray_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr) 190f4e70085SSatish Balay { 191f4e70085SSatish Balay PetscScalar *lx; 192f4e70085SSatish Balay PetscInt m,n; 193f4e70085SSatish Balay 194f4e70085SSatish Balay *ierr = MatGetSize(*mat,&m,&n); if (*ierr) return; 195f4e70085SSatish Balay *ierr = PetscScalarAddressFromFortran((PetscObject)*mat,fa,*ia,m*n,&lx);if (*ierr) return; 196f4e70085SSatish Balay *ierr = MatRestoreArray(*mat,&lx);if (*ierr) return; 197f4e70085SSatish Balay } 198f4e70085SSatish Balay 19935bd34faSBarry Smith void PETSC_STDCALL matfactorgetsolverpackage_(Mat *mat,CHAR name PETSC_MIXED_LEN(len),PetscErrorCode *ierr PETSC_END_LEN(len)) 20035bd34faSBarry Smith { 20135bd34faSBarry Smith const char *tname; 20235bd34faSBarry Smith 20335bd34faSBarry Smith *ierr = MatFactorGetSolverPackage(*mat,&tname);if (*ierr) return; 20435bd34faSBarry Smith if (name != PETSC_NULL_CHARACTER_Fortran) { 20535bd34faSBarry Smith *ierr = PetscStrncpy(name,tname,len);if (*ierr) return; 20635bd34faSBarry Smith } 20735bd34faSBarry Smith FIXRETURNCHAR(PETSC_TRUE,name,len); 20835bd34faSBarry Smith } 20935bd34faSBarry Smith 2109be81726SHong Zhang void PETSC_STDCALL matgetfactor_(Mat *mat,CHAR outtype PETSC_MIXED_LEN(len),MatFactorType *ftype,Mat *M,PetscErrorCode *ierr PETSC_END_LEN(len)) 2115dffd610SBarry Smith { 2125dffd610SBarry Smith char *t; 2135dffd610SBarry Smith FIXCHAR(outtype,len,t); 2149be81726SHong Zhang *ierr = MatGetFactor(*mat,t,*ftype,M); 2155dffd610SBarry Smith FREECHAR(outtype,t); 2165dffd610SBarry Smith } 2175dffd610SBarry Smith 218f4e70085SSatish Balay void PETSC_STDCALL matconvert_(Mat *mat,CHAR outtype PETSC_MIXED_LEN(len),MatReuse *reuse,Mat *M,PetscErrorCode *ierr PETSC_END_LEN(len)) 219f4e70085SSatish Balay { 220f4e70085SSatish Balay char *t; 221f4e70085SSatish Balay FIXCHAR(outtype,len,t); 222f4e70085SSatish Balay *ierr = MatConvert(*mat,t,*reuse,M); 223f4e70085SSatish Balay FREECHAR(outtype,t); 224f4e70085SSatish Balay } 225f4e70085SSatish Balay 226f4e70085SSatish Balay /* 227f4e70085SSatish Balay MatGetSubmatrices() is slightly different from C since the 228f4e70085SSatish Balay Fortran provides the array to hold the submatrix objects,while in C that 229f4e70085SSatish Balay array is allocated by the MatGetSubmatrices() 230f4e70085SSatish Balay */ 231f4e70085SSatish Balay void PETSC_STDCALL matgetsubmatrices_(Mat *mat,PetscInt *n,IS *isrow,IS *iscol,MatReuse *scall,Mat *smat,PetscErrorCode *ierr) 232f4e70085SSatish Balay { 233f4e70085SSatish Balay Mat *lsmat; 234f4e70085SSatish Balay PetscInt i; 235f4e70085SSatish Balay 236f4e70085SSatish Balay if (*scall == MAT_INITIAL_MATRIX) { 237f4e70085SSatish Balay *ierr = MatGetSubMatrices(*mat,*n,isrow,iscol,*scall,&lsmat); 238f4e70085SSatish Balay for (i=0; i<*n; i++) { 239f4e70085SSatish Balay smat[i] = lsmat[i]; 240f4e70085SSatish Balay } 241f4e70085SSatish Balay *ierr = PetscFree(lsmat); 242f4e70085SSatish Balay } else { 243f4e70085SSatish Balay *ierr = MatGetSubMatrices(*mat,*n,isrow,iscol,*scall,&smat); 244f4e70085SSatish Balay } 245f4e70085SSatish Balay } 246f4e70085SSatish Balay 2477d6bfa3bSBarry Smith /* 2487d6bfa3bSBarry Smith MatDestroyMatrices() is slightly different from C since the 2497d6bfa3bSBarry Smith Fortran provides the array to hold the submatrix objects,while in C that 2507d6bfa3bSBarry Smith array is allocated by the MatGetSubmatrices() 2517d6bfa3bSBarry Smith */ 2527d6bfa3bSBarry Smith void PETSC_STDCALL matdestroymatrices_(Mat *mat,PetscInt *n,Mat *smat,PetscErrorCode *ierr) 2537d6bfa3bSBarry Smith { 2547d6bfa3bSBarry Smith PetscInt i; 2557d6bfa3bSBarry Smith 2567d6bfa3bSBarry Smith for (i=0; i<*n; i++) { 2577d6bfa3bSBarry Smith *ierr = MatDestroy(smat[i]);if (*ierr) return; 2587d6bfa3bSBarry Smith } 2597d6bfa3bSBarry Smith } 2607d6bfa3bSBarry Smith 261*2b40b63fSBarry Smith void PETSC_STDCALL matzerorows_(Mat *mat,PetscInt *numRows,PetscInt *rows,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr) 262f4e70085SSatish Balay { 263*2b40b63fSBarry Smith CHKFORTRANNULLOBJECTDEREFERENCE(x); 264*2b40b63fSBarry Smith CHKFORTRANNULLOBJECTDEREFERENCE(b); 265*2b40b63fSBarry Smith *ierr = MatZeroRows(*mat,*numRows,rows,*diag,*x,*b); 266f4e70085SSatish Balay } 267f4e70085SSatish Balay 268*2b40b63fSBarry Smith void PETSC_STDCALL matzerorowsis_(Mat *mat,IS *is,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr) 269f4e70085SSatish Balay { 270*2b40b63fSBarry Smith CHKFORTRANNULLOBJECTDEREFERENCE(x); 271*2b40b63fSBarry Smith CHKFORTRANNULLOBJECTDEREFERENCE(b); 272*2b40b63fSBarry Smith *ierr = MatZeroRowsIS(*mat,*is,*diag,*x,*b); 273f4e70085SSatish Balay } 274f4e70085SSatish Balay 275*2b40b63fSBarry Smith void PETSC_STDCALL matzerorowslocal_(Mat *mat,PetscInt *numRows,PetscInt *rows,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr) 276f4e70085SSatish Balay { 277*2b40b63fSBarry Smith CHKFORTRANNULLOBJECTDEREFERENCE(x); 278*2b40b63fSBarry Smith CHKFORTRANNULLOBJECTDEREFERENCE(b); 279*2b40b63fSBarry Smith *ierr = MatZeroRowsLocal(*mat,*numRows,rows,*diag,*x,*b); 280f4e70085SSatish Balay } 281f4e70085SSatish Balay 282*2b40b63fSBarry Smith void PETSC_STDCALL matzerorowslocalis_(Mat *mat,IS *is,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr) 283f4e70085SSatish Balay { 284*2b40b63fSBarry Smith CHKFORTRANNULLOBJECTDEREFERENCE(x); 285*2b40b63fSBarry Smith CHKFORTRANNULLOBJECTDEREFERENCE(b); 286*2b40b63fSBarry Smith *ierr = MatZeroRowsLocalIS(*mat,*is,*diag,*x,*b); 287f4e70085SSatish Balay } 288f4e70085SSatish Balay 2891eea217eSSatish Balay 290*2b40b63fSBarry Smith void PETSC_STDCALL matsetoptionsprefix_(Mat *mat,CHAR prefix PETSC_MIXED_LEN(len),PetscErrorCode *ierr PETSC_END_LEN(len)) 2911eea217eSSatish Balay { 2921eea217eSSatish Balay char *t; 2931eea217eSSatish Balay 2941eea217eSSatish Balay FIXCHAR(prefix,len,t); 2951eea217eSSatish Balay *ierr = MatSetOptionsPrefix(*mat,t); 2961eea217eSSatish Balay FREECHAR(prefix,t); 2971eea217eSSatish Balay } 2981eea217eSSatish Balay 299812c3f48SMatthew Knepley void PETSC_STDCALL matnullspaceremove_(MatNullSpace *sp,Vec *vec,Vec *out,PetscErrorCode *ierr) 300812c3f48SMatthew Knepley { 301812c3f48SMatthew Knepley CHKFORTRANNULLOBJECT(out); 302812c3f48SMatthew Knepley *ierr = MatNullSpaceRemove(*sp,*vec,out); 303812c3f48SMatthew Knepley } 3041eea217eSSatish Balay 3055ba43861SSatish Balay void PETSC_STDCALL matgetinfo_(Mat *mat,MatInfoType *flag,MatInfo *info, int *__ierr ) 3065ba43861SSatish Balay { 3075ba43861SSatish Balay *__ierr = MatGetInfo(*mat,*flag,info); 3085ba43861SSatish Balay } 3095ba43861SSatish Balay 31022688b47SSatish Balay void PETSC_STDCALL matlufactor_(Mat *mat,IS *row,IS *col, MatFactorInfo *info, int *__ierr ) 31122688b47SSatish Balay { 31222688b47SSatish Balay *__ierr = MatLUFactor(*mat,*row,*col,info); 31322688b47SSatish Balay } 31422688b47SSatish Balay 31522688b47SSatish Balay void PETSC_STDCALL matilufactor_(Mat *mat,IS *row,IS *col, MatFactorInfo *info, int *__ierr ) 31622688b47SSatish Balay { 31722688b47SSatish Balay *__ierr = MatILUFactor(*mat,*row,*col,info); 31822688b47SSatish Balay } 31922688b47SSatish Balay 32022688b47SSatish Balay void PETSC_STDCALL matlufactorsymbolic_(Mat *fact,Mat *mat,IS *row,IS *col, MatFactorInfo *info, int *__ierr ) 32122688b47SSatish Balay { 32222688b47SSatish Balay *__ierr = MatLUFactorSymbolic(*fact,*mat,*row,*col,info); 32322688b47SSatish Balay } 32422688b47SSatish Balay 32522688b47SSatish Balay void PETSC_STDCALL matlufactornumeric_(Mat *fact,Mat *mat, MatFactorInfo *info, int *__ierr ) 32622688b47SSatish Balay { 32722688b47SSatish Balay *__ierr = MatLUFactorNumeric(*fact,*mat,info); 32822688b47SSatish Balay } 32922688b47SSatish Balay 33022688b47SSatish Balay void PETSC_STDCALL matcholeskyfactor_(Mat *mat,IS *perm, MatFactorInfo *info, int *__ierr ) 33122688b47SSatish Balay { 33222688b47SSatish Balay *__ierr = MatCholeskyFactor(*mat,*perm,info); 33322688b47SSatish Balay } 33422688b47SSatish Balay 33522688b47SSatish Balay void PETSC_STDCALL matcholeskyfactorsymbolic_(Mat *fact,Mat *mat,IS *perm, MatFactorInfo *info, int *__ierr ) 33622688b47SSatish Balay { 33722688b47SSatish Balay *__ierr = MatCholeskyFactorSymbolic(*fact,*mat,*perm,info); 33822688b47SSatish Balay } 33922688b47SSatish Balay 34022688b47SSatish Balay void PETSC_STDCALL matcholeskyfactornumeric_(Mat *fact,Mat *mat, MatFactorInfo *info, int *__ierr ) 34122688b47SSatish Balay { 34222688b47SSatish Balay *__ierr = MatCholeskyFactorNumeric(*fact,*mat,info); 34322688b47SSatish Balay } 34422688b47SSatish Balay 34522688b47SSatish Balay void PETSC_STDCALL matilufactorsymbolic_(Mat *fact,Mat *mat,IS *row,IS *col, MatFactorInfo *info, int *__ierr ) 34622688b47SSatish Balay { 34722688b47SSatish Balay *__ierr = MatILUFactorSymbolic(*fact,*mat,*row,*col,info); 34822688b47SSatish Balay } 34922688b47SSatish Balay 35022688b47SSatish Balay void PETSC_STDCALL maticcfactorsymbolic_(Mat *fact,Mat *mat,IS *perm, MatFactorInfo *info, int *__ierr ) 35122688b47SSatish Balay { 35222688b47SSatish Balay *__ierr = MatICCFactorSymbolic(*fact,*mat,*perm,info); 35322688b47SSatish Balay } 35422688b47SSatish Balay 35522688b47SSatish Balay void PETSC_STDCALL maticcfactor_(Mat *mat,IS *row, MatFactorInfo* info, int *__ierr ) 35622688b47SSatish Balay { 35722688b47SSatish Balay *__ierr = MatICCFactor(*mat,*row,info); 35822688b47SSatish Balay } 35922688b47SSatish Balay 36022688b47SSatish Balay void PETSC_STDCALL matfactorinfoinitialize_(MatFactorInfo *info, int *__ierr ) 36122688b47SSatish Balay { 36222688b47SSatish Balay *__ierr = MatFactorInfoInitialize(info); 36322688b47SSatish Balay } 36422688b47SSatish Balay 365f4e70085SSatish Balay EXTERN_C_END 366