1*b45d2f2cSJed Brown #include <petsc-private/fortranimpl.h> 2c6db04a5SJed Brown #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 1817ede90eSSatish Balay #define matzerorowscolumns_ MATZEROROWSCOLUMNS 1917ede90eSSatish Balay #define matzerorowscolumnsis_ MATZEROROWSCOLUMNSIS 2017ede90eSSatish Balay #define matzerorowsstencil_ MATZEROROWSSTENCIL 21f4e70085SSatish Balay #define matzerorows_ MATZEROROWS 22f4e70085SSatish Balay #define matzerorowsis_ MATZEROROWSIS 23f4e70085SSatish Balay #define matzerorowslocal_ MATZEROROWSLOCAL 24f4e70085SSatish Balay #define matzerorowslocalis_ MATZEROROWSLOCALIS 2517ede90eSSatish Balay #define matzerorowscolumnslocal_ MATZEROROWSCOLUMNSLOCAL 2617ede90eSSatish Balay #define matzerorowscolumnslocalis_ MATZEROROWSCOLUMNSLOCALIS 271eea217eSSatish Balay #define matsetoptionsprefix_ MATSETOPTIONSPREFIX 287c54600cSBarry Smith #define matgetvecs_ MATGETVECS 295ba43861SSatish Balay #define matnullspaceremove_ MATNULLSPACEREMOV 305ba43861SSatish Balay #define matgetinfo_ MATGETINFO 3122688b47SSatish Balay #define matlufactor_ MATLUFACTOR 3222688b47SSatish Balay #define matilufactor_ MATILUFACTOR 3322688b47SSatish Balay #define matlufactorsymbolic_ MATLUFACTORSYMBOLIC 3422688b47SSatish Balay #define matlufactornumeric_ MATLUFACTORNUMERIC 3522688b47SSatish Balay #define matcholeskyfactor_ MATCHOLESKYFACTOR 3622688b47SSatish Balay #define matcholeskyfactorsymbolic_ MATCHOLESKYFACTORSYMBOLIC 3722688b47SSatish Balay #define matcholeskyfactornumeric_ MATCHOLESKYFACTORNUMERIC 3822688b47SSatish Balay #define matilufactorsymbolic_ MATILUFACTORSYMBOLIC 3922688b47SSatish Balay #define maticcfactorsymbolic_ MATICCFACTORSYMBOLIC 4022688b47SSatish Balay #define maticcfactor_ MATICCFACTOR 4122688b47SSatish Balay #define matfactorinfoinitialize_ MATFACTORINFOINITIALIZE 42b22b330cSBarry Smith #define matnullspacesetfunction_ MATNULLSPACESETFUNCTION 43f4e70085SSatish Balay #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE) 447d6bfa3bSBarry Smith #define matdestroymatrices_ matdestroymatrices_ 455dffd610SBarry Smith #define matgetfactor_ matgetfactor 4635bd34faSBarry Smith #define matfactorgetsolverpackage_ matfactorgetsolverpackage 477c54600cSBarry Smith #define matgetvecs_ matgetvecs 48f4e70085SSatish Balay #define matgetrowij_ matgetrowij 49f4e70085SSatish Balay #define matrestorerowij_ matrestorerowij 50f4e70085SSatish Balay #define matgetrow_ matgetrow 51f4e70085SSatish Balay #define matrestorerow_ matrestorerow 52f4e70085SSatish Balay #define matview_ matview 53f7e310deSShri Abhyankar #define matload_ matload 54f4e70085SSatish Balay #define matgetarray_ matgetarray 55f4e70085SSatish Balay #define matrestorearray_ matrestorearray 56f4e70085SSatish Balay #define matconvert_ matconvert 57f4e70085SSatish Balay #define matgetsubmatrices_ matgetsubmatrices 5817ede90eSSatish Balay #define matzerorowscolumns_ matzerorowscolumns 5917ede90eSSatish Balay #define matzerorowscolumnsis_ matzerorowscolumnsis 6017ede90eSSatish Balay #define matzerorowsstencil_ matzerorowsstencil 61f4e70085SSatish Balay #define matzerorows_ matzerorows 62f4e70085SSatish Balay #define matzerorowsis_ matzerorowsis 63f4e70085SSatish Balay #define matzerorowslocal_ matzerorowslocal 64f4e70085SSatish Balay #define matzerorowslocalis_ matzerorowslocalis 6517ede90eSSatish Balay #define matzerorowscolumnslocal_ matzerorowscolumnslocal 6617ede90eSSatish Balay #define matzerorowscolumnslocalis_ matzerorowscolumnslocalis 671eea217eSSatish Balay #define matsetoptionsprefix_ matsetoptionsprefix 68812c3f48SMatthew Knepley #define matnullspaceremove_ matnullspaceremove 695ba43861SSatish Balay #define matgetinfo_ matgetinfo 7022688b47SSatish Balay #define matlufactor_ matlufactor 7122688b47SSatish Balay #define matilufactor_ matilufactor 7222688b47SSatish Balay #define matlufactorsymbolic_ matlufactorsymbolic 7322688b47SSatish Balay #define matlufactornumeric_ matlufactornumeric 7422688b47SSatish Balay #define matcholeskyfactor_ matcholeskyfactor 7522688b47SSatish Balay #define matcholeskyfactorsymbolic_ matcholeskyfactorsymbolic 7622688b47SSatish Balay #define matcholeskyfactornumeric_ matcholeskyfactornumeric 7722688b47SSatish Balay #define matilufactorsymbolic_ matilufactorsymbolic 7822688b47SSatish Balay #define maticcfactorsymbolic_ maticcfactorsymbolic 7922688b47SSatish Balay #define maticcfactor_ maticcfactor 8022688b47SSatish Balay #define matfactorinfoinitialize_ matfactorinfoinitialize 81b22b330cSBarry Smith #define matnullspacesetfunction_ matnullspacesetfunction 82f4e70085SSatish Balay #endif 83f4e70085SSatish Balay 84f4e70085SSatish Balay EXTERN_C_BEGIN 85f4e70085SSatish Balay 86b22b330cSBarry Smith static PetscErrorCode ournullfunction(MatNullSpace sp,Vec x,void *ctx) 87b22b330cSBarry Smith { 88b22b330cSBarry Smith PetscErrorCode ierr = 0; 89b22b330cSBarry Smith (*(void (PETSC_STDCALL *)(MatNullSpace*,Vec*,void*,PetscErrorCode*))(((PetscObject)sp)->fortran_func_pointers[0]))(&sp,&x,ctx,&ierr);CHKERRQ(ierr); 90b22b330cSBarry Smith return 0; 91b22b330cSBarry Smith } 92b22b330cSBarry Smith 93b22b330cSBarry Smith void PETSC_STDCALL matnullspacesetfunction_(MatNullSpace *sp, PetscErrorCode (*rem)(MatNullSpace,Vec,void*),void *ctx,PetscErrorCode *ierr) 94b22b330cSBarry Smith { 95b22b330cSBarry Smith PetscObjectAllocateFortranPointers(*sp,1); 96b22b330cSBarry Smith ((PetscObject)*sp)->fortran_func_pointers[0] = (PetscVoidFunction)rem; 97b22b330cSBarry Smith *ierr = MatNullSpaceSetFunction(*sp,ournullfunction,ctx); 98b22b330cSBarry Smith } 99b22b330cSBarry Smith 1007c54600cSBarry Smith void PETSC_STDCALL matgetvecs_(Mat *mat,Vec *right,Vec *left, int *ierr ) 1017c54600cSBarry Smith { 1027c54600cSBarry Smith CHKFORTRANNULLOBJECT(right); 1037c54600cSBarry Smith CHKFORTRANNULLOBJECT(left); 1047c54600cSBarry Smith *ierr = MatGetVecs(*mat,right,left); 1057c54600cSBarry Smith } 1067c54600cSBarry Smith 107ace3abfcSBarry Smith void PETSC_STDCALL matgetrowij_(Mat *B,PetscInt *shift,PetscBool *sym,PetscBool *blockcompressed,PetscInt *n,PetscInt *ia,size_t *iia, 108ace3abfcSBarry Smith PetscInt *ja,size_t *jja,PetscBool *done,PetscErrorCode *ierr) 109f4e70085SSatish Balay { 110f4e70085SSatish Balay PetscInt *IA,*JA; 1118f7157efSSatish Balay *ierr = MatGetRowIJ(*B,*shift,*sym,*blockcompressed,n,&IA,&JA,done);if (*ierr) return; 112f4e70085SSatish Balay *iia = PetscIntAddressToFortran(ia,IA); 113f4e70085SSatish Balay *jja = PetscIntAddressToFortran(ja,JA); 114f4e70085SSatish Balay } 115f4e70085SSatish Balay 116ace3abfcSBarry Smith void PETSC_STDCALL matrestorerowij_(Mat *B,PetscInt *shift,PetscBool *sym,PetscBool *blockcompressed, PetscInt *n,PetscInt *ia,size_t *iia, 117ace3abfcSBarry Smith PetscInt *ja,size_t *jja,PetscBool *done,PetscErrorCode *ierr) 118f4e70085SSatish Balay { 119f4e70085SSatish Balay PetscInt *IA = PetscIntAddressFromFortran(ia,*iia),*JA = PetscIntAddressFromFortran(ja,*jja); 1208f7157efSSatish Balay *ierr = MatRestoreRowIJ(*B,*shift,*sym,*blockcompressed,n,&IA,&JA,done); 121f4e70085SSatish Balay } 122f4e70085SSatish Balay 123f4e70085SSatish Balay /* 124f4e70085SSatish Balay This is a poor way of storing the column and value pointers 125f4e70085SSatish Balay generated by MatGetRow() to be returned with MatRestoreRow() 126f4e70085SSatish Balay but there is not natural,good place else to store them. Hence 127f4e70085SSatish Balay Fortran programmers can only have one outstanding MatGetRows() 128f4e70085SSatish Balay at a time. 129f4e70085SSatish Balay */ 130f4e70085SSatish Balay static PetscErrorCode matgetrowactive = 0; 131f4e70085SSatish Balay static const PetscInt *my_ocols = 0; 132f4e70085SSatish Balay static const PetscScalar *my_ovals = 0; 133f4e70085SSatish Balay 134f4e70085SSatish Balay void PETSC_STDCALL matgetrow_(Mat *mat,PetscInt *row,PetscInt *ncols,PetscInt *cols,PetscScalar *vals,PetscErrorCode *ierr) 135f4e70085SSatish Balay { 136f4e70085SSatish Balay const PetscInt **oocols = &my_ocols; 137f4e70085SSatish Balay const PetscScalar **oovals = &my_ovals; 138f4e70085SSatish Balay 139f4e70085SSatish Balay if (matgetrowactive) { 140d736bfebSBarry Smith PetscError(PETSC_COMM_SELF,__LINE__,"MatGetRow_Fortran",__FILE__,__SDIR__,PETSC_ERR_ARG_WRONGSTATE,PETSC_ERROR_INITIAL, 141f4e70085SSatish Balay "Cannot have two MatGetRow() active simultaneously\n\ 142f4e70085SSatish Balay call MatRestoreRow() before calling MatGetRow() a second time"); 143f4e70085SSatish Balay *ierr = 1; 144f4e70085SSatish Balay return; 145f4e70085SSatish Balay } 146f4e70085SSatish Balay 147f4e70085SSatish Balay CHKFORTRANNULLINTEGER(cols); if (!cols) oocols = PETSC_NULL; 148f4e70085SSatish Balay CHKFORTRANNULLSCALAR(vals); if (!vals) oovals = PETSC_NULL; 149f4e70085SSatish Balay 150f4e70085SSatish Balay *ierr = MatGetRow(*mat,*row,ncols,oocols,oovals); 151f4e70085SSatish Balay if (*ierr) return; 152f4e70085SSatish Balay 153f4e70085SSatish Balay if (oocols) { *ierr = PetscMemcpy(cols,my_ocols,(*ncols)*sizeof(PetscInt)); if (*ierr) return;} 154f4e70085SSatish Balay if (oovals) { *ierr = PetscMemcpy(vals,my_ovals,(*ncols)*sizeof(PetscScalar)); if (*ierr) return; } 155f4e70085SSatish Balay matgetrowactive = 1; 156f4e70085SSatish Balay } 157f4e70085SSatish Balay 158f4e70085SSatish Balay void PETSC_STDCALL matrestorerow_(Mat *mat,PetscInt *row,PetscInt *ncols,PetscInt *cols,PetscScalar *vals,PetscErrorCode *ierr) 159f4e70085SSatish Balay { 160f4e70085SSatish Balay const PetscInt **oocols = &my_ocols; 161f4e70085SSatish Balay const PetscScalar **oovals = &my_ovals; 162f4e70085SSatish Balay if (!matgetrowactive) { 163d736bfebSBarry Smith PetscError(PETSC_COMM_SELF,__LINE__,"MatRestoreRow_Fortran",__FILE__,__SDIR__,PETSC_ERR_ARG_WRONGSTATE,PETSC_ERROR_INITIAL, 164f4e70085SSatish Balay "Must call MatGetRow() first"); 165f4e70085SSatish Balay *ierr = 1; 166f4e70085SSatish Balay return; 167f4e70085SSatish Balay } 168f4e70085SSatish Balay CHKFORTRANNULLINTEGER(cols); if (!cols) oocols = PETSC_NULL; 169f4e70085SSatish Balay CHKFORTRANNULLSCALAR(vals); if (!vals) oovals = PETSC_NULL; 170f4e70085SSatish Balay 171f4e70085SSatish Balay *ierr = MatRestoreRow(*mat,*row,ncols,oocols,oovals); 172f4e70085SSatish Balay matgetrowactive = 0; 173f4e70085SSatish Balay } 174f4e70085SSatish Balay 175f4e70085SSatish Balay void PETSC_STDCALL matview_(Mat *mat,PetscViewer *vin,PetscErrorCode *ierr) 176f4e70085SSatish Balay { 177f4e70085SSatish Balay PetscViewer v; 178f4e70085SSatish Balay PetscPatchDefaultViewers_Fortran(vin,v); 179f4e70085SSatish Balay *ierr = MatView(*mat,v); 180f4e70085SSatish Balay } 181f4e70085SSatish Balay 182112444f4SShri Abhyankar void PETSC_STDCALL matload_(Mat *mat,PetscViewer *vin,PetscErrorCode *ierr) 183f7e310deSShri Abhyankar { 184f7e310deSShri Abhyankar PetscViewer v; 185f7e310deSShri Abhyankar PetscPatchDefaultViewers_Fortran(vin,v); 186112444f4SShri Abhyankar *ierr = MatLoad(*mat,v); 187f7e310deSShri Abhyankar } 188f7e310deSShri Abhyankar 189f4e70085SSatish Balay void PETSC_STDCALL matgetarray_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr) 190f4e70085SSatish Balay { 191f4e70085SSatish Balay PetscScalar *mm; 192f4e70085SSatish Balay PetscInt m,n; 193f4e70085SSatish Balay 194f4e70085SSatish Balay *ierr = MatGetArray(*mat,&mm); if (*ierr) return; 195f4e70085SSatish Balay *ierr = MatGetSize(*mat,&m,&n); if (*ierr) return; 196f91d1997SBarry Smith *ierr = PetscScalarAddressToFortran((PetscObject)*mat,1,fa,mm,m*n,ia); if (*ierr) return; 197f4e70085SSatish Balay } 198f4e70085SSatish Balay 199f4e70085SSatish Balay void PETSC_STDCALL matrestorearray_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr) 200f4e70085SSatish Balay { 201f4e70085SSatish Balay PetscScalar *lx; 202f4e70085SSatish Balay PetscInt m,n; 203f4e70085SSatish Balay 204f4e70085SSatish Balay *ierr = MatGetSize(*mat,&m,&n); if (*ierr) return; 205f4e70085SSatish Balay *ierr = PetscScalarAddressFromFortran((PetscObject)*mat,fa,*ia,m*n,&lx);if (*ierr) return; 206f4e70085SSatish Balay *ierr = MatRestoreArray(*mat,&lx);if (*ierr) return; 207f4e70085SSatish Balay } 208f4e70085SSatish Balay 20935bd34faSBarry Smith void PETSC_STDCALL matfactorgetsolverpackage_(Mat *mat,CHAR name PETSC_MIXED_LEN(len),PetscErrorCode *ierr PETSC_END_LEN(len)) 21035bd34faSBarry Smith { 21135bd34faSBarry Smith const char *tname; 21235bd34faSBarry Smith 21335bd34faSBarry Smith *ierr = MatFactorGetSolverPackage(*mat,&tname);if (*ierr) return; 21435bd34faSBarry Smith if (name != PETSC_NULL_CHARACTER_Fortran) { 21535bd34faSBarry Smith *ierr = PetscStrncpy(name,tname,len);if (*ierr) return; 21635bd34faSBarry Smith } 21735bd34faSBarry Smith FIXRETURNCHAR(PETSC_TRUE,name,len); 21835bd34faSBarry Smith } 21935bd34faSBarry Smith 2209be81726SHong Zhang void PETSC_STDCALL matgetfactor_(Mat *mat,CHAR outtype PETSC_MIXED_LEN(len),MatFactorType *ftype,Mat *M,PetscErrorCode *ierr PETSC_END_LEN(len)) 2215dffd610SBarry Smith { 2225dffd610SBarry Smith char *t; 2235dffd610SBarry Smith FIXCHAR(outtype,len,t); 2249be81726SHong Zhang *ierr = MatGetFactor(*mat,t,*ftype,M); 2255dffd610SBarry Smith FREECHAR(outtype,t); 2265dffd610SBarry Smith } 2275dffd610SBarry Smith 228f4e70085SSatish Balay void PETSC_STDCALL matconvert_(Mat *mat,CHAR outtype PETSC_MIXED_LEN(len),MatReuse *reuse,Mat *M,PetscErrorCode *ierr PETSC_END_LEN(len)) 229f4e70085SSatish Balay { 230f4e70085SSatish Balay char *t; 231f4e70085SSatish Balay FIXCHAR(outtype,len,t); 232f4e70085SSatish Balay *ierr = MatConvert(*mat,t,*reuse,M); 233f4e70085SSatish Balay FREECHAR(outtype,t); 234f4e70085SSatish Balay } 235f4e70085SSatish Balay 236f4e70085SSatish Balay /* 237f4e70085SSatish Balay MatGetSubmatrices() is slightly different from C since the 238f4e70085SSatish Balay Fortran provides the array to hold the submatrix objects,while in C that 239f4e70085SSatish Balay array is allocated by the MatGetSubmatrices() 240f4e70085SSatish Balay */ 241f4e70085SSatish Balay void PETSC_STDCALL matgetsubmatrices_(Mat *mat,PetscInt *n,IS *isrow,IS *iscol,MatReuse *scall,Mat *smat,PetscErrorCode *ierr) 242f4e70085SSatish Balay { 243f4e70085SSatish Balay Mat *lsmat; 244f4e70085SSatish Balay PetscInt i; 245f4e70085SSatish Balay 246f4e70085SSatish Balay if (*scall == MAT_INITIAL_MATRIX) { 247f4e70085SSatish Balay *ierr = MatGetSubMatrices(*mat,*n,isrow,iscol,*scall,&lsmat); 248f4e70085SSatish Balay for (i=0; i<*n; i++) { 249f4e70085SSatish Balay smat[i] = lsmat[i]; 250f4e70085SSatish Balay } 251f4e70085SSatish Balay *ierr = PetscFree(lsmat); 252f4e70085SSatish Balay } else { 253f4e70085SSatish Balay *ierr = MatGetSubMatrices(*mat,*n,isrow,iscol,*scall,&smat); 254f4e70085SSatish Balay } 255f4e70085SSatish Balay } 256f4e70085SSatish Balay 2577d6bfa3bSBarry Smith /* 2587d6bfa3bSBarry Smith MatDestroyMatrices() is slightly different from C since the 2597d6bfa3bSBarry Smith Fortran provides the array to hold the submatrix objects,while in C that 2607d6bfa3bSBarry Smith array is allocated by the MatGetSubmatrices() 2617d6bfa3bSBarry Smith */ 2627d6bfa3bSBarry Smith void PETSC_STDCALL matdestroymatrices_(Mat *mat,PetscInt *n,Mat *smat,PetscErrorCode *ierr) 2637d6bfa3bSBarry Smith { 2647d6bfa3bSBarry Smith PetscInt i; 2657d6bfa3bSBarry Smith 2667d6bfa3bSBarry Smith for (i=0; i<*n; i++) { 2676bf464f9SBarry Smith *ierr = MatDestroy(&smat[i]);if (*ierr) return; 2687d6bfa3bSBarry Smith } 2697d6bfa3bSBarry Smith } 2707d6bfa3bSBarry Smith 27117ede90eSSatish Balay void PETSC_STDCALL matzerorowscolumns_(Mat *mat,PetscInt *numRows,PetscInt *rows,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr) 27217ede90eSSatish Balay { 27317ede90eSSatish Balay CHKFORTRANNULLOBJECTDEREFERENCE(x); 27417ede90eSSatish Balay CHKFORTRANNULLOBJECTDEREFERENCE(b); 27517ede90eSSatish Balay *ierr = MatZeroRowsColumns(*mat,*numRows,rows,*diag,*x,*b); 27617ede90eSSatish Balay } 27717ede90eSSatish Balay 27817ede90eSSatish Balay void PETSC_STDCALL matzerorowscolumnsis_(Mat *mat,IS *is,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr) 27917ede90eSSatish Balay { 28017ede90eSSatish Balay CHKFORTRANNULLOBJECTDEREFERENCE(x); 28117ede90eSSatish Balay CHKFORTRANNULLOBJECTDEREFERENCE(b); 28217ede90eSSatish Balay *ierr = MatZeroRowsColumnsIS(*mat,*is,*diag,*x,*b); 28317ede90eSSatish Balay } 28417ede90eSSatish Balay 28517ede90eSSatish Balay void PETSC_STDCALL matzerorowsstencil_(Mat *mat,PetscInt *numRows,MatStencil *rows,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr) 28617ede90eSSatish Balay { 28717ede90eSSatish Balay CHKFORTRANNULLOBJECTDEREFERENCE(x); 28817ede90eSSatish Balay CHKFORTRANNULLOBJECTDEREFERENCE(b); 28917ede90eSSatish Balay *ierr = MatZeroRowsStencil(*mat,*numRows,rows,*diag,*x,*b); 29017ede90eSSatish Balay } 29117ede90eSSatish Balay 2922b40b63fSBarry Smith void PETSC_STDCALL matzerorows_(Mat *mat,PetscInt *numRows,PetscInt *rows,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr) 293f4e70085SSatish Balay { 2942b40b63fSBarry Smith CHKFORTRANNULLOBJECTDEREFERENCE(x); 2952b40b63fSBarry Smith CHKFORTRANNULLOBJECTDEREFERENCE(b); 2962b40b63fSBarry Smith *ierr = MatZeroRows(*mat,*numRows,rows,*diag,*x,*b); 297f4e70085SSatish Balay } 298f4e70085SSatish Balay 2992b40b63fSBarry Smith void PETSC_STDCALL matzerorowsis_(Mat *mat,IS *is,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr) 300f4e70085SSatish Balay { 3012b40b63fSBarry Smith CHKFORTRANNULLOBJECTDEREFERENCE(x); 3022b40b63fSBarry Smith CHKFORTRANNULLOBJECTDEREFERENCE(b); 3032b40b63fSBarry Smith *ierr = MatZeroRowsIS(*mat,*is,*diag,*x,*b); 304f4e70085SSatish Balay } 305f4e70085SSatish Balay 3062b40b63fSBarry Smith void PETSC_STDCALL matzerorowslocal_(Mat *mat,PetscInt *numRows,PetscInt *rows,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr) 307f4e70085SSatish Balay { 3082b40b63fSBarry Smith CHKFORTRANNULLOBJECTDEREFERENCE(x); 3092b40b63fSBarry Smith CHKFORTRANNULLOBJECTDEREFERENCE(b); 3102b40b63fSBarry Smith *ierr = MatZeroRowsLocal(*mat,*numRows,rows,*diag,*x,*b); 311f4e70085SSatish Balay } 312f4e70085SSatish Balay 3132b40b63fSBarry Smith void PETSC_STDCALL matzerorowslocalis_(Mat *mat,IS *is,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr) 314f4e70085SSatish Balay { 3152b40b63fSBarry Smith CHKFORTRANNULLOBJECTDEREFERENCE(x); 3162b40b63fSBarry Smith CHKFORTRANNULLOBJECTDEREFERENCE(b); 3172b40b63fSBarry Smith *ierr = MatZeroRowsLocalIS(*mat,*is,*diag,*x,*b); 318f4e70085SSatish Balay } 319f4e70085SSatish Balay 32017ede90eSSatish Balay void PETSC_STDCALL matzerorowscolumnslocal_(Mat *mat,PetscInt *numRows,PetscInt *rows,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr) 32117ede90eSSatish Balay { 32217ede90eSSatish Balay CHKFORTRANNULLOBJECTDEREFERENCE(x); 32317ede90eSSatish Balay CHKFORTRANNULLOBJECTDEREFERENCE(b); 32417ede90eSSatish Balay *ierr = MatZeroRowsColumnsLocal(*mat,*numRows,rows,*diag,*x,*b); 32517ede90eSSatish Balay } 32617ede90eSSatish Balay 32717ede90eSSatish Balay void PETSC_STDCALL matzerorowscolumnslocalis_(Mat *mat,IS *is,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr) 32817ede90eSSatish Balay { 32917ede90eSSatish Balay CHKFORTRANNULLOBJECTDEREFERENCE(x); 33017ede90eSSatish Balay CHKFORTRANNULLOBJECTDEREFERENCE(b); 33117ede90eSSatish Balay *ierr = MatZeroRowsColumnsLocalIS(*mat,*is,*diag,*x,*b); 33217ede90eSSatish Balay } 3331eea217eSSatish Balay 3342b40b63fSBarry Smith void PETSC_STDCALL matsetoptionsprefix_(Mat *mat,CHAR prefix PETSC_MIXED_LEN(len),PetscErrorCode *ierr PETSC_END_LEN(len)) 3351eea217eSSatish Balay { 3361eea217eSSatish Balay char *t; 3371eea217eSSatish Balay 3381eea217eSSatish Balay FIXCHAR(prefix,len,t); 3391eea217eSSatish Balay *ierr = MatSetOptionsPrefix(*mat,t); 3401eea217eSSatish Balay FREECHAR(prefix,t); 3411eea217eSSatish Balay } 3421eea217eSSatish Balay 343812c3f48SMatthew Knepley void PETSC_STDCALL matnullspaceremove_(MatNullSpace *sp,Vec *vec,Vec *out,PetscErrorCode *ierr) 344812c3f48SMatthew Knepley { 345812c3f48SMatthew Knepley CHKFORTRANNULLOBJECT(out); 346812c3f48SMatthew Knepley *ierr = MatNullSpaceRemove(*sp,*vec,out); 347812c3f48SMatthew Knepley } 3481eea217eSSatish Balay 3495ba43861SSatish Balay void PETSC_STDCALL matgetinfo_(Mat *mat,MatInfoType *flag,MatInfo *info, int *__ierr ) 3505ba43861SSatish Balay { 3515ba43861SSatish Balay *__ierr = MatGetInfo(*mat,*flag,info); 3525ba43861SSatish Balay } 3535ba43861SSatish Balay 35422688b47SSatish Balay void PETSC_STDCALL matlufactor_(Mat *mat,IS *row,IS *col, MatFactorInfo *info, int *__ierr ) 35522688b47SSatish Balay { 35622688b47SSatish Balay *__ierr = MatLUFactor(*mat,*row,*col,info); 35722688b47SSatish Balay } 35822688b47SSatish Balay 35922688b47SSatish Balay void PETSC_STDCALL matilufactor_(Mat *mat,IS *row,IS *col, MatFactorInfo *info, int *__ierr ) 36022688b47SSatish Balay { 36122688b47SSatish Balay *__ierr = MatILUFactor(*mat,*row,*col,info); 36222688b47SSatish Balay } 36322688b47SSatish Balay 36422688b47SSatish Balay void PETSC_STDCALL matlufactorsymbolic_(Mat *fact,Mat *mat,IS *row,IS *col, MatFactorInfo *info, int *__ierr ) 36522688b47SSatish Balay { 36622688b47SSatish Balay *__ierr = MatLUFactorSymbolic(*fact,*mat,*row,*col,info); 36722688b47SSatish Balay } 36822688b47SSatish Balay 36922688b47SSatish Balay void PETSC_STDCALL matlufactornumeric_(Mat *fact,Mat *mat, MatFactorInfo *info, int *__ierr ) 37022688b47SSatish Balay { 37122688b47SSatish Balay *__ierr = MatLUFactorNumeric(*fact,*mat,info); 37222688b47SSatish Balay } 37322688b47SSatish Balay 37422688b47SSatish Balay void PETSC_STDCALL matcholeskyfactor_(Mat *mat,IS *perm, MatFactorInfo *info, int *__ierr ) 37522688b47SSatish Balay { 37622688b47SSatish Balay *__ierr = MatCholeskyFactor(*mat,*perm,info); 37722688b47SSatish Balay } 37822688b47SSatish Balay 37922688b47SSatish Balay void PETSC_STDCALL matcholeskyfactorsymbolic_(Mat *fact,Mat *mat,IS *perm, MatFactorInfo *info, int *__ierr ) 38022688b47SSatish Balay { 38122688b47SSatish Balay *__ierr = MatCholeskyFactorSymbolic(*fact,*mat,*perm,info); 38222688b47SSatish Balay } 38322688b47SSatish Balay 38422688b47SSatish Balay void PETSC_STDCALL matcholeskyfactornumeric_(Mat *fact,Mat *mat, MatFactorInfo *info, int *__ierr ) 38522688b47SSatish Balay { 38622688b47SSatish Balay *__ierr = MatCholeskyFactorNumeric(*fact,*mat,info); 38722688b47SSatish Balay } 38822688b47SSatish Balay 38922688b47SSatish Balay void PETSC_STDCALL matilufactorsymbolic_(Mat *fact,Mat *mat,IS *row,IS *col, MatFactorInfo *info, int *__ierr ) 39022688b47SSatish Balay { 39122688b47SSatish Balay *__ierr = MatILUFactorSymbolic(*fact,*mat,*row,*col,info); 39222688b47SSatish Balay } 39322688b47SSatish Balay 39422688b47SSatish Balay void PETSC_STDCALL maticcfactorsymbolic_(Mat *fact,Mat *mat,IS *perm, MatFactorInfo *info, int *__ierr ) 39522688b47SSatish Balay { 39622688b47SSatish Balay *__ierr = MatICCFactorSymbolic(*fact,*mat,*perm,info); 39722688b47SSatish Balay } 39822688b47SSatish Balay 39922688b47SSatish Balay void PETSC_STDCALL maticcfactor_(Mat *mat,IS *row, MatFactorInfo* info, int *__ierr ) 40022688b47SSatish Balay { 40122688b47SSatish Balay *__ierr = MatICCFactor(*mat,*row,info); 40222688b47SSatish Balay } 40322688b47SSatish Balay 40422688b47SSatish Balay void PETSC_STDCALL matfactorinfoinitialize_(MatFactorInfo *info, int *__ierr ) 40522688b47SSatish Balay { 40622688b47SSatish Balay *__ierr = MatFactorInfoInitialize(info); 40722688b47SSatish Balay } 40822688b47SSatish Balay 409f4e70085SSatish Balay EXTERN_C_END 410