xref: /petsc/src/mat/interface/ftn-custom/zmatrixf.c (revision 24aa916ee1223a4c9809cdc63f021d73fe63dcfc)
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