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 14*8c778c55SBarry Smith #define matseqaijgetarray_ MATSEQAIJGETARRAY 15*8c778c55SBarry Smith #define matseqaijrestorearray MATSEQAIJRESTOREARRAY 16*8c778c55SBarry Smith #define matdensegetarray_ MATDENSEGETARRAY 17*8c778c55SBarry Smith #define matdenserestorearray_ MATDENSERESTOREARRAY 18f4e70085SSatish Balay #define matconvert_ MATCONVERT 19f4e70085SSatish Balay #define matgetsubmatrices_ MATGETSUBMATRICES 2017ede90eSSatish Balay #define matzerorowscolumns_ MATZEROROWSCOLUMNS 2117ede90eSSatish Balay #define matzerorowscolumnsis_ MATZEROROWSCOLUMNSIS 2217ede90eSSatish Balay #define matzerorowsstencil_ MATZEROROWSSTENCIL 23f4e70085SSatish Balay #define matzerorows_ MATZEROROWS 24f4e70085SSatish Balay #define matzerorowsis_ MATZEROROWSIS 25f4e70085SSatish Balay #define matzerorowslocal_ MATZEROROWSLOCAL 26f4e70085SSatish Balay #define matzerorowslocalis_ MATZEROROWSLOCALIS 2717ede90eSSatish Balay #define matzerorowscolumnslocal_ MATZEROROWSCOLUMNSLOCAL 2817ede90eSSatish Balay #define matzerorowscolumnslocalis_ MATZEROROWSCOLUMNSLOCALIS 291eea217eSSatish Balay #define matsetoptionsprefix_ MATSETOPTIONSPREFIX 307c54600cSBarry Smith #define matgetvecs_ MATGETVECS 31c9d5ca86SBarry Smith #define matnullspaceremove_ MATNULLSPACEREMOVE 325ba43861SSatish Balay #define matgetinfo_ MATGETINFO 3322688b47SSatish Balay #define matlufactor_ MATLUFACTOR 3422688b47SSatish Balay #define matilufactor_ MATILUFACTOR 3522688b47SSatish Balay #define matlufactorsymbolic_ MATLUFACTORSYMBOLIC 3622688b47SSatish Balay #define matlufactornumeric_ MATLUFACTORNUMERIC 3722688b47SSatish Balay #define matcholeskyfactor_ MATCHOLESKYFACTOR 3822688b47SSatish Balay #define matcholeskyfactorsymbolic_ MATCHOLESKYFACTORSYMBOLIC 3922688b47SSatish Balay #define matcholeskyfactornumeric_ MATCHOLESKYFACTORNUMERIC 4022688b47SSatish Balay #define matilufactorsymbolic_ MATILUFACTORSYMBOLIC 4122688b47SSatish Balay #define maticcfactorsymbolic_ MATICCFACTORSYMBOLIC 4222688b47SSatish Balay #define maticcfactor_ MATICCFACTOR 4322688b47SSatish Balay #define matfactorinfoinitialize_ MATFACTORINFOINITIALIZE 44b22b330cSBarry Smith #define matnullspacesetfunction_ MATNULLSPACESETFUNCTION 450905d9aaSJed Brown #define matfindnonzerorows_ MATFINDNONZEROROWS 46f4e70085SSatish Balay #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE) 477d6bfa3bSBarry Smith #define matdestroymatrices_ matdestroymatrices_ 485dffd610SBarry Smith #define matgetfactor_ matgetfactor 4935bd34faSBarry Smith #define matfactorgetsolverpackage_ matfactorgetsolverpackage 507c54600cSBarry Smith #define matgetvecs_ matgetvecs 51f4e70085SSatish Balay #define matgetrowij_ matgetrowij 52f4e70085SSatish Balay #define matrestorerowij_ matrestorerowij 53f4e70085SSatish Balay #define matgetrow_ matgetrow 54f4e70085SSatish Balay #define matrestorerow_ matrestorerow 55f4e70085SSatish Balay #define matview_ matview 56f7e310deSShri Abhyankar #define matload_ matload 57*8c778c55SBarry Smith #define matseqaijgetarray_ matseqaijgetarray 58*8c778c55SBarry Smith #define matseqaijrestorearray_ matseqaijrestorearray 59*8c778c55SBarry Smith #define matdensegetarray_ matdensegetarray 60*8c778c55SBarry Smith #define matdenserestorearray_ matdenserestorearray 61f4e70085SSatish Balay #define matconvert_ matconvert 62f4e70085SSatish Balay #define matgetsubmatrices_ matgetsubmatrices 6317ede90eSSatish Balay #define matzerorowscolumns_ matzerorowscolumns 6417ede90eSSatish Balay #define matzerorowscolumnsis_ matzerorowscolumnsis 6517ede90eSSatish Balay #define matzerorowsstencil_ matzerorowsstencil 66f4e70085SSatish Balay #define matzerorows_ matzerorows 67f4e70085SSatish Balay #define matzerorowsis_ matzerorowsis 68f4e70085SSatish Balay #define matzerorowslocal_ matzerorowslocal 69f4e70085SSatish Balay #define matzerorowslocalis_ matzerorowslocalis 7017ede90eSSatish Balay #define matzerorowscolumnslocal_ matzerorowscolumnslocal 7117ede90eSSatish Balay #define matzerorowscolumnslocalis_ matzerorowscolumnslocalis 721eea217eSSatish Balay #define matsetoptionsprefix_ matsetoptionsprefix 73812c3f48SMatthew Knepley #define matnullspaceremove_ matnullspaceremove 745ba43861SSatish Balay #define matgetinfo_ matgetinfo 7522688b47SSatish Balay #define matlufactor_ matlufactor 7622688b47SSatish Balay #define matilufactor_ matilufactor 7722688b47SSatish Balay #define matlufactorsymbolic_ matlufactorsymbolic 7822688b47SSatish Balay #define matlufactornumeric_ matlufactornumeric 7922688b47SSatish Balay #define matcholeskyfactor_ matcholeskyfactor 8022688b47SSatish Balay #define matcholeskyfactorsymbolic_ matcholeskyfactorsymbolic 8122688b47SSatish Balay #define matcholeskyfactornumeric_ matcholeskyfactornumeric 8222688b47SSatish Balay #define matilufactorsymbolic_ matilufactorsymbolic 8322688b47SSatish Balay #define maticcfactorsymbolic_ maticcfactorsymbolic 8422688b47SSatish Balay #define maticcfactor_ maticcfactor 8522688b47SSatish Balay #define matfactorinfoinitialize_ matfactorinfoinitialize 86b22b330cSBarry Smith #define matnullspacesetfunction_ matnullspacesetfunction 870905d9aaSJed Brown #define matfindnonzerorows_ matfindnonzerorows 88f4e70085SSatish Balay #endif 89f4e70085SSatish Balay 90f4e70085SSatish Balay EXTERN_C_BEGIN 91f4e70085SSatish Balay 92b22b330cSBarry Smith static PetscErrorCode ournullfunction(MatNullSpace sp,Vec x,void *ctx) 93b22b330cSBarry Smith { 94b22b330cSBarry Smith PetscErrorCode ierr = 0; 95b22b330cSBarry Smith (*(void (PETSC_STDCALL *)(MatNullSpace*,Vec*,void*,PetscErrorCode*))(((PetscObject)sp)->fortran_func_pointers[0]))(&sp,&x,ctx,&ierr);CHKERRQ(ierr); 96b22b330cSBarry Smith return 0; 97b22b330cSBarry Smith } 98b22b330cSBarry Smith 99b22b330cSBarry Smith void PETSC_STDCALL matnullspacesetfunction_(MatNullSpace *sp, PetscErrorCode (*rem)(MatNullSpace,Vec,void*),void *ctx,PetscErrorCode *ierr) 100b22b330cSBarry Smith { 101b22b330cSBarry Smith PetscObjectAllocateFortranPointers(*sp,1); 102b22b330cSBarry Smith ((PetscObject)*sp)->fortran_func_pointers[0] = (PetscVoidFunction)rem; 103b22b330cSBarry Smith *ierr = MatNullSpaceSetFunction(*sp,ournullfunction,ctx); 104b22b330cSBarry Smith } 105b22b330cSBarry Smith 1067c54600cSBarry Smith void PETSC_STDCALL matgetvecs_(Mat *mat,Vec *right,Vec *left, int *ierr ) 1077c54600cSBarry Smith { 1087c54600cSBarry Smith CHKFORTRANNULLOBJECT(right); 1097c54600cSBarry Smith CHKFORTRANNULLOBJECT(left); 1107c54600cSBarry Smith *ierr = MatGetVecs(*mat,right,left); 1117c54600cSBarry Smith } 1127c54600cSBarry Smith 113ace3abfcSBarry Smith void PETSC_STDCALL matgetrowij_(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,*JA; 1178f7157efSSatish Balay *ierr = MatGetRowIJ(*B,*shift,*sym,*blockcompressed,n,&IA,&JA,done);if (*ierr) return; 118f4e70085SSatish Balay *iia = PetscIntAddressToFortran(ia,IA); 119f4e70085SSatish Balay *jja = PetscIntAddressToFortran(ja,JA); 120f4e70085SSatish Balay } 121f4e70085SSatish Balay 122ace3abfcSBarry Smith void PETSC_STDCALL matrestorerowij_(Mat *B,PetscInt *shift,PetscBool *sym,PetscBool *blockcompressed, PetscInt *n,PetscInt *ia,size_t *iia, 123ace3abfcSBarry Smith PetscInt *ja,size_t *jja,PetscBool *done,PetscErrorCode *ierr) 124f4e70085SSatish Balay { 125f4e70085SSatish Balay PetscInt *IA = PetscIntAddressFromFortran(ia,*iia),*JA = PetscIntAddressFromFortran(ja,*jja); 1268f7157efSSatish Balay *ierr = MatRestoreRowIJ(*B,*shift,*sym,*blockcompressed,n,&IA,&JA,done); 127f4e70085SSatish Balay } 128f4e70085SSatish Balay 129f4e70085SSatish Balay /* 130f4e70085SSatish Balay This is a poor way of storing the column and value pointers 131f4e70085SSatish Balay generated by MatGetRow() to be returned with MatRestoreRow() 132f4e70085SSatish Balay but there is not natural,good place else to store them. Hence 133f4e70085SSatish Balay Fortran programmers can only have one outstanding MatGetRows() 134f4e70085SSatish Balay at a time. 135f4e70085SSatish Balay */ 136f4e70085SSatish Balay static PetscErrorCode matgetrowactive = 0; 137f4e70085SSatish Balay static const PetscInt *my_ocols = 0; 138f4e70085SSatish Balay static const PetscScalar *my_ovals = 0; 139f4e70085SSatish Balay 140f4e70085SSatish Balay void PETSC_STDCALL matgetrow_(Mat *mat,PetscInt *row,PetscInt *ncols,PetscInt *cols,PetscScalar *vals,PetscErrorCode *ierr) 141f4e70085SSatish Balay { 142f4e70085SSatish Balay const PetscInt **oocols = &my_ocols; 143f4e70085SSatish Balay const PetscScalar **oovals = &my_ovals; 144f4e70085SSatish Balay 145f4e70085SSatish Balay if (matgetrowactive) { 146d736bfebSBarry Smith PetscError(PETSC_COMM_SELF,__LINE__,"MatGetRow_Fortran",__FILE__,__SDIR__,PETSC_ERR_ARG_WRONGSTATE,PETSC_ERROR_INITIAL, 147f4e70085SSatish Balay "Cannot have two MatGetRow() active simultaneously\n\ 148f4e70085SSatish Balay call MatRestoreRow() before calling MatGetRow() a second time"); 149f4e70085SSatish Balay *ierr = 1; 150f4e70085SSatish Balay return; 151f4e70085SSatish Balay } 152f4e70085SSatish Balay 153f4e70085SSatish Balay CHKFORTRANNULLINTEGER(cols); if (!cols) oocols = PETSC_NULL; 154f4e70085SSatish Balay CHKFORTRANNULLSCALAR(vals); if (!vals) oovals = PETSC_NULL; 155f4e70085SSatish Balay 156f4e70085SSatish Balay *ierr = MatGetRow(*mat,*row,ncols,oocols,oovals); 157f4e70085SSatish Balay if (*ierr) return; 158f4e70085SSatish Balay 159f4e70085SSatish Balay if (oocols) { *ierr = PetscMemcpy(cols,my_ocols,(*ncols)*sizeof(PetscInt)); if (*ierr) return;} 160f4e70085SSatish Balay if (oovals) { *ierr = PetscMemcpy(vals,my_ovals,(*ncols)*sizeof(PetscScalar)); if (*ierr) return; } 161f4e70085SSatish Balay matgetrowactive = 1; 162f4e70085SSatish Balay } 163f4e70085SSatish Balay 164f4e70085SSatish Balay void PETSC_STDCALL matrestorerow_(Mat *mat,PetscInt *row,PetscInt *ncols,PetscInt *cols,PetscScalar *vals,PetscErrorCode *ierr) 165f4e70085SSatish Balay { 166f4e70085SSatish Balay const PetscInt **oocols = &my_ocols; 167f4e70085SSatish Balay const PetscScalar **oovals = &my_ovals; 168f4e70085SSatish Balay if (!matgetrowactive) { 169d736bfebSBarry Smith PetscError(PETSC_COMM_SELF,__LINE__,"MatRestoreRow_Fortran",__FILE__,__SDIR__,PETSC_ERR_ARG_WRONGSTATE,PETSC_ERROR_INITIAL, 170f4e70085SSatish Balay "Must call MatGetRow() first"); 171f4e70085SSatish Balay *ierr = 1; 172f4e70085SSatish Balay return; 173f4e70085SSatish Balay } 174f4e70085SSatish Balay CHKFORTRANNULLINTEGER(cols); if (!cols) oocols = PETSC_NULL; 175f4e70085SSatish Balay CHKFORTRANNULLSCALAR(vals); if (!vals) oovals = PETSC_NULL; 176f4e70085SSatish Balay 177f4e70085SSatish Balay *ierr = MatRestoreRow(*mat,*row,ncols,oocols,oovals); 178f4e70085SSatish Balay matgetrowactive = 0; 179f4e70085SSatish Balay } 180f4e70085SSatish Balay 181f4e70085SSatish Balay void PETSC_STDCALL matview_(Mat *mat,PetscViewer *vin,PetscErrorCode *ierr) 182f4e70085SSatish Balay { 183f4e70085SSatish Balay PetscViewer v; 184f4e70085SSatish Balay PetscPatchDefaultViewers_Fortran(vin,v); 185f4e70085SSatish Balay *ierr = MatView(*mat,v); 186f4e70085SSatish Balay } 187f4e70085SSatish Balay 188112444f4SShri Abhyankar void PETSC_STDCALL matload_(Mat *mat,PetscViewer *vin,PetscErrorCode *ierr) 189f7e310deSShri Abhyankar { 190f7e310deSShri Abhyankar PetscViewer v; 191f7e310deSShri Abhyankar PetscPatchDefaultViewers_Fortran(vin,v); 192112444f4SShri Abhyankar *ierr = MatLoad(*mat,v); 193f7e310deSShri Abhyankar } 194f7e310deSShri Abhyankar 195*8c778c55SBarry Smith void PETSC_STDCALL matseqaijgetarray_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr) 196f4e70085SSatish Balay { 197f4e70085SSatish Balay PetscScalar *mm; 198f4e70085SSatish Balay PetscInt m,n; 199f4e70085SSatish Balay 200*8c778c55SBarry Smith *ierr = MatSeqAIJGetArray(*mat,&mm); if (*ierr) return; 201f4e70085SSatish Balay *ierr = MatGetSize(*mat,&m,&n); if (*ierr) return; 202f91d1997SBarry Smith *ierr = PetscScalarAddressToFortran((PetscObject)*mat,1,fa,mm,m*n,ia); if (*ierr) return; 203f4e70085SSatish Balay } 204f4e70085SSatish Balay 205*8c778c55SBarry Smith void PETSC_STDCALL matseqaijrestorearray_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr) 206f4e70085SSatish Balay { 207f4e70085SSatish Balay PetscScalar *lx; 208f4e70085SSatish Balay PetscInt m,n; 209f4e70085SSatish Balay 210f4e70085SSatish Balay *ierr = MatGetSize(*mat,&m,&n); if (*ierr) return; 211f4e70085SSatish Balay *ierr = PetscScalarAddressFromFortran((PetscObject)*mat,fa,*ia,m*n,&lx);if (*ierr) return; 212*8c778c55SBarry Smith *ierr = MatSeqAIJRestoreArray(*mat,&lx);if (*ierr) return; 213f4e70085SSatish Balay } 214f4e70085SSatish Balay 215*8c778c55SBarry Smith void PETSC_STDCALL matdensegetarray_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr) 21673a71a0fSBarry Smith { 21773a71a0fSBarry Smith PetscScalar *mm; 21873a71a0fSBarry Smith PetscInt m,n; 21973a71a0fSBarry Smith 220*8c778c55SBarry Smith *ierr = MatDenseGetArray(*mat,&mm); if (*ierr) return; 22173a71a0fSBarry Smith *ierr = MatGetSize(*mat,&m,&n); if (*ierr) return; 22273a71a0fSBarry Smith *ierr = PetscScalarAddressToFortran((PetscObject)*mat,1,fa,mm,m*n,ia); if (*ierr) return; 22373a71a0fSBarry Smith } 22473a71a0fSBarry Smith 225*8c778c55SBarry Smith void PETSC_STDCALL matdenserestorearray_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr) 22673a71a0fSBarry Smith { 22773a71a0fSBarry Smith PetscScalar *lx; 22873a71a0fSBarry Smith PetscInt m,n; 22973a71a0fSBarry Smith 23073a71a0fSBarry Smith *ierr = MatGetSize(*mat,&m,&n); if (*ierr) return; 23173a71a0fSBarry Smith *ierr = PetscScalarAddressFromFortran((PetscObject)*mat,fa,*ia,m*n,&lx);if (*ierr) return; 232*8c778c55SBarry Smith *ierr = MatDenseRestoreArray(*mat,&lx);if (*ierr) return; 23373a71a0fSBarry Smith } 23473a71a0fSBarry Smith 23535bd34faSBarry Smith void PETSC_STDCALL matfactorgetsolverpackage_(Mat *mat,CHAR name PETSC_MIXED_LEN(len),PetscErrorCode *ierr PETSC_END_LEN(len)) 23635bd34faSBarry Smith { 23735bd34faSBarry Smith const char *tname; 23835bd34faSBarry Smith 23935bd34faSBarry Smith *ierr = MatFactorGetSolverPackage(*mat,&tname);if (*ierr) return; 24035bd34faSBarry Smith if (name != PETSC_NULL_CHARACTER_Fortran) { 24135bd34faSBarry Smith *ierr = PetscStrncpy(name,tname,len);if (*ierr) return; 24235bd34faSBarry Smith } 24335bd34faSBarry Smith FIXRETURNCHAR(PETSC_TRUE,name,len); 24435bd34faSBarry Smith } 24535bd34faSBarry Smith 2469be81726SHong Zhang void PETSC_STDCALL matgetfactor_(Mat *mat,CHAR outtype PETSC_MIXED_LEN(len),MatFactorType *ftype,Mat *M,PetscErrorCode *ierr PETSC_END_LEN(len)) 2475dffd610SBarry Smith { 2485dffd610SBarry Smith char *t; 2495dffd610SBarry Smith FIXCHAR(outtype,len,t); 2509be81726SHong Zhang *ierr = MatGetFactor(*mat,t,*ftype,M); 2515dffd610SBarry Smith FREECHAR(outtype,t); 2525dffd610SBarry Smith } 2535dffd610SBarry Smith 254f4e70085SSatish Balay void PETSC_STDCALL matconvert_(Mat *mat,CHAR outtype PETSC_MIXED_LEN(len),MatReuse *reuse,Mat *M,PetscErrorCode *ierr PETSC_END_LEN(len)) 255f4e70085SSatish Balay { 256f4e70085SSatish Balay char *t; 257f4e70085SSatish Balay FIXCHAR(outtype,len,t); 258f4e70085SSatish Balay *ierr = MatConvert(*mat,t,*reuse,M); 259f4e70085SSatish Balay FREECHAR(outtype,t); 260f4e70085SSatish Balay } 261f4e70085SSatish Balay 262f4e70085SSatish Balay /* 263f4e70085SSatish Balay MatGetSubmatrices() is slightly different from C since the 264f4e70085SSatish Balay Fortran provides the array to hold the submatrix objects,while in C that 265f4e70085SSatish Balay array is allocated by the MatGetSubmatrices() 266f4e70085SSatish Balay */ 267f4e70085SSatish Balay void PETSC_STDCALL matgetsubmatrices_(Mat *mat,PetscInt *n,IS *isrow,IS *iscol,MatReuse *scall,Mat *smat,PetscErrorCode *ierr) 268f4e70085SSatish Balay { 269f4e70085SSatish Balay Mat *lsmat; 270f4e70085SSatish Balay PetscInt i; 271f4e70085SSatish Balay 272f4e70085SSatish Balay if (*scall == MAT_INITIAL_MATRIX) { 273f4e70085SSatish Balay *ierr = MatGetSubMatrices(*mat,*n,isrow,iscol,*scall,&lsmat); 274f4e70085SSatish Balay for (i=0; i<*n; i++) { 275f4e70085SSatish Balay smat[i] = lsmat[i]; 276f4e70085SSatish Balay } 277f4e70085SSatish Balay *ierr = PetscFree(lsmat); 278f4e70085SSatish Balay } else { 279f4e70085SSatish Balay *ierr = MatGetSubMatrices(*mat,*n,isrow,iscol,*scall,&smat); 280f4e70085SSatish Balay } 281f4e70085SSatish Balay } 282f4e70085SSatish Balay 2837d6bfa3bSBarry Smith /* 2847d6bfa3bSBarry Smith MatDestroyMatrices() is slightly different from C since the 2857d6bfa3bSBarry Smith Fortran provides the array to hold the submatrix objects,while in C that 2867d6bfa3bSBarry Smith array is allocated by the MatGetSubmatrices() 2877d6bfa3bSBarry Smith */ 2887d6bfa3bSBarry Smith void PETSC_STDCALL matdestroymatrices_(Mat *mat,PetscInt *n,Mat *smat,PetscErrorCode *ierr) 2897d6bfa3bSBarry Smith { 2907d6bfa3bSBarry Smith PetscInt i; 2917d6bfa3bSBarry Smith 2927d6bfa3bSBarry Smith for (i=0; i<*n; i++) { 2936bf464f9SBarry Smith *ierr = MatDestroy(&smat[i]);if (*ierr) return; 2947d6bfa3bSBarry Smith } 2957d6bfa3bSBarry Smith } 2967d6bfa3bSBarry Smith 29717ede90eSSatish Balay void PETSC_STDCALL matzerorowscolumns_(Mat *mat,PetscInt *numRows,PetscInt *rows,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr) 29817ede90eSSatish Balay { 29917ede90eSSatish Balay CHKFORTRANNULLOBJECTDEREFERENCE(x); 30017ede90eSSatish Balay CHKFORTRANNULLOBJECTDEREFERENCE(b); 30117ede90eSSatish Balay *ierr = MatZeroRowsColumns(*mat,*numRows,rows,*diag,*x,*b); 30217ede90eSSatish Balay } 30317ede90eSSatish Balay 30417ede90eSSatish Balay void PETSC_STDCALL matzerorowscolumnsis_(Mat *mat,IS *is,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr) 30517ede90eSSatish Balay { 30617ede90eSSatish Balay CHKFORTRANNULLOBJECTDEREFERENCE(x); 30717ede90eSSatish Balay CHKFORTRANNULLOBJECTDEREFERENCE(b); 30817ede90eSSatish Balay *ierr = MatZeroRowsColumnsIS(*mat,*is,*diag,*x,*b); 30917ede90eSSatish Balay } 31017ede90eSSatish Balay 31117ede90eSSatish Balay void PETSC_STDCALL matzerorowsstencil_(Mat *mat,PetscInt *numRows,MatStencil *rows,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr) 31217ede90eSSatish Balay { 31317ede90eSSatish Balay CHKFORTRANNULLOBJECTDEREFERENCE(x); 31417ede90eSSatish Balay CHKFORTRANNULLOBJECTDEREFERENCE(b); 31517ede90eSSatish Balay *ierr = MatZeroRowsStencil(*mat,*numRows,rows,*diag,*x,*b); 31617ede90eSSatish Balay } 31717ede90eSSatish Balay 3182b40b63fSBarry Smith void PETSC_STDCALL matzerorows_(Mat *mat,PetscInt *numRows,PetscInt *rows,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr) 319f4e70085SSatish Balay { 3202b40b63fSBarry Smith CHKFORTRANNULLOBJECTDEREFERENCE(x); 3212b40b63fSBarry Smith CHKFORTRANNULLOBJECTDEREFERENCE(b); 3222b40b63fSBarry Smith *ierr = MatZeroRows(*mat,*numRows,rows,*diag,*x,*b); 323f4e70085SSatish Balay } 324f4e70085SSatish Balay 3252b40b63fSBarry Smith void PETSC_STDCALL matzerorowsis_(Mat *mat,IS *is,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr) 326f4e70085SSatish Balay { 3272b40b63fSBarry Smith CHKFORTRANNULLOBJECTDEREFERENCE(x); 3282b40b63fSBarry Smith CHKFORTRANNULLOBJECTDEREFERENCE(b); 3292b40b63fSBarry Smith *ierr = MatZeroRowsIS(*mat,*is,*diag,*x,*b); 330f4e70085SSatish Balay } 331f4e70085SSatish Balay 3322b40b63fSBarry Smith void PETSC_STDCALL matzerorowslocal_(Mat *mat,PetscInt *numRows,PetscInt *rows,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr) 333f4e70085SSatish Balay { 3342b40b63fSBarry Smith CHKFORTRANNULLOBJECTDEREFERENCE(x); 3352b40b63fSBarry Smith CHKFORTRANNULLOBJECTDEREFERENCE(b); 3362b40b63fSBarry Smith *ierr = MatZeroRowsLocal(*mat,*numRows,rows,*diag,*x,*b); 337f4e70085SSatish Balay } 338f4e70085SSatish Balay 3392b40b63fSBarry Smith void PETSC_STDCALL matzerorowslocalis_(Mat *mat,IS *is,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr) 340f4e70085SSatish Balay { 3412b40b63fSBarry Smith CHKFORTRANNULLOBJECTDEREFERENCE(x); 3422b40b63fSBarry Smith CHKFORTRANNULLOBJECTDEREFERENCE(b); 3432b40b63fSBarry Smith *ierr = MatZeroRowsLocalIS(*mat,*is,*diag,*x,*b); 344f4e70085SSatish Balay } 345f4e70085SSatish Balay 34617ede90eSSatish Balay void PETSC_STDCALL matzerorowscolumnslocal_(Mat *mat,PetscInt *numRows,PetscInt *rows,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr) 34717ede90eSSatish Balay { 34817ede90eSSatish Balay CHKFORTRANNULLOBJECTDEREFERENCE(x); 34917ede90eSSatish Balay CHKFORTRANNULLOBJECTDEREFERENCE(b); 35017ede90eSSatish Balay *ierr = MatZeroRowsColumnsLocal(*mat,*numRows,rows,*diag,*x,*b); 35117ede90eSSatish Balay } 35217ede90eSSatish Balay 35317ede90eSSatish Balay void PETSC_STDCALL matzerorowscolumnslocalis_(Mat *mat,IS *is,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr) 35417ede90eSSatish Balay { 35517ede90eSSatish Balay CHKFORTRANNULLOBJECTDEREFERENCE(x); 35617ede90eSSatish Balay CHKFORTRANNULLOBJECTDEREFERENCE(b); 35717ede90eSSatish Balay *ierr = MatZeroRowsColumnsLocalIS(*mat,*is,*diag,*x,*b); 35817ede90eSSatish Balay } 3591eea217eSSatish Balay 3602b40b63fSBarry Smith void PETSC_STDCALL matsetoptionsprefix_(Mat *mat,CHAR prefix PETSC_MIXED_LEN(len),PetscErrorCode *ierr PETSC_END_LEN(len)) 3611eea217eSSatish Balay { 3621eea217eSSatish Balay char *t; 3631eea217eSSatish Balay 3641eea217eSSatish Balay FIXCHAR(prefix,len,t); 3651eea217eSSatish Balay *ierr = MatSetOptionsPrefix(*mat,t); 3661eea217eSSatish Balay FREECHAR(prefix,t); 3671eea217eSSatish Balay } 3681eea217eSSatish Balay 369812c3f48SMatthew Knepley void PETSC_STDCALL matnullspaceremove_(MatNullSpace *sp,Vec *vec,Vec *out,PetscErrorCode *ierr) 370812c3f48SMatthew Knepley { 371812c3f48SMatthew Knepley CHKFORTRANNULLOBJECT(out); 372812c3f48SMatthew Knepley *ierr = MatNullSpaceRemove(*sp,*vec,out); 373812c3f48SMatthew Knepley } 3741eea217eSSatish Balay 3755ba43861SSatish Balay void PETSC_STDCALL matgetinfo_(Mat *mat,MatInfoType *flag,MatInfo *info, int *__ierr ) 3765ba43861SSatish Balay { 3775ba43861SSatish Balay *__ierr = MatGetInfo(*mat,*flag,info); 3785ba43861SSatish Balay } 3795ba43861SSatish Balay 38022688b47SSatish Balay void PETSC_STDCALL matlufactor_(Mat *mat,IS *row,IS *col, MatFactorInfo *info, int *__ierr ) 38122688b47SSatish Balay { 38222688b47SSatish Balay *__ierr = MatLUFactor(*mat,*row,*col,info); 38322688b47SSatish Balay } 38422688b47SSatish Balay 38522688b47SSatish Balay void PETSC_STDCALL matilufactor_(Mat *mat,IS *row,IS *col, MatFactorInfo *info, int *__ierr ) 38622688b47SSatish Balay { 38722688b47SSatish Balay *__ierr = MatILUFactor(*mat,*row,*col,info); 38822688b47SSatish Balay } 38922688b47SSatish Balay 39022688b47SSatish Balay void PETSC_STDCALL matlufactorsymbolic_(Mat *fact,Mat *mat,IS *row,IS *col, MatFactorInfo *info, int *__ierr ) 39122688b47SSatish Balay { 39222688b47SSatish Balay *__ierr = MatLUFactorSymbolic(*fact,*mat,*row,*col,info); 39322688b47SSatish Balay } 39422688b47SSatish Balay 39522688b47SSatish Balay void PETSC_STDCALL matlufactornumeric_(Mat *fact,Mat *mat, MatFactorInfo *info, int *__ierr ) 39622688b47SSatish Balay { 39722688b47SSatish Balay *__ierr = MatLUFactorNumeric(*fact,*mat,info); 39822688b47SSatish Balay } 39922688b47SSatish Balay 40022688b47SSatish Balay void PETSC_STDCALL matcholeskyfactor_(Mat *mat,IS *perm, MatFactorInfo *info, int *__ierr ) 40122688b47SSatish Balay { 40222688b47SSatish Balay *__ierr = MatCholeskyFactor(*mat,*perm,info); 40322688b47SSatish Balay } 40422688b47SSatish Balay 40522688b47SSatish Balay void PETSC_STDCALL matcholeskyfactorsymbolic_(Mat *fact,Mat *mat,IS *perm, MatFactorInfo *info, int *__ierr ) 40622688b47SSatish Balay { 40722688b47SSatish Balay *__ierr = MatCholeskyFactorSymbolic(*fact,*mat,*perm,info); 40822688b47SSatish Balay } 40922688b47SSatish Balay 41022688b47SSatish Balay void PETSC_STDCALL matcholeskyfactornumeric_(Mat *fact,Mat *mat, MatFactorInfo *info, int *__ierr ) 41122688b47SSatish Balay { 41222688b47SSatish Balay *__ierr = MatCholeskyFactorNumeric(*fact,*mat,info); 41322688b47SSatish Balay } 41422688b47SSatish Balay 41522688b47SSatish Balay void PETSC_STDCALL matilufactorsymbolic_(Mat *fact,Mat *mat,IS *row,IS *col, MatFactorInfo *info, int *__ierr ) 41622688b47SSatish Balay { 41722688b47SSatish Balay *__ierr = MatILUFactorSymbolic(*fact,*mat,*row,*col,info); 41822688b47SSatish Balay } 41922688b47SSatish Balay 42022688b47SSatish Balay void PETSC_STDCALL maticcfactorsymbolic_(Mat *fact,Mat *mat,IS *perm, MatFactorInfo *info, int *__ierr ) 42122688b47SSatish Balay { 42222688b47SSatish Balay *__ierr = MatICCFactorSymbolic(*fact,*mat,*perm,info); 42322688b47SSatish Balay } 42422688b47SSatish Balay 42522688b47SSatish Balay void PETSC_STDCALL maticcfactor_(Mat *mat,IS *row, MatFactorInfo* info, int *__ierr ) 42622688b47SSatish Balay { 42722688b47SSatish Balay *__ierr = MatICCFactor(*mat,*row,info); 42822688b47SSatish Balay } 42922688b47SSatish Balay 43022688b47SSatish Balay void PETSC_STDCALL matfactorinfoinitialize_(MatFactorInfo *info, int *__ierr ) 43122688b47SSatish Balay { 43222688b47SSatish Balay *__ierr = MatFactorInfoInitialize(info); 43322688b47SSatish Balay } 43422688b47SSatish Balay 435f4e70085SSatish Balay EXTERN_C_END 436