1af0996ceSBarry Smith #include <petsc/private/fortranimpl.h> 2cee688dbSBarry Smith #include <petsc/private/f90impl.h> 3c6db04a5SJed Brown #include <petscmat.h> 4665c2dedSJed Brown #include <petscviewer.h> 5f4e70085SSatish Balay 6f4e70085SSatish Balay #if defined(PETSC_HAVE_FORTRAN_CAPS) 74d03fd2bSBarry Smith #define matsetvalues_ MATSETVALUES 81006886cSSatish Balay #define matsetvaluesnnnn_ MATSETVALUESNNNN 93b494cfeSSatish Balay #define matsetvalues0_ MATSETVALUES0 101b266c99SBarry Smith #define matsetvaluesnn1_ MATSETVALUESNN1 114d03fd2bSBarry Smith #define matsetvalues11_ MATSETVALUES11 124d03fd2bSBarry Smith #define matsetvalues1n_ MATSETVALUES1N 134d03fd2bSBarry Smith #define matsetvaluesn1_ MATSETVALUESN1 143b494cfeSSatish Balay #define matsetvaluesblocked0_ MATSETVALUESBLOCKED0 150aee3464SBarry Smith #define matsetvaluesblocked2_ MATSETVALUESBLOCKED2 164d03fd2bSBarry Smith #define matsetvaluesblocked11_ MATSETVALUESBLOCKED11 174d03fd2bSBarry Smith #define matsetvaluesblocked111_ MATSETVALUESBLOCKED111 184d03fd2bSBarry Smith #define matsetvaluesblocked1n_ MATSETVALUESBLOCKED1N 194d03fd2bSBarry Smith #define matsetvaluesblockedn1_ MATSETVALUESBLOCKEDN1 204d03fd2bSBarry Smith #define matsetvaluesblockedlocal_ MATSETVALUESBLOCKEDLOCAL 213b494cfeSSatish Balay #define matsetvaluesblockedlocal0_ MATSETVALUESBLOCKEDLOCAL0 224d03fd2bSBarry Smith #define matsetvaluesblockedlocal11_ MATSETVALUESBLOCKEDLOCAL11 234d03fd2bSBarry Smith #define matsetvaluesblockedlocal111_ MATSETVALUESBLOCKEDLOCAL111 244d03fd2bSBarry Smith #define matsetvaluesblockedlocal1n_ MATSETVALUESBLOCKEDLOCAL1N 254d03fd2bSBarry Smith #define matsetvaluesblockedlocaln1_ MATSETVALUESBLOCKEDLOCALN1 264d03fd2bSBarry Smith #define matsetvalueslocal_ MATSETVALUESLOCAL 273b494cfeSSatish Balay #define matsetvalueslocal0_ MATSETVALUESLOCAL0 284d03fd2bSBarry Smith #define matsetvalueslocal11_ MATSETVALUESLOCAL11 294d03fd2bSBarry Smith #define matsetvalueslocal11nn_ MATSETVALUESLOCAL11NN 304d03fd2bSBarry Smith #define matsetvalueslocal111_ MATSETVALUESLOCAL111 314d03fd2bSBarry Smith #define matsetvalueslocal1n_ MATSETVALUESLOCAL1N 324d03fd2bSBarry Smith #define matsetvalueslocaln1_ MATSETVALUESLOCALN1 3387bcf4e0SBarry Smith #define matgetrowmin_ MATGETROWMIN 3487bcf4e0SBarry Smith #define matgetrowminabs_ MATGETROWMINABS 355928be6bSBarry Smith #define matgetrowmax_ MATGETROWMAX 365928be6bSBarry Smith #define matgetrowmaxabs_ MATGETROWMAXABS 377d6bfa3bSBarry Smith #define matdestroymatrices_ MATDESTROYMATRICES 38df750dc8SHong Zhang #define matdestroysubmatrices_ MATDESTROYSUBMATRICES 395dffd610SBarry Smith #define matgetfactor_ MATGETFACTOR 4035bd34faSBarry Smith #define matfactorgetsolverpackage_ MATFACTORGETSOLVERPACKAGE 41f4e70085SSatish Balay #define matgetrowij_ MATGETROWIJ 42f4e70085SSatish Balay #define matrestorerowij_ MATRESTOREROWIJ 43f4e70085SSatish Balay #define matgetrow_ MATGETROW 44f4e70085SSatish Balay #define matrestorerow_ MATRESTOREROW 45f7e310deSShri Abhyankar #define matload_ MATLOAD 46f4e70085SSatish Balay #define matview_ MATVIEW 478c778c55SBarry Smith #define matseqaijgetarray_ MATSEQAIJGETARRAY 486778691eSSatish Balay #define matseqaijrestorearray_ MATSEQAIJRESTOREARRAY 498c778c55SBarry Smith #define matdensegetarray_ MATDENSEGETARRAY 508c778c55SBarry Smith #define matdenserestorearray_ MATDENSERESTOREARRAY 51f4e70085SSatish Balay #define matconvert_ MATCONVERT 527dae84e0SHong Zhang #define matcreatesubmatrices_ MATCREATESUBMATRICES 5317ede90eSSatish Balay #define matzerorowscolumns_ MATZEROROWSCOLUMNS 5417ede90eSSatish Balay #define matzerorowscolumnsis_ MATZEROROWSCOLUMNSIS 5517ede90eSSatish Balay #define matzerorowsstencil_ MATZEROROWSSTENCIL 56d25a37e1SJed Brown #define matzerorowscolumnsstencil_ MATZEROROWSCOLUMNSSTENCIL 57f4e70085SSatish Balay #define matzerorows_ MATZEROROWS 58f4e70085SSatish Balay #define matzerorowsis_ MATZEROROWSIS 59f4e70085SSatish Balay #define matzerorowslocal_ MATZEROROWSLOCAL 60f4e70085SSatish Balay #define matzerorowslocalis_ MATZEROROWSLOCALIS 6117ede90eSSatish Balay #define matzerorowscolumnslocal_ MATZEROROWSCOLUMNSLOCAL 6217ede90eSSatish Balay #define matzerorowscolumnslocalis_ MATZEROROWSCOLUMNSLOCALIS 631eea217eSSatish Balay #define matsetoptionsprefix_ MATSETOPTIONSPREFIX 64fcc9d04bSBarry Smith #define matcreatevecs_ MATCREATEVECS 65c9d5ca86SBarry Smith #define matnullspaceremove_ MATNULLSPACEREMOVE 665ba43861SSatish Balay #define matgetinfo_ MATGETINFO 6722688b47SSatish Balay #define matlufactor_ MATLUFACTOR 6822688b47SSatish Balay #define matilufactor_ MATILUFACTOR 6922688b47SSatish Balay #define matlufactorsymbolic_ MATLUFACTORSYMBOLIC 7022688b47SSatish Balay #define matlufactornumeric_ MATLUFACTORNUMERIC 7122688b47SSatish Balay #define matcholeskyfactor_ MATCHOLESKYFACTOR 7222688b47SSatish Balay #define matcholeskyfactorsymbolic_ MATCHOLESKYFACTORSYMBOLIC 7322688b47SSatish Balay #define matcholeskyfactornumeric_ MATCHOLESKYFACTORNUMERIC 7422688b47SSatish Balay #define matilufactorsymbolic_ MATILUFACTORSYMBOLIC 7522688b47SSatish Balay #define maticcfactorsymbolic_ MATICCFACTORSYMBOLIC 7622688b47SSatish Balay #define maticcfactor_ MATICCFACTOR 7722688b47SSatish Balay #define matfactorinfoinitialize_ MATFACTORINFOINITIALIZE 78b22b330cSBarry Smith #define matnullspacesetfunction_ MATNULLSPACESETFUNCTION 790905d9aaSJed Brown #define matfindnonzerorows_ MATFINDNONZEROROWS 803be0408cSBarry Smith #define matgetsize00_ MATGETSIZE00 813be0408cSBarry Smith #define matgetsize10_ MATGETSIZE10 823be0408cSBarry Smith #define matgetsize01_ MATGETSIZE01 833be0408cSBarry Smith #define matgetlocalsize00_ MATGETLOCALSIZE00 843be0408cSBarry Smith #define matgetlocalsize10_ MATGETLOCALSIZE10 853be0408cSBarry Smith #define matgetlocalsize01_ MATGETLOCALSIZE01 86*260663b8SBarry Smith #define matgetnullspace_ MATGETNULLSPACE 87*260663b8SBarry Smith #define matsetnullspace_ MATSETNULLSPACE 88*260663b8SBarry Smith #define matgetownershiprange_ MATGETOWNERSHIPRANGE 89f4e70085SSatish Balay #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE) 904d03fd2bSBarry Smith #define matsetvalues_ matsetvalues 911006886cSSatish Balay #define matsetvaluesnnnn_ matsetvaluesnnnn 923b494cfeSSatish Balay #define matsetvalues0_ matsetvalues0 931b266c99SBarry Smith #define matsetvaluesnn1_ matsetvaluesnn1 944d03fd2bSBarry Smith #define matsetvalues11_ matsetvalues11 954d03fd2bSBarry Smith #define matsetvaluesn1_ matsetvaluesn1 964d03fd2bSBarry Smith #define matsetvalues1n_ matsetvalues1n 974d03fd2bSBarry Smith #define matsetvalueslocal_ matsetvalueslocal 983b494cfeSSatish Balay #define matsetvalueslocal0_ matsetvalueslocal0 994d03fd2bSBarry Smith #define matsetvalueslocal11_ matsetvalueslocal11 1004d03fd2bSBarry Smith #define matsetvalueslocal11nn_ matsetvalueslocal11nn 1014d03fd2bSBarry Smith #define matsetvalueslocal111_ matsetvalueslocal111 1024d03fd2bSBarry Smith #define matsetvalueslocal1n_ matsetvalueslocal1n 1034d03fd2bSBarry Smith #define matsetvalueslocaln1_ matsetvalueslocaln1 1044d03fd2bSBarry Smith #define matsetvaluesblocked_ matsetvaluesblocked 1053b494cfeSSatish Balay #define matsetvaluesblocked0_ matsetvaluesblocked0 1060aee3464SBarry Smith #define matsetvaluesblocked2_ matsetvaluesblocked2 1074d03fd2bSBarry Smith #define matsetvaluesblocked11_ matsetvaluesblocked11 1084d03fd2bSBarry Smith #define matsetvaluesblocked111_ matsetvaluesblocked111 1094d03fd2bSBarry Smith #define matsetvaluesblocked1n_ matsetvaluesblocked1n 11024aa916eSSatish Balay #define matsetvaluesblockedn1_ matsetvaluesblockedn1 1114d03fd2bSBarry Smith #define matsetvaluesblockedlocal_ matsetvaluesblockedlocal 1123b494cfeSSatish Balay #define matsetvaluesblockedlocal0_ matsetvaluesblockedlocal0 1134d03fd2bSBarry Smith #define matsetvaluesblockedlocal11_ matsetvaluesblockedlocal11 1144d03fd2bSBarry Smith #define matsetvaluesblockedlocal111_ matsetvaluesblockedlocal111 1154d03fd2bSBarry Smith #define matsetvaluesblockedlocal1n_ matsetvaluesblockedlocal1n 11624aa916eSSatish Balay #define matsetvaluesblockedlocaln1_ matsetvaluesblockedlocaln1 11787bcf4e0SBarry Smith #define matgetrowmin_ matgetrowmin 11887bcf4e0SBarry Smith #define matgetrowminabs_ matgetrowminabs 1195928be6bSBarry Smith #define matgetrowmax_ matgetrowmax 1205928be6bSBarry Smith #define matgetrowmaxabs_ matgetrowmaxabs 1215928be6bSBarry Smith #define matdestroymatrices_ matdestroymatrices 122df750dc8SHong Zhang #define matdestroysubmatrices_ matdestroysubmatrices 1235dffd610SBarry Smith #define matgetfactor_ matgetfactor 12435bd34faSBarry Smith #define matfactorgetsolverpackage_ matfactorgetsolverpackage 125fcc9d04bSBarry Smith #define matcreatevecs_ matcreatevecs 126f4e70085SSatish Balay #define matgetrowij_ matgetrowij 127f4e70085SSatish Balay #define matrestorerowij_ matrestorerowij 128f4e70085SSatish Balay #define matgetrow_ matgetrow 129f4e70085SSatish Balay #define matrestorerow_ matrestorerow 130f4e70085SSatish Balay #define matview_ matview 131f7e310deSShri Abhyankar #define matload_ matload 1328c778c55SBarry Smith #define matseqaijgetarray_ matseqaijgetarray 1338c778c55SBarry Smith #define matseqaijrestorearray_ matseqaijrestorearray 1348c778c55SBarry Smith #define matdensegetarray_ matdensegetarray 1358c778c55SBarry Smith #define matdenserestorearray_ matdenserestorearray 136f4e70085SSatish Balay #define matconvert_ matconvert 1377dae84e0SHong Zhang #define matcreatesubmatrices_ matcreatesubmatrices 13817ede90eSSatish Balay #define matzerorowscolumns_ matzerorowscolumns 13917ede90eSSatish Balay #define matzerorowscolumnsis_ matzerorowscolumnsis 14017ede90eSSatish Balay #define matzerorowsstencil_ matzerorowsstencil 141d25a37e1SJed Brown #define matzerorowscolumnsstencil_ matzerorowscolumnsstencil 142f4e70085SSatish Balay #define matzerorows_ matzerorows 143f4e70085SSatish Balay #define matzerorowsis_ matzerorowsis 144f4e70085SSatish Balay #define matzerorowslocal_ matzerorowslocal 145f4e70085SSatish Balay #define matzerorowslocalis_ matzerorowslocalis 14617ede90eSSatish Balay #define matzerorowscolumnslocal_ matzerorowscolumnslocal 14717ede90eSSatish Balay #define matzerorowscolumnslocalis_ matzerorowscolumnslocalis 1481eea217eSSatish Balay #define matsetoptionsprefix_ matsetoptionsprefix 149812c3f48SMatthew Knepley #define matnullspaceremove_ matnullspaceremove 1505ba43861SSatish Balay #define matgetinfo_ matgetinfo 15122688b47SSatish Balay #define matlufactor_ matlufactor 15222688b47SSatish Balay #define matilufactor_ matilufactor 15322688b47SSatish Balay #define matlufactorsymbolic_ matlufactorsymbolic 15422688b47SSatish Balay #define matlufactornumeric_ matlufactornumeric 15522688b47SSatish Balay #define matcholeskyfactor_ matcholeskyfactor 15622688b47SSatish Balay #define matcholeskyfactorsymbolic_ matcholeskyfactorsymbolic 15722688b47SSatish Balay #define matcholeskyfactornumeric_ matcholeskyfactornumeric 15822688b47SSatish Balay #define matilufactorsymbolic_ matilufactorsymbolic 15922688b47SSatish Balay #define maticcfactorsymbolic_ maticcfactorsymbolic 16022688b47SSatish Balay #define maticcfactor_ maticcfactor 16122688b47SSatish Balay #define matfactorinfoinitialize_ matfactorinfoinitialize 162b22b330cSBarry Smith #define matnullspacesetfunction_ matnullspacesetfunction 1630905d9aaSJed Brown #define matfindnonzerorows_ matfindnonzerorows 1643be0408cSBarry Smith #define matgetsize00_ matgetsize00 1653be0408cSBarry Smith #define matgetsize10_ matgetsize10 1663be0408cSBarry Smith #define matgetsize01_ matgetsize01 1673be0408cSBarry Smith #define matgetlocalsize00_ matgetlocalsize00 1683be0408cSBarry Smith #define matgetlocalsize10_ matgetlocalsize10 1693be0408cSBarry Smith #define matgetlocalsize01_ matgetlocalsize01 170*260663b8SBarry Smith #define matgetnullspace_ matgetnullspace 171*260663b8SBarry Smith #define matsetnullspace_ matsetnullspace 172*260663b8SBarry Smith #define matgetownershiprange_ matgetownershiprange 173f4e70085SSatish Balay #endif 174f4e70085SSatish Balay 175*260663b8SBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetnullspace_(Mat *mat, MatNullSpace *nullsp, int *ierr) 176*260663b8SBarry Smith { 177*260663b8SBarry Smith CHKFORTRANNULLOBJECTDEREFERENCE(nullsp); 178*260663b8SBarry Smith *ierr = MatSetNullSpace(*mat,*nullsp); 179*260663b8SBarry Smith } 180*260663b8SBarry Smith 181*260663b8SBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetnullspace_(Mat *mat, MatNullSpace *nullsp, int *ierr) 182*260663b8SBarry Smith { 183*260663b8SBarry Smith MatNullSpace sp; 184*260663b8SBarry Smith *ierr = MatGetNullSpace(*mat,&sp);if (*ierr) return; 185*260663b8SBarry Smith if (!sp) { 186*260663b8SBarry Smith *nullsp = (MatNullSpace) -1; 187*260663b8SBarry Smith } else { 188*260663b8SBarry Smith *nullsp = sp; 189*260663b8SBarry Smith } 190*260663b8SBarry Smith } 191*260663b8SBarry Smith 192*260663b8SBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetownershiprange_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr ) 193*260663b8SBarry Smith { 194*260663b8SBarry Smith CHKFORTRANNULLINTEGER(m); 195*260663b8SBarry Smith CHKFORTRANNULLINTEGER(n); 196*260663b8SBarry Smith *ierr = MatGetOwnershipRange(*mat,m,n); 197*260663b8SBarry Smith } 198*260663b8SBarry Smith 1993be0408cSBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetsize_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr ) 2003be0408cSBarry Smith { 2013be0408cSBarry Smith CHKFORTRANNULLINTEGER(m); 2023be0408cSBarry Smith CHKFORTRANNULLINTEGER(n); 2033be0408cSBarry Smith *ierr = MatGetSize(*mat,m,n); 2043be0408cSBarry Smith } 2053be0408cSBarry Smith 2063be0408cSBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetsize00_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr ) 2073be0408cSBarry Smith { 2083be0408cSBarry Smith matgetsize_(mat,m,n,ierr); 2093be0408cSBarry Smith } 2103be0408cSBarry Smith 2113be0408cSBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetsize10_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr ) 2123be0408cSBarry Smith { 2133be0408cSBarry Smith matgetsize_(mat,m,n,ierr); 2143be0408cSBarry Smith } 2153be0408cSBarry Smith 2163be0408cSBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetsize01_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr ) 2173be0408cSBarry Smith { 2183be0408cSBarry Smith matgetsize_(mat,m,n,ierr); 2193be0408cSBarry Smith } 2203be0408cSBarry Smith 2213be0408cSBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetlocalsize_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr ) 2223be0408cSBarry Smith { 2233be0408cSBarry Smith CHKFORTRANNULLINTEGER(m); 2243be0408cSBarry Smith CHKFORTRANNULLINTEGER(n); 2253be0408cSBarry Smith *ierr = MatGetLocalSize(*mat,m,n); 2263be0408cSBarry Smith } 2273be0408cSBarry Smith 2283be0408cSBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetlocalsize00_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr ) 2293be0408cSBarry Smith { 2303be0408cSBarry Smith matgetlocalsize_(mat,m,n,ierr); 2313be0408cSBarry Smith } 2323be0408cSBarry Smith 2333be0408cSBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetlocalsize10_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr ) 2343be0408cSBarry Smith { 2353be0408cSBarry Smith matgetlocalsize_(mat,m,n,ierr); 2363be0408cSBarry Smith } 2373be0408cSBarry Smith 2383be0408cSBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetlocalsize01_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr ) 2393be0408cSBarry Smith { 2403be0408cSBarry Smith matgetlocalsize_(mat,m,n,ierr); 2413be0408cSBarry Smith } 2423be0408cSBarry Smith 2434d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvaluesblocked_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){ 2444d03fd2bSBarry Smith *ierr = MatSetValuesBlocked(*mat,*m,idxm,*n,idxn,v,*addv); 2454d03fd2bSBarry Smith } 2464d03fd2bSBarry Smith 247cee688dbSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvaluesblocked2_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], F90Array2d *y,InsertMode *addv, int *ierr PETSC_F90_2PTR_PROTO(ptrd)){ 248cee688dbSBarry Smith PetscScalar *fa; 2490aee3464SBarry Smith *ierr = F90Array2dAccess(y,MPIU_SCALAR,(void**)&fa PETSC_F90_2PTR_PARAM(ptrd));if (*ierr) return; 250cee688dbSBarry Smith matsetvaluesblocked_(mat,m,idxm,n,idxn,fa,addv,ierr); 251cee688dbSBarry Smith } 252cee688dbSBarry Smith 2533b494cfeSSatish Balay PETSC_EXTERN void PETSC_STDCALL matsetvaluesblocked0_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){ 2543b494cfeSSatish Balay matsetvaluesblocked_(mat,m,idxm,n,idxn,v,addv,ierr); 2553b494cfeSSatish Balay } 2563b494cfeSSatish Balay 2574d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvaluesblocked11_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){ 2584d03fd2bSBarry Smith matsetvaluesblocked_(mat,m,idxm,n,idxn,v,addv,ierr); 2594d03fd2bSBarry Smith } 2604d03fd2bSBarry Smith 2614d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvaluesblocked111_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){ 2624d03fd2bSBarry Smith matsetvaluesblocked_(mat,m,idxm,n,idxn,v,addv,ierr); 2634d03fd2bSBarry Smith } 2644d03fd2bSBarry Smith 2654d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvaluesblocked1n_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){ 2664d03fd2bSBarry Smith matsetvaluesblocked_(mat,m,idxm,n,idxn,v,addv,ierr); 2674d03fd2bSBarry Smith } 2684d03fd2bSBarry Smith 2694d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvaluesblockedn1_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){ 2704d03fd2bSBarry Smith matsetvaluesblocked_(mat,m,idxm,n,idxn,v,addv,ierr); 2714d03fd2bSBarry Smith } 2724d03fd2bSBarry Smith 2734d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvaluesblockedlocal_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr ) 2744d03fd2bSBarry Smith { 2754d03fd2bSBarry Smith *ierr = MatSetValuesBlockedLocal(*mat,*nrow,irow,*ncol,icol,y,*addv); 2764d03fd2bSBarry Smith } 2774d03fd2bSBarry Smith 2783b494cfeSSatish Balay PETSC_EXTERN void PETSC_STDCALL matsetvaluesblockedlocal0_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){ 2793b494cfeSSatish Balay matsetvaluesblockedlocal_(mat,m,idxm,n,idxn,v,addv,ierr); 2803b494cfeSSatish Balay } 2813b494cfeSSatish Balay 2824d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvaluesblockedlocal11_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){ 2834d03fd2bSBarry Smith matsetvaluesblockedlocal_(mat,m,idxm,n,idxn,v,addv,ierr); 2844d03fd2bSBarry Smith } 2854d03fd2bSBarry Smith 2864d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvaluesblockedlocal111_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){ 2874d03fd2bSBarry Smith matsetvaluesblockedlocal_(mat,m,idxm,n,idxn,v,addv,ierr); 2884d03fd2bSBarry Smith } 2894d03fd2bSBarry Smith 2904d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvaluesblockedlocal1n_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){ 2914d03fd2bSBarry Smith matsetvaluesblockedlocal_(mat,m,idxm,n,idxn,v,addv,ierr); 2924d03fd2bSBarry Smith } 2934d03fd2bSBarry Smith 2944d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvaluesblockedlocaln1_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){ 2954d03fd2bSBarry Smith matsetvaluesblockedlocal_(mat,m,idxm,n,idxn,v,addv,ierr); 2964d03fd2bSBarry Smith } 2974d03fd2bSBarry Smith 2984d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvalues_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ) 2994d03fd2bSBarry Smith { 3004d03fd2bSBarry Smith *ierr = MatSetValues(*mat,*m,idxm,*n,idxn,v,*addv); 3014d03fd2bSBarry Smith } 3024d03fd2bSBarry Smith 3031b266c99SBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvaluesnnnn_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ) 3041b266c99SBarry Smith { 3051b266c99SBarry Smith matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr); 3061b266c99SBarry Smith } 3071b266c99SBarry Smith 3083b494cfeSSatish Balay PETSC_EXTERN void PETSC_STDCALL matsetvalues0_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ) 3093b494cfeSSatish Balay { 3103b494cfeSSatish Balay matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr); 3113b494cfeSSatish Balay } 3123b494cfeSSatish Balay 3131b266c99SBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvaluesnn1_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ) 3141b266c99SBarry Smith { 3151b266c99SBarry Smith matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr); 3161b266c99SBarry Smith } 3171b266c99SBarry Smith 3184d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvalues11_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ) 3194d03fd2bSBarry Smith { 3204d03fd2bSBarry Smith matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr); 3214d03fd2bSBarry Smith } 3224d03fd2bSBarry Smith 3234d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvaluesn1_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ) 3244d03fd2bSBarry Smith { 3254d03fd2bSBarry Smith matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr); 3264d03fd2bSBarry Smith } 3274d03fd2bSBarry Smith 3284d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvalues1n_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ) 3294d03fd2bSBarry Smith { 3304d03fd2bSBarry Smith matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr); 3314d03fd2bSBarry Smith } 3324d03fd2bSBarry Smith 3334d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvalueslocal_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr ) 3344d03fd2bSBarry Smith { 3354d03fd2bSBarry Smith *ierr = MatSetValuesLocal(*mat,*nrow,irow,*ncol,icol,y,*addv); 3364d03fd2bSBarry Smith } 3374d03fd2bSBarry Smith 3383b494cfeSSatish Balay PETSC_EXTERN void PETSC_STDCALL matsetvalueslocal0_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr ) 3393b494cfeSSatish Balay { 3403b494cfeSSatish Balay matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr); 3413b494cfeSSatish Balay } 3423b494cfeSSatish Balay 3434d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvalueslocal11_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr ) 3444d03fd2bSBarry Smith { 3454d03fd2bSBarry Smith matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr); 3464d03fd2bSBarry Smith } 3474d03fd2bSBarry Smith 3484d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvalueslocal11nn_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr ) 3494d03fd2bSBarry Smith { 3504d03fd2bSBarry Smith matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr); 3514d03fd2bSBarry Smith } 3524d03fd2bSBarry Smith 3534d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvalueslocal111_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr ) 3544d03fd2bSBarry Smith { 3554d03fd2bSBarry Smith matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr); 3564d03fd2bSBarry Smith } 3574d03fd2bSBarry Smith 3584d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvalueslocal1n_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr ) 3594d03fd2bSBarry Smith { 3604d03fd2bSBarry Smith matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr); 3614d03fd2bSBarry Smith } 3624d03fd2bSBarry Smith 3634d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvalueslocaln1_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr ) 3644d03fd2bSBarry Smith { 3654d03fd2bSBarry Smith matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr); 3664d03fd2bSBarry Smith } 3674d03fd2bSBarry Smith 36887bcf4e0SBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetrowmin_(Mat *mat,Vec *v,PetscInt idx[], int *ierr ) 36987bcf4e0SBarry Smith { 37087bcf4e0SBarry Smith CHKFORTRANNULLINTEGER(idx); 37187bcf4e0SBarry Smith *ierr = MatGetRowMin(*mat,*v,idx); 37287bcf4e0SBarry Smith } 3734d03fd2bSBarry Smith 37487bcf4e0SBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetrowminabs_(Mat *mat,Vec *v,PetscInt idx[], int *ierr ) 37587bcf4e0SBarry Smith { 37687bcf4e0SBarry Smith CHKFORTRANNULLINTEGER(idx); 37787bcf4e0SBarry Smith *ierr = MatGetRowMinAbs(*mat,*v,idx); 37887bcf4e0SBarry Smith } 37987bcf4e0SBarry Smith 3805928be6bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetrowmax_(Mat *mat,Vec *v,PetscInt idx[], int *ierr ) 3815928be6bSBarry Smith { 3825928be6bSBarry Smith CHKFORTRANNULLINTEGER(idx); 3835928be6bSBarry Smith *ierr = MatGetRowMax(*mat,*v,idx); 3845928be6bSBarry Smith } 3855928be6bSBarry Smith 3865928be6bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetrowmaxabs_(Mat *mat,Vec *v,PetscInt idx[], int *ierr ) 3875928be6bSBarry Smith { 3885928be6bSBarry Smith CHKFORTRANNULLINTEGER(idx); 3895928be6bSBarry Smith *ierr = MatGetRowMaxAbs(*mat,*v,idx); 3905928be6bSBarry Smith } 3915928be6bSBarry Smith 392b22b330cSBarry Smith static PetscErrorCode ournullfunction(MatNullSpace sp,Vec x,void *ctx) 393b22b330cSBarry Smith { 394b22b330cSBarry Smith PetscErrorCode ierr = 0; 395b22b330cSBarry Smith (*(void (PETSC_STDCALL *)(MatNullSpace*,Vec*,void*,PetscErrorCode*))(((PetscObject)sp)->fortran_func_pointers[0]))(&sp,&x,ctx,&ierr);CHKERRQ(ierr); 396b22b330cSBarry Smith return 0; 397b22b330cSBarry Smith } 398b22b330cSBarry Smith 3998cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matnullspacesetfunction_(MatNullSpace *sp, PetscErrorCode (*rem)(MatNullSpace,Vec,void*),void *ctx,PetscErrorCode *ierr) 400b22b330cSBarry Smith { 401b22b330cSBarry Smith PetscObjectAllocateFortranPointers(*sp,1); 402b22b330cSBarry Smith ((PetscObject)*sp)->fortran_func_pointers[0] = (PetscVoidFunction)rem; 40326fbe8dcSKarl Rupp 404b22b330cSBarry Smith *ierr = MatNullSpaceSetFunction(*sp,ournullfunction,ctx); 405b22b330cSBarry Smith } 406b22b330cSBarry Smith 407d2da0f5dSBarry Smith PETSC_EXTERN void PETSC_STDCALL matcreatevecs_(Mat *mat,Vec *right,Vec *left, int *ierr) 4087c54600cSBarry Smith { 4097c54600cSBarry Smith CHKFORTRANNULLOBJECT(right); 4107c54600cSBarry Smith CHKFORTRANNULLOBJECT(left); 4112a7a6963SBarry Smith *ierr = MatCreateVecs(*mat,right,left); 4127c54600cSBarry Smith } 4137c54600cSBarry Smith 4148cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matgetrowij_(Mat *B,PetscInt *shift,PetscBool *sym,PetscBool *blockcompressed,PetscInt *n,PetscInt *ia,size_t *iia, 415ace3abfcSBarry Smith PetscInt *ja,size_t *jja,PetscBool *done,PetscErrorCode *ierr) 416f4e70085SSatish Balay { 4171a83f524SJed Brown const PetscInt *IA,*JA; 4188f7157efSSatish Balay *ierr = MatGetRowIJ(*B,*shift,*sym,*blockcompressed,n,&IA,&JA,done);if (*ierr) return; 4191a83f524SJed Brown *iia = PetscIntAddressToFortran(ia,(PetscInt*)IA); 4201a83f524SJed Brown *jja = PetscIntAddressToFortran(ja,(PetscInt*)JA); 421f4e70085SSatish Balay } 422f4e70085SSatish Balay 4238cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matrestorerowij_(Mat *B,PetscInt *shift,PetscBool *sym,PetscBool *blockcompressed, PetscInt *n,PetscInt *ia,size_t *iia, 424ace3abfcSBarry Smith PetscInt *ja,size_t *jja,PetscBool *done,PetscErrorCode *ierr) 425f4e70085SSatish Balay { 4261a83f524SJed Brown const PetscInt *IA = PetscIntAddressFromFortran(ia,*iia),*JA = PetscIntAddressFromFortran(ja,*jja); 4278f7157efSSatish Balay *ierr = MatRestoreRowIJ(*B,*shift,*sym,*blockcompressed,n,&IA,&JA,done); 428f4e70085SSatish Balay } 429f4e70085SSatish Balay 430f4e70085SSatish Balay /* 431f4e70085SSatish Balay This is a poor way of storing the column and value pointers 432f4e70085SSatish Balay generated by MatGetRow() to be returned with MatRestoreRow() 433f4e70085SSatish Balay but there is not natural,good place else to store them. Hence 434f4e70085SSatish Balay Fortran programmers can only have one outstanding MatGetRows() 435f4e70085SSatish Balay at a time. 436f4e70085SSatish Balay */ 437f4e70085SSatish Balay static PetscErrorCode matgetrowactive = 0; 438f4e70085SSatish Balay static const PetscInt *my_ocols = 0; 439f4e70085SSatish Balay static const PetscScalar *my_ovals = 0; 440f4e70085SSatish Balay 4418cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matgetrow_(Mat *mat,PetscInt *row,PetscInt *ncols,PetscInt *cols,PetscScalar *vals,PetscErrorCode *ierr) 442f4e70085SSatish Balay { 443f4e70085SSatish Balay const PetscInt **oocols = &my_ocols; 444f4e70085SSatish Balay const PetscScalar **oovals = &my_ovals; 445f4e70085SSatish Balay 446f4e70085SSatish Balay if (matgetrowactive) { 447efca3c55SSatish Balay PetscError(PETSC_COMM_SELF,__LINE__,"MatGetRow_Fortran",__FILE__,PETSC_ERR_ARG_WRONGSTATE,PETSC_ERROR_INITIAL, 448f4e70085SSatish Balay "Cannot have two MatGetRow() active simultaneously\n\ 449f4e70085SSatish Balay call MatRestoreRow() before calling MatGetRow() a second time"); 450f4e70085SSatish Balay *ierr = 1; 451f4e70085SSatish Balay return; 452f4e70085SSatish Balay } 453f4e70085SSatish Balay 4540298fd71SBarry Smith CHKFORTRANNULLINTEGER(cols); if (!cols) oocols = NULL; 4550298fd71SBarry Smith CHKFORTRANNULLSCALAR(vals); if (!vals) oovals = NULL; 456f4e70085SSatish Balay 457f4e70085SSatish Balay *ierr = MatGetRow(*mat,*row,ncols,oocols,oovals); 458f4e70085SSatish Balay if (*ierr) return; 459f4e70085SSatish Balay 460f4e70085SSatish Balay if (oocols) { *ierr = PetscMemcpy(cols,my_ocols,(*ncols)*sizeof(PetscInt)); if (*ierr) return;} 461f4e70085SSatish Balay if (oovals) { *ierr = PetscMemcpy(vals,my_ovals,(*ncols)*sizeof(PetscScalar)); if (*ierr) return;} 462f4e70085SSatish Balay matgetrowactive = 1; 463f4e70085SSatish Balay } 464f4e70085SSatish Balay 4658cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matrestorerow_(Mat *mat,PetscInt *row,PetscInt *ncols,PetscInt *cols,PetscScalar *vals,PetscErrorCode *ierr) 466f4e70085SSatish Balay { 467f4e70085SSatish Balay const PetscInt **oocols = &my_ocols; 468f4e70085SSatish Balay const PetscScalar **oovals = &my_ovals; 469f4e70085SSatish Balay if (!matgetrowactive) { 470efca3c55SSatish Balay PetscError(PETSC_COMM_SELF,__LINE__,"MatRestoreRow_Fortran",__FILE__,PETSC_ERR_ARG_WRONGSTATE,PETSC_ERROR_INITIAL, 471f4e70085SSatish Balay "Must call MatGetRow() first"); 472f4e70085SSatish Balay *ierr = 1; 473f4e70085SSatish Balay return; 474f4e70085SSatish Balay } 4750298fd71SBarry Smith CHKFORTRANNULLINTEGER(cols); if (!cols) oocols = NULL; 4760298fd71SBarry Smith CHKFORTRANNULLSCALAR(vals); if (!vals) oovals = NULL; 477f4e70085SSatish Balay 478f4e70085SSatish Balay *ierr = MatRestoreRow(*mat,*row,ncols,oocols,oovals); 479f4e70085SSatish Balay matgetrowactive = 0; 480f4e70085SSatish Balay } 481f4e70085SSatish Balay 4828cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matview_(Mat *mat,PetscViewer *vin,PetscErrorCode *ierr) 483f4e70085SSatish Balay { 484f4e70085SSatish Balay PetscViewer v; 485f4e70085SSatish Balay PetscPatchDefaultViewers_Fortran(vin,v); 486f4e70085SSatish Balay *ierr = MatView(*mat,v); 487f4e70085SSatish Balay } 488f4e70085SSatish Balay 4898cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matload_(Mat *mat,PetscViewer *vin,PetscErrorCode *ierr) 490f7e310deSShri Abhyankar { 491f7e310deSShri Abhyankar PetscViewer v; 492f7e310deSShri Abhyankar PetscPatchDefaultViewers_Fortran(vin,v); 493112444f4SShri Abhyankar *ierr = MatLoad(*mat,v); 494f7e310deSShri Abhyankar } 495f7e310deSShri Abhyankar 4968cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matseqaijgetarray_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr) 497f4e70085SSatish Balay { 498f4e70085SSatish Balay PetscScalar *mm; 499f4e70085SSatish Balay PetscInt m,n; 500f4e70085SSatish Balay 5018c778c55SBarry Smith *ierr = MatSeqAIJGetArray(*mat,&mm); if (*ierr) return; 502f4e70085SSatish Balay *ierr = MatGetSize(*mat,&m,&n); if (*ierr) return; 503f91d1997SBarry Smith *ierr = PetscScalarAddressToFortran((PetscObject)*mat,1,fa,mm,m*n,ia); if (*ierr) return; 504f4e70085SSatish Balay } 505f4e70085SSatish Balay 5068cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matseqaijrestorearray_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr) 507f4e70085SSatish Balay { 508f4e70085SSatish Balay PetscScalar *lx; 509f4e70085SSatish Balay PetscInt m,n; 510f4e70085SSatish Balay 511f4e70085SSatish Balay *ierr = MatGetSize(*mat,&m,&n); if (*ierr) return; 512f4e70085SSatish Balay *ierr = PetscScalarAddressFromFortran((PetscObject)*mat,fa,*ia,m*n,&lx);if (*ierr) return; 5138c778c55SBarry Smith *ierr = MatSeqAIJRestoreArray(*mat,&lx);if (*ierr) return; 514f4e70085SSatish Balay } 515f4e70085SSatish Balay 5168cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matdensegetarray_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr) 51773a71a0fSBarry Smith { 51873a71a0fSBarry Smith PetscScalar *mm; 51973a71a0fSBarry Smith PetscInt m,n; 52073a71a0fSBarry Smith 5218c778c55SBarry Smith *ierr = MatDenseGetArray(*mat,&mm); if (*ierr) return; 52273a71a0fSBarry Smith *ierr = MatGetSize(*mat,&m,&n); if (*ierr) return; 52373a71a0fSBarry Smith *ierr = PetscScalarAddressToFortran((PetscObject)*mat,1,fa,mm,m*n,ia); if (*ierr) return; 52473a71a0fSBarry Smith } 52573a71a0fSBarry Smith 5268cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matdenserestorearray_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr) 52773a71a0fSBarry Smith { 52873a71a0fSBarry Smith PetscScalar *lx; 52973a71a0fSBarry Smith PetscInt m,n; 53073a71a0fSBarry Smith 53173a71a0fSBarry Smith *ierr = MatGetSize(*mat,&m,&n); if (*ierr) return; 53273a71a0fSBarry Smith *ierr = PetscScalarAddressFromFortran((PetscObject)*mat,fa,*ia,m*n,&lx);if (*ierr) return; 5338c778c55SBarry Smith *ierr = MatDenseRestoreArray(*mat,&lx);if (*ierr) return; 53473a71a0fSBarry Smith } 53573a71a0fSBarry Smith 536390e1bf2SBarry Smith PETSC_EXTERN void PETSC_STDCALL matfactorgetsolverpackage_(Mat *mat,char* name PETSC_MIXED_LEN(len),PetscErrorCode *ierr PETSC_END_LEN(len)) 53735bd34faSBarry Smith { 53835bd34faSBarry Smith const char *tname; 53935bd34faSBarry Smith 54035bd34faSBarry Smith *ierr = MatFactorGetSolverPackage(*mat,&tname);if (*ierr) return; 54135bd34faSBarry Smith if (name != PETSC_NULL_CHARACTER_Fortran) { 54235bd34faSBarry Smith *ierr = PetscStrncpy(name,tname,len);if (*ierr) return; 54335bd34faSBarry Smith } 54435bd34faSBarry Smith FIXRETURNCHAR(PETSC_TRUE,name,len); 54535bd34faSBarry Smith } 54635bd34faSBarry Smith 547390e1bf2SBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetfactor_(Mat *mat,char* outtype PETSC_MIXED_LEN(len),MatFactorType *ftype,Mat *M,PetscErrorCode *ierr PETSC_END_LEN(len)) 5485dffd610SBarry Smith { 5495dffd610SBarry Smith char *t; 5505dffd610SBarry Smith FIXCHAR(outtype,len,t); 5519be81726SHong Zhang *ierr = MatGetFactor(*mat,t,*ftype,M); 5525dffd610SBarry Smith FREECHAR(outtype,t); 5535dffd610SBarry Smith } 5545dffd610SBarry Smith 555390e1bf2SBarry Smith PETSC_EXTERN void PETSC_STDCALL matconvert_(Mat *mat,char* outtype PETSC_MIXED_LEN(len),MatReuse *reuse,Mat *M,PetscErrorCode *ierr PETSC_END_LEN(len)) 556f4e70085SSatish Balay { 557f4e70085SSatish Balay char *t; 558f4e70085SSatish Balay FIXCHAR(outtype,len,t); 559f4e70085SSatish Balay *ierr = MatConvert(*mat,t,*reuse,M); 560f4e70085SSatish Balay FREECHAR(outtype,t); 561f4e70085SSatish Balay } 562f4e70085SSatish Balay 563f4e70085SSatish Balay /* 5647dae84e0SHong Zhang MatCreateSubmatrices() is slightly different from C since the 565f4e70085SSatish Balay Fortran provides the array to hold the submatrix objects,while in C that 5667dae84e0SHong Zhang array is allocated by the MatCreateSubmatrices() 567f4e70085SSatish Balay */ 5687dae84e0SHong Zhang PETSC_EXTERN void PETSC_STDCALL matcreatesubmatrices_(Mat *mat,PetscInt *n,IS *isrow,IS *iscol,MatReuse *scall,Mat *smat,PetscErrorCode *ierr) 569f4e70085SSatish Balay { 570f4e70085SSatish Balay Mat *lsmat; 571f4e70085SSatish Balay PetscInt i; 572f4e70085SSatish Balay 573f4e70085SSatish Balay if (*scall == MAT_INITIAL_MATRIX) { 5747dae84e0SHong Zhang *ierr = MatCreateSubMatrices(*mat,*n,isrow,iscol,*scall,&lsmat); 575de7ef04eSHong Zhang for (i=0; i<=*n; i++) { /* lsmat[*n] might be a dummy matrix for saving data struc */ 576f4e70085SSatish Balay smat[i] = lsmat[i]; 577f4e70085SSatish Balay } 578f4e70085SSatish Balay *ierr = PetscFree(lsmat); 579f4e70085SSatish Balay } else { 5807dae84e0SHong Zhang *ierr = MatCreateSubMatrices(*mat,*n,isrow,iscol,*scall,&smat); 581f4e70085SSatish Balay } 582f4e70085SSatish Balay } 583f4e70085SSatish Balay 5847d6bfa3bSBarry Smith /* 5857d6bfa3bSBarry Smith MatDestroyMatrices() is slightly different from C since the 586de7ef04eSHong Zhang Fortran does not free the array of matrix objects, while in C that 587de7ef04eSHong Zhang the array is freed 588de7ef04eSHong Zhang */ 589de7ef04eSHong Zhang PETSC_EXTERN void PETSC_STDCALL matdestroymatrices_(PetscInt *n,Mat *smat,PetscErrorCode *ierr) 590de7ef04eSHong Zhang { 591de7ef04eSHong Zhang PetscInt i; 592de7ef04eSHong Zhang 593de7ef04eSHong Zhang for (i=0; i<*n; i++) { 594de7ef04eSHong Zhang *ierr = MatDestroy(&smat[i]);if (*ierr) return; 595de7ef04eSHong Zhang } 596de7ef04eSHong Zhang } 597de7ef04eSHong Zhang 598de7ef04eSHong Zhang /* 599de7ef04eSHong Zhang MatDestroySubMatrices() is slightly different from C since the 6007d6bfa3bSBarry Smith Fortran provides the array to hold the submatrix objects, while in C that 6017dae84e0SHong Zhang array is allocated by the MatCreateSubmatrices() 6027d6bfa3bSBarry Smith */ 603de7ef04eSHong Zhang PETSC_EXTERN void PETSC_STDCALL matdestroysubmatrices_(PetscInt *n,Mat *smat,PetscErrorCode *ierr) 6047d6bfa3bSBarry Smith { 605de7ef04eSHong Zhang Mat *lsmat; 6067d6bfa3bSBarry Smith PetscInt i; 6077d6bfa3bSBarry Smith 608de7ef04eSHong Zhang *ierr = PetscMalloc1(*n+1,&lsmat); 609de7ef04eSHong Zhang for (i=0; i<=*n; i++) { 610de7ef04eSHong Zhang lsmat[i] = smat[i]; 6117d6bfa3bSBarry Smith } 612de7ef04eSHong Zhang *ierr = MatDestroySubMatrices(*n,&lsmat); 613df750dc8SHong Zhang } 614df750dc8SHong Zhang 6158cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matzerorowscolumns_(Mat *mat,PetscInt *numRows,PetscInt *rows,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr) 61617ede90eSSatish Balay { 61717ede90eSSatish Balay CHKFORTRANNULLOBJECTDEREFERENCE(x); 61817ede90eSSatish Balay CHKFORTRANNULLOBJECTDEREFERENCE(b); 61917ede90eSSatish Balay *ierr = MatZeroRowsColumns(*mat,*numRows,rows,*diag,*x,*b); 62017ede90eSSatish Balay } 62117ede90eSSatish Balay 6228cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matzerorowscolumnsis_(Mat *mat,IS *is,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr) 62317ede90eSSatish Balay { 62417ede90eSSatish Balay CHKFORTRANNULLOBJECTDEREFERENCE(x); 62517ede90eSSatish Balay CHKFORTRANNULLOBJECTDEREFERENCE(b); 62617ede90eSSatish Balay *ierr = MatZeroRowsColumnsIS(*mat,*is,*diag,*x,*b); 62717ede90eSSatish Balay } 62817ede90eSSatish Balay 6298cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matzerorowsstencil_(Mat *mat,PetscInt *numRows,MatStencil *rows,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr) 63017ede90eSSatish Balay { 63117ede90eSSatish Balay CHKFORTRANNULLOBJECTDEREFERENCE(x); 63217ede90eSSatish Balay CHKFORTRANNULLOBJECTDEREFERENCE(b); 63317ede90eSSatish Balay *ierr = MatZeroRowsStencil(*mat,*numRows,rows,*diag,*x,*b); 63417ede90eSSatish Balay } 63517ede90eSSatish Balay 6368cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matzerorowscolumnsstencil_(Mat *mat,PetscInt *numRows,MatStencil *rows,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr) 637d25a37e1SJed Brown { 638d25a37e1SJed Brown CHKFORTRANNULLOBJECTDEREFERENCE(x); 639d25a37e1SJed Brown CHKFORTRANNULLOBJECTDEREFERENCE(b); 640d25a37e1SJed Brown *ierr = MatZeroRowsColumnsStencil(*mat,*numRows,rows,*diag,*x,*b); 641d25a37e1SJed Brown } 642d25a37e1SJed Brown 6438cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matzerorows_(Mat *mat,PetscInt *numRows,PetscInt *rows,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr) 644f4e70085SSatish Balay { 6452b40b63fSBarry Smith CHKFORTRANNULLOBJECTDEREFERENCE(x); 6462b40b63fSBarry Smith CHKFORTRANNULLOBJECTDEREFERENCE(b); 6472b40b63fSBarry Smith *ierr = MatZeroRows(*mat,*numRows,rows,*diag,*x,*b); 648f4e70085SSatish Balay } 649f4e70085SSatish Balay 6508cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matzerorowsis_(Mat *mat,IS *is,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr) 651f4e70085SSatish Balay { 6522b40b63fSBarry Smith CHKFORTRANNULLOBJECTDEREFERENCE(x); 6532b40b63fSBarry Smith CHKFORTRANNULLOBJECTDEREFERENCE(b); 6542b40b63fSBarry Smith *ierr = MatZeroRowsIS(*mat,*is,*diag,*x,*b); 655f4e70085SSatish Balay } 656f4e70085SSatish Balay 6578cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matzerorowslocal_(Mat *mat,PetscInt *numRows,PetscInt *rows,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr) 658f4e70085SSatish Balay { 6592b40b63fSBarry Smith CHKFORTRANNULLOBJECTDEREFERENCE(x); 6602b40b63fSBarry Smith CHKFORTRANNULLOBJECTDEREFERENCE(b); 6612b40b63fSBarry Smith *ierr = MatZeroRowsLocal(*mat,*numRows,rows,*diag,*x,*b); 662f4e70085SSatish Balay } 663f4e70085SSatish Balay 6648cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matzerorowslocalis_(Mat *mat,IS *is,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr) 665f4e70085SSatish Balay { 6662b40b63fSBarry Smith CHKFORTRANNULLOBJECTDEREFERENCE(x); 6672b40b63fSBarry Smith CHKFORTRANNULLOBJECTDEREFERENCE(b); 6682b40b63fSBarry Smith *ierr = MatZeroRowsLocalIS(*mat,*is,*diag,*x,*b); 669f4e70085SSatish Balay } 670f4e70085SSatish Balay 6718cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matzerorowscolumnslocal_(Mat *mat,PetscInt *numRows,PetscInt *rows,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr) 67217ede90eSSatish Balay { 67317ede90eSSatish Balay CHKFORTRANNULLOBJECTDEREFERENCE(x); 67417ede90eSSatish Balay CHKFORTRANNULLOBJECTDEREFERENCE(b); 67517ede90eSSatish Balay *ierr = MatZeroRowsColumnsLocal(*mat,*numRows,rows,*diag,*x,*b); 67617ede90eSSatish Balay } 67717ede90eSSatish Balay 6788cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matzerorowscolumnslocalis_(Mat *mat,IS *is,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr) 67917ede90eSSatish Balay { 68017ede90eSSatish Balay CHKFORTRANNULLOBJECTDEREFERENCE(x); 68117ede90eSSatish Balay CHKFORTRANNULLOBJECTDEREFERENCE(b); 68217ede90eSSatish Balay *ierr = MatZeroRowsColumnsLocalIS(*mat,*is,*diag,*x,*b); 68317ede90eSSatish Balay } 6841eea217eSSatish Balay 685390e1bf2SBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetoptionsprefix_(Mat *mat,char* prefix PETSC_MIXED_LEN(len),PetscErrorCode *ierr PETSC_END_LEN(len)) 6861eea217eSSatish Balay { 6871eea217eSSatish Balay char *t; 6881eea217eSSatish Balay 6891eea217eSSatish Balay FIXCHAR(prefix,len,t); 6901eea217eSSatish Balay *ierr = MatSetOptionsPrefix(*mat,t); 6911eea217eSSatish Balay FREECHAR(prefix,t); 6921eea217eSSatish Balay } 6931eea217eSSatish Balay 694d0195637SJed Brown PETSC_EXTERN void PETSC_STDCALL matnullspaceremove_(MatNullSpace *sp,Vec *vec,PetscErrorCode *ierr) 695812c3f48SMatthew Knepley { 696*260663b8SBarry Smith CHKFORTRANNULLOBJECT(*sp) 697d0195637SJed Brown *ierr = MatNullSpaceRemove(*sp,*vec); 698812c3f48SMatthew Knepley } 6991eea217eSSatish Balay 7004d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetinfo_(Mat *mat,MatInfoType *flag,MatInfo *info, int *ierr) 7015ba43861SSatish Balay { 7024d03fd2bSBarry Smith *ierr = MatGetInfo(*mat,*flag,info); 7035ba43861SSatish Balay } 7045ba43861SSatish Balay 7054d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matlufactor_(Mat *mat,IS *row,IS *col,const MatFactorInfo *info, int *ierr) 70622688b47SSatish Balay { 7074d03fd2bSBarry Smith *ierr = MatLUFactor(*mat,*row,*col,info); 70822688b47SSatish Balay } 70922688b47SSatish Balay 7104d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matilufactor_(Mat *mat,IS *row,IS *col,const MatFactorInfo *info, int *ierr) 71122688b47SSatish Balay { 7124d03fd2bSBarry Smith *ierr = MatILUFactor(*mat,*row,*col,info); 71322688b47SSatish Balay } 71422688b47SSatish Balay 7154d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matlufactorsymbolic_(Mat *fact,Mat *mat,IS *row,IS *col,const MatFactorInfo *info, int *ierr) 71622688b47SSatish Balay { 7174d03fd2bSBarry Smith *ierr = MatLUFactorSymbolic(*fact,*mat,*row,*col,info); 71822688b47SSatish Balay } 71922688b47SSatish Balay 7204d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matlufactornumeric_(Mat *fact,Mat *mat,const MatFactorInfo *info, int *ierr) 72122688b47SSatish Balay { 7224d03fd2bSBarry Smith *ierr = MatLUFactorNumeric(*fact,*mat,info); 72322688b47SSatish Balay } 72422688b47SSatish Balay 7254d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matcholeskyfactor_(Mat *mat,IS *perm,const MatFactorInfo *info, int *ierr) 72622688b47SSatish Balay { 7274d03fd2bSBarry Smith *ierr = MatCholeskyFactor(*mat,*perm,info); 72822688b47SSatish Balay } 72922688b47SSatish Balay 7304d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matcholeskyfactorsymbolic_(Mat *fact,Mat *mat,IS *perm,const MatFactorInfo *info, int *ierr) 73122688b47SSatish Balay { 7324d03fd2bSBarry Smith *ierr = MatCholeskyFactorSymbolic(*fact,*mat,*perm,info); 73322688b47SSatish Balay } 73422688b47SSatish Balay 7354d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matcholeskyfactornumeric_(Mat *fact,Mat *mat,const MatFactorInfo *info, int *ierr) 73622688b47SSatish Balay { 7374d03fd2bSBarry Smith *ierr = MatCholeskyFactorNumeric(*fact,*mat,info); 73822688b47SSatish Balay } 73922688b47SSatish Balay 7404d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matilufactorsymbolic_(Mat *fact,Mat *mat,IS *row,IS *col,const MatFactorInfo *info, int *ierr) 74122688b47SSatish Balay { 7424d03fd2bSBarry Smith *ierr = MatILUFactorSymbolic(*fact,*mat,*row,*col,info); 74322688b47SSatish Balay } 74422688b47SSatish Balay 7454d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL maticcfactorsymbolic_(Mat *fact,Mat *mat,IS *perm,const MatFactorInfo *info, int *ierr) 74622688b47SSatish Balay { 7474d03fd2bSBarry Smith *ierr = MatICCFactorSymbolic(*fact,*mat,*perm,info); 74822688b47SSatish Balay } 74922688b47SSatish Balay 7504d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL maticcfactor_(Mat *mat,IS *row,const MatFactorInfo *info, int *ierr) 75122688b47SSatish Balay { 7524d03fd2bSBarry Smith *ierr = MatICCFactor(*mat,*row,info); 75322688b47SSatish Balay } 75422688b47SSatish Balay 7554d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matfactorinfoinitialize_(MatFactorInfo *info, int *ierr) 75622688b47SSatish Balay { 7574d03fd2bSBarry Smith *ierr = MatFactorInfoInitialize(info); 75822688b47SSatish Balay } 759