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 36df750dc8SHong Zhang #define matdestroysubmatrices_ MATDESTROYSUBMATRICES 375dffd610SBarry Smith #define matgetfactor_ MATGETFACTOR 3835bd34faSBarry Smith #define matfactorgetsolverpackage_ MATFACTORGETSOLVERPACKAGE 39f4e70085SSatish Balay #define matgetrowij_ MATGETROWIJ 40f4e70085SSatish Balay #define matrestorerowij_ MATRESTOREROWIJ 41f4e70085SSatish Balay #define matgetrow_ MATGETROW 42f4e70085SSatish Balay #define matrestorerow_ MATRESTOREROW 43f7e310deSShri Abhyankar #define matload_ MATLOAD 44f4e70085SSatish Balay #define matview_ MATVIEW 458c778c55SBarry Smith #define matseqaijgetarray_ MATSEQAIJGETARRAY 466778691eSSatish Balay #define matseqaijrestorearray_ MATSEQAIJRESTOREARRAY 478c778c55SBarry Smith #define matdensegetarray_ MATDENSEGETARRAY 488c778c55SBarry Smith #define matdenserestorearray_ MATDENSERESTOREARRAY 49f4e70085SSatish Balay #define matconvert_ MATCONVERT 507dae84e0SHong Zhang #define matcreatesubmatrices_ MATCREATESUBMATRICES 5117ede90eSSatish Balay #define matzerorowscolumns_ MATZEROROWSCOLUMNS 5217ede90eSSatish Balay #define matzerorowscolumnsis_ MATZEROROWSCOLUMNSIS 5317ede90eSSatish Balay #define matzerorowsstencil_ MATZEROROWSSTENCIL 54d25a37e1SJed Brown #define matzerorowscolumnsstencil_ MATZEROROWSCOLUMNSSTENCIL 55f4e70085SSatish Balay #define matzerorows_ MATZEROROWS 56f4e70085SSatish Balay #define matzerorowsis_ MATZEROROWSIS 57f4e70085SSatish Balay #define matzerorowslocal_ MATZEROROWSLOCAL 58f4e70085SSatish Balay #define matzerorowslocalis_ MATZEROROWSLOCALIS 5917ede90eSSatish Balay #define matzerorowscolumnslocal_ MATZEROROWSCOLUMNSLOCAL 6017ede90eSSatish Balay #define matzerorowscolumnslocalis_ MATZEROROWSCOLUMNSLOCALIS 611eea217eSSatish Balay #define matsetoptionsprefix_ MATSETOPTIONSPREFIX 62fcc9d04bSBarry Smith #define matcreatevecs_ MATCREATEVECS 63c9d5ca86SBarry Smith #define matnullspaceremove_ MATNULLSPACEREMOVE 645ba43861SSatish Balay #define matgetinfo_ MATGETINFO 6522688b47SSatish Balay #define matlufactor_ MATLUFACTOR 6622688b47SSatish Balay #define matilufactor_ MATILUFACTOR 6722688b47SSatish Balay #define matlufactorsymbolic_ MATLUFACTORSYMBOLIC 6822688b47SSatish Balay #define matlufactornumeric_ MATLUFACTORNUMERIC 6922688b47SSatish Balay #define matcholeskyfactor_ MATCHOLESKYFACTOR 7022688b47SSatish Balay #define matcholeskyfactorsymbolic_ MATCHOLESKYFACTORSYMBOLIC 7122688b47SSatish Balay #define matcholeskyfactornumeric_ MATCHOLESKYFACTORNUMERIC 7222688b47SSatish Balay #define matilufactorsymbolic_ MATILUFACTORSYMBOLIC 7322688b47SSatish Balay #define maticcfactorsymbolic_ MATICCFACTORSYMBOLIC 7422688b47SSatish Balay #define maticcfactor_ MATICCFACTOR 7522688b47SSatish Balay #define matfactorinfoinitialize_ MATFACTORINFOINITIALIZE 76b22b330cSBarry Smith #define matnullspacesetfunction_ MATNULLSPACESETFUNCTION 770905d9aaSJed Brown #define matfindnonzerorows_ MATFINDNONZEROROWS 783be0408cSBarry Smith #define matgetsize00_ MATGETSIZE00 793be0408cSBarry Smith #define matgetsize10_ MATGETSIZE10 803be0408cSBarry Smith #define matgetsize01_ MATGETSIZE01 813be0408cSBarry Smith #define matgetlocalsize00_ MATGETLOCALSIZE00 823be0408cSBarry Smith #define matgetlocalsize10_ MATGETLOCALSIZE10 833be0408cSBarry Smith #define matgetlocalsize01_ MATGETLOCALSIZE01 84f4e70085SSatish Balay #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE) 854d03fd2bSBarry Smith #define matsetvalues_ matsetvalues 861006886cSSatish Balay #define matsetvaluesnnnn_ matsetvaluesnnnn 873b494cfeSSatish Balay #define matsetvalues0_ matsetvalues0 881b266c99SBarry Smith #define matsetvaluesnn1_ matsetvaluesnn1 894d03fd2bSBarry Smith #define matsetvalues11_ matsetvalues11 904d03fd2bSBarry Smith #define matsetvaluesn1_ matsetvaluesn1 914d03fd2bSBarry Smith #define matsetvalues1n_ matsetvalues1n 924d03fd2bSBarry Smith #define matsetvalueslocal_ matsetvalueslocal 933b494cfeSSatish Balay #define matsetvalueslocal0_ matsetvalueslocal0 944d03fd2bSBarry Smith #define matsetvalueslocal11_ matsetvalueslocal11 954d03fd2bSBarry Smith #define matsetvalueslocal11nn_ matsetvalueslocal11nn 964d03fd2bSBarry Smith #define matsetvalueslocal111_ matsetvalueslocal111 974d03fd2bSBarry Smith #define matsetvalueslocal1n_ matsetvalueslocal1n 984d03fd2bSBarry Smith #define matsetvalueslocaln1_ matsetvalueslocaln1 994d03fd2bSBarry Smith #define matsetvaluesblocked_ matsetvaluesblocked 1003b494cfeSSatish Balay #define matsetvaluesblocked0_ matsetvaluesblocked0 1014d03fd2bSBarry Smith #define matsetvaluesblocked11_ matsetvaluesblocked11 1024d03fd2bSBarry Smith #define matsetvaluesblocked111_ matsetvaluesblocked111 1034d03fd2bSBarry Smith #define matsetvaluesblocked1n_ matsetvaluesblocked1n 104*24aa916eSSatish Balay #define matsetvaluesblockedn1_ matsetvaluesblockedn1 1054d03fd2bSBarry Smith #define matsetvaluesblockedlocal_ matsetvaluesblockedlocal 1063b494cfeSSatish Balay #define matsetvaluesblockedlocal0_ matsetvaluesblockedlocal0 1074d03fd2bSBarry Smith #define matsetvaluesblockedlocal11_ matsetvaluesblockedlocal11 1084d03fd2bSBarry Smith #define matsetvaluesblockedlocal111_ matsetvaluesblockedlocal111 1094d03fd2bSBarry Smith #define matsetvaluesblockedlocal1n_ matsetvaluesblockedlocal1n 110*24aa916eSSatish Balay #define matsetvaluesblockedlocaln1_ matsetvaluesblockedlocaln1 11187bcf4e0SBarry Smith #define matgetrowmin_ matgetrowmin 11287bcf4e0SBarry Smith #define matgetrowminabs_ matgetrowminabs 1135928be6bSBarry Smith #define matgetrowmax_ matgetrowmax 1145928be6bSBarry Smith #define matgetrowmaxabs_ matgetrowmaxabs 1155928be6bSBarry Smith #define matdestroymatrices_ matdestroymatrices 116df750dc8SHong Zhang #define matdestroysubmatrices_ matdestroysubmatrices 1175dffd610SBarry Smith #define matgetfactor_ matgetfactor 11835bd34faSBarry Smith #define matfactorgetsolverpackage_ matfactorgetsolverpackage 119fcc9d04bSBarry Smith #define matcreatevecs_ matcreatevecs 120f4e70085SSatish Balay #define matgetrowij_ matgetrowij 121f4e70085SSatish Balay #define matrestorerowij_ matrestorerowij 122f4e70085SSatish Balay #define matgetrow_ matgetrow 123f4e70085SSatish Balay #define matrestorerow_ matrestorerow 124f4e70085SSatish Balay #define matview_ matview 125f7e310deSShri Abhyankar #define matload_ matload 1268c778c55SBarry Smith #define matseqaijgetarray_ matseqaijgetarray 1278c778c55SBarry Smith #define matseqaijrestorearray_ matseqaijrestorearray 1288c778c55SBarry Smith #define matdensegetarray_ matdensegetarray 1298c778c55SBarry Smith #define matdenserestorearray_ matdenserestorearray 130f4e70085SSatish Balay #define matconvert_ matconvert 1317dae84e0SHong Zhang #define matcreatesubmatrices_ matcreatesubmatrices 13217ede90eSSatish Balay #define matzerorowscolumns_ matzerorowscolumns 13317ede90eSSatish Balay #define matzerorowscolumnsis_ matzerorowscolumnsis 13417ede90eSSatish Balay #define matzerorowsstencil_ matzerorowsstencil 135d25a37e1SJed Brown #define matzerorowscolumnsstencil_ matzerorowscolumnsstencil 136f4e70085SSatish Balay #define matzerorows_ matzerorows 137f4e70085SSatish Balay #define matzerorowsis_ matzerorowsis 138f4e70085SSatish Balay #define matzerorowslocal_ matzerorowslocal 139f4e70085SSatish Balay #define matzerorowslocalis_ matzerorowslocalis 14017ede90eSSatish Balay #define matzerorowscolumnslocal_ matzerorowscolumnslocal 14117ede90eSSatish Balay #define matzerorowscolumnslocalis_ matzerorowscolumnslocalis 1421eea217eSSatish Balay #define matsetoptionsprefix_ matsetoptionsprefix 143812c3f48SMatthew Knepley #define matnullspaceremove_ matnullspaceremove 1445ba43861SSatish Balay #define matgetinfo_ matgetinfo 14522688b47SSatish Balay #define matlufactor_ matlufactor 14622688b47SSatish Balay #define matilufactor_ matilufactor 14722688b47SSatish Balay #define matlufactorsymbolic_ matlufactorsymbolic 14822688b47SSatish Balay #define matlufactornumeric_ matlufactornumeric 14922688b47SSatish Balay #define matcholeskyfactor_ matcholeskyfactor 15022688b47SSatish Balay #define matcholeskyfactorsymbolic_ matcholeskyfactorsymbolic 15122688b47SSatish Balay #define matcholeskyfactornumeric_ matcholeskyfactornumeric 15222688b47SSatish Balay #define matilufactorsymbolic_ matilufactorsymbolic 15322688b47SSatish Balay #define maticcfactorsymbolic_ maticcfactorsymbolic 15422688b47SSatish Balay #define maticcfactor_ maticcfactor 15522688b47SSatish Balay #define matfactorinfoinitialize_ matfactorinfoinitialize 156b22b330cSBarry Smith #define matnullspacesetfunction_ matnullspacesetfunction 1570905d9aaSJed Brown #define matfindnonzerorows_ matfindnonzerorows 1583be0408cSBarry Smith #define matgetsize00_ matgetsize00 1593be0408cSBarry Smith #define matgetsize10_ matgetsize10 1603be0408cSBarry Smith #define matgetsize01_ matgetsize01 1613be0408cSBarry Smith #define matgetlocalsize00_ matgetlocalsize00 1623be0408cSBarry Smith #define matgetlocalsize10_ matgetlocalsize10 1633be0408cSBarry Smith #define matgetlocalsize01_ matgetlocalsize01 164f4e70085SSatish Balay #endif 165f4e70085SSatish Balay 1663be0408cSBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetsize_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr ) 1673be0408cSBarry Smith { 1683be0408cSBarry Smith CHKFORTRANNULLINTEGER(m); 1693be0408cSBarry Smith CHKFORTRANNULLINTEGER(n); 1703be0408cSBarry Smith *ierr = MatGetSize(*mat,m,n); 1713be0408cSBarry Smith } 1723be0408cSBarry Smith 1733be0408cSBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetsize00_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr ) 1743be0408cSBarry Smith { 1753be0408cSBarry Smith matgetsize_(mat,m,n,ierr); 1763be0408cSBarry Smith } 1773be0408cSBarry Smith 1783be0408cSBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetsize10_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr ) 1793be0408cSBarry Smith { 1803be0408cSBarry Smith matgetsize_(mat,m,n,ierr); 1813be0408cSBarry Smith } 1823be0408cSBarry Smith 1833be0408cSBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetsize01_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr ) 1843be0408cSBarry Smith { 1853be0408cSBarry Smith matgetsize_(mat,m,n,ierr); 1863be0408cSBarry Smith } 1873be0408cSBarry Smith 1883be0408cSBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetlocalsize_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr ) 1893be0408cSBarry Smith { 1903be0408cSBarry Smith CHKFORTRANNULLINTEGER(m); 1913be0408cSBarry Smith CHKFORTRANNULLINTEGER(n); 1923be0408cSBarry Smith *ierr = MatGetLocalSize(*mat,m,n); 1933be0408cSBarry Smith } 1943be0408cSBarry Smith 1953be0408cSBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetlocalsize00_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr ) 1963be0408cSBarry Smith { 1973be0408cSBarry Smith matgetlocalsize_(mat,m,n,ierr); 1983be0408cSBarry Smith } 1993be0408cSBarry Smith 2003be0408cSBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetlocalsize10_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr ) 2013be0408cSBarry Smith { 2023be0408cSBarry Smith matgetlocalsize_(mat,m,n,ierr); 2033be0408cSBarry Smith } 2043be0408cSBarry Smith 2053be0408cSBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetlocalsize01_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr ) 2063be0408cSBarry Smith { 2073be0408cSBarry Smith matgetlocalsize_(mat,m,n,ierr); 2083be0408cSBarry Smith } 2093be0408cSBarry Smith 2104d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvaluesblocked_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){ 2114d03fd2bSBarry Smith *ierr = MatSetValuesBlocked(*mat,*m,idxm,*n,idxn,v,*addv); 2124d03fd2bSBarry Smith } 2134d03fd2bSBarry Smith 2143b494cfeSSatish Balay PETSC_EXTERN void PETSC_STDCALL matsetvaluesblocked0_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){ 2153b494cfeSSatish Balay matsetvaluesblocked_(mat,m,idxm,n,idxn,v,addv,ierr); 2163b494cfeSSatish Balay } 2173b494cfeSSatish Balay 2184d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvaluesblocked11_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){ 2194d03fd2bSBarry Smith matsetvaluesblocked_(mat,m,idxm,n,idxn,v,addv,ierr); 2204d03fd2bSBarry Smith } 2214d03fd2bSBarry Smith 2224d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvaluesblocked111_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){ 2234d03fd2bSBarry Smith matsetvaluesblocked_(mat,m,idxm,n,idxn,v,addv,ierr); 2244d03fd2bSBarry Smith } 2254d03fd2bSBarry Smith 2264d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvaluesblocked1n_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){ 2274d03fd2bSBarry Smith matsetvaluesblocked_(mat,m,idxm,n,idxn,v,addv,ierr); 2284d03fd2bSBarry Smith } 2294d03fd2bSBarry Smith 2304d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvaluesblockedn1_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){ 2314d03fd2bSBarry Smith matsetvaluesblocked_(mat,m,idxm,n,idxn,v,addv,ierr); 2324d03fd2bSBarry Smith } 2334d03fd2bSBarry Smith 2344d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvaluesblockedlocal_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr ) 2354d03fd2bSBarry Smith { 2364d03fd2bSBarry Smith *ierr = MatSetValuesBlockedLocal(*mat,*nrow,irow,*ncol,icol,y,*addv); 2374d03fd2bSBarry Smith } 2384d03fd2bSBarry Smith 2393b494cfeSSatish Balay PETSC_EXTERN void PETSC_STDCALL matsetvaluesblockedlocal0_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){ 2403b494cfeSSatish Balay matsetvaluesblockedlocal_(mat,m,idxm,n,idxn,v,addv,ierr); 2413b494cfeSSatish Balay } 2423b494cfeSSatish Balay 2434d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvaluesblockedlocal11_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){ 2444d03fd2bSBarry Smith matsetvaluesblockedlocal_(mat,m,idxm,n,idxn,v,addv,ierr); 2454d03fd2bSBarry Smith } 2464d03fd2bSBarry Smith 2474d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvaluesblockedlocal111_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){ 2484d03fd2bSBarry Smith matsetvaluesblockedlocal_(mat,m,idxm,n,idxn,v,addv,ierr); 2494d03fd2bSBarry Smith } 2504d03fd2bSBarry Smith 2514d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvaluesblockedlocal1n_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){ 2524d03fd2bSBarry Smith matsetvaluesblockedlocal_(mat,m,idxm,n,idxn,v,addv,ierr); 2534d03fd2bSBarry Smith } 2544d03fd2bSBarry Smith 2554d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvaluesblockedlocaln1_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){ 2564d03fd2bSBarry Smith matsetvaluesblockedlocal_(mat,m,idxm,n,idxn,v,addv,ierr); 2574d03fd2bSBarry Smith } 2584d03fd2bSBarry Smith 2594d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvalues_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ) 2604d03fd2bSBarry Smith { 2614d03fd2bSBarry Smith *ierr = MatSetValues(*mat,*m,idxm,*n,idxn,v,*addv); 2624d03fd2bSBarry Smith } 2634d03fd2bSBarry Smith 2641b266c99SBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvaluesnnnn_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ) 2651b266c99SBarry Smith { 2661b266c99SBarry Smith matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr); 2671b266c99SBarry Smith } 2681b266c99SBarry Smith 2693b494cfeSSatish Balay PETSC_EXTERN void PETSC_STDCALL matsetvalues0_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ) 2703b494cfeSSatish Balay { 2713b494cfeSSatish Balay matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr); 2723b494cfeSSatish Balay } 2733b494cfeSSatish Balay 2741b266c99SBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvaluesnn1_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ) 2751b266c99SBarry Smith { 2761b266c99SBarry Smith matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr); 2771b266c99SBarry Smith } 2781b266c99SBarry Smith 2794d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvalues11_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ) 2804d03fd2bSBarry Smith { 2814d03fd2bSBarry Smith matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr); 2824d03fd2bSBarry Smith } 2834d03fd2bSBarry Smith 2844d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvaluesn1_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ) 2854d03fd2bSBarry Smith { 2864d03fd2bSBarry Smith matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr); 2874d03fd2bSBarry Smith } 2884d03fd2bSBarry Smith 2894d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvalues1n_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ) 2904d03fd2bSBarry Smith { 2914d03fd2bSBarry Smith matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr); 2924d03fd2bSBarry Smith } 2934d03fd2bSBarry Smith 2944d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvalueslocal_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr ) 2954d03fd2bSBarry Smith { 2964d03fd2bSBarry Smith *ierr = MatSetValuesLocal(*mat,*nrow,irow,*ncol,icol,y,*addv); 2974d03fd2bSBarry Smith } 2984d03fd2bSBarry Smith 2993b494cfeSSatish Balay PETSC_EXTERN void PETSC_STDCALL matsetvalueslocal0_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr ) 3003b494cfeSSatish Balay { 3013b494cfeSSatish Balay matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr); 3023b494cfeSSatish Balay } 3033b494cfeSSatish Balay 3044d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvalueslocal11_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr ) 3054d03fd2bSBarry Smith { 3064d03fd2bSBarry Smith matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr); 3074d03fd2bSBarry Smith } 3084d03fd2bSBarry Smith 3094d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvalueslocal11nn_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr ) 3104d03fd2bSBarry Smith { 3114d03fd2bSBarry Smith matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr); 3124d03fd2bSBarry Smith } 3134d03fd2bSBarry Smith 3144d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvalueslocal111_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr ) 3154d03fd2bSBarry Smith { 3164d03fd2bSBarry Smith matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr); 3174d03fd2bSBarry Smith } 3184d03fd2bSBarry Smith 3194d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvalueslocal1n_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr ) 3204d03fd2bSBarry Smith { 3214d03fd2bSBarry Smith matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr); 3224d03fd2bSBarry Smith } 3234d03fd2bSBarry Smith 3244d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvalueslocaln1_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr ) 3254d03fd2bSBarry Smith { 3264d03fd2bSBarry Smith matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr); 3274d03fd2bSBarry Smith } 3284d03fd2bSBarry Smith 32987bcf4e0SBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetrowmin_(Mat *mat,Vec *v,PetscInt idx[], int *ierr ) 33087bcf4e0SBarry Smith { 33187bcf4e0SBarry Smith CHKFORTRANNULLINTEGER(idx); 33287bcf4e0SBarry Smith *ierr = MatGetRowMin(*mat,*v,idx); 33387bcf4e0SBarry Smith } 3344d03fd2bSBarry Smith 33587bcf4e0SBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetrowminabs_(Mat *mat,Vec *v,PetscInt idx[], int *ierr ) 33687bcf4e0SBarry Smith { 33787bcf4e0SBarry Smith CHKFORTRANNULLINTEGER(idx); 33887bcf4e0SBarry Smith *ierr = MatGetRowMinAbs(*mat,*v,idx); 33987bcf4e0SBarry Smith } 34087bcf4e0SBarry Smith 3415928be6bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetrowmax_(Mat *mat,Vec *v,PetscInt idx[], int *ierr ) 3425928be6bSBarry Smith { 3435928be6bSBarry Smith CHKFORTRANNULLINTEGER(idx); 3445928be6bSBarry Smith *ierr = MatGetRowMax(*mat,*v,idx); 3455928be6bSBarry Smith } 3465928be6bSBarry Smith 3475928be6bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetrowmaxabs_(Mat *mat,Vec *v,PetscInt idx[], int *ierr ) 3485928be6bSBarry Smith { 3495928be6bSBarry Smith CHKFORTRANNULLINTEGER(idx); 3505928be6bSBarry Smith *ierr = MatGetRowMaxAbs(*mat,*v,idx); 3515928be6bSBarry Smith } 3525928be6bSBarry Smith 353b22b330cSBarry Smith static PetscErrorCode ournullfunction(MatNullSpace sp,Vec x,void *ctx) 354b22b330cSBarry Smith { 355b22b330cSBarry Smith PetscErrorCode ierr = 0; 356b22b330cSBarry Smith (*(void (PETSC_STDCALL *)(MatNullSpace*,Vec*,void*,PetscErrorCode*))(((PetscObject)sp)->fortran_func_pointers[0]))(&sp,&x,ctx,&ierr);CHKERRQ(ierr); 357b22b330cSBarry Smith return 0; 358b22b330cSBarry Smith } 359b22b330cSBarry Smith 3608cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matnullspacesetfunction_(MatNullSpace *sp, PetscErrorCode (*rem)(MatNullSpace,Vec,void*),void *ctx,PetscErrorCode *ierr) 361b22b330cSBarry Smith { 362b22b330cSBarry Smith PetscObjectAllocateFortranPointers(*sp,1); 363b22b330cSBarry Smith ((PetscObject)*sp)->fortran_func_pointers[0] = (PetscVoidFunction)rem; 36426fbe8dcSKarl Rupp 365b22b330cSBarry Smith *ierr = MatNullSpaceSetFunction(*sp,ournullfunction,ctx); 366b22b330cSBarry Smith } 367b22b330cSBarry Smith 368d2da0f5dSBarry Smith PETSC_EXTERN void PETSC_STDCALL matcreatevecs_(Mat *mat,Vec *right,Vec *left, int *ierr) 3697c54600cSBarry Smith { 3707c54600cSBarry Smith CHKFORTRANNULLOBJECT(right); 3717c54600cSBarry Smith CHKFORTRANNULLOBJECT(left); 3722a7a6963SBarry Smith *ierr = MatCreateVecs(*mat,right,left); 3737c54600cSBarry Smith } 3747c54600cSBarry Smith 3758cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matgetrowij_(Mat *B,PetscInt *shift,PetscBool *sym,PetscBool *blockcompressed,PetscInt *n,PetscInt *ia,size_t *iia, 376ace3abfcSBarry Smith PetscInt *ja,size_t *jja,PetscBool *done,PetscErrorCode *ierr) 377f4e70085SSatish Balay { 3781a83f524SJed Brown const PetscInt *IA,*JA; 3798f7157efSSatish Balay *ierr = MatGetRowIJ(*B,*shift,*sym,*blockcompressed,n,&IA,&JA,done);if (*ierr) return; 3801a83f524SJed Brown *iia = PetscIntAddressToFortran(ia,(PetscInt*)IA); 3811a83f524SJed Brown *jja = PetscIntAddressToFortran(ja,(PetscInt*)JA); 382f4e70085SSatish Balay } 383f4e70085SSatish Balay 3848cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matrestorerowij_(Mat *B,PetscInt *shift,PetscBool *sym,PetscBool *blockcompressed, PetscInt *n,PetscInt *ia,size_t *iia, 385ace3abfcSBarry Smith PetscInt *ja,size_t *jja,PetscBool *done,PetscErrorCode *ierr) 386f4e70085SSatish Balay { 3871a83f524SJed Brown const PetscInt *IA = PetscIntAddressFromFortran(ia,*iia),*JA = PetscIntAddressFromFortran(ja,*jja); 3888f7157efSSatish Balay *ierr = MatRestoreRowIJ(*B,*shift,*sym,*blockcompressed,n,&IA,&JA,done); 389f4e70085SSatish Balay } 390f4e70085SSatish Balay 391f4e70085SSatish Balay /* 392f4e70085SSatish Balay This is a poor way of storing the column and value pointers 393f4e70085SSatish Balay generated by MatGetRow() to be returned with MatRestoreRow() 394f4e70085SSatish Balay but there is not natural,good place else to store them. Hence 395f4e70085SSatish Balay Fortran programmers can only have one outstanding MatGetRows() 396f4e70085SSatish Balay at a time. 397f4e70085SSatish Balay */ 398f4e70085SSatish Balay static PetscErrorCode matgetrowactive = 0; 399f4e70085SSatish Balay static const PetscInt *my_ocols = 0; 400f4e70085SSatish Balay static const PetscScalar *my_ovals = 0; 401f4e70085SSatish Balay 4028cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matgetrow_(Mat *mat,PetscInt *row,PetscInt *ncols,PetscInt *cols,PetscScalar *vals,PetscErrorCode *ierr) 403f4e70085SSatish Balay { 404f4e70085SSatish Balay const PetscInt **oocols = &my_ocols; 405f4e70085SSatish Balay const PetscScalar **oovals = &my_ovals; 406f4e70085SSatish Balay 407f4e70085SSatish Balay if (matgetrowactive) { 408efca3c55SSatish Balay PetscError(PETSC_COMM_SELF,__LINE__,"MatGetRow_Fortran",__FILE__,PETSC_ERR_ARG_WRONGSTATE,PETSC_ERROR_INITIAL, 409f4e70085SSatish Balay "Cannot have two MatGetRow() active simultaneously\n\ 410f4e70085SSatish Balay call MatRestoreRow() before calling MatGetRow() a second time"); 411f4e70085SSatish Balay *ierr = 1; 412f4e70085SSatish Balay return; 413f4e70085SSatish Balay } 414f4e70085SSatish Balay 4150298fd71SBarry Smith CHKFORTRANNULLINTEGER(cols); if (!cols) oocols = NULL; 4160298fd71SBarry Smith CHKFORTRANNULLSCALAR(vals); if (!vals) oovals = NULL; 417f4e70085SSatish Balay 418f4e70085SSatish Balay *ierr = MatGetRow(*mat,*row,ncols,oocols,oovals); 419f4e70085SSatish Balay if (*ierr) return; 420f4e70085SSatish Balay 421f4e70085SSatish Balay if (oocols) { *ierr = PetscMemcpy(cols,my_ocols,(*ncols)*sizeof(PetscInt)); if (*ierr) return;} 422f4e70085SSatish Balay if (oovals) { *ierr = PetscMemcpy(vals,my_ovals,(*ncols)*sizeof(PetscScalar)); if (*ierr) return;} 423f4e70085SSatish Balay matgetrowactive = 1; 424f4e70085SSatish Balay } 425f4e70085SSatish Balay 4268cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matrestorerow_(Mat *mat,PetscInt *row,PetscInt *ncols,PetscInt *cols,PetscScalar *vals,PetscErrorCode *ierr) 427f4e70085SSatish Balay { 428f4e70085SSatish Balay const PetscInt **oocols = &my_ocols; 429f4e70085SSatish Balay const PetscScalar **oovals = &my_ovals; 430f4e70085SSatish Balay if (!matgetrowactive) { 431efca3c55SSatish Balay PetscError(PETSC_COMM_SELF,__LINE__,"MatRestoreRow_Fortran",__FILE__,PETSC_ERR_ARG_WRONGSTATE,PETSC_ERROR_INITIAL, 432f4e70085SSatish Balay "Must call MatGetRow() first"); 433f4e70085SSatish Balay *ierr = 1; 434f4e70085SSatish Balay return; 435f4e70085SSatish Balay } 4360298fd71SBarry Smith CHKFORTRANNULLINTEGER(cols); if (!cols) oocols = NULL; 4370298fd71SBarry Smith CHKFORTRANNULLSCALAR(vals); if (!vals) oovals = NULL; 438f4e70085SSatish Balay 439f4e70085SSatish Balay *ierr = MatRestoreRow(*mat,*row,ncols,oocols,oovals); 440f4e70085SSatish Balay matgetrowactive = 0; 441f4e70085SSatish Balay } 442f4e70085SSatish Balay 4438cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matview_(Mat *mat,PetscViewer *vin,PetscErrorCode *ierr) 444f4e70085SSatish Balay { 445f4e70085SSatish Balay PetscViewer v; 446f4e70085SSatish Balay PetscPatchDefaultViewers_Fortran(vin,v); 447f4e70085SSatish Balay *ierr = MatView(*mat,v); 448f4e70085SSatish Balay } 449f4e70085SSatish Balay 4508cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matload_(Mat *mat,PetscViewer *vin,PetscErrorCode *ierr) 451f7e310deSShri Abhyankar { 452f7e310deSShri Abhyankar PetscViewer v; 453f7e310deSShri Abhyankar PetscPatchDefaultViewers_Fortran(vin,v); 454112444f4SShri Abhyankar *ierr = MatLoad(*mat,v); 455f7e310deSShri Abhyankar } 456f7e310deSShri Abhyankar 4578cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matseqaijgetarray_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr) 458f4e70085SSatish Balay { 459f4e70085SSatish Balay PetscScalar *mm; 460f4e70085SSatish Balay PetscInt m,n; 461f4e70085SSatish Balay 4628c778c55SBarry Smith *ierr = MatSeqAIJGetArray(*mat,&mm); if (*ierr) return; 463f4e70085SSatish Balay *ierr = MatGetSize(*mat,&m,&n); if (*ierr) return; 464f91d1997SBarry Smith *ierr = PetscScalarAddressToFortran((PetscObject)*mat,1,fa,mm,m*n,ia); if (*ierr) return; 465f4e70085SSatish Balay } 466f4e70085SSatish Balay 4678cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matseqaijrestorearray_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr) 468f4e70085SSatish Balay { 469f4e70085SSatish Balay PetscScalar *lx; 470f4e70085SSatish Balay PetscInt m,n; 471f4e70085SSatish Balay 472f4e70085SSatish Balay *ierr = MatGetSize(*mat,&m,&n); if (*ierr) return; 473f4e70085SSatish Balay *ierr = PetscScalarAddressFromFortran((PetscObject)*mat,fa,*ia,m*n,&lx);if (*ierr) return; 4748c778c55SBarry Smith *ierr = MatSeqAIJRestoreArray(*mat,&lx);if (*ierr) return; 475f4e70085SSatish Balay } 476f4e70085SSatish Balay 4778cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matdensegetarray_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr) 47873a71a0fSBarry Smith { 47973a71a0fSBarry Smith PetscScalar *mm; 48073a71a0fSBarry Smith PetscInt m,n; 48173a71a0fSBarry Smith 4828c778c55SBarry Smith *ierr = MatDenseGetArray(*mat,&mm); if (*ierr) return; 48373a71a0fSBarry Smith *ierr = MatGetSize(*mat,&m,&n); if (*ierr) return; 48473a71a0fSBarry Smith *ierr = PetscScalarAddressToFortran((PetscObject)*mat,1,fa,mm,m*n,ia); if (*ierr) return; 48573a71a0fSBarry Smith } 48673a71a0fSBarry Smith 4878cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matdenserestorearray_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr) 48873a71a0fSBarry Smith { 48973a71a0fSBarry Smith PetscScalar *lx; 49073a71a0fSBarry Smith PetscInt m,n; 49173a71a0fSBarry Smith 49273a71a0fSBarry Smith *ierr = MatGetSize(*mat,&m,&n); if (*ierr) return; 49373a71a0fSBarry Smith *ierr = PetscScalarAddressFromFortran((PetscObject)*mat,fa,*ia,m*n,&lx);if (*ierr) return; 4948c778c55SBarry Smith *ierr = MatDenseRestoreArray(*mat,&lx);if (*ierr) return; 49573a71a0fSBarry Smith } 49673a71a0fSBarry Smith 497390e1bf2SBarry Smith PETSC_EXTERN void PETSC_STDCALL matfactorgetsolverpackage_(Mat *mat,char* name PETSC_MIXED_LEN(len),PetscErrorCode *ierr PETSC_END_LEN(len)) 49835bd34faSBarry Smith { 49935bd34faSBarry Smith const char *tname; 50035bd34faSBarry Smith 50135bd34faSBarry Smith *ierr = MatFactorGetSolverPackage(*mat,&tname);if (*ierr) return; 50235bd34faSBarry Smith if (name != PETSC_NULL_CHARACTER_Fortran) { 50335bd34faSBarry Smith *ierr = PetscStrncpy(name,tname,len);if (*ierr) return; 50435bd34faSBarry Smith } 50535bd34faSBarry Smith FIXRETURNCHAR(PETSC_TRUE,name,len); 50635bd34faSBarry Smith } 50735bd34faSBarry Smith 508390e1bf2SBarry 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)) 5095dffd610SBarry Smith { 5105dffd610SBarry Smith char *t; 5115dffd610SBarry Smith FIXCHAR(outtype,len,t); 5129be81726SHong Zhang *ierr = MatGetFactor(*mat,t,*ftype,M); 5135dffd610SBarry Smith FREECHAR(outtype,t); 5145dffd610SBarry Smith } 5155dffd610SBarry Smith 516390e1bf2SBarry 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)) 517f4e70085SSatish Balay { 518f4e70085SSatish Balay char *t; 519f4e70085SSatish Balay FIXCHAR(outtype,len,t); 520f4e70085SSatish Balay *ierr = MatConvert(*mat,t,*reuse,M); 521f4e70085SSatish Balay FREECHAR(outtype,t); 522f4e70085SSatish Balay } 523f4e70085SSatish Balay 524f4e70085SSatish Balay /* 5257dae84e0SHong Zhang MatCreateSubmatrices() is slightly different from C since the 526f4e70085SSatish Balay Fortran provides the array to hold the submatrix objects,while in C that 5277dae84e0SHong Zhang array is allocated by the MatCreateSubmatrices() 528f4e70085SSatish Balay */ 5297dae84e0SHong Zhang PETSC_EXTERN void PETSC_STDCALL matcreatesubmatrices_(Mat *mat,PetscInt *n,IS *isrow,IS *iscol,MatReuse *scall,Mat *smat,PetscErrorCode *ierr) 530f4e70085SSatish Balay { 531f4e70085SSatish Balay Mat *lsmat; 532f4e70085SSatish Balay PetscInt i; 533f4e70085SSatish Balay 534f4e70085SSatish Balay if (*scall == MAT_INITIAL_MATRIX) { 5357dae84e0SHong Zhang *ierr = MatCreateSubMatrices(*mat,*n,isrow,iscol,*scall,&lsmat); 536de7ef04eSHong Zhang for (i=0; i<=*n; i++) { /* lsmat[*n] might be a dummy matrix for saving data struc */ 537f4e70085SSatish Balay smat[i] = lsmat[i]; 538f4e70085SSatish Balay } 539f4e70085SSatish Balay *ierr = PetscFree(lsmat); 540f4e70085SSatish Balay } else { 5417dae84e0SHong Zhang *ierr = MatCreateSubMatrices(*mat,*n,isrow,iscol,*scall,&smat); 542f4e70085SSatish Balay } 543f4e70085SSatish Balay } 544f4e70085SSatish Balay 5457d6bfa3bSBarry Smith /* 5467d6bfa3bSBarry Smith MatDestroyMatrices() is slightly different from C since the 547de7ef04eSHong Zhang Fortran does not free the array of matrix objects, while in C that 548de7ef04eSHong Zhang the array is freed 549de7ef04eSHong Zhang */ 550de7ef04eSHong Zhang PETSC_EXTERN void PETSC_STDCALL matdestroymatrices_(PetscInt *n,Mat *smat,PetscErrorCode *ierr) 551de7ef04eSHong Zhang { 552de7ef04eSHong Zhang PetscInt i; 553de7ef04eSHong Zhang 554de7ef04eSHong Zhang for (i=0; i<*n; i++) { 555de7ef04eSHong Zhang *ierr = MatDestroy(&smat[i]);if (*ierr) return; 556de7ef04eSHong Zhang } 557de7ef04eSHong Zhang } 558de7ef04eSHong Zhang 559de7ef04eSHong Zhang /* 560de7ef04eSHong Zhang MatDestroySubMatrices() is slightly different from C since the 5617d6bfa3bSBarry Smith Fortran provides the array to hold the submatrix objects, while in C that 5627dae84e0SHong Zhang array is allocated by the MatCreateSubmatrices() 5637d6bfa3bSBarry Smith */ 564de7ef04eSHong Zhang PETSC_EXTERN void PETSC_STDCALL matdestroysubmatrices_(PetscInt *n,Mat *smat,PetscErrorCode *ierr) 5657d6bfa3bSBarry Smith { 566de7ef04eSHong Zhang Mat *lsmat; 5677d6bfa3bSBarry Smith PetscInt i; 5687d6bfa3bSBarry Smith 569de7ef04eSHong Zhang *ierr = PetscMalloc1(*n+1,&lsmat); 570de7ef04eSHong Zhang for (i=0; i<=*n; i++) { 571de7ef04eSHong Zhang lsmat[i] = smat[i]; 5727d6bfa3bSBarry Smith } 573de7ef04eSHong Zhang *ierr = MatDestroySubMatrices(*n,&lsmat); 574df750dc8SHong Zhang } 575df750dc8SHong Zhang 5768cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matzerorowscolumns_(Mat *mat,PetscInt *numRows,PetscInt *rows,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr) 57717ede90eSSatish Balay { 57817ede90eSSatish Balay CHKFORTRANNULLOBJECTDEREFERENCE(x); 57917ede90eSSatish Balay CHKFORTRANNULLOBJECTDEREFERENCE(b); 58017ede90eSSatish Balay *ierr = MatZeroRowsColumns(*mat,*numRows,rows,*diag,*x,*b); 58117ede90eSSatish Balay } 58217ede90eSSatish Balay 5838cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matzerorowscolumnsis_(Mat *mat,IS *is,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr) 58417ede90eSSatish Balay { 58517ede90eSSatish Balay CHKFORTRANNULLOBJECTDEREFERENCE(x); 58617ede90eSSatish Balay CHKFORTRANNULLOBJECTDEREFERENCE(b); 58717ede90eSSatish Balay *ierr = MatZeroRowsColumnsIS(*mat,*is,*diag,*x,*b); 58817ede90eSSatish Balay } 58917ede90eSSatish Balay 5908cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matzerorowsstencil_(Mat *mat,PetscInt *numRows,MatStencil *rows,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr) 59117ede90eSSatish Balay { 59217ede90eSSatish Balay CHKFORTRANNULLOBJECTDEREFERENCE(x); 59317ede90eSSatish Balay CHKFORTRANNULLOBJECTDEREFERENCE(b); 59417ede90eSSatish Balay *ierr = MatZeroRowsStencil(*mat,*numRows,rows,*diag,*x,*b); 59517ede90eSSatish Balay } 59617ede90eSSatish Balay 5978cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matzerorowscolumnsstencil_(Mat *mat,PetscInt *numRows,MatStencil *rows,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr) 598d25a37e1SJed Brown { 599d25a37e1SJed Brown CHKFORTRANNULLOBJECTDEREFERENCE(x); 600d25a37e1SJed Brown CHKFORTRANNULLOBJECTDEREFERENCE(b); 601d25a37e1SJed Brown *ierr = MatZeroRowsColumnsStencil(*mat,*numRows,rows,*diag,*x,*b); 602d25a37e1SJed Brown } 603d25a37e1SJed Brown 6048cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matzerorows_(Mat *mat,PetscInt *numRows,PetscInt *rows,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr) 605f4e70085SSatish Balay { 6062b40b63fSBarry Smith CHKFORTRANNULLOBJECTDEREFERENCE(x); 6072b40b63fSBarry Smith CHKFORTRANNULLOBJECTDEREFERENCE(b); 6082b40b63fSBarry Smith *ierr = MatZeroRows(*mat,*numRows,rows,*diag,*x,*b); 609f4e70085SSatish Balay } 610f4e70085SSatish Balay 6118cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matzerorowsis_(Mat *mat,IS *is,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr) 612f4e70085SSatish Balay { 6132b40b63fSBarry Smith CHKFORTRANNULLOBJECTDEREFERENCE(x); 6142b40b63fSBarry Smith CHKFORTRANNULLOBJECTDEREFERENCE(b); 6152b40b63fSBarry Smith *ierr = MatZeroRowsIS(*mat,*is,*diag,*x,*b); 616f4e70085SSatish Balay } 617f4e70085SSatish Balay 6188cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matzerorowslocal_(Mat *mat,PetscInt *numRows,PetscInt *rows,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr) 619f4e70085SSatish Balay { 6202b40b63fSBarry Smith CHKFORTRANNULLOBJECTDEREFERENCE(x); 6212b40b63fSBarry Smith CHKFORTRANNULLOBJECTDEREFERENCE(b); 6222b40b63fSBarry Smith *ierr = MatZeroRowsLocal(*mat,*numRows,rows,*diag,*x,*b); 623f4e70085SSatish Balay } 624f4e70085SSatish Balay 6258cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matzerorowslocalis_(Mat *mat,IS *is,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr) 626f4e70085SSatish Balay { 6272b40b63fSBarry Smith CHKFORTRANNULLOBJECTDEREFERENCE(x); 6282b40b63fSBarry Smith CHKFORTRANNULLOBJECTDEREFERENCE(b); 6292b40b63fSBarry Smith *ierr = MatZeroRowsLocalIS(*mat,*is,*diag,*x,*b); 630f4e70085SSatish Balay } 631f4e70085SSatish Balay 6328cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matzerorowscolumnslocal_(Mat *mat,PetscInt *numRows,PetscInt *rows,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr) 63317ede90eSSatish Balay { 63417ede90eSSatish Balay CHKFORTRANNULLOBJECTDEREFERENCE(x); 63517ede90eSSatish Balay CHKFORTRANNULLOBJECTDEREFERENCE(b); 63617ede90eSSatish Balay *ierr = MatZeroRowsColumnsLocal(*mat,*numRows,rows,*diag,*x,*b); 63717ede90eSSatish Balay } 63817ede90eSSatish Balay 6398cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matzerorowscolumnslocalis_(Mat *mat,IS *is,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr) 64017ede90eSSatish Balay { 64117ede90eSSatish Balay CHKFORTRANNULLOBJECTDEREFERENCE(x); 64217ede90eSSatish Balay CHKFORTRANNULLOBJECTDEREFERENCE(b); 64317ede90eSSatish Balay *ierr = MatZeroRowsColumnsLocalIS(*mat,*is,*diag,*x,*b); 64417ede90eSSatish Balay } 6451eea217eSSatish Balay 646390e1bf2SBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetoptionsprefix_(Mat *mat,char* prefix PETSC_MIXED_LEN(len),PetscErrorCode *ierr PETSC_END_LEN(len)) 6471eea217eSSatish Balay { 6481eea217eSSatish Balay char *t; 6491eea217eSSatish Balay 6501eea217eSSatish Balay FIXCHAR(prefix,len,t); 6511eea217eSSatish Balay *ierr = MatSetOptionsPrefix(*mat,t); 6521eea217eSSatish Balay FREECHAR(prefix,t); 6531eea217eSSatish Balay } 6541eea217eSSatish Balay 655d0195637SJed Brown PETSC_EXTERN void PETSC_STDCALL matnullspaceremove_(MatNullSpace *sp,Vec *vec,PetscErrorCode *ierr) 656812c3f48SMatthew Knepley { 657d0195637SJed Brown *ierr = MatNullSpaceRemove(*sp,*vec); 658812c3f48SMatthew Knepley } 6591eea217eSSatish Balay 6604d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetinfo_(Mat *mat,MatInfoType *flag,MatInfo *info, int *ierr) 6615ba43861SSatish Balay { 6624d03fd2bSBarry Smith *ierr = MatGetInfo(*mat,*flag,info); 6635ba43861SSatish Balay } 6645ba43861SSatish Balay 6654d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matlufactor_(Mat *mat,IS *row,IS *col,const MatFactorInfo *info, int *ierr) 66622688b47SSatish Balay { 6674d03fd2bSBarry Smith *ierr = MatLUFactor(*mat,*row,*col,info); 66822688b47SSatish Balay } 66922688b47SSatish Balay 6704d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matilufactor_(Mat *mat,IS *row,IS *col,const MatFactorInfo *info, int *ierr) 67122688b47SSatish Balay { 6724d03fd2bSBarry Smith *ierr = MatILUFactor(*mat,*row,*col,info); 67322688b47SSatish Balay } 67422688b47SSatish Balay 6754d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matlufactorsymbolic_(Mat *fact,Mat *mat,IS *row,IS *col,const MatFactorInfo *info, int *ierr) 67622688b47SSatish Balay { 6774d03fd2bSBarry Smith *ierr = MatLUFactorSymbolic(*fact,*mat,*row,*col,info); 67822688b47SSatish Balay } 67922688b47SSatish Balay 6804d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matlufactornumeric_(Mat *fact,Mat *mat,const MatFactorInfo *info, int *ierr) 68122688b47SSatish Balay { 6824d03fd2bSBarry Smith *ierr = MatLUFactorNumeric(*fact,*mat,info); 68322688b47SSatish Balay } 68422688b47SSatish Balay 6854d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matcholeskyfactor_(Mat *mat,IS *perm,const MatFactorInfo *info, int *ierr) 68622688b47SSatish Balay { 6874d03fd2bSBarry Smith *ierr = MatCholeskyFactor(*mat,*perm,info); 68822688b47SSatish Balay } 68922688b47SSatish Balay 6904d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matcholeskyfactorsymbolic_(Mat *fact,Mat *mat,IS *perm,const MatFactorInfo *info, int *ierr) 69122688b47SSatish Balay { 6924d03fd2bSBarry Smith *ierr = MatCholeskyFactorSymbolic(*fact,*mat,*perm,info); 69322688b47SSatish Balay } 69422688b47SSatish Balay 6954d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matcholeskyfactornumeric_(Mat *fact,Mat *mat,const MatFactorInfo *info, int *ierr) 69622688b47SSatish Balay { 6974d03fd2bSBarry Smith *ierr = MatCholeskyFactorNumeric(*fact,*mat,info); 69822688b47SSatish Balay } 69922688b47SSatish Balay 7004d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matilufactorsymbolic_(Mat *fact,Mat *mat,IS *row,IS *col,const MatFactorInfo *info, int *ierr) 70122688b47SSatish Balay { 7024d03fd2bSBarry Smith *ierr = MatILUFactorSymbolic(*fact,*mat,*row,*col,info); 70322688b47SSatish Balay } 70422688b47SSatish Balay 7054d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL maticcfactorsymbolic_(Mat *fact,Mat *mat,IS *perm,const MatFactorInfo *info, int *ierr) 70622688b47SSatish Balay { 7074d03fd2bSBarry Smith *ierr = MatICCFactorSymbolic(*fact,*mat,*perm,info); 70822688b47SSatish Balay } 70922688b47SSatish Balay 7104d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL maticcfactor_(Mat *mat,IS *row,const MatFactorInfo *info, int *ierr) 71122688b47SSatish Balay { 7124d03fd2bSBarry Smith *ierr = MatICCFactor(*mat,*row,info); 71322688b47SSatish Balay } 71422688b47SSatish Balay 7154d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matfactorinfoinitialize_(MatFactorInfo *info, int *ierr) 71622688b47SSatish Balay { 7174d03fd2bSBarry Smith *ierr = MatFactorInfoInitialize(info); 71822688b47SSatish Balay } 719