xref: /petsc/src/mat/interface/ftn-custom/zmatrixf.c (revision 85835d773d90c3a9d3e142b0936ecdca3fa60d34)
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)
7f0a86a08SBarry Smith   #define matgetvalues_                MATGETVALUES
8f0a86a08SBarry Smith   #define matgetvalues0_               MATGETVALUES0
9f0a86a08SBarry Smith   #define matgetvaluesnn1_             MATGETVALUESnn1
10f0a86a08SBarry Smith   #define matgetvaluesnnnn_            MATGETVALUESnnnn
11f0a86a08SBarry Smith   #define matgetvalues11_              MATGETVALUES11
12*85835d77SBarry Smith   #define matgetvalues11a_             MATGETVALUES11A
13*85835d77SBarry Smith   #define matgetvalues1n_              MATGETVALUES1N
14*85835d77SBarry Smith   #define matgetvaluesn1_              MATGETVALUESN1
15*85835d77SBarry Smith   #define matgetvalueslocal_           MATGETVALUESLOCAL
16*85835d77SBarry Smith   #define matgetvalueslocal0_          MATGETVALUESLOCAL0
17*85835d77SBarry Smith   #define matgetvalueslocalnn1_        MATGETVALUESLOCALNN1
18*85835d77SBarry Smith   #define matgetvalueslocalnnnn_       MATGETVALUESLOCALNNNN
19*85835d77SBarry Smith   #define matgetvalueslocal11_         MATGETVALUESLOCAL11
20*85835d77SBarry Smith   #define matgetvalueslocal11a_        MATGETVALUESLOCAL11A
21*85835d77SBarry Smith   #define matgetvalueslocal1n_         MATGETVALUESLOCAL1N
22*85835d77SBarry Smith   #define matgetvalueslocaln1_         MATGETVALUESLOCALN1
234d03fd2bSBarry Smith   #define matsetvalues_                MATSETVALUES
241006886cSSatish Balay   #define matsetvaluesnnnn_            MATSETVALUESNNNN
253b494cfeSSatish Balay   #define matsetvalues0_               MATSETVALUES0
261b266c99SBarry Smith   #define matsetvaluesnn1_             MATSETVALUESNN1
274d03fd2bSBarry Smith   #define matsetvalues11_              MATSETVALUES11
284d03fd2bSBarry Smith   #define matsetvalues1n_              MATSETVALUES1N
294d03fd2bSBarry Smith   #define matsetvaluesn1_              MATSETVALUESN1
303b494cfeSSatish Balay   #define matsetvaluesblocked0_        MATSETVALUESBLOCKED0
310aee3464SBarry Smith   #define matsetvaluesblocked2_        MATSETVALUESBLOCKED2
324d03fd2bSBarry Smith   #define matsetvaluesblocked11_       MATSETVALUESBLOCKED11
334d03fd2bSBarry Smith   #define matsetvaluesblocked111_      MATSETVALUESBLOCKED111
344d03fd2bSBarry Smith   #define matsetvaluesblocked1n_       MATSETVALUESBLOCKED1N
354d03fd2bSBarry Smith   #define matsetvaluesblockedn1_       MATSETVALUESBLOCKEDN1
364d03fd2bSBarry Smith   #define matsetvaluesblockedlocal_    MATSETVALUESBLOCKEDLOCAL
373b494cfeSSatish Balay   #define matsetvaluesblockedlocal0_   MATSETVALUESBLOCKEDLOCAL0
384d03fd2bSBarry Smith   #define matsetvaluesblockedlocal11_  MATSETVALUESBLOCKEDLOCAL11
394d03fd2bSBarry Smith   #define matsetvaluesblockedlocal111_ MATSETVALUESBLOCKEDLOCAL111
404d03fd2bSBarry Smith   #define matsetvaluesblockedlocal1n_  MATSETVALUESBLOCKEDLOCAL1N
414d03fd2bSBarry Smith   #define matsetvaluesblockedlocaln1_  MATSETVALUESBLOCKEDLOCALN1
424d03fd2bSBarry Smith   #define matsetvalueslocal_           MATSETVALUESLOCAL
433b494cfeSSatish Balay   #define matsetvalueslocal0_          MATSETVALUESLOCAL0
444d03fd2bSBarry Smith   #define matsetvalueslocal11_         MATSETVALUESLOCAL11
454d03fd2bSBarry Smith   #define matsetvalueslocal11nn_       MATSETVALUESLOCAL11NN
464d03fd2bSBarry Smith   #define matsetvalueslocal111_        MATSETVALUESLOCAL111
474d03fd2bSBarry Smith   #define matsetvalueslocal1n_         MATSETVALUESLOCAL1N
484d03fd2bSBarry Smith   #define matsetvalueslocaln1_         MATSETVALUESLOCALN1
4987bcf4e0SBarry Smith   #define matgetrowmin_                MATGETROWMIN
5087bcf4e0SBarry Smith   #define matgetrowminabs_             MATGETROWMINABS
515928be6bSBarry Smith   #define matgetrowmax_                MATGETROWMAX
525928be6bSBarry Smith   #define matgetrowmaxabs_             MATGETROWMAXABS
537d6bfa3bSBarry Smith   #define matdestroymatrices_          MATDESTROYMATRICES
54df750dc8SHong Zhang   #define matdestroysubmatrices_       MATDESTROYSUBMATRICES
555dffd610SBarry Smith   #define matgetfactor_                MATGETFACTOR
5635bd34faSBarry Smith   #define matfactorgetsolverpackage_   MATFACTORGETSOLVERPACKAGE
57f4e70085SSatish Balay   #define matgetrowij_                 MATGETROWIJ
58f4e70085SSatish Balay   #define matrestorerowij_             MATRESTOREROWIJ
59f4e70085SSatish Balay   #define matgetrow_                   MATGETROW
60f4e70085SSatish Balay   #define matrestorerow_               MATRESTOREROW
61f7e310deSShri Abhyankar   #define matload_                     MATLOAD
62f4e70085SSatish Balay   #define matview_                     MATVIEW
638c778c55SBarry Smith   #define matseqaijgetarray_           MATSEQAIJGETARRAY
646778691eSSatish Balay   #define matseqaijrestorearray_       MATSEQAIJRESTOREARRAY
658c778c55SBarry Smith   #define matdensegetarray_            MATDENSEGETARRAY
668572280aSBarry Smith   #define matdensegetarrayread_        MATDENSEGETARRAYREAD
678c778c55SBarry Smith   #define matdenserestorearray_        MATDENSERESTOREARRAY
688572280aSBarry Smith   #define matdenserestorearrayread_    MATDENSERESTOREARRAYREAD
69f4e70085SSatish Balay   #define matconvert_                  MATCONVERT
707dae84e0SHong Zhang   #define matcreatesubmatrices_        MATCREATESUBMATRICES
7181ec7b92Smarius   #define matcreatesubmatricesmpi_     MATCREATESUBMATRICESMPI
7217ede90eSSatish Balay   #define matzerorowscolumns_          MATZEROROWSCOLUMNS
7317ede90eSSatish Balay   #define matzerorowscolumnsis_        MATZEROROWSCOLUMNSIS
7417ede90eSSatish Balay   #define matzerorowsstencil_          MATZEROROWSSTENCIL
75d25a37e1SJed Brown   #define matzerorowscolumnsstencil_   MATZEROROWSCOLUMNSSTENCIL
76f4e70085SSatish Balay   #define matzerorows_                 MATZEROROWS
77f4e70085SSatish Balay   #define matzerorowsis_               MATZEROROWSIS
78f4e70085SSatish Balay   #define matzerorowslocal_            MATZEROROWSLOCAL
79d27e6124SSatish Balay   #define matzerorowslocal0_           MATZEROROWSLOCAL0
80d27e6124SSatish Balay   #define matzerorowslocal1_           MATZEROROWSLOCAL1
81f4e70085SSatish Balay   #define matzerorowslocalis_          MATZEROROWSLOCALIS
8217ede90eSSatish Balay   #define matzerorowscolumnslocal_     MATZEROROWSCOLUMNSLOCAL
8317ede90eSSatish Balay   #define matzerorowscolumnslocalis_   MATZEROROWSCOLUMNSLOCALIS
841eea217eSSatish Balay   #define matsetoptionsprefix_         MATSETOPTIONSPREFIX
85fcc9d04bSBarry Smith   #define matcreatevecs_               MATCREATEVECS
86c9d5ca86SBarry Smith   #define matnullspaceremove_          MATNULLSPACEREMOVE
875ba43861SSatish Balay   #define matgetinfo_                  MATGETINFO
8822688b47SSatish Balay   #define matlufactor_                 MATLUFACTOR
8922688b47SSatish Balay   #define matilufactor_                MATILUFACTOR
9022688b47SSatish Balay   #define matlufactorsymbolic_         MATLUFACTORSYMBOLIC
9122688b47SSatish Balay   #define matlufactornumeric_          MATLUFACTORNUMERIC
9222688b47SSatish Balay   #define matcholeskyfactor_           MATCHOLESKYFACTOR
9322688b47SSatish Balay   #define matcholeskyfactorsymbolic_   MATCHOLESKYFACTORSYMBOLIC
9422688b47SSatish Balay   #define matcholeskyfactornumeric_    MATCHOLESKYFACTORNUMERIC
9522688b47SSatish Balay   #define matilufactorsymbolic_        MATILUFACTORSYMBOLIC
9622688b47SSatish Balay   #define maticcfactorsymbolic_        MATICCFACTORSYMBOLIC
9722688b47SSatish Balay   #define maticcfactor_                MATICCFACTOR
9822688b47SSatish Balay   #define matfactorinfoinitialize_     MATFACTORINFOINITIALIZE
99b22b330cSBarry Smith   #define matnullspacesetfunction_     MATNULLSPACESETFUNCTION
1000905d9aaSJed Brown   #define matfindnonzerorows_          MATFINDNONZEROROWS
10138135fcbSMartin Diehl   #define matgetsize_                  MATGETSIZE
1023be0408cSBarry Smith   #define matgetsize00_                MATGETSIZE00
1033be0408cSBarry Smith   #define matgetsize10_                MATGETSIZE10
1043be0408cSBarry Smith   #define matgetsize01_                MATGETSIZE01
10538135fcbSMartin Diehl   #define matgetlocalsize_             MATGETLOCALSIZE
1063be0408cSBarry Smith   #define matgetlocalsize00_           MATGETLOCALSIZE00
1073be0408cSBarry Smith   #define matgetlocalsize10_           MATGETLOCALSIZE10
1083be0408cSBarry Smith   #define matgetlocalsize01_           MATGETLOCALSIZE01
109260663b8SBarry Smith   #define matsetnullspace_             MATSETNULLSPACE
110260663b8SBarry Smith   #define matgetownershiprange_        MATGETOWNERSHIPRANGE
11191f56e93SMartin Diehl   #define matgetownershiprange00_      MATGETOWNERSHIPRANGE00
11291f56e93SMartin Diehl   #define matgetownershiprange10_      MATGETOWNERSHIPRANGE10
11391f56e93SMartin Diehl   #define matgetownershiprange01_      MATGETOWNERSHIPRANGE01
1145c16e969SSatish Balay   #define matgetownershiprange11_      MATGETOWNERSHIPRANGE11
115c08c7cb9SBarry Smith   #define matgetownershipis_           MATGETOWNERSHIPIS
116afc39838SBarry Smith   #define matgetownershiprangecolumn_  MATGETOWNERSHIPRANGECOLUMN
117fe2efc57SMark   #define matviewfromoptions_          MATVIEWFROMOPTIONS
1181fb7b255SJunchao Zhang   #define matdestroy_                  MATDESTROY
11977433607SBarry Smith   #define matcreatefromoptions_        MATCREATEFROMOPTIONS
120f4e70085SSatish Balay #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE)
1214d03fd2bSBarry Smith   #define matsetvalues_                matsetvalues
1221006886cSSatish Balay   #define matsetvaluesnnnn_            matsetvaluesnnnn
1233b494cfeSSatish Balay   #define matsetvalues0_               matsetvalues0
1241b266c99SBarry Smith   #define matsetvaluesnn1_             matsetvaluesnn1
1254d03fd2bSBarry Smith   #define matsetvalues11_              matsetvalues11
1264d03fd2bSBarry Smith   #define matsetvaluesn1_              matsetvaluesn1
1274d03fd2bSBarry Smith   #define matsetvalues1n_              matsetvalues1n
1284d03fd2bSBarry Smith   #define matsetvalueslocal_           matsetvalueslocal
1293b494cfeSSatish Balay   #define matsetvalueslocal0_          matsetvalueslocal0
1304d03fd2bSBarry Smith   #define matsetvalueslocal11_         matsetvalueslocal11
1314d03fd2bSBarry Smith   #define matsetvalueslocal11nn_       matsetvalueslocal11nn
1324d03fd2bSBarry Smith   #define matsetvalueslocal111_        matsetvalueslocal111
1334d03fd2bSBarry Smith   #define matsetvalueslocal1n_         matsetvalueslocal1n
1344d03fd2bSBarry Smith   #define matsetvalueslocaln1_         matsetvalueslocaln1
1354d03fd2bSBarry Smith   #define matsetvaluesblocked_         matsetvaluesblocked
1363b494cfeSSatish Balay   #define matsetvaluesblocked0_        matsetvaluesblocked0
1370aee3464SBarry Smith   #define matsetvaluesblocked2_        matsetvaluesblocked2
1384d03fd2bSBarry Smith   #define matsetvaluesblocked11_       matsetvaluesblocked11
1394d03fd2bSBarry Smith   #define matsetvaluesblocked111_      matsetvaluesblocked111
1404d03fd2bSBarry Smith   #define matsetvaluesblocked1n_       matsetvaluesblocked1n
14124aa916eSSatish Balay   #define matsetvaluesblockedn1_       matsetvaluesblockedn1
1424d03fd2bSBarry Smith   #define matsetvaluesblockedlocal_    matsetvaluesblockedlocal
1433b494cfeSSatish Balay   #define matsetvaluesblockedlocal0_   matsetvaluesblockedlocal0
1444d03fd2bSBarry Smith   #define matsetvaluesblockedlocal11_  matsetvaluesblockedlocal11
1454d03fd2bSBarry Smith   #define matsetvaluesblockedlocal111_ matsetvaluesblockedlocal111
1464d03fd2bSBarry Smith   #define matsetvaluesblockedlocal1n_  matsetvaluesblockedlocal1n
14724aa916eSSatish Balay   #define matsetvaluesblockedlocaln1_  matsetvaluesblockedlocaln1
14887bcf4e0SBarry Smith   #define matgetrowmin_                matgetrowmin
14987bcf4e0SBarry Smith   #define matgetrowminabs_             matgetrowminabs
1505928be6bSBarry Smith   #define matgetrowmax_                matgetrowmax
1515928be6bSBarry Smith   #define matgetrowmaxabs_             matgetrowmaxabs
1525928be6bSBarry Smith   #define matdestroymatrices_          matdestroymatrices
153df750dc8SHong Zhang   #define matdestroysubmatrices_       matdestroysubmatrices
1545dffd610SBarry Smith   #define matgetfactor_                matgetfactor
15535bd34faSBarry Smith   #define matfactorgetsolverpackage_   matfactorgetsolverpackage
156fcc9d04bSBarry Smith   #define matcreatevecs_               matcreatevecs
157f4e70085SSatish Balay   #define matgetrowij_                 matgetrowij
158f4e70085SSatish Balay   #define matrestorerowij_             matrestorerowij
159f4e70085SSatish Balay   #define matgetrow_                   matgetrow
160f4e70085SSatish Balay   #define matrestorerow_               matrestorerow
161f4e70085SSatish Balay   #define matview_                     matview
162f7e310deSShri Abhyankar   #define matload_                     matload
1638c778c55SBarry Smith   #define matseqaijgetarray_           matseqaijgetarray
1648c778c55SBarry Smith   #define matseqaijrestorearray_       matseqaijrestorearray
1658c778c55SBarry Smith   #define matdensegetarray_            matdensegetarray
1668572280aSBarry Smith   #define matdensegetarrayread_        matdensegetarrayread
1678c778c55SBarry Smith   #define matdenserestorearray_        matdenserestorearray
1688572280aSBarry Smith   #define matdenserestorearrayread_    matdenserestorearrayread
169f4e70085SSatish Balay   #define matconvert_                  matconvert
1707dae84e0SHong Zhang   #define matcreatesubmatrices_        matcreatesubmatrices
17181ec7b92Smarius   #define matcreatesubmatricesmpi_     matcreatesubmatricesmpi
17217ede90eSSatish Balay   #define matzerorowscolumns_          matzerorowscolumns
17317ede90eSSatish Balay   #define matzerorowscolumnsis_        matzerorowscolumnsis
17417ede90eSSatish Balay   #define matzerorowsstencil_          matzerorowsstencil
175d25a37e1SJed Brown   #define matzerorowscolumnsstencil_   matzerorowscolumnsstencil
176f4e70085SSatish Balay   #define matzerorows_                 matzerorows
177f4e70085SSatish Balay   #define matzerorowsis_               matzerorowsis
178f4e70085SSatish Balay   #define matzerorowslocal_            matzerorowslocal
179f4e70085SSatish Balay   #define matzerorowslocalis_          matzerorowslocalis
18017ede90eSSatish Balay   #define matzerorowscolumnslocal_     matzerorowscolumnslocal
18117ede90eSSatish Balay   #define matzerorowscolumnslocalis_   matzerorowscolumnslocalis
1821eea217eSSatish Balay   #define matsetoptionsprefix_         matsetoptionsprefix
183812c3f48SMatthew Knepley   #define matnullspaceremove_          matnullspaceremove
1845ba43861SSatish Balay   #define matgetinfo_                  matgetinfo
18522688b47SSatish Balay   #define matlufactor_                 matlufactor
18622688b47SSatish Balay   #define matilufactor_                matilufactor
18722688b47SSatish Balay   #define matlufactorsymbolic_         matlufactorsymbolic
18822688b47SSatish Balay   #define matlufactornumeric_          matlufactornumeric
18922688b47SSatish Balay   #define matcholeskyfactor_           matcholeskyfactor
19022688b47SSatish Balay   #define matcholeskyfactorsymbolic_   matcholeskyfactorsymbolic
19122688b47SSatish Balay   #define matcholeskyfactornumeric_    matcholeskyfactornumeric
19222688b47SSatish Balay   #define matilufactorsymbolic_        matilufactorsymbolic
19322688b47SSatish Balay   #define maticcfactorsymbolic_        maticcfactorsymbolic
19422688b47SSatish Balay   #define maticcfactor_                maticcfactor
19522688b47SSatish Balay   #define matfactorinfoinitialize_     matfactorinfoinitialize
196b22b330cSBarry Smith   #define matnullspacesetfunction_     matnullspacesetfunction
1970905d9aaSJed Brown   #define matfindnonzerorows_          matfindnonzerorows
19838135fcbSMartin Diehl   #define matgetsize_                  matgetsize
1993be0408cSBarry Smith   #define matgetsize00_                matgetsize00
2003be0408cSBarry Smith   #define matgetsize10_                matgetsize10
2013be0408cSBarry Smith   #define matgetsize01_                matgetsize01
20238135fcbSMartin Diehl   #define matgetlocalsize_             matgetlocalsize
2033be0408cSBarry Smith   #define matgetlocalsize00_           matgetlocalsize00
2043be0408cSBarry Smith   #define matgetlocalsize10_           matgetlocalsize10
2053be0408cSBarry Smith   #define matgetlocalsize01_           matgetlocalsize01
206f0a86a08SBarry Smith   #define matgetvalues_                matgetvalues
207f0a86a08SBarry Smith   #define matgetvalues0_               matgetvalues0
208f0a86a08SBarry Smith   #define matgetvaluesnn1_             matgetvaluesnn1
209f0a86a08SBarry Smith   #define matgetvaluesnnnn_            matgetvaluesnnnn
210f0a86a08SBarry Smith   #define matgetvalues11_              matgetvalues11
211*85835d77SBarry Smith   #define matgetvalues11a_             matgetvalues11a
212f0a86a08SBarry Smith   #define matgetvalues1n_              matgetvalues1n
213f0a86a08SBarry Smith   #define matgetvaluesn1_              matgetvaluesn1
214*85835d77SBarry Smith   #define matgetvalueslocal_           matgetvalueslocal
215*85835d77SBarry Smith   #define matgetvalueslocal0_          matgetvalueslocal0
216*85835d77SBarry Smith   #define matgetvalueslocalnn1_        matgetvalueslocalnn1
217*85835d77SBarry Smith   #define matgetvalueslocalnnnn_       matgetvalueslocalnnnn
218*85835d77SBarry Smith   #define matgetvalueslocal11_         matgetvalueslocal11
219*85835d77SBarry Smith   #define matgetvalueslocal1n_         matgetvalueslocal1n
220*85835d77SBarry Smith   #define matgetvalueslocaln1_         matgetvalueslocaln1
221260663b8SBarry Smith   #define matsetnullspace_             matsetnullspace
222260663b8SBarry Smith   #define matgetownershiprange_        matgetownershiprange
22391f56e93SMartin Diehl   #define matgetownershiprange00_      matgetownershiprange00
22491f56e93SMartin Diehl   #define matgetownershiprange10_      matgetownershiprange10
22591f56e93SMartin Diehl   #define matgetownershiprange01_      matgetownershiprange01
22691f56e93SMartin Diehl   #define matgetownershiprange11_      matgetownershiprange11
227c08c7cb9SBarry Smith   #define matgetownershipis_           matgetownershipis
228afc39838SBarry Smith   #define matgetownershiprangecolumn_  matgetownershiprangecolumn
229fe2efc57SMark   #define matviewfromoptions_          matviewfromoptions
2301fb7b255SJunchao Zhang   #define matdestroy_                  matdestroy
23177433607SBarry Smith   #define matcreatefromoptions_        matcreatefromoptions
232f4e70085SSatish Balay #endif
233f4e70085SSatish Balay 
23477433607SBarry Smith PETSC_EXTERN void matcreatefromoptions_(MPI_Fint *comm, char *prefix, PetscInt *bs, PetscInt *m, PetscInt *n, PetscInt *M, PetscInt *N, Mat *A, int *ierr, PETSC_FORTRAN_CHARLEN_T len)
23577433607SBarry Smith {
23677433607SBarry Smith   char *fprefix;
23777433607SBarry Smith   FIXCHAR(prefix, len, fprefix);
23877433607SBarry Smith   *ierr = MatCreateFromOptions(MPI_Comm_f2c(*(comm)), fprefix, *bs, *m, *n, *M, *N, A);
23977433607SBarry Smith   if (*ierr) return;
24077433607SBarry Smith   FREECHAR(prefix, fprefix);
24177433607SBarry Smith }
24277433607SBarry Smith 
243f0a86a08SBarry Smith PETSC_EXTERN void matgetvalues_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], int *ierr)
244f0a86a08SBarry Smith {
245f0a86a08SBarry Smith   *ierr = MatGetValues(*mat, *m, idxm, *n, idxn, v);
246f0a86a08SBarry Smith }
247f0a86a08SBarry Smith 
248f0a86a08SBarry Smith PETSC_EXTERN void matgetvalues0_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], int *ierr)
249f0a86a08SBarry Smith {
250f0a86a08SBarry Smith   matgetvalues_(mat, m, idxm, n, idxn, v, ierr);
251f0a86a08SBarry Smith }
252f0a86a08SBarry Smith 
253f0a86a08SBarry Smith PETSC_EXTERN void matgetvaluesnn1_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], int *ierr)
254f0a86a08SBarry Smith {
255f0a86a08SBarry Smith   matgetvalues_(mat, m, idxm, n, idxn, v, ierr);
256f0a86a08SBarry Smith }
257f0a86a08SBarry Smith 
258f0a86a08SBarry Smith PETSC_EXTERN void matgetvaluesnnnn_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], int *ierr)
259f0a86a08SBarry Smith {
260f0a86a08SBarry Smith   matgetvalues_(mat, m, idxm, n, idxn, v, ierr);
261f0a86a08SBarry Smith }
262f0a86a08SBarry Smith 
263f0a86a08SBarry Smith PETSC_EXTERN void matgetvalues11_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], int *ierr)
264f0a86a08SBarry Smith {
265f0a86a08SBarry Smith   matgetvalues_(mat, m, idxm, n, idxn, v, ierr);
266f0a86a08SBarry Smith }
267f0a86a08SBarry Smith 
268*85835d77SBarry Smith PETSC_EXTERN void matgetvalues11a_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], int *ierr)
269*85835d77SBarry Smith {
270*85835d77SBarry Smith   matgetvalues_(mat, m, idxm, n, idxn, v, ierr);
271*85835d77SBarry Smith }
272*85835d77SBarry Smith 
273f0a86a08SBarry Smith PETSC_EXTERN void matgetvalues1n_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], int *ierr)
274f0a86a08SBarry Smith {
275f0a86a08SBarry Smith   matgetvalues_(mat, m, idxm, n, idxn, v, ierr);
276f0a86a08SBarry Smith }
277f0a86a08SBarry Smith 
278f0a86a08SBarry Smith PETSC_EXTERN void matgetvaluesn1_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], int *ierr)
279f0a86a08SBarry Smith {
280f0a86a08SBarry Smith   matgetvalues_(mat, m, idxm, n, idxn, v, ierr);
281f0a86a08SBarry Smith }
282f0a86a08SBarry Smith 
283*85835d77SBarry Smith PETSC_EXTERN void matgetvalueslocal_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], int *ierr)
284*85835d77SBarry Smith {
285*85835d77SBarry Smith   *ierr = MatGetValuesLocal(*mat, *m, idxm, *n, idxn, v);
286*85835d77SBarry Smith }
287*85835d77SBarry Smith 
288*85835d77SBarry Smith PETSC_EXTERN void matgetvalueslocal0_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], int *ierr)
289*85835d77SBarry Smith {
290*85835d77SBarry Smith   matgetvalueslocal_(mat, m, idxm, n, idxn, v, ierr);
291*85835d77SBarry Smith }
292*85835d77SBarry Smith 
293*85835d77SBarry Smith PETSC_EXTERN void matgetvalueslocalnn1_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], int *ierr)
294*85835d77SBarry Smith {
295*85835d77SBarry Smith   matgetvalueslocal_(mat, m, idxm, n, idxn, v, ierr);
296*85835d77SBarry Smith }
297*85835d77SBarry Smith 
298*85835d77SBarry Smith PETSC_EXTERN void matgetvalueslocalnnnn_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], int *ierr)
299*85835d77SBarry Smith {
300*85835d77SBarry Smith   matgetvalueslocal_(mat, m, idxm, n, idxn, v, ierr);
301*85835d77SBarry Smith }
302*85835d77SBarry Smith 
303*85835d77SBarry Smith PETSC_EXTERN void matgetvalueslocal11_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], int *ierr)
304*85835d77SBarry Smith {
305*85835d77SBarry Smith   matgetvalueslocal_(mat, m, idxm, n, idxn, v, ierr);
306*85835d77SBarry Smith }
307*85835d77SBarry Smith 
308*85835d77SBarry Smith PETSC_EXTERN void matgetvalueslocal11a_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], int *ierr)
309*85835d77SBarry Smith {
310*85835d77SBarry Smith   matgetvalueslocal_(mat, m, idxm, n, idxn, v, ierr);
311*85835d77SBarry Smith }
312*85835d77SBarry Smith 
313*85835d77SBarry Smith PETSC_EXTERN void matgetvalueslocal1n_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], int *ierr)
314*85835d77SBarry Smith {
315*85835d77SBarry Smith   matgetvalueslocal_(mat, m, idxm, n, idxn, v, ierr);
316*85835d77SBarry Smith }
317*85835d77SBarry Smith 
318*85835d77SBarry Smith PETSC_EXTERN void matgetvalueslocaln1_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], int *ierr)
319*85835d77SBarry Smith {
320*85835d77SBarry Smith   matgetvalueslocal_(mat, m, idxm, n, idxn, v, ierr);
321*85835d77SBarry Smith }
322*85835d77SBarry Smith 
32319caf8f3SSatish Balay PETSC_EXTERN void matgetownershiprange_(Mat *mat, PetscInt *m, PetscInt *n, int *ierr)
324260663b8SBarry Smith {
325260663b8SBarry Smith   CHKFORTRANNULLINTEGER(m);
326260663b8SBarry Smith   CHKFORTRANNULLINTEGER(n);
327260663b8SBarry Smith   *ierr = MatGetOwnershipRange(*mat, m, n);
328260663b8SBarry Smith }
329260663b8SBarry Smith 
33019caf8f3SSatish Balay PETSC_EXTERN void matgetownershiprange00_(Mat *mat, PetscInt *m, PetscInt *n, int *ierr)
3315dd307cdSMartin Diehl {
3325dd307cdSMartin Diehl   CHKFORTRANNULLINTEGER(m);
3335dd307cdSMartin Diehl   CHKFORTRANNULLINTEGER(n);
3345dd307cdSMartin Diehl   *ierr = MatGetOwnershipRange(*mat, m, n);
3355dd307cdSMartin Diehl }
3365dd307cdSMartin Diehl 
33719caf8f3SSatish Balay PETSC_EXTERN void matgetownershiprange10_(Mat *mat, PetscInt *m, PetscInt *n, int *ierr)
3385dd307cdSMartin Diehl {
3395dd307cdSMartin Diehl   CHKFORTRANNULLINTEGER(m);
3405dd307cdSMartin Diehl   CHKFORTRANNULLINTEGER(n);
3415dd307cdSMartin Diehl   *ierr = MatGetOwnershipRange(*mat, m, n);
3425dd307cdSMartin Diehl }
3435dd307cdSMartin Diehl 
34419caf8f3SSatish Balay PETSC_EXTERN void matgetownershiprange01_(Mat *mat, PetscInt *m, PetscInt *n, int *ierr)
3455dd307cdSMartin Diehl {
3465dd307cdSMartin Diehl   CHKFORTRANNULLINTEGER(m);
3475dd307cdSMartin Diehl   CHKFORTRANNULLINTEGER(n);
3485dd307cdSMartin Diehl   *ierr = MatGetOwnershipRange(*mat, m, n);
3495dd307cdSMartin Diehl }
3505dd307cdSMartin Diehl 
35119caf8f3SSatish Balay PETSC_EXTERN void matgetownershiprange11_(Mat *mat, PetscInt *m, PetscInt *n, int *ierr)
3525dd307cdSMartin Diehl {
3535dd307cdSMartin Diehl   CHKFORTRANNULLINTEGER(m);
3545dd307cdSMartin Diehl   CHKFORTRANNULLINTEGER(n);
3555dd307cdSMartin Diehl   *ierr = MatGetOwnershipRange(*mat, m, n);
3565dd307cdSMartin Diehl }
3575dd307cdSMartin Diehl 
35819caf8f3SSatish Balay PETSC_EXTERN void matgetownershipis_(Mat *mat, IS *m, IS *n, int *ierr)
359c08c7cb9SBarry Smith {
360c08c7cb9SBarry Smith   CHKFORTRANNULLOBJECT(m);
361c08c7cb9SBarry Smith   CHKFORTRANNULLOBJECT(n);
362c08c7cb9SBarry Smith   *ierr = MatGetOwnershipIS(*mat, m, n);
363c08c7cb9SBarry Smith }
364c08c7cb9SBarry Smith 
36519caf8f3SSatish Balay PETSC_EXTERN void matgetownershiprangecolumn_(Mat *mat, PetscInt *m, PetscInt *n, int *ierr)
366afc39838SBarry Smith {
367afc39838SBarry Smith   CHKFORTRANNULLINTEGER(m);
368afc39838SBarry Smith   CHKFORTRANNULLINTEGER(n);
369afc39838SBarry Smith   *ierr = MatGetOwnershipRangeColumn(*mat, m, n);
370afc39838SBarry Smith }
371afc39838SBarry Smith 
37219caf8f3SSatish Balay PETSC_EXTERN void matgetsize_(Mat *mat, PetscInt *m, PetscInt *n, int *ierr)
3733be0408cSBarry Smith {
3743be0408cSBarry Smith   CHKFORTRANNULLINTEGER(m);
3753be0408cSBarry Smith   CHKFORTRANNULLINTEGER(n);
3763be0408cSBarry Smith   *ierr = MatGetSize(*mat, m, n);
3773be0408cSBarry Smith }
3783be0408cSBarry Smith 
37919caf8f3SSatish Balay PETSC_EXTERN void matgetsize00_(Mat *mat, PetscInt *m, PetscInt *n, int *ierr)
3803be0408cSBarry Smith {
3813be0408cSBarry Smith   matgetsize_(mat, m, n, ierr);
3823be0408cSBarry Smith }
3833be0408cSBarry Smith 
38419caf8f3SSatish Balay PETSC_EXTERN void matgetsize10_(Mat *mat, PetscInt *m, PetscInt *n, int *ierr)
3853be0408cSBarry Smith {
3863be0408cSBarry Smith   matgetsize_(mat, m, n, ierr);
3873be0408cSBarry Smith }
3883be0408cSBarry Smith 
38919caf8f3SSatish Balay PETSC_EXTERN void matgetsize01_(Mat *mat, PetscInt *m, PetscInt *n, int *ierr)
3903be0408cSBarry Smith {
3913be0408cSBarry Smith   matgetsize_(mat, m, n, ierr);
3923be0408cSBarry Smith }
3933be0408cSBarry Smith 
39419caf8f3SSatish Balay PETSC_EXTERN void matgetlocalsize_(Mat *mat, PetscInt *m, PetscInt *n, int *ierr)
3953be0408cSBarry Smith {
3963be0408cSBarry Smith   CHKFORTRANNULLINTEGER(m);
3973be0408cSBarry Smith   CHKFORTRANNULLINTEGER(n);
3983be0408cSBarry Smith   *ierr = MatGetLocalSize(*mat, m, n);
3993be0408cSBarry Smith }
4003be0408cSBarry Smith 
40119caf8f3SSatish Balay PETSC_EXTERN void matgetlocalsize00_(Mat *mat, PetscInt *m, PetscInt *n, int *ierr)
4023be0408cSBarry Smith {
4033be0408cSBarry Smith   matgetlocalsize_(mat, m, n, ierr);
4043be0408cSBarry Smith }
4053be0408cSBarry Smith 
40619caf8f3SSatish Balay PETSC_EXTERN void matgetlocalsize10_(Mat *mat, PetscInt *m, PetscInt *n, int *ierr)
4073be0408cSBarry Smith {
4083be0408cSBarry Smith   matgetlocalsize_(mat, m, n, ierr);
4093be0408cSBarry Smith }
4103be0408cSBarry Smith 
41119caf8f3SSatish Balay PETSC_EXTERN void matgetlocalsize01_(Mat *mat, PetscInt *m, PetscInt *n, int *ierr)
4123be0408cSBarry Smith {
4133be0408cSBarry Smith   matgetlocalsize_(mat, m, n, ierr);
4143be0408cSBarry Smith }
4153be0408cSBarry Smith 
41670a7d78aSStefano Zampini PETSC_EXTERN void matsetvaluesblocked_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], InsertMode *addv, int *ierr)
41770a7d78aSStefano Zampini {
4184d03fd2bSBarry Smith   *ierr = MatSetValuesBlocked(*mat, *m, idxm, *n, idxn, v, *addv);
4194d03fd2bSBarry Smith }
4204d03fd2bSBarry Smith 
42170a7d78aSStefano Zampini 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))
42270a7d78aSStefano Zampini {
423cee688dbSBarry Smith   PetscScalar *fa;
4245975b3b6SBarry Smith   *ierr = F90Array2dAccess(y, MPIU_SCALAR, (void **)&fa PETSC_F90_2PTR_PARAM(ptrd));
4255975b3b6SBarry Smith   if (*ierr) return;
426cee688dbSBarry Smith   matsetvaluesblocked_(mat, m, idxm, n, idxn, fa, addv, ierr);
427cee688dbSBarry Smith }
428cee688dbSBarry Smith 
42970a7d78aSStefano Zampini PETSC_EXTERN void matsetvaluesblocked0_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], InsertMode *addv, int *ierr)
43070a7d78aSStefano Zampini {
4313b494cfeSSatish Balay   matsetvaluesblocked_(mat, m, idxm, n, idxn, v, addv, ierr);
4323b494cfeSSatish Balay }
4333b494cfeSSatish Balay 
43470a7d78aSStefano Zampini PETSC_EXTERN void matsetvaluesblocked11_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], InsertMode *addv, int *ierr)
43570a7d78aSStefano Zampini {
4364d03fd2bSBarry Smith   matsetvaluesblocked_(mat, m, idxm, n, idxn, v, addv, ierr);
4374d03fd2bSBarry Smith }
4384d03fd2bSBarry Smith 
43970a7d78aSStefano Zampini PETSC_EXTERN void matsetvaluesblocked111_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], InsertMode *addv, int *ierr)
44070a7d78aSStefano Zampini {
4414d03fd2bSBarry Smith   matsetvaluesblocked_(mat, m, idxm, n, idxn, v, addv, ierr);
4424d03fd2bSBarry Smith }
4434d03fd2bSBarry Smith 
44470a7d78aSStefano Zampini PETSC_EXTERN void matsetvaluesblocked1n_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], InsertMode *addv, int *ierr)
44570a7d78aSStefano Zampini {
4464d03fd2bSBarry Smith   matsetvaluesblocked_(mat, m, idxm, n, idxn, v, addv, ierr);
4474d03fd2bSBarry Smith }
4484d03fd2bSBarry Smith 
44970a7d78aSStefano Zampini PETSC_EXTERN void matsetvaluesblockedn1_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], InsertMode *addv, int *ierr)
45070a7d78aSStefano Zampini {
4514d03fd2bSBarry Smith   matsetvaluesblocked_(mat, m, idxm, n, idxn, v, addv, ierr);
4524d03fd2bSBarry Smith }
4534d03fd2bSBarry Smith 
45419caf8f3SSatish Balay PETSC_EXTERN void matsetvaluesblockedlocal_(Mat *mat, PetscInt *nrow, PetscInt irow[], PetscInt *ncol, PetscInt icol[], PetscScalar y[], InsertMode *addv, int *ierr)
4554d03fd2bSBarry Smith {
4564d03fd2bSBarry Smith   *ierr = MatSetValuesBlockedLocal(*mat, *nrow, irow, *ncol, icol, y, *addv);
4574d03fd2bSBarry Smith }
4584d03fd2bSBarry Smith 
45970a7d78aSStefano Zampini PETSC_EXTERN void matsetvaluesblockedlocal0_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], InsertMode *addv, int *ierr)
46070a7d78aSStefano Zampini {
4613b494cfeSSatish Balay   matsetvaluesblockedlocal_(mat, m, idxm, n, idxn, v, addv, ierr);
4623b494cfeSSatish Balay }
4633b494cfeSSatish Balay 
46470a7d78aSStefano Zampini PETSC_EXTERN void matsetvaluesblockedlocal11_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], InsertMode *addv, int *ierr)
46570a7d78aSStefano Zampini {
4664d03fd2bSBarry Smith   matsetvaluesblockedlocal_(mat, m, idxm, n, idxn, v, addv, ierr);
4674d03fd2bSBarry Smith }
4684d03fd2bSBarry Smith 
46970a7d78aSStefano Zampini PETSC_EXTERN void matsetvaluesblockedlocal111_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], InsertMode *addv, int *ierr)
47070a7d78aSStefano Zampini {
4714d03fd2bSBarry Smith   matsetvaluesblockedlocal_(mat, m, idxm, n, idxn, v, addv, ierr);
4724d03fd2bSBarry Smith }
4734d03fd2bSBarry Smith 
47470a7d78aSStefano Zampini PETSC_EXTERN void matsetvaluesblockedlocal1n_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], InsertMode *addv, int *ierr)
47570a7d78aSStefano Zampini {
4764d03fd2bSBarry Smith   matsetvaluesblockedlocal_(mat, m, idxm, n, idxn, v, addv, ierr);
4774d03fd2bSBarry Smith }
4784d03fd2bSBarry Smith 
47970a7d78aSStefano Zampini PETSC_EXTERN void matsetvaluesblockedlocaln1_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], InsertMode *addv, int *ierr)
48070a7d78aSStefano Zampini {
4814d03fd2bSBarry Smith   matsetvaluesblockedlocal_(mat, m, idxm, n, idxn, v, addv, ierr);
4824d03fd2bSBarry Smith }
4834d03fd2bSBarry Smith 
48419caf8f3SSatish Balay PETSC_EXTERN void matsetvalues_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], InsertMode *addv, int *ierr)
4854d03fd2bSBarry Smith {
4864d03fd2bSBarry Smith   *ierr = MatSetValues(*mat, *m, idxm, *n, idxn, v, *addv);
4874d03fd2bSBarry Smith }
4884d03fd2bSBarry Smith 
48919caf8f3SSatish Balay PETSC_EXTERN void matsetvaluesnnnn_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], InsertMode *addv, int *ierr)
4901b266c99SBarry Smith {
4911b266c99SBarry Smith   matsetvalues_(mat, m, idxm, n, idxn, v, addv, ierr);
4921b266c99SBarry Smith }
4931b266c99SBarry Smith 
49419caf8f3SSatish Balay PETSC_EXTERN void matsetvalues0_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], InsertMode *addv, int *ierr)
4953b494cfeSSatish Balay {
4963b494cfeSSatish Balay   matsetvalues_(mat, m, idxm, n, idxn, v, addv, ierr);
4973b494cfeSSatish Balay }
4983b494cfeSSatish Balay 
49919caf8f3SSatish Balay PETSC_EXTERN void matsetvaluesnn1_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], InsertMode *addv, int *ierr)
5001b266c99SBarry Smith {
5011b266c99SBarry Smith   matsetvalues_(mat, m, idxm, n, idxn, v, addv, ierr);
5021b266c99SBarry Smith }
5031b266c99SBarry Smith 
50419caf8f3SSatish Balay PETSC_EXTERN void matsetvalues11_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], InsertMode *addv, int *ierr)
5054d03fd2bSBarry Smith {
5064d03fd2bSBarry Smith   matsetvalues_(mat, m, idxm, n, idxn, v, addv, ierr);
5074d03fd2bSBarry Smith }
5084d03fd2bSBarry Smith 
50919caf8f3SSatish Balay PETSC_EXTERN void matsetvaluesn1_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], InsertMode *addv, int *ierr)
5104d03fd2bSBarry Smith {
5114d03fd2bSBarry Smith   matsetvalues_(mat, m, idxm, n, idxn, v, addv, ierr);
5124d03fd2bSBarry Smith }
5134d03fd2bSBarry Smith 
51419caf8f3SSatish Balay PETSC_EXTERN void matsetvalues1n_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], InsertMode *addv, int *ierr)
5154d03fd2bSBarry Smith {
5164d03fd2bSBarry Smith   matsetvalues_(mat, m, idxm, n, idxn, v, addv, ierr);
5174d03fd2bSBarry Smith }
5184d03fd2bSBarry Smith 
51919caf8f3SSatish Balay PETSC_EXTERN void matsetvalueslocal_(Mat *mat, PetscInt *nrow, PetscInt irow[], PetscInt *ncol, PetscInt icol[], PetscScalar y[], InsertMode *addv, int *ierr)
5204d03fd2bSBarry Smith {
5214d03fd2bSBarry Smith   *ierr = MatSetValuesLocal(*mat, *nrow, irow, *ncol, icol, y, *addv);
5224d03fd2bSBarry Smith }
5234d03fd2bSBarry Smith 
52419caf8f3SSatish Balay PETSC_EXTERN void matsetvalueslocal0_(Mat *mat, PetscInt *nrow, PetscInt irow[], PetscInt *ncol, PetscInt icol[], PetscScalar y[], InsertMode *addv, int *ierr)
5253b494cfeSSatish Balay {
5263b494cfeSSatish Balay   matsetvalueslocal_(mat, nrow, irow, ncol, icol, y, addv, ierr);
5273b494cfeSSatish Balay }
5283b494cfeSSatish Balay 
52919caf8f3SSatish Balay PETSC_EXTERN void matsetvalueslocal11_(Mat *mat, PetscInt *nrow, PetscInt irow[], PetscInt *ncol, PetscInt icol[], PetscScalar y[], InsertMode *addv, int *ierr)
5304d03fd2bSBarry Smith {
5314d03fd2bSBarry Smith   matsetvalueslocal_(mat, nrow, irow, ncol, icol, y, addv, ierr);
5324d03fd2bSBarry Smith }
5334d03fd2bSBarry Smith 
53419caf8f3SSatish Balay PETSC_EXTERN void matsetvalueslocal11nn_(Mat *mat, PetscInt *nrow, PetscInt irow[], PetscInt *ncol, PetscInt icol[], PetscScalar y[], InsertMode *addv, int *ierr)
5354d03fd2bSBarry Smith {
5364d03fd2bSBarry Smith   matsetvalueslocal_(mat, nrow, irow, ncol, icol, y, addv, ierr);
5374d03fd2bSBarry Smith }
5384d03fd2bSBarry Smith 
53919caf8f3SSatish Balay PETSC_EXTERN void matsetvalueslocal111_(Mat *mat, PetscInt *nrow, PetscInt irow[], PetscInt *ncol, PetscInt icol[], PetscScalar y[], InsertMode *addv, int *ierr)
5404d03fd2bSBarry Smith {
5414d03fd2bSBarry Smith   matsetvalueslocal_(mat, nrow, irow, ncol, icol, y, addv, ierr);
5424d03fd2bSBarry Smith }
5434d03fd2bSBarry Smith 
54419caf8f3SSatish Balay PETSC_EXTERN void matsetvalueslocal1n_(Mat *mat, PetscInt *nrow, PetscInt irow[], PetscInt *ncol, PetscInt icol[], PetscScalar y[], InsertMode *addv, int *ierr)
5454d03fd2bSBarry Smith {
5464d03fd2bSBarry Smith   matsetvalueslocal_(mat, nrow, irow, ncol, icol, y, addv, ierr);
5474d03fd2bSBarry Smith }
5484d03fd2bSBarry Smith 
54919caf8f3SSatish Balay PETSC_EXTERN void matsetvalueslocaln1_(Mat *mat, PetscInt *nrow, PetscInt irow[], PetscInt *ncol, PetscInt icol[], PetscScalar y[], InsertMode *addv, int *ierr)
5504d03fd2bSBarry Smith {
5514d03fd2bSBarry Smith   matsetvalueslocal_(mat, nrow, irow, ncol, icol, y, addv, ierr);
5524d03fd2bSBarry Smith }
5534d03fd2bSBarry Smith 
55419caf8f3SSatish Balay PETSC_EXTERN void matgetrowmin_(Mat *mat, Vec *v, PetscInt idx[], int *ierr)
55587bcf4e0SBarry Smith {
55687bcf4e0SBarry Smith   CHKFORTRANNULLINTEGER(idx);
55787bcf4e0SBarry Smith   *ierr = MatGetRowMin(*mat, *v, idx);
55887bcf4e0SBarry Smith }
5594d03fd2bSBarry Smith 
56019caf8f3SSatish Balay PETSC_EXTERN void matgetrowminabs_(Mat *mat, Vec *v, PetscInt idx[], int *ierr)
56187bcf4e0SBarry Smith {
56287bcf4e0SBarry Smith   CHKFORTRANNULLINTEGER(idx);
56387bcf4e0SBarry Smith   *ierr = MatGetRowMinAbs(*mat, *v, idx);
56487bcf4e0SBarry Smith }
56587bcf4e0SBarry Smith 
56619caf8f3SSatish Balay PETSC_EXTERN void matgetrowmax_(Mat *mat, Vec *v, PetscInt idx[], int *ierr)
5675928be6bSBarry Smith {
5685928be6bSBarry Smith   CHKFORTRANNULLINTEGER(idx);
5695928be6bSBarry Smith   *ierr = MatGetRowMax(*mat, *v, idx);
5705928be6bSBarry Smith }
5715928be6bSBarry Smith 
57219caf8f3SSatish Balay PETSC_EXTERN void matgetrowmaxabs_(Mat *mat, Vec *v, PetscInt idx[], int *ierr)
5735928be6bSBarry Smith {
5745928be6bSBarry Smith   CHKFORTRANNULLINTEGER(idx);
5755928be6bSBarry Smith   *ierr = MatGetRowMaxAbs(*mat, *v, idx);
5765928be6bSBarry Smith }
5775928be6bSBarry Smith 
578b22b330cSBarry Smith static PetscErrorCode ournullfunction(MatNullSpace sp, Vec x, void *ctx)
579b22b330cSBarry Smith {
5809566063dSJacob Faibussowitsch   PetscCallFortranVoidFunction((*(void (*)(MatNullSpace *, Vec *, void *, PetscErrorCode *))(((PetscObject)sp)->fortran_func_pointers[0]))(&sp, &x, ctx, &ierr));
5813ba16761SJacob Faibussowitsch   return PETSC_SUCCESS;
582b22b330cSBarry Smith }
583b22b330cSBarry Smith 
58419caf8f3SSatish Balay PETSC_EXTERN void matnullspacesetfunction_(MatNullSpace *sp, PetscErrorCode (*rem)(MatNullSpace, Vec, void *), void *ctx, PetscErrorCode *ierr)
585b22b330cSBarry Smith {
586b22b330cSBarry Smith   PetscObjectAllocateFortranPointers(*sp, 1);
587b22b330cSBarry Smith   ((PetscObject)*sp)->fortran_func_pointers[0] = (PetscVoidFunction)rem;
58826fbe8dcSKarl Rupp 
589b22b330cSBarry Smith   *ierr = MatNullSpaceSetFunction(*sp, ournullfunction, ctx);
590b22b330cSBarry Smith }
591b22b330cSBarry Smith 
59219caf8f3SSatish Balay PETSC_EXTERN void matcreatevecs_(Mat *mat, Vec *right, Vec *left, int *ierr)
5937c54600cSBarry Smith {
5947c54600cSBarry Smith   CHKFORTRANNULLOBJECT(right);
5957c54600cSBarry Smith   CHKFORTRANNULLOBJECT(left);
5962a7a6963SBarry Smith   *ierr = MatCreateVecs(*mat, right, left);
5977c54600cSBarry Smith }
5987c54600cSBarry Smith 
5995975b3b6SBarry Smith PETSC_EXTERN void matgetrowij_(Mat *B, PetscInt *shift, PetscBool *sym, PetscBool *blockcompressed, PetscInt *n, PetscInt *ia, size_t *iia, PetscInt *ja, size_t *jja, PetscBool *done, PetscErrorCode *ierr)
600f4e70085SSatish Balay {
6011a83f524SJed Brown   const PetscInt *IA, *JA;
6025975b3b6SBarry Smith   *ierr = MatGetRowIJ(*B, *shift, *sym, *blockcompressed, n, &IA, &JA, done);
6035975b3b6SBarry Smith   if (*ierr) return;
6041a83f524SJed Brown   *iia = PetscIntAddressToFortran(ia, (PetscInt *)IA);
6051a83f524SJed Brown   *jja = PetscIntAddressToFortran(ja, (PetscInt *)JA);
606f4e70085SSatish Balay }
607f4e70085SSatish Balay 
6085975b3b6SBarry Smith PETSC_EXTERN void matrestorerowij_(Mat *B, PetscInt *shift, PetscBool *sym, PetscBool *blockcompressed, PetscInt *n, PetscInt *ia, size_t *iia, PetscInt *ja, size_t *jja, PetscBool *done, PetscErrorCode *ierr)
609f4e70085SSatish Balay {
6101a83f524SJed Brown   const PetscInt *IA = PetscIntAddressFromFortran(ia, *iia), *JA = PetscIntAddressFromFortran(ja, *jja);
6118f7157efSSatish Balay   *ierr = MatRestoreRowIJ(*B, *shift, *sym, *blockcompressed, n, &IA, &JA, done);
612f4e70085SSatish Balay }
613f4e70085SSatish Balay 
614f4e70085SSatish Balay /*
615f4e70085SSatish Balay    This is a poor way of storing the column and value pointers
616f4e70085SSatish Balay   generated by MatGetRow() to be returned with MatRestoreRow()
617f4e70085SSatish Balay   but there is not natural,good place else to store them. Hence
618f4e70085SSatish Balay   Fortran programmers can only have one outstanding MatGetRows()
619f4e70085SSatish Balay   at a time.
620f4e70085SSatish Balay */
6213ba16761SJacob Faibussowitsch static int                matgetrowactive = 0;
622f4e70085SSatish Balay static const PetscInt    *my_ocols        = 0;
623f4e70085SSatish Balay static const PetscScalar *my_ovals        = 0;
624f4e70085SSatish Balay 
62519caf8f3SSatish Balay PETSC_EXTERN void matgetrow_(Mat *mat, PetscInt *row, PetscInt *ncols, PetscInt *cols, PetscScalar *vals, PetscErrorCode *ierr)
626f4e70085SSatish Balay {
627f4e70085SSatish Balay   const PetscInt    **oocols = &my_ocols;
628f4e70085SSatish Balay   const PetscScalar **oovals = &my_ovals;
629f4e70085SSatish Balay 
630f4e70085SSatish Balay   if (matgetrowactive) {
6313ba16761SJacob Faibussowitsch     *ierr = PetscError(PETSC_COMM_SELF, __LINE__, "MatGetRow_Fortran", __FILE__, PETSC_ERR_ARG_WRONGSTATE, PETSC_ERROR_INITIAL, "Cannot have two MatGetRow() active simultaneously\n\
632f4e70085SSatish Balay                call MatRestoreRow() before calling MatGetRow() a second time");
6333ba16761SJacob Faibussowitsch     *ierr = PETSC_ERR_ARG_WRONGSTATE;
634f4e70085SSatish Balay     return;
635f4e70085SSatish Balay   }
636f4e70085SSatish Balay 
6373ba16761SJacob Faibussowitsch   CHKFORTRANNULLINTEGER(cols);
6383ba16761SJacob Faibussowitsch   if (!cols) oocols = NULL;
6393ba16761SJacob Faibussowitsch   CHKFORTRANNULLSCALAR(vals);
6403ba16761SJacob Faibussowitsch   if (!vals) oovals = NULL;
641f4e70085SSatish Balay 
642f4e70085SSatish Balay   *ierr = MatGetRow(*mat, *row, ncols, oocols, oovals);
643f4e70085SSatish Balay   if (*ierr) return;
644f4e70085SSatish Balay 
6453ba16761SJacob Faibussowitsch   if (oocols) {
6463ba16761SJacob Faibussowitsch     *ierr = PetscArraycpy(cols, my_ocols, *ncols);
6473ba16761SJacob Faibussowitsch     if (*ierr) return;
6483ba16761SJacob Faibussowitsch   }
6493ba16761SJacob Faibussowitsch   if (oovals) {
6503ba16761SJacob Faibussowitsch     *ierr = PetscArraycpy(vals, my_ovals, *ncols);
6513ba16761SJacob Faibussowitsch     if (*ierr) return;
6523ba16761SJacob Faibussowitsch   }
653f4e70085SSatish Balay   matgetrowactive = 1;
654f4e70085SSatish Balay }
655f4e70085SSatish Balay 
65619caf8f3SSatish Balay PETSC_EXTERN void matrestorerow_(Mat *mat, PetscInt *row, PetscInt *ncols, PetscInt *cols, PetscScalar *vals, PetscErrorCode *ierr)
657f4e70085SSatish Balay {
658f4e70085SSatish Balay   const PetscInt    **oocols = &my_ocols;
659f4e70085SSatish Balay   const PetscScalar **oovals = &my_ovals;
6603ba16761SJacob Faibussowitsch 
661f4e70085SSatish Balay   if (!matgetrowactive) {
6623ba16761SJacob Faibussowitsch     *ierr = PetscError(PETSC_COMM_SELF, __LINE__, "MatRestoreRow_Fortran", __FILE__, PETSC_ERR_ARG_WRONGSTATE, PETSC_ERROR_INITIAL, "Must call MatGetRow() first");
6633ba16761SJacob Faibussowitsch     *ierr = PETSC_ERR_ARG_WRONGSTATE;
664f4e70085SSatish Balay     return;
665f4e70085SSatish Balay   }
6663ba16761SJacob Faibussowitsch   CHKFORTRANNULLINTEGER(cols);
6673ba16761SJacob Faibussowitsch   if (!cols) oocols = NULL;
6683ba16761SJacob Faibussowitsch   CHKFORTRANNULLSCALAR(vals);
6693ba16761SJacob Faibussowitsch   if (!vals) oovals = NULL;
670f4e70085SSatish Balay 
671f4e70085SSatish Balay   *ierr           = MatRestoreRow(*mat, *row, ncols, oocols, oovals);
672f4e70085SSatish Balay   matgetrowactive = 0;
673f4e70085SSatish Balay }
674f4e70085SSatish Balay 
67519caf8f3SSatish Balay PETSC_EXTERN void matview_(Mat *mat, PetscViewer *vin, PetscErrorCode *ierr)
676f4e70085SSatish Balay {
677f4e70085SSatish Balay   PetscViewer v;
678f4e70085SSatish Balay   PetscPatchDefaultViewers_Fortran(vin, v);
679f4e70085SSatish Balay   *ierr = MatView(*mat, v);
680f4e70085SSatish Balay }
681f4e70085SSatish Balay 
68219caf8f3SSatish Balay PETSC_EXTERN void matload_(Mat *mat, PetscViewer *vin, PetscErrorCode *ierr)
683f7e310deSShri Abhyankar {
684f7e310deSShri Abhyankar   PetscViewer v;
685f7e310deSShri Abhyankar   PetscPatchDefaultViewers_Fortran(vin, v);
686112444f4SShri Abhyankar   *ierr = MatLoad(*mat, v);
687f7e310deSShri Abhyankar }
688f7e310deSShri Abhyankar 
68919caf8f3SSatish Balay PETSC_EXTERN void matseqaijgetarray_(Mat *mat, PetscScalar *fa, size_t *ia, PetscErrorCode *ierr)
690f4e70085SSatish Balay {
691f4e70085SSatish Balay   PetscScalar *mm;
692f4e70085SSatish Balay   PetscInt     m, n;
693f4e70085SSatish Balay 
6945975b3b6SBarry Smith   *ierr = MatSeqAIJGetArray(*mat, &mm);
6955975b3b6SBarry Smith   if (*ierr) return;
6965975b3b6SBarry Smith   *ierr = MatGetSize(*mat, &m, &n);
6975975b3b6SBarry Smith   if (*ierr) return;
6985975b3b6SBarry Smith   *ierr = PetscScalarAddressToFortran((PetscObject)*mat, 1, fa, mm, m * n, ia);
6995975b3b6SBarry Smith   if (*ierr) return;
700f4e70085SSatish Balay }
701f4e70085SSatish Balay 
70219caf8f3SSatish Balay PETSC_EXTERN void matseqaijrestorearray_(Mat *mat, PetscScalar *fa, size_t *ia, PetscErrorCode *ierr)
703f4e70085SSatish Balay {
704f4e70085SSatish Balay   PetscScalar *lx;
705f4e70085SSatish Balay   PetscInt     m, n;
706f4e70085SSatish Balay 
7075975b3b6SBarry Smith   *ierr = MatGetSize(*mat, &m, &n);
7085975b3b6SBarry Smith   if (*ierr) return;
7095975b3b6SBarry Smith   *ierr = PetscScalarAddressFromFortran((PetscObject)*mat, fa, *ia, m * n, &lx);
7105975b3b6SBarry Smith   if (*ierr) return;
7115975b3b6SBarry Smith   *ierr = MatSeqAIJRestoreArray(*mat, &lx);
7125975b3b6SBarry Smith   if (*ierr) return;
713f4e70085SSatish Balay }
714f4e70085SSatish Balay 
71519caf8f3SSatish Balay PETSC_EXTERN void matdensegetarray_(Mat *mat, PetscScalar *fa, size_t *ia, PetscErrorCode *ierr)
71673a71a0fSBarry Smith {
71773a71a0fSBarry Smith   PetscScalar *mm;
71873a71a0fSBarry Smith   PetscInt     m, n;
71973a71a0fSBarry Smith 
7205975b3b6SBarry Smith   *ierr = MatDenseGetArray(*mat, &mm);
7215975b3b6SBarry Smith   if (*ierr) return;
7225975b3b6SBarry Smith   *ierr = MatGetSize(*mat, &m, &n);
7235975b3b6SBarry Smith   if (*ierr) return;
7245975b3b6SBarry Smith   *ierr = PetscScalarAddressToFortran((PetscObject)*mat, 1, fa, mm, m * n, ia);
7255975b3b6SBarry Smith   if (*ierr) return;
72673a71a0fSBarry Smith }
72773a71a0fSBarry Smith 
72819caf8f3SSatish Balay PETSC_EXTERN void matdenserestorearray_(Mat *mat, PetscScalar *fa, size_t *ia, PetscErrorCode *ierr)
72973a71a0fSBarry Smith {
73073a71a0fSBarry Smith   PetscScalar *lx;
73173a71a0fSBarry Smith   PetscInt     m, n;
73273a71a0fSBarry Smith 
7335975b3b6SBarry Smith   *ierr = MatGetSize(*mat, &m, &n);
7345975b3b6SBarry Smith   if (*ierr) return;
7355975b3b6SBarry Smith   *ierr = PetscScalarAddressFromFortran((PetscObject)*mat, fa, *ia, m * n, &lx);
7365975b3b6SBarry Smith   if (*ierr) return;
7375975b3b6SBarry Smith   *ierr = MatDenseRestoreArray(*mat, &lx);
7385975b3b6SBarry Smith   if (*ierr) return;
73973a71a0fSBarry Smith }
74073a71a0fSBarry Smith 
74119caf8f3SSatish Balay PETSC_EXTERN void matdensegetarrayread_(Mat *mat, PetscScalar *fa, size_t *ia, PetscErrorCode *ierr)
7428572280aSBarry Smith {
7437067c7f7SBarry Smith   const PetscScalar *mm;
7448572280aSBarry Smith   PetscInt           m, n;
7458572280aSBarry Smith 
7465975b3b6SBarry Smith   *ierr = MatDenseGetArrayRead(*mat, &mm);
7475975b3b6SBarry Smith   if (*ierr) return;
7485975b3b6SBarry Smith   *ierr = MatGetSize(*mat, &m, &n);
7495975b3b6SBarry Smith   if (*ierr) return;
7505975b3b6SBarry Smith   *ierr = PetscScalarAddressToFortran((PetscObject)*mat, 1, fa, (PetscScalar *)mm, m * n, ia);
7515975b3b6SBarry Smith   if (*ierr) return;
7528572280aSBarry Smith }
7538572280aSBarry Smith 
75419caf8f3SSatish Balay PETSC_EXTERN void matdenserestorearrayread_(Mat *mat, PetscScalar *fa, size_t *ia, PetscErrorCode *ierr)
7558572280aSBarry Smith {
7567067c7f7SBarry Smith   const PetscScalar *lx;
7578572280aSBarry Smith   PetscInt           m, n;
7588572280aSBarry Smith 
7595975b3b6SBarry Smith   *ierr = MatGetSize(*mat, &m, &n);
7605975b3b6SBarry Smith   if (*ierr) return;
7615975b3b6SBarry Smith   *ierr = PetscScalarAddressFromFortran((PetscObject)*mat, fa, *ia, m * n, (PetscScalar **)&lx);
7625975b3b6SBarry Smith   if (*ierr) return;
7635975b3b6SBarry Smith   *ierr = MatDenseRestoreArrayRead(*mat, &lx);
7645975b3b6SBarry Smith   if (*ierr) return;
7658572280aSBarry Smith }
7668572280aSBarry Smith 
76719caf8f3SSatish Balay PETSC_EXTERN void matfactorgetsolverpackage_(Mat *mat, char *name, PetscErrorCode *ierr, PETSC_FORTRAN_CHARLEN_T len)
76835bd34faSBarry Smith {
76935bd34faSBarry Smith   const char *tname;
77035bd34faSBarry Smith 
7715975b3b6SBarry Smith   *ierr = MatFactorGetSolverType(*mat, &tname);
7725975b3b6SBarry Smith   if (*ierr) return;
77335bd34faSBarry Smith   if (name != PETSC_NULL_CHARACTER_Fortran) {
7745975b3b6SBarry Smith     *ierr = PetscStrncpy(name, tname, len);
7755975b3b6SBarry Smith     if (*ierr) return;
77635bd34faSBarry Smith   }
77735bd34faSBarry Smith   FIXRETURNCHAR(PETSC_TRUE, name, len);
77835bd34faSBarry Smith }
77935bd34faSBarry Smith 
78019caf8f3SSatish Balay PETSC_EXTERN void matgetfactor_(Mat *mat, char *outtype, MatFactorType *ftype, Mat *M, PetscErrorCode *ierr, PETSC_FORTRAN_CHARLEN_T len)
7815dffd610SBarry Smith {
7825dffd610SBarry Smith   char *t;
7835dffd610SBarry Smith   FIXCHAR(outtype, len, t);
7845975b3b6SBarry Smith   *ierr = MatGetFactor(*mat, t, *ftype, M);
7855975b3b6SBarry Smith   if (*ierr) return;
7865dffd610SBarry Smith   FREECHAR(outtype, t);
7875dffd610SBarry Smith }
7885dffd610SBarry Smith 
78919caf8f3SSatish Balay PETSC_EXTERN void matconvert_(Mat *mat, char *outtype, MatReuse *reuse, Mat *M, PetscErrorCode *ierr, PETSC_FORTRAN_CHARLEN_T len)
790f4e70085SSatish Balay {
791f4e70085SSatish Balay   char *t;
792f4e70085SSatish Balay   FIXCHAR(outtype, len, t);
7935975b3b6SBarry Smith   *ierr = MatConvert(*mat, t, *reuse, M);
7945975b3b6SBarry Smith   if (*ierr) return;
795f4e70085SSatish Balay   FREECHAR(outtype, t);
796f4e70085SSatish Balay }
797f4e70085SSatish Balay 
798f4e70085SSatish Balay /*
7997dae84e0SHong Zhang     MatCreateSubmatrices() is slightly different from C since the
800f4e70085SSatish Balay     Fortran provides the array to hold the submatrix objects,while in C that
8017dae84e0SHong Zhang     array is allocated by the MatCreateSubmatrices()
802f4e70085SSatish Balay */
80319caf8f3SSatish Balay PETSC_EXTERN void matcreatesubmatrices_(Mat *mat, PetscInt *n, IS *isrow, IS *iscol, MatReuse *scall, Mat *smat, PetscErrorCode *ierr)
804f4e70085SSatish Balay {
805f4e70085SSatish Balay   Mat     *lsmat;
806f4e70085SSatish Balay   PetscInt i;
807f4e70085SSatish Balay 
808f4e70085SSatish Balay   if (*scall == MAT_INITIAL_MATRIX) {
8097dae84e0SHong Zhang     *ierr = MatCreateSubMatrices(*mat, *n, isrow, iscol, *scall, &lsmat);
81069d47153SPierre Jolivet     for (i = 0; i <= *n; i++) { /* lsmat[*n] might be a dummy matrix for saving data structure */
811f4e70085SSatish Balay       smat[i] = lsmat[i];
812f4e70085SSatish Balay     }
813f4e70085SSatish Balay     *ierr = PetscFree(lsmat);
814f4e70085SSatish Balay   } else {
8157dae84e0SHong Zhang     *ierr = MatCreateSubMatrices(*mat, *n, isrow, iscol, *scall, &smat);
816f4e70085SSatish Balay   }
817f4e70085SSatish Balay }
818f4e70085SSatish Balay 
8197d6bfa3bSBarry Smith /*
82081ec7b92Smarius     MatCreateSubmatrices() is slightly different from C since the
82181ec7b92Smarius     Fortran provides the array to hold the submatrix objects,while in C that
82281ec7b92Smarius     array is allocated by the MatCreateSubmatrices()
82381ec7b92Smarius */
82419caf8f3SSatish Balay PETSC_EXTERN void matcreatesubmatricesmpi_(Mat *mat, PetscInt *n, IS *isrow, IS *iscol, MatReuse *scall, Mat *smat, PetscErrorCode *ierr)
82581ec7b92Smarius {
82681ec7b92Smarius   Mat     *lsmat;
82781ec7b92Smarius   PetscInt i;
82881ec7b92Smarius 
82981ec7b92Smarius   if (*scall == MAT_INITIAL_MATRIX) {
83081ec7b92Smarius     *ierr = MatCreateSubMatricesMPI(*mat, *n, isrow, iscol, *scall, &lsmat);
83169d47153SPierre Jolivet     for (i = 0; i <= *n; i++) { /* lsmat[*n] might be a dummy matrix for saving data structure */
83281ec7b92Smarius       smat[i] = lsmat[i];
83381ec7b92Smarius     }
83481ec7b92Smarius     *ierr = PetscFree(lsmat);
83581ec7b92Smarius   } else {
83681ec7b92Smarius     *ierr = MatCreateSubMatricesMPI(*mat, *n, isrow, iscol, *scall, &smat);
83781ec7b92Smarius   }
83881ec7b92Smarius }
83981ec7b92Smarius 
84081ec7b92Smarius /*
8417d6bfa3bSBarry Smith     MatDestroyMatrices() is slightly different from C since the
842de7ef04eSHong Zhang     Fortran does not free the array of matrix objects, while in C that
843de7ef04eSHong Zhang     the array is freed
844de7ef04eSHong Zhang */
84519caf8f3SSatish Balay PETSC_EXTERN void matdestroymatrices_(PetscInt *n, Mat *smat, PetscErrorCode *ierr)
846de7ef04eSHong Zhang {
847de7ef04eSHong Zhang   PetscInt i;
848de7ef04eSHong Zhang 
849de7ef04eSHong Zhang   for (i = 0; i < *n; i++) {
8501fb7b255SJunchao Zhang     PETSC_FORTRAN_OBJECT_F_DESTROYED_TO_C_NULL(&smat[i]);
8515975b3b6SBarry Smith     *ierr = MatDestroy(&smat[i]);
8525975b3b6SBarry Smith     if (*ierr) return;
8531fb7b255SJunchao Zhang     PETSC_FORTRAN_OBJECT_C_NULL_TO_F_DESTROYED(&smat[i]);
854de7ef04eSHong Zhang   }
855de7ef04eSHong Zhang }
856de7ef04eSHong Zhang 
857de7ef04eSHong Zhang /*
858de7ef04eSHong Zhang     MatDestroySubMatrices() is slightly different from C since the
8597d6bfa3bSBarry Smith     Fortran provides the array to hold the submatrix objects, while in C that
8607dae84e0SHong Zhang     array is allocated by the MatCreateSubmatrices()
8617d6bfa3bSBarry Smith */
86219caf8f3SSatish Balay PETSC_EXTERN void matdestroysubmatrices_(PetscInt *n, Mat *smat, PetscErrorCode *ierr)
8637d6bfa3bSBarry Smith {
864de7ef04eSHong Zhang   Mat     *lsmat;
8657d6bfa3bSBarry Smith   PetscInt i;
8667d6bfa3bSBarry Smith 
867de7ef04eSHong Zhang   *ierr = PetscMalloc1(*n + 1, &lsmat);
868de7ef04eSHong Zhang   for (i = 0; i <= *n; i++) {
8691fb7b255SJunchao Zhang     PETSC_FORTRAN_OBJECT_F_DESTROYED_TO_C_NULL(&smat[i]);
870de7ef04eSHong Zhang     lsmat[i] = smat[i];
8717d6bfa3bSBarry Smith   }
872de7ef04eSHong Zhang   *ierr = MatDestroySubMatrices(*n, &lsmat);
8735975b3b6SBarry Smith   for (i = 0; i <= *n; i++) { PETSC_FORTRAN_OBJECT_C_NULL_TO_F_DESTROYED(&smat[i]); }
8741fb7b255SJunchao Zhang }
8751fb7b255SJunchao Zhang 
8761fb7b255SJunchao Zhang PETSC_EXTERN void matdestroy_(Mat *x, int *ierr)
8771fb7b255SJunchao Zhang {
8781fb7b255SJunchao Zhang   PETSC_FORTRAN_OBJECT_F_DESTROYED_TO_C_NULL(x);
8795975b3b6SBarry Smith   *ierr = MatDestroy(x);
8805975b3b6SBarry Smith   if (*ierr) return;
8811fb7b255SJunchao Zhang   PETSC_FORTRAN_OBJECT_C_NULL_TO_F_DESTROYED(x);
882df750dc8SHong Zhang }
883df750dc8SHong Zhang 
88419caf8f3SSatish Balay PETSC_EXTERN void matsetoptionsprefix_(Mat *mat, char *prefix, PetscErrorCode *ierr, PETSC_FORTRAN_CHARLEN_T len)
8851eea217eSSatish Balay {
8861eea217eSSatish Balay   char *t;
8871eea217eSSatish Balay 
8881eea217eSSatish Balay   FIXCHAR(prefix, len, t);
8895975b3b6SBarry Smith   *ierr = MatSetOptionsPrefix(*mat, t);
8905975b3b6SBarry Smith   if (*ierr) return;
8911eea217eSSatish Balay   FREECHAR(prefix, t);
8921eea217eSSatish Balay }
8931eea217eSSatish Balay 
89419caf8f3SSatish Balay PETSC_EXTERN void matnullspaceremove_(MatNullSpace *sp, Vec *vec, PetscErrorCode *ierr)
895812c3f48SMatthew Knepley {
896a8f51744SPierre Jolivet   CHKFORTRANNULLOBJECT(*sp);
897d0195637SJed Brown   *ierr = MatNullSpaceRemove(*sp, *vec);
898812c3f48SMatthew Knepley }
8991eea217eSSatish Balay 
90019caf8f3SSatish Balay PETSC_EXTERN void matgetinfo_(Mat *mat, MatInfoType *flag, MatInfo *info, int *ierr)
9015ba43861SSatish Balay {
9024d03fd2bSBarry Smith   *ierr = MatGetInfo(*mat, *flag, info);
9035ba43861SSatish Balay }
9045ba43861SSatish Balay 
90519caf8f3SSatish Balay PETSC_EXTERN void matlufactor_(Mat *mat, IS *row, IS *col, const MatFactorInfo *info, int *ierr)
90622688b47SSatish Balay {
9074d03fd2bSBarry Smith   *ierr = MatLUFactor(*mat, *row, *col, info);
90822688b47SSatish Balay }
90922688b47SSatish Balay 
91019caf8f3SSatish Balay PETSC_EXTERN void matilufactor_(Mat *mat, IS *row, IS *col, const MatFactorInfo *info, int *ierr)
91122688b47SSatish Balay {
9124d03fd2bSBarry Smith   *ierr = MatILUFactor(*mat, *row, *col, info);
91322688b47SSatish Balay }
91422688b47SSatish Balay 
91519caf8f3SSatish Balay PETSC_EXTERN void matlufactorsymbolic_(Mat *fact, Mat *mat, IS *row, IS *col, const MatFactorInfo *info, int *ierr)
91622688b47SSatish Balay {
9174d03fd2bSBarry Smith   *ierr = MatLUFactorSymbolic(*fact, *mat, *row, *col, info);
91822688b47SSatish Balay }
91922688b47SSatish Balay 
92019caf8f3SSatish Balay PETSC_EXTERN void matlufactornumeric_(Mat *fact, Mat *mat, const MatFactorInfo *info, int *ierr)
92122688b47SSatish Balay {
9224d03fd2bSBarry Smith   *ierr = MatLUFactorNumeric(*fact, *mat, info);
92322688b47SSatish Balay }
92422688b47SSatish Balay 
92519caf8f3SSatish Balay PETSC_EXTERN void matcholeskyfactor_(Mat *mat, IS *perm, const MatFactorInfo *info, int *ierr)
92622688b47SSatish Balay {
9274d03fd2bSBarry Smith   *ierr = MatCholeskyFactor(*mat, *perm, info);
92822688b47SSatish Balay }
92922688b47SSatish Balay 
93019caf8f3SSatish Balay PETSC_EXTERN void matcholeskyfactorsymbolic_(Mat *fact, Mat *mat, IS *perm, const MatFactorInfo *info, int *ierr)
93122688b47SSatish Balay {
9324d03fd2bSBarry Smith   *ierr = MatCholeskyFactorSymbolic(*fact, *mat, *perm, info);
93322688b47SSatish Balay }
93422688b47SSatish Balay 
93519caf8f3SSatish Balay PETSC_EXTERN void matcholeskyfactornumeric_(Mat *fact, Mat *mat, const MatFactorInfo *info, int *ierr)
93622688b47SSatish Balay {
9374d03fd2bSBarry Smith   *ierr = MatCholeskyFactorNumeric(*fact, *mat, info);
93822688b47SSatish Balay }
93922688b47SSatish Balay 
94019caf8f3SSatish Balay PETSC_EXTERN void matilufactorsymbolic_(Mat *fact, Mat *mat, IS *row, IS *col, const MatFactorInfo *info, int *ierr)
94122688b47SSatish Balay {
9424d03fd2bSBarry Smith   *ierr = MatILUFactorSymbolic(*fact, *mat, *row, *col, info);
94322688b47SSatish Balay }
94422688b47SSatish Balay 
94519caf8f3SSatish Balay PETSC_EXTERN void maticcfactorsymbolic_(Mat *fact, Mat *mat, IS *perm, const MatFactorInfo *info, int *ierr)
94622688b47SSatish Balay {
9474d03fd2bSBarry Smith   *ierr = MatICCFactorSymbolic(*fact, *mat, *perm, info);
94822688b47SSatish Balay }
94922688b47SSatish Balay 
95019caf8f3SSatish Balay PETSC_EXTERN void maticcfactor_(Mat *mat, IS *row, const MatFactorInfo *info, int *ierr)
95122688b47SSatish Balay {
9524d03fd2bSBarry Smith   *ierr = MatICCFactor(*mat, *row, info);
95322688b47SSatish Balay }
95422688b47SSatish Balay 
95519caf8f3SSatish Balay PETSC_EXTERN void matfactorinfoinitialize_(MatFactorInfo *info, int *ierr)
95622688b47SSatish Balay {
9574d03fd2bSBarry Smith   *ierr = MatFactorInfoInitialize(info);
95822688b47SSatish Balay }
95919caf8f3SSatish Balay PETSC_EXTERN void matzerorowslocal_(Mat *mat, PetscInt *numRows, PetscInt rows[], PetscScalar *diag, Vec *x, Vec *b, int *ierr)
960d27e6124SSatish Balay {
961d27e6124SSatish Balay   *ierr = MatZeroRowsLocal(*mat, *numRows, rows, *diag, *x, *b);
962d27e6124SSatish Balay }
96319caf8f3SSatish Balay PETSC_EXTERN void matzerorowslocal0_(Mat *mat, PetscInt *numRows, PetscInt rows[], PetscScalar *diag, Vec *x, Vec *b, int *ierr)
964d27e6124SSatish Balay {
965d27e6124SSatish Balay   matzerorowslocal_(mat, numRows, rows, diag, x, b, ierr);
966d27e6124SSatish Balay }
96719caf8f3SSatish Balay PETSC_EXTERN void matzerorowslocal1_(Mat *mat, PetscInt *numRows, PetscInt rows[], PetscScalar *diag, Vec *x, Vec *b, int *ierr)
968d27e6124SSatish Balay {
969d27e6124SSatish Balay   matzerorowslocal_(mat, numRows, rows, diag, x, b, ierr);
970d27e6124SSatish Balay }
97119caf8f3SSatish Balay PETSC_EXTERN void matviewfromoptions_(Mat *ao, PetscObject obj, char *type, PetscErrorCode *ierr, PETSC_FORTRAN_CHARLEN_T len)
972fe2efc57SMark {
973fe2efc57SMark   char *t;
974fe2efc57SMark 
975fe2efc57SMark   FIXCHAR(type, len, t);
976b14c0cbaSBlaise Bourdin   CHKFORTRANNULLOBJECT(obj);
9775975b3b6SBarry Smith   *ierr = MatViewFromOptions(*ao, obj, t);
9785975b3b6SBarry Smith   if (*ierr) return;
979fe2efc57SMark   FREECHAR(type, t);
980fe2efc57SMark }
981