1b45d2f2cSJed 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 21*d25a37e1SJed Brown #define matzerorowscolumnsstencil_ MATZEROROWSCOLUMNSSTENCIL 22f4e70085SSatish Balay #define matzerorows_ MATZEROROWS 23f4e70085SSatish Balay #define matzerorowsis_ MATZEROROWSIS 24f4e70085SSatish Balay #define matzerorowslocal_ MATZEROROWSLOCAL 25f4e70085SSatish Balay #define matzerorowslocalis_ MATZEROROWSLOCALIS 2617ede90eSSatish Balay #define matzerorowscolumnslocal_ MATZEROROWSCOLUMNSLOCAL 2717ede90eSSatish Balay #define matzerorowscolumnslocalis_ MATZEROROWSCOLUMNSLOCALIS 281eea217eSSatish Balay #define matsetoptionsprefix_ MATSETOPTIONSPREFIX 297c54600cSBarry Smith #define matgetvecs_ MATGETVECS 30c9d5ca86SBarry Smith #define matnullspaceremove_ MATNULLSPACEREMOVE 315ba43861SSatish Balay #define matgetinfo_ MATGETINFO 3222688b47SSatish Balay #define matlufactor_ MATLUFACTOR 3322688b47SSatish Balay #define matilufactor_ MATILUFACTOR 3422688b47SSatish Balay #define matlufactorsymbolic_ MATLUFACTORSYMBOLIC 3522688b47SSatish Balay #define matlufactornumeric_ MATLUFACTORNUMERIC 3622688b47SSatish Balay #define matcholeskyfactor_ MATCHOLESKYFACTOR 3722688b47SSatish Balay #define matcholeskyfactorsymbolic_ MATCHOLESKYFACTORSYMBOLIC 3822688b47SSatish Balay #define matcholeskyfactornumeric_ MATCHOLESKYFACTORNUMERIC 3922688b47SSatish Balay #define matilufactorsymbolic_ MATILUFACTORSYMBOLIC 4022688b47SSatish Balay #define maticcfactorsymbolic_ MATICCFACTORSYMBOLIC 4122688b47SSatish Balay #define maticcfactor_ MATICCFACTOR 4222688b47SSatish Balay #define matfactorinfoinitialize_ MATFACTORINFOINITIALIZE 43b22b330cSBarry Smith #define matnullspacesetfunction_ MATNULLSPACESETFUNCTION 440905d9aaSJed Brown #define matfindnonzerorows_ MATFINDNONZEROROWS 45f4e70085SSatish Balay #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE) 467d6bfa3bSBarry Smith #define matdestroymatrices_ matdestroymatrices_ 475dffd610SBarry Smith #define matgetfactor_ matgetfactor 4835bd34faSBarry Smith #define matfactorgetsolverpackage_ matfactorgetsolverpackage 497c54600cSBarry Smith #define matgetvecs_ matgetvecs 50f4e70085SSatish Balay #define matgetrowij_ matgetrowij 51f4e70085SSatish Balay #define matrestorerowij_ matrestorerowij 52f4e70085SSatish Balay #define matgetrow_ matgetrow 53f4e70085SSatish Balay #define matrestorerow_ matrestorerow 54f4e70085SSatish Balay #define matview_ matview 55f7e310deSShri Abhyankar #define matload_ matload 56f4e70085SSatish Balay #define matgetarray_ matgetarray 57f4e70085SSatish Balay #define matrestorearray_ matrestorearray 58f4e70085SSatish Balay #define matconvert_ matconvert 59f4e70085SSatish Balay #define matgetsubmatrices_ matgetsubmatrices 6017ede90eSSatish Balay #define matzerorowscolumns_ matzerorowscolumns 6117ede90eSSatish Balay #define matzerorowscolumnsis_ matzerorowscolumnsis 6217ede90eSSatish Balay #define matzerorowsstencil_ matzerorowsstencil 63*d25a37e1SJed Brown #define matzerorowscolumnsstencil_ matzerorowscolumnsstencil 64f4e70085SSatish Balay #define matzerorows_ matzerorows 65f4e70085SSatish Balay #define matzerorowsis_ matzerorowsis 66f4e70085SSatish Balay #define matzerorowslocal_ matzerorowslocal 67f4e70085SSatish Balay #define matzerorowslocalis_ matzerorowslocalis 6817ede90eSSatish Balay #define matzerorowscolumnslocal_ matzerorowscolumnslocal 6917ede90eSSatish Balay #define matzerorowscolumnslocalis_ matzerorowscolumnslocalis 701eea217eSSatish Balay #define matsetoptionsprefix_ matsetoptionsprefix 71812c3f48SMatthew Knepley #define matnullspaceremove_ matnullspaceremove 725ba43861SSatish Balay #define matgetinfo_ matgetinfo 7322688b47SSatish Balay #define matlufactor_ matlufactor 7422688b47SSatish Balay #define matilufactor_ matilufactor 7522688b47SSatish Balay #define matlufactorsymbolic_ matlufactorsymbolic 7622688b47SSatish Balay #define matlufactornumeric_ matlufactornumeric 7722688b47SSatish Balay #define matcholeskyfactor_ matcholeskyfactor 7822688b47SSatish Balay #define matcholeskyfactorsymbolic_ matcholeskyfactorsymbolic 7922688b47SSatish Balay #define matcholeskyfactornumeric_ matcholeskyfactornumeric 8022688b47SSatish Balay #define matilufactorsymbolic_ matilufactorsymbolic 8122688b47SSatish Balay #define maticcfactorsymbolic_ maticcfactorsymbolic 8222688b47SSatish Balay #define maticcfactor_ maticcfactor 8322688b47SSatish Balay #define matfactorinfoinitialize_ matfactorinfoinitialize 84b22b330cSBarry Smith #define matnullspacesetfunction_ matnullspacesetfunction 850905d9aaSJed Brown #define matfindnonzerorows_ matfindnonzerorows 86f4e70085SSatish Balay #endif 87f4e70085SSatish Balay 88f4e70085SSatish Balay EXTERN_C_BEGIN 89f4e70085SSatish Balay 90b22b330cSBarry Smith static PetscErrorCode ournullfunction(MatNullSpace sp,Vec x,void *ctx) 91b22b330cSBarry Smith { 92b22b330cSBarry Smith PetscErrorCode ierr = 0; 93b22b330cSBarry Smith (*(void (PETSC_STDCALL *)(MatNullSpace*,Vec*,void*,PetscErrorCode*))(((PetscObject)sp)->fortran_func_pointers[0]))(&sp,&x,ctx,&ierr);CHKERRQ(ierr); 94b22b330cSBarry Smith return 0; 95b22b330cSBarry Smith } 96b22b330cSBarry Smith 97b22b330cSBarry Smith void PETSC_STDCALL matnullspacesetfunction_(MatNullSpace *sp, PetscErrorCode (*rem)(MatNullSpace,Vec,void*),void *ctx,PetscErrorCode *ierr) 98b22b330cSBarry Smith { 99b22b330cSBarry Smith PetscObjectAllocateFortranPointers(*sp,1); 100b22b330cSBarry Smith ((PetscObject)*sp)->fortran_func_pointers[0] = (PetscVoidFunction)rem; 101b22b330cSBarry Smith *ierr = MatNullSpaceSetFunction(*sp,ournullfunction,ctx); 102b22b330cSBarry Smith } 103b22b330cSBarry Smith 1047c54600cSBarry Smith void PETSC_STDCALL matgetvecs_(Mat *mat,Vec *right,Vec *left, int *ierr ) 1057c54600cSBarry Smith { 1067c54600cSBarry Smith CHKFORTRANNULLOBJECT(right); 1077c54600cSBarry Smith CHKFORTRANNULLOBJECT(left); 1087c54600cSBarry Smith *ierr = MatGetVecs(*mat,right,left); 1097c54600cSBarry Smith } 1107c54600cSBarry Smith 111ace3abfcSBarry Smith void PETSC_STDCALL matgetrowij_(Mat *B,PetscInt *shift,PetscBool *sym,PetscBool *blockcompressed,PetscInt *n,PetscInt *ia,size_t *iia, 112ace3abfcSBarry Smith PetscInt *ja,size_t *jja,PetscBool *done,PetscErrorCode *ierr) 113f4e70085SSatish Balay { 114f4e70085SSatish Balay PetscInt *IA,*JA; 1158f7157efSSatish Balay *ierr = MatGetRowIJ(*B,*shift,*sym,*blockcompressed,n,&IA,&JA,done);if (*ierr) return; 116f4e70085SSatish Balay *iia = PetscIntAddressToFortran(ia,IA); 117f4e70085SSatish Balay *jja = PetscIntAddressToFortran(ja,JA); 118f4e70085SSatish Balay } 119f4e70085SSatish Balay 120ace3abfcSBarry Smith void PETSC_STDCALL matrestorerowij_(Mat *B,PetscInt *shift,PetscBool *sym,PetscBool *blockcompressed, PetscInt *n,PetscInt *ia,size_t *iia, 121ace3abfcSBarry Smith PetscInt *ja,size_t *jja,PetscBool *done,PetscErrorCode *ierr) 122f4e70085SSatish Balay { 123f4e70085SSatish Balay PetscInt *IA = PetscIntAddressFromFortran(ia,*iia),*JA = PetscIntAddressFromFortran(ja,*jja); 1248f7157efSSatish Balay *ierr = MatRestoreRowIJ(*B,*shift,*sym,*blockcompressed,n,&IA,&JA,done); 125f4e70085SSatish Balay } 126f4e70085SSatish Balay 127f4e70085SSatish Balay /* 128f4e70085SSatish Balay This is a poor way of storing the column and value pointers 129f4e70085SSatish Balay generated by MatGetRow() to be returned with MatRestoreRow() 130f4e70085SSatish Balay but there is not natural,good place else to store them. Hence 131f4e70085SSatish Balay Fortran programmers can only have one outstanding MatGetRows() 132f4e70085SSatish Balay at a time. 133f4e70085SSatish Balay */ 134f4e70085SSatish Balay static PetscErrorCode matgetrowactive = 0; 135f4e70085SSatish Balay static const PetscInt *my_ocols = 0; 136f4e70085SSatish Balay static const PetscScalar *my_ovals = 0; 137f4e70085SSatish Balay 138f4e70085SSatish Balay void PETSC_STDCALL matgetrow_(Mat *mat,PetscInt *row,PetscInt *ncols,PetscInt *cols,PetscScalar *vals,PetscErrorCode *ierr) 139f4e70085SSatish Balay { 140f4e70085SSatish Balay const PetscInt **oocols = &my_ocols; 141f4e70085SSatish Balay const PetscScalar **oovals = &my_ovals; 142f4e70085SSatish Balay 143f4e70085SSatish Balay if (matgetrowactive) { 144d736bfebSBarry Smith PetscError(PETSC_COMM_SELF,__LINE__,"MatGetRow_Fortran",__FILE__,__SDIR__,PETSC_ERR_ARG_WRONGSTATE,PETSC_ERROR_INITIAL, 145f4e70085SSatish Balay "Cannot have two MatGetRow() active simultaneously\n\ 146f4e70085SSatish Balay call MatRestoreRow() before calling MatGetRow() a second time"); 147f4e70085SSatish Balay *ierr = 1; 148f4e70085SSatish Balay return; 149f4e70085SSatish Balay } 150f4e70085SSatish Balay 151f4e70085SSatish Balay CHKFORTRANNULLINTEGER(cols); if (!cols) oocols = PETSC_NULL; 152f4e70085SSatish Balay CHKFORTRANNULLSCALAR(vals); if (!vals) oovals = PETSC_NULL; 153f4e70085SSatish Balay 154f4e70085SSatish Balay *ierr = MatGetRow(*mat,*row,ncols,oocols,oovals); 155f4e70085SSatish Balay if (*ierr) return; 156f4e70085SSatish Balay 157f4e70085SSatish Balay if (oocols) { *ierr = PetscMemcpy(cols,my_ocols,(*ncols)*sizeof(PetscInt)); if (*ierr) return;} 158f4e70085SSatish Balay if (oovals) { *ierr = PetscMemcpy(vals,my_ovals,(*ncols)*sizeof(PetscScalar)); if (*ierr) return; } 159f4e70085SSatish Balay matgetrowactive = 1; 160f4e70085SSatish Balay } 161f4e70085SSatish Balay 162f4e70085SSatish Balay void PETSC_STDCALL matrestorerow_(Mat *mat,PetscInt *row,PetscInt *ncols,PetscInt *cols,PetscScalar *vals,PetscErrorCode *ierr) 163f4e70085SSatish Balay { 164f4e70085SSatish Balay const PetscInt **oocols = &my_ocols; 165f4e70085SSatish Balay const PetscScalar **oovals = &my_ovals; 166f4e70085SSatish Balay if (!matgetrowactive) { 167d736bfebSBarry Smith PetscError(PETSC_COMM_SELF,__LINE__,"MatRestoreRow_Fortran",__FILE__,__SDIR__,PETSC_ERR_ARG_WRONGSTATE,PETSC_ERROR_INITIAL, 168f4e70085SSatish Balay "Must call MatGetRow() first"); 169f4e70085SSatish Balay *ierr = 1; 170f4e70085SSatish Balay return; 171f4e70085SSatish Balay } 172f4e70085SSatish Balay CHKFORTRANNULLINTEGER(cols); if (!cols) oocols = PETSC_NULL; 173f4e70085SSatish Balay CHKFORTRANNULLSCALAR(vals); if (!vals) oovals = PETSC_NULL; 174f4e70085SSatish Balay 175f4e70085SSatish Balay *ierr = MatRestoreRow(*mat,*row,ncols,oocols,oovals); 176f4e70085SSatish Balay matgetrowactive = 0; 177f4e70085SSatish Balay } 178f4e70085SSatish Balay 179f4e70085SSatish Balay void PETSC_STDCALL matview_(Mat *mat,PetscViewer *vin,PetscErrorCode *ierr) 180f4e70085SSatish Balay { 181f4e70085SSatish Balay PetscViewer v; 182f4e70085SSatish Balay PetscPatchDefaultViewers_Fortran(vin,v); 183f4e70085SSatish Balay *ierr = MatView(*mat,v); 184f4e70085SSatish Balay } 185f4e70085SSatish Balay 186112444f4SShri Abhyankar void PETSC_STDCALL matload_(Mat *mat,PetscViewer *vin,PetscErrorCode *ierr) 187f7e310deSShri Abhyankar { 188f7e310deSShri Abhyankar PetscViewer v; 189f7e310deSShri Abhyankar PetscPatchDefaultViewers_Fortran(vin,v); 190112444f4SShri Abhyankar *ierr = MatLoad(*mat,v); 191f7e310deSShri Abhyankar } 192f7e310deSShri Abhyankar 193f4e70085SSatish Balay void PETSC_STDCALL matgetarray_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr) 194f4e70085SSatish Balay { 195f4e70085SSatish Balay PetscScalar *mm; 196f4e70085SSatish Balay PetscInt m,n; 197f4e70085SSatish Balay 198f4e70085SSatish Balay *ierr = MatGetArray(*mat,&mm); if (*ierr) return; 199f4e70085SSatish Balay *ierr = MatGetSize(*mat,&m,&n); if (*ierr) return; 200f91d1997SBarry Smith *ierr = PetscScalarAddressToFortran((PetscObject)*mat,1,fa,mm,m*n,ia); if (*ierr) return; 201f4e70085SSatish Balay } 202f4e70085SSatish Balay 203f4e70085SSatish Balay void PETSC_STDCALL matrestorearray_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr) 204f4e70085SSatish Balay { 205f4e70085SSatish Balay PetscScalar *lx; 206f4e70085SSatish Balay PetscInt m,n; 207f4e70085SSatish Balay 208f4e70085SSatish Balay *ierr = MatGetSize(*mat,&m,&n); if (*ierr) return; 209f4e70085SSatish Balay *ierr = PetscScalarAddressFromFortran((PetscObject)*mat,fa,*ia,m*n,&lx);if (*ierr) return; 210f4e70085SSatish Balay *ierr = MatRestoreArray(*mat,&lx);if (*ierr) return; 211f4e70085SSatish Balay } 212f4e70085SSatish Balay 21335bd34faSBarry Smith void PETSC_STDCALL matfactorgetsolverpackage_(Mat *mat,CHAR name PETSC_MIXED_LEN(len),PetscErrorCode *ierr PETSC_END_LEN(len)) 21435bd34faSBarry Smith { 21535bd34faSBarry Smith const char *tname; 21635bd34faSBarry Smith 21735bd34faSBarry Smith *ierr = MatFactorGetSolverPackage(*mat,&tname);if (*ierr) return; 21835bd34faSBarry Smith if (name != PETSC_NULL_CHARACTER_Fortran) { 21935bd34faSBarry Smith *ierr = PetscStrncpy(name,tname,len);if (*ierr) return; 22035bd34faSBarry Smith } 22135bd34faSBarry Smith FIXRETURNCHAR(PETSC_TRUE,name,len); 22235bd34faSBarry Smith } 22335bd34faSBarry Smith 2249be81726SHong Zhang void PETSC_STDCALL matgetfactor_(Mat *mat,CHAR outtype PETSC_MIXED_LEN(len),MatFactorType *ftype,Mat *M,PetscErrorCode *ierr PETSC_END_LEN(len)) 2255dffd610SBarry Smith { 2265dffd610SBarry Smith char *t; 2275dffd610SBarry Smith FIXCHAR(outtype,len,t); 2289be81726SHong Zhang *ierr = MatGetFactor(*mat,t,*ftype,M); 2295dffd610SBarry Smith FREECHAR(outtype,t); 2305dffd610SBarry Smith } 2315dffd610SBarry Smith 232f4e70085SSatish Balay void PETSC_STDCALL matconvert_(Mat *mat,CHAR outtype PETSC_MIXED_LEN(len),MatReuse *reuse,Mat *M,PetscErrorCode *ierr PETSC_END_LEN(len)) 233f4e70085SSatish Balay { 234f4e70085SSatish Balay char *t; 235f4e70085SSatish Balay FIXCHAR(outtype,len,t); 236f4e70085SSatish Balay *ierr = MatConvert(*mat,t,*reuse,M); 237f4e70085SSatish Balay FREECHAR(outtype,t); 238f4e70085SSatish Balay } 239f4e70085SSatish Balay 240f4e70085SSatish Balay /* 241f4e70085SSatish Balay MatGetSubmatrices() is slightly different from C since the 242f4e70085SSatish Balay Fortran provides the array to hold the submatrix objects,while in C that 243f4e70085SSatish Balay array is allocated by the MatGetSubmatrices() 244f4e70085SSatish Balay */ 245f4e70085SSatish Balay void PETSC_STDCALL matgetsubmatrices_(Mat *mat,PetscInt *n,IS *isrow,IS *iscol,MatReuse *scall,Mat *smat,PetscErrorCode *ierr) 246f4e70085SSatish Balay { 247f4e70085SSatish Balay Mat *lsmat; 248f4e70085SSatish Balay PetscInt i; 249f4e70085SSatish Balay 250f4e70085SSatish Balay if (*scall == MAT_INITIAL_MATRIX) { 251f4e70085SSatish Balay *ierr = MatGetSubMatrices(*mat,*n,isrow,iscol,*scall,&lsmat); 252f4e70085SSatish Balay for (i=0; i<*n; i++) { 253f4e70085SSatish Balay smat[i] = lsmat[i]; 254f4e70085SSatish Balay } 255f4e70085SSatish Balay *ierr = PetscFree(lsmat); 256f4e70085SSatish Balay } else { 257f4e70085SSatish Balay *ierr = MatGetSubMatrices(*mat,*n,isrow,iscol,*scall,&smat); 258f4e70085SSatish Balay } 259f4e70085SSatish Balay } 260f4e70085SSatish Balay 2617d6bfa3bSBarry Smith /* 2627d6bfa3bSBarry Smith MatDestroyMatrices() is slightly different from C since the 2637d6bfa3bSBarry Smith Fortran provides the array to hold the submatrix objects,while in C that 2647d6bfa3bSBarry Smith array is allocated by the MatGetSubmatrices() 2657d6bfa3bSBarry Smith */ 2667d6bfa3bSBarry Smith void PETSC_STDCALL matdestroymatrices_(Mat *mat,PetscInt *n,Mat *smat,PetscErrorCode *ierr) 2677d6bfa3bSBarry Smith { 2687d6bfa3bSBarry Smith PetscInt i; 2697d6bfa3bSBarry Smith 2707d6bfa3bSBarry Smith for (i=0; i<*n; i++) { 2716bf464f9SBarry Smith *ierr = MatDestroy(&smat[i]);if (*ierr) return; 2727d6bfa3bSBarry Smith } 2737d6bfa3bSBarry Smith } 2747d6bfa3bSBarry Smith 27517ede90eSSatish Balay void PETSC_STDCALL matzerorowscolumns_(Mat *mat,PetscInt *numRows,PetscInt *rows,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr) 27617ede90eSSatish Balay { 27717ede90eSSatish Balay CHKFORTRANNULLOBJECTDEREFERENCE(x); 27817ede90eSSatish Balay CHKFORTRANNULLOBJECTDEREFERENCE(b); 27917ede90eSSatish Balay *ierr = MatZeroRowsColumns(*mat,*numRows,rows,*diag,*x,*b); 28017ede90eSSatish Balay } 28117ede90eSSatish Balay 28217ede90eSSatish Balay void PETSC_STDCALL matzerorowscolumnsis_(Mat *mat,IS *is,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr) 28317ede90eSSatish Balay { 28417ede90eSSatish Balay CHKFORTRANNULLOBJECTDEREFERENCE(x); 28517ede90eSSatish Balay CHKFORTRANNULLOBJECTDEREFERENCE(b); 28617ede90eSSatish Balay *ierr = MatZeroRowsColumnsIS(*mat,*is,*diag,*x,*b); 28717ede90eSSatish Balay } 28817ede90eSSatish Balay 28917ede90eSSatish Balay void PETSC_STDCALL matzerorowsstencil_(Mat *mat,PetscInt *numRows,MatStencil *rows,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr) 29017ede90eSSatish Balay { 29117ede90eSSatish Balay CHKFORTRANNULLOBJECTDEREFERENCE(x); 29217ede90eSSatish Balay CHKFORTRANNULLOBJECTDEREFERENCE(b); 29317ede90eSSatish Balay *ierr = MatZeroRowsStencil(*mat,*numRows,rows,*diag,*x,*b); 29417ede90eSSatish Balay } 29517ede90eSSatish Balay 296*d25a37e1SJed Brown void PETSC_STDCALL matzerorowscolumnsstencil_(Mat *mat,PetscInt *numRows,MatStencil *rows,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr) 297*d25a37e1SJed Brown { 298*d25a37e1SJed Brown CHKFORTRANNULLOBJECTDEREFERENCE(x); 299*d25a37e1SJed Brown CHKFORTRANNULLOBJECTDEREFERENCE(b); 300*d25a37e1SJed Brown *ierr = MatZeroRowsColumnsStencil(*mat,*numRows,rows,*diag,*x,*b); 301*d25a37e1SJed Brown } 302*d25a37e1SJed Brown 3032b40b63fSBarry Smith void PETSC_STDCALL matzerorows_(Mat *mat,PetscInt *numRows,PetscInt *rows,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr) 304f4e70085SSatish Balay { 3052b40b63fSBarry Smith CHKFORTRANNULLOBJECTDEREFERENCE(x); 3062b40b63fSBarry Smith CHKFORTRANNULLOBJECTDEREFERENCE(b); 3072b40b63fSBarry Smith *ierr = MatZeroRows(*mat,*numRows,rows,*diag,*x,*b); 308f4e70085SSatish Balay } 309f4e70085SSatish Balay 3102b40b63fSBarry Smith void PETSC_STDCALL matzerorowsis_(Mat *mat,IS *is,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr) 311f4e70085SSatish Balay { 3122b40b63fSBarry Smith CHKFORTRANNULLOBJECTDEREFERENCE(x); 3132b40b63fSBarry Smith CHKFORTRANNULLOBJECTDEREFERENCE(b); 3142b40b63fSBarry Smith *ierr = MatZeroRowsIS(*mat,*is,*diag,*x,*b); 315f4e70085SSatish Balay } 316f4e70085SSatish Balay 3172b40b63fSBarry Smith void PETSC_STDCALL matzerorowslocal_(Mat *mat,PetscInt *numRows,PetscInt *rows,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr) 318f4e70085SSatish Balay { 3192b40b63fSBarry Smith CHKFORTRANNULLOBJECTDEREFERENCE(x); 3202b40b63fSBarry Smith CHKFORTRANNULLOBJECTDEREFERENCE(b); 3212b40b63fSBarry Smith *ierr = MatZeroRowsLocal(*mat,*numRows,rows,*diag,*x,*b); 322f4e70085SSatish Balay } 323f4e70085SSatish Balay 3242b40b63fSBarry Smith void PETSC_STDCALL matzerorowslocalis_(Mat *mat,IS *is,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr) 325f4e70085SSatish Balay { 3262b40b63fSBarry Smith CHKFORTRANNULLOBJECTDEREFERENCE(x); 3272b40b63fSBarry Smith CHKFORTRANNULLOBJECTDEREFERENCE(b); 3282b40b63fSBarry Smith *ierr = MatZeroRowsLocalIS(*mat,*is,*diag,*x,*b); 329f4e70085SSatish Balay } 330f4e70085SSatish Balay 33117ede90eSSatish Balay void PETSC_STDCALL matzerorowscolumnslocal_(Mat *mat,PetscInt *numRows,PetscInt *rows,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr) 33217ede90eSSatish Balay { 33317ede90eSSatish Balay CHKFORTRANNULLOBJECTDEREFERENCE(x); 33417ede90eSSatish Balay CHKFORTRANNULLOBJECTDEREFERENCE(b); 33517ede90eSSatish Balay *ierr = MatZeroRowsColumnsLocal(*mat,*numRows,rows,*diag,*x,*b); 33617ede90eSSatish Balay } 33717ede90eSSatish Balay 33817ede90eSSatish Balay void PETSC_STDCALL matzerorowscolumnslocalis_(Mat *mat,IS *is,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr) 33917ede90eSSatish Balay { 34017ede90eSSatish Balay CHKFORTRANNULLOBJECTDEREFERENCE(x); 34117ede90eSSatish Balay CHKFORTRANNULLOBJECTDEREFERENCE(b); 34217ede90eSSatish Balay *ierr = MatZeroRowsColumnsLocalIS(*mat,*is,*diag,*x,*b); 34317ede90eSSatish Balay } 3441eea217eSSatish Balay 3452b40b63fSBarry Smith void PETSC_STDCALL matsetoptionsprefix_(Mat *mat,CHAR prefix PETSC_MIXED_LEN(len),PetscErrorCode *ierr PETSC_END_LEN(len)) 3461eea217eSSatish Balay { 3471eea217eSSatish Balay char *t; 3481eea217eSSatish Balay 3491eea217eSSatish Balay FIXCHAR(prefix,len,t); 3501eea217eSSatish Balay *ierr = MatSetOptionsPrefix(*mat,t); 3511eea217eSSatish Balay FREECHAR(prefix,t); 3521eea217eSSatish Balay } 3531eea217eSSatish Balay 354812c3f48SMatthew Knepley void PETSC_STDCALL matnullspaceremove_(MatNullSpace *sp,Vec *vec,Vec *out,PetscErrorCode *ierr) 355812c3f48SMatthew Knepley { 356812c3f48SMatthew Knepley CHKFORTRANNULLOBJECT(out); 357812c3f48SMatthew Knepley *ierr = MatNullSpaceRemove(*sp,*vec,out); 358812c3f48SMatthew Knepley } 3591eea217eSSatish Balay 3605ba43861SSatish Balay void PETSC_STDCALL matgetinfo_(Mat *mat,MatInfoType *flag,MatInfo *info, int *__ierr ) 3615ba43861SSatish Balay { 3625ba43861SSatish Balay *__ierr = MatGetInfo(*mat,*flag,info); 3635ba43861SSatish Balay } 3645ba43861SSatish Balay 36522688b47SSatish Balay void PETSC_STDCALL matlufactor_(Mat *mat,IS *row,IS *col, MatFactorInfo *info, int *__ierr ) 36622688b47SSatish Balay { 36722688b47SSatish Balay *__ierr = MatLUFactor(*mat,*row,*col,info); 36822688b47SSatish Balay } 36922688b47SSatish Balay 37022688b47SSatish Balay void PETSC_STDCALL matilufactor_(Mat *mat,IS *row,IS *col, MatFactorInfo *info, int *__ierr ) 37122688b47SSatish Balay { 37222688b47SSatish Balay *__ierr = MatILUFactor(*mat,*row,*col,info); 37322688b47SSatish Balay } 37422688b47SSatish Balay 37522688b47SSatish Balay void PETSC_STDCALL matlufactorsymbolic_(Mat *fact,Mat *mat,IS *row,IS *col, MatFactorInfo *info, int *__ierr ) 37622688b47SSatish Balay { 37722688b47SSatish Balay *__ierr = MatLUFactorSymbolic(*fact,*mat,*row,*col,info); 37822688b47SSatish Balay } 37922688b47SSatish Balay 38022688b47SSatish Balay void PETSC_STDCALL matlufactornumeric_(Mat *fact,Mat *mat, MatFactorInfo *info, int *__ierr ) 38122688b47SSatish Balay { 38222688b47SSatish Balay *__ierr = MatLUFactorNumeric(*fact,*mat,info); 38322688b47SSatish Balay } 38422688b47SSatish Balay 38522688b47SSatish Balay void PETSC_STDCALL matcholeskyfactor_(Mat *mat,IS *perm, MatFactorInfo *info, int *__ierr ) 38622688b47SSatish Balay { 38722688b47SSatish Balay *__ierr = MatCholeskyFactor(*mat,*perm,info); 38822688b47SSatish Balay } 38922688b47SSatish Balay 39022688b47SSatish Balay void PETSC_STDCALL matcholeskyfactorsymbolic_(Mat *fact,Mat *mat,IS *perm, MatFactorInfo *info, int *__ierr ) 39122688b47SSatish Balay { 39222688b47SSatish Balay *__ierr = MatCholeskyFactorSymbolic(*fact,*mat,*perm,info); 39322688b47SSatish Balay } 39422688b47SSatish Balay 39522688b47SSatish Balay void PETSC_STDCALL matcholeskyfactornumeric_(Mat *fact,Mat *mat, MatFactorInfo *info, int *__ierr ) 39622688b47SSatish Balay { 39722688b47SSatish Balay *__ierr = MatCholeskyFactorNumeric(*fact,*mat,info); 39822688b47SSatish Balay } 39922688b47SSatish Balay 40022688b47SSatish Balay void PETSC_STDCALL matilufactorsymbolic_(Mat *fact,Mat *mat,IS *row,IS *col, MatFactorInfo *info, int *__ierr ) 40122688b47SSatish Balay { 40222688b47SSatish Balay *__ierr = MatILUFactorSymbolic(*fact,*mat,*row,*col,info); 40322688b47SSatish Balay } 40422688b47SSatish Balay 40522688b47SSatish Balay void PETSC_STDCALL maticcfactorsymbolic_(Mat *fact,Mat *mat,IS *perm, MatFactorInfo *info, int *__ierr ) 40622688b47SSatish Balay { 40722688b47SSatish Balay *__ierr = MatICCFactorSymbolic(*fact,*mat,*perm,info); 40822688b47SSatish Balay } 40922688b47SSatish Balay 41022688b47SSatish Balay void PETSC_STDCALL maticcfactor_(Mat *mat,IS *row, MatFactorInfo* info, int *__ierr ) 41122688b47SSatish Balay { 41222688b47SSatish Balay *__ierr = MatICCFactor(*mat,*row,info); 41322688b47SSatish Balay } 41422688b47SSatish Balay 41522688b47SSatish Balay void PETSC_STDCALL matfactorinfoinitialize_(MatFactorInfo *info, int *__ierr ) 41622688b47SSatish Balay { 41722688b47SSatish Balay *__ierr = MatFactorInfoInitialize(info); 41822688b47SSatish Balay } 41922688b47SSatish Balay 420f4e70085SSatish Balay EXTERN_C_END 421