xref: /petsc/src/mat/interface/ftn-custom/zmatrixf.c (revision 81ec7b9217d34c7a62fd7ba7feb4d8d5a36fcad4)
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
150aee3464SBarry 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
508572280aSBarry Smith #define matdensegetarrayread_            MATDENSEGETARRAYREAD
518c778c55SBarry Smith #define matdenserestorearray_            MATDENSERESTOREARRAY
528572280aSBarry Smith #define matdenserestorearrayread_        MATDENSERESTOREARRAYREAD
53f4e70085SSatish Balay #define matconvert_                      MATCONVERT
547dae84e0SHong Zhang #define matcreatesubmatrices_            MATCREATESUBMATRICES
55*81ec7b92Smarius #define matcreatesubmatricesmpi_         MATCREATESUBMATRICESMPI
5617ede90eSSatish Balay #define matzerorowscolumns_              MATZEROROWSCOLUMNS
5717ede90eSSatish Balay #define matzerorowscolumnsis_            MATZEROROWSCOLUMNSIS
5817ede90eSSatish Balay #define matzerorowsstencil_              MATZEROROWSSTENCIL
59d25a37e1SJed Brown #define matzerorowscolumnsstencil_       MATZEROROWSCOLUMNSSTENCIL
60f4e70085SSatish Balay #define matzerorows_                     MATZEROROWS
61f4e70085SSatish Balay #define matzerorowsis_                   MATZEROROWSIS
62f4e70085SSatish Balay #define matzerorowslocal_                MATZEROROWSLOCAL
63d27e6124SSatish Balay #define matzerorowslocal0_               MATZEROROWSLOCAL0
64d27e6124SSatish Balay #define matzerorowslocal1_               MATZEROROWSLOCAL1
65f4e70085SSatish Balay #define matzerorowslocalis_              MATZEROROWSLOCALIS
6617ede90eSSatish Balay #define matzerorowscolumnslocal_         MATZEROROWSCOLUMNSLOCAL
6717ede90eSSatish Balay #define matzerorowscolumnslocalis_       MATZEROROWSCOLUMNSLOCALIS
681eea217eSSatish Balay #define matsetoptionsprefix_             MATSETOPTIONSPREFIX
69fcc9d04bSBarry Smith #define matcreatevecs_                   MATCREATEVECS
70c9d5ca86SBarry Smith #define matnullspaceremove_              MATNULLSPACEREMOVE
715ba43861SSatish Balay #define matgetinfo_                      MATGETINFO
7222688b47SSatish Balay #define matlufactor_                     MATLUFACTOR
7322688b47SSatish Balay #define matilufactor_                    MATILUFACTOR
7422688b47SSatish Balay #define matlufactorsymbolic_             MATLUFACTORSYMBOLIC
7522688b47SSatish Balay #define matlufactornumeric_              MATLUFACTORNUMERIC
7622688b47SSatish Balay #define matcholeskyfactor_               MATCHOLESKYFACTOR
7722688b47SSatish Balay #define matcholeskyfactorsymbolic_       MATCHOLESKYFACTORSYMBOLIC
7822688b47SSatish Balay #define matcholeskyfactornumeric_        MATCHOLESKYFACTORNUMERIC
7922688b47SSatish Balay #define matilufactorsymbolic_            MATILUFACTORSYMBOLIC
8022688b47SSatish Balay #define maticcfactorsymbolic_            MATICCFACTORSYMBOLIC
8122688b47SSatish Balay #define maticcfactor_                    MATICCFACTOR
8222688b47SSatish Balay #define matfactorinfoinitialize_         MATFACTORINFOINITIALIZE
83b22b330cSBarry Smith #define matnullspacesetfunction_         MATNULLSPACESETFUNCTION
840905d9aaSJed Brown #define matfindnonzerorows_              MATFINDNONZEROROWS
8538135fcbSMartin Diehl #define matgetsize_                      MATGETSIZE
863be0408cSBarry Smith #define matgetsize00_                    MATGETSIZE00
873be0408cSBarry Smith #define matgetsize10_                    MATGETSIZE10
883be0408cSBarry Smith #define matgetsize01_                    MATGETSIZE01
8938135fcbSMartin Diehl #define matgetlocalsize_                 MATGETLOCALSIZE
903be0408cSBarry Smith #define matgetlocalsize00_               MATGETLOCALSIZE00
913be0408cSBarry Smith #define matgetlocalsize10_               MATGETLOCALSIZE10
923be0408cSBarry Smith #define matgetlocalsize01_               MATGETLOCALSIZE01
93260663b8SBarry Smith #define matsetnullspace_                 MATSETNULLSPACE
94260663b8SBarry Smith #define matgetownershiprange_            MATGETOWNERSHIPRANGE
9591f56e93SMartin Diehl #define matgetownershiprange00_          MATGETOWNERSHIPRANGE00
9691f56e93SMartin Diehl #define matgetownershiprange10_          MATGETOWNERSHIPRANGE10
9791f56e93SMartin Diehl #define matgetownershiprange01_          MATGETOWNERSHIPRANGE01
985c16e969SSatish Balay #define matgetownershiprange11_          MATGETOWNERSHIPRANGE11
99c08c7cb9SBarry Smith #define matgetownershipis_               MATGETOWNERSHIPIS
100afc39838SBarry Smith #define matgetownershiprangecolumn_      MATGETOWNERSHIPRANGECOLUMN
101f4e70085SSatish Balay #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE)
1024d03fd2bSBarry Smith #define matsetvalues_                    matsetvalues
1031006886cSSatish Balay #define matsetvaluesnnnn_                matsetvaluesnnnn
1043b494cfeSSatish Balay #define matsetvalues0_                   matsetvalues0
1051b266c99SBarry Smith #define matsetvaluesnn1_                 matsetvaluesnn1
1064d03fd2bSBarry Smith #define matsetvalues11_                  matsetvalues11
1074d03fd2bSBarry Smith #define matsetvaluesn1_                  matsetvaluesn1
1084d03fd2bSBarry Smith #define matsetvalues1n_                  matsetvalues1n
1094d03fd2bSBarry Smith #define matsetvalueslocal_               matsetvalueslocal
1103b494cfeSSatish Balay #define matsetvalueslocal0_              matsetvalueslocal0
1114d03fd2bSBarry Smith #define matsetvalueslocal11_             matsetvalueslocal11
1124d03fd2bSBarry Smith #define matsetvalueslocal11nn_           matsetvalueslocal11nn
1134d03fd2bSBarry Smith #define matsetvalueslocal111_            matsetvalueslocal111
1144d03fd2bSBarry Smith #define matsetvalueslocal1n_             matsetvalueslocal1n
1154d03fd2bSBarry Smith #define matsetvalueslocaln1_             matsetvalueslocaln1
1164d03fd2bSBarry Smith #define matsetvaluesblocked_             matsetvaluesblocked
1173b494cfeSSatish Balay #define matsetvaluesblocked0_            matsetvaluesblocked0
1180aee3464SBarry Smith #define matsetvaluesblocked2_            matsetvaluesblocked2
1194d03fd2bSBarry Smith #define matsetvaluesblocked11_           matsetvaluesblocked11
1204d03fd2bSBarry Smith #define matsetvaluesblocked111_          matsetvaluesblocked111
1214d03fd2bSBarry Smith #define matsetvaluesblocked1n_           matsetvaluesblocked1n
12224aa916eSSatish Balay #define matsetvaluesblockedn1_           matsetvaluesblockedn1
1234d03fd2bSBarry Smith #define matsetvaluesblockedlocal_        matsetvaluesblockedlocal
1243b494cfeSSatish Balay #define matsetvaluesblockedlocal0_       matsetvaluesblockedlocal0
1254d03fd2bSBarry Smith #define matsetvaluesblockedlocal11_      matsetvaluesblockedlocal11
1264d03fd2bSBarry Smith #define matsetvaluesblockedlocal111_     matsetvaluesblockedlocal111
1274d03fd2bSBarry Smith #define matsetvaluesblockedlocal1n_      matsetvaluesblockedlocal1n
12824aa916eSSatish Balay #define matsetvaluesblockedlocaln1_      matsetvaluesblockedlocaln1
12987bcf4e0SBarry Smith #define matgetrowmin_                    matgetrowmin
13087bcf4e0SBarry Smith #define matgetrowminabs_                 matgetrowminabs
1315928be6bSBarry Smith #define matgetrowmax_                    matgetrowmax
1325928be6bSBarry Smith #define matgetrowmaxabs_                 matgetrowmaxabs
1335928be6bSBarry Smith #define matdestroymatrices_              matdestroymatrices
134df750dc8SHong Zhang #define matdestroysubmatrices_           matdestroysubmatrices
1355dffd610SBarry Smith #define matgetfactor_                    matgetfactor
13635bd34faSBarry Smith #define matfactorgetsolverpackage_       matfactorgetsolverpackage
137fcc9d04bSBarry Smith #define matcreatevecs_                   matcreatevecs
138f4e70085SSatish Balay #define matgetrowij_                     matgetrowij
139f4e70085SSatish Balay #define matrestorerowij_                 matrestorerowij
140f4e70085SSatish Balay #define matgetrow_                       matgetrow
141f4e70085SSatish Balay #define matrestorerow_                   matrestorerow
142f4e70085SSatish Balay #define matview_                         matview
143f7e310deSShri Abhyankar #define matload_                         matload
1448c778c55SBarry Smith #define matseqaijgetarray_               matseqaijgetarray
1458c778c55SBarry Smith #define matseqaijrestorearray_           matseqaijrestorearray
1468c778c55SBarry Smith #define matdensegetarray_                matdensegetarray
1478572280aSBarry Smith #define matdensegetarrayread_            matdensegetarrayread
1488c778c55SBarry Smith #define matdenserestorearray_            matdenserestorearray
1498572280aSBarry Smith #define matdenserestorearrayread_        matdenserestorearrayread
150f4e70085SSatish Balay #define matconvert_                      matconvert
1517dae84e0SHong Zhang #define matcreatesubmatrices_            matcreatesubmatrices
152*81ec7b92Smarius #define matcreatesubmatricesmpi_         matcreatesubmatricesmpi
15317ede90eSSatish Balay #define matzerorowscolumns_              matzerorowscolumns
15417ede90eSSatish Balay #define matzerorowscolumnsis_            matzerorowscolumnsis
15517ede90eSSatish Balay #define matzerorowsstencil_              matzerorowsstencil
156d25a37e1SJed Brown #define matzerorowscolumnsstencil_       matzerorowscolumnsstencil
157f4e70085SSatish Balay #define matzerorows_                     matzerorows
158f4e70085SSatish Balay #define matzerorowsis_                   matzerorowsis
159f4e70085SSatish Balay #define matzerorowslocal_                matzerorowslocal
160f4e70085SSatish Balay #define matzerorowslocalis_              matzerorowslocalis
16117ede90eSSatish Balay #define matzerorowscolumnslocal_         matzerorowscolumnslocal
16217ede90eSSatish Balay #define matzerorowscolumnslocalis_       matzerorowscolumnslocalis
1631eea217eSSatish Balay #define matsetoptionsprefix_             matsetoptionsprefix
164812c3f48SMatthew Knepley #define matnullspaceremove_              matnullspaceremove
1655ba43861SSatish Balay #define matgetinfo_                      matgetinfo
16622688b47SSatish Balay #define matlufactor_                     matlufactor
16722688b47SSatish Balay #define matilufactor_                    matilufactor
16822688b47SSatish Balay #define matlufactorsymbolic_             matlufactorsymbolic
16922688b47SSatish Balay #define matlufactornumeric_              matlufactornumeric
17022688b47SSatish Balay #define matcholeskyfactor_               matcholeskyfactor
17122688b47SSatish Balay #define matcholeskyfactorsymbolic_       matcholeskyfactorsymbolic
17222688b47SSatish Balay #define matcholeskyfactornumeric_        matcholeskyfactornumeric
17322688b47SSatish Balay #define matilufactorsymbolic_            matilufactorsymbolic
17422688b47SSatish Balay #define maticcfactorsymbolic_            maticcfactorsymbolic
17522688b47SSatish Balay #define maticcfactor_                    maticcfactor
17622688b47SSatish Balay #define matfactorinfoinitialize_         matfactorinfoinitialize
177b22b330cSBarry Smith #define matnullspacesetfunction_         matnullspacesetfunction
1780905d9aaSJed Brown #define matfindnonzerorows_              matfindnonzerorows
17938135fcbSMartin Diehl #define matgetsize_                      matgetsize
1803be0408cSBarry Smith #define matgetsize00_                    matgetsize00
1813be0408cSBarry Smith #define matgetsize10_                    matgetsize10
1823be0408cSBarry Smith #define matgetsize01_                    matgetsize01
18338135fcbSMartin Diehl #define matgetlocalsize_                 matgetlocalsize
1843be0408cSBarry Smith #define matgetlocalsize00_               matgetlocalsize00
1853be0408cSBarry Smith #define matgetlocalsize10_               matgetlocalsize10
1863be0408cSBarry Smith #define matgetlocalsize01_               matgetlocalsize01
187260663b8SBarry Smith #define matsetnullspace_                 matsetnullspace
188260663b8SBarry Smith #define matgetownershiprange_            matgetownershiprange
18991f56e93SMartin Diehl #define matgetownershiprange00_          matgetownershiprange00
19091f56e93SMartin Diehl #define matgetownershiprange10_          matgetownershiprange10
19191f56e93SMartin Diehl #define matgetownershiprange01_          matgetownershiprange01
19291f56e93SMartin Diehl #define matgetownershiprange11_          matgetownershiprange11
193c08c7cb9SBarry Smith #define matgetownershipis_               matgetownershipis
194afc39838SBarry Smith #define matgetownershiprangecolumn_      matgetownershiprangecolumn
195f4e70085SSatish Balay #endif
196f4e70085SSatish Balay 
197260663b8SBarry Smith PETSC_EXTERN void PETSC_STDCALL  matgetownershiprange_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr )
198260663b8SBarry Smith {
199260663b8SBarry Smith   CHKFORTRANNULLINTEGER(m);
200260663b8SBarry Smith   CHKFORTRANNULLINTEGER(n);
201260663b8SBarry Smith   *ierr = MatGetOwnershipRange(*mat,m,n);
202260663b8SBarry Smith }
203260663b8SBarry Smith 
2045dd307cdSMartin Diehl PETSC_EXTERN void PETSC_STDCALL  matgetownershiprange00_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr )
2055dd307cdSMartin Diehl {
2065dd307cdSMartin Diehl   CHKFORTRANNULLINTEGER(m);
2075dd307cdSMartin Diehl   CHKFORTRANNULLINTEGER(n);
2085dd307cdSMartin Diehl   *ierr = MatGetOwnershipRange(*mat,m,n);
2095dd307cdSMartin Diehl }
2105dd307cdSMartin Diehl 
2115dd307cdSMartin Diehl PETSC_EXTERN void PETSC_STDCALL  matgetownershiprange10_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr )
2125dd307cdSMartin Diehl {
2135dd307cdSMartin Diehl   CHKFORTRANNULLINTEGER(m);
2145dd307cdSMartin Diehl   CHKFORTRANNULLINTEGER(n);
2155dd307cdSMartin Diehl   *ierr = MatGetOwnershipRange(*mat,m,n);
2165dd307cdSMartin Diehl }
2175dd307cdSMartin Diehl 
2185dd307cdSMartin Diehl PETSC_EXTERN void PETSC_STDCALL  matgetownershiprange01_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr )
2195dd307cdSMartin Diehl {
2205dd307cdSMartin Diehl   CHKFORTRANNULLINTEGER(m);
2215dd307cdSMartin Diehl   CHKFORTRANNULLINTEGER(n);
2225dd307cdSMartin Diehl   *ierr = MatGetOwnershipRange(*mat,m,n);
2235dd307cdSMartin Diehl }
2245dd307cdSMartin Diehl 
2255dd307cdSMartin Diehl PETSC_EXTERN void PETSC_STDCALL  matgetownershiprange11_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr )
2265dd307cdSMartin Diehl {
2275dd307cdSMartin Diehl   CHKFORTRANNULLINTEGER(m);
2285dd307cdSMartin Diehl   CHKFORTRANNULLINTEGER(n);
2295dd307cdSMartin Diehl   *ierr = MatGetOwnershipRange(*mat,m,n);
2305dd307cdSMartin Diehl }
2315dd307cdSMartin Diehl 
232c08c7cb9SBarry Smith PETSC_EXTERN void PETSC_STDCALL  matgetownershipis_(Mat *mat,IS *m,IS *n, int *ierr )
233c08c7cb9SBarry Smith {
234c08c7cb9SBarry Smith   CHKFORTRANNULLOBJECT(m);
235c08c7cb9SBarry Smith   CHKFORTRANNULLOBJECT(n);
236c08c7cb9SBarry Smith   *ierr = MatGetOwnershipIS(*mat,m,n);
237c08c7cb9SBarry Smith }
238c08c7cb9SBarry Smith 
239afc39838SBarry Smith PETSC_EXTERN void PETSC_STDCALL  matgetownershiprangecolumn_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr )
240afc39838SBarry Smith {
241afc39838SBarry Smith   CHKFORTRANNULLINTEGER(m);
242afc39838SBarry Smith   CHKFORTRANNULLINTEGER(n);
243afc39838SBarry Smith   *ierr = MatGetOwnershipRangeColumn(*mat,m,n);
244afc39838SBarry Smith }
245afc39838SBarry Smith 
2463be0408cSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matgetsize_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr )
2473be0408cSBarry Smith {
2483be0408cSBarry Smith   CHKFORTRANNULLINTEGER(m);
2493be0408cSBarry Smith   CHKFORTRANNULLINTEGER(n);
2503be0408cSBarry Smith   *ierr = MatGetSize(*mat,m,n);
2513be0408cSBarry Smith }
2523be0408cSBarry Smith 
2533be0408cSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matgetsize00_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr )
2543be0408cSBarry Smith {
2553be0408cSBarry Smith   matgetsize_(mat,m,n,ierr);
2563be0408cSBarry Smith }
2573be0408cSBarry Smith 
2583be0408cSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matgetsize10_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr )
2593be0408cSBarry Smith {
2603be0408cSBarry Smith   matgetsize_(mat,m,n,ierr);
2613be0408cSBarry Smith }
2623be0408cSBarry Smith 
2633be0408cSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matgetsize01_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr )
2643be0408cSBarry Smith {
2653be0408cSBarry Smith   matgetsize_(mat,m,n,ierr);
2663be0408cSBarry Smith }
2673be0408cSBarry Smith 
2683be0408cSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matgetlocalsize_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr )
2693be0408cSBarry Smith {
2703be0408cSBarry Smith   CHKFORTRANNULLINTEGER(m);
2713be0408cSBarry Smith   CHKFORTRANNULLINTEGER(n);
2723be0408cSBarry Smith   *ierr = MatGetLocalSize(*mat,m,n);
2733be0408cSBarry Smith }
2743be0408cSBarry Smith 
2753be0408cSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matgetlocalsize00_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr )
2763be0408cSBarry Smith {
2773be0408cSBarry Smith   matgetlocalsize_(mat,m,n,ierr);
2783be0408cSBarry Smith }
2793be0408cSBarry Smith 
2803be0408cSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matgetlocalsize10_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr )
2813be0408cSBarry Smith {
2823be0408cSBarry Smith   matgetlocalsize_(mat,m,n,ierr);
2833be0408cSBarry Smith }
2843be0408cSBarry Smith 
2853be0408cSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matgetlocalsize01_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr )
2863be0408cSBarry Smith {
2873be0408cSBarry Smith   matgetlocalsize_(mat,m,n,ierr);
2883be0408cSBarry Smith }
2893be0408cSBarry Smith 
2904d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvaluesblocked_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){
2914d03fd2bSBarry Smith   *ierr = MatSetValuesBlocked(*mat,*m,idxm,*n,idxn,v,*addv);
2924d03fd2bSBarry Smith }
2934d03fd2bSBarry Smith 
294cee688dbSBarry 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)){
295cee688dbSBarry Smith   PetscScalar *fa;
2960aee3464SBarry Smith   *ierr = F90Array2dAccess(y,MPIU_SCALAR,(void**)&fa PETSC_F90_2PTR_PARAM(ptrd));if (*ierr) return;
297cee688dbSBarry Smith   matsetvaluesblocked_(mat,m,idxm,n,idxn,fa,addv,ierr);
298cee688dbSBarry Smith }
299cee688dbSBarry Smith 
3003b494cfeSSatish Balay PETSC_EXTERN void PETSC_STDCALL  matsetvaluesblocked0_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){
3013b494cfeSSatish Balay   matsetvaluesblocked_(mat,m,idxm,n,idxn,v,addv,ierr);
3023b494cfeSSatish Balay }
3033b494cfeSSatish Balay 
3044d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvaluesblocked11_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){
3054d03fd2bSBarry Smith   matsetvaluesblocked_(mat,m,idxm,n,idxn,v,addv,ierr);
3064d03fd2bSBarry Smith }
3074d03fd2bSBarry Smith 
3084d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvaluesblocked111_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){
3094d03fd2bSBarry Smith   matsetvaluesblocked_(mat,m,idxm,n,idxn,v,addv,ierr);
3104d03fd2bSBarry Smith }
3114d03fd2bSBarry Smith 
3124d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvaluesblocked1n_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){
3134d03fd2bSBarry Smith   matsetvaluesblocked_(mat,m,idxm,n,idxn,v,addv,ierr);
3144d03fd2bSBarry Smith }
3154d03fd2bSBarry Smith 
3164d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvaluesblockedn1_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){
3174d03fd2bSBarry Smith   matsetvaluesblocked_(mat,m,idxm,n,idxn,v,addv,ierr);
3184d03fd2bSBarry Smith }
3194d03fd2bSBarry Smith 
3204d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvaluesblockedlocal_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr )
3214d03fd2bSBarry Smith {
3224d03fd2bSBarry Smith   *ierr = MatSetValuesBlockedLocal(*mat,*nrow,irow,*ncol,icol,y,*addv);
3234d03fd2bSBarry Smith }
3244d03fd2bSBarry Smith 
3253b494cfeSSatish Balay PETSC_EXTERN void PETSC_STDCALL  matsetvaluesblockedlocal0_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){
3263b494cfeSSatish Balay   matsetvaluesblockedlocal_(mat,m,idxm,n,idxn,v,addv,ierr);
3273b494cfeSSatish Balay }
3283b494cfeSSatish Balay 
3294d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvaluesblockedlocal11_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){
3304d03fd2bSBarry Smith   matsetvaluesblockedlocal_(mat,m,idxm,n,idxn,v,addv,ierr);
3314d03fd2bSBarry Smith }
3324d03fd2bSBarry Smith 
3334d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvaluesblockedlocal111_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){
3344d03fd2bSBarry Smith   matsetvaluesblockedlocal_(mat,m,idxm,n,idxn,v,addv,ierr);
3354d03fd2bSBarry Smith }
3364d03fd2bSBarry Smith 
3374d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvaluesblockedlocal1n_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){
3384d03fd2bSBarry Smith   matsetvaluesblockedlocal_(mat,m,idxm,n,idxn,v,addv,ierr);
3394d03fd2bSBarry Smith }
3404d03fd2bSBarry Smith 
3414d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvaluesblockedlocaln1_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){
3424d03fd2bSBarry Smith   matsetvaluesblockedlocal_(mat,m,idxm,n,idxn,v,addv,ierr);
3434d03fd2bSBarry Smith }
3444d03fd2bSBarry Smith 
3454d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvalues_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr )
3464d03fd2bSBarry Smith {
3474d03fd2bSBarry Smith   *ierr = MatSetValues(*mat,*m,idxm,*n,idxn,v,*addv);
3484d03fd2bSBarry Smith }
3494d03fd2bSBarry Smith 
3501b266c99SBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvaluesnnnn_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr )
3511b266c99SBarry Smith {
3521b266c99SBarry Smith   matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr);
3531b266c99SBarry Smith }
3541b266c99SBarry Smith 
3553b494cfeSSatish Balay PETSC_EXTERN void PETSC_STDCALL  matsetvalues0_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr )
3563b494cfeSSatish Balay {
3573b494cfeSSatish Balay   matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr);
3583b494cfeSSatish Balay }
3593b494cfeSSatish Balay 
3601b266c99SBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvaluesnn1_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr )
3611b266c99SBarry Smith {
3621b266c99SBarry Smith   matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr);
3631b266c99SBarry Smith }
3641b266c99SBarry Smith 
3654d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvalues11_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr )
3664d03fd2bSBarry Smith {
3674d03fd2bSBarry Smith   matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr);
3684d03fd2bSBarry Smith }
3694d03fd2bSBarry Smith 
3704d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvaluesn1_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr )
3714d03fd2bSBarry Smith {
3724d03fd2bSBarry Smith   matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr);
3734d03fd2bSBarry Smith }
3744d03fd2bSBarry Smith 
3754d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvalues1n_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr )
3764d03fd2bSBarry Smith {
3774d03fd2bSBarry Smith   matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr);
3784d03fd2bSBarry Smith }
3794d03fd2bSBarry Smith 
3804d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvalueslocal_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr )
3814d03fd2bSBarry Smith {
3824d03fd2bSBarry Smith   *ierr = MatSetValuesLocal(*mat,*nrow,irow,*ncol,icol,y,*addv);
3834d03fd2bSBarry Smith }
3844d03fd2bSBarry Smith 
3853b494cfeSSatish Balay PETSC_EXTERN void PETSC_STDCALL  matsetvalueslocal0_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr )
3863b494cfeSSatish Balay {
3873b494cfeSSatish Balay   matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr);
3883b494cfeSSatish Balay }
3893b494cfeSSatish Balay 
3904d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvalueslocal11_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr )
3914d03fd2bSBarry Smith {
3924d03fd2bSBarry Smith   matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr);
3934d03fd2bSBarry Smith }
3944d03fd2bSBarry Smith 
3954d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvalueslocal11nn_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr )
3964d03fd2bSBarry Smith {
3974d03fd2bSBarry Smith   matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr);
3984d03fd2bSBarry Smith }
3994d03fd2bSBarry Smith 
4004d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvalueslocal111_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr )
4014d03fd2bSBarry Smith {
4024d03fd2bSBarry Smith   matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr);
4034d03fd2bSBarry Smith }
4044d03fd2bSBarry Smith 
4054d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvalueslocal1n_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr )
4064d03fd2bSBarry Smith {
4074d03fd2bSBarry Smith   matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr);
4084d03fd2bSBarry Smith }
4094d03fd2bSBarry Smith 
4104d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvalueslocaln1_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr )
4114d03fd2bSBarry Smith {
4124d03fd2bSBarry Smith   matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr);
4134d03fd2bSBarry Smith }
4144d03fd2bSBarry Smith 
41587bcf4e0SBarry Smith PETSC_EXTERN void PETSC_STDCALL  matgetrowmin_(Mat *mat,Vec *v,PetscInt idx[], int *ierr )
41687bcf4e0SBarry Smith {
41787bcf4e0SBarry Smith   CHKFORTRANNULLINTEGER(idx);
41887bcf4e0SBarry Smith   *ierr = MatGetRowMin(*mat,*v,idx);
41987bcf4e0SBarry Smith }
4204d03fd2bSBarry Smith 
42187bcf4e0SBarry Smith PETSC_EXTERN void PETSC_STDCALL  matgetrowminabs_(Mat *mat,Vec *v,PetscInt idx[], int *ierr )
42287bcf4e0SBarry Smith {
42387bcf4e0SBarry Smith   CHKFORTRANNULLINTEGER(idx);
42487bcf4e0SBarry Smith   *ierr = MatGetRowMinAbs(*mat,*v,idx);
42587bcf4e0SBarry Smith }
42687bcf4e0SBarry Smith 
4275928be6bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matgetrowmax_(Mat *mat,Vec *v,PetscInt idx[], int *ierr )
4285928be6bSBarry Smith {
4295928be6bSBarry Smith   CHKFORTRANNULLINTEGER(idx);
4305928be6bSBarry Smith   *ierr = MatGetRowMax(*mat,*v,idx);
4315928be6bSBarry Smith }
4325928be6bSBarry Smith 
4335928be6bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matgetrowmaxabs_(Mat *mat,Vec *v,PetscInt idx[], int *ierr )
4345928be6bSBarry Smith {
4355928be6bSBarry Smith   CHKFORTRANNULLINTEGER(idx);
4365928be6bSBarry Smith   *ierr = MatGetRowMaxAbs(*mat,*v,idx);
4375928be6bSBarry Smith }
4385928be6bSBarry Smith 
439b22b330cSBarry Smith static PetscErrorCode ournullfunction(MatNullSpace sp,Vec x,void *ctx)
440b22b330cSBarry Smith {
441b22b330cSBarry Smith   PetscErrorCode ierr = 0;
442b22b330cSBarry Smith   (*(void (PETSC_STDCALL *)(MatNullSpace*,Vec*,void*,PetscErrorCode*))(((PetscObject)sp)->fortran_func_pointers[0]))(&sp,&x,ctx,&ierr);CHKERRQ(ierr);
443b22b330cSBarry Smith   return 0;
444b22b330cSBarry Smith }
445b22b330cSBarry Smith 
4468cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matnullspacesetfunction_(MatNullSpace *sp, PetscErrorCode (*rem)(MatNullSpace,Vec,void*),void *ctx,PetscErrorCode *ierr)
447b22b330cSBarry Smith {
448b22b330cSBarry Smith   PetscObjectAllocateFortranPointers(*sp,1);
449b22b330cSBarry Smith   ((PetscObject)*sp)->fortran_func_pointers[0] = (PetscVoidFunction)rem;
45026fbe8dcSKarl Rupp 
451b22b330cSBarry Smith   *ierr = MatNullSpaceSetFunction(*sp,ournullfunction,ctx);
452b22b330cSBarry Smith }
453b22b330cSBarry Smith 
454d2da0f5dSBarry Smith PETSC_EXTERN void PETSC_STDCALL matcreatevecs_(Mat *mat,Vec *right,Vec *left, int *ierr)
4557c54600cSBarry Smith {
4567c54600cSBarry Smith   CHKFORTRANNULLOBJECT(right);
4577c54600cSBarry Smith   CHKFORTRANNULLOBJECT(left);
4582a7a6963SBarry Smith   *ierr = MatCreateVecs(*mat,right,left);
4597c54600cSBarry Smith }
4607c54600cSBarry Smith 
4618cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matgetrowij_(Mat *B,PetscInt *shift,PetscBool *sym,PetscBool *blockcompressed,PetscInt *n,PetscInt *ia,size_t *iia,
462ace3abfcSBarry Smith                                 PetscInt *ja,size_t *jja,PetscBool  *done,PetscErrorCode *ierr)
463f4e70085SSatish Balay {
4641a83f524SJed Brown   const PetscInt *IA,*JA;
4658f7157efSSatish Balay   *ierr = MatGetRowIJ(*B,*shift,*sym,*blockcompressed,n,&IA,&JA,done);if (*ierr) return;
4661a83f524SJed Brown   *iia  = PetscIntAddressToFortran(ia,(PetscInt*)IA);
4671a83f524SJed Brown   *jja  = PetscIntAddressToFortran(ja,(PetscInt*)JA);
468f4e70085SSatish Balay }
469f4e70085SSatish Balay 
4708cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matrestorerowij_(Mat *B,PetscInt *shift,PetscBool *sym,PetscBool *blockcompressed, PetscInt *n,PetscInt *ia,size_t *iia,
471ace3abfcSBarry Smith                                     PetscInt *ja,size_t *jja,PetscBool  *done,PetscErrorCode *ierr)
472f4e70085SSatish Balay {
4731a83f524SJed Brown   const PetscInt *IA = PetscIntAddressFromFortran(ia,*iia),*JA = PetscIntAddressFromFortran(ja,*jja);
4748f7157efSSatish Balay   *ierr = MatRestoreRowIJ(*B,*shift,*sym,*blockcompressed,n,&IA,&JA,done);
475f4e70085SSatish Balay }
476f4e70085SSatish Balay 
477f4e70085SSatish Balay /*
478f4e70085SSatish Balay    This is a poor way of storing the column and value pointers
479f4e70085SSatish Balay   generated by MatGetRow() to be returned with MatRestoreRow()
480f4e70085SSatish Balay   but there is not natural,good place else to store them. Hence
481f4e70085SSatish Balay   Fortran programmers can only have one outstanding MatGetRows()
482f4e70085SSatish Balay   at a time.
483f4e70085SSatish Balay */
484f4e70085SSatish Balay static PetscErrorCode    matgetrowactive = 0;
485f4e70085SSatish Balay static const PetscInt    *my_ocols       = 0;
486f4e70085SSatish Balay static const PetscScalar *my_ovals       = 0;
487f4e70085SSatish Balay 
4888cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matgetrow_(Mat *mat,PetscInt *row,PetscInt *ncols,PetscInt *cols,PetscScalar *vals,PetscErrorCode *ierr)
489f4e70085SSatish Balay {
490f4e70085SSatish Balay   const PetscInt    **oocols = &my_ocols;
491f4e70085SSatish Balay   const PetscScalar **oovals = &my_ovals;
492f4e70085SSatish Balay 
493f4e70085SSatish Balay   if (matgetrowactive) {
494efca3c55SSatish Balay     PetscError(PETSC_COMM_SELF,__LINE__,"MatGetRow_Fortran",__FILE__,PETSC_ERR_ARG_WRONGSTATE,PETSC_ERROR_INITIAL,
495f4e70085SSatish Balay                "Cannot have two MatGetRow() active simultaneously\n\
496f4e70085SSatish Balay                call MatRestoreRow() before calling MatGetRow() a second time");
497f4e70085SSatish Balay     *ierr = 1;
498f4e70085SSatish Balay     return;
499f4e70085SSatish Balay   }
500f4e70085SSatish Balay 
5010298fd71SBarry Smith   CHKFORTRANNULLINTEGER(cols); if (!cols) oocols = NULL;
5020298fd71SBarry Smith   CHKFORTRANNULLSCALAR(vals);  if (!vals) oovals = NULL;
503f4e70085SSatish Balay 
504f4e70085SSatish Balay   *ierr = MatGetRow(*mat,*row,ncols,oocols,oovals);
505f4e70085SSatish Balay   if (*ierr) return;
506f4e70085SSatish Balay 
507f4e70085SSatish Balay   if (oocols) { *ierr = PetscMemcpy(cols,my_ocols,(*ncols)*sizeof(PetscInt)); if (*ierr) return;}
508f4e70085SSatish Balay   if (oovals) { *ierr = PetscMemcpy(vals,my_ovals,(*ncols)*sizeof(PetscScalar)); if (*ierr) return;}
509f4e70085SSatish Balay   matgetrowactive = 1;
510f4e70085SSatish Balay }
511f4e70085SSatish Balay 
5128cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matrestorerow_(Mat *mat,PetscInt *row,PetscInt *ncols,PetscInt *cols,PetscScalar *vals,PetscErrorCode *ierr)
513f4e70085SSatish Balay {
514f4e70085SSatish Balay   const PetscInt    **oocols = &my_ocols;
515f4e70085SSatish Balay   const PetscScalar **oovals = &my_ovals;
516f4e70085SSatish Balay   if (!matgetrowactive) {
517efca3c55SSatish Balay     PetscError(PETSC_COMM_SELF,__LINE__,"MatRestoreRow_Fortran",__FILE__,PETSC_ERR_ARG_WRONGSTATE,PETSC_ERROR_INITIAL,
518f4e70085SSatish Balay                "Must call MatGetRow() first");
519f4e70085SSatish Balay     *ierr = 1;
520f4e70085SSatish Balay     return;
521f4e70085SSatish Balay   }
5220298fd71SBarry Smith   CHKFORTRANNULLINTEGER(cols); if (!cols) oocols = NULL;
5230298fd71SBarry Smith   CHKFORTRANNULLSCALAR(vals);  if (!vals) oovals = NULL;
524f4e70085SSatish Balay 
525f4e70085SSatish Balay   *ierr           = MatRestoreRow(*mat,*row,ncols,oocols,oovals);
526f4e70085SSatish Balay   matgetrowactive = 0;
527f4e70085SSatish Balay }
528f4e70085SSatish Balay 
5298cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matview_(Mat *mat,PetscViewer *vin,PetscErrorCode *ierr)
530f4e70085SSatish Balay {
531f4e70085SSatish Balay   PetscViewer v;
532f4e70085SSatish Balay   PetscPatchDefaultViewers_Fortran(vin,v);
533f4e70085SSatish Balay   *ierr = MatView(*mat,v);
534f4e70085SSatish Balay }
535f4e70085SSatish Balay 
5368cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matload_(Mat *mat,PetscViewer *vin,PetscErrorCode *ierr)
537f7e310deSShri Abhyankar {
538f7e310deSShri Abhyankar   PetscViewer v;
539f7e310deSShri Abhyankar   PetscPatchDefaultViewers_Fortran(vin,v);
540112444f4SShri Abhyankar   *ierr = MatLoad(*mat,v);
541f7e310deSShri Abhyankar }
542f7e310deSShri Abhyankar 
5438cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matseqaijgetarray_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr)
544f4e70085SSatish Balay {
545f4e70085SSatish Balay   PetscScalar *mm;
546f4e70085SSatish Balay   PetscInt    m,n;
547f4e70085SSatish Balay 
5488c778c55SBarry Smith   *ierr = MatSeqAIJGetArray(*mat,&mm); if (*ierr) return;
549f4e70085SSatish Balay   *ierr = MatGetSize(*mat,&m,&n);  if (*ierr) return;
550f91d1997SBarry Smith   *ierr = PetscScalarAddressToFortran((PetscObject)*mat,1,fa,mm,m*n,ia); if (*ierr) return;
551f4e70085SSatish Balay }
552f4e70085SSatish Balay 
5538cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matseqaijrestorearray_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr)
554f4e70085SSatish Balay {
555f4e70085SSatish Balay   PetscScalar *lx;
556f4e70085SSatish Balay   PetscInt    m,n;
557f4e70085SSatish Balay 
558f4e70085SSatish Balay   *ierr = MatGetSize(*mat,&m,&n); if (*ierr) return;
559f4e70085SSatish Balay   *ierr = PetscScalarAddressFromFortran((PetscObject)*mat,fa,*ia,m*n,&lx);if (*ierr) return;
5608c778c55SBarry Smith   *ierr = MatSeqAIJRestoreArray(*mat,&lx);if (*ierr) return;
561f4e70085SSatish Balay }
562f4e70085SSatish Balay 
5638cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matdensegetarray_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr)
56473a71a0fSBarry Smith {
56573a71a0fSBarry Smith   PetscScalar *mm;
56673a71a0fSBarry Smith   PetscInt    m,n;
56773a71a0fSBarry Smith 
5688c778c55SBarry Smith   *ierr = MatDenseGetArray(*mat,&mm); if (*ierr) return;
56973a71a0fSBarry Smith   *ierr = MatGetSize(*mat,&m,&n);  if (*ierr) return;
57073a71a0fSBarry Smith   *ierr = PetscScalarAddressToFortran((PetscObject)*mat,1,fa,mm,m*n,ia); if (*ierr) return;
57173a71a0fSBarry Smith }
57273a71a0fSBarry Smith 
5738cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matdenserestorearray_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr)
57473a71a0fSBarry Smith {
57573a71a0fSBarry Smith   PetscScalar *lx;
57673a71a0fSBarry Smith   PetscInt    m,n;
57773a71a0fSBarry Smith 
57873a71a0fSBarry Smith   *ierr = MatGetSize(*mat,&m,&n); if (*ierr) return;
57973a71a0fSBarry Smith   *ierr = PetscScalarAddressFromFortran((PetscObject)*mat,fa,*ia,m*n,&lx);if (*ierr) return;
5808c778c55SBarry Smith   *ierr = MatDenseRestoreArray(*mat,&lx);if (*ierr) return;
58173a71a0fSBarry Smith }
58273a71a0fSBarry Smith 
5837067c7f7SBarry Smith PETSC_EXTERN void PETSC_STDCALL matdensegetarrayread_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr)
5848572280aSBarry Smith {
5857067c7f7SBarry Smith   const PetscScalar *mm;
5868572280aSBarry Smith   PetscInt         m,n;
5878572280aSBarry Smith 
5888572280aSBarry Smith   *ierr = MatDenseGetArrayRead(*mat,&mm); if (*ierr) return;
5898572280aSBarry Smith   *ierr = MatGetSize(*mat,&m,&n);  if (*ierr) return;
5907067c7f7SBarry Smith   *ierr = PetscScalarAddressToFortran((PetscObject)*mat,1,fa,(PetscScalar*)mm,m*n,ia); if (*ierr) return;
5918572280aSBarry Smith }
5928572280aSBarry Smith 
5937067c7f7SBarry Smith 
5947067c7f7SBarry Smith PETSC_EXTERN void PETSC_STDCALL matdenserestorearrayread_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr)
5958572280aSBarry Smith {
5967067c7f7SBarry Smith   const PetscScalar *lx;
5978572280aSBarry Smith   PetscInt          m,n;
5988572280aSBarry Smith 
5998572280aSBarry Smith   *ierr = MatGetSize(*mat,&m,&n); if (*ierr) return;
6007067c7f7SBarry Smith   *ierr = PetscScalarAddressFromFortran((PetscObject)*mat,fa,*ia,m*n,(PetscScalar**)&lx);if (*ierr) return;
6018572280aSBarry Smith   *ierr = MatDenseRestoreArrayRead(*mat,&lx);if (*ierr) return;
6028572280aSBarry Smith }
6038572280aSBarry Smith 
604390e1bf2SBarry Smith PETSC_EXTERN void PETSC_STDCALL matfactorgetsolverpackage_(Mat *mat,char* name PETSC_MIXED_LEN(len),PetscErrorCode *ierr PETSC_END_LEN(len))
60535bd34faSBarry Smith {
60635bd34faSBarry Smith   const char *tname;
60735bd34faSBarry Smith 
6083ca39a21SBarry Smith   *ierr = MatFactorGetSolverType(*mat,&tname);if (*ierr) return;
60935bd34faSBarry Smith   if (name != PETSC_NULL_CHARACTER_Fortran) {
61035bd34faSBarry Smith     *ierr = PetscStrncpy(name,tname,len);if (*ierr) return;
61135bd34faSBarry Smith   }
61235bd34faSBarry Smith   FIXRETURNCHAR(PETSC_TRUE,name,len);
61335bd34faSBarry Smith }
61435bd34faSBarry Smith 
615390e1bf2SBarry 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))
6165dffd610SBarry Smith {
6175dffd610SBarry Smith   char *t;
6185dffd610SBarry Smith   FIXCHAR(outtype,len,t);
619d49bb8f9SBarry Smith   *ierr = MatGetFactor(*mat,t,*ftype,M);if (*ierr) return;
6205dffd610SBarry Smith   FREECHAR(outtype,t);
6215dffd610SBarry Smith }
6225dffd610SBarry Smith 
623390e1bf2SBarry 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))
624f4e70085SSatish Balay {
625f4e70085SSatish Balay   char *t;
626f4e70085SSatish Balay   FIXCHAR(outtype,len,t);
627d49bb8f9SBarry Smith   *ierr = MatConvert(*mat,t,*reuse,M);if (*ierr) return;
628f4e70085SSatish Balay   FREECHAR(outtype,t);
629f4e70085SSatish Balay }
630f4e70085SSatish Balay 
631f4e70085SSatish Balay /*
6327dae84e0SHong Zhang     MatCreateSubmatrices() is slightly different from C since the
633f4e70085SSatish Balay     Fortran provides the array to hold the submatrix objects,while in C that
6347dae84e0SHong Zhang     array is allocated by the MatCreateSubmatrices()
635f4e70085SSatish Balay */
6367dae84e0SHong Zhang PETSC_EXTERN void PETSC_STDCALL matcreatesubmatrices_(Mat *mat,PetscInt *n,IS *isrow,IS *iscol,MatReuse *scall,Mat *smat,PetscErrorCode *ierr)
637f4e70085SSatish Balay {
638f4e70085SSatish Balay   Mat      *lsmat;
639f4e70085SSatish Balay   PetscInt i;
640f4e70085SSatish Balay 
641f4e70085SSatish Balay   if (*scall == MAT_INITIAL_MATRIX) {
6427dae84e0SHong Zhang     *ierr = MatCreateSubMatrices(*mat,*n,isrow,iscol,*scall,&lsmat);
643de7ef04eSHong Zhang     for (i=0; i<=*n; i++) { /* lsmat[*n] might be a dummy matrix for saving data struc */
644f4e70085SSatish Balay       smat[i] = lsmat[i];
645f4e70085SSatish Balay     }
646f4e70085SSatish Balay     *ierr = PetscFree(lsmat);
647f4e70085SSatish Balay   } else {
6487dae84e0SHong Zhang     *ierr = MatCreateSubMatrices(*mat,*n,isrow,iscol,*scall,&smat);
649f4e70085SSatish Balay   }
650f4e70085SSatish Balay }
651f4e70085SSatish Balay 
6527d6bfa3bSBarry Smith /*
653*81ec7b92Smarius     MatCreateSubmatrices() is slightly different from C since the
654*81ec7b92Smarius     Fortran provides the array to hold the submatrix objects,while in C that
655*81ec7b92Smarius     array is allocated by the MatCreateSubmatrices()
656*81ec7b92Smarius */
657*81ec7b92Smarius PETSC_EXTERN void PETSC_STDCALL matcreatesubmatricesmpi_(Mat *mat,PetscInt *n,IS *isrow,IS *iscol,MatReuse *scall,Mat *smat,PetscErrorCode *ierr)
658*81ec7b92Smarius {
659*81ec7b92Smarius   Mat      *lsmat;
660*81ec7b92Smarius   PetscInt i;
661*81ec7b92Smarius 
662*81ec7b92Smarius   if (*scall == MAT_INITIAL_MATRIX) {
663*81ec7b92Smarius     *ierr = MatCreateSubMatricesMPI(*mat,*n,isrow,iscol,*scall,&lsmat);
664*81ec7b92Smarius     for (i=0; i<=*n; i++) { /* lsmat[*n] might be a dummy matrix for saving data struc */
665*81ec7b92Smarius       smat[i] = lsmat[i];
666*81ec7b92Smarius     }
667*81ec7b92Smarius     *ierr = PetscFree(lsmat);
668*81ec7b92Smarius   } else {
669*81ec7b92Smarius     *ierr = MatCreateSubMatricesMPI(*mat,*n,isrow,iscol,*scall,&smat);
670*81ec7b92Smarius   }
671*81ec7b92Smarius }
672*81ec7b92Smarius 
673*81ec7b92Smarius /*
6747d6bfa3bSBarry Smith     MatDestroyMatrices() is slightly different from C since the
675de7ef04eSHong Zhang     Fortran does not free the array of matrix objects, while in C that
676de7ef04eSHong Zhang     the array is freed
677de7ef04eSHong Zhang */
678de7ef04eSHong Zhang PETSC_EXTERN void PETSC_STDCALL matdestroymatrices_(PetscInt *n,Mat *smat,PetscErrorCode *ierr)
679de7ef04eSHong Zhang {
680de7ef04eSHong Zhang   PetscInt i;
681de7ef04eSHong Zhang 
682de7ef04eSHong Zhang   for (i=0; i<*n; i++) {
683de7ef04eSHong Zhang     *ierr = MatDestroy(&smat[i]);if (*ierr) return;
684de7ef04eSHong Zhang   }
685de7ef04eSHong Zhang }
686de7ef04eSHong Zhang 
687de7ef04eSHong Zhang /*
688de7ef04eSHong Zhang     MatDestroySubMatrices() is slightly different from C since the
6897d6bfa3bSBarry Smith     Fortran provides the array to hold the submatrix objects, while in C that
6907dae84e0SHong Zhang     array is allocated by the MatCreateSubmatrices()
6917d6bfa3bSBarry Smith */
692de7ef04eSHong Zhang PETSC_EXTERN void PETSC_STDCALL matdestroysubmatrices_(PetscInt *n,Mat *smat,PetscErrorCode *ierr)
6937d6bfa3bSBarry Smith {
694de7ef04eSHong Zhang   Mat      *lsmat;
6957d6bfa3bSBarry Smith   PetscInt i;
6967d6bfa3bSBarry Smith 
697de7ef04eSHong Zhang   *ierr = PetscMalloc1(*n+1,&lsmat);
698de7ef04eSHong Zhang   for (i=0; i<=*n; i++) {
699de7ef04eSHong Zhang       lsmat[i] = smat[i];
7007d6bfa3bSBarry Smith   }
701de7ef04eSHong Zhang   *ierr = MatDestroySubMatrices(*n,&lsmat);
702df750dc8SHong Zhang }
703df750dc8SHong Zhang 
704390e1bf2SBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetoptionsprefix_(Mat *mat,char* prefix PETSC_MIXED_LEN(len),PetscErrorCode *ierr PETSC_END_LEN(len))
7051eea217eSSatish Balay {
7061eea217eSSatish Balay   char *t;
7071eea217eSSatish Balay 
7081eea217eSSatish Balay   FIXCHAR(prefix,len,t);
709d49bb8f9SBarry Smith   *ierr = MatSetOptionsPrefix(*mat,t);if (*ierr) return;
7101eea217eSSatish Balay   FREECHAR(prefix,t);
7111eea217eSSatish Balay }
7121eea217eSSatish Balay 
713d0195637SJed Brown PETSC_EXTERN void PETSC_STDCALL matnullspaceremove_(MatNullSpace *sp,Vec *vec,PetscErrorCode *ierr)
714812c3f48SMatthew Knepley {
715260663b8SBarry Smith   CHKFORTRANNULLOBJECT(*sp)
716d0195637SJed Brown   *ierr = MatNullSpaceRemove(*sp,*vec);
717812c3f48SMatthew Knepley }
7181eea217eSSatish Balay 
7194d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetinfo_(Mat *mat,MatInfoType *flag,MatInfo *info, int *ierr)
7205ba43861SSatish Balay {
7214d03fd2bSBarry Smith   *ierr = MatGetInfo(*mat,*flag,info);
7225ba43861SSatish Balay }
7235ba43861SSatish Balay 
7244d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matlufactor_(Mat *mat,IS *row,IS *col,const MatFactorInfo *info, int *ierr)
72522688b47SSatish Balay {
7264d03fd2bSBarry Smith   *ierr = MatLUFactor(*mat,*row,*col,info);
72722688b47SSatish Balay }
72822688b47SSatish Balay 
7294d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matilufactor_(Mat *mat,IS *row,IS *col,const MatFactorInfo *info, int *ierr)
73022688b47SSatish Balay {
7314d03fd2bSBarry Smith   *ierr = MatILUFactor(*mat,*row,*col,info);
73222688b47SSatish Balay }
73322688b47SSatish Balay 
7344d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matlufactorsymbolic_(Mat *fact,Mat *mat,IS *row,IS *col,const MatFactorInfo *info, int *ierr)
73522688b47SSatish Balay {
7364d03fd2bSBarry Smith   *ierr = MatLUFactorSymbolic(*fact,*mat,*row,*col,info);
73722688b47SSatish Balay }
73822688b47SSatish Balay 
7394d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matlufactornumeric_(Mat *fact,Mat *mat,const MatFactorInfo *info, int *ierr)
74022688b47SSatish Balay {
7414d03fd2bSBarry Smith   *ierr = MatLUFactorNumeric(*fact,*mat,info);
74222688b47SSatish Balay }
74322688b47SSatish Balay 
7444d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matcholeskyfactor_(Mat *mat,IS *perm,const MatFactorInfo *info, int *ierr)
74522688b47SSatish Balay {
7464d03fd2bSBarry Smith   *ierr = MatCholeskyFactor(*mat,*perm,info);
74722688b47SSatish Balay }
74822688b47SSatish Balay 
7494d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matcholeskyfactorsymbolic_(Mat *fact,Mat *mat,IS *perm,const MatFactorInfo *info, int *ierr)
75022688b47SSatish Balay {
7514d03fd2bSBarry Smith   *ierr = MatCholeskyFactorSymbolic(*fact,*mat,*perm,info);
75222688b47SSatish Balay }
75322688b47SSatish Balay 
7544d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matcholeskyfactornumeric_(Mat *fact,Mat *mat,const MatFactorInfo *info, int *ierr)
75522688b47SSatish Balay {
7564d03fd2bSBarry Smith   *ierr = MatCholeskyFactorNumeric(*fact,*mat,info);
75722688b47SSatish Balay }
75822688b47SSatish Balay 
7594d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matilufactorsymbolic_(Mat *fact,Mat *mat,IS *row,IS *col,const MatFactorInfo *info, int *ierr)
76022688b47SSatish Balay {
7614d03fd2bSBarry Smith   *ierr = MatILUFactorSymbolic(*fact,*mat,*row,*col,info);
76222688b47SSatish Balay }
76322688b47SSatish Balay 
7644d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL maticcfactorsymbolic_(Mat *fact,Mat *mat,IS *perm,const MatFactorInfo *info, int *ierr)
76522688b47SSatish Balay {
7664d03fd2bSBarry Smith   *ierr = MatICCFactorSymbolic(*fact,*mat,*perm,info);
76722688b47SSatish Balay }
76822688b47SSatish Balay 
7694d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL maticcfactor_(Mat *mat,IS *row,const MatFactorInfo *info, int *ierr)
77022688b47SSatish Balay {
7714d03fd2bSBarry Smith   *ierr = MatICCFactor(*mat,*row,info);
77222688b47SSatish Balay }
77322688b47SSatish Balay 
7744d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matfactorinfoinitialize_(MatFactorInfo *info, int *ierr)
77522688b47SSatish Balay {
7764d03fd2bSBarry Smith   *ierr = MatFactorInfoInitialize(info);
77722688b47SSatish Balay }
778d27e6124SSatish Balay PETSC_EXTERN void PETSC_STDCALL  matzerorowslocal_(Mat *mat,PetscInt *numRows, PetscInt rows[],PetscScalar *diag,Vec *x,Vec *b, int *ierr)
779d27e6124SSatish Balay {
780d27e6124SSatish Balay   *ierr = MatZeroRowsLocal(*mat,*numRows,rows,*diag,*x,*b);
781d27e6124SSatish Balay }
782d27e6124SSatish Balay PETSC_EXTERN void PETSC_STDCALL  matzerorowslocal0_(Mat *mat,PetscInt *numRows, PetscInt rows[],PetscScalar *diag,Vec *x,Vec *b, int *ierr)
783d27e6124SSatish Balay {
784d27e6124SSatish Balay   matzerorowslocal_(mat,numRows,rows,diag,x,b,ierr);
785d27e6124SSatish Balay }
786d27e6124SSatish Balay PETSC_EXTERN void PETSC_STDCALL  matzerorowslocal1_(Mat *mat,PetscInt *numRows, PetscInt rows[],PetscScalar *diag,Vec *x,Vec *b, int *ierr)
787d27e6124SSatish Balay {
788d27e6124SSatish Balay   matzerorowslocal_(mat,numRows,rows,diag,x,b,ierr);
789d27e6124SSatish Balay }
790