1*c6db04a5SJed Brown #include <private/fortranimpl.h> 2*c6db04a5SJed Brown #include <petscmat.h> 3f4e70085SSatish Balay 4f4e70085SSatish Balay #if defined(PETSC_HAVE_FORTRAN_CAPS) 52c9f667aSSatish Balay #define matdestroy_ MATDESTROY 67d6bfa3bSBarry Smith #define matdestroymatrices_ MATDESTROYMATRICES 75dffd610SBarry Smith #define matgetfactor_ MATGETFACTOR 835bd34faSBarry Smith #define matfactorgetsolverpackage_ MATFACTORGETSOLVERPACKAGE 9f4e70085SSatish Balay #define matgetrowij_ MATGETROWIJ 10f4e70085SSatish Balay #define matrestorerowij_ MATRESTOREROWIJ 11f4e70085SSatish Balay #define matgetrow_ MATGETROW 12f4e70085SSatish Balay #define matrestorerow_ MATRESTOREROW 13f7e310deSShri Abhyankar #define matload_ MATLOAD 14f4e70085SSatish Balay #define matview_ MATVIEW 15f4e70085SSatish Balay #define matgetarray_ MATGETARRAY 16f4e70085SSatish Balay #define matrestorearray_ MATRESTOREARRAY 17f4e70085SSatish Balay #define matconvert_ MATCONVERT 18f4e70085SSatish Balay #define matgetsubmatrices_ MATGETSUBMATRICES 19f4e70085SSatish Balay #define matzerorows_ MATZEROROWS 20f4e70085SSatish Balay #define matzerorowsis_ MATZEROROWSIS 21f4e70085SSatish Balay #define matzerorowslocal_ MATZEROROWSLOCAL 22f4e70085SSatish Balay #define matzerorowslocalis_ MATZEROROWSLOCALIS 231eea217eSSatish Balay #define matsetoptionsprefix_ MATSETOPTIONSPREFIX 247c54600cSBarry Smith #define matgetvecs_ MATGETVECS 255ba43861SSatish Balay #define matnullspaceremove_ MATNULLSPACEREMOV 265ba43861SSatish Balay #define matgetinfo_ MATGETINFO 2722688b47SSatish Balay #define matlufactor_ MATLUFACTOR 2822688b47SSatish Balay #define matilufactor_ MATILUFACTOR 2922688b47SSatish Balay #define matlufactorsymbolic_ MATLUFACTORSYMBOLIC 3022688b47SSatish Balay #define matlufactornumeric_ MATLUFACTORNUMERIC 3122688b47SSatish Balay #define matcholeskyfactor_ MATCHOLESKYFACTOR 3222688b47SSatish Balay #define matcholeskyfactorsymbolic_ MATCHOLESKYFACTORSYMBOLIC 3322688b47SSatish Balay #define matcholeskyfactornumeric_ MATCHOLESKYFACTORNUMERIC 3422688b47SSatish Balay #define matilufactorsymbolic_ MATILUFACTORSYMBOLIC 3522688b47SSatish Balay #define maticcfactorsymbolic_ MATICCFACTORSYMBOLIC 3622688b47SSatish Balay #define maticcfactor_ MATICCFACTOR 3722688b47SSatish Balay #define matfactorinfoinitialize_ MATFACTORINFOINITIALIZE 38b22b330cSBarry Smith #define matnullspacesetfunction_ MATNULLSPACESETFUNCTION 39f4e70085SSatish Balay #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE) 402c9f667aSSatish Balay #define matdestroy_ matdestroy 417d6bfa3bSBarry Smith #define matdestroymatrices_ matdestroymatrices_ 425dffd610SBarry Smith #define matgetfactor_ matgetfactor 4335bd34faSBarry Smith #define matfactorgetsolverpackage_ matfactorgetsolverpackage 447c54600cSBarry Smith #define matgetvecs_ matgetvecs 45f4e70085SSatish Balay #define matgetrowij_ matgetrowij 46f4e70085SSatish Balay #define matrestorerowij_ matrestorerowij 47f4e70085SSatish Balay #define matgetrow_ matgetrow 48f4e70085SSatish Balay #define matrestorerow_ matrestorerow 49f4e70085SSatish Balay #define matview_ matview 50f7e310deSShri Abhyankar #define matload_ matload 51f4e70085SSatish Balay #define matgetarray_ matgetarray 52f4e70085SSatish Balay #define matrestorearray_ matrestorearray 53f4e70085SSatish Balay #define matconvert_ matconvert 54f4e70085SSatish Balay #define matgetsubmatrices_ matgetsubmatrices 55f4e70085SSatish Balay #define matzerorows_ matzerorows 56f4e70085SSatish Balay #define matzerorowsis_ matzerorowsis 57f4e70085SSatish Balay #define matzerorowslocal_ matzerorowslocal 58f4e70085SSatish Balay #define matzerorowslocalis_ matzerorowslocalis 591eea217eSSatish Balay #define matsetoptionsprefix_ matsetoptionsprefix 60812c3f48SMatthew Knepley #define matnullspaceremove_ matnullspaceremove 615ba43861SSatish Balay #define matgetinfo_ matgetinfo 6222688b47SSatish Balay #define matlufactor_ matlufactor 6322688b47SSatish Balay #define matilufactor_ matilufactor 6422688b47SSatish Balay #define matlufactorsymbolic_ matlufactorsymbolic 6522688b47SSatish Balay #define matlufactornumeric_ matlufactornumeric 6622688b47SSatish Balay #define matcholeskyfactor_ matcholeskyfactor 6722688b47SSatish Balay #define matcholeskyfactorsymbolic_ matcholeskyfactorsymbolic 6822688b47SSatish Balay #define matcholeskyfactornumeric_ matcholeskyfactornumeric 6922688b47SSatish Balay #define matilufactorsymbolic_ matilufactorsymbolic 7022688b47SSatish Balay #define maticcfactorsymbolic_ maticcfactorsymbolic 7122688b47SSatish Balay #define maticcfactor_ maticcfactor 7222688b47SSatish Balay #define matfactorinfoinitialize_ matfactorinfoinitialize 73b22b330cSBarry Smith #define matnullspacesetfunction_ matnullspacesetfunction 74f4e70085SSatish Balay #endif 75f4e70085SSatish Balay 76f4e70085SSatish Balay EXTERN_C_BEGIN 77f4e70085SSatish Balay 782c9f667aSSatish Balay void PETSC_STDCALL matdestroy_(Mat *A, int *__ierr ) 792c9f667aSSatish Balay { 802c9f667aSSatish Balay *__ierr = MatDestroy(*A); 812c9f667aSSatish Balay } 822c9f667aSSatish Balay 83b22b330cSBarry Smith static PetscErrorCode ournullfunction(MatNullSpace sp,Vec x,void *ctx) 84b22b330cSBarry Smith { 85b22b330cSBarry Smith PetscErrorCode ierr = 0; 86b22b330cSBarry Smith (*(void (PETSC_STDCALL *)(MatNullSpace*,Vec*,void*,PetscErrorCode*))(((PetscObject)sp)->fortran_func_pointers[0]))(&sp,&x,ctx,&ierr);CHKERRQ(ierr); 87b22b330cSBarry Smith return 0; 88b22b330cSBarry Smith } 89b22b330cSBarry Smith 90b22b330cSBarry Smith void PETSC_STDCALL matnullspacesetfunction_(MatNullSpace *sp, PetscErrorCode (*rem)(MatNullSpace,Vec,void*),void *ctx,PetscErrorCode *ierr) 91b22b330cSBarry Smith { 92b22b330cSBarry Smith PetscObjectAllocateFortranPointers(*sp,1); 93b22b330cSBarry Smith ((PetscObject)*sp)->fortran_func_pointers[0] = (PetscVoidFunction)rem; 94b22b330cSBarry Smith *ierr = MatNullSpaceSetFunction(*sp,ournullfunction,ctx); 95b22b330cSBarry Smith } 96b22b330cSBarry Smith 977c54600cSBarry Smith void PETSC_STDCALL matgetvecs_(Mat *mat,Vec *right,Vec *left, int *ierr ) 987c54600cSBarry Smith { 997c54600cSBarry Smith CHKFORTRANNULLOBJECT(right); 1007c54600cSBarry Smith CHKFORTRANNULLOBJECT(left); 1017c54600cSBarry Smith *ierr = MatGetVecs(*mat,right,left); 1027c54600cSBarry Smith } 1037c54600cSBarry Smith 104ace3abfcSBarry Smith void PETSC_STDCALL matgetrowij_(Mat *B,PetscInt *shift,PetscBool *sym,PetscBool *blockcompressed,PetscInt *n,PetscInt *ia,size_t *iia, 105ace3abfcSBarry Smith PetscInt *ja,size_t *jja,PetscBool *done,PetscErrorCode *ierr) 106f4e70085SSatish Balay { 107f4e70085SSatish Balay PetscInt *IA,*JA; 1088f7157efSSatish Balay *ierr = MatGetRowIJ(*B,*shift,*sym,*blockcompressed,n,&IA,&JA,done);if (*ierr) return; 109f4e70085SSatish Balay *iia = PetscIntAddressToFortran(ia,IA); 110f4e70085SSatish Balay *jja = PetscIntAddressToFortran(ja,JA); 111f4e70085SSatish Balay } 112f4e70085SSatish Balay 113ace3abfcSBarry Smith void PETSC_STDCALL matrestorerowij_(Mat *B,PetscInt *shift,PetscBool *sym,PetscBool *blockcompressed, PetscInt *n,PetscInt *ia,size_t *iia, 114ace3abfcSBarry Smith PetscInt *ja,size_t *jja,PetscBool *done,PetscErrorCode *ierr) 115f4e70085SSatish Balay { 116f4e70085SSatish Balay PetscInt *IA = PetscIntAddressFromFortran(ia,*iia),*JA = PetscIntAddressFromFortran(ja,*jja); 1178f7157efSSatish Balay *ierr = MatRestoreRowIJ(*B,*shift,*sym,*blockcompressed,n,&IA,&JA,done); 118f4e70085SSatish Balay } 119f4e70085SSatish Balay 120f4e70085SSatish Balay /* 121f4e70085SSatish Balay This is a poor way of storing the column and value pointers 122f4e70085SSatish Balay generated by MatGetRow() to be returned with MatRestoreRow() 123f4e70085SSatish Balay but there is not natural,good place else to store them. Hence 124f4e70085SSatish Balay Fortran programmers can only have one outstanding MatGetRows() 125f4e70085SSatish Balay at a time. 126f4e70085SSatish Balay */ 127f4e70085SSatish Balay static PetscErrorCode matgetrowactive = 0; 128f4e70085SSatish Balay static const PetscInt *my_ocols = 0; 129f4e70085SSatish Balay static const PetscScalar *my_ovals = 0; 130f4e70085SSatish Balay 131f4e70085SSatish Balay void PETSC_STDCALL matgetrow_(Mat *mat,PetscInt *row,PetscInt *ncols,PetscInt *cols,PetscScalar *vals,PetscErrorCode *ierr) 132f4e70085SSatish Balay { 133f4e70085SSatish Balay const PetscInt **oocols = &my_ocols; 134f4e70085SSatish Balay const PetscScalar **oovals = &my_ovals; 135f4e70085SSatish Balay 136f4e70085SSatish Balay if (matgetrowactive) { 137d736bfebSBarry Smith PetscError(PETSC_COMM_SELF,__LINE__,"MatGetRow_Fortran",__FILE__,__SDIR__,PETSC_ERR_ARG_WRONGSTATE,PETSC_ERROR_INITIAL, 138f4e70085SSatish Balay "Cannot have two MatGetRow() active simultaneously\n\ 139f4e70085SSatish Balay call MatRestoreRow() before calling MatGetRow() a second time"); 140f4e70085SSatish Balay *ierr = 1; 141f4e70085SSatish Balay return; 142f4e70085SSatish Balay } 143f4e70085SSatish Balay 144f4e70085SSatish Balay CHKFORTRANNULLINTEGER(cols); if (!cols) oocols = PETSC_NULL; 145f4e70085SSatish Balay CHKFORTRANNULLSCALAR(vals); if (!vals) oovals = PETSC_NULL; 146f4e70085SSatish Balay 147f4e70085SSatish Balay *ierr = MatGetRow(*mat,*row,ncols,oocols,oovals); 148f4e70085SSatish Balay if (*ierr) return; 149f4e70085SSatish Balay 150f4e70085SSatish Balay if (oocols) { *ierr = PetscMemcpy(cols,my_ocols,(*ncols)*sizeof(PetscInt)); if (*ierr) return;} 151f4e70085SSatish Balay if (oovals) { *ierr = PetscMemcpy(vals,my_ovals,(*ncols)*sizeof(PetscScalar)); if (*ierr) return; } 152f4e70085SSatish Balay matgetrowactive = 1; 153f4e70085SSatish Balay } 154f4e70085SSatish Balay 155f4e70085SSatish Balay void PETSC_STDCALL matrestorerow_(Mat *mat,PetscInt *row,PetscInt *ncols,PetscInt *cols,PetscScalar *vals,PetscErrorCode *ierr) 156f4e70085SSatish Balay { 157f4e70085SSatish Balay const PetscInt **oocols = &my_ocols; 158f4e70085SSatish Balay const PetscScalar **oovals = &my_ovals; 159f4e70085SSatish Balay if (!matgetrowactive) { 160d736bfebSBarry Smith PetscError(PETSC_COMM_SELF,__LINE__,"MatRestoreRow_Fortran",__FILE__,__SDIR__,PETSC_ERR_ARG_WRONGSTATE,PETSC_ERROR_INITIAL, 161f4e70085SSatish Balay "Must call MatGetRow() first"); 162f4e70085SSatish Balay *ierr = 1; 163f4e70085SSatish Balay return; 164f4e70085SSatish Balay } 165f4e70085SSatish Balay CHKFORTRANNULLINTEGER(cols); if (!cols) oocols = PETSC_NULL; 166f4e70085SSatish Balay CHKFORTRANNULLSCALAR(vals); if (!vals) oovals = PETSC_NULL; 167f4e70085SSatish Balay 168f4e70085SSatish Balay *ierr = MatRestoreRow(*mat,*row,ncols,oocols,oovals); 169f4e70085SSatish Balay matgetrowactive = 0; 170f4e70085SSatish Balay } 171f4e70085SSatish Balay 172f4e70085SSatish Balay void PETSC_STDCALL matview_(Mat *mat,PetscViewer *vin,PetscErrorCode *ierr) 173f4e70085SSatish Balay { 174f4e70085SSatish Balay PetscViewer v; 175f4e70085SSatish Balay PetscPatchDefaultViewers_Fortran(vin,v); 176f4e70085SSatish Balay *ierr = MatView(*mat,v); 177f4e70085SSatish Balay } 178f4e70085SSatish Balay 179112444f4SShri Abhyankar void PETSC_STDCALL matload_(Mat *mat,PetscViewer *vin,PetscErrorCode *ierr) 180f7e310deSShri Abhyankar { 181f7e310deSShri Abhyankar PetscViewer v; 182f7e310deSShri Abhyankar PetscPatchDefaultViewers_Fortran(vin,v); 183112444f4SShri Abhyankar *ierr = MatLoad(*mat,v); 184f7e310deSShri Abhyankar } 185f7e310deSShri Abhyankar 186f4e70085SSatish Balay void PETSC_STDCALL matgetarray_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr) 187f4e70085SSatish Balay { 188f4e70085SSatish Balay PetscScalar *mm; 189f4e70085SSatish Balay PetscInt m,n; 190f4e70085SSatish Balay 191f4e70085SSatish Balay *ierr = MatGetArray(*mat,&mm); if (*ierr) return; 192f4e70085SSatish Balay *ierr = MatGetSize(*mat,&m,&n); if (*ierr) return; 193f91d1997SBarry Smith *ierr = PetscScalarAddressToFortran((PetscObject)*mat,1,fa,mm,m*n,ia); if (*ierr) return; 194f4e70085SSatish Balay } 195f4e70085SSatish Balay 196f4e70085SSatish Balay void PETSC_STDCALL matrestorearray_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr) 197f4e70085SSatish Balay { 198f4e70085SSatish Balay PetscScalar *lx; 199f4e70085SSatish Balay PetscInt m,n; 200f4e70085SSatish Balay 201f4e70085SSatish Balay *ierr = MatGetSize(*mat,&m,&n); if (*ierr) return; 202f4e70085SSatish Balay *ierr = PetscScalarAddressFromFortran((PetscObject)*mat,fa,*ia,m*n,&lx);if (*ierr) return; 203f4e70085SSatish Balay *ierr = MatRestoreArray(*mat,&lx);if (*ierr) return; 204f4e70085SSatish Balay } 205f4e70085SSatish Balay 20635bd34faSBarry Smith void PETSC_STDCALL matfactorgetsolverpackage_(Mat *mat,CHAR name PETSC_MIXED_LEN(len),PetscErrorCode *ierr PETSC_END_LEN(len)) 20735bd34faSBarry Smith { 20835bd34faSBarry Smith const char *tname; 20935bd34faSBarry Smith 21035bd34faSBarry Smith *ierr = MatFactorGetSolverPackage(*mat,&tname);if (*ierr) return; 21135bd34faSBarry Smith if (name != PETSC_NULL_CHARACTER_Fortran) { 21235bd34faSBarry Smith *ierr = PetscStrncpy(name,tname,len);if (*ierr) return; 21335bd34faSBarry Smith } 21435bd34faSBarry Smith FIXRETURNCHAR(PETSC_TRUE,name,len); 21535bd34faSBarry Smith } 21635bd34faSBarry Smith 2179be81726SHong Zhang void PETSC_STDCALL matgetfactor_(Mat *mat,CHAR outtype PETSC_MIXED_LEN(len),MatFactorType *ftype,Mat *M,PetscErrorCode *ierr PETSC_END_LEN(len)) 2185dffd610SBarry Smith { 2195dffd610SBarry Smith char *t; 2205dffd610SBarry Smith FIXCHAR(outtype,len,t); 2219be81726SHong Zhang *ierr = MatGetFactor(*mat,t,*ftype,M); 2225dffd610SBarry Smith FREECHAR(outtype,t); 2235dffd610SBarry Smith } 2245dffd610SBarry Smith 225f4e70085SSatish Balay void PETSC_STDCALL matconvert_(Mat *mat,CHAR outtype PETSC_MIXED_LEN(len),MatReuse *reuse,Mat *M,PetscErrorCode *ierr PETSC_END_LEN(len)) 226f4e70085SSatish Balay { 227f4e70085SSatish Balay char *t; 228f4e70085SSatish Balay FIXCHAR(outtype,len,t); 229f4e70085SSatish Balay *ierr = MatConvert(*mat,t,*reuse,M); 230f4e70085SSatish Balay FREECHAR(outtype,t); 231f4e70085SSatish Balay } 232f4e70085SSatish Balay 233f4e70085SSatish Balay /* 234f4e70085SSatish Balay MatGetSubmatrices() is slightly different from C since the 235f4e70085SSatish Balay Fortran provides the array to hold the submatrix objects,while in C that 236f4e70085SSatish Balay array is allocated by the MatGetSubmatrices() 237f4e70085SSatish Balay */ 238f4e70085SSatish Balay void PETSC_STDCALL matgetsubmatrices_(Mat *mat,PetscInt *n,IS *isrow,IS *iscol,MatReuse *scall,Mat *smat,PetscErrorCode *ierr) 239f4e70085SSatish Balay { 240f4e70085SSatish Balay Mat *lsmat; 241f4e70085SSatish Balay PetscInt i; 242f4e70085SSatish Balay 243f4e70085SSatish Balay if (*scall == MAT_INITIAL_MATRIX) { 244f4e70085SSatish Balay *ierr = MatGetSubMatrices(*mat,*n,isrow,iscol,*scall,&lsmat); 245f4e70085SSatish Balay for (i=0; i<*n; i++) { 246f4e70085SSatish Balay smat[i] = lsmat[i]; 247f4e70085SSatish Balay } 248f4e70085SSatish Balay *ierr = PetscFree(lsmat); 249f4e70085SSatish Balay } else { 250f4e70085SSatish Balay *ierr = MatGetSubMatrices(*mat,*n,isrow,iscol,*scall,&smat); 251f4e70085SSatish Balay } 252f4e70085SSatish Balay } 253f4e70085SSatish Balay 2547d6bfa3bSBarry Smith /* 2557d6bfa3bSBarry Smith MatDestroyMatrices() is slightly different from C since the 2567d6bfa3bSBarry Smith Fortran provides the array to hold the submatrix objects,while in C that 2577d6bfa3bSBarry Smith array is allocated by the MatGetSubmatrices() 2587d6bfa3bSBarry Smith */ 2597d6bfa3bSBarry Smith void PETSC_STDCALL matdestroymatrices_(Mat *mat,PetscInt *n,Mat *smat,PetscErrorCode *ierr) 2607d6bfa3bSBarry Smith { 2617d6bfa3bSBarry Smith PetscInt i; 2627d6bfa3bSBarry Smith 2637d6bfa3bSBarry Smith for (i=0; i<*n; i++) { 2647d6bfa3bSBarry Smith *ierr = MatDestroy(smat[i]);if (*ierr) return; 2657d6bfa3bSBarry Smith } 2667d6bfa3bSBarry Smith } 2677d6bfa3bSBarry Smith 2682b40b63fSBarry Smith void PETSC_STDCALL matzerorows_(Mat *mat,PetscInt *numRows,PetscInt *rows,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr) 269f4e70085SSatish Balay { 2702b40b63fSBarry Smith CHKFORTRANNULLOBJECTDEREFERENCE(x); 2712b40b63fSBarry Smith CHKFORTRANNULLOBJECTDEREFERENCE(b); 2722b40b63fSBarry Smith *ierr = MatZeroRows(*mat,*numRows,rows,*diag,*x,*b); 273f4e70085SSatish Balay } 274f4e70085SSatish Balay 2752b40b63fSBarry Smith void PETSC_STDCALL matzerorowsis_(Mat *mat,IS *is,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr) 276f4e70085SSatish Balay { 2772b40b63fSBarry Smith CHKFORTRANNULLOBJECTDEREFERENCE(x); 2782b40b63fSBarry Smith CHKFORTRANNULLOBJECTDEREFERENCE(b); 2792b40b63fSBarry Smith *ierr = MatZeroRowsIS(*mat,*is,*diag,*x,*b); 280f4e70085SSatish Balay } 281f4e70085SSatish Balay 2822b40b63fSBarry Smith void PETSC_STDCALL matzerorowslocal_(Mat *mat,PetscInt *numRows,PetscInt *rows,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr) 283f4e70085SSatish Balay { 2842b40b63fSBarry Smith CHKFORTRANNULLOBJECTDEREFERENCE(x); 2852b40b63fSBarry Smith CHKFORTRANNULLOBJECTDEREFERENCE(b); 2862b40b63fSBarry Smith *ierr = MatZeroRowsLocal(*mat,*numRows,rows,*diag,*x,*b); 287f4e70085SSatish Balay } 288f4e70085SSatish Balay 2892b40b63fSBarry Smith void PETSC_STDCALL matzerorowslocalis_(Mat *mat,IS *is,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr) 290f4e70085SSatish Balay { 2912b40b63fSBarry Smith CHKFORTRANNULLOBJECTDEREFERENCE(x); 2922b40b63fSBarry Smith CHKFORTRANNULLOBJECTDEREFERENCE(b); 2932b40b63fSBarry Smith *ierr = MatZeroRowsLocalIS(*mat,*is,*diag,*x,*b); 294f4e70085SSatish Balay } 295f4e70085SSatish Balay 2961eea217eSSatish Balay 2972b40b63fSBarry Smith void PETSC_STDCALL matsetoptionsprefix_(Mat *mat,CHAR prefix PETSC_MIXED_LEN(len),PetscErrorCode *ierr PETSC_END_LEN(len)) 2981eea217eSSatish Balay { 2991eea217eSSatish Balay char *t; 3001eea217eSSatish Balay 3011eea217eSSatish Balay FIXCHAR(prefix,len,t); 3021eea217eSSatish Balay *ierr = MatSetOptionsPrefix(*mat,t); 3031eea217eSSatish Balay FREECHAR(prefix,t); 3041eea217eSSatish Balay } 3051eea217eSSatish Balay 306812c3f48SMatthew Knepley void PETSC_STDCALL matnullspaceremove_(MatNullSpace *sp,Vec *vec,Vec *out,PetscErrorCode *ierr) 307812c3f48SMatthew Knepley { 308812c3f48SMatthew Knepley CHKFORTRANNULLOBJECT(out); 309812c3f48SMatthew Knepley *ierr = MatNullSpaceRemove(*sp,*vec,out); 310812c3f48SMatthew Knepley } 3111eea217eSSatish Balay 3125ba43861SSatish Balay void PETSC_STDCALL matgetinfo_(Mat *mat,MatInfoType *flag,MatInfo *info, int *__ierr ) 3135ba43861SSatish Balay { 3145ba43861SSatish Balay *__ierr = MatGetInfo(*mat,*flag,info); 3155ba43861SSatish Balay } 3165ba43861SSatish Balay 31722688b47SSatish Balay void PETSC_STDCALL matlufactor_(Mat *mat,IS *row,IS *col, MatFactorInfo *info, int *__ierr ) 31822688b47SSatish Balay { 31922688b47SSatish Balay *__ierr = MatLUFactor(*mat,*row,*col,info); 32022688b47SSatish Balay } 32122688b47SSatish Balay 32222688b47SSatish Balay void PETSC_STDCALL matilufactor_(Mat *mat,IS *row,IS *col, MatFactorInfo *info, int *__ierr ) 32322688b47SSatish Balay { 32422688b47SSatish Balay *__ierr = MatILUFactor(*mat,*row,*col,info); 32522688b47SSatish Balay } 32622688b47SSatish Balay 32722688b47SSatish Balay void PETSC_STDCALL matlufactorsymbolic_(Mat *fact,Mat *mat,IS *row,IS *col, MatFactorInfo *info, int *__ierr ) 32822688b47SSatish Balay { 32922688b47SSatish Balay *__ierr = MatLUFactorSymbolic(*fact,*mat,*row,*col,info); 33022688b47SSatish Balay } 33122688b47SSatish Balay 33222688b47SSatish Balay void PETSC_STDCALL matlufactornumeric_(Mat *fact,Mat *mat, MatFactorInfo *info, int *__ierr ) 33322688b47SSatish Balay { 33422688b47SSatish Balay *__ierr = MatLUFactorNumeric(*fact,*mat,info); 33522688b47SSatish Balay } 33622688b47SSatish Balay 33722688b47SSatish Balay void PETSC_STDCALL matcholeskyfactor_(Mat *mat,IS *perm, MatFactorInfo *info, int *__ierr ) 33822688b47SSatish Balay { 33922688b47SSatish Balay *__ierr = MatCholeskyFactor(*mat,*perm,info); 34022688b47SSatish Balay } 34122688b47SSatish Balay 34222688b47SSatish Balay void PETSC_STDCALL matcholeskyfactorsymbolic_(Mat *fact,Mat *mat,IS *perm, MatFactorInfo *info, int *__ierr ) 34322688b47SSatish Balay { 34422688b47SSatish Balay *__ierr = MatCholeskyFactorSymbolic(*fact,*mat,*perm,info); 34522688b47SSatish Balay } 34622688b47SSatish Balay 34722688b47SSatish Balay void PETSC_STDCALL matcholeskyfactornumeric_(Mat *fact,Mat *mat, MatFactorInfo *info, int *__ierr ) 34822688b47SSatish Balay { 34922688b47SSatish Balay *__ierr = MatCholeskyFactorNumeric(*fact,*mat,info); 35022688b47SSatish Balay } 35122688b47SSatish Balay 35222688b47SSatish Balay void PETSC_STDCALL matilufactorsymbolic_(Mat *fact,Mat *mat,IS *row,IS *col, MatFactorInfo *info, int *__ierr ) 35322688b47SSatish Balay { 35422688b47SSatish Balay *__ierr = MatILUFactorSymbolic(*fact,*mat,*row,*col,info); 35522688b47SSatish Balay } 35622688b47SSatish Balay 35722688b47SSatish Balay void PETSC_STDCALL maticcfactorsymbolic_(Mat *fact,Mat *mat,IS *perm, MatFactorInfo *info, int *__ierr ) 35822688b47SSatish Balay { 35922688b47SSatish Balay *__ierr = MatICCFactorSymbolic(*fact,*mat,*perm,info); 36022688b47SSatish Balay } 36122688b47SSatish Balay 36222688b47SSatish Balay void PETSC_STDCALL maticcfactor_(Mat *mat,IS *row, MatFactorInfo* info, int *__ierr ) 36322688b47SSatish Balay { 36422688b47SSatish Balay *__ierr = MatICCFactor(*mat,*row,info); 36522688b47SSatish Balay } 36622688b47SSatish Balay 36722688b47SSatish Balay void PETSC_STDCALL matfactorinfoinitialize_(MatFactorInfo *info, int *__ierr ) 36822688b47SSatish Balay { 36922688b47SSatish Balay *__ierr = MatFactorInfoInitialize(info); 37022688b47SSatish Balay } 37122688b47SSatish Balay 372f4e70085SSatish Balay EXTERN_C_END 373