xref: /petsc/src/mat/interface/ftn-custom/zmatrixf.c (revision 19caf8f3c08b1f0ca9f5469bde385c134aa76c82)
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
5581ec7b92Smarius #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
101fe2efc57SMark #define matviewfromoptions_              MATVIEWFROMOPTIONS
102f4e70085SSatish Balay #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE)
1034d03fd2bSBarry Smith #define matsetvalues_                    matsetvalues
1041006886cSSatish Balay #define matsetvaluesnnnn_                matsetvaluesnnnn
1053b494cfeSSatish Balay #define matsetvalues0_                   matsetvalues0
1061b266c99SBarry Smith #define matsetvaluesnn1_                 matsetvaluesnn1
1074d03fd2bSBarry Smith #define matsetvalues11_                  matsetvalues11
1084d03fd2bSBarry Smith #define matsetvaluesn1_                  matsetvaluesn1
1094d03fd2bSBarry Smith #define matsetvalues1n_                  matsetvalues1n
1104d03fd2bSBarry Smith #define matsetvalueslocal_               matsetvalueslocal
1113b494cfeSSatish Balay #define matsetvalueslocal0_              matsetvalueslocal0
1124d03fd2bSBarry Smith #define matsetvalueslocal11_             matsetvalueslocal11
1134d03fd2bSBarry Smith #define matsetvalueslocal11nn_           matsetvalueslocal11nn
1144d03fd2bSBarry Smith #define matsetvalueslocal111_            matsetvalueslocal111
1154d03fd2bSBarry Smith #define matsetvalueslocal1n_             matsetvalueslocal1n
1164d03fd2bSBarry Smith #define matsetvalueslocaln1_             matsetvalueslocaln1
1174d03fd2bSBarry Smith #define matsetvaluesblocked_             matsetvaluesblocked
1183b494cfeSSatish Balay #define matsetvaluesblocked0_            matsetvaluesblocked0
1190aee3464SBarry Smith #define matsetvaluesblocked2_            matsetvaluesblocked2
1204d03fd2bSBarry Smith #define matsetvaluesblocked11_           matsetvaluesblocked11
1214d03fd2bSBarry Smith #define matsetvaluesblocked111_          matsetvaluesblocked111
1224d03fd2bSBarry Smith #define matsetvaluesblocked1n_           matsetvaluesblocked1n
12324aa916eSSatish Balay #define matsetvaluesblockedn1_           matsetvaluesblockedn1
1244d03fd2bSBarry Smith #define matsetvaluesblockedlocal_        matsetvaluesblockedlocal
1253b494cfeSSatish Balay #define matsetvaluesblockedlocal0_       matsetvaluesblockedlocal0
1264d03fd2bSBarry Smith #define matsetvaluesblockedlocal11_      matsetvaluesblockedlocal11
1274d03fd2bSBarry Smith #define matsetvaluesblockedlocal111_     matsetvaluesblockedlocal111
1284d03fd2bSBarry Smith #define matsetvaluesblockedlocal1n_      matsetvaluesblockedlocal1n
12924aa916eSSatish Balay #define matsetvaluesblockedlocaln1_      matsetvaluesblockedlocaln1
13087bcf4e0SBarry Smith #define matgetrowmin_                    matgetrowmin
13187bcf4e0SBarry Smith #define matgetrowminabs_                 matgetrowminabs
1325928be6bSBarry Smith #define matgetrowmax_                    matgetrowmax
1335928be6bSBarry Smith #define matgetrowmaxabs_                 matgetrowmaxabs
1345928be6bSBarry Smith #define matdestroymatrices_              matdestroymatrices
135df750dc8SHong Zhang #define matdestroysubmatrices_           matdestroysubmatrices
1365dffd610SBarry Smith #define matgetfactor_                    matgetfactor
13735bd34faSBarry Smith #define matfactorgetsolverpackage_       matfactorgetsolverpackage
138fcc9d04bSBarry Smith #define matcreatevecs_                   matcreatevecs
139f4e70085SSatish Balay #define matgetrowij_                     matgetrowij
140f4e70085SSatish Balay #define matrestorerowij_                 matrestorerowij
141f4e70085SSatish Balay #define matgetrow_                       matgetrow
142f4e70085SSatish Balay #define matrestorerow_                   matrestorerow
143f4e70085SSatish Balay #define matview_                         matview
144f7e310deSShri Abhyankar #define matload_                         matload
1458c778c55SBarry Smith #define matseqaijgetarray_               matseqaijgetarray
1468c778c55SBarry Smith #define matseqaijrestorearray_           matseqaijrestorearray
1478c778c55SBarry Smith #define matdensegetarray_                matdensegetarray
1488572280aSBarry Smith #define matdensegetarrayread_            matdensegetarrayread
1498c778c55SBarry Smith #define matdenserestorearray_            matdenserestorearray
1508572280aSBarry Smith #define matdenserestorearrayread_        matdenserestorearrayread
151f4e70085SSatish Balay #define matconvert_                      matconvert
1527dae84e0SHong Zhang #define matcreatesubmatrices_            matcreatesubmatrices
15381ec7b92Smarius #define matcreatesubmatricesmpi_         matcreatesubmatricesmpi
15417ede90eSSatish Balay #define matzerorowscolumns_              matzerorowscolumns
15517ede90eSSatish Balay #define matzerorowscolumnsis_            matzerorowscolumnsis
15617ede90eSSatish Balay #define matzerorowsstencil_              matzerorowsstencil
157d25a37e1SJed Brown #define matzerorowscolumnsstencil_       matzerorowscolumnsstencil
158f4e70085SSatish Balay #define matzerorows_                     matzerorows
159f4e70085SSatish Balay #define matzerorowsis_                   matzerorowsis
160f4e70085SSatish Balay #define matzerorowslocal_                matzerorowslocal
161f4e70085SSatish Balay #define matzerorowslocalis_              matzerorowslocalis
16217ede90eSSatish Balay #define matzerorowscolumnslocal_         matzerorowscolumnslocal
16317ede90eSSatish Balay #define matzerorowscolumnslocalis_       matzerorowscolumnslocalis
1641eea217eSSatish Balay #define matsetoptionsprefix_             matsetoptionsprefix
165812c3f48SMatthew Knepley #define matnullspaceremove_              matnullspaceremove
1665ba43861SSatish Balay #define matgetinfo_                      matgetinfo
16722688b47SSatish Balay #define matlufactor_                     matlufactor
16822688b47SSatish Balay #define matilufactor_                    matilufactor
16922688b47SSatish Balay #define matlufactorsymbolic_             matlufactorsymbolic
17022688b47SSatish Balay #define matlufactornumeric_              matlufactornumeric
17122688b47SSatish Balay #define matcholeskyfactor_               matcholeskyfactor
17222688b47SSatish Balay #define matcholeskyfactorsymbolic_       matcholeskyfactorsymbolic
17322688b47SSatish Balay #define matcholeskyfactornumeric_        matcholeskyfactornumeric
17422688b47SSatish Balay #define matilufactorsymbolic_            matilufactorsymbolic
17522688b47SSatish Balay #define maticcfactorsymbolic_            maticcfactorsymbolic
17622688b47SSatish Balay #define maticcfactor_                    maticcfactor
17722688b47SSatish Balay #define matfactorinfoinitialize_         matfactorinfoinitialize
178b22b330cSBarry Smith #define matnullspacesetfunction_         matnullspacesetfunction
1790905d9aaSJed Brown #define matfindnonzerorows_              matfindnonzerorows
18038135fcbSMartin Diehl #define matgetsize_                      matgetsize
1813be0408cSBarry Smith #define matgetsize00_                    matgetsize00
1823be0408cSBarry Smith #define matgetsize10_                    matgetsize10
1833be0408cSBarry Smith #define matgetsize01_                    matgetsize01
18438135fcbSMartin Diehl #define matgetlocalsize_                 matgetlocalsize
1853be0408cSBarry Smith #define matgetlocalsize00_               matgetlocalsize00
1863be0408cSBarry Smith #define matgetlocalsize10_               matgetlocalsize10
1873be0408cSBarry Smith #define matgetlocalsize01_               matgetlocalsize01
188260663b8SBarry Smith #define matsetnullspace_                 matsetnullspace
189260663b8SBarry Smith #define matgetownershiprange_            matgetownershiprange
19091f56e93SMartin Diehl #define matgetownershiprange00_          matgetownershiprange00
19191f56e93SMartin Diehl #define matgetownershiprange10_          matgetownershiprange10
19291f56e93SMartin Diehl #define matgetownershiprange01_          matgetownershiprange01
19391f56e93SMartin Diehl #define matgetownershiprange11_          matgetownershiprange11
194c08c7cb9SBarry Smith #define matgetownershipis_               matgetownershipis
195afc39838SBarry Smith #define matgetownershiprangecolumn_      matgetownershiprangecolumn
196fe2efc57SMark #define matviewfromoptions_              matviewfromoptions
197f4e70085SSatish Balay #endif
198f4e70085SSatish Balay 
199*19caf8f3SSatish Balay PETSC_EXTERN void  matgetownershiprange_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr )
200260663b8SBarry Smith {
201260663b8SBarry Smith   CHKFORTRANNULLINTEGER(m);
202260663b8SBarry Smith   CHKFORTRANNULLINTEGER(n);
203260663b8SBarry Smith   *ierr = MatGetOwnershipRange(*mat,m,n);
204260663b8SBarry Smith }
205260663b8SBarry Smith 
206*19caf8f3SSatish Balay PETSC_EXTERN void  matgetownershiprange00_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr )
2075dd307cdSMartin Diehl {
2085dd307cdSMartin Diehl   CHKFORTRANNULLINTEGER(m);
2095dd307cdSMartin Diehl   CHKFORTRANNULLINTEGER(n);
2105dd307cdSMartin Diehl   *ierr = MatGetOwnershipRange(*mat,m,n);
2115dd307cdSMartin Diehl }
2125dd307cdSMartin Diehl 
213*19caf8f3SSatish Balay PETSC_EXTERN void  matgetownershiprange10_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr )
2145dd307cdSMartin Diehl {
2155dd307cdSMartin Diehl   CHKFORTRANNULLINTEGER(m);
2165dd307cdSMartin Diehl   CHKFORTRANNULLINTEGER(n);
2175dd307cdSMartin Diehl   *ierr = MatGetOwnershipRange(*mat,m,n);
2185dd307cdSMartin Diehl }
2195dd307cdSMartin Diehl 
220*19caf8f3SSatish Balay PETSC_EXTERN void  matgetownershiprange01_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr )
2215dd307cdSMartin Diehl {
2225dd307cdSMartin Diehl   CHKFORTRANNULLINTEGER(m);
2235dd307cdSMartin Diehl   CHKFORTRANNULLINTEGER(n);
2245dd307cdSMartin Diehl   *ierr = MatGetOwnershipRange(*mat,m,n);
2255dd307cdSMartin Diehl }
2265dd307cdSMartin Diehl 
227*19caf8f3SSatish Balay PETSC_EXTERN void  matgetownershiprange11_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr )
2285dd307cdSMartin Diehl {
2295dd307cdSMartin Diehl   CHKFORTRANNULLINTEGER(m);
2305dd307cdSMartin Diehl   CHKFORTRANNULLINTEGER(n);
2315dd307cdSMartin Diehl   *ierr = MatGetOwnershipRange(*mat,m,n);
2325dd307cdSMartin Diehl }
2335dd307cdSMartin Diehl 
234*19caf8f3SSatish Balay PETSC_EXTERN void  matgetownershipis_(Mat *mat,IS *m,IS *n, int *ierr )
235c08c7cb9SBarry Smith {
236c08c7cb9SBarry Smith   CHKFORTRANNULLOBJECT(m);
237c08c7cb9SBarry Smith   CHKFORTRANNULLOBJECT(n);
238c08c7cb9SBarry Smith   *ierr = MatGetOwnershipIS(*mat,m,n);
239c08c7cb9SBarry Smith }
240c08c7cb9SBarry Smith 
241*19caf8f3SSatish Balay PETSC_EXTERN void  matgetownershiprangecolumn_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr )
242afc39838SBarry Smith {
243afc39838SBarry Smith   CHKFORTRANNULLINTEGER(m);
244afc39838SBarry Smith   CHKFORTRANNULLINTEGER(n);
245afc39838SBarry Smith   *ierr = MatGetOwnershipRangeColumn(*mat,m,n);
246afc39838SBarry Smith }
247afc39838SBarry Smith 
248*19caf8f3SSatish Balay PETSC_EXTERN void  matgetsize_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr )
2493be0408cSBarry Smith {
2503be0408cSBarry Smith   CHKFORTRANNULLINTEGER(m);
2513be0408cSBarry Smith   CHKFORTRANNULLINTEGER(n);
2523be0408cSBarry Smith   *ierr = MatGetSize(*mat,m,n);
2533be0408cSBarry Smith }
2543be0408cSBarry Smith 
255*19caf8f3SSatish Balay PETSC_EXTERN void  matgetsize00_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr )
2563be0408cSBarry Smith {
2573be0408cSBarry Smith   matgetsize_(mat,m,n,ierr);
2583be0408cSBarry Smith }
2593be0408cSBarry Smith 
260*19caf8f3SSatish Balay PETSC_EXTERN void  matgetsize10_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr )
2613be0408cSBarry Smith {
2623be0408cSBarry Smith   matgetsize_(mat,m,n,ierr);
2633be0408cSBarry Smith }
2643be0408cSBarry Smith 
265*19caf8f3SSatish Balay PETSC_EXTERN void  matgetsize01_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr )
2663be0408cSBarry Smith {
2673be0408cSBarry Smith   matgetsize_(mat,m,n,ierr);
2683be0408cSBarry Smith }
2693be0408cSBarry Smith 
270*19caf8f3SSatish Balay PETSC_EXTERN void  matgetlocalsize_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr )
2713be0408cSBarry Smith {
2723be0408cSBarry Smith   CHKFORTRANNULLINTEGER(m);
2733be0408cSBarry Smith   CHKFORTRANNULLINTEGER(n);
2743be0408cSBarry Smith   *ierr = MatGetLocalSize(*mat,m,n);
2753be0408cSBarry Smith }
2763be0408cSBarry Smith 
277*19caf8f3SSatish Balay PETSC_EXTERN void  matgetlocalsize00_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr )
2783be0408cSBarry Smith {
2793be0408cSBarry Smith   matgetlocalsize_(mat,m,n,ierr);
2803be0408cSBarry Smith }
2813be0408cSBarry Smith 
282*19caf8f3SSatish Balay PETSC_EXTERN void  matgetlocalsize10_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr )
2833be0408cSBarry Smith {
2843be0408cSBarry Smith   matgetlocalsize_(mat,m,n,ierr);
2853be0408cSBarry Smith }
2863be0408cSBarry Smith 
287*19caf8f3SSatish Balay PETSC_EXTERN void  matgetlocalsize01_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr )
2883be0408cSBarry Smith {
2893be0408cSBarry Smith   matgetlocalsize_(mat,m,n,ierr);
2903be0408cSBarry Smith }
2913be0408cSBarry Smith 
292*19caf8f3SSatish Balay PETSC_EXTERN void  matsetvaluesblocked_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){
2934d03fd2bSBarry Smith   *ierr = MatSetValuesBlocked(*mat,*m,idxm,*n,idxn,v,*addv);
2944d03fd2bSBarry Smith }
2954d03fd2bSBarry Smith 
296*19caf8f3SSatish Balay PETSC_EXTERN void  matsetvaluesblocked2_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], F90Array2d *y,InsertMode *addv, int *ierr PETSC_F90_2PTR_PROTO(ptrd)){
297cee688dbSBarry Smith   PetscScalar *fa;
2980aee3464SBarry Smith   *ierr = F90Array2dAccess(y,MPIU_SCALAR,(void**)&fa PETSC_F90_2PTR_PARAM(ptrd));if (*ierr) return;
299cee688dbSBarry Smith   matsetvaluesblocked_(mat,m,idxm,n,idxn,fa,addv,ierr);
300cee688dbSBarry Smith }
301cee688dbSBarry Smith 
302*19caf8f3SSatish Balay PETSC_EXTERN void  matsetvaluesblocked0_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){
3033b494cfeSSatish Balay   matsetvaluesblocked_(mat,m,idxm,n,idxn,v,addv,ierr);
3043b494cfeSSatish Balay }
3053b494cfeSSatish Balay 
306*19caf8f3SSatish Balay PETSC_EXTERN void  matsetvaluesblocked11_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){
3074d03fd2bSBarry Smith   matsetvaluesblocked_(mat,m,idxm,n,idxn,v,addv,ierr);
3084d03fd2bSBarry Smith }
3094d03fd2bSBarry Smith 
310*19caf8f3SSatish Balay PETSC_EXTERN void  matsetvaluesblocked111_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){
3114d03fd2bSBarry Smith   matsetvaluesblocked_(mat,m,idxm,n,idxn,v,addv,ierr);
3124d03fd2bSBarry Smith }
3134d03fd2bSBarry Smith 
314*19caf8f3SSatish Balay PETSC_EXTERN void  matsetvaluesblocked1n_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){
3154d03fd2bSBarry Smith   matsetvaluesblocked_(mat,m,idxm,n,idxn,v,addv,ierr);
3164d03fd2bSBarry Smith }
3174d03fd2bSBarry Smith 
318*19caf8f3SSatish Balay PETSC_EXTERN void  matsetvaluesblockedn1_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){
3194d03fd2bSBarry Smith   matsetvaluesblocked_(mat,m,idxm,n,idxn,v,addv,ierr);
3204d03fd2bSBarry Smith }
3214d03fd2bSBarry Smith 
322*19caf8f3SSatish Balay PETSC_EXTERN void  matsetvaluesblockedlocal_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr )
3234d03fd2bSBarry Smith {
3244d03fd2bSBarry Smith   *ierr = MatSetValuesBlockedLocal(*mat,*nrow,irow,*ncol,icol,y,*addv);
3254d03fd2bSBarry Smith }
3264d03fd2bSBarry Smith 
327*19caf8f3SSatish Balay PETSC_EXTERN void  matsetvaluesblockedlocal0_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){
3283b494cfeSSatish Balay   matsetvaluesblockedlocal_(mat,m,idxm,n,idxn,v,addv,ierr);
3293b494cfeSSatish Balay }
3303b494cfeSSatish Balay 
331*19caf8f3SSatish Balay PETSC_EXTERN void  matsetvaluesblockedlocal11_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){
3324d03fd2bSBarry Smith   matsetvaluesblockedlocal_(mat,m,idxm,n,idxn,v,addv,ierr);
3334d03fd2bSBarry Smith }
3344d03fd2bSBarry Smith 
335*19caf8f3SSatish Balay PETSC_EXTERN void  matsetvaluesblockedlocal111_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){
3364d03fd2bSBarry Smith   matsetvaluesblockedlocal_(mat,m,idxm,n,idxn,v,addv,ierr);
3374d03fd2bSBarry Smith }
3384d03fd2bSBarry Smith 
339*19caf8f3SSatish Balay PETSC_EXTERN void  matsetvaluesblockedlocal1n_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){
3404d03fd2bSBarry Smith   matsetvaluesblockedlocal_(mat,m,idxm,n,idxn,v,addv,ierr);
3414d03fd2bSBarry Smith }
3424d03fd2bSBarry Smith 
343*19caf8f3SSatish Balay PETSC_EXTERN void  matsetvaluesblockedlocaln1_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){
3444d03fd2bSBarry Smith   matsetvaluesblockedlocal_(mat,m,idxm,n,idxn,v,addv,ierr);
3454d03fd2bSBarry Smith }
3464d03fd2bSBarry Smith 
347*19caf8f3SSatish Balay PETSC_EXTERN void  matsetvalues_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr )
3484d03fd2bSBarry Smith {
3494d03fd2bSBarry Smith   *ierr = MatSetValues(*mat,*m,idxm,*n,idxn,v,*addv);
3504d03fd2bSBarry Smith }
3514d03fd2bSBarry Smith 
352*19caf8f3SSatish Balay PETSC_EXTERN void  matsetvaluesnnnn_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr )
3531b266c99SBarry Smith {
3541b266c99SBarry Smith   matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr);
3551b266c99SBarry Smith }
3561b266c99SBarry Smith 
357*19caf8f3SSatish Balay PETSC_EXTERN void  matsetvalues0_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr )
3583b494cfeSSatish Balay {
3593b494cfeSSatish Balay   matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr);
3603b494cfeSSatish Balay }
3613b494cfeSSatish Balay 
362*19caf8f3SSatish Balay PETSC_EXTERN void  matsetvaluesnn1_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr )
3631b266c99SBarry Smith {
3641b266c99SBarry Smith   matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr);
3651b266c99SBarry Smith }
3661b266c99SBarry Smith 
367*19caf8f3SSatish Balay PETSC_EXTERN void  matsetvalues11_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr )
3684d03fd2bSBarry Smith {
3694d03fd2bSBarry Smith   matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr);
3704d03fd2bSBarry Smith }
3714d03fd2bSBarry Smith 
372*19caf8f3SSatish Balay PETSC_EXTERN void  matsetvaluesn1_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr )
3734d03fd2bSBarry Smith {
3744d03fd2bSBarry Smith   matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr);
3754d03fd2bSBarry Smith }
3764d03fd2bSBarry Smith 
377*19caf8f3SSatish Balay PETSC_EXTERN void  matsetvalues1n_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr )
3784d03fd2bSBarry Smith {
3794d03fd2bSBarry Smith   matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr);
3804d03fd2bSBarry Smith }
3814d03fd2bSBarry Smith 
382*19caf8f3SSatish Balay PETSC_EXTERN void  matsetvalueslocal_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr )
3834d03fd2bSBarry Smith {
3844d03fd2bSBarry Smith   *ierr = MatSetValuesLocal(*mat,*nrow,irow,*ncol,icol,y,*addv);
3854d03fd2bSBarry Smith }
3864d03fd2bSBarry Smith 
387*19caf8f3SSatish Balay PETSC_EXTERN void  matsetvalueslocal0_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr )
3883b494cfeSSatish Balay {
3893b494cfeSSatish Balay   matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr);
3903b494cfeSSatish Balay }
3913b494cfeSSatish Balay 
392*19caf8f3SSatish Balay PETSC_EXTERN void  matsetvalueslocal11_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr )
3934d03fd2bSBarry Smith {
3944d03fd2bSBarry Smith   matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr);
3954d03fd2bSBarry Smith }
3964d03fd2bSBarry Smith 
397*19caf8f3SSatish Balay PETSC_EXTERN void  matsetvalueslocal11nn_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr )
3984d03fd2bSBarry Smith {
3994d03fd2bSBarry Smith   matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr);
4004d03fd2bSBarry Smith }
4014d03fd2bSBarry Smith 
402*19caf8f3SSatish Balay PETSC_EXTERN void  matsetvalueslocal111_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr )
4034d03fd2bSBarry Smith {
4044d03fd2bSBarry Smith   matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr);
4054d03fd2bSBarry Smith }
4064d03fd2bSBarry Smith 
407*19caf8f3SSatish Balay PETSC_EXTERN void  matsetvalueslocal1n_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr )
4084d03fd2bSBarry Smith {
4094d03fd2bSBarry Smith   matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr);
4104d03fd2bSBarry Smith }
4114d03fd2bSBarry Smith 
412*19caf8f3SSatish Balay PETSC_EXTERN void  matsetvalueslocaln1_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr )
4134d03fd2bSBarry Smith {
4144d03fd2bSBarry Smith   matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr);
4154d03fd2bSBarry Smith }
4164d03fd2bSBarry Smith 
417*19caf8f3SSatish Balay PETSC_EXTERN void  matgetrowmin_(Mat *mat,Vec *v,PetscInt idx[], int *ierr )
41887bcf4e0SBarry Smith {
41987bcf4e0SBarry Smith   CHKFORTRANNULLINTEGER(idx);
42087bcf4e0SBarry Smith   *ierr = MatGetRowMin(*mat,*v,idx);
42187bcf4e0SBarry Smith }
4224d03fd2bSBarry Smith 
423*19caf8f3SSatish Balay PETSC_EXTERN void  matgetrowminabs_(Mat *mat,Vec *v,PetscInt idx[], int *ierr )
42487bcf4e0SBarry Smith {
42587bcf4e0SBarry Smith   CHKFORTRANNULLINTEGER(idx);
42687bcf4e0SBarry Smith   *ierr = MatGetRowMinAbs(*mat,*v,idx);
42787bcf4e0SBarry Smith }
42887bcf4e0SBarry Smith 
429*19caf8f3SSatish Balay PETSC_EXTERN void  matgetrowmax_(Mat *mat,Vec *v,PetscInt idx[], int *ierr )
4305928be6bSBarry Smith {
4315928be6bSBarry Smith   CHKFORTRANNULLINTEGER(idx);
4325928be6bSBarry Smith   *ierr = MatGetRowMax(*mat,*v,idx);
4335928be6bSBarry Smith }
4345928be6bSBarry Smith 
435*19caf8f3SSatish Balay PETSC_EXTERN void  matgetrowmaxabs_(Mat *mat,Vec *v,PetscInt idx[], int *ierr )
4365928be6bSBarry Smith {
4375928be6bSBarry Smith   CHKFORTRANNULLINTEGER(idx);
4385928be6bSBarry Smith   *ierr = MatGetRowMaxAbs(*mat,*v,idx);
4395928be6bSBarry Smith }
4405928be6bSBarry Smith 
441b22b330cSBarry Smith static PetscErrorCode ournullfunction(MatNullSpace sp,Vec x,void *ctx)
442b22b330cSBarry Smith {
443b22b330cSBarry Smith   PetscErrorCode ierr = 0;
444*19caf8f3SSatish Balay   (*(void (*)(MatNullSpace*,Vec*,void*,PetscErrorCode*))(((PetscObject)sp)->fortran_func_pointers[0]))(&sp,&x,ctx,&ierr);CHKERRQ(ierr);
445b22b330cSBarry Smith   return 0;
446b22b330cSBarry Smith }
447b22b330cSBarry Smith 
448*19caf8f3SSatish Balay PETSC_EXTERN void matnullspacesetfunction_(MatNullSpace *sp, PetscErrorCode (*rem)(MatNullSpace,Vec,void*),void *ctx,PetscErrorCode *ierr)
449b22b330cSBarry Smith {
450b22b330cSBarry Smith   PetscObjectAllocateFortranPointers(*sp,1);
451b22b330cSBarry Smith   ((PetscObject)*sp)->fortran_func_pointers[0] = (PetscVoidFunction)rem;
45226fbe8dcSKarl Rupp 
453b22b330cSBarry Smith   *ierr = MatNullSpaceSetFunction(*sp,ournullfunction,ctx);
454b22b330cSBarry Smith }
455b22b330cSBarry Smith 
456*19caf8f3SSatish Balay PETSC_EXTERN void matcreatevecs_(Mat *mat,Vec *right,Vec *left, int *ierr)
4577c54600cSBarry Smith {
4587c54600cSBarry Smith   CHKFORTRANNULLOBJECT(right);
4597c54600cSBarry Smith   CHKFORTRANNULLOBJECT(left);
4602a7a6963SBarry Smith   *ierr = MatCreateVecs(*mat,right,left);
4617c54600cSBarry Smith }
4627c54600cSBarry Smith 
463*19caf8f3SSatish Balay PETSC_EXTERN void matgetrowij_(Mat *B,PetscInt *shift,PetscBool *sym,PetscBool *blockcompressed,PetscInt *n,PetscInt *ia,size_t *iia,
464ace3abfcSBarry Smith                                 PetscInt *ja,size_t *jja,PetscBool  *done,PetscErrorCode *ierr)
465f4e70085SSatish Balay {
4661a83f524SJed Brown   const PetscInt *IA,*JA;
4678f7157efSSatish Balay   *ierr = MatGetRowIJ(*B,*shift,*sym,*blockcompressed,n,&IA,&JA,done);if (*ierr) return;
4681a83f524SJed Brown   *iia  = PetscIntAddressToFortran(ia,(PetscInt*)IA);
4691a83f524SJed Brown   *jja  = PetscIntAddressToFortran(ja,(PetscInt*)JA);
470f4e70085SSatish Balay }
471f4e70085SSatish Balay 
472*19caf8f3SSatish Balay PETSC_EXTERN void matrestorerowij_(Mat *B,PetscInt *shift,PetscBool *sym,PetscBool *blockcompressed, PetscInt *n,PetscInt *ia,size_t *iia,
473ace3abfcSBarry Smith                                     PetscInt *ja,size_t *jja,PetscBool  *done,PetscErrorCode *ierr)
474f4e70085SSatish Balay {
4751a83f524SJed Brown   const PetscInt *IA = PetscIntAddressFromFortran(ia,*iia),*JA = PetscIntAddressFromFortran(ja,*jja);
4768f7157efSSatish Balay   *ierr = MatRestoreRowIJ(*B,*shift,*sym,*blockcompressed,n,&IA,&JA,done);
477f4e70085SSatish Balay }
478f4e70085SSatish Balay 
479f4e70085SSatish Balay /*
480f4e70085SSatish Balay    This is a poor way of storing the column and value pointers
481f4e70085SSatish Balay   generated by MatGetRow() to be returned with MatRestoreRow()
482f4e70085SSatish Balay   but there is not natural,good place else to store them. Hence
483f4e70085SSatish Balay   Fortran programmers can only have one outstanding MatGetRows()
484f4e70085SSatish Balay   at a time.
485f4e70085SSatish Balay */
486f4e70085SSatish Balay static PetscErrorCode    matgetrowactive = 0;
487f4e70085SSatish Balay static const PetscInt    *my_ocols       = 0;
488f4e70085SSatish Balay static const PetscScalar *my_ovals       = 0;
489f4e70085SSatish Balay 
490*19caf8f3SSatish Balay PETSC_EXTERN void matgetrow_(Mat *mat,PetscInt *row,PetscInt *ncols,PetscInt *cols,PetscScalar *vals,PetscErrorCode *ierr)
491f4e70085SSatish Balay {
492f4e70085SSatish Balay   const PetscInt    **oocols = &my_ocols;
493f4e70085SSatish Balay   const PetscScalar **oovals = &my_ovals;
494f4e70085SSatish Balay 
495f4e70085SSatish Balay   if (matgetrowactive) {
496efca3c55SSatish Balay     PetscError(PETSC_COMM_SELF,__LINE__,"MatGetRow_Fortran",__FILE__,PETSC_ERR_ARG_WRONGSTATE,PETSC_ERROR_INITIAL,
497f4e70085SSatish Balay                "Cannot have two MatGetRow() active simultaneously\n\
498f4e70085SSatish Balay                call MatRestoreRow() before calling MatGetRow() a second time");
499f4e70085SSatish Balay     *ierr = 1;
500f4e70085SSatish Balay     return;
501f4e70085SSatish Balay   }
502f4e70085SSatish Balay 
5030298fd71SBarry Smith   CHKFORTRANNULLINTEGER(cols); if (!cols) oocols = NULL;
5040298fd71SBarry Smith   CHKFORTRANNULLSCALAR(vals);  if (!vals) oovals = NULL;
505f4e70085SSatish Balay 
506f4e70085SSatish Balay   *ierr = MatGetRow(*mat,*row,ncols,oocols,oovals);
507f4e70085SSatish Balay   if (*ierr) return;
508f4e70085SSatish Balay 
509580bdb30SBarry Smith   if (oocols) { *ierr = PetscArraycpy(cols,my_ocols,*ncols); if (*ierr) return;}
510580bdb30SBarry Smith   if (oovals) { *ierr = PetscArraycpy(vals,my_ovals,*ncols); if (*ierr) return;}
511f4e70085SSatish Balay   matgetrowactive = 1;
512f4e70085SSatish Balay }
513f4e70085SSatish Balay 
514*19caf8f3SSatish Balay PETSC_EXTERN void matrestorerow_(Mat *mat,PetscInt *row,PetscInt *ncols,PetscInt *cols,PetscScalar *vals,PetscErrorCode *ierr)
515f4e70085SSatish Balay {
516f4e70085SSatish Balay   const PetscInt    **oocols = &my_ocols;
517f4e70085SSatish Balay   const PetscScalar **oovals = &my_ovals;
518f4e70085SSatish Balay   if (!matgetrowactive) {
519efca3c55SSatish Balay     PetscError(PETSC_COMM_SELF,__LINE__,"MatRestoreRow_Fortran",__FILE__,PETSC_ERR_ARG_WRONGSTATE,PETSC_ERROR_INITIAL,
520f4e70085SSatish Balay                "Must call MatGetRow() first");
521f4e70085SSatish Balay     *ierr = 1;
522f4e70085SSatish Balay     return;
523f4e70085SSatish Balay   }
5240298fd71SBarry Smith   CHKFORTRANNULLINTEGER(cols); if (!cols) oocols = NULL;
5250298fd71SBarry Smith   CHKFORTRANNULLSCALAR(vals);  if (!vals) oovals = NULL;
526f4e70085SSatish Balay 
527f4e70085SSatish Balay   *ierr           = MatRestoreRow(*mat,*row,ncols,oocols,oovals);
528f4e70085SSatish Balay   matgetrowactive = 0;
529f4e70085SSatish Balay }
530f4e70085SSatish Balay 
531*19caf8f3SSatish Balay PETSC_EXTERN void matview_(Mat *mat,PetscViewer *vin,PetscErrorCode *ierr)
532f4e70085SSatish Balay {
533f4e70085SSatish Balay   PetscViewer v;
534f4e70085SSatish Balay   PetscPatchDefaultViewers_Fortran(vin,v);
535f4e70085SSatish Balay   *ierr = MatView(*mat,v);
536f4e70085SSatish Balay }
537f4e70085SSatish Balay 
538*19caf8f3SSatish Balay PETSC_EXTERN void matload_(Mat *mat,PetscViewer *vin,PetscErrorCode *ierr)
539f7e310deSShri Abhyankar {
540f7e310deSShri Abhyankar   PetscViewer v;
541f7e310deSShri Abhyankar   PetscPatchDefaultViewers_Fortran(vin,v);
542112444f4SShri Abhyankar   *ierr = MatLoad(*mat,v);
543f7e310deSShri Abhyankar }
544f7e310deSShri Abhyankar 
545*19caf8f3SSatish Balay PETSC_EXTERN void matseqaijgetarray_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr)
546f4e70085SSatish Balay {
547f4e70085SSatish Balay   PetscScalar *mm;
548f4e70085SSatish Balay   PetscInt    m,n;
549f4e70085SSatish Balay 
5508c778c55SBarry Smith   *ierr = MatSeqAIJGetArray(*mat,&mm); if (*ierr) return;
551f4e70085SSatish Balay   *ierr = MatGetSize(*mat,&m,&n);  if (*ierr) return;
552f91d1997SBarry Smith   *ierr = PetscScalarAddressToFortran((PetscObject)*mat,1,fa,mm,m*n,ia); if (*ierr) return;
553f4e70085SSatish Balay }
554f4e70085SSatish Balay 
555*19caf8f3SSatish Balay PETSC_EXTERN void matseqaijrestorearray_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr)
556f4e70085SSatish Balay {
557f4e70085SSatish Balay   PetscScalar *lx;
558f4e70085SSatish Balay   PetscInt    m,n;
559f4e70085SSatish Balay 
560f4e70085SSatish Balay   *ierr = MatGetSize(*mat,&m,&n); if (*ierr) return;
561f4e70085SSatish Balay   *ierr = PetscScalarAddressFromFortran((PetscObject)*mat,fa,*ia,m*n,&lx);if (*ierr) return;
5628c778c55SBarry Smith   *ierr = MatSeqAIJRestoreArray(*mat,&lx);if (*ierr) return;
563f4e70085SSatish Balay }
564f4e70085SSatish Balay 
565*19caf8f3SSatish Balay PETSC_EXTERN void matdensegetarray_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr)
56673a71a0fSBarry Smith {
56773a71a0fSBarry Smith   PetscScalar *mm;
56873a71a0fSBarry Smith   PetscInt    m,n;
56973a71a0fSBarry Smith 
5708c778c55SBarry Smith   *ierr = MatDenseGetArray(*mat,&mm); if (*ierr) return;
57173a71a0fSBarry Smith   *ierr = MatGetSize(*mat,&m,&n);  if (*ierr) return;
57273a71a0fSBarry Smith   *ierr = PetscScalarAddressToFortran((PetscObject)*mat,1,fa,mm,m*n,ia); if (*ierr) return;
57373a71a0fSBarry Smith }
57473a71a0fSBarry Smith 
575*19caf8f3SSatish Balay PETSC_EXTERN void matdenserestorearray_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr)
57673a71a0fSBarry Smith {
57773a71a0fSBarry Smith   PetscScalar *lx;
57873a71a0fSBarry Smith   PetscInt    m,n;
57973a71a0fSBarry Smith 
58073a71a0fSBarry Smith   *ierr = MatGetSize(*mat,&m,&n); if (*ierr) return;
58173a71a0fSBarry Smith   *ierr = PetscScalarAddressFromFortran((PetscObject)*mat,fa,*ia,m*n,&lx);if (*ierr) return;
5828c778c55SBarry Smith   *ierr = MatDenseRestoreArray(*mat,&lx);if (*ierr) return;
58373a71a0fSBarry Smith }
58473a71a0fSBarry Smith 
585*19caf8f3SSatish Balay PETSC_EXTERN void matdensegetarrayread_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr)
5868572280aSBarry Smith {
5877067c7f7SBarry Smith   const PetscScalar *mm;
5888572280aSBarry Smith   PetscInt         m,n;
5898572280aSBarry Smith 
5908572280aSBarry Smith   *ierr = MatDenseGetArrayRead(*mat,&mm); if (*ierr) return;
5918572280aSBarry Smith   *ierr = MatGetSize(*mat,&m,&n);  if (*ierr) return;
5927067c7f7SBarry Smith   *ierr = PetscScalarAddressToFortran((PetscObject)*mat,1,fa,(PetscScalar*)mm,m*n,ia); if (*ierr) return;
5938572280aSBarry Smith }
5948572280aSBarry Smith 
5957067c7f7SBarry Smith 
596*19caf8f3SSatish Balay PETSC_EXTERN void matdenserestorearrayread_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr)
5978572280aSBarry Smith {
5987067c7f7SBarry Smith   const PetscScalar *lx;
5998572280aSBarry Smith   PetscInt          m,n;
6008572280aSBarry Smith 
6018572280aSBarry Smith   *ierr = MatGetSize(*mat,&m,&n); if (*ierr) return;
6027067c7f7SBarry Smith   *ierr = PetscScalarAddressFromFortran((PetscObject)*mat,fa,*ia,m*n,(PetscScalar**)&lx);if (*ierr) return;
6038572280aSBarry Smith   *ierr = MatDenseRestoreArrayRead(*mat,&lx);if (*ierr) return;
6048572280aSBarry Smith }
6058572280aSBarry Smith 
606*19caf8f3SSatish Balay PETSC_EXTERN void matfactorgetsolverpackage_(Mat *mat,char* name,PetscErrorCode *ierr,PETSC_FORTRAN_CHARLEN_T len)
60735bd34faSBarry Smith {
60835bd34faSBarry Smith   const char *tname;
60935bd34faSBarry Smith 
6103ca39a21SBarry Smith   *ierr = MatFactorGetSolverType(*mat,&tname);if (*ierr) return;
61135bd34faSBarry Smith   if (name != PETSC_NULL_CHARACTER_Fortran) {
61235bd34faSBarry Smith     *ierr = PetscStrncpy(name,tname,len);if (*ierr) return;
61335bd34faSBarry Smith   }
61435bd34faSBarry Smith   FIXRETURNCHAR(PETSC_TRUE,name,len);
61535bd34faSBarry Smith }
61635bd34faSBarry Smith 
617*19caf8f3SSatish Balay PETSC_EXTERN void matgetfactor_(Mat *mat,char* outtype,MatFactorType *ftype,Mat *M,PetscErrorCode *ierr,PETSC_FORTRAN_CHARLEN_T len)
6185dffd610SBarry Smith {
6195dffd610SBarry Smith   char *t;
6205dffd610SBarry Smith   FIXCHAR(outtype,len,t);
621d49bb8f9SBarry Smith   *ierr = MatGetFactor(*mat,t,*ftype,M);if (*ierr) return;
6225dffd610SBarry Smith   FREECHAR(outtype,t);
6235dffd610SBarry Smith }
6245dffd610SBarry Smith 
625*19caf8f3SSatish Balay PETSC_EXTERN void matconvert_(Mat *mat,char* outtype,MatReuse *reuse,Mat *M,PetscErrorCode *ierr,PETSC_FORTRAN_CHARLEN_T len)
626f4e70085SSatish Balay {
627f4e70085SSatish Balay   char *t;
628f4e70085SSatish Balay   FIXCHAR(outtype,len,t);
629d49bb8f9SBarry Smith   *ierr = MatConvert(*mat,t,*reuse,M);if (*ierr) return;
630f4e70085SSatish Balay   FREECHAR(outtype,t);
631f4e70085SSatish Balay }
632f4e70085SSatish Balay 
633f4e70085SSatish Balay /*
6347dae84e0SHong Zhang     MatCreateSubmatrices() is slightly different from C since the
635f4e70085SSatish Balay     Fortran provides the array to hold the submatrix objects,while in C that
6367dae84e0SHong Zhang     array is allocated by the MatCreateSubmatrices()
637f4e70085SSatish Balay */
638*19caf8f3SSatish Balay PETSC_EXTERN void matcreatesubmatrices_(Mat *mat,PetscInt *n,IS *isrow,IS *iscol,MatReuse *scall,Mat *smat,PetscErrorCode *ierr)
639f4e70085SSatish Balay {
640f4e70085SSatish Balay   Mat      *lsmat;
641f4e70085SSatish Balay   PetscInt i;
642f4e70085SSatish Balay 
643f4e70085SSatish Balay   if (*scall == MAT_INITIAL_MATRIX) {
6447dae84e0SHong Zhang     *ierr = MatCreateSubMatrices(*mat,*n,isrow,iscol,*scall,&lsmat);
645de7ef04eSHong Zhang     for (i=0; i<=*n; i++) { /* lsmat[*n] might be a dummy matrix for saving data struc */
646f4e70085SSatish Balay       smat[i] = lsmat[i];
647f4e70085SSatish Balay     }
648f4e70085SSatish Balay     *ierr = PetscFree(lsmat);
649f4e70085SSatish Balay   } else {
6507dae84e0SHong Zhang     *ierr = MatCreateSubMatrices(*mat,*n,isrow,iscol,*scall,&smat);
651f4e70085SSatish Balay   }
652f4e70085SSatish Balay }
653f4e70085SSatish Balay 
6547d6bfa3bSBarry Smith /*
65581ec7b92Smarius     MatCreateSubmatrices() is slightly different from C since the
65681ec7b92Smarius     Fortran provides the array to hold the submatrix objects,while in C that
65781ec7b92Smarius     array is allocated by the MatCreateSubmatrices()
65881ec7b92Smarius */
659*19caf8f3SSatish Balay PETSC_EXTERN void matcreatesubmatricesmpi_(Mat *mat,PetscInt *n,IS *isrow,IS *iscol,MatReuse *scall,Mat *smat,PetscErrorCode *ierr)
66081ec7b92Smarius {
66181ec7b92Smarius   Mat      *lsmat;
66281ec7b92Smarius   PetscInt i;
66381ec7b92Smarius 
66481ec7b92Smarius   if (*scall == MAT_INITIAL_MATRIX) {
66581ec7b92Smarius     *ierr = MatCreateSubMatricesMPI(*mat,*n,isrow,iscol,*scall,&lsmat);
66681ec7b92Smarius     for (i=0; i<=*n; i++) { /* lsmat[*n] might be a dummy matrix for saving data struc */
66781ec7b92Smarius       smat[i] = lsmat[i];
66881ec7b92Smarius     }
66981ec7b92Smarius     *ierr = PetscFree(lsmat);
67081ec7b92Smarius   } else {
67181ec7b92Smarius     *ierr = MatCreateSubMatricesMPI(*mat,*n,isrow,iscol,*scall,&smat);
67281ec7b92Smarius   }
67381ec7b92Smarius }
67481ec7b92Smarius 
67581ec7b92Smarius /*
6767d6bfa3bSBarry Smith     MatDestroyMatrices() is slightly different from C since the
677de7ef04eSHong Zhang     Fortran does not free the array of matrix objects, while in C that
678de7ef04eSHong Zhang     the array is freed
679de7ef04eSHong Zhang */
680*19caf8f3SSatish Balay PETSC_EXTERN void matdestroymatrices_(PetscInt *n,Mat *smat,PetscErrorCode *ierr)
681de7ef04eSHong Zhang {
682de7ef04eSHong Zhang   PetscInt i;
683de7ef04eSHong Zhang 
684de7ef04eSHong Zhang   for (i=0; i<*n; i++) {
685de7ef04eSHong Zhang     *ierr = MatDestroy(&smat[i]);if (*ierr) return;
686de7ef04eSHong Zhang   }
687de7ef04eSHong Zhang }
688de7ef04eSHong Zhang 
689de7ef04eSHong Zhang /*
690de7ef04eSHong Zhang     MatDestroySubMatrices() is slightly different from C since the
6917d6bfa3bSBarry Smith     Fortran provides the array to hold the submatrix objects, while in C that
6927dae84e0SHong Zhang     array is allocated by the MatCreateSubmatrices()
6937d6bfa3bSBarry Smith */
694*19caf8f3SSatish Balay PETSC_EXTERN void matdestroysubmatrices_(PetscInt *n,Mat *smat,PetscErrorCode *ierr)
6957d6bfa3bSBarry Smith {
696de7ef04eSHong Zhang   Mat      *lsmat;
6977d6bfa3bSBarry Smith   PetscInt i;
6987d6bfa3bSBarry Smith 
699de7ef04eSHong Zhang   *ierr = PetscMalloc1(*n+1,&lsmat);
700de7ef04eSHong Zhang   for (i=0; i<=*n; i++) {
701de7ef04eSHong Zhang       lsmat[i] = smat[i];
7027d6bfa3bSBarry Smith   }
703de7ef04eSHong Zhang   *ierr = MatDestroySubMatrices(*n,&lsmat);
704df750dc8SHong Zhang }
705df750dc8SHong Zhang 
706*19caf8f3SSatish Balay PETSC_EXTERN void matsetoptionsprefix_(Mat *mat,char* prefix,PetscErrorCode *ierr,PETSC_FORTRAN_CHARLEN_T len)
7071eea217eSSatish Balay {
7081eea217eSSatish Balay   char *t;
7091eea217eSSatish Balay 
7101eea217eSSatish Balay   FIXCHAR(prefix,len,t);
711d49bb8f9SBarry Smith   *ierr = MatSetOptionsPrefix(*mat,t);if (*ierr) return;
7121eea217eSSatish Balay   FREECHAR(prefix,t);
7131eea217eSSatish Balay }
7141eea217eSSatish Balay 
715*19caf8f3SSatish Balay PETSC_EXTERN void matnullspaceremove_(MatNullSpace *sp,Vec *vec,PetscErrorCode *ierr)
716812c3f48SMatthew Knepley {
717260663b8SBarry Smith   CHKFORTRANNULLOBJECT(*sp)
718d0195637SJed Brown   *ierr = MatNullSpaceRemove(*sp,*vec);
719812c3f48SMatthew Knepley }
7201eea217eSSatish Balay 
721*19caf8f3SSatish Balay PETSC_EXTERN void matgetinfo_(Mat *mat,MatInfoType *flag,MatInfo *info, int *ierr)
7225ba43861SSatish Balay {
7234d03fd2bSBarry Smith   *ierr = MatGetInfo(*mat,*flag,info);
7245ba43861SSatish Balay }
7255ba43861SSatish Balay 
726*19caf8f3SSatish Balay PETSC_EXTERN void matlufactor_(Mat *mat,IS *row,IS *col,const MatFactorInfo *info, int *ierr)
72722688b47SSatish Balay {
7284d03fd2bSBarry Smith   *ierr = MatLUFactor(*mat,*row,*col,info);
72922688b47SSatish Balay }
73022688b47SSatish Balay 
731*19caf8f3SSatish Balay PETSC_EXTERN void matilufactor_(Mat *mat,IS *row,IS *col,const MatFactorInfo *info, int *ierr)
73222688b47SSatish Balay {
7334d03fd2bSBarry Smith   *ierr = MatILUFactor(*mat,*row,*col,info);
73422688b47SSatish Balay }
73522688b47SSatish Balay 
736*19caf8f3SSatish Balay PETSC_EXTERN void matlufactorsymbolic_(Mat *fact,Mat *mat,IS *row,IS *col,const MatFactorInfo *info, int *ierr)
73722688b47SSatish Balay {
7384d03fd2bSBarry Smith   *ierr = MatLUFactorSymbolic(*fact,*mat,*row,*col,info);
73922688b47SSatish Balay }
74022688b47SSatish Balay 
741*19caf8f3SSatish Balay PETSC_EXTERN void matlufactornumeric_(Mat *fact,Mat *mat,const MatFactorInfo *info, int *ierr)
74222688b47SSatish Balay {
7434d03fd2bSBarry Smith   *ierr = MatLUFactorNumeric(*fact,*mat,info);
74422688b47SSatish Balay }
74522688b47SSatish Balay 
746*19caf8f3SSatish Balay PETSC_EXTERN void matcholeskyfactor_(Mat *mat,IS *perm,const MatFactorInfo *info, int *ierr)
74722688b47SSatish Balay {
7484d03fd2bSBarry Smith   *ierr = MatCholeskyFactor(*mat,*perm,info);
74922688b47SSatish Balay }
75022688b47SSatish Balay 
751*19caf8f3SSatish Balay PETSC_EXTERN void matcholeskyfactorsymbolic_(Mat *fact,Mat *mat,IS *perm,const MatFactorInfo *info, int *ierr)
75222688b47SSatish Balay {
7534d03fd2bSBarry Smith   *ierr = MatCholeskyFactorSymbolic(*fact,*mat,*perm,info);
75422688b47SSatish Balay }
75522688b47SSatish Balay 
756*19caf8f3SSatish Balay PETSC_EXTERN void matcholeskyfactornumeric_(Mat *fact,Mat *mat,const MatFactorInfo *info, int *ierr)
75722688b47SSatish Balay {
7584d03fd2bSBarry Smith   *ierr = MatCholeskyFactorNumeric(*fact,*mat,info);
75922688b47SSatish Balay }
76022688b47SSatish Balay 
761*19caf8f3SSatish Balay PETSC_EXTERN void matilufactorsymbolic_(Mat *fact,Mat *mat,IS *row,IS *col,const MatFactorInfo *info, int *ierr)
76222688b47SSatish Balay {
7634d03fd2bSBarry Smith   *ierr = MatILUFactorSymbolic(*fact,*mat,*row,*col,info);
76422688b47SSatish Balay }
76522688b47SSatish Balay 
766*19caf8f3SSatish Balay PETSC_EXTERN void maticcfactorsymbolic_(Mat *fact,Mat *mat,IS *perm,const MatFactorInfo *info, int *ierr)
76722688b47SSatish Balay {
7684d03fd2bSBarry Smith   *ierr = MatICCFactorSymbolic(*fact,*mat,*perm,info);
76922688b47SSatish Balay }
77022688b47SSatish Balay 
771*19caf8f3SSatish Balay PETSC_EXTERN void maticcfactor_(Mat *mat,IS *row,const MatFactorInfo *info, int *ierr)
77222688b47SSatish Balay {
7734d03fd2bSBarry Smith   *ierr = MatICCFactor(*mat,*row,info);
77422688b47SSatish Balay }
77522688b47SSatish Balay 
776*19caf8f3SSatish Balay PETSC_EXTERN void matfactorinfoinitialize_(MatFactorInfo *info, int *ierr)
77722688b47SSatish Balay {
7784d03fd2bSBarry Smith   *ierr = MatFactorInfoInitialize(info);
77922688b47SSatish Balay }
780*19caf8f3SSatish Balay PETSC_EXTERN void  matzerorowslocal_(Mat *mat,PetscInt *numRows, PetscInt rows[],PetscScalar *diag,Vec *x,Vec *b, int *ierr)
781d27e6124SSatish Balay {
782d27e6124SSatish Balay   *ierr = MatZeroRowsLocal(*mat,*numRows,rows,*diag,*x,*b);
783d27e6124SSatish Balay }
784*19caf8f3SSatish Balay PETSC_EXTERN void  matzerorowslocal0_(Mat *mat,PetscInt *numRows, PetscInt rows[],PetscScalar *diag,Vec *x,Vec *b, int *ierr)
785d27e6124SSatish Balay {
786d27e6124SSatish Balay   matzerorowslocal_(mat,numRows,rows,diag,x,b,ierr);
787d27e6124SSatish Balay }
788*19caf8f3SSatish Balay PETSC_EXTERN void  matzerorowslocal1_(Mat *mat,PetscInt *numRows, PetscInt rows[],PetscScalar *diag,Vec *x,Vec *b, int *ierr)
789d27e6124SSatish Balay {
790d27e6124SSatish Balay   matzerorowslocal_(mat,numRows,rows,diag,x,b,ierr);
791d27e6124SSatish Balay }
792*19caf8f3SSatish Balay PETSC_EXTERN void matviewfromoptions_(Mat *ao,PetscObject obj,char* type,PetscErrorCode *ierr,PETSC_FORTRAN_CHARLEN_T len)
793fe2efc57SMark {
794fe2efc57SMark   char *t;
795fe2efc57SMark 
796fe2efc57SMark   FIXCHAR(type,len,t);
797fe2efc57SMark   *ierr = MatViewFromOptions(*ao,obj,t);if (*ierr) return;
798fe2efc57SMark   FREECHAR(type,t);
799fe2efc57SMark }
800