xref: /petsc/src/mat/interface/ftn-custom/zmatrixf.c (revision cee688db99110afa459328295fadd87b1f5c5892)
1af0996ceSBarry Smith #include <petsc/private/fortranimpl.h>
2*cee688dbSBarry Smith #include <petsc/private/f90impl.h>
3c6db04a5SJed Brown #include <petscmat.h>
4665c2dedSJed Brown #include <petscviewer.h>
5f4e70085SSatish Balay 
6f4e70085SSatish Balay #if defined(PETSC_HAVE_FORTRAN_CAPS)
74d03fd2bSBarry Smith #define matsetvalues_                    MATSETVALUES
81006886cSSatish Balay #define matsetvaluesnnnn_                MATSETVALUESNNNN
93b494cfeSSatish Balay #define matsetvalues0_                   MATSETVALUES0
101b266c99SBarry Smith #define matsetvaluesnn1_                 MATSETVALUESNN1
114d03fd2bSBarry Smith #define matsetvalues11_                  MATSETVALUES11
124d03fd2bSBarry Smith #define matsetvalues1n_                  MATSETVALUES1N
134d03fd2bSBarry Smith #define matsetvaluesn1_                  MATSETVALUESN1
143b494cfeSSatish Balay #define matsetvaluesblocked0_            MATSETVALUESBLOCKED0
154d03fd2bSBarry Smith #define matsetvaluesblocked11_           MATSETVALUESBLOCKED11
164d03fd2bSBarry Smith #define matsetvaluesblocked111_          MATSETVALUESBLOCKED111
174d03fd2bSBarry Smith #define matsetvaluesblocked1n_           MATSETVALUESBLOCKED1N
184d03fd2bSBarry Smith #define matsetvaluesblockedn1_           MATSETVALUESBLOCKEDN1
194d03fd2bSBarry Smith #define matsetvaluesblockedlocal_        MATSETVALUESBLOCKEDLOCAL
203b494cfeSSatish Balay #define matsetvaluesblockedlocal0_       MATSETVALUESBLOCKEDLOCAL0
214d03fd2bSBarry Smith #define matsetvaluesblockedlocal11_      MATSETVALUESBLOCKEDLOCAL11
224d03fd2bSBarry Smith #define matsetvaluesblockedlocal111_     MATSETVALUESBLOCKEDLOCAL111
234d03fd2bSBarry Smith #define matsetvaluesblockedlocal1n_      MATSETVALUESBLOCKEDLOCAL1N
244d03fd2bSBarry Smith #define matsetvaluesblockedlocaln1_      MATSETVALUESBLOCKEDLOCALN1
254d03fd2bSBarry Smith #define matsetvalueslocal_               MATSETVALUESLOCAL
263b494cfeSSatish Balay #define matsetvalueslocal0_              MATSETVALUESLOCAL0
274d03fd2bSBarry Smith #define matsetvalueslocal11_             MATSETVALUESLOCAL11
284d03fd2bSBarry Smith #define matsetvalueslocal11nn_           MATSETVALUESLOCAL11NN
294d03fd2bSBarry Smith #define matsetvalueslocal111_            MATSETVALUESLOCAL111
304d03fd2bSBarry Smith #define matsetvalueslocal1n_             MATSETVALUESLOCAL1N
314d03fd2bSBarry Smith #define matsetvalueslocaln1_             MATSETVALUESLOCALN1
3287bcf4e0SBarry Smith #define matgetrowmin_                    MATGETROWMIN
3387bcf4e0SBarry Smith #define matgetrowminabs_                 MATGETROWMINABS
345928be6bSBarry Smith #define matgetrowmax_                    MATGETROWMAX
355928be6bSBarry Smith #define matgetrowmaxabs_                 MATGETROWMAXABS
367d6bfa3bSBarry Smith #define matdestroymatrices_              MATDESTROYMATRICES
37df750dc8SHong Zhang #define matdestroysubmatrices_           MATDESTROYSUBMATRICES
385dffd610SBarry Smith #define matgetfactor_                    MATGETFACTOR
3935bd34faSBarry Smith #define matfactorgetsolverpackage_       MATFACTORGETSOLVERPACKAGE
40f4e70085SSatish Balay #define matgetrowij_                     MATGETROWIJ
41f4e70085SSatish Balay #define matrestorerowij_                 MATRESTOREROWIJ
42f4e70085SSatish Balay #define matgetrow_                       MATGETROW
43f4e70085SSatish Balay #define matrestorerow_                   MATRESTOREROW
44f7e310deSShri Abhyankar #define matload_                         MATLOAD
45f4e70085SSatish Balay #define matview_                         MATVIEW
468c778c55SBarry Smith #define matseqaijgetarray_               MATSEQAIJGETARRAY
476778691eSSatish Balay #define matseqaijrestorearray_           MATSEQAIJRESTOREARRAY
488c778c55SBarry Smith #define matdensegetarray_                MATDENSEGETARRAY
498c778c55SBarry Smith #define matdenserestorearray_            MATDENSERESTOREARRAY
50f4e70085SSatish Balay #define matconvert_                      MATCONVERT
517dae84e0SHong Zhang #define matcreatesubmatrices_            MATCREATESUBMATRICES
5217ede90eSSatish Balay #define matzerorowscolumns_              MATZEROROWSCOLUMNS
5317ede90eSSatish Balay #define matzerorowscolumnsis_            MATZEROROWSCOLUMNSIS
5417ede90eSSatish Balay #define matzerorowsstencil_              MATZEROROWSSTENCIL
55d25a37e1SJed Brown #define matzerorowscolumnsstencil_       MATZEROROWSCOLUMNSSTENCIL
56f4e70085SSatish Balay #define matzerorows_                     MATZEROROWS
57f4e70085SSatish Balay #define matzerorowsis_                   MATZEROROWSIS
58f4e70085SSatish Balay #define matzerorowslocal_                MATZEROROWSLOCAL
59f4e70085SSatish Balay #define matzerorowslocalis_              MATZEROROWSLOCALIS
6017ede90eSSatish Balay #define matzerorowscolumnslocal_         MATZEROROWSCOLUMNSLOCAL
6117ede90eSSatish Balay #define matzerorowscolumnslocalis_       MATZEROROWSCOLUMNSLOCALIS
621eea217eSSatish Balay #define matsetoptionsprefix_             MATSETOPTIONSPREFIX
63fcc9d04bSBarry Smith #define matcreatevecs_                   MATCREATEVECS
64c9d5ca86SBarry Smith #define matnullspaceremove_              MATNULLSPACEREMOVE
655ba43861SSatish Balay #define matgetinfo_                      MATGETINFO
6622688b47SSatish Balay #define matlufactor_                     MATLUFACTOR
6722688b47SSatish Balay #define matilufactor_                    MATILUFACTOR
6822688b47SSatish Balay #define matlufactorsymbolic_             MATLUFACTORSYMBOLIC
6922688b47SSatish Balay #define matlufactornumeric_              MATLUFACTORNUMERIC
7022688b47SSatish Balay #define matcholeskyfactor_               MATCHOLESKYFACTOR
7122688b47SSatish Balay #define matcholeskyfactorsymbolic_       MATCHOLESKYFACTORSYMBOLIC
7222688b47SSatish Balay #define matcholeskyfactornumeric_        MATCHOLESKYFACTORNUMERIC
7322688b47SSatish Balay #define matilufactorsymbolic_            MATILUFACTORSYMBOLIC
7422688b47SSatish Balay #define maticcfactorsymbolic_            MATICCFACTORSYMBOLIC
7522688b47SSatish Balay #define maticcfactor_                    MATICCFACTOR
7622688b47SSatish Balay #define matfactorinfoinitialize_         MATFACTORINFOINITIALIZE
77b22b330cSBarry Smith #define matnullspacesetfunction_         MATNULLSPACESETFUNCTION
780905d9aaSJed Brown #define matfindnonzerorows_              MATFINDNONZEROROWS
793be0408cSBarry Smith #define matgetsize00_                    MATGETSIZE00
803be0408cSBarry Smith #define matgetsize10_                    MATGETSIZE10
813be0408cSBarry Smith #define matgetsize01_                    MATGETSIZE01
823be0408cSBarry Smith #define matgetlocalsize00_               MATGETLOCALSIZE00
833be0408cSBarry Smith #define matgetlocalsize10_               MATGETLOCALSIZE10
843be0408cSBarry Smith #define matgetlocalsize01_               MATGETLOCALSIZE01
85f4e70085SSatish Balay #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE)
864d03fd2bSBarry Smith #define matsetvalues_                    matsetvalues
871006886cSSatish Balay #define matsetvaluesnnnn_                matsetvaluesnnnn
883b494cfeSSatish Balay #define matsetvalues0_                   matsetvalues0
891b266c99SBarry Smith #define matsetvaluesnn1_                 matsetvaluesnn1
904d03fd2bSBarry Smith #define matsetvalues11_                  matsetvalues11
914d03fd2bSBarry Smith #define matsetvaluesn1_                  matsetvaluesn1
924d03fd2bSBarry Smith #define matsetvalues1n_                  matsetvalues1n
934d03fd2bSBarry Smith #define matsetvalueslocal_               matsetvalueslocal
943b494cfeSSatish Balay #define matsetvalueslocal0_              matsetvalueslocal0
954d03fd2bSBarry Smith #define matsetvalueslocal11_             matsetvalueslocal11
964d03fd2bSBarry Smith #define matsetvalueslocal11nn_           matsetvalueslocal11nn
974d03fd2bSBarry Smith #define matsetvalueslocal111_            matsetvalueslocal111
984d03fd2bSBarry Smith #define matsetvalueslocal1n_             matsetvalueslocal1n
994d03fd2bSBarry Smith #define matsetvalueslocaln1_             matsetvalueslocaln1
1004d03fd2bSBarry Smith #define matsetvaluesblocked_             matsetvaluesblocked
1013b494cfeSSatish Balay #define matsetvaluesblocked0_            matsetvaluesblocked0
1024d03fd2bSBarry Smith #define matsetvaluesblocked11_           matsetvaluesblocked11
1034d03fd2bSBarry Smith #define matsetvaluesblocked111_          matsetvaluesblocked111
1044d03fd2bSBarry Smith #define matsetvaluesblocked1n_           matsetvaluesblocked1n
10524aa916eSSatish Balay #define matsetvaluesblockedn1_           matsetvaluesblockedn1
1064d03fd2bSBarry Smith #define matsetvaluesblockedlocal_        matsetvaluesblockedlocal
1073b494cfeSSatish Balay #define matsetvaluesblockedlocal0_       matsetvaluesblockedlocal0
1084d03fd2bSBarry Smith #define matsetvaluesblockedlocal11_      matsetvaluesblockedlocal11
1094d03fd2bSBarry Smith #define matsetvaluesblockedlocal111_     matsetvaluesblockedlocal111
1104d03fd2bSBarry Smith #define matsetvaluesblockedlocal1n_      matsetvaluesblockedlocal1n
11124aa916eSSatish Balay #define matsetvaluesblockedlocaln1_      matsetvaluesblockedlocaln1
11287bcf4e0SBarry Smith #define matgetrowmin_                    matgetrowmin
11387bcf4e0SBarry Smith #define matgetrowminabs_                 matgetrowminabs
1145928be6bSBarry Smith #define matgetrowmax_                    matgetrowmax
1155928be6bSBarry Smith #define matgetrowmaxabs_                 matgetrowmaxabs
1165928be6bSBarry Smith #define matdestroymatrices_              matdestroymatrices
117df750dc8SHong Zhang #define matdestroysubmatrices_           matdestroysubmatrices
1185dffd610SBarry Smith #define matgetfactor_                    matgetfactor
11935bd34faSBarry Smith #define matfactorgetsolverpackage_       matfactorgetsolverpackage
120fcc9d04bSBarry Smith #define matcreatevecs_                   matcreatevecs
121f4e70085SSatish Balay #define matgetrowij_                     matgetrowij
122f4e70085SSatish Balay #define matrestorerowij_                 matrestorerowij
123f4e70085SSatish Balay #define matgetrow_                       matgetrow
124f4e70085SSatish Balay #define matrestorerow_                   matrestorerow
125f4e70085SSatish Balay #define matview_                         matview
126f7e310deSShri Abhyankar #define matload_                         matload
1278c778c55SBarry Smith #define matseqaijgetarray_               matseqaijgetarray
1288c778c55SBarry Smith #define matseqaijrestorearray_           matseqaijrestorearray
1298c778c55SBarry Smith #define matdensegetarray_                matdensegetarray
1308c778c55SBarry Smith #define matdenserestorearray_            matdenserestorearray
131f4e70085SSatish Balay #define matconvert_                      matconvert
1327dae84e0SHong Zhang #define matcreatesubmatrices_            matcreatesubmatrices
13317ede90eSSatish Balay #define matzerorowscolumns_              matzerorowscolumns
13417ede90eSSatish Balay #define matzerorowscolumnsis_            matzerorowscolumnsis
13517ede90eSSatish Balay #define matzerorowsstencil_              matzerorowsstencil
136d25a37e1SJed Brown #define matzerorowscolumnsstencil_       matzerorowscolumnsstencil
137f4e70085SSatish Balay #define matzerorows_                     matzerorows
138f4e70085SSatish Balay #define matzerorowsis_                   matzerorowsis
139f4e70085SSatish Balay #define matzerorowslocal_                matzerorowslocal
140f4e70085SSatish Balay #define matzerorowslocalis_              matzerorowslocalis
14117ede90eSSatish Balay #define matzerorowscolumnslocal_         matzerorowscolumnslocal
14217ede90eSSatish Balay #define matzerorowscolumnslocalis_       matzerorowscolumnslocalis
1431eea217eSSatish Balay #define matsetoptionsprefix_             matsetoptionsprefix
144812c3f48SMatthew Knepley #define matnullspaceremove_              matnullspaceremove
1455ba43861SSatish Balay #define matgetinfo_                      matgetinfo
14622688b47SSatish Balay #define matlufactor_                     matlufactor
14722688b47SSatish Balay #define matilufactor_                    matilufactor
14822688b47SSatish Balay #define matlufactorsymbolic_             matlufactorsymbolic
14922688b47SSatish Balay #define matlufactornumeric_              matlufactornumeric
15022688b47SSatish Balay #define matcholeskyfactor_               matcholeskyfactor
15122688b47SSatish Balay #define matcholeskyfactorsymbolic_       matcholeskyfactorsymbolic
15222688b47SSatish Balay #define matcholeskyfactornumeric_        matcholeskyfactornumeric
15322688b47SSatish Balay #define matilufactorsymbolic_            matilufactorsymbolic
15422688b47SSatish Balay #define maticcfactorsymbolic_            maticcfactorsymbolic
15522688b47SSatish Balay #define maticcfactor_                    maticcfactor
15622688b47SSatish Balay #define matfactorinfoinitialize_         matfactorinfoinitialize
157b22b330cSBarry Smith #define matnullspacesetfunction_         matnullspacesetfunction
1580905d9aaSJed Brown #define matfindnonzerorows_              matfindnonzerorows
1593be0408cSBarry Smith #define matgetsize00_                    matgetsize00
1603be0408cSBarry Smith #define matgetsize10_                    matgetsize10
1613be0408cSBarry Smith #define matgetsize01_                    matgetsize01
1623be0408cSBarry Smith #define matgetlocalsize00_               matgetlocalsize00
1633be0408cSBarry Smith #define matgetlocalsize10_               matgetlocalsize10
1643be0408cSBarry Smith #define matgetlocalsize01_               matgetlocalsize01
165f4e70085SSatish Balay #endif
166f4e70085SSatish Balay 
1673be0408cSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matgetsize_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr )
1683be0408cSBarry Smith {
1693be0408cSBarry Smith   CHKFORTRANNULLINTEGER(m);
1703be0408cSBarry Smith   CHKFORTRANNULLINTEGER(n);
1713be0408cSBarry Smith   *ierr = MatGetSize(*mat,m,n);
1723be0408cSBarry Smith }
1733be0408cSBarry Smith 
1743be0408cSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matgetsize00_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr )
1753be0408cSBarry Smith {
1763be0408cSBarry Smith   matgetsize_(mat,m,n,ierr);
1773be0408cSBarry Smith }
1783be0408cSBarry Smith 
1793be0408cSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matgetsize10_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr )
1803be0408cSBarry Smith {
1813be0408cSBarry Smith   matgetsize_(mat,m,n,ierr);
1823be0408cSBarry Smith }
1833be0408cSBarry Smith 
1843be0408cSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matgetsize01_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr )
1853be0408cSBarry Smith {
1863be0408cSBarry Smith   matgetsize_(mat,m,n,ierr);
1873be0408cSBarry Smith }
1883be0408cSBarry Smith 
1893be0408cSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matgetlocalsize_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr )
1903be0408cSBarry Smith {
1913be0408cSBarry Smith   CHKFORTRANNULLINTEGER(m);
1923be0408cSBarry Smith   CHKFORTRANNULLINTEGER(n);
1933be0408cSBarry Smith   *ierr = MatGetLocalSize(*mat,m,n);
1943be0408cSBarry Smith }
1953be0408cSBarry Smith 
1963be0408cSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matgetlocalsize00_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr )
1973be0408cSBarry Smith {
1983be0408cSBarry Smith   matgetlocalsize_(mat,m,n,ierr);
1993be0408cSBarry Smith }
2003be0408cSBarry Smith 
2013be0408cSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matgetlocalsize10_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr )
2023be0408cSBarry Smith {
2033be0408cSBarry Smith   matgetlocalsize_(mat,m,n,ierr);
2043be0408cSBarry Smith }
2053be0408cSBarry Smith 
2063be0408cSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matgetlocalsize01_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr )
2073be0408cSBarry Smith {
2083be0408cSBarry Smith   matgetlocalsize_(mat,m,n,ierr);
2093be0408cSBarry Smith }
2103be0408cSBarry Smith 
2114d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvaluesblocked_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){
2124d03fd2bSBarry Smith   *ierr = MatSetValuesBlocked(*mat,*m,idxm,*n,idxn,v,*addv);
2134d03fd2bSBarry Smith }
2144d03fd2bSBarry Smith 
215*cee688dbSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvaluesblocked2_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], F90Array2d *y,InsertMode *addv, int *ierr PETSC_F90_2PTR_PROTO(ptrd)){
216*cee688dbSBarry Smith   PetscScalar *fa;
217*cee688dbSBarry Smith   *ierr = F90Array2dAccess(y,PETSC_SCALAR,(void**)&fa PETSC_F90_2PTR_PARAM(ptrd));if (*ierr) return;
218*cee688dbSBarry Smith   matsetvaluesblocked_(mat,m,idxm,n,idxn,fa,addv,ierr);
219*cee688dbSBarry Smith }
220*cee688dbSBarry Smith 
2213b494cfeSSatish Balay PETSC_EXTERN void PETSC_STDCALL  matsetvaluesblocked0_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){
2223b494cfeSSatish Balay   matsetvaluesblocked_(mat,m,idxm,n,idxn,v,addv,ierr);
2233b494cfeSSatish Balay }
2243b494cfeSSatish Balay 
2254d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvaluesblocked11_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){
2264d03fd2bSBarry Smith   matsetvaluesblocked_(mat,m,idxm,n,idxn,v,addv,ierr);
2274d03fd2bSBarry Smith }
2284d03fd2bSBarry Smith 
2294d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvaluesblocked111_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){
2304d03fd2bSBarry Smith   matsetvaluesblocked_(mat,m,idxm,n,idxn,v,addv,ierr);
2314d03fd2bSBarry Smith }
2324d03fd2bSBarry Smith 
2334d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvaluesblocked1n_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){
2344d03fd2bSBarry Smith   matsetvaluesblocked_(mat,m,idxm,n,idxn,v,addv,ierr);
2354d03fd2bSBarry Smith }
2364d03fd2bSBarry Smith 
2374d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvaluesblockedn1_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){
2384d03fd2bSBarry Smith   matsetvaluesblocked_(mat,m,idxm,n,idxn,v,addv,ierr);
2394d03fd2bSBarry Smith }
2404d03fd2bSBarry Smith 
2414d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvaluesblockedlocal_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr )
2424d03fd2bSBarry Smith {
2434d03fd2bSBarry Smith   *ierr = MatSetValuesBlockedLocal(*mat,*nrow,irow,*ncol,icol,y,*addv);
2444d03fd2bSBarry Smith }
2454d03fd2bSBarry Smith 
2463b494cfeSSatish Balay PETSC_EXTERN void PETSC_STDCALL  matsetvaluesblockedlocal0_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){
2473b494cfeSSatish Balay   matsetvaluesblockedlocal_(mat,m,idxm,n,idxn,v,addv,ierr);
2483b494cfeSSatish Balay }
2493b494cfeSSatish Balay 
2504d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvaluesblockedlocal11_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){
2514d03fd2bSBarry Smith   matsetvaluesblockedlocal_(mat,m,idxm,n,idxn,v,addv,ierr);
2524d03fd2bSBarry Smith }
2534d03fd2bSBarry Smith 
2544d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvaluesblockedlocal111_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){
2554d03fd2bSBarry Smith   matsetvaluesblockedlocal_(mat,m,idxm,n,idxn,v,addv,ierr);
2564d03fd2bSBarry Smith }
2574d03fd2bSBarry Smith 
2584d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvaluesblockedlocal1n_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){
2594d03fd2bSBarry Smith   matsetvaluesblockedlocal_(mat,m,idxm,n,idxn,v,addv,ierr);
2604d03fd2bSBarry Smith }
2614d03fd2bSBarry Smith 
2624d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvaluesblockedlocaln1_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){
2634d03fd2bSBarry Smith   matsetvaluesblockedlocal_(mat,m,idxm,n,idxn,v,addv,ierr);
2644d03fd2bSBarry Smith }
2654d03fd2bSBarry Smith 
2664d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvalues_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr )
2674d03fd2bSBarry Smith {
2684d03fd2bSBarry Smith   *ierr = MatSetValues(*mat,*m,idxm,*n,idxn,v,*addv);
2694d03fd2bSBarry Smith }
2704d03fd2bSBarry Smith 
2711b266c99SBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvaluesnnnn_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr )
2721b266c99SBarry Smith {
2731b266c99SBarry Smith   matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr);
2741b266c99SBarry Smith }
2751b266c99SBarry Smith 
2763b494cfeSSatish Balay PETSC_EXTERN void PETSC_STDCALL  matsetvalues0_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr )
2773b494cfeSSatish Balay {
2783b494cfeSSatish Balay   matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr);
2793b494cfeSSatish Balay }
2803b494cfeSSatish Balay 
2811b266c99SBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvaluesnn1_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr )
2821b266c99SBarry Smith {
2831b266c99SBarry Smith   matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr);
2841b266c99SBarry Smith }
2851b266c99SBarry Smith 
2864d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvalues11_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr )
2874d03fd2bSBarry Smith {
2884d03fd2bSBarry Smith   matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr);
2894d03fd2bSBarry Smith }
2904d03fd2bSBarry Smith 
2914d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvaluesn1_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr )
2924d03fd2bSBarry Smith {
2934d03fd2bSBarry Smith   matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr);
2944d03fd2bSBarry Smith }
2954d03fd2bSBarry Smith 
2964d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvalues1n_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr )
2974d03fd2bSBarry Smith {
2984d03fd2bSBarry Smith   matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr);
2994d03fd2bSBarry Smith }
3004d03fd2bSBarry Smith 
3014d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvalueslocal_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr )
3024d03fd2bSBarry Smith {
3034d03fd2bSBarry Smith   *ierr = MatSetValuesLocal(*mat,*nrow,irow,*ncol,icol,y,*addv);
3044d03fd2bSBarry Smith }
3054d03fd2bSBarry Smith 
3063b494cfeSSatish Balay PETSC_EXTERN void PETSC_STDCALL  matsetvalueslocal0_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr )
3073b494cfeSSatish Balay {
3083b494cfeSSatish Balay   matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr);
3093b494cfeSSatish Balay }
3103b494cfeSSatish Balay 
3114d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvalueslocal11_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr )
3124d03fd2bSBarry Smith {
3134d03fd2bSBarry Smith   matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr);
3144d03fd2bSBarry Smith }
3154d03fd2bSBarry Smith 
3164d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvalueslocal11nn_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr )
3174d03fd2bSBarry Smith {
3184d03fd2bSBarry Smith   matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr);
3194d03fd2bSBarry Smith }
3204d03fd2bSBarry Smith 
3214d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvalueslocal111_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr )
3224d03fd2bSBarry Smith {
3234d03fd2bSBarry Smith   matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr);
3244d03fd2bSBarry Smith }
3254d03fd2bSBarry Smith 
3264d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvalueslocal1n_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr )
3274d03fd2bSBarry Smith {
3284d03fd2bSBarry Smith   matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr);
3294d03fd2bSBarry Smith }
3304d03fd2bSBarry Smith 
3314d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvalueslocaln1_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr )
3324d03fd2bSBarry Smith {
3334d03fd2bSBarry Smith   matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr);
3344d03fd2bSBarry Smith }
3354d03fd2bSBarry Smith 
33687bcf4e0SBarry Smith PETSC_EXTERN void PETSC_STDCALL  matgetrowmin_(Mat *mat,Vec *v,PetscInt idx[], int *ierr )
33787bcf4e0SBarry Smith {
33887bcf4e0SBarry Smith   CHKFORTRANNULLINTEGER(idx);
33987bcf4e0SBarry Smith   *ierr = MatGetRowMin(*mat,*v,idx);
34087bcf4e0SBarry Smith }
3414d03fd2bSBarry Smith 
34287bcf4e0SBarry Smith PETSC_EXTERN void PETSC_STDCALL  matgetrowminabs_(Mat *mat,Vec *v,PetscInt idx[], int *ierr )
34387bcf4e0SBarry Smith {
34487bcf4e0SBarry Smith   CHKFORTRANNULLINTEGER(idx);
34587bcf4e0SBarry Smith   *ierr = MatGetRowMinAbs(*mat,*v,idx);
34687bcf4e0SBarry Smith }
34787bcf4e0SBarry Smith 
3485928be6bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matgetrowmax_(Mat *mat,Vec *v,PetscInt idx[], int *ierr )
3495928be6bSBarry Smith {
3505928be6bSBarry Smith   CHKFORTRANNULLINTEGER(idx);
3515928be6bSBarry Smith   *ierr = MatGetRowMax(*mat,*v,idx);
3525928be6bSBarry Smith }
3535928be6bSBarry Smith 
3545928be6bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matgetrowmaxabs_(Mat *mat,Vec *v,PetscInt idx[], int *ierr )
3555928be6bSBarry Smith {
3565928be6bSBarry Smith   CHKFORTRANNULLINTEGER(idx);
3575928be6bSBarry Smith   *ierr = MatGetRowMaxAbs(*mat,*v,idx);
3585928be6bSBarry Smith }
3595928be6bSBarry Smith 
360b22b330cSBarry Smith static PetscErrorCode ournullfunction(MatNullSpace sp,Vec x,void *ctx)
361b22b330cSBarry Smith {
362b22b330cSBarry Smith   PetscErrorCode ierr = 0;
363b22b330cSBarry Smith   (*(void (PETSC_STDCALL *)(MatNullSpace*,Vec*,void*,PetscErrorCode*))(((PetscObject)sp)->fortran_func_pointers[0]))(&sp,&x,ctx,&ierr);CHKERRQ(ierr);
364b22b330cSBarry Smith   return 0;
365b22b330cSBarry Smith }
366b22b330cSBarry Smith 
3678cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matnullspacesetfunction_(MatNullSpace *sp, PetscErrorCode (*rem)(MatNullSpace,Vec,void*),void *ctx,PetscErrorCode *ierr)
368b22b330cSBarry Smith {
369b22b330cSBarry Smith   PetscObjectAllocateFortranPointers(*sp,1);
370b22b330cSBarry Smith   ((PetscObject)*sp)->fortran_func_pointers[0] = (PetscVoidFunction)rem;
37126fbe8dcSKarl Rupp 
372b22b330cSBarry Smith   *ierr = MatNullSpaceSetFunction(*sp,ournullfunction,ctx);
373b22b330cSBarry Smith }
374b22b330cSBarry Smith 
375d2da0f5dSBarry Smith PETSC_EXTERN void PETSC_STDCALL matcreatevecs_(Mat *mat,Vec *right,Vec *left, int *ierr)
3767c54600cSBarry Smith {
3777c54600cSBarry Smith   CHKFORTRANNULLOBJECT(right);
3787c54600cSBarry Smith   CHKFORTRANNULLOBJECT(left);
3792a7a6963SBarry Smith   *ierr = MatCreateVecs(*mat,right,left);
3807c54600cSBarry Smith }
3817c54600cSBarry Smith 
3828cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matgetrowij_(Mat *B,PetscInt *shift,PetscBool *sym,PetscBool *blockcompressed,PetscInt *n,PetscInt *ia,size_t *iia,
383ace3abfcSBarry Smith                                 PetscInt *ja,size_t *jja,PetscBool  *done,PetscErrorCode *ierr)
384f4e70085SSatish Balay {
3851a83f524SJed Brown   const PetscInt *IA,*JA;
3868f7157efSSatish Balay   *ierr = MatGetRowIJ(*B,*shift,*sym,*blockcompressed,n,&IA,&JA,done);if (*ierr) return;
3871a83f524SJed Brown   *iia  = PetscIntAddressToFortran(ia,(PetscInt*)IA);
3881a83f524SJed Brown   *jja  = PetscIntAddressToFortran(ja,(PetscInt*)JA);
389f4e70085SSatish Balay }
390f4e70085SSatish Balay 
3918cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matrestorerowij_(Mat *B,PetscInt *shift,PetscBool *sym,PetscBool *blockcompressed, PetscInt *n,PetscInt *ia,size_t *iia,
392ace3abfcSBarry Smith                                     PetscInt *ja,size_t *jja,PetscBool  *done,PetscErrorCode *ierr)
393f4e70085SSatish Balay {
3941a83f524SJed Brown   const PetscInt *IA = PetscIntAddressFromFortran(ia,*iia),*JA = PetscIntAddressFromFortran(ja,*jja);
3958f7157efSSatish Balay   *ierr = MatRestoreRowIJ(*B,*shift,*sym,*blockcompressed,n,&IA,&JA,done);
396f4e70085SSatish Balay }
397f4e70085SSatish Balay 
398f4e70085SSatish Balay /*
399f4e70085SSatish Balay    This is a poor way of storing the column and value pointers
400f4e70085SSatish Balay   generated by MatGetRow() to be returned with MatRestoreRow()
401f4e70085SSatish Balay   but there is not natural,good place else to store them. Hence
402f4e70085SSatish Balay   Fortran programmers can only have one outstanding MatGetRows()
403f4e70085SSatish Balay   at a time.
404f4e70085SSatish Balay */
405f4e70085SSatish Balay static PetscErrorCode    matgetrowactive = 0;
406f4e70085SSatish Balay static const PetscInt    *my_ocols       = 0;
407f4e70085SSatish Balay static const PetscScalar *my_ovals       = 0;
408f4e70085SSatish Balay 
4098cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matgetrow_(Mat *mat,PetscInt *row,PetscInt *ncols,PetscInt *cols,PetscScalar *vals,PetscErrorCode *ierr)
410f4e70085SSatish Balay {
411f4e70085SSatish Balay   const PetscInt    **oocols = &my_ocols;
412f4e70085SSatish Balay   const PetscScalar **oovals = &my_ovals;
413f4e70085SSatish Balay 
414f4e70085SSatish Balay   if (matgetrowactive) {
415efca3c55SSatish Balay     PetscError(PETSC_COMM_SELF,__LINE__,"MatGetRow_Fortran",__FILE__,PETSC_ERR_ARG_WRONGSTATE,PETSC_ERROR_INITIAL,
416f4e70085SSatish Balay                "Cannot have two MatGetRow() active simultaneously\n\
417f4e70085SSatish Balay                call MatRestoreRow() before calling MatGetRow() a second time");
418f4e70085SSatish Balay     *ierr = 1;
419f4e70085SSatish Balay     return;
420f4e70085SSatish Balay   }
421f4e70085SSatish Balay 
4220298fd71SBarry Smith   CHKFORTRANNULLINTEGER(cols); if (!cols) oocols = NULL;
4230298fd71SBarry Smith   CHKFORTRANNULLSCALAR(vals);  if (!vals) oovals = NULL;
424f4e70085SSatish Balay 
425f4e70085SSatish Balay   *ierr = MatGetRow(*mat,*row,ncols,oocols,oovals);
426f4e70085SSatish Balay   if (*ierr) return;
427f4e70085SSatish Balay 
428f4e70085SSatish Balay   if (oocols) { *ierr = PetscMemcpy(cols,my_ocols,(*ncols)*sizeof(PetscInt)); if (*ierr) return;}
429f4e70085SSatish Balay   if (oovals) { *ierr = PetscMemcpy(vals,my_ovals,(*ncols)*sizeof(PetscScalar)); if (*ierr) return;}
430f4e70085SSatish Balay   matgetrowactive = 1;
431f4e70085SSatish Balay }
432f4e70085SSatish Balay 
4338cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matrestorerow_(Mat *mat,PetscInt *row,PetscInt *ncols,PetscInt *cols,PetscScalar *vals,PetscErrorCode *ierr)
434f4e70085SSatish Balay {
435f4e70085SSatish Balay   const PetscInt    **oocols = &my_ocols;
436f4e70085SSatish Balay   const PetscScalar **oovals = &my_ovals;
437f4e70085SSatish Balay   if (!matgetrowactive) {
438efca3c55SSatish Balay     PetscError(PETSC_COMM_SELF,__LINE__,"MatRestoreRow_Fortran",__FILE__,PETSC_ERR_ARG_WRONGSTATE,PETSC_ERROR_INITIAL,
439f4e70085SSatish Balay                "Must call MatGetRow() first");
440f4e70085SSatish Balay     *ierr = 1;
441f4e70085SSatish Balay     return;
442f4e70085SSatish Balay   }
4430298fd71SBarry Smith   CHKFORTRANNULLINTEGER(cols); if (!cols) oocols = NULL;
4440298fd71SBarry Smith   CHKFORTRANNULLSCALAR(vals);  if (!vals) oovals = NULL;
445f4e70085SSatish Balay 
446f4e70085SSatish Balay   *ierr           = MatRestoreRow(*mat,*row,ncols,oocols,oovals);
447f4e70085SSatish Balay   matgetrowactive = 0;
448f4e70085SSatish Balay }
449f4e70085SSatish Balay 
4508cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matview_(Mat *mat,PetscViewer *vin,PetscErrorCode *ierr)
451f4e70085SSatish Balay {
452f4e70085SSatish Balay   PetscViewer v;
453f4e70085SSatish Balay   PetscPatchDefaultViewers_Fortran(vin,v);
454f4e70085SSatish Balay   *ierr = MatView(*mat,v);
455f4e70085SSatish Balay }
456f4e70085SSatish Balay 
4578cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matload_(Mat *mat,PetscViewer *vin,PetscErrorCode *ierr)
458f7e310deSShri Abhyankar {
459f7e310deSShri Abhyankar   PetscViewer v;
460f7e310deSShri Abhyankar   PetscPatchDefaultViewers_Fortran(vin,v);
461112444f4SShri Abhyankar   *ierr = MatLoad(*mat,v);
462f7e310deSShri Abhyankar }
463f7e310deSShri Abhyankar 
4648cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matseqaijgetarray_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr)
465f4e70085SSatish Balay {
466f4e70085SSatish Balay   PetscScalar *mm;
467f4e70085SSatish Balay   PetscInt    m,n;
468f4e70085SSatish Balay 
4698c778c55SBarry Smith   *ierr = MatSeqAIJGetArray(*mat,&mm); if (*ierr) return;
470f4e70085SSatish Balay   *ierr = MatGetSize(*mat,&m,&n);  if (*ierr) return;
471f91d1997SBarry Smith   *ierr = PetscScalarAddressToFortran((PetscObject)*mat,1,fa,mm,m*n,ia); if (*ierr) return;
472f4e70085SSatish Balay }
473f4e70085SSatish Balay 
4748cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matseqaijrestorearray_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr)
475f4e70085SSatish Balay {
476f4e70085SSatish Balay   PetscScalar *lx;
477f4e70085SSatish Balay   PetscInt    m,n;
478f4e70085SSatish Balay 
479f4e70085SSatish Balay   *ierr = MatGetSize(*mat,&m,&n); if (*ierr) return;
480f4e70085SSatish Balay   *ierr = PetscScalarAddressFromFortran((PetscObject)*mat,fa,*ia,m*n,&lx);if (*ierr) return;
4818c778c55SBarry Smith   *ierr = MatSeqAIJRestoreArray(*mat,&lx);if (*ierr) return;
482f4e70085SSatish Balay }
483f4e70085SSatish Balay 
4848cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matdensegetarray_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr)
48573a71a0fSBarry Smith {
48673a71a0fSBarry Smith   PetscScalar *mm;
48773a71a0fSBarry Smith   PetscInt    m,n;
48873a71a0fSBarry Smith 
4898c778c55SBarry Smith   *ierr = MatDenseGetArray(*mat,&mm); if (*ierr) return;
49073a71a0fSBarry Smith   *ierr = MatGetSize(*mat,&m,&n);  if (*ierr) return;
49173a71a0fSBarry Smith   *ierr = PetscScalarAddressToFortran((PetscObject)*mat,1,fa,mm,m*n,ia); if (*ierr) return;
49273a71a0fSBarry Smith }
49373a71a0fSBarry Smith 
4948cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matdenserestorearray_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr)
49573a71a0fSBarry Smith {
49673a71a0fSBarry Smith   PetscScalar *lx;
49773a71a0fSBarry Smith   PetscInt    m,n;
49873a71a0fSBarry Smith 
49973a71a0fSBarry Smith   *ierr = MatGetSize(*mat,&m,&n); if (*ierr) return;
50073a71a0fSBarry Smith   *ierr = PetscScalarAddressFromFortran((PetscObject)*mat,fa,*ia,m*n,&lx);if (*ierr) return;
5018c778c55SBarry Smith   *ierr = MatDenseRestoreArray(*mat,&lx);if (*ierr) return;
50273a71a0fSBarry Smith }
50373a71a0fSBarry Smith 
504390e1bf2SBarry Smith PETSC_EXTERN void PETSC_STDCALL matfactorgetsolverpackage_(Mat *mat,char* name PETSC_MIXED_LEN(len),PetscErrorCode *ierr PETSC_END_LEN(len))
50535bd34faSBarry Smith {
50635bd34faSBarry Smith   const char *tname;
50735bd34faSBarry Smith 
50835bd34faSBarry Smith   *ierr = MatFactorGetSolverPackage(*mat,&tname);if (*ierr) return;
50935bd34faSBarry Smith   if (name != PETSC_NULL_CHARACTER_Fortran) {
51035bd34faSBarry Smith     *ierr = PetscStrncpy(name,tname,len);if (*ierr) return;
51135bd34faSBarry Smith   }
51235bd34faSBarry Smith   FIXRETURNCHAR(PETSC_TRUE,name,len);
51335bd34faSBarry Smith }
51435bd34faSBarry Smith 
515390e1bf2SBarry 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))
5165dffd610SBarry Smith {
5175dffd610SBarry Smith   char *t;
5185dffd610SBarry Smith   FIXCHAR(outtype,len,t);
5199be81726SHong Zhang   *ierr = MatGetFactor(*mat,t,*ftype,M);
5205dffd610SBarry Smith   FREECHAR(outtype,t);
5215dffd610SBarry Smith }
5225dffd610SBarry Smith 
523390e1bf2SBarry 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))
524f4e70085SSatish Balay {
525f4e70085SSatish Balay   char *t;
526f4e70085SSatish Balay   FIXCHAR(outtype,len,t);
527f4e70085SSatish Balay   *ierr = MatConvert(*mat,t,*reuse,M);
528f4e70085SSatish Balay   FREECHAR(outtype,t);
529f4e70085SSatish Balay }
530f4e70085SSatish Balay 
531f4e70085SSatish Balay /*
5327dae84e0SHong Zhang     MatCreateSubmatrices() is slightly different from C since the
533f4e70085SSatish Balay     Fortran provides the array to hold the submatrix objects,while in C that
5347dae84e0SHong Zhang     array is allocated by the MatCreateSubmatrices()
535f4e70085SSatish Balay */
5367dae84e0SHong Zhang PETSC_EXTERN void PETSC_STDCALL matcreatesubmatrices_(Mat *mat,PetscInt *n,IS *isrow,IS *iscol,MatReuse *scall,Mat *smat,PetscErrorCode *ierr)
537f4e70085SSatish Balay {
538f4e70085SSatish Balay   Mat      *lsmat;
539f4e70085SSatish Balay   PetscInt i;
540f4e70085SSatish Balay 
541f4e70085SSatish Balay   if (*scall == MAT_INITIAL_MATRIX) {
5427dae84e0SHong Zhang     *ierr = MatCreateSubMatrices(*mat,*n,isrow,iscol,*scall,&lsmat);
543de7ef04eSHong Zhang     for (i=0; i<=*n; i++) { /* lsmat[*n] might be a dummy matrix for saving data struc */
544f4e70085SSatish Balay       smat[i] = lsmat[i];
545f4e70085SSatish Balay     }
546f4e70085SSatish Balay     *ierr = PetscFree(lsmat);
547f4e70085SSatish Balay   } else {
5487dae84e0SHong Zhang     *ierr = MatCreateSubMatrices(*mat,*n,isrow,iscol,*scall,&smat);
549f4e70085SSatish Balay   }
550f4e70085SSatish Balay }
551f4e70085SSatish Balay 
5527d6bfa3bSBarry Smith /*
5537d6bfa3bSBarry Smith     MatDestroyMatrices() is slightly different from C since the
554de7ef04eSHong Zhang     Fortran does not free the array of matrix objects, while in C that
555de7ef04eSHong Zhang     the array is freed
556de7ef04eSHong Zhang */
557de7ef04eSHong Zhang PETSC_EXTERN void PETSC_STDCALL matdestroymatrices_(PetscInt *n,Mat *smat,PetscErrorCode *ierr)
558de7ef04eSHong Zhang {
559de7ef04eSHong Zhang   PetscInt i;
560de7ef04eSHong Zhang 
561de7ef04eSHong Zhang   for (i=0; i<*n; i++) {
562de7ef04eSHong Zhang     *ierr = MatDestroy(&smat[i]);if (*ierr) return;
563de7ef04eSHong Zhang   }
564de7ef04eSHong Zhang }
565de7ef04eSHong Zhang 
566de7ef04eSHong Zhang /*
567de7ef04eSHong Zhang     MatDestroySubMatrices() is slightly different from C since the
5687d6bfa3bSBarry Smith     Fortran provides the array to hold the submatrix objects, while in C that
5697dae84e0SHong Zhang     array is allocated by the MatCreateSubmatrices()
5707d6bfa3bSBarry Smith */
571de7ef04eSHong Zhang PETSC_EXTERN void PETSC_STDCALL matdestroysubmatrices_(PetscInt *n,Mat *smat,PetscErrorCode *ierr)
5727d6bfa3bSBarry Smith {
573de7ef04eSHong Zhang   Mat      *lsmat;
5747d6bfa3bSBarry Smith   PetscInt i;
5757d6bfa3bSBarry Smith 
576de7ef04eSHong Zhang   *ierr = PetscMalloc1(*n+1,&lsmat);
577de7ef04eSHong Zhang   for (i=0; i<=*n; i++) {
578de7ef04eSHong Zhang       lsmat[i] = smat[i];
5797d6bfa3bSBarry Smith   }
580de7ef04eSHong Zhang   *ierr = MatDestroySubMatrices(*n,&lsmat);
581df750dc8SHong Zhang }
582df750dc8SHong Zhang 
5838cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matzerorowscolumns_(Mat *mat,PetscInt *numRows,PetscInt *rows,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr)
58417ede90eSSatish Balay {
58517ede90eSSatish Balay   CHKFORTRANNULLOBJECTDEREFERENCE(x);
58617ede90eSSatish Balay   CHKFORTRANNULLOBJECTDEREFERENCE(b);
58717ede90eSSatish Balay   *ierr = MatZeroRowsColumns(*mat,*numRows,rows,*diag,*x,*b);
58817ede90eSSatish Balay }
58917ede90eSSatish Balay 
5908cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matzerorowscolumnsis_(Mat *mat,IS *is,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr)
59117ede90eSSatish Balay {
59217ede90eSSatish Balay   CHKFORTRANNULLOBJECTDEREFERENCE(x);
59317ede90eSSatish Balay   CHKFORTRANNULLOBJECTDEREFERENCE(b);
59417ede90eSSatish Balay   *ierr = MatZeroRowsColumnsIS(*mat,*is,*diag,*x,*b);
59517ede90eSSatish Balay }
59617ede90eSSatish Balay 
5978cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matzerorowsstencil_(Mat *mat,PetscInt *numRows,MatStencil *rows,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr)
59817ede90eSSatish Balay {
59917ede90eSSatish Balay   CHKFORTRANNULLOBJECTDEREFERENCE(x);
60017ede90eSSatish Balay   CHKFORTRANNULLOBJECTDEREFERENCE(b);
60117ede90eSSatish Balay   *ierr = MatZeroRowsStencil(*mat,*numRows,rows,*diag,*x,*b);
60217ede90eSSatish Balay }
60317ede90eSSatish Balay 
6048cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matzerorowscolumnsstencil_(Mat *mat,PetscInt *numRows,MatStencil *rows,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr)
605d25a37e1SJed Brown {
606d25a37e1SJed Brown   CHKFORTRANNULLOBJECTDEREFERENCE(x);
607d25a37e1SJed Brown   CHKFORTRANNULLOBJECTDEREFERENCE(b);
608d25a37e1SJed Brown   *ierr = MatZeroRowsColumnsStencil(*mat,*numRows,rows,*diag,*x,*b);
609d25a37e1SJed Brown }
610d25a37e1SJed Brown 
6118cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matzerorows_(Mat *mat,PetscInt *numRows,PetscInt *rows,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr)
612f4e70085SSatish Balay {
6132b40b63fSBarry Smith   CHKFORTRANNULLOBJECTDEREFERENCE(x);
6142b40b63fSBarry Smith   CHKFORTRANNULLOBJECTDEREFERENCE(b);
6152b40b63fSBarry Smith   *ierr = MatZeroRows(*mat,*numRows,rows,*diag,*x,*b);
616f4e70085SSatish Balay }
617f4e70085SSatish Balay 
6188cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matzerorowsis_(Mat *mat,IS *is,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr)
619f4e70085SSatish Balay {
6202b40b63fSBarry Smith   CHKFORTRANNULLOBJECTDEREFERENCE(x);
6212b40b63fSBarry Smith   CHKFORTRANNULLOBJECTDEREFERENCE(b);
6222b40b63fSBarry Smith   *ierr = MatZeroRowsIS(*mat,*is,*diag,*x,*b);
623f4e70085SSatish Balay }
624f4e70085SSatish Balay 
6258cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matzerorowslocal_(Mat *mat,PetscInt *numRows,PetscInt *rows,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr)
626f4e70085SSatish Balay {
6272b40b63fSBarry Smith   CHKFORTRANNULLOBJECTDEREFERENCE(x);
6282b40b63fSBarry Smith   CHKFORTRANNULLOBJECTDEREFERENCE(b);
6292b40b63fSBarry Smith   *ierr = MatZeroRowsLocal(*mat,*numRows,rows,*diag,*x,*b);
630f4e70085SSatish Balay }
631f4e70085SSatish Balay 
6328cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matzerorowslocalis_(Mat *mat,IS *is,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr)
633f4e70085SSatish Balay {
6342b40b63fSBarry Smith   CHKFORTRANNULLOBJECTDEREFERENCE(x);
6352b40b63fSBarry Smith   CHKFORTRANNULLOBJECTDEREFERENCE(b);
6362b40b63fSBarry Smith   *ierr = MatZeroRowsLocalIS(*mat,*is,*diag,*x,*b);
637f4e70085SSatish Balay }
638f4e70085SSatish Balay 
6398cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matzerorowscolumnslocal_(Mat *mat,PetscInt *numRows,PetscInt *rows,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr)
64017ede90eSSatish Balay {
64117ede90eSSatish Balay   CHKFORTRANNULLOBJECTDEREFERENCE(x);
64217ede90eSSatish Balay   CHKFORTRANNULLOBJECTDEREFERENCE(b);
64317ede90eSSatish Balay   *ierr = MatZeroRowsColumnsLocal(*mat,*numRows,rows,*diag,*x,*b);
64417ede90eSSatish Balay }
64517ede90eSSatish Balay 
6468cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matzerorowscolumnslocalis_(Mat *mat,IS *is,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr)
64717ede90eSSatish Balay {
64817ede90eSSatish Balay   CHKFORTRANNULLOBJECTDEREFERENCE(x);
64917ede90eSSatish Balay   CHKFORTRANNULLOBJECTDEREFERENCE(b);
65017ede90eSSatish Balay   *ierr = MatZeroRowsColumnsLocalIS(*mat,*is,*diag,*x,*b);
65117ede90eSSatish Balay }
6521eea217eSSatish Balay 
653390e1bf2SBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetoptionsprefix_(Mat *mat,char* prefix PETSC_MIXED_LEN(len),PetscErrorCode *ierr PETSC_END_LEN(len))
6541eea217eSSatish Balay {
6551eea217eSSatish Balay   char *t;
6561eea217eSSatish Balay 
6571eea217eSSatish Balay   FIXCHAR(prefix,len,t);
6581eea217eSSatish Balay   *ierr = MatSetOptionsPrefix(*mat,t);
6591eea217eSSatish Balay   FREECHAR(prefix,t);
6601eea217eSSatish Balay }
6611eea217eSSatish Balay 
662d0195637SJed Brown PETSC_EXTERN void PETSC_STDCALL matnullspaceremove_(MatNullSpace *sp,Vec *vec,PetscErrorCode *ierr)
663812c3f48SMatthew Knepley {
664d0195637SJed Brown   *ierr = MatNullSpaceRemove(*sp,*vec);
665812c3f48SMatthew Knepley }
6661eea217eSSatish Balay 
6674d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetinfo_(Mat *mat,MatInfoType *flag,MatInfo *info, int *ierr)
6685ba43861SSatish Balay {
6694d03fd2bSBarry Smith   *ierr = MatGetInfo(*mat,*flag,info);
6705ba43861SSatish Balay }
6715ba43861SSatish Balay 
6724d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matlufactor_(Mat *mat,IS *row,IS *col,const MatFactorInfo *info, int *ierr)
67322688b47SSatish Balay {
6744d03fd2bSBarry Smith   *ierr = MatLUFactor(*mat,*row,*col,info);
67522688b47SSatish Balay }
67622688b47SSatish Balay 
6774d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matilufactor_(Mat *mat,IS *row,IS *col,const MatFactorInfo *info, int *ierr)
67822688b47SSatish Balay {
6794d03fd2bSBarry Smith   *ierr = MatILUFactor(*mat,*row,*col,info);
68022688b47SSatish Balay }
68122688b47SSatish Balay 
6824d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matlufactorsymbolic_(Mat *fact,Mat *mat,IS *row,IS *col,const MatFactorInfo *info, int *ierr)
68322688b47SSatish Balay {
6844d03fd2bSBarry Smith   *ierr = MatLUFactorSymbolic(*fact,*mat,*row,*col,info);
68522688b47SSatish Balay }
68622688b47SSatish Balay 
6874d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matlufactornumeric_(Mat *fact,Mat *mat,const MatFactorInfo *info, int *ierr)
68822688b47SSatish Balay {
6894d03fd2bSBarry Smith   *ierr = MatLUFactorNumeric(*fact,*mat,info);
69022688b47SSatish Balay }
69122688b47SSatish Balay 
6924d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matcholeskyfactor_(Mat *mat,IS *perm,const MatFactorInfo *info, int *ierr)
69322688b47SSatish Balay {
6944d03fd2bSBarry Smith   *ierr = MatCholeskyFactor(*mat,*perm,info);
69522688b47SSatish Balay }
69622688b47SSatish Balay 
6974d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matcholeskyfactorsymbolic_(Mat *fact,Mat *mat,IS *perm,const MatFactorInfo *info, int *ierr)
69822688b47SSatish Balay {
6994d03fd2bSBarry Smith   *ierr = MatCholeskyFactorSymbolic(*fact,*mat,*perm,info);
70022688b47SSatish Balay }
70122688b47SSatish Balay 
7024d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matcholeskyfactornumeric_(Mat *fact,Mat *mat,const MatFactorInfo *info, int *ierr)
70322688b47SSatish Balay {
7044d03fd2bSBarry Smith   *ierr = MatCholeskyFactorNumeric(*fact,*mat,info);
70522688b47SSatish Balay }
70622688b47SSatish Balay 
7074d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matilufactorsymbolic_(Mat *fact,Mat *mat,IS *row,IS *col,const MatFactorInfo *info, int *ierr)
70822688b47SSatish Balay {
7094d03fd2bSBarry Smith   *ierr = MatILUFactorSymbolic(*fact,*mat,*row,*col,info);
71022688b47SSatish Balay }
71122688b47SSatish Balay 
7124d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL maticcfactorsymbolic_(Mat *fact,Mat *mat,IS *perm,const MatFactorInfo *info, int *ierr)
71322688b47SSatish Balay {
7144d03fd2bSBarry Smith   *ierr = MatICCFactorSymbolic(*fact,*mat,*perm,info);
71522688b47SSatish Balay }
71622688b47SSatish Balay 
7174d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL maticcfactor_(Mat *mat,IS *row,const MatFactorInfo *info, int *ierr)
71822688b47SSatish Balay {
7194d03fd2bSBarry Smith   *ierr = MatICCFactor(*mat,*row,info);
72022688b47SSatish Balay }
72122688b47SSatish Balay 
7224d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matfactorinfoinitialize_(MatFactorInfo *info, int *ierr)
72322688b47SSatish Balay {
7244d03fd2bSBarry Smith   *ierr = MatFactorInfoInitialize(info);
72522688b47SSatish Balay }
726