1af0996ceSBarry Smith #include <petsc/private/fortranimpl.h> 2c6db04a5SJed Brown #include <petscmat.h> 3665c2dedSJed Brown #include <petscviewer.h> 4f4e70085SSatish Balay 5f4e70085SSatish Balay #if defined(PETSC_HAVE_FORTRAN_CAPS) 64d03fd2bSBarry Smith #define matsetvalues_ MATSETVALUES 71006886cSSatish Balay #define matsetvaluesnnnn_ MATSETVALUESNNNN 83b494cfeSSatish Balay #define matsetvalues0_ MATSETVALUES0 91b266c99SBarry Smith #define matsetvaluesnn1_ MATSETVALUESNN1 104d03fd2bSBarry Smith #define matsetvalues11_ MATSETVALUES11 114d03fd2bSBarry Smith #define matsetvalues1n_ MATSETVALUES1N 124d03fd2bSBarry Smith #define matsetvaluesn1_ MATSETVALUESN1 133b494cfeSSatish Balay #define matsetvaluesblocked0_ MATSETVALUESBLOCKED0 144d03fd2bSBarry Smith #define matsetvaluesblocked11_ MATSETVALUESBLOCKED11 154d03fd2bSBarry Smith #define matsetvaluesblocked111_ MATSETVALUESBLOCKED111 164d03fd2bSBarry Smith #define matsetvaluesblocked1n_ MATSETVALUESBLOCKED1N 174d03fd2bSBarry Smith #define matsetvaluesblockedn1_ MATSETVALUESBLOCKEDN1 184d03fd2bSBarry Smith #define matsetvaluesblockedlocal_ MATSETVALUESBLOCKEDLOCAL 193b494cfeSSatish Balay #define matsetvaluesblockedlocal0_ MATSETVALUESBLOCKEDLOCAL0 204d03fd2bSBarry Smith #define matsetvaluesblockedlocal11_ MATSETVALUESBLOCKEDLOCAL11 214d03fd2bSBarry Smith #define matsetvaluesblockedlocal111_ MATSETVALUESBLOCKEDLOCAL111 224d03fd2bSBarry Smith #define matsetvaluesblockedlocal1n_ MATSETVALUESBLOCKEDLOCAL1N 234d03fd2bSBarry Smith #define matsetvaluesblockedlocaln1_ MATSETVALUESBLOCKEDLOCALN1 244d03fd2bSBarry Smith #define matsetvalueslocal_ MATSETVALUESLOCAL 253b494cfeSSatish Balay #define matsetvalueslocal0_ MATSETVALUESLOCAL0 264d03fd2bSBarry Smith #define matsetvalueslocal11_ MATSETVALUESLOCAL11 274d03fd2bSBarry Smith #define matsetvalueslocal11nn_ MATSETVALUESLOCAL11NN 284d03fd2bSBarry Smith #define matsetvalueslocal111_ MATSETVALUESLOCAL111 294d03fd2bSBarry Smith #define matsetvalueslocal1n_ MATSETVALUESLOCAL1N 304d03fd2bSBarry Smith #define matsetvalueslocaln1_ MATSETVALUESLOCALN1 3187bcf4e0SBarry Smith #define matgetrowmin_ MATGETROWMIN 3287bcf4e0SBarry Smith #define matgetrowminabs_ MATGETROWMINABS 335928be6bSBarry Smith #define matgetrowmax_ MATGETROWMAX 345928be6bSBarry Smith #define matgetrowmaxabs_ MATGETROWMAXABS 357d6bfa3bSBarry Smith #define matdestroymatrices_ MATDESTROYMATRICES 365dffd610SBarry Smith #define matgetfactor_ MATGETFACTOR 3735bd34faSBarry Smith #define matfactorgetsolverpackage_ MATFACTORGETSOLVERPACKAGE 38f4e70085SSatish Balay #define matgetrowij_ MATGETROWIJ 39f4e70085SSatish Balay #define matrestorerowij_ MATRESTOREROWIJ 40f4e70085SSatish Balay #define matgetrow_ MATGETROW 41f4e70085SSatish Balay #define matrestorerow_ MATRESTOREROW 42f7e310deSShri Abhyankar #define matload_ MATLOAD 43f4e70085SSatish Balay #define matview_ MATVIEW 448c778c55SBarry Smith #define matseqaijgetarray_ MATSEQAIJGETARRAY 456778691eSSatish Balay #define matseqaijrestorearray_ MATSEQAIJRESTOREARRAY 468c778c55SBarry Smith #define matdensegetarray_ MATDENSEGETARRAY 478c778c55SBarry Smith #define matdenserestorearray_ MATDENSERESTOREARRAY 48f4e70085SSatish Balay #define matconvert_ MATCONVERT 49f4e70085SSatish Balay #define matgetsubmatrices_ MATGETSUBMATRICES 5017ede90eSSatish Balay #define matzerorowscolumns_ MATZEROROWSCOLUMNS 5117ede90eSSatish Balay #define matzerorowscolumnsis_ MATZEROROWSCOLUMNSIS 5217ede90eSSatish Balay #define matzerorowsstencil_ MATZEROROWSSTENCIL 53d25a37e1SJed Brown #define matzerorowscolumnsstencil_ MATZEROROWSCOLUMNSSTENCIL 54f4e70085SSatish Balay #define matzerorows_ MATZEROROWS 55f4e70085SSatish Balay #define matzerorowsis_ MATZEROROWSIS 56f4e70085SSatish Balay #define matzerorowslocal_ MATZEROROWSLOCAL 57f4e70085SSatish Balay #define matzerorowslocalis_ MATZEROROWSLOCALIS 5817ede90eSSatish Balay #define matzerorowscolumnslocal_ MATZEROROWSCOLUMNSLOCAL 5917ede90eSSatish Balay #define matzerorowscolumnslocalis_ MATZEROROWSCOLUMNSLOCALIS 601eea217eSSatish Balay #define matsetoptionsprefix_ MATSETOPTIONSPREFIX 61fcc9d04bSBarry Smith #define matcreatevecs_ MATCREATEVECS 62c9d5ca86SBarry Smith #define matnullspaceremove_ MATNULLSPACEREMOVE 635ba43861SSatish Balay #define matgetinfo_ MATGETINFO 6422688b47SSatish Balay #define matlufactor_ MATLUFACTOR 6522688b47SSatish Balay #define matilufactor_ MATILUFACTOR 6622688b47SSatish Balay #define matlufactorsymbolic_ MATLUFACTORSYMBOLIC 6722688b47SSatish Balay #define matlufactornumeric_ MATLUFACTORNUMERIC 6822688b47SSatish Balay #define matcholeskyfactor_ MATCHOLESKYFACTOR 6922688b47SSatish Balay #define matcholeskyfactorsymbolic_ MATCHOLESKYFACTORSYMBOLIC 7022688b47SSatish Balay #define matcholeskyfactornumeric_ MATCHOLESKYFACTORNUMERIC 7122688b47SSatish Balay #define matilufactorsymbolic_ MATILUFACTORSYMBOLIC 7222688b47SSatish Balay #define maticcfactorsymbolic_ MATICCFACTORSYMBOLIC 7322688b47SSatish Balay #define maticcfactor_ MATICCFACTOR 7422688b47SSatish Balay #define matfactorinfoinitialize_ MATFACTORINFOINITIALIZE 75b22b330cSBarry Smith #define matnullspacesetfunction_ MATNULLSPACESETFUNCTION 760905d9aaSJed Brown #define matfindnonzerorows_ MATFINDNONZEROROWS 77*3be0408cSBarry Smith #define matgetsize00_ MATGETSIZE00 78*3be0408cSBarry Smith #define matgetsize10_ MATGETSIZE10 79*3be0408cSBarry Smith #define matgetsize01_ MATGETSIZE01 80*3be0408cSBarry Smith #define matgetlocalsize00_ MATGETLOCALSIZE00 81*3be0408cSBarry Smith #define matgetlocalsize10_ MATGETLOCALSIZE10 82*3be0408cSBarry Smith #define matgetlocalsize01_ MATGETLOCALSIZE01 83f4e70085SSatish Balay #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE) 844d03fd2bSBarry Smith #define matsetvalues_ matsetvalues 851006886cSSatish Balay #define matsetvaluesnnnn_ matsetvaluesnnnn 863b494cfeSSatish Balay #define matsetvalues0_ matsetvalues0 871b266c99SBarry Smith #define matsetvaluesnn1_ matsetvaluesnn1 884d03fd2bSBarry Smith #define matsetvalues11_ matsetvalues11 894d03fd2bSBarry Smith #define matsetvaluesn1_ matsetvaluesn1 904d03fd2bSBarry Smith #define matsetvalues1n_ matsetvalues1n 914d03fd2bSBarry Smith #define matsetvalueslocal_ matsetvalueslocal 923b494cfeSSatish Balay #define matsetvalueslocal0_ matsetvalueslocal0 934d03fd2bSBarry Smith #define matsetvalueslocal11_ matsetvalueslocal11 944d03fd2bSBarry Smith #define matsetvalueslocal11nn_ matsetvalueslocal11nn 954d03fd2bSBarry Smith #define matsetvalueslocal111_ matsetvalueslocal111 964d03fd2bSBarry Smith #define matsetvalueslocal1n_ matsetvalueslocal1n 974d03fd2bSBarry Smith #define matsetvalueslocaln1_ matsetvalueslocaln1 984d03fd2bSBarry Smith #define matsetvaluesblocked_ matsetvaluesblocked 993b494cfeSSatish Balay #define matsetvaluesblocked0_ matsetvaluesblocked0 1004d03fd2bSBarry Smith #define matsetvaluesblocked11_ matsetvaluesblocked11 1014d03fd2bSBarry Smith #define matsetvaluesblocked111_ matsetvaluesblocked111 1024d03fd2bSBarry Smith #define matsetvaluesblocked1n_ matsetvaluesblocked1n 1034d03fd2bSBarry Smith #define matsetvaluesblocked1n_ matsetvaluesblockedn1 1044d03fd2bSBarry Smith #define matsetvaluesblockedlocal_ matsetvaluesblockedlocal 1053b494cfeSSatish Balay #define matsetvaluesblockedlocal0_ matsetvaluesblockedlocal0 1064d03fd2bSBarry Smith #define matsetvaluesblockedlocal11_ matsetvaluesblockedlocal11 1074d03fd2bSBarry Smith #define matsetvaluesblockedlocal111_ matsetvaluesblockedlocal111 1084d03fd2bSBarry Smith #define matsetvaluesblockedlocal1n_ matsetvaluesblockedlocal1n 1094d03fd2bSBarry Smith #define matsetvaluesblockedlocal1n_ matsetvaluesblockedlocaln1 11087bcf4e0SBarry Smith #define matgetrowmin_ matgetrowmin 11187bcf4e0SBarry Smith #define matgetrowminabs_ matgetrowminabs 1125928be6bSBarry Smith #define matgetrowmax_ matgetrowmax 1135928be6bSBarry Smith #define matgetrowmaxabs_ matgetrowmaxabs 1145928be6bSBarry Smith #define matdestroymatrices_ matdestroymatrices 1155dffd610SBarry Smith #define matgetfactor_ matgetfactor 11635bd34faSBarry Smith #define matfactorgetsolverpackage_ matfactorgetsolverpackage 117fcc9d04bSBarry Smith #define matcreatevecs_ matcreatevecs 118f4e70085SSatish Balay #define matgetrowij_ matgetrowij 119f4e70085SSatish Balay #define matrestorerowij_ matrestorerowij 120f4e70085SSatish Balay #define matgetrow_ matgetrow 121f4e70085SSatish Balay #define matrestorerow_ matrestorerow 122f4e70085SSatish Balay #define matview_ matview 123f7e310deSShri Abhyankar #define matload_ matload 1248c778c55SBarry Smith #define matseqaijgetarray_ matseqaijgetarray 1258c778c55SBarry Smith #define matseqaijrestorearray_ matseqaijrestorearray 1268c778c55SBarry Smith #define matdensegetarray_ matdensegetarray 1278c778c55SBarry Smith #define matdenserestorearray_ matdenserestorearray 128f4e70085SSatish Balay #define matconvert_ matconvert 129f4e70085SSatish Balay #define matgetsubmatrices_ matgetsubmatrices 13017ede90eSSatish Balay #define matzerorowscolumns_ matzerorowscolumns 13117ede90eSSatish Balay #define matzerorowscolumnsis_ matzerorowscolumnsis 13217ede90eSSatish Balay #define matzerorowsstencil_ matzerorowsstencil 133d25a37e1SJed Brown #define matzerorowscolumnsstencil_ matzerorowscolumnsstencil 134f4e70085SSatish Balay #define matzerorows_ matzerorows 135f4e70085SSatish Balay #define matzerorowsis_ matzerorowsis 136f4e70085SSatish Balay #define matzerorowslocal_ matzerorowslocal 137f4e70085SSatish Balay #define matzerorowslocalis_ matzerorowslocalis 13817ede90eSSatish Balay #define matzerorowscolumnslocal_ matzerorowscolumnslocal 13917ede90eSSatish Balay #define matzerorowscolumnslocalis_ matzerorowscolumnslocalis 1401eea217eSSatish Balay #define matsetoptionsprefix_ matsetoptionsprefix 141812c3f48SMatthew Knepley #define matnullspaceremove_ matnullspaceremove 1425ba43861SSatish Balay #define matgetinfo_ matgetinfo 14322688b47SSatish Balay #define matlufactor_ matlufactor 14422688b47SSatish Balay #define matilufactor_ matilufactor 14522688b47SSatish Balay #define matlufactorsymbolic_ matlufactorsymbolic 14622688b47SSatish Balay #define matlufactornumeric_ matlufactornumeric 14722688b47SSatish Balay #define matcholeskyfactor_ matcholeskyfactor 14822688b47SSatish Balay #define matcholeskyfactorsymbolic_ matcholeskyfactorsymbolic 14922688b47SSatish Balay #define matcholeskyfactornumeric_ matcholeskyfactornumeric 15022688b47SSatish Balay #define matilufactorsymbolic_ matilufactorsymbolic 15122688b47SSatish Balay #define maticcfactorsymbolic_ maticcfactorsymbolic 15222688b47SSatish Balay #define maticcfactor_ maticcfactor 15322688b47SSatish Balay #define matfactorinfoinitialize_ matfactorinfoinitialize 154b22b330cSBarry Smith #define matnullspacesetfunction_ matnullspacesetfunction 1550905d9aaSJed Brown #define matfindnonzerorows_ matfindnonzerorows 156*3be0408cSBarry Smith #define matgetsize00_ matgetsize00 157*3be0408cSBarry Smith #define matgetsize10_ matgetsize10 158*3be0408cSBarry Smith #define matgetsize01_ matgetsize01 159*3be0408cSBarry Smith #define matgetlocalsize00_ matgetlocalsize00 160*3be0408cSBarry Smith #define matgetlocalsize10_ matgetlocalsize10 161*3be0408cSBarry Smith #define matgetlocalsize01_ matgetlocalsize01 162f4e70085SSatish Balay #endif 163f4e70085SSatish Balay 164*3be0408cSBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetsize_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr ) 165*3be0408cSBarry Smith { 166*3be0408cSBarry Smith CHKFORTRANNULLINTEGER(m); 167*3be0408cSBarry Smith CHKFORTRANNULLINTEGER(n); 168*3be0408cSBarry Smith *ierr = MatGetSize(*mat,m,n); 169*3be0408cSBarry Smith } 170*3be0408cSBarry Smith 171*3be0408cSBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetsize00_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr ) 172*3be0408cSBarry Smith { 173*3be0408cSBarry Smith matgetsize_(mat,m,n,ierr); 174*3be0408cSBarry Smith } 175*3be0408cSBarry Smith 176*3be0408cSBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetsize10_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr ) 177*3be0408cSBarry Smith { 178*3be0408cSBarry Smith matgetsize_(mat,m,n,ierr); 179*3be0408cSBarry Smith } 180*3be0408cSBarry Smith 181*3be0408cSBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetsize01_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr ) 182*3be0408cSBarry Smith { 183*3be0408cSBarry Smith matgetsize_(mat,m,n,ierr); 184*3be0408cSBarry Smith } 185*3be0408cSBarry Smith 186*3be0408cSBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetlocalsize_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr ) 187*3be0408cSBarry Smith { 188*3be0408cSBarry Smith CHKFORTRANNULLINTEGER(m); 189*3be0408cSBarry Smith CHKFORTRANNULLINTEGER(n); 190*3be0408cSBarry Smith *ierr = MatGetLocalSize(*mat,m,n); 191*3be0408cSBarry Smith } 192*3be0408cSBarry Smith 193*3be0408cSBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetlocalsize00_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr ) 194*3be0408cSBarry Smith { 195*3be0408cSBarry Smith matgetlocalsize_(mat,m,n,ierr); 196*3be0408cSBarry Smith } 197*3be0408cSBarry Smith 198*3be0408cSBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetlocalsize10_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr ) 199*3be0408cSBarry Smith { 200*3be0408cSBarry Smith matgetlocalsize_(mat,m,n,ierr); 201*3be0408cSBarry Smith } 202*3be0408cSBarry Smith 203*3be0408cSBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetlocalsize01_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr ) 204*3be0408cSBarry Smith { 205*3be0408cSBarry Smith matgetlocalsize_(mat,m,n,ierr); 206*3be0408cSBarry Smith } 207*3be0408cSBarry Smith 2084d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvaluesblocked_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){ 2094d03fd2bSBarry Smith *ierr = MatSetValuesBlocked(*mat,*m,idxm,*n,idxn,v,*addv); 2104d03fd2bSBarry Smith } 2114d03fd2bSBarry Smith 2123b494cfeSSatish Balay PETSC_EXTERN void PETSC_STDCALL matsetvaluesblocked0_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){ 2133b494cfeSSatish Balay matsetvaluesblocked_(mat,m,idxm,n,idxn,v,addv,ierr); 2143b494cfeSSatish Balay } 2153b494cfeSSatish Balay 2164d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvaluesblocked11_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){ 2174d03fd2bSBarry Smith matsetvaluesblocked_(mat,m,idxm,n,idxn,v,addv,ierr); 2184d03fd2bSBarry Smith } 2194d03fd2bSBarry Smith 2204d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvaluesblocked111_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){ 2214d03fd2bSBarry Smith matsetvaluesblocked_(mat,m,idxm,n,idxn,v,addv,ierr); 2224d03fd2bSBarry Smith } 2234d03fd2bSBarry Smith 2244d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvaluesblocked1n_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){ 2254d03fd2bSBarry Smith matsetvaluesblocked_(mat,m,idxm,n,idxn,v,addv,ierr); 2264d03fd2bSBarry Smith } 2274d03fd2bSBarry Smith 2284d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvaluesblockedn1_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){ 2294d03fd2bSBarry Smith matsetvaluesblocked_(mat,m,idxm,n,idxn,v,addv,ierr); 2304d03fd2bSBarry Smith } 2314d03fd2bSBarry Smith 2324d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvaluesblockedlocal_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr ) 2334d03fd2bSBarry Smith { 2344d03fd2bSBarry Smith *ierr = MatSetValuesBlockedLocal(*mat,*nrow,irow,*ncol,icol,y,*addv); 2354d03fd2bSBarry Smith } 2364d03fd2bSBarry Smith 2373b494cfeSSatish Balay PETSC_EXTERN void PETSC_STDCALL matsetvaluesblockedlocal0_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){ 2383b494cfeSSatish Balay matsetvaluesblockedlocal_(mat,m,idxm,n,idxn,v,addv,ierr); 2393b494cfeSSatish Balay } 2403b494cfeSSatish Balay 2414d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvaluesblockedlocal11_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){ 2424d03fd2bSBarry Smith matsetvaluesblockedlocal_(mat,m,idxm,n,idxn,v,addv,ierr); 2434d03fd2bSBarry Smith } 2444d03fd2bSBarry Smith 2454d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvaluesblockedlocal111_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){ 2464d03fd2bSBarry Smith matsetvaluesblockedlocal_(mat,m,idxm,n,idxn,v,addv,ierr); 2474d03fd2bSBarry Smith } 2484d03fd2bSBarry Smith 2494d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvaluesblockedlocal1n_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){ 2504d03fd2bSBarry Smith matsetvaluesblockedlocal_(mat,m,idxm,n,idxn,v,addv,ierr); 2514d03fd2bSBarry Smith } 2524d03fd2bSBarry Smith 2534d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvaluesblockedlocaln1_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){ 2544d03fd2bSBarry Smith matsetvaluesblockedlocal_(mat,m,idxm,n,idxn,v,addv,ierr); 2554d03fd2bSBarry Smith } 2564d03fd2bSBarry Smith 2574d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvalues_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ) 2584d03fd2bSBarry Smith { 2594d03fd2bSBarry Smith *ierr = MatSetValues(*mat,*m,idxm,*n,idxn,v,*addv); 2604d03fd2bSBarry Smith } 2614d03fd2bSBarry Smith 2621b266c99SBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvaluesnnnn_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ) 2631b266c99SBarry Smith { 2641b266c99SBarry Smith matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr); 2651b266c99SBarry Smith } 2661b266c99SBarry Smith 2673b494cfeSSatish Balay PETSC_EXTERN void PETSC_STDCALL matsetvalues0_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ) 2683b494cfeSSatish Balay { 2693b494cfeSSatish Balay matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr); 2703b494cfeSSatish Balay } 2713b494cfeSSatish Balay 2721b266c99SBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvaluesnn1_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ) 2731b266c99SBarry Smith { 2741b266c99SBarry Smith matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr); 2751b266c99SBarry Smith } 2761b266c99SBarry Smith 2774d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvalues11_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ) 2784d03fd2bSBarry Smith { 2794d03fd2bSBarry Smith matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr); 2804d03fd2bSBarry Smith } 2814d03fd2bSBarry Smith 2824d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvaluesn1_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ) 2834d03fd2bSBarry Smith { 2844d03fd2bSBarry Smith matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr); 2854d03fd2bSBarry Smith } 2864d03fd2bSBarry Smith 2874d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvalues1n_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ) 2884d03fd2bSBarry Smith { 2894d03fd2bSBarry Smith matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr); 2904d03fd2bSBarry Smith } 2914d03fd2bSBarry Smith 2924d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvalueslocal_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr ) 2934d03fd2bSBarry Smith { 2944d03fd2bSBarry Smith *ierr = MatSetValuesLocal(*mat,*nrow,irow,*ncol,icol,y,*addv); 2954d03fd2bSBarry Smith } 2964d03fd2bSBarry Smith 2973b494cfeSSatish Balay PETSC_EXTERN void PETSC_STDCALL matsetvalueslocal0_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr ) 2983b494cfeSSatish Balay { 2993b494cfeSSatish Balay matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr); 3003b494cfeSSatish Balay } 3013b494cfeSSatish Balay 3024d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvalueslocal11_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr ) 3034d03fd2bSBarry Smith { 3044d03fd2bSBarry Smith matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr); 3054d03fd2bSBarry Smith } 3064d03fd2bSBarry Smith 3074d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvalueslocal11nn_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr ) 3084d03fd2bSBarry Smith { 3094d03fd2bSBarry Smith matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr); 3104d03fd2bSBarry Smith } 3114d03fd2bSBarry Smith 3124d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvalueslocal111_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr ) 3134d03fd2bSBarry Smith { 3144d03fd2bSBarry Smith matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr); 3154d03fd2bSBarry Smith } 3164d03fd2bSBarry Smith 3174d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvalueslocal1n_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr ) 3184d03fd2bSBarry Smith { 3194d03fd2bSBarry Smith matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr); 3204d03fd2bSBarry Smith } 3214d03fd2bSBarry Smith 3224d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvalueslocaln1_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr ) 3234d03fd2bSBarry Smith { 3244d03fd2bSBarry Smith matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr); 3254d03fd2bSBarry Smith } 3264d03fd2bSBarry Smith 32787bcf4e0SBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetrowmin_(Mat *mat,Vec *v,PetscInt idx[], int *ierr ) 32887bcf4e0SBarry Smith { 32987bcf4e0SBarry Smith CHKFORTRANNULLINTEGER(idx); 33087bcf4e0SBarry Smith *ierr = MatGetRowMin(*mat,*v,idx); 33187bcf4e0SBarry Smith } 3324d03fd2bSBarry Smith 33387bcf4e0SBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetrowminabs_(Mat *mat,Vec *v,PetscInt idx[], int *ierr ) 33487bcf4e0SBarry Smith { 33587bcf4e0SBarry Smith CHKFORTRANNULLINTEGER(idx); 33687bcf4e0SBarry Smith *ierr = MatGetRowMinAbs(*mat,*v,idx); 33787bcf4e0SBarry Smith } 33887bcf4e0SBarry Smith 3395928be6bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetrowmax_(Mat *mat,Vec *v,PetscInt idx[], int *ierr ) 3405928be6bSBarry Smith { 3415928be6bSBarry Smith CHKFORTRANNULLINTEGER(idx); 3425928be6bSBarry Smith *ierr = MatGetRowMax(*mat,*v,idx); 3435928be6bSBarry Smith } 3445928be6bSBarry Smith 3455928be6bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetrowmaxabs_(Mat *mat,Vec *v,PetscInt idx[], int *ierr ) 3465928be6bSBarry Smith { 3475928be6bSBarry Smith CHKFORTRANNULLINTEGER(idx); 3485928be6bSBarry Smith *ierr = MatGetRowMaxAbs(*mat,*v,idx); 3495928be6bSBarry Smith } 3505928be6bSBarry Smith 351b22b330cSBarry Smith static PetscErrorCode ournullfunction(MatNullSpace sp,Vec x,void *ctx) 352b22b330cSBarry Smith { 353b22b330cSBarry Smith PetscErrorCode ierr = 0; 354b22b330cSBarry Smith (*(void (PETSC_STDCALL *)(MatNullSpace*,Vec*,void*,PetscErrorCode*))(((PetscObject)sp)->fortran_func_pointers[0]))(&sp,&x,ctx,&ierr);CHKERRQ(ierr); 355b22b330cSBarry Smith return 0; 356b22b330cSBarry Smith } 357b22b330cSBarry Smith 3588cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matnullspacesetfunction_(MatNullSpace *sp, PetscErrorCode (*rem)(MatNullSpace,Vec,void*),void *ctx,PetscErrorCode *ierr) 359b22b330cSBarry Smith { 360b22b330cSBarry Smith PetscObjectAllocateFortranPointers(*sp,1); 361b22b330cSBarry Smith ((PetscObject)*sp)->fortran_func_pointers[0] = (PetscVoidFunction)rem; 36226fbe8dcSKarl Rupp 363b22b330cSBarry Smith *ierr = MatNullSpaceSetFunction(*sp,ournullfunction,ctx); 364b22b330cSBarry Smith } 365b22b330cSBarry Smith 366d2da0f5dSBarry Smith PETSC_EXTERN void PETSC_STDCALL matcreatevecs_(Mat *mat,Vec *right,Vec *left, int *ierr) 3677c54600cSBarry Smith { 3687c54600cSBarry Smith CHKFORTRANNULLOBJECT(right); 3697c54600cSBarry Smith CHKFORTRANNULLOBJECT(left); 3702a7a6963SBarry Smith *ierr = MatCreateVecs(*mat,right,left); 3717c54600cSBarry Smith } 3727c54600cSBarry Smith 3738cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matgetrowij_(Mat *B,PetscInt *shift,PetscBool *sym,PetscBool *blockcompressed,PetscInt *n,PetscInt *ia,size_t *iia, 374ace3abfcSBarry Smith PetscInt *ja,size_t *jja,PetscBool *done,PetscErrorCode *ierr) 375f4e70085SSatish Balay { 3761a83f524SJed Brown const PetscInt *IA,*JA; 3778f7157efSSatish Balay *ierr = MatGetRowIJ(*B,*shift,*sym,*blockcompressed,n,&IA,&JA,done);if (*ierr) return; 3781a83f524SJed Brown *iia = PetscIntAddressToFortran(ia,(PetscInt*)IA); 3791a83f524SJed Brown *jja = PetscIntAddressToFortran(ja,(PetscInt*)JA); 380f4e70085SSatish Balay } 381f4e70085SSatish Balay 3828cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matrestorerowij_(Mat *B,PetscInt *shift,PetscBool *sym,PetscBool *blockcompressed, PetscInt *n,PetscInt *ia,size_t *iia, 383ace3abfcSBarry Smith PetscInt *ja,size_t *jja,PetscBool *done,PetscErrorCode *ierr) 384f4e70085SSatish Balay { 3851a83f524SJed Brown const PetscInt *IA = PetscIntAddressFromFortran(ia,*iia),*JA = PetscIntAddressFromFortran(ja,*jja); 3868f7157efSSatish Balay *ierr = MatRestoreRowIJ(*B,*shift,*sym,*blockcompressed,n,&IA,&JA,done); 387f4e70085SSatish Balay } 388f4e70085SSatish Balay 389f4e70085SSatish Balay /* 390f4e70085SSatish Balay This is a poor way of storing the column and value pointers 391f4e70085SSatish Balay generated by MatGetRow() to be returned with MatRestoreRow() 392f4e70085SSatish Balay but there is not natural,good place else to store them. Hence 393f4e70085SSatish Balay Fortran programmers can only have one outstanding MatGetRows() 394f4e70085SSatish Balay at a time. 395f4e70085SSatish Balay */ 396f4e70085SSatish Balay static PetscErrorCode matgetrowactive = 0; 397f4e70085SSatish Balay static const PetscInt *my_ocols = 0; 398f4e70085SSatish Balay static const PetscScalar *my_ovals = 0; 399f4e70085SSatish Balay 4008cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matgetrow_(Mat *mat,PetscInt *row,PetscInt *ncols,PetscInt *cols,PetscScalar *vals,PetscErrorCode *ierr) 401f4e70085SSatish Balay { 402f4e70085SSatish Balay const PetscInt **oocols = &my_ocols; 403f4e70085SSatish Balay const PetscScalar **oovals = &my_ovals; 404f4e70085SSatish Balay 405f4e70085SSatish Balay if (matgetrowactive) { 406efca3c55SSatish Balay PetscError(PETSC_COMM_SELF,__LINE__,"MatGetRow_Fortran",__FILE__,PETSC_ERR_ARG_WRONGSTATE,PETSC_ERROR_INITIAL, 407f4e70085SSatish Balay "Cannot have two MatGetRow() active simultaneously\n\ 408f4e70085SSatish Balay call MatRestoreRow() before calling MatGetRow() a second time"); 409f4e70085SSatish Balay *ierr = 1; 410f4e70085SSatish Balay return; 411f4e70085SSatish Balay } 412f4e70085SSatish Balay 4130298fd71SBarry Smith CHKFORTRANNULLINTEGER(cols); if (!cols) oocols = NULL; 4140298fd71SBarry Smith CHKFORTRANNULLSCALAR(vals); if (!vals) oovals = NULL; 415f4e70085SSatish Balay 416f4e70085SSatish Balay *ierr = MatGetRow(*mat,*row,ncols,oocols,oovals); 417f4e70085SSatish Balay if (*ierr) return; 418f4e70085SSatish Balay 419f4e70085SSatish Balay if (oocols) { *ierr = PetscMemcpy(cols,my_ocols,(*ncols)*sizeof(PetscInt)); if (*ierr) return;} 420f4e70085SSatish Balay if (oovals) { *ierr = PetscMemcpy(vals,my_ovals,(*ncols)*sizeof(PetscScalar)); if (*ierr) return;} 421f4e70085SSatish Balay matgetrowactive = 1; 422f4e70085SSatish Balay } 423f4e70085SSatish Balay 4248cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matrestorerow_(Mat *mat,PetscInt *row,PetscInt *ncols,PetscInt *cols,PetscScalar *vals,PetscErrorCode *ierr) 425f4e70085SSatish Balay { 426f4e70085SSatish Balay const PetscInt **oocols = &my_ocols; 427f4e70085SSatish Balay const PetscScalar **oovals = &my_ovals; 428f4e70085SSatish Balay if (!matgetrowactive) { 429efca3c55SSatish Balay PetscError(PETSC_COMM_SELF,__LINE__,"MatRestoreRow_Fortran",__FILE__,PETSC_ERR_ARG_WRONGSTATE,PETSC_ERROR_INITIAL, 430f4e70085SSatish Balay "Must call MatGetRow() first"); 431f4e70085SSatish Balay *ierr = 1; 432f4e70085SSatish Balay return; 433f4e70085SSatish Balay } 4340298fd71SBarry Smith CHKFORTRANNULLINTEGER(cols); if (!cols) oocols = NULL; 4350298fd71SBarry Smith CHKFORTRANNULLSCALAR(vals); if (!vals) oovals = NULL; 436f4e70085SSatish Balay 437f4e70085SSatish Balay *ierr = MatRestoreRow(*mat,*row,ncols,oocols,oovals); 438f4e70085SSatish Balay matgetrowactive = 0; 439f4e70085SSatish Balay } 440f4e70085SSatish Balay 4418cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matview_(Mat *mat,PetscViewer *vin,PetscErrorCode *ierr) 442f4e70085SSatish Balay { 443f4e70085SSatish Balay PetscViewer v; 444f4e70085SSatish Balay PetscPatchDefaultViewers_Fortran(vin,v); 445f4e70085SSatish Balay *ierr = MatView(*mat,v); 446f4e70085SSatish Balay } 447f4e70085SSatish Balay 4488cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matload_(Mat *mat,PetscViewer *vin,PetscErrorCode *ierr) 449f7e310deSShri Abhyankar { 450f7e310deSShri Abhyankar PetscViewer v; 451f7e310deSShri Abhyankar PetscPatchDefaultViewers_Fortran(vin,v); 452112444f4SShri Abhyankar *ierr = MatLoad(*mat,v); 453f7e310deSShri Abhyankar } 454f7e310deSShri Abhyankar 4558cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matseqaijgetarray_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr) 456f4e70085SSatish Balay { 457f4e70085SSatish Balay PetscScalar *mm; 458f4e70085SSatish Balay PetscInt m,n; 459f4e70085SSatish Balay 4608c778c55SBarry Smith *ierr = MatSeqAIJGetArray(*mat,&mm); if (*ierr) return; 461f4e70085SSatish Balay *ierr = MatGetSize(*mat,&m,&n); if (*ierr) return; 462f91d1997SBarry Smith *ierr = PetscScalarAddressToFortran((PetscObject)*mat,1,fa,mm,m*n,ia); if (*ierr) return; 463f4e70085SSatish Balay } 464f4e70085SSatish Balay 4658cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matseqaijrestorearray_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr) 466f4e70085SSatish Balay { 467f4e70085SSatish Balay PetscScalar *lx; 468f4e70085SSatish Balay PetscInt m,n; 469f4e70085SSatish Balay 470f4e70085SSatish Balay *ierr = MatGetSize(*mat,&m,&n); if (*ierr) return; 471f4e70085SSatish Balay *ierr = PetscScalarAddressFromFortran((PetscObject)*mat,fa,*ia,m*n,&lx);if (*ierr) return; 4728c778c55SBarry Smith *ierr = MatSeqAIJRestoreArray(*mat,&lx);if (*ierr) return; 473f4e70085SSatish Balay } 474f4e70085SSatish Balay 4758cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matdensegetarray_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr) 47673a71a0fSBarry Smith { 47773a71a0fSBarry Smith PetscScalar *mm; 47873a71a0fSBarry Smith PetscInt m,n; 47973a71a0fSBarry Smith 4808c778c55SBarry Smith *ierr = MatDenseGetArray(*mat,&mm); if (*ierr) return; 48173a71a0fSBarry Smith *ierr = MatGetSize(*mat,&m,&n); if (*ierr) return; 48273a71a0fSBarry Smith *ierr = PetscScalarAddressToFortran((PetscObject)*mat,1,fa,mm,m*n,ia); if (*ierr) return; 48373a71a0fSBarry Smith } 48473a71a0fSBarry Smith 4858cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matdenserestorearray_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr) 48673a71a0fSBarry Smith { 48773a71a0fSBarry Smith PetscScalar *lx; 48873a71a0fSBarry Smith PetscInt m,n; 48973a71a0fSBarry Smith 49073a71a0fSBarry Smith *ierr = MatGetSize(*mat,&m,&n); if (*ierr) return; 49173a71a0fSBarry Smith *ierr = PetscScalarAddressFromFortran((PetscObject)*mat,fa,*ia,m*n,&lx);if (*ierr) return; 4928c778c55SBarry Smith *ierr = MatDenseRestoreArray(*mat,&lx);if (*ierr) return; 49373a71a0fSBarry Smith } 49473a71a0fSBarry Smith 4958cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matfactorgetsolverpackage_(Mat *mat,CHAR name PETSC_MIXED_LEN(len),PetscErrorCode *ierr PETSC_END_LEN(len)) 49635bd34faSBarry Smith { 49735bd34faSBarry Smith const char *tname; 49835bd34faSBarry Smith 49935bd34faSBarry Smith *ierr = MatFactorGetSolverPackage(*mat,&tname);if (*ierr) return; 50035bd34faSBarry Smith if (name != PETSC_NULL_CHARACTER_Fortran) { 50135bd34faSBarry Smith *ierr = PetscStrncpy(name,tname,len);if (*ierr) return; 50235bd34faSBarry Smith } 50335bd34faSBarry Smith FIXRETURNCHAR(PETSC_TRUE,name,len); 50435bd34faSBarry Smith } 50535bd34faSBarry Smith 5068cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matgetfactor_(Mat *mat,CHAR outtype PETSC_MIXED_LEN(len),MatFactorType *ftype,Mat *M,PetscErrorCode *ierr PETSC_END_LEN(len)) 5075dffd610SBarry Smith { 5085dffd610SBarry Smith char *t; 5095dffd610SBarry Smith FIXCHAR(outtype,len,t); 5109be81726SHong Zhang *ierr = MatGetFactor(*mat,t,*ftype,M); 5115dffd610SBarry Smith FREECHAR(outtype,t); 5125dffd610SBarry Smith } 5135dffd610SBarry Smith 5148cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matconvert_(Mat *mat,CHAR outtype PETSC_MIXED_LEN(len),MatReuse *reuse,Mat *M,PetscErrorCode *ierr PETSC_END_LEN(len)) 515f4e70085SSatish Balay { 516f4e70085SSatish Balay char *t; 517f4e70085SSatish Balay FIXCHAR(outtype,len,t); 518f4e70085SSatish Balay *ierr = MatConvert(*mat,t,*reuse,M); 519f4e70085SSatish Balay FREECHAR(outtype,t); 520f4e70085SSatish Balay } 521f4e70085SSatish Balay 522f4e70085SSatish Balay /* 523f4e70085SSatish Balay MatGetSubmatrices() is slightly different from C since the 524f4e70085SSatish Balay Fortran provides the array to hold the submatrix objects,while in C that 525f4e70085SSatish Balay array is allocated by the MatGetSubmatrices() 526f4e70085SSatish Balay */ 5278cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matgetsubmatrices_(Mat *mat,PetscInt *n,IS *isrow,IS *iscol,MatReuse *scall,Mat *smat,PetscErrorCode *ierr) 528f4e70085SSatish Balay { 529f4e70085SSatish Balay Mat *lsmat; 530f4e70085SSatish Balay PetscInt i; 531f4e70085SSatish Balay 532f4e70085SSatish Balay if (*scall == MAT_INITIAL_MATRIX) { 533f4e70085SSatish Balay *ierr = MatGetSubMatrices(*mat,*n,isrow,iscol,*scall,&lsmat); 534f4e70085SSatish Balay for (i=0; i<*n; i++) { 535f4e70085SSatish Balay smat[i] = lsmat[i]; 536f4e70085SSatish Balay } 537f4e70085SSatish Balay *ierr = PetscFree(lsmat); 538f4e70085SSatish Balay } else { 539f4e70085SSatish Balay *ierr = MatGetSubMatrices(*mat,*n,isrow,iscol,*scall,&smat); 540f4e70085SSatish Balay } 541f4e70085SSatish Balay } 542f4e70085SSatish Balay 5437d6bfa3bSBarry Smith /* 5447d6bfa3bSBarry Smith MatDestroyMatrices() is slightly different from C since the 5457d6bfa3bSBarry Smith Fortran provides the array to hold the submatrix objects,while in C that 5467d6bfa3bSBarry Smith array is allocated by the MatGetSubmatrices() 5477d6bfa3bSBarry Smith */ 5488cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matdestroymatrices_(Mat *mat,PetscInt *n,Mat *smat,PetscErrorCode *ierr) 5497d6bfa3bSBarry Smith { 5507d6bfa3bSBarry Smith PetscInt i; 5517d6bfa3bSBarry Smith 5527d6bfa3bSBarry Smith for (i=0; i<*n; i++) { 5536bf464f9SBarry Smith *ierr = MatDestroy(&smat[i]);if (*ierr) return; 5547d6bfa3bSBarry Smith } 5557d6bfa3bSBarry Smith } 5567d6bfa3bSBarry Smith 5578cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matzerorowscolumns_(Mat *mat,PetscInt *numRows,PetscInt *rows,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr) 55817ede90eSSatish Balay { 55917ede90eSSatish Balay CHKFORTRANNULLOBJECTDEREFERENCE(x); 56017ede90eSSatish Balay CHKFORTRANNULLOBJECTDEREFERENCE(b); 56117ede90eSSatish Balay *ierr = MatZeroRowsColumns(*mat,*numRows,rows,*diag,*x,*b); 56217ede90eSSatish Balay } 56317ede90eSSatish Balay 5648cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matzerorowscolumnsis_(Mat *mat,IS *is,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr) 56517ede90eSSatish Balay { 56617ede90eSSatish Balay CHKFORTRANNULLOBJECTDEREFERENCE(x); 56717ede90eSSatish Balay CHKFORTRANNULLOBJECTDEREFERENCE(b); 56817ede90eSSatish Balay *ierr = MatZeroRowsColumnsIS(*mat,*is,*diag,*x,*b); 56917ede90eSSatish Balay } 57017ede90eSSatish Balay 5718cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matzerorowsstencil_(Mat *mat,PetscInt *numRows,MatStencil *rows,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr) 57217ede90eSSatish Balay { 57317ede90eSSatish Balay CHKFORTRANNULLOBJECTDEREFERENCE(x); 57417ede90eSSatish Balay CHKFORTRANNULLOBJECTDEREFERENCE(b); 57517ede90eSSatish Balay *ierr = MatZeroRowsStencil(*mat,*numRows,rows,*diag,*x,*b); 57617ede90eSSatish Balay } 57717ede90eSSatish Balay 5788cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matzerorowscolumnsstencil_(Mat *mat,PetscInt *numRows,MatStencil *rows,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr) 579d25a37e1SJed Brown { 580d25a37e1SJed Brown CHKFORTRANNULLOBJECTDEREFERENCE(x); 581d25a37e1SJed Brown CHKFORTRANNULLOBJECTDEREFERENCE(b); 582d25a37e1SJed Brown *ierr = MatZeroRowsColumnsStencil(*mat,*numRows,rows,*diag,*x,*b); 583d25a37e1SJed Brown } 584d25a37e1SJed Brown 5858cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matzerorows_(Mat *mat,PetscInt *numRows,PetscInt *rows,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr) 586f4e70085SSatish Balay { 5872b40b63fSBarry Smith CHKFORTRANNULLOBJECTDEREFERENCE(x); 5882b40b63fSBarry Smith CHKFORTRANNULLOBJECTDEREFERENCE(b); 5892b40b63fSBarry Smith *ierr = MatZeroRows(*mat,*numRows,rows,*diag,*x,*b); 590f4e70085SSatish Balay } 591f4e70085SSatish Balay 5928cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matzerorowsis_(Mat *mat,IS *is,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr) 593f4e70085SSatish Balay { 5942b40b63fSBarry Smith CHKFORTRANNULLOBJECTDEREFERENCE(x); 5952b40b63fSBarry Smith CHKFORTRANNULLOBJECTDEREFERENCE(b); 5962b40b63fSBarry Smith *ierr = MatZeroRowsIS(*mat,*is,*diag,*x,*b); 597f4e70085SSatish Balay } 598f4e70085SSatish Balay 5998cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matzerorowslocal_(Mat *mat,PetscInt *numRows,PetscInt *rows,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr) 600f4e70085SSatish Balay { 6012b40b63fSBarry Smith CHKFORTRANNULLOBJECTDEREFERENCE(x); 6022b40b63fSBarry Smith CHKFORTRANNULLOBJECTDEREFERENCE(b); 6032b40b63fSBarry Smith *ierr = MatZeroRowsLocal(*mat,*numRows,rows,*diag,*x,*b); 604f4e70085SSatish Balay } 605f4e70085SSatish Balay 6068cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matzerorowslocalis_(Mat *mat,IS *is,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr) 607f4e70085SSatish Balay { 6082b40b63fSBarry Smith CHKFORTRANNULLOBJECTDEREFERENCE(x); 6092b40b63fSBarry Smith CHKFORTRANNULLOBJECTDEREFERENCE(b); 6102b40b63fSBarry Smith *ierr = MatZeroRowsLocalIS(*mat,*is,*diag,*x,*b); 611f4e70085SSatish Balay } 612f4e70085SSatish Balay 6138cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matzerorowscolumnslocal_(Mat *mat,PetscInt *numRows,PetscInt *rows,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr) 61417ede90eSSatish Balay { 61517ede90eSSatish Balay CHKFORTRANNULLOBJECTDEREFERENCE(x); 61617ede90eSSatish Balay CHKFORTRANNULLOBJECTDEREFERENCE(b); 61717ede90eSSatish Balay *ierr = MatZeroRowsColumnsLocal(*mat,*numRows,rows,*diag,*x,*b); 61817ede90eSSatish Balay } 61917ede90eSSatish Balay 6208cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matzerorowscolumnslocalis_(Mat *mat,IS *is,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr) 62117ede90eSSatish Balay { 62217ede90eSSatish Balay CHKFORTRANNULLOBJECTDEREFERENCE(x); 62317ede90eSSatish Balay CHKFORTRANNULLOBJECTDEREFERENCE(b); 62417ede90eSSatish Balay *ierr = MatZeroRowsColumnsLocalIS(*mat,*is,*diag,*x,*b); 62517ede90eSSatish Balay } 6261eea217eSSatish Balay 6278cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matsetoptionsprefix_(Mat *mat,CHAR prefix PETSC_MIXED_LEN(len),PetscErrorCode *ierr PETSC_END_LEN(len)) 6281eea217eSSatish Balay { 6291eea217eSSatish Balay char *t; 6301eea217eSSatish Balay 6311eea217eSSatish Balay FIXCHAR(prefix,len,t); 6321eea217eSSatish Balay *ierr = MatSetOptionsPrefix(*mat,t); 6331eea217eSSatish Balay FREECHAR(prefix,t); 6341eea217eSSatish Balay } 6351eea217eSSatish Balay 636d0195637SJed Brown PETSC_EXTERN void PETSC_STDCALL matnullspaceremove_(MatNullSpace *sp,Vec *vec,PetscErrorCode *ierr) 637812c3f48SMatthew Knepley { 638d0195637SJed Brown *ierr = MatNullSpaceRemove(*sp,*vec); 639812c3f48SMatthew Knepley } 6401eea217eSSatish Balay 6414d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetinfo_(Mat *mat,MatInfoType *flag,MatInfo *info, int *ierr) 6425ba43861SSatish Balay { 6434d03fd2bSBarry Smith *ierr = MatGetInfo(*mat,*flag,info); 6445ba43861SSatish Balay } 6455ba43861SSatish Balay 6464d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matlufactor_(Mat *mat,IS *row,IS *col,const MatFactorInfo *info, int *ierr) 64722688b47SSatish Balay { 6484d03fd2bSBarry Smith *ierr = MatLUFactor(*mat,*row,*col,info); 64922688b47SSatish Balay } 65022688b47SSatish Balay 6514d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matilufactor_(Mat *mat,IS *row,IS *col,const MatFactorInfo *info, int *ierr) 65222688b47SSatish Balay { 6534d03fd2bSBarry Smith *ierr = MatILUFactor(*mat,*row,*col,info); 65422688b47SSatish Balay } 65522688b47SSatish Balay 6564d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matlufactorsymbolic_(Mat *fact,Mat *mat,IS *row,IS *col,const MatFactorInfo *info, int *ierr) 65722688b47SSatish Balay { 6584d03fd2bSBarry Smith *ierr = MatLUFactorSymbolic(*fact,*mat,*row,*col,info); 65922688b47SSatish Balay } 66022688b47SSatish Balay 6614d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matlufactornumeric_(Mat *fact,Mat *mat,const MatFactorInfo *info, int *ierr) 66222688b47SSatish Balay { 6634d03fd2bSBarry Smith *ierr = MatLUFactorNumeric(*fact,*mat,info); 66422688b47SSatish Balay } 66522688b47SSatish Balay 6664d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matcholeskyfactor_(Mat *mat,IS *perm,const MatFactorInfo *info, int *ierr) 66722688b47SSatish Balay { 6684d03fd2bSBarry Smith *ierr = MatCholeskyFactor(*mat,*perm,info); 66922688b47SSatish Balay } 67022688b47SSatish Balay 6714d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matcholeskyfactorsymbolic_(Mat *fact,Mat *mat,IS *perm,const MatFactorInfo *info, int *ierr) 67222688b47SSatish Balay { 6734d03fd2bSBarry Smith *ierr = MatCholeskyFactorSymbolic(*fact,*mat,*perm,info); 67422688b47SSatish Balay } 67522688b47SSatish Balay 6764d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matcholeskyfactornumeric_(Mat *fact,Mat *mat,const MatFactorInfo *info, int *ierr) 67722688b47SSatish Balay { 6784d03fd2bSBarry Smith *ierr = MatCholeskyFactorNumeric(*fact,*mat,info); 67922688b47SSatish Balay } 68022688b47SSatish Balay 6814d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matilufactorsymbolic_(Mat *fact,Mat *mat,IS *row,IS *col,const MatFactorInfo *info, int *ierr) 68222688b47SSatish Balay { 6834d03fd2bSBarry Smith *ierr = MatILUFactorSymbolic(*fact,*mat,*row,*col,info); 68422688b47SSatish Balay } 68522688b47SSatish Balay 6864d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL maticcfactorsymbolic_(Mat *fact,Mat *mat,IS *perm,const MatFactorInfo *info, int *ierr) 68722688b47SSatish Balay { 6884d03fd2bSBarry Smith *ierr = MatICCFactorSymbolic(*fact,*mat,*perm,info); 68922688b47SSatish Balay } 69022688b47SSatish Balay 6914d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL maticcfactor_(Mat *mat,IS *row,const MatFactorInfo *info, int *ierr) 69222688b47SSatish Balay { 6934d03fd2bSBarry Smith *ierr = MatICCFactor(*mat,*row,info); 69422688b47SSatish Balay } 69522688b47SSatish Balay 6964d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matfactorinfoinitialize_(MatFactorInfo *info, int *ierr) 69722688b47SSatish Balay { 6984d03fd2bSBarry Smith *ierr = MatFactorInfoInitialize(info); 69922688b47SSatish Balay } 700