xref: /petsc/src/mat/interface/ftn-custom/zmatrixf.c (revision 0aee3464cb058d17b57ca7d7617657179dccd244)
1af0996ceSBarry Smith #include <petsc/private/fortranimpl.h>
2cee688dbSBarry Smith #include <petsc/private/f90impl.h>
3c6db04a5SJed Brown #include <petscmat.h>
4665c2dedSJed Brown #include <petscviewer.h>
5f4e70085SSatish Balay 
6f4e70085SSatish Balay #if defined(PETSC_HAVE_FORTRAN_CAPS)
74d03fd2bSBarry Smith #define matsetvalues_                    MATSETVALUES
81006886cSSatish Balay #define matsetvaluesnnnn_                MATSETVALUESNNNN
93b494cfeSSatish Balay #define matsetvalues0_                   MATSETVALUES0
101b266c99SBarry Smith #define matsetvaluesnn1_                 MATSETVALUESNN1
114d03fd2bSBarry Smith #define matsetvalues11_                  MATSETVALUES11
124d03fd2bSBarry Smith #define matsetvalues1n_                  MATSETVALUES1N
134d03fd2bSBarry Smith #define matsetvaluesn1_                  MATSETVALUESN1
143b494cfeSSatish Balay #define matsetvaluesblocked0_            MATSETVALUESBLOCKED0
15*0aee3464SBarry Smith #define matsetvaluesblocked2_            MATSETVALUESBLOCKED2
164d03fd2bSBarry Smith #define matsetvaluesblocked11_           MATSETVALUESBLOCKED11
174d03fd2bSBarry Smith #define matsetvaluesblocked111_          MATSETVALUESBLOCKED111
184d03fd2bSBarry Smith #define matsetvaluesblocked1n_           MATSETVALUESBLOCKED1N
194d03fd2bSBarry Smith #define matsetvaluesblockedn1_           MATSETVALUESBLOCKEDN1
204d03fd2bSBarry Smith #define matsetvaluesblockedlocal_        MATSETVALUESBLOCKEDLOCAL
213b494cfeSSatish Balay #define matsetvaluesblockedlocal0_       MATSETVALUESBLOCKEDLOCAL0
224d03fd2bSBarry Smith #define matsetvaluesblockedlocal11_      MATSETVALUESBLOCKEDLOCAL11
234d03fd2bSBarry Smith #define matsetvaluesblockedlocal111_     MATSETVALUESBLOCKEDLOCAL111
244d03fd2bSBarry Smith #define matsetvaluesblockedlocal1n_      MATSETVALUESBLOCKEDLOCAL1N
254d03fd2bSBarry Smith #define matsetvaluesblockedlocaln1_      MATSETVALUESBLOCKEDLOCALN1
264d03fd2bSBarry Smith #define matsetvalueslocal_               MATSETVALUESLOCAL
273b494cfeSSatish Balay #define matsetvalueslocal0_              MATSETVALUESLOCAL0
284d03fd2bSBarry Smith #define matsetvalueslocal11_             MATSETVALUESLOCAL11
294d03fd2bSBarry Smith #define matsetvalueslocal11nn_           MATSETVALUESLOCAL11NN
304d03fd2bSBarry Smith #define matsetvalueslocal111_            MATSETVALUESLOCAL111
314d03fd2bSBarry Smith #define matsetvalueslocal1n_             MATSETVALUESLOCAL1N
324d03fd2bSBarry Smith #define matsetvalueslocaln1_             MATSETVALUESLOCALN1
3387bcf4e0SBarry Smith #define matgetrowmin_                    MATGETROWMIN
3487bcf4e0SBarry Smith #define matgetrowminabs_                 MATGETROWMINABS
355928be6bSBarry Smith #define matgetrowmax_                    MATGETROWMAX
365928be6bSBarry Smith #define matgetrowmaxabs_                 MATGETROWMAXABS
377d6bfa3bSBarry Smith #define matdestroymatrices_              MATDESTROYMATRICES
38df750dc8SHong Zhang #define matdestroysubmatrices_           MATDESTROYSUBMATRICES
395dffd610SBarry Smith #define matgetfactor_                    MATGETFACTOR
4035bd34faSBarry Smith #define matfactorgetsolverpackage_       MATFACTORGETSOLVERPACKAGE
41f4e70085SSatish Balay #define matgetrowij_                     MATGETROWIJ
42f4e70085SSatish Balay #define matrestorerowij_                 MATRESTOREROWIJ
43f4e70085SSatish Balay #define matgetrow_                       MATGETROW
44f4e70085SSatish Balay #define matrestorerow_                   MATRESTOREROW
45f7e310deSShri Abhyankar #define matload_                         MATLOAD
46f4e70085SSatish Balay #define matview_                         MATVIEW
478c778c55SBarry Smith #define matseqaijgetarray_               MATSEQAIJGETARRAY
486778691eSSatish Balay #define matseqaijrestorearray_           MATSEQAIJRESTOREARRAY
498c778c55SBarry Smith #define matdensegetarray_                MATDENSEGETARRAY
508c778c55SBarry Smith #define matdenserestorearray_            MATDENSERESTOREARRAY
51f4e70085SSatish Balay #define matconvert_                      MATCONVERT
527dae84e0SHong Zhang #define matcreatesubmatrices_            MATCREATESUBMATRICES
5317ede90eSSatish Balay #define matzerorowscolumns_              MATZEROROWSCOLUMNS
5417ede90eSSatish Balay #define matzerorowscolumnsis_            MATZEROROWSCOLUMNSIS
5517ede90eSSatish Balay #define matzerorowsstencil_              MATZEROROWSSTENCIL
56d25a37e1SJed Brown #define matzerorowscolumnsstencil_       MATZEROROWSCOLUMNSSTENCIL
57f4e70085SSatish Balay #define matzerorows_                     MATZEROROWS
58f4e70085SSatish Balay #define matzerorowsis_                   MATZEROROWSIS
59f4e70085SSatish Balay #define matzerorowslocal_                MATZEROROWSLOCAL
60f4e70085SSatish Balay #define matzerorowslocalis_              MATZEROROWSLOCALIS
6117ede90eSSatish Balay #define matzerorowscolumnslocal_         MATZEROROWSCOLUMNSLOCAL
6217ede90eSSatish Balay #define matzerorowscolumnslocalis_       MATZEROROWSCOLUMNSLOCALIS
631eea217eSSatish Balay #define matsetoptionsprefix_             MATSETOPTIONSPREFIX
64fcc9d04bSBarry Smith #define matcreatevecs_                   MATCREATEVECS
65c9d5ca86SBarry Smith #define matnullspaceremove_              MATNULLSPACEREMOVE
665ba43861SSatish Balay #define matgetinfo_                      MATGETINFO
6722688b47SSatish Balay #define matlufactor_                     MATLUFACTOR
6822688b47SSatish Balay #define matilufactor_                    MATILUFACTOR
6922688b47SSatish Balay #define matlufactorsymbolic_             MATLUFACTORSYMBOLIC
7022688b47SSatish Balay #define matlufactornumeric_              MATLUFACTORNUMERIC
7122688b47SSatish Balay #define matcholeskyfactor_               MATCHOLESKYFACTOR
7222688b47SSatish Balay #define matcholeskyfactorsymbolic_       MATCHOLESKYFACTORSYMBOLIC
7322688b47SSatish Balay #define matcholeskyfactornumeric_        MATCHOLESKYFACTORNUMERIC
7422688b47SSatish Balay #define matilufactorsymbolic_            MATILUFACTORSYMBOLIC
7522688b47SSatish Balay #define maticcfactorsymbolic_            MATICCFACTORSYMBOLIC
7622688b47SSatish Balay #define maticcfactor_                    MATICCFACTOR
7722688b47SSatish Balay #define matfactorinfoinitialize_         MATFACTORINFOINITIALIZE
78b22b330cSBarry Smith #define matnullspacesetfunction_         MATNULLSPACESETFUNCTION
790905d9aaSJed Brown #define matfindnonzerorows_              MATFINDNONZEROROWS
803be0408cSBarry Smith #define matgetsize00_                    MATGETSIZE00
813be0408cSBarry Smith #define matgetsize10_                    MATGETSIZE10
823be0408cSBarry Smith #define matgetsize01_                    MATGETSIZE01
833be0408cSBarry Smith #define matgetlocalsize00_               MATGETLOCALSIZE00
843be0408cSBarry Smith #define matgetlocalsize10_               MATGETLOCALSIZE10
853be0408cSBarry Smith #define matgetlocalsize01_               MATGETLOCALSIZE01
86f4e70085SSatish Balay #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE)
874d03fd2bSBarry Smith #define matsetvalues_                    matsetvalues
881006886cSSatish Balay #define matsetvaluesnnnn_                matsetvaluesnnnn
893b494cfeSSatish Balay #define matsetvalues0_                   matsetvalues0
901b266c99SBarry Smith #define matsetvaluesnn1_                 matsetvaluesnn1
914d03fd2bSBarry Smith #define matsetvalues11_                  matsetvalues11
924d03fd2bSBarry Smith #define matsetvaluesn1_                  matsetvaluesn1
934d03fd2bSBarry Smith #define matsetvalues1n_                  matsetvalues1n
944d03fd2bSBarry Smith #define matsetvalueslocal_               matsetvalueslocal
953b494cfeSSatish Balay #define matsetvalueslocal0_              matsetvalueslocal0
964d03fd2bSBarry Smith #define matsetvalueslocal11_             matsetvalueslocal11
974d03fd2bSBarry Smith #define matsetvalueslocal11nn_           matsetvalueslocal11nn
984d03fd2bSBarry Smith #define matsetvalueslocal111_            matsetvalueslocal111
994d03fd2bSBarry Smith #define matsetvalueslocal1n_             matsetvalueslocal1n
1004d03fd2bSBarry Smith #define matsetvalueslocaln1_             matsetvalueslocaln1
1014d03fd2bSBarry Smith #define matsetvaluesblocked_             matsetvaluesblocked
1023b494cfeSSatish Balay #define matsetvaluesblocked0_            matsetvaluesblocked0
103*0aee3464SBarry Smith #define matsetvaluesblocked2_            matsetvaluesblocked2
1044d03fd2bSBarry Smith #define matsetvaluesblocked11_           matsetvaluesblocked11
1054d03fd2bSBarry Smith #define matsetvaluesblocked111_          matsetvaluesblocked111
1064d03fd2bSBarry Smith #define matsetvaluesblocked1n_           matsetvaluesblocked1n
10724aa916eSSatish Balay #define matsetvaluesblockedn1_           matsetvaluesblockedn1
1084d03fd2bSBarry Smith #define matsetvaluesblockedlocal_        matsetvaluesblockedlocal
1093b494cfeSSatish Balay #define matsetvaluesblockedlocal0_       matsetvaluesblockedlocal0
1104d03fd2bSBarry Smith #define matsetvaluesblockedlocal11_      matsetvaluesblockedlocal11
1114d03fd2bSBarry Smith #define matsetvaluesblockedlocal111_     matsetvaluesblockedlocal111
1124d03fd2bSBarry Smith #define matsetvaluesblockedlocal1n_      matsetvaluesblockedlocal1n
11324aa916eSSatish Balay #define matsetvaluesblockedlocaln1_      matsetvaluesblockedlocaln1
11487bcf4e0SBarry Smith #define matgetrowmin_                    matgetrowmin
11587bcf4e0SBarry Smith #define matgetrowminabs_                 matgetrowminabs
1165928be6bSBarry Smith #define matgetrowmax_                    matgetrowmax
1175928be6bSBarry Smith #define matgetrowmaxabs_                 matgetrowmaxabs
1185928be6bSBarry Smith #define matdestroymatrices_              matdestroymatrices
119df750dc8SHong Zhang #define matdestroysubmatrices_           matdestroysubmatrices
1205dffd610SBarry Smith #define matgetfactor_                    matgetfactor
12135bd34faSBarry Smith #define matfactorgetsolverpackage_       matfactorgetsolverpackage
122fcc9d04bSBarry Smith #define matcreatevecs_                   matcreatevecs
123f4e70085SSatish Balay #define matgetrowij_                     matgetrowij
124f4e70085SSatish Balay #define matrestorerowij_                 matrestorerowij
125f4e70085SSatish Balay #define matgetrow_                       matgetrow
126f4e70085SSatish Balay #define matrestorerow_                   matrestorerow
127f4e70085SSatish Balay #define matview_                         matview
128f7e310deSShri Abhyankar #define matload_                         matload
1298c778c55SBarry Smith #define matseqaijgetarray_               matseqaijgetarray
1308c778c55SBarry Smith #define matseqaijrestorearray_           matseqaijrestorearray
1318c778c55SBarry Smith #define matdensegetarray_                matdensegetarray
1328c778c55SBarry Smith #define matdenserestorearray_            matdenserestorearray
133f4e70085SSatish Balay #define matconvert_                      matconvert
1347dae84e0SHong Zhang #define matcreatesubmatrices_            matcreatesubmatrices
13517ede90eSSatish Balay #define matzerorowscolumns_              matzerorowscolumns
13617ede90eSSatish Balay #define matzerorowscolumnsis_            matzerorowscolumnsis
13717ede90eSSatish Balay #define matzerorowsstencil_              matzerorowsstencil
138d25a37e1SJed Brown #define matzerorowscolumnsstencil_       matzerorowscolumnsstencil
139f4e70085SSatish Balay #define matzerorows_                     matzerorows
140f4e70085SSatish Balay #define matzerorowsis_                   matzerorowsis
141f4e70085SSatish Balay #define matzerorowslocal_                matzerorowslocal
142f4e70085SSatish Balay #define matzerorowslocalis_              matzerorowslocalis
14317ede90eSSatish Balay #define matzerorowscolumnslocal_         matzerorowscolumnslocal
14417ede90eSSatish Balay #define matzerorowscolumnslocalis_       matzerorowscolumnslocalis
1451eea217eSSatish Balay #define matsetoptionsprefix_             matsetoptionsprefix
146812c3f48SMatthew Knepley #define matnullspaceremove_              matnullspaceremove
1475ba43861SSatish Balay #define matgetinfo_                      matgetinfo
14822688b47SSatish Balay #define matlufactor_                     matlufactor
14922688b47SSatish Balay #define matilufactor_                    matilufactor
15022688b47SSatish Balay #define matlufactorsymbolic_             matlufactorsymbolic
15122688b47SSatish Balay #define matlufactornumeric_              matlufactornumeric
15222688b47SSatish Balay #define matcholeskyfactor_               matcholeskyfactor
15322688b47SSatish Balay #define matcholeskyfactorsymbolic_       matcholeskyfactorsymbolic
15422688b47SSatish Balay #define matcholeskyfactornumeric_        matcholeskyfactornumeric
15522688b47SSatish Balay #define matilufactorsymbolic_            matilufactorsymbolic
15622688b47SSatish Balay #define maticcfactorsymbolic_            maticcfactorsymbolic
15722688b47SSatish Balay #define maticcfactor_                    maticcfactor
15822688b47SSatish Balay #define matfactorinfoinitialize_         matfactorinfoinitialize
159b22b330cSBarry Smith #define matnullspacesetfunction_         matnullspacesetfunction
1600905d9aaSJed Brown #define matfindnonzerorows_              matfindnonzerorows
1613be0408cSBarry Smith #define matgetsize00_                    matgetsize00
1623be0408cSBarry Smith #define matgetsize10_                    matgetsize10
1633be0408cSBarry Smith #define matgetsize01_                    matgetsize01
1643be0408cSBarry Smith #define matgetlocalsize00_               matgetlocalsize00
1653be0408cSBarry Smith #define matgetlocalsize10_               matgetlocalsize10
1663be0408cSBarry Smith #define matgetlocalsize01_               matgetlocalsize01
167f4e70085SSatish Balay #endif
168f4e70085SSatish Balay 
1693be0408cSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matgetsize_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr )
1703be0408cSBarry Smith {
1713be0408cSBarry Smith   CHKFORTRANNULLINTEGER(m);
1723be0408cSBarry Smith   CHKFORTRANNULLINTEGER(n);
1733be0408cSBarry Smith   *ierr = MatGetSize(*mat,m,n);
1743be0408cSBarry Smith }
1753be0408cSBarry Smith 
1763be0408cSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matgetsize00_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr )
1773be0408cSBarry Smith {
1783be0408cSBarry Smith   matgetsize_(mat,m,n,ierr);
1793be0408cSBarry Smith }
1803be0408cSBarry Smith 
1813be0408cSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matgetsize10_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr )
1823be0408cSBarry Smith {
1833be0408cSBarry Smith   matgetsize_(mat,m,n,ierr);
1843be0408cSBarry Smith }
1853be0408cSBarry Smith 
1863be0408cSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matgetsize01_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr )
1873be0408cSBarry Smith {
1883be0408cSBarry Smith   matgetsize_(mat,m,n,ierr);
1893be0408cSBarry Smith }
1903be0408cSBarry Smith 
1913be0408cSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matgetlocalsize_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr )
1923be0408cSBarry Smith {
1933be0408cSBarry Smith   CHKFORTRANNULLINTEGER(m);
1943be0408cSBarry Smith   CHKFORTRANNULLINTEGER(n);
1953be0408cSBarry Smith   *ierr = MatGetLocalSize(*mat,m,n);
1963be0408cSBarry Smith }
1973be0408cSBarry Smith 
1983be0408cSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matgetlocalsize00_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr )
1993be0408cSBarry Smith {
2003be0408cSBarry Smith   matgetlocalsize_(mat,m,n,ierr);
2013be0408cSBarry Smith }
2023be0408cSBarry Smith 
2033be0408cSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matgetlocalsize10_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr )
2043be0408cSBarry Smith {
2053be0408cSBarry Smith   matgetlocalsize_(mat,m,n,ierr);
2063be0408cSBarry Smith }
2073be0408cSBarry Smith 
2083be0408cSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matgetlocalsize01_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr )
2093be0408cSBarry Smith {
2103be0408cSBarry Smith   matgetlocalsize_(mat,m,n,ierr);
2113be0408cSBarry Smith }
2123be0408cSBarry Smith 
2134d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvaluesblocked_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){
2144d03fd2bSBarry Smith   *ierr = MatSetValuesBlocked(*mat,*m,idxm,*n,idxn,v,*addv);
2154d03fd2bSBarry Smith }
2164d03fd2bSBarry Smith 
217cee688dbSBarry 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)){
218cee688dbSBarry Smith   PetscScalar *fa;
219*0aee3464SBarry Smith   *ierr = F90Array2dAccess(y,MPIU_SCALAR,(void**)&fa PETSC_F90_2PTR_PARAM(ptrd));if (*ierr) return;
220cee688dbSBarry Smith   matsetvaluesblocked_(mat,m,idxm,n,idxn,fa,addv,ierr);
221cee688dbSBarry Smith }
222cee688dbSBarry Smith 
2233b494cfeSSatish Balay PETSC_EXTERN void PETSC_STDCALL  matsetvaluesblocked0_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){
2243b494cfeSSatish Balay   matsetvaluesblocked_(mat,m,idxm,n,idxn,v,addv,ierr);
2253b494cfeSSatish Balay }
2263b494cfeSSatish Balay 
2274d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvaluesblocked11_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){
2284d03fd2bSBarry Smith   matsetvaluesblocked_(mat,m,idxm,n,idxn,v,addv,ierr);
2294d03fd2bSBarry Smith }
2304d03fd2bSBarry Smith 
2314d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvaluesblocked111_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){
2324d03fd2bSBarry Smith   matsetvaluesblocked_(mat,m,idxm,n,idxn,v,addv,ierr);
2334d03fd2bSBarry Smith }
2344d03fd2bSBarry Smith 
2354d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvaluesblocked1n_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){
2364d03fd2bSBarry Smith   matsetvaluesblocked_(mat,m,idxm,n,idxn,v,addv,ierr);
2374d03fd2bSBarry Smith }
2384d03fd2bSBarry Smith 
2394d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvaluesblockedn1_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){
2404d03fd2bSBarry Smith   matsetvaluesblocked_(mat,m,idxm,n,idxn,v,addv,ierr);
2414d03fd2bSBarry Smith }
2424d03fd2bSBarry Smith 
2434d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvaluesblockedlocal_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr )
2444d03fd2bSBarry Smith {
2454d03fd2bSBarry Smith   *ierr = MatSetValuesBlockedLocal(*mat,*nrow,irow,*ncol,icol,y,*addv);
2464d03fd2bSBarry Smith }
2474d03fd2bSBarry Smith 
2483b494cfeSSatish Balay PETSC_EXTERN void PETSC_STDCALL  matsetvaluesblockedlocal0_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){
2493b494cfeSSatish Balay   matsetvaluesblockedlocal_(mat,m,idxm,n,idxn,v,addv,ierr);
2503b494cfeSSatish Balay }
2513b494cfeSSatish Balay 
2524d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvaluesblockedlocal11_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){
2534d03fd2bSBarry Smith   matsetvaluesblockedlocal_(mat,m,idxm,n,idxn,v,addv,ierr);
2544d03fd2bSBarry Smith }
2554d03fd2bSBarry Smith 
2564d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvaluesblockedlocal111_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){
2574d03fd2bSBarry Smith   matsetvaluesblockedlocal_(mat,m,idxm,n,idxn,v,addv,ierr);
2584d03fd2bSBarry Smith }
2594d03fd2bSBarry Smith 
2604d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvaluesblockedlocal1n_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){
2614d03fd2bSBarry Smith   matsetvaluesblockedlocal_(mat,m,idxm,n,idxn,v,addv,ierr);
2624d03fd2bSBarry Smith }
2634d03fd2bSBarry Smith 
2644d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvaluesblockedlocaln1_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){
2654d03fd2bSBarry Smith   matsetvaluesblockedlocal_(mat,m,idxm,n,idxn,v,addv,ierr);
2664d03fd2bSBarry Smith }
2674d03fd2bSBarry Smith 
2684d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvalues_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr )
2694d03fd2bSBarry Smith {
2704d03fd2bSBarry Smith   *ierr = MatSetValues(*mat,*m,idxm,*n,idxn,v,*addv);
2714d03fd2bSBarry Smith }
2724d03fd2bSBarry Smith 
2731b266c99SBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvaluesnnnn_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr )
2741b266c99SBarry Smith {
2751b266c99SBarry Smith   matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr);
2761b266c99SBarry Smith }
2771b266c99SBarry Smith 
2783b494cfeSSatish Balay PETSC_EXTERN void PETSC_STDCALL  matsetvalues0_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr )
2793b494cfeSSatish Balay {
2803b494cfeSSatish Balay   matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr);
2813b494cfeSSatish Balay }
2823b494cfeSSatish Balay 
2831b266c99SBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvaluesnn1_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr )
2841b266c99SBarry Smith {
2851b266c99SBarry Smith   matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr);
2861b266c99SBarry Smith }
2871b266c99SBarry Smith 
2884d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvalues11_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr )
2894d03fd2bSBarry Smith {
2904d03fd2bSBarry Smith   matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr);
2914d03fd2bSBarry Smith }
2924d03fd2bSBarry Smith 
2934d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvaluesn1_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr )
2944d03fd2bSBarry Smith {
2954d03fd2bSBarry Smith   matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr);
2964d03fd2bSBarry Smith }
2974d03fd2bSBarry Smith 
2984d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvalues1n_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr )
2994d03fd2bSBarry Smith {
3004d03fd2bSBarry Smith   matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr);
3014d03fd2bSBarry Smith }
3024d03fd2bSBarry Smith 
3034d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvalueslocal_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr )
3044d03fd2bSBarry Smith {
3054d03fd2bSBarry Smith   *ierr = MatSetValuesLocal(*mat,*nrow,irow,*ncol,icol,y,*addv);
3064d03fd2bSBarry Smith }
3074d03fd2bSBarry Smith 
3083b494cfeSSatish Balay PETSC_EXTERN void PETSC_STDCALL  matsetvalueslocal0_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr )
3093b494cfeSSatish Balay {
3103b494cfeSSatish Balay   matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr);
3113b494cfeSSatish Balay }
3123b494cfeSSatish Balay 
3134d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvalueslocal11_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr )
3144d03fd2bSBarry Smith {
3154d03fd2bSBarry Smith   matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr);
3164d03fd2bSBarry Smith }
3174d03fd2bSBarry Smith 
3184d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvalueslocal11nn_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr )
3194d03fd2bSBarry Smith {
3204d03fd2bSBarry Smith   matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr);
3214d03fd2bSBarry Smith }
3224d03fd2bSBarry Smith 
3234d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvalueslocal111_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr )
3244d03fd2bSBarry Smith {
3254d03fd2bSBarry Smith   matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr);
3264d03fd2bSBarry Smith }
3274d03fd2bSBarry Smith 
3284d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvalueslocal1n_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr )
3294d03fd2bSBarry Smith {
3304d03fd2bSBarry Smith   matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr);
3314d03fd2bSBarry Smith }
3324d03fd2bSBarry Smith 
3334d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvalueslocaln1_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr )
3344d03fd2bSBarry Smith {
3354d03fd2bSBarry Smith   matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr);
3364d03fd2bSBarry Smith }
3374d03fd2bSBarry Smith 
33887bcf4e0SBarry Smith PETSC_EXTERN void PETSC_STDCALL  matgetrowmin_(Mat *mat,Vec *v,PetscInt idx[], int *ierr )
33987bcf4e0SBarry Smith {
34087bcf4e0SBarry Smith   CHKFORTRANNULLINTEGER(idx);
34187bcf4e0SBarry Smith   *ierr = MatGetRowMin(*mat,*v,idx);
34287bcf4e0SBarry Smith }
3434d03fd2bSBarry Smith 
34487bcf4e0SBarry Smith PETSC_EXTERN void PETSC_STDCALL  matgetrowminabs_(Mat *mat,Vec *v,PetscInt idx[], int *ierr )
34587bcf4e0SBarry Smith {
34687bcf4e0SBarry Smith   CHKFORTRANNULLINTEGER(idx);
34787bcf4e0SBarry Smith   *ierr = MatGetRowMinAbs(*mat,*v,idx);
34887bcf4e0SBarry Smith }
34987bcf4e0SBarry Smith 
3505928be6bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matgetrowmax_(Mat *mat,Vec *v,PetscInt idx[], int *ierr )
3515928be6bSBarry Smith {
3525928be6bSBarry Smith   CHKFORTRANNULLINTEGER(idx);
3535928be6bSBarry Smith   *ierr = MatGetRowMax(*mat,*v,idx);
3545928be6bSBarry Smith }
3555928be6bSBarry Smith 
3565928be6bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matgetrowmaxabs_(Mat *mat,Vec *v,PetscInt idx[], int *ierr )
3575928be6bSBarry Smith {
3585928be6bSBarry Smith   CHKFORTRANNULLINTEGER(idx);
3595928be6bSBarry Smith   *ierr = MatGetRowMaxAbs(*mat,*v,idx);
3605928be6bSBarry Smith }
3615928be6bSBarry Smith 
362b22b330cSBarry Smith static PetscErrorCode ournullfunction(MatNullSpace sp,Vec x,void *ctx)
363b22b330cSBarry Smith {
364b22b330cSBarry Smith   PetscErrorCode ierr = 0;
365b22b330cSBarry Smith   (*(void (PETSC_STDCALL *)(MatNullSpace*,Vec*,void*,PetscErrorCode*))(((PetscObject)sp)->fortran_func_pointers[0]))(&sp,&x,ctx,&ierr);CHKERRQ(ierr);
366b22b330cSBarry Smith   return 0;
367b22b330cSBarry Smith }
368b22b330cSBarry Smith 
3698cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matnullspacesetfunction_(MatNullSpace *sp, PetscErrorCode (*rem)(MatNullSpace,Vec,void*),void *ctx,PetscErrorCode *ierr)
370b22b330cSBarry Smith {
371b22b330cSBarry Smith   PetscObjectAllocateFortranPointers(*sp,1);
372b22b330cSBarry Smith   ((PetscObject)*sp)->fortran_func_pointers[0] = (PetscVoidFunction)rem;
37326fbe8dcSKarl Rupp 
374b22b330cSBarry Smith   *ierr = MatNullSpaceSetFunction(*sp,ournullfunction,ctx);
375b22b330cSBarry Smith }
376b22b330cSBarry Smith 
377d2da0f5dSBarry Smith PETSC_EXTERN void PETSC_STDCALL matcreatevecs_(Mat *mat,Vec *right,Vec *left, int *ierr)
3787c54600cSBarry Smith {
3797c54600cSBarry Smith   CHKFORTRANNULLOBJECT(right);
3807c54600cSBarry Smith   CHKFORTRANNULLOBJECT(left);
3812a7a6963SBarry Smith   *ierr = MatCreateVecs(*mat,right,left);
3827c54600cSBarry Smith }
3837c54600cSBarry Smith 
3848cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matgetrowij_(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,*JA;
3888f7157efSSatish Balay   *ierr = MatGetRowIJ(*B,*shift,*sym,*blockcompressed,n,&IA,&JA,done);if (*ierr) return;
3891a83f524SJed Brown   *iia  = PetscIntAddressToFortran(ia,(PetscInt*)IA);
3901a83f524SJed Brown   *jja  = PetscIntAddressToFortran(ja,(PetscInt*)JA);
391f4e70085SSatish Balay }
392f4e70085SSatish Balay 
3938cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matrestorerowij_(Mat *B,PetscInt *shift,PetscBool *sym,PetscBool *blockcompressed, PetscInt *n,PetscInt *ia,size_t *iia,
394ace3abfcSBarry Smith                                     PetscInt *ja,size_t *jja,PetscBool  *done,PetscErrorCode *ierr)
395f4e70085SSatish Balay {
3961a83f524SJed Brown   const PetscInt *IA = PetscIntAddressFromFortran(ia,*iia),*JA = PetscIntAddressFromFortran(ja,*jja);
3978f7157efSSatish Balay   *ierr = MatRestoreRowIJ(*B,*shift,*sym,*blockcompressed,n,&IA,&JA,done);
398f4e70085SSatish Balay }
399f4e70085SSatish Balay 
400f4e70085SSatish Balay /*
401f4e70085SSatish Balay    This is a poor way of storing the column and value pointers
402f4e70085SSatish Balay   generated by MatGetRow() to be returned with MatRestoreRow()
403f4e70085SSatish Balay   but there is not natural,good place else to store them. Hence
404f4e70085SSatish Balay   Fortran programmers can only have one outstanding MatGetRows()
405f4e70085SSatish Balay   at a time.
406f4e70085SSatish Balay */
407f4e70085SSatish Balay static PetscErrorCode    matgetrowactive = 0;
408f4e70085SSatish Balay static const PetscInt    *my_ocols       = 0;
409f4e70085SSatish Balay static const PetscScalar *my_ovals       = 0;
410f4e70085SSatish Balay 
4118cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matgetrow_(Mat *mat,PetscInt *row,PetscInt *ncols,PetscInt *cols,PetscScalar *vals,PetscErrorCode *ierr)
412f4e70085SSatish Balay {
413f4e70085SSatish Balay   const PetscInt    **oocols = &my_ocols;
414f4e70085SSatish Balay   const PetscScalar **oovals = &my_ovals;
415f4e70085SSatish Balay 
416f4e70085SSatish Balay   if (matgetrowactive) {
417efca3c55SSatish Balay     PetscError(PETSC_COMM_SELF,__LINE__,"MatGetRow_Fortran",__FILE__,PETSC_ERR_ARG_WRONGSTATE,PETSC_ERROR_INITIAL,
418f4e70085SSatish Balay                "Cannot have two MatGetRow() active simultaneously\n\
419f4e70085SSatish Balay                call MatRestoreRow() before calling MatGetRow() a second time");
420f4e70085SSatish Balay     *ierr = 1;
421f4e70085SSatish Balay     return;
422f4e70085SSatish Balay   }
423f4e70085SSatish Balay 
4240298fd71SBarry Smith   CHKFORTRANNULLINTEGER(cols); if (!cols) oocols = NULL;
4250298fd71SBarry Smith   CHKFORTRANNULLSCALAR(vals);  if (!vals) oovals = NULL;
426f4e70085SSatish Balay 
427f4e70085SSatish Balay   *ierr = MatGetRow(*mat,*row,ncols,oocols,oovals);
428f4e70085SSatish Balay   if (*ierr) return;
429f4e70085SSatish Balay 
430f4e70085SSatish Balay   if (oocols) { *ierr = PetscMemcpy(cols,my_ocols,(*ncols)*sizeof(PetscInt)); if (*ierr) return;}
431f4e70085SSatish Balay   if (oovals) { *ierr = PetscMemcpy(vals,my_ovals,(*ncols)*sizeof(PetscScalar)); if (*ierr) return;}
432f4e70085SSatish Balay   matgetrowactive = 1;
433f4e70085SSatish Balay }
434f4e70085SSatish Balay 
4358cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matrestorerow_(Mat *mat,PetscInt *row,PetscInt *ncols,PetscInt *cols,PetscScalar *vals,PetscErrorCode *ierr)
436f4e70085SSatish Balay {
437f4e70085SSatish Balay   const PetscInt    **oocols = &my_ocols;
438f4e70085SSatish Balay   const PetscScalar **oovals = &my_ovals;
439f4e70085SSatish Balay   if (!matgetrowactive) {
440efca3c55SSatish Balay     PetscError(PETSC_COMM_SELF,__LINE__,"MatRestoreRow_Fortran",__FILE__,PETSC_ERR_ARG_WRONGSTATE,PETSC_ERROR_INITIAL,
441f4e70085SSatish Balay                "Must call MatGetRow() first");
442f4e70085SSatish Balay     *ierr = 1;
443f4e70085SSatish Balay     return;
444f4e70085SSatish Balay   }
4450298fd71SBarry Smith   CHKFORTRANNULLINTEGER(cols); if (!cols) oocols = NULL;
4460298fd71SBarry Smith   CHKFORTRANNULLSCALAR(vals);  if (!vals) oovals = NULL;
447f4e70085SSatish Balay 
448f4e70085SSatish Balay   *ierr           = MatRestoreRow(*mat,*row,ncols,oocols,oovals);
449f4e70085SSatish Balay   matgetrowactive = 0;
450f4e70085SSatish Balay }
451f4e70085SSatish Balay 
4528cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matview_(Mat *mat,PetscViewer *vin,PetscErrorCode *ierr)
453f4e70085SSatish Balay {
454f4e70085SSatish Balay   PetscViewer v;
455f4e70085SSatish Balay   PetscPatchDefaultViewers_Fortran(vin,v);
456f4e70085SSatish Balay   *ierr = MatView(*mat,v);
457f4e70085SSatish Balay }
458f4e70085SSatish Balay 
4598cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matload_(Mat *mat,PetscViewer *vin,PetscErrorCode *ierr)
460f7e310deSShri Abhyankar {
461f7e310deSShri Abhyankar   PetscViewer v;
462f7e310deSShri Abhyankar   PetscPatchDefaultViewers_Fortran(vin,v);
463112444f4SShri Abhyankar   *ierr = MatLoad(*mat,v);
464f7e310deSShri Abhyankar }
465f7e310deSShri Abhyankar 
4668cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matseqaijgetarray_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr)
467f4e70085SSatish Balay {
468f4e70085SSatish Balay   PetscScalar *mm;
469f4e70085SSatish Balay   PetscInt    m,n;
470f4e70085SSatish Balay 
4718c778c55SBarry Smith   *ierr = MatSeqAIJGetArray(*mat,&mm); if (*ierr) return;
472f4e70085SSatish Balay   *ierr = MatGetSize(*mat,&m,&n);  if (*ierr) return;
473f91d1997SBarry Smith   *ierr = PetscScalarAddressToFortran((PetscObject)*mat,1,fa,mm,m*n,ia); if (*ierr) return;
474f4e70085SSatish Balay }
475f4e70085SSatish Balay 
4768cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matseqaijrestorearray_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr)
477f4e70085SSatish Balay {
478f4e70085SSatish Balay   PetscScalar *lx;
479f4e70085SSatish Balay   PetscInt    m,n;
480f4e70085SSatish Balay 
481f4e70085SSatish Balay   *ierr = MatGetSize(*mat,&m,&n); if (*ierr) return;
482f4e70085SSatish Balay   *ierr = PetscScalarAddressFromFortran((PetscObject)*mat,fa,*ia,m*n,&lx);if (*ierr) return;
4838c778c55SBarry Smith   *ierr = MatSeqAIJRestoreArray(*mat,&lx);if (*ierr) return;
484f4e70085SSatish Balay }
485f4e70085SSatish Balay 
4868cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matdensegetarray_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr)
48773a71a0fSBarry Smith {
48873a71a0fSBarry Smith   PetscScalar *mm;
48973a71a0fSBarry Smith   PetscInt    m,n;
49073a71a0fSBarry Smith 
4918c778c55SBarry Smith   *ierr = MatDenseGetArray(*mat,&mm); if (*ierr) return;
49273a71a0fSBarry Smith   *ierr = MatGetSize(*mat,&m,&n);  if (*ierr) return;
49373a71a0fSBarry Smith   *ierr = PetscScalarAddressToFortran((PetscObject)*mat,1,fa,mm,m*n,ia); if (*ierr) return;
49473a71a0fSBarry Smith }
49573a71a0fSBarry Smith 
4968cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matdenserestorearray_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr)
49773a71a0fSBarry Smith {
49873a71a0fSBarry Smith   PetscScalar *lx;
49973a71a0fSBarry Smith   PetscInt    m,n;
50073a71a0fSBarry Smith 
50173a71a0fSBarry Smith   *ierr = MatGetSize(*mat,&m,&n); if (*ierr) return;
50273a71a0fSBarry Smith   *ierr = PetscScalarAddressFromFortran((PetscObject)*mat,fa,*ia,m*n,&lx);if (*ierr) return;
5038c778c55SBarry Smith   *ierr = MatDenseRestoreArray(*mat,&lx);if (*ierr) return;
50473a71a0fSBarry Smith }
50573a71a0fSBarry Smith 
506390e1bf2SBarry Smith PETSC_EXTERN void PETSC_STDCALL matfactorgetsolverpackage_(Mat *mat,char* name PETSC_MIXED_LEN(len),PetscErrorCode *ierr PETSC_END_LEN(len))
50735bd34faSBarry Smith {
50835bd34faSBarry Smith   const char *tname;
50935bd34faSBarry Smith 
51035bd34faSBarry Smith   *ierr = MatFactorGetSolverPackage(*mat,&tname);if (*ierr) return;
51135bd34faSBarry Smith   if (name != PETSC_NULL_CHARACTER_Fortran) {
51235bd34faSBarry Smith     *ierr = PetscStrncpy(name,tname,len);if (*ierr) return;
51335bd34faSBarry Smith   }
51435bd34faSBarry Smith   FIXRETURNCHAR(PETSC_TRUE,name,len);
51535bd34faSBarry Smith }
51635bd34faSBarry Smith 
517390e1bf2SBarry 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))
5185dffd610SBarry Smith {
5195dffd610SBarry Smith   char *t;
5205dffd610SBarry Smith   FIXCHAR(outtype,len,t);
5219be81726SHong Zhang   *ierr = MatGetFactor(*mat,t,*ftype,M);
5225dffd610SBarry Smith   FREECHAR(outtype,t);
5235dffd610SBarry Smith }
5245dffd610SBarry Smith 
525390e1bf2SBarry 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))
526f4e70085SSatish Balay {
527f4e70085SSatish Balay   char *t;
528f4e70085SSatish Balay   FIXCHAR(outtype,len,t);
529f4e70085SSatish Balay   *ierr = MatConvert(*mat,t,*reuse,M);
530f4e70085SSatish Balay   FREECHAR(outtype,t);
531f4e70085SSatish Balay }
532f4e70085SSatish Balay 
533f4e70085SSatish Balay /*
5347dae84e0SHong Zhang     MatCreateSubmatrices() is slightly different from C since the
535f4e70085SSatish Balay     Fortran provides the array to hold the submatrix objects,while in C that
5367dae84e0SHong Zhang     array is allocated by the MatCreateSubmatrices()
537f4e70085SSatish Balay */
5387dae84e0SHong Zhang PETSC_EXTERN void PETSC_STDCALL matcreatesubmatrices_(Mat *mat,PetscInt *n,IS *isrow,IS *iscol,MatReuse *scall,Mat *smat,PetscErrorCode *ierr)
539f4e70085SSatish Balay {
540f4e70085SSatish Balay   Mat      *lsmat;
541f4e70085SSatish Balay   PetscInt i;
542f4e70085SSatish Balay 
543f4e70085SSatish Balay   if (*scall == MAT_INITIAL_MATRIX) {
5447dae84e0SHong Zhang     *ierr = MatCreateSubMatrices(*mat,*n,isrow,iscol,*scall,&lsmat);
545de7ef04eSHong Zhang     for (i=0; i<=*n; i++) { /* lsmat[*n] might be a dummy matrix for saving data struc */
546f4e70085SSatish Balay       smat[i] = lsmat[i];
547f4e70085SSatish Balay     }
548f4e70085SSatish Balay     *ierr = PetscFree(lsmat);
549f4e70085SSatish Balay   } else {
5507dae84e0SHong Zhang     *ierr = MatCreateSubMatrices(*mat,*n,isrow,iscol,*scall,&smat);
551f4e70085SSatish Balay   }
552f4e70085SSatish Balay }
553f4e70085SSatish Balay 
5547d6bfa3bSBarry Smith /*
5557d6bfa3bSBarry Smith     MatDestroyMatrices() is slightly different from C since the
556de7ef04eSHong Zhang     Fortran does not free the array of matrix objects, while in C that
557de7ef04eSHong Zhang     the array is freed
558de7ef04eSHong Zhang */
559de7ef04eSHong Zhang PETSC_EXTERN void PETSC_STDCALL matdestroymatrices_(PetscInt *n,Mat *smat,PetscErrorCode *ierr)
560de7ef04eSHong Zhang {
561de7ef04eSHong Zhang   PetscInt i;
562de7ef04eSHong Zhang 
563de7ef04eSHong Zhang   for (i=0; i<*n; i++) {
564de7ef04eSHong Zhang     *ierr = MatDestroy(&smat[i]);if (*ierr) return;
565de7ef04eSHong Zhang   }
566de7ef04eSHong Zhang }
567de7ef04eSHong Zhang 
568de7ef04eSHong Zhang /*
569de7ef04eSHong Zhang     MatDestroySubMatrices() is slightly different from C since the
5707d6bfa3bSBarry Smith     Fortran provides the array to hold the submatrix objects, while in C that
5717dae84e0SHong Zhang     array is allocated by the MatCreateSubmatrices()
5727d6bfa3bSBarry Smith */
573de7ef04eSHong Zhang PETSC_EXTERN void PETSC_STDCALL matdestroysubmatrices_(PetscInt *n,Mat *smat,PetscErrorCode *ierr)
5747d6bfa3bSBarry Smith {
575de7ef04eSHong Zhang   Mat      *lsmat;
5767d6bfa3bSBarry Smith   PetscInt i;
5777d6bfa3bSBarry Smith 
578de7ef04eSHong Zhang   *ierr = PetscMalloc1(*n+1,&lsmat);
579de7ef04eSHong Zhang   for (i=0; i<=*n; i++) {
580de7ef04eSHong Zhang       lsmat[i] = smat[i];
5817d6bfa3bSBarry Smith   }
582de7ef04eSHong Zhang   *ierr = MatDestroySubMatrices(*n,&lsmat);
583df750dc8SHong Zhang }
584df750dc8SHong Zhang 
5858cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matzerorowscolumns_(Mat *mat,PetscInt *numRows,PetscInt *rows,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr)
58617ede90eSSatish Balay {
58717ede90eSSatish Balay   CHKFORTRANNULLOBJECTDEREFERENCE(x);
58817ede90eSSatish Balay   CHKFORTRANNULLOBJECTDEREFERENCE(b);
58917ede90eSSatish Balay   *ierr = MatZeroRowsColumns(*mat,*numRows,rows,*diag,*x,*b);
59017ede90eSSatish Balay }
59117ede90eSSatish Balay 
5928cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matzerorowscolumnsis_(Mat *mat,IS *is,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr)
59317ede90eSSatish Balay {
59417ede90eSSatish Balay   CHKFORTRANNULLOBJECTDEREFERENCE(x);
59517ede90eSSatish Balay   CHKFORTRANNULLOBJECTDEREFERENCE(b);
59617ede90eSSatish Balay   *ierr = MatZeroRowsColumnsIS(*mat,*is,*diag,*x,*b);
59717ede90eSSatish Balay }
59817ede90eSSatish Balay 
5998cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matzerorowsstencil_(Mat *mat,PetscInt *numRows,MatStencil *rows,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr)
60017ede90eSSatish Balay {
60117ede90eSSatish Balay   CHKFORTRANNULLOBJECTDEREFERENCE(x);
60217ede90eSSatish Balay   CHKFORTRANNULLOBJECTDEREFERENCE(b);
60317ede90eSSatish Balay   *ierr = MatZeroRowsStencil(*mat,*numRows,rows,*diag,*x,*b);
60417ede90eSSatish Balay }
60517ede90eSSatish Balay 
6068cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matzerorowscolumnsstencil_(Mat *mat,PetscInt *numRows,MatStencil *rows,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr)
607d25a37e1SJed Brown {
608d25a37e1SJed Brown   CHKFORTRANNULLOBJECTDEREFERENCE(x);
609d25a37e1SJed Brown   CHKFORTRANNULLOBJECTDEREFERENCE(b);
610d25a37e1SJed Brown   *ierr = MatZeroRowsColumnsStencil(*mat,*numRows,rows,*diag,*x,*b);
611d25a37e1SJed Brown }
612d25a37e1SJed Brown 
6138cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matzerorows_(Mat *mat,PetscInt *numRows,PetscInt *rows,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr)
614f4e70085SSatish Balay {
6152b40b63fSBarry Smith   CHKFORTRANNULLOBJECTDEREFERENCE(x);
6162b40b63fSBarry Smith   CHKFORTRANNULLOBJECTDEREFERENCE(b);
6172b40b63fSBarry Smith   *ierr = MatZeroRows(*mat,*numRows,rows,*diag,*x,*b);
618f4e70085SSatish Balay }
619f4e70085SSatish Balay 
6208cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matzerorowsis_(Mat *mat,IS *is,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr)
621f4e70085SSatish Balay {
6222b40b63fSBarry Smith   CHKFORTRANNULLOBJECTDEREFERENCE(x);
6232b40b63fSBarry Smith   CHKFORTRANNULLOBJECTDEREFERENCE(b);
6242b40b63fSBarry Smith   *ierr = MatZeroRowsIS(*mat,*is,*diag,*x,*b);
625f4e70085SSatish Balay }
626f4e70085SSatish Balay 
6278cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matzerorowslocal_(Mat *mat,PetscInt *numRows,PetscInt *rows,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr)
628f4e70085SSatish Balay {
6292b40b63fSBarry Smith   CHKFORTRANNULLOBJECTDEREFERENCE(x);
6302b40b63fSBarry Smith   CHKFORTRANNULLOBJECTDEREFERENCE(b);
6312b40b63fSBarry Smith   *ierr = MatZeroRowsLocal(*mat,*numRows,rows,*diag,*x,*b);
632f4e70085SSatish Balay }
633f4e70085SSatish Balay 
6348cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matzerorowslocalis_(Mat *mat,IS *is,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr)
635f4e70085SSatish Balay {
6362b40b63fSBarry Smith   CHKFORTRANNULLOBJECTDEREFERENCE(x);
6372b40b63fSBarry Smith   CHKFORTRANNULLOBJECTDEREFERENCE(b);
6382b40b63fSBarry Smith   *ierr = MatZeroRowsLocalIS(*mat,*is,*diag,*x,*b);
639f4e70085SSatish Balay }
640f4e70085SSatish Balay 
6418cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matzerorowscolumnslocal_(Mat *mat,PetscInt *numRows,PetscInt *rows,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr)
64217ede90eSSatish Balay {
64317ede90eSSatish Balay   CHKFORTRANNULLOBJECTDEREFERENCE(x);
64417ede90eSSatish Balay   CHKFORTRANNULLOBJECTDEREFERENCE(b);
64517ede90eSSatish Balay   *ierr = MatZeroRowsColumnsLocal(*mat,*numRows,rows,*diag,*x,*b);
64617ede90eSSatish Balay }
64717ede90eSSatish Balay 
6488cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matzerorowscolumnslocalis_(Mat *mat,IS *is,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr)
64917ede90eSSatish Balay {
65017ede90eSSatish Balay   CHKFORTRANNULLOBJECTDEREFERENCE(x);
65117ede90eSSatish Balay   CHKFORTRANNULLOBJECTDEREFERENCE(b);
65217ede90eSSatish Balay   *ierr = MatZeroRowsColumnsLocalIS(*mat,*is,*diag,*x,*b);
65317ede90eSSatish Balay }
6541eea217eSSatish Balay 
655390e1bf2SBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetoptionsprefix_(Mat *mat,char* prefix PETSC_MIXED_LEN(len),PetscErrorCode *ierr PETSC_END_LEN(len))
6561eea217eSSatish Balay {
6571eea217eSSatish Balay   char *t;
6581eea217eSSatish Balay 
6591eea217eSSatish Balay   FIXCHAR(prefix,len,t);
6601eea217eSSatish Balay   *ierr = MatSetOptionsPrefix(*mat,t);
6611eea217eSSatish Balay   FREECHAR(prefix,t);
6621eea217eSSatish Balay }
6631eea217eSSatish Balay 
664d0195637SJed Brown PETSC_EXTERN void PETSC_STDCALL matnullspaceremove_(MatNullSpace *sp,Vec *vec,PetscErrorCode *ierr)
665812c3f48SMatthew Knepley {
666d0195637SJed Brown   *ierr = MatNullSpaceRemove(*sp,*vec);
667812c3f48SMatthew Knepley }
6681eea217eSSatish Balay 
6694d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetinfo_(Mat *mat,MatInfoType *flag,MatInfo *info, int *ierr)
6705ba43861SSatish Balay {
6714d03fd2bSBarry Smith   *ierr = MatGetInfo(*mat,*flag,info);
6725ba43861SSatish Balay }
6735ba43861SSatish Balay 
6744d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matlufactor_(Mat *mat,IS *row,IS *col,const MatFactorInfo *info, int *ierr)
67522688b47SSatish Balay {
6764d03fd2bSBarry Smith   *ierr = MatLUFactor(*mat,*row,*col,info);
67722688b47SSatish Balay }
67822688b47SSatish Balay 
6794d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matilufactor_(Mat *mat,IS *row,IS *col,const MatFactorInfo *info, int *ierr)
68022688b47SSatish Balay {
6814d03fd2bSBarry Smith   *ierr = MatILUFactor(*mat,*row,*col,info);
68222688b47SSatish Balay }
68322688b47SSatish Balay 
6844d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matlufactorsymbolic_(Mat *fact,Mat *mat,IS *row,IS *col,const MatFactorInfo *info, int *ierr)
68522688b47SSatish Balay {
6864d03fd2bSBarry Smith   *ierr = MatLUFactorSymbolic(*fact,*mat,*row,*col,info);
68722688b47SSatish Balay }
68822688b47SSatish Balay 
6894d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matlufactornumeric_(Mat *fact,Mat *mat,const MatFactorInfo *info, int *ierr)
69022688b47SSatish Balay {
6914d03fd2bSBarry Smith   *ierr = MatLUFactorNumeric(*fact,*mat,info);
69222688b47SSatish Balay }
69322688b47SSatish Balay 
6944d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matcholeskyfactor_(Mat *mat,IS *perm,const MatFactorInfo *info, int *ierr)
69522688b47SSatish Balay {
6964d03fd2bSBarry Smith   *ierr = MatCholeskyFactor(*mat,*perm,info);
69722688b47SSatish Balay }
69822688b47SSatish Balay 
6994d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matcholeskyfactorsymbolic_(Mat *fact,Mat *mat,IS *perm,const MatFactorInfo *info, int *ierr)
70022688b47SSatish Balay {
7014d03fd2bSBarry Smith   *ierr = MatCholeskyFactorSymbolic(*fact,*mat,*perm,info);
70222688b47SSatish Balay }
70322688b47SSatish Balay 
7044d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matcholeskyfactornumeric_(Mat *fact,Mat *mat,const MatFactorInfo *info, int *ierr)
70522688b47SSatish Balay {
7064d03fd2bSBarry Smith   *ierr = MatCholeskyFactorNumeric(*fact,*mat,info);
70722688b47SSatish Balay }
70822688b47SSatish Balay 
7094d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matilufactorsymbolic_(Mat *fact,Mat *mat,IS *row,IS *col,const MatFactorInfo *info, int *ierr)
71022688b47SSatish Balay {
7114d03fd2bSBarry Smith   *ierr = MatILUFactorSymbolic(*fact,*mat,*row,*col,info);
71222688b47SSatish Balay }
71322688b47SSatish Balay 
7144d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL maticcfactorsymbolic_(Mat *fact,Mat *mat,IS *perm,const MatFactorInfo *info, int *ierr)
71522688b47SSatish Balay {
7164d03fd2bSBarry Smith   *ierr = MatICCFactorSymbolic(*fact,*mat,*perm,info);
71722688b47SSatish Balay }
71822688b47SSatish Balay 
7194d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL maticcfactor_(Mat *mat,IS *row,const MatFactorInfo *info, int *ierr)
72022688b47SSatish Balay {
7214d03fd2bSBarry Smith   *ierr = MatICCFactor(*mat,*row,info);
72222688b47SSatish Balay }
72322688b47SSatish Balay 
7244d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matfactorinfoinitialize_(MatFactorInfo *info, int *ierr)
72522688b47SSatish Balay {
7264d03fd2bSBarry Smith   *ierr = MatFactorInfoInitialize(info);
72722688b47SSatish Balay }
728