xref: /petsc/src/mat/interface/ftn-custom/zmatrixf.c (revision 0764c050596daa831a94d744a95074c51cdb668c)
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
1285835d77SBarry Smith   #define matgetvalues11a_             MATGETVALUES11A
1385835d77SBarry Smith   #define matgetvalues1n_              MATGETVALUES1N
1485835d77SBarry Smith   #define matgetvaluesn1_              MATGETVALUESN1
1585835d77SBarry Smith   #define matgetvalueslocal_           MATGETVALUESLOCAL
1685835d77SBarry Smith   #define matgetvalueslocal0_          MATGETVALUESLOCAL0
1785835d77SBarry Smith   #define matgetvalueslocalnn1_        MATGETVALUESLOCALNN1
1885835d77SBarry Smith   #define matgetvalueslocalnnnn_       MATGETVALUESLOCALNNNN
1985835d77SBarry Smith   #define matgetvalueslocal11_         MATGETVALUESLOCAL11
2085835d77SBarry Smith   #define matgetvalueslocal11a_        MATGETVALUESLOCAL11A
2185835d77SBarry Smith   #define matgetvalueslocal1n_         MATGETVALUESLOCAL1N
2285835d77SBarry 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
497d6bfa3bSBarry Smith   #define matdestroymatrices_          MATDESTROYMATRICES
50df750dc8SHong Zhang   #define matdestroysubmatrices_       MATDESTROYSUBMATRICES
5135bd34faSBarry Smith   #define matfactorgetsolverpackage_   MATFACTORGETSOLVERPACKAGE
52f4e70085SSatish Balay   #define matgetrowij_                 MATGETROWIJ
53f4e70085SSatish Balay   #define matrestorerowij_             MATRESTOREROWIJ
54f4e70085SSatish Balay   #define matgetrow_                   MATGETROW
55f4e70085SSatish Balay   #define matrestorerow_               MATRESTOREROW
568c778c55SBarry Smith   #define matseqaijgetarray_           MATSEQAIJGETARRAY
576778691eSSatish Balay   #define matseqaijrestorearray_       MATSEQAIJRESTOREARRAY
588c778c55SBarry Smith   #define matdensegetarray_            MATDENSEGETARRAY
598572280aSBarry Smith   #define matdensegetarrayread_        MATDENSEGETARRAYREAD
608c778c55SBarry Smith   #define matdenserestorearray_        MATDENSERESTOREARRAY
618572280aSBarry Smith   #define matdenserestorearrayread_    MATDENSERESTOREARRAYREAD
627dae84e0SHong Zhang   #define matcreatesubmatrices_        MATCREATESUBMATRICES
6381ec7b92Smarius   #define matcreatesubmatricesmpi_     MATCREATESUBMATRICESMPI
6417ede90eSSatish Balay   #define matzerorowscolumns_          MATZEROROWSCOLUMNS
6517ede90eSSatish Balay   #define matzerorowscolumnsis_        MATZEROROWSCOLUMNSIS
6617ede90eSSatish Balay   #define matzerorowsstencil_          MATZEROROWSSTENCIL
67d25a37e1SJed Brown   #define matzerorowscolumnsstencil_   MATZEROROWSCOLUMNSSTENCIL
68f4e70085SSatish Balay   #define matzerorows_                 MATZEROROWS
69f4e70085SSatish Balay   #define matzerorowsis_               MATZEROROWSIS
70f4e70085SSatish Balay   #define matzerorowslocal_            MATZEROROWSLOCAL
71d27e6124SSatish Balay   #define matzerorowslocal0_           MATZEROROWSLOCAL0
72d27e6124SSatish Balay   #define matzerorowslocal1_           MATZEROROWSLOCAL1
73f4e70085SSatish Balay   #define matzerorowslocalis_          MATZEROROWSLOCALIS
7417ede90eSSatish Balay   #define matzerorowscolumnslocal_     MATZEROROWSCOLUMNSLOCAL
7517ede90eSSatish Balay   #define matzerorowscolumnslocalis_   MATZEROROWSCOLUMNSLOCALIS
76fcc9d04bSBarry Smith   #define matcreatevecs_               MATCREATEVECS
77c9d5ca86SBarry Smith   #define matnullspaceremove_          MATNULLSPACEREMOVE
785ba43861SSatish Balay   #define matgetinfo_                  MATGETINFO
7922688b47SSatish Balay   #define matlufactor_                 MATLUFACTOR
8022688b47SSatish Balay   #define matilufactor_                MATILUFACTOR
8122688b47SSatish Balay   #define matlufactorsymbolic_         MATLUFACTORSYMBOLIC
8222688b47SSatish Balay   #define matlufactornumeric_          MATLUFACTORNUMERIC
8322688b47SSatish Balay   #define matcholeskyfactor_           MATCHOLESKYFACTOR
8422688b47SSatish Balay   #define matcholeskyfactorsymbolic_   MATCHOLESKYFACTORSYMBOLIC
8522688b47SSatish Balay   #define matcholeskyfactornumeric_    MATCHOLESKYFACTORNUMERIC
8622688b47SSatish Balay   #define matilufactorsymbolic_        MATILUFACTORSYMBOLIC
8722688b47SSatish Balay   #define maticcfactorsymbolic_        MATICCFACTORSYMBOLIC
8822688b47SSatish Balay   #define maticcfactor_                MATICCFACTOR
8922688b47SSatish Balay   #define matfactorinfoinitialize_     MATFACTORINFOINITIALIZE
90b22b330cSBarry Smith   #define matnullspacesetfunction_     MATNULLSPACESETFUNCTION
910905d9aaSJed Brown   #define matfindnonzerorows_          MATFINDNONZEROROWS
9238135fcbSMartin Diehl   #define matgetsize_                  MATGETSIZE
933be0408cSBarry Smith   #define matgetsize00_                MATGETSIZE00
943be0408cSBarry Smith   #define matgetsize10_                MATGETSIZE10
953be0408cSBarry Smith   #define matgetsize01_                MATGETSIZE01
9638135fcbSMartin Diehl   #define matgetlocalsize_             MATGETLOCALSIZE
973be0408cSBarry Smith   #define matgetlocalsize00_           MATGETLOCALSIZE00
983be0408cSBarry Smith   #define matgetlocalsize10_           MATGETLOCALSIZE10
993be0408cSBarry Smith   #define matgetlocalsize01_           MATGETLOCALSIZE01
100260663b8SBarry Smith   #define matsetnullspace_             MATSETNULLSPACE
101260663b8SBarry Smith   #define matgetownershiprange_        MATGETOWNERSHIPRANGE
10291f56e93SMartin Diehl   #define matgetownershiprange00_      MATGETOWNERSHIPRANGE00
10391f56e93SMartin Diehl   #define matgetownershiprange10_      MATGETOWNERSHIPRANGE10
10491f56e93SMartin Diehl   #define matgetownershiprange01_      MATGETOWNERSHIPRANGE01
1055c16e969SSatish Balay   #define matgetownershiprange11_      MATGETOWNERSHIPRANGE11
106c08c7cb9SBarry Smith   #define matgetownershipis_           MATGETOWNERSHIPIS
107f4e70085SSatish Balay #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE)
1084d03fd2bSBarry Smith   #define matsetvalues_                matsetvalues
1091006886cSSatish Balay   #define matsetvaluesnnnn_            matsetvaluesnnnn
1103b494cfeSSatish Balay   #define matsetvalues0_               matsetvalues0
1111b266c99SBarry Smith   #define matsetvaluesnn1_             matsetvaluesnn1
1124d03fd2bSBarry Smith   #define matsetvalues11_              matsetvalues11
1134d03fd2bSBarry Smith   #define matsetvaluesn1_              matsetvaluesn1
1144d03fd2bSBarry Smith   #define matsetvalues1n_              matsetvalues1n
1154d03fd2bSBarry Smith   #define matsetvalueslocal_           matsetvalueslocal
1163b494cfeSSatish Balay   #define matsetvalueslocal0_          matsetvalueslocal0
1174d03fd2bSBarry Smith   #define matsetvalueslocal11_         matsetvalueslocal11
1184d03fd2bSBarry Smith   #define matsetvalueslocal11nn_       matsetvalueslocal11nn
1194d03fd2bSBarry Smith   #define matsetvalueslocal111_        matsetvalueslocal111
1204d03fd2bSBarry Smith   #define matsetvalueslocal1n_         matsetvalueslocal1n
1214d03fd2bSBarry Smith   #define matsetvalueslocaln1_         matsetvalueslocaln1
1224d03fd2bSBarry Smith   #define matsetvaluesblocked_         matsetvaluesblocked
1233b494cfeSSatish Balay   #define matsetvaluesblocked0_        matsetvaluesblocked0
1240aee3464SBarry Smith   #define matsetvaluesblocked2_        matsetvaluesblocked2
1254d03fd2bSBarry Smith   #define matsetvaluesblocked11_       matsetvaluesblocked11
1264d03fd2bSBarry Smith   #define matsetvaluesblocked111_      matsetvaluesblocked111
1274d03fd2bSBarry Smith   #define matsetvaluesblocked1n_       matsetvaluesblocked1n
12824aa916eSSatish Balay   #define matsetvaluesblockedn1_       matsetvaluesblockedn1
1294d03fd2bSBarry Smith   #define matsetvaluesblockedlocal_    matsetvaluesblockedlocal
1303b494cfeSSatish Balay   #define matsetvaluesblockedlocal0_   matsetvaluesblockedlocal0
1314d03fd2bSBarry Smith   #define matsetvaluesblockedlocal11_  matsetvaluesblockedlocal11
1324d03fd2bSBarry Smith   #define matsetvaluesblockedlocal111_ matsetvaluesblockedlocal111
1334d03fd2bSBarry Smith   #define matsetvaluesblockedlocal1n_  matsetvaluesblockedlocal1n
13424aa916eSSatish Balay   #define matsetvaluesblockedlocaln1_  matsetvaluesblockedlocaln1
1355928be6bSBarry Smith   #define matdestroymatrices_          matdestroymatrices
136df750dc8SHong Zhang   #define matdestroysubmatrices_       matdestroysubmatrices
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
1438c778c55SBarry Smith   #define matseqaijgetarray_           matseqaijgetarray
1448c778c55SBarry Smith   #define matseqaijrestorearray_       matseqaijrestorearray
1458c778c55SBarry Smith   #define matdensegetarray_            matdensegetarray
1468572280aSBarry Smith   #define matdensegetarrayread_        matdensegetarrayread
1478c778c55SBarry Smith   #define matdenserestorearray_        matdenserestorearray
1488572280aSBarry Smith   #define matdenserestorearrayread_    matdenserestorearrayread
1497dae84e0SHong Zhang   #define matcreatesubmatrices_        matcreatesubmatrices
15081ec7b92Smarius   #define matcreatesubmatricesmpi_     matcreatesubmatricesmpi
15117ede90eSSatish Balay   #define matzerorowscolumns_          matzerorowscolumns
15217ede90eSSatish Balay   #define matzerorowscolumnsis_        matzerorowscolumnsis
15317ede90eSSatish Balay   #define matzerorowsstencil_          matzerorowsstencil
154d25a37e1SJed Brown   #define matzerorowscolumnsstencil_   matzerorowscolumnsstencil
155f4e70085SSatish Balay   #define matzerorows_                 matzerorows
156f4e70085SSatish Balay   #define matzerorowsis_               matzerorowsis
157f4e70085SSatish Balay   #define matzerorowslocal_            matzerorowslocal
158f4e70085SSatish Balay   #define matzerorowslocalis_          matzerorowslocalis
15917ede90eSSatish Balay   #define matzerorowscolumnslocal_     matzerorowscolumnslocal
16017ede90eSSatish Balay   #define matzerorowscolumnslocalis_   matzerorowscolumnslocalis
161812c3f48SMatthew Knepley   #define matnullspaceremove_          matnullspaceremove
1625ba43861SSatish Balay   #define matgetinfo_                  matgetinfo
16322688b47SSatish Balay   #define matlufactor_                 matlufactor
16422688b47SSatish Balay   #define matilufactor_                matilufactor
16522688b47SSatish Balay   #define matlufactorsymbolic_         matlufactorsymbolic
16622688b47SSatish Balay   #define matlufactornumeric_          matlufactornumeric
16722688b47SSatish Balay   #define matcholeskyfactor_           matcholeskyfactor
16822688b47SSatish Balay   #define matcholeskyfactorsymbolic_   matcholeskyfactorsymbolic
16922688b47SSatish Balay   #define matcholeskyfactornumeric_    matcholeskyfactornumeric
17022688b47SSatish Balay   #define matilufactorsymbolic_        matilufactorsymbolic
17122688b47SSatish Balay   #define maticcfactorsymbolic_        maticcfactorsymbolic
17222688b47SSatish Balay   #define maticcfactor_                maticcfactor
17322688b47SSatish Balay   #define matfactorinfoinitialize_     matfactorinfoinitialize
174b22b330cSBarry Smith   #define matnullspacesetfunction_     matnullspacesetfunction
1750905d9aaSJed Brown   #define matfindnonzerorows_          matfindnonzerorows
17638135fcbSMartin Diehl   #define matgetsize_                  matgetsize
1773be0408cSBarry Smith   #define matgetsize00_                matgetsize00
1783be0408cSBarry Smith   #define matgetsize10_                matgetsize10
1793be0408cSBarry Smith   #define matgetsize01_                matgetsize01
18038135fcbSMartin Diehl   #define matgetlocalsize_             matgetlocalsize
1813be0408cSBarry Smith   #define matgetlocalsize00_           matgetlocalsize00
1823be0408cSBarry Smith   #define matgetlocalsize10_           matgetlocalsize10
1833be0408cSBarry Smith   #define matgetlocalsize01_           matgetlocalsize01
184f0a86a08SBarry Smith   #define matgetvalues_                matgetvalues
185f0a86a08SBarry Smith   #define matgetvalues0_               matgetvalues0
186f0a86a08SBarry Smith   #define matgetvaluesnn1_             matgetvaluesnn1
187f0a86a08SBarry Smith   #define matgetvaluesnnnn_            matgetvaluesnnnn
188f0a86a08SBarry Smith   #define matgetvalues11_              matgetvalues11
18985835d77SBarry Smith   #define matgetvalues11a_             matgetvalues11a
190f0a86a08SBarry Smith   #define matgetvalues1n_              matgetvalues1n
191f0a86a08SBarry Smith   #define matgetvaluesn1_              matgetvaluesn1
19285835d77SBarry Smith   #define matgetvalueslocal_           matgetvalueslocal
19385835d77SBarry Smith   #define matgetvalueslocal0_          matgetvalueslocal0
19485835d77SBarry Smith   #define matgetvalueslocalnn1_        matgetvalueslocalnn1
19585835d77SBarry Smith   #define matgetvalueslocalnnnn_       matgetvalueslocalnnnn
19685835d77SBarry Smith   #define matgetvalueslocal11_         matgetvalueslocal11
19785835d77SBarry Smith   #define matgetvalueslocal1n_         matgetvalueslocal1n
19885835d77SBarry Smith   #define matgetvalueslocaln1_         matgetvalueslocaln1
199260663b8SBarry Smith   #define matsetnullspace_             matsetnullspace
200260663b8SBarry Smith   #define matgetownershiprange_        matgetownershiprange
20191f56e93SMartin Diehl   #define matgetownershiprange00_      matgetownershiprange00
20291f56e93SMartin Diehl   #define matgetownershiprange10_      matgetownershiprange10
20391f56e93SMartin Diehl   #define matgetownershiprange01_      matgetownershiprange01
20491f56e93SMartin Diehl   #define matgetownershiprange11_      matgetownershiprange11
205c08c7cb9SBarry Smith   #define matgetownershipis_           matgetownershipis
206f4e70085SSatish Balay #endif
207f4e70085SSatish Balay 
208f0a86a08SBarry Smith PETSC_EXTERN void matgetvalues_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], int *ierr)
209f0a86a08SBarry Smith {
210f0a86a08SBarry Smith   *ierr = MatGetValues(*mat, *m, idxm, *n, idxn, v);
211f0a86a08SBarry Smith }
212f0a86a08SBarry Smith 
213f0a86a08SBarry Smith PETSC_EXTERN void matgetvalues0_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], int *ierr)
214f0a86a08SBarry Smith {
215f0a86a08SBarry Smith   matgetvalues_(mat, m, idxm, n, idxn, v, ierr);
216f0a86a08SBarry Smith }
217f0a86a08SBarry Smith 
218f0a86a08SBarry Smith PETSC_EXTERN void matgetvaluesnn1_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], int *ierr)
219f0a86a08SBarry Smith {
220f0a86a08SBarry Smith   matgetvalues_(mat, m, idxm, n, idxn, v, ierr);
221f0a86a08SBarry Smith }
222f0a86a08SBarry Smith 
223f0a86a08SBarry Smith PETSC_EXTERN void matgetvaluesnnnn_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], int *ierr)
224f0a86a08SBarry Smith {
225f0a86a08SBarry Smith   matgetvalues_(mat, m, idxm, n, idxn, v, ierr);
226f0a86a08SBarry Smith }
227f0a86a08SBarry Smith 
228f0a86a08SBarry Smith PETSC_EXTERN void matgetvalues11_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], int *ierr)
229f0a86a08SBarry Smith {
230f0a86a08SBarry Smith   matgetvalues_(mat, m, idxm, n, idxn, v, ierr);
231f0a86a08SBarry Smith }
232f0a86a08SBarry Smith 
23385835d77SBarry Smith PETSC_EXTERN void matgetvalues11a_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], int *ierr)
23485835d77SBarry Smith {
23585835d77SBarry Smith   matgetvalues_(mat, m, idxm, n, idxn, v, ierr);
23685835d77SBarry Smith }
23785835d77SBarry Smith 
238f0a86a08SBarry Smith PETSC_EXTERN void matgetvalues1n_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], int *ierr)
239f0a86a08SBarry Smith {
240f0a86a08SBarry Smith   matgetvalues_(mat, m, idxm, n, idxn, v, ierr);
241f0a86a08SBarry Smith }
242f0a86a08SBarry Smith 
243f0a86a08SBarry Smith PETSC_EXTERN void matgetvaluesn1_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], int *ierr)
244f0a86a08SBarry Smith {
245f0a86a08SBarry Smith   matgetvalues_(mat, m, idxm, n, idxn, v, ierr);
246f0a86a08SBarry Smith }
247f0a86a08SBarry Smith 
24885835d77SBarry Smith PETSC_EXTERN void matgetvalueslocal_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], int *ierr)
24985835d77SBarry Smith {
25085835d77SBarry Smith   *ierr = MatGetValuesLocal(*mat, *m, idxm, *n, idxn, v);
25185835d77SBarry Smith }
25285835d77SBarry Smith 
25385835d77SBarry Smith PETSC_EXTERN void matgetvalueslocal0_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], int *ierr)
25485835d77SBarry Smith {
25585835d77SBarry Smith   matgetvalueslocal_(mat, m, idxm, n, idxn, v, ierr);
25685835d77SBarry Smith }
25785835d77SBarry Smith 
25885835d77SBarry Smith PETSC_EXTERN void matgetvalueslocalnn1_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], int *ierr)
25985835d77SBarry Smith {
26085835d77SBarry Smith   matgetvalueslocal_(mat, m, idxm, n, idxn, v, ierr);
26185835d77SBarry Smith }
26285835d77SBarry Smith 
26385835d77SBarry Smith PETSC_EXTERN void matgetvalueslocalnnnn_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], int *ierr)
26485835d77SBarry Smith {
26585835d77SBarry Smith   matgetvalueslocal_(mat, m, idxm, n, idxn, v, ierr);
26685835d77SBarry Smith }
26785835d77SBarry Smith 
26885835d77SBarry Smith PETSC_EXTERN void matgetvalueslocal11_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], int *ierr)
26985835d77SBarry Smith {
27085835d77SBarry Smith   matgetvalueslocal_(mat, m, idxm, n, idxn, v, ierr);
27185835d77SBarry Smith }
27285835d77SBarry Smith 
27385835d77SBarry Smith PETSC_EXTERN void matgetvalueslocal11a_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], int *ierr)
27485835d77SBarry Smith {
27585835d77SBarry Smith   matgetvalueslocal_(mat, m, idxm, n, idxn, v, ierr);
27685835d77SBarry Smith }
27785835d77SBarry Smith 
27885835d77SBarry Smith PETSC_EXTERN void matgetvalueslocal1n_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], int *ierr)
27985835d77SBarry Smith {
28085835d77SBarry Smith   matgetvalueslocal_(mat, m, idxm, n, idxn, v, ierr);
28185835d77SBarry Smith }
28285835d77SBarry Smith 
28385835d77SBarry Smith PETSC_EXTERN void matgetvalueslocaln1_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], int *ierr)
28485835d77SBarry Smith {
28585835d77SBarry Smith   matgetvalueslocal_(mat, m, idxm, n, idxn, v, ierr);
28685835d77SBarry Smith }
28785835d77SBarry Smith 
28819caf8f3SSatish Balay PETSC_EXTERN void matgetownershiprange_(Mat *mat, PetscInt *m, PetscInt *n, int *ierr)
289260663b8SBarry Smith {
290260663b8SBarry Smith   CHKFORTRANNULLINTEGER(m);
291260663b8SBarry Smith   CHKFORTRANNULLINTEGER(n);
292260663b8SBarry Smith   *ierr = MatGetOwnershipRange(*mat, m, n);
293260663b8SBarry Smith }
294260663b8SBarry Smith 
29519caf8f3SSatish Balay PETSC_EXTERN void matgetownershiprange00_(Mat *mat, PetscInt *m, PetscInt *n, int *ierr)
2965dd307cdSMartin Diehl {
2975dd307cdSMartin Diehl   CHKFORTRANNULLINTEGER(m);
2985dd307cdSMartin Diehl   CHKFORTRANNULLINTEGER(n);
2995dd307cdSMartin Diehl   *ierr = MatGetOwnershipRange(*mat, m, n);
3005dd307cdSMartin Diehl }
3015dd307cdSMartin Diehl 
30219caf8f3SSatish Balay PETSC_EXTERN void matgetownershiprange10_(Mat *mat, PetscInt *m, PetscInt *n, int *ierr)
3035dd307cdSMartin Diehl {
3045dd307cdSMartin Diehl   CHKFORTRANNULLINTEGER(m);
3055dd307cdSMartin Diehl   CHKFORTRANNULLINTEGER(n);
3065dd307cdSMartin Diehl   *ierr = MatGetOwnershipRange(*mat, m, n);
3075dd307cdSMartin Diehl }
3085dd307cdSMartin Diehl 
30919caf8f3SSatish Balay PETSC_EXTERN void matgetownershiprange01_(Mat *mat, PetscInt *m, PetscInt *n, int *ierr)
3105dd307cdSMartin Diehl {
3115dd307cdSMartin Diehl   CHKFORTRANNULLINTEGER(m);
3125dd307cdSMartin Diehl   CHKFORTRANNULLINTEGER(n);
3135dd307cdSMartin Diehl   *ierr = MatGetOwnershipRange(*mat, m, n);
3145dd307cdSMartin Diehl }
3155dd307cdSMartin Diehl 
31619caf8f3SSatish Balay PETSC_EXTERN void matgetownershiprange11_(Mat *mat, PetscInt *m, PetscInt *n, int *ierr)
3175dd307cdSMartin Diehl {
3185dd307cdSMartin Diehl   CHKFORTRANNULLINTEGER(m);
3195dd307cdSMartin Diehl   CHKFORTRANNULLINTEGER(n);
3205dd307cdSMartin Diehl   *ierr = MatGetOwnershipRange(*mat, m, n);
3215dd307cdSMartin Diehl }
3225dd307cdSMartin Diehl 
32319caf8f3SSatish Balay PETSC_EXTERN void matgetownershipis_(Mat *mat, IS *m, IS *n, int *ierr)
324c08c7cb9SBarry Smith {
325c08c7cb9SBarry Smith   CHKFORTRANNULLOBJECT(m);
326c08c7cb9SBarry Smith   CHKFORTRANNULLOBJECT(n);
327c08c7cb9SBarry Smith   *ierr = MatGetOwnershipIS(*mat, m, n);
328c08c7cb9SBarry Smith }
329c08c7cb9SBarry Smith 
33019caf8f3SSatish Balay PETSC_EXTERN void matgetsize_(Mat *mat, PetscInt *m, PetscInt *n, int *ierr)
3313be0408cSBarry Smith {
3323be0408cSBarry Smith   CHKFORTRANNULLINTEGER(m);
3333be0408cSBarry Smith   CHKFORTRANNULLINTEGER(n);
3343be0408cSBarry Smith   *ierr = MatGetSize(*mat, m, n);
3353be0408cSBarry Smith }
3363be0408cSBarry Smith 
33719caf8f3SSatish Balay PETSC_EXTERN void matgetsize00_(Mat *mat, PetscInt *m, PetscInt *n, int *ierr)
3383be0408cSBarry Smith {
3393be0408cSBarry Smith   matgetsize_(mat, m, n, ierr);
3403be0408cSBarry Smith }
3413be0408cSBarry Smith 
34219caf8f3SSatish Balay PETSC_EXTERN void matgetsize10_(Mat *mat, PetscInt *m, PetscInt *n, int *ierr)
3433be0408cSBarry Smith {
3443be0408cSBarry Smith   matgetsize_(mat, m, n, ierr);
3453be0408cSBarry Smith }
3463be0408cSBarry Smith 
34719caf8f3SSatish Balay PETSC_EXTERN void matgetsize01_(Mat *mat, PetscInt *m, PetscInt *n, int *ierr)
3483be0408cSBarry Smith {
3493be0408cSBarry Smith   matgetsize_(mat, m, n, ierr);
3503be0408cSBarry Smith }
3513be0408cSBarry Smith 
35219caf8f3SSatish Balay PETSC_EXTERN void matgetlocalsize_(Mat *mat, PetscInt *m, PetscInt *n, int *ierr)
3533be0408cSBarry Smith {
3543be0408cSBarry Smith   CHKFORTRANNULLINTEGER(m);
3553be0408cSBarry Smith   CHKFORTRANNULLINTEGER(n);
3563be0408cSBarry Smith   *ierr = MatGetLocalSize(*mat, m, n);
3573be0408cSBarry Smith }
3583be0408cSBarry Smith 
35919caf8f3SSatish Balay PETSC_EXTERN void matgetlocalsize00_(Mat *mat, PetscInt *m, PetscInt *n, int *ierr)
3603be0408cSBarry Smith {
3613be0408cSBarry Smith   matgetlocalsize_(mat, m, n, ierr);
3623be0408cSBarry Smith }
3633be0408cSBarry Smith 
36419caf8f3SSatish Balay PETSC_EXTERN void matgetlocalsize10_(Mat *mat, PetscInt *m, PetscInt *n, int *ierr)
3653be0408cSBarry Smith {
3663be0408cSBarry Smith   matgetlocalsize_(mat, m, n, ierr);
3673be0408cSBarry Smith }
3683be0408cSBarry Smith 
36919caf8f3SSatish Balay PETSC_EXTERN void matgetlocalsize01_(Mat *mat, PetscInt *m, PetscInt *n, int *ierr)
3703be0408cSBarry Smith {
3713be0408cSBarry Smith   matgetlocalsize_(mat, m, n, ierr);
3723be0408cSBarry Smith }
3733be0408cSBarry Smith 
37470a7d78aSStefano Zampini PETSC_EXTERN void matsetvaluesblocked_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], InsertMode *addv, int *ierr)
37570a7d78aSStefano Zampini {
3764d03fd2bSBarry Smith   *ierr = MatSetValuesBlocked(*mat, *m, idxm, *n, idxn, v, *addv);
3774d03fd2bSBarry Smith }
3784d03fd2bSBarry Smith 
37970a7d78aSStefano 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))
38070a7d78aSStefano Zampini {
381cee688dbSBarry Smith   PetscScalar *fa;
3825975b3b6SBarry Smith   *ierr = F90Array2dAccess(y, MPIU_SCALAR, (void **)&fa PETSC_F90_2PTR_PARAM(ptrd));
3835975b3b6SBarry Smith   if (*ierr) return;
384cee688dbSBarry Smith   matsetvaluesblocked_(mat, m, idxm, n, idxn, fa, addv, ierr);
385cee688dbSBarry Smith }
386cee688dbSBarry Smith 
38770a7d78aSStefano Zampini PETSC_EXTERN void matsetvaluesblocked0_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], InsertMode *addv, int *ierr)
38870a7d78aSStefano Zampini {
3893b494cfeSSatish Balay   matsetvaluesblocked_(mat, m, idxm, n, idxn, v, addv, ierr);
3903b494cfeSSatish Balay }
3913b494cfeSSatish Balay 
39270a7d78aSStefano Zampini PETSC_EXTERN void matsetvaluesblocked11_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], InsertMode *addv, int *ierr)
39370a7d78aSStefano Zampini {
3944d03fd2bSBarry Smith   matsetvaluesblocked_(mat, m, idxm, n, idxn, v, addv, ierr);
3954d03fd2bSBarry Smith }
3964d03fd2bSBarry Smith 
39770a7d78aSStefano Zampini PETSC_EXTERN void matsetvaluesblocked111_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], InsertMode *addv, int *ierr)
39870a7d78aSStefano Zampini {
3994d03fd2bSBarry Smith   matsetvaluesblocked_(mat, m, idxm, n, idxn, v, addv, ierr);
4004d03fd2bSBarry Smith }
4014d03fd2bSBarry Smith 
40270a7d78aSStefano Zampini PETSC_EXTERN void matsetvaluesblocked1n_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], InsertMode *addv, int *ierr)
40370a7d78aSStefano Zampini {
4044d03fd2bSBarry Smith   matsetvaluesblocked_(mat, m, idxm, n, idxn, v, addv, ierr);
4054d03fd2bSBarry Smith }
4064d03fd2bSBarry Smith 
40770a7d78aSStefano Zampini PETSC_EXTERN void matsetvaluesblockedn1_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], InsertMode *addv, int *ierr)
40870a7d78aSStefano Zampini {
4094d03fd2bSBarry Smith   matsetvaluesblocked_(mat, m, idxm, n, idxn, v, addv, ierr);
4104d03fd2bSBarry Smith }
4114d03fd2bSBarry Smith 
41219caf8f3SSatish Balay PETSC_EXTERN void matsetvaluesblockedlocal_(Mat *mat, PetscInt *nrow, PetscInt irow[], PetscInt *ncol, PetscInt icol[], PetscScalar y[], InsertMode *addv, int *ierr)
4134d03fd2bSBarry Smith {
4144d03fd2bSBarry Smith   *ierr = MatSetValuesBlockedLocal(*mat, *nrow, irow, *ncol, icol, y, *addv);
4154d03fd2bSBarry Smith }
4164d03fd2bSBarry Smith 
41770a7d78aSStefano Zampini PETSC_EXTERN void matsetvaluesblockedlocal0_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], InsertMode *addv, int *ierr)
41870a7d78aSStefano Zampini {
4193b494cfeSSatish Balay   matsetvaluesblockedlocal_(mat, m, idxm, n, idxn, v, addv, ierr);
4203b494cfeSSatish Balay }
4213b494cfeSSatish Balay 
42270a7d78aSStefano Zampini PETSC_EXTERN void matsetvaluesblockedlocal11_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], InsertMode *addv, int *ierr)
42370a7d78aSStefano Zampini {
4244d03fd2bSBarry Smith   matsetvaluesblockedlocal_(mat, m, idxm, n, idxn, v, addv, ierr);
4254d03fd2bSBarry Smith }
4264d03fd2bSBarry Smith 
42770a7d78aSStefano Zampini PETSC_EXTERN void matsetvaluesblockedlocal111_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], InsertMode *addv, int *ierr)
42870a7d78aSStefano Zampini {
4294d03fd2bSBarry Smith   matsetvaluesblockedlocal_(mat, m, idxm, n, idxn, v, addv, ierr);
4304d03fd2bSBarry Smith }
4314d03fd2bSBarry Smith 
43270a7d78aSStefano Zampini PETSC_EXTERN void matsetvaluesblockedlocal1n_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], InsertMode *addv, int *ierr)
43370a7d78aSStefano Zampini {
4344d03fd2bSBarry Smith   matsetvaluesblockedlocal_(mat, m, idxm, n, idxn, v, addv, ierr);
4354d03fd2bSBarry Smith }
4364d03fd2bSBarry Smith 
43770a7d78aSStefano Zampini PETSC_EXTERN void matsetvaluesblockedlocaln1_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], InsertMode *addv, int *ierr)
43870a7d78aSStefano Zampini {
4394d03fd2bSBarry Smith   matsetvaluesblockedlocal_(mat, m, idxm, n, idxn, v, addv, ierr);
4404d03fd2bSBarry Smith }
4414d03fd2bSBarry Smith 
44219caf8f3SSatish Balay PETSC_EXTERN void matsetvalues_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], InsertMode *addv, int *ierr)
4434d03fd2bSBarry Smith {
4444d03fd2bSBarry Smith   *ierr = MatSetValues(*mat, *m, idxm, *n, idxn, v, *addv);
4454d03fd2bSBarry Smith }
4464d03fd2bSBarry Smith 
44719caf8f3SSatish Balay PETSC_EXTERN void matsetvaluesnnnn_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], InsertMode *addv, int *ierr)
4481b266c99SBarry Smith {
4491b266c99SBarry Smith   matsetvalues_(mat, m, idxm, n, idxn, v, addv, ierr);
4501b266c99SBarry Smith }
4511b266c99SBarry Smith 
45219caf8f3SSatish Balay PETSC_EXTERN void matsetvalues0_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], InsertMode *addv, int *ierr)
4533b494cfeSSatish Balay {
4543b494cfeSSatish Balay   matsetvalues_(mat, m, idxm, n, idxn, v, addv, ierr);
4553b494cfeSSatish Balay }
4563b494cfeSSatish Balay 
45719caf8f3SSatish Balay PETSC_EXTERN void matsetvaluesnn1_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], InsertMode *addv, int *ierr)
4581b266c99SBarry Smith {
4591b266c99SBarry Smith   matsetvalues_(mat, m, idxm, n, idxn, v, addv, ierr);
4601b266c99SBarry Smith }
4611b266c99SBarry Smith 
46219caf8f3SSatish Balay PETSC_EXTERN void matsetvalues11_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], InsertMode *addv, int *ierr)
4634d03fd2bSBarry Smith {
4644d03fd2bSBarry Smith   matsetvalues_(mat, m, idxm, n, idxn, v, addv, ierr);
4654d03fd2bSBarry Smith }
4664d03fd2bSBarry Smith 
46719caf8f3SSatish Balay PETSC_EXTERN void matsetvaluesn1_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], InsertMode *addv, int *ierr)
4684d03fd2bSBarry Smith {
4694d03fd2bSBarry Smith   matsetvalues_(mat, m, idxm, n, idxn, v, addv, ierr);
4704d03fd2bSBarry Smith }
4714d03fd2bSBarry Smith 
47219caf8f3SSatish Balay PETSC_EXTERN void matsetvalues1n_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], InsertMode *addv, int *ierr)
4734d03fd2bSBarry Smith {
4744d03fd2bSBarry Smith   matsetvalues_(mat, m, idxm, n, idxn, v, addv, ierr);
4754d03fd2bSBarry Smith }
4764d03fd2bSBarry Smith 
47719caf8f3SSatish Balay PETSC_EXTERN void matsetvalueslocal_(Mat *mat, PetscInt *nrow, PetscInt irow[], PetscInt *ncol, PetscInt icol[], PetscScalar y[], InsertMode *addv, int *ierr)
4784d03fd2bSBarry Smith {
4794d03fd2bSBarry Smith   *ierr = MatSetValuesLocal(*mat, *nrow, irow, *ncol, icol, y, *addv);
4804d03fd2bSBarry Smith }
4814d03fd2bSBarry Smith 
48219caf8f3SSatish Balay PETSC_EXTERN void matsetvalueslocal0_(Mat *mat, PetscInt *nrow, PetscInt irow[], PetscInt *ncol, PetscInt icol[], PetscScalar y[], InsertMode *addv, int *ierr)
4833b494cfeSSatish Balay {
4843b494cfeSSatish Balay   matsetvalueslocal_(mat, nrow, irow, ncol, icol, y, addv, ierr);
4853b494cfeSSatish Balay }
4863b494cfeSSatish Balay 
48719caf8f3SSatish Balay PETSC_EXTERN void matsetvalueslocal11_(Mat *mat, PetscInt *nrow, PetscInt irow[], PetscInt *ncol, PetscInt icol[], PetscScalar y[], InsertMode *addv, int *ierr)
4884d03fd2bSBarry Smith {
4894d03fd2bSBarry Smith   matsetvalueslocal_(mat, nrow, irow, ncol, icol, y, addv, ierr);
4904d03fd2bSBarry Smith }
4914d03fd2bSBarry Smith 
49219caf8f3SSatish Balay PETSC_EXTERN void matsetvalueslocal11nn_(Mat *mat, PetscInt *nrow, PetscInt irow[], PetscInt *ncol, PetscInt icol[], PetscScalar y[], InsertMode *addv, int *ierr)
4934d03fd2bSBarry Smith {
4944d03fd2bSBarry Smith   matsetvalueslocal_(mat, nrow, irow, ncol, icol, y, addv, ierr);
4954d03fd2bSBarry Smith }
4964d03fd2bSBarry Smith 
49719caf8f3SSatish Balay PETSC_EXTERN void matsetvalueslocal111_(Mat *mat, PetscInt *nrow, PetscInt irow[], PetscInt *ncol, PetscInt icol[], PetscScalar y[], InsertMode *addv, int *ierr)
4984d03fd2bSBarry Smith {
4994d03fd2bSBarry Smith   matsetvalueslocal_(mat, nrow, irow, ncol, icol, y, addv, ierr);
5004d03fd2bSBarry Smith }
5014d03fd2bSBarry Smith 
50219caf8f3SSatish Balay PETSC_EXTERN void matsetvalueslocal1n_(Mat *mat, PetscInt *nrow, PetscInt irow[], PetscInt *ncol, PetscInt icol[], PetscScalar y[], InsertMode *addv, int *ierr)
5034d03fd2bSBarry Smith {
5044d03fd2bSBarry Smith   matsetvalueslocal_(mat, nrow, irow, ncol, icol, y, addv, ierr);
5054d03fd2bSBarry Smith }
5064d03fd2bSBarry Smith 
50719caf8f3SSatish Balay PETSC_EXTERN void matsetvalueslocaln1_(Mat *mat, PetscInt *nrow, PetscInt irow[], PetscInt *ncol, PetscInt icol[], PetscScalar y[], InsertMode *addv, int *ierr)
5084d03fd2bSBarry Smith {
5094d03fd2bSBarry Smith   matsetvalueslocal_(mat, nrow, irow, ncol, icol, y, addv, ierr);
5104d03fd2bSBarry Smith }
5114d03fd2bSBarry Smith 
512b22b330cSBarry Smith static PetscErrorCode ournullfunction(MatNullSpace sp, Vec x, void *ctx)
513b22b330cSBarry Smith {
5149566063dSJacob Faibussowitsch   PetscCallFortranVoidFunction((*(void (*)(MatNullSpace *, Vec *, void *, PetscErrorCode *))(((PetscObject)sp)->fortran_func_pointers[0]))(&sp, &x, ctx, &ierr));
5153ba16761SJacob Faibussowitsch   return PETSC_SUCCESS;
516b22b330cSBarry Smith }
517b22b330cSBarry Smith 
51819caf8f3SSatish Balay PETSC_EXTERN void matnullspacesetfunction_(MatNullSpace *sp, PetscErrorCode (*rem)(MatNullSpace, Vec, void *), void *ctx, PetscErrorCode *ierr)
519b22b330cSBarry Smith {
520b22b330cSBarry Smith   PetscObjectAllocateFortranPointers(*sp, 1);
5218434afd1SBarry Smith   ((PetscObject)*sp)->fortran_func_pointers[0] = (PetscVoidFn *)rem;
52226fbe8dcSKarl Rupp 
523b22b330cSBarry Smith   *ierr = MatNullSpaceSetFunction(*sp, ournullfunction, ctx);
524b22b330cSBarry Smith }
525b22b330cSBarry Smith 
52619caf8f3SSatish Balay PETSC_EXTERN void matcreatevecs_(Mat *mat, Vec *right, Vec *left, int *ierr)
5277c54600cSBarry Smith {
5287c54600cSBarry Smith   CHKFORTRANNULLOBJECT(right);
5297c54600cSBarry Smith   CHKFORTRANNULLOBJECT(left);
5302a7a6963SBarry Smith   *ierr = MatCreateVecs(*mat, right, left);
5317c54600cSBarry Smith }
5327c54600cSBarry Smith 
5335975b3b6SBarry 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)
534f4e70085SSatish Balay {
5351a83f524SJed Brown   const PetscInt *IA, *JA;
5365975b3b6SBarry Smith   *ierr = MatGetRowIJ(*B, *shift, *sym, *blockcompressed, n, &IA, &JA, done);
5375975b3b6SBarry Smith   if (*ierr) return;
5381a83f524SJed Brown   *iia = PetscIntAddressToFortran(ia, (PetscInt *)IA);
5391a83f524SJed Brown   *jja = PetscIntAddressToFortran(ja, (PetscInt *)JA);
540f4e70085SSatish Balay }
541f4e70085SSatish Balay 
5425975b3b6SBarry 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)
543f4e70085SSatish Balay {
5441a83f524SJed Brown   const PetscInt *IA = PetscIntAddressFromFortran(ia, *iia), *JA = PetscIntAddressFromFortran(ja, *jja);
5458f7157efSSatish Balay   *ierr = MatRestoreRowIJ(*B, *shift, *sym, *blockcompressed, n, &IA, &JA, done);
546f4e70085SSatish Balay }
547f4e70085SSatish Balay 
548f4e70085SSatish Balay /*
549f4e70085SSatish Balay    This is a poor way of storing the column and value pointers
550f4e70085SSatish Balay   generated by MatGetRow() to be returned with MatRestoreRow()
551f4e70085SSatish Balay   but there is not natural,good place else to store them. Hence
552f4e70085SSatish Balay   Fortran programmers can only have one outstanding MatGetRows()
553f4e70085SSatish Balay   at a time.
554f4e70085SSatish Balay */
5553ba16761SJacob Faibussowitsch static int                matgetrowactive = 0;
556dfef5ea7SSatish Balay static const PetscInt    *my_ocols        = NULL;
557dfef5ea7SSatish Balay static const PetscScalar *my_ovals        = NULL;
558f4e70085SSatish Balay 
55919caf8f3SSatish Balay PETSC_EXTERN void matgetrow_(Mat *mat, PetscInt *row, PetscInt *ncols, PetscInt *cols, PetscScalar *vals, PetscErrorCode *ierr)
560f4e70085SSatish Balay {
561f4e70085SSatish Balay   const PetscInt    **oocols = &my_ocols;
562f4e70085SSatish Balay   const PetscScalar **oovals = &my_ovals;
563f4e70085SSatish Balay 
564f4e70085SSatish Balay   if (matgetrowactive) {
5653ba16761SJacob Faibussowitsch     *ierr = PetscError(PETSC_COMM_SELF, __LINE__, "MatGetRow_Fortran", __FILE__, PETSC_ERR_ARG_WRONGSTATE, PETSC_ERROR_INITIAL, "Cannot have two MatGetRow() active simultaneously\n\
566f4e70085SSatish Balay                call MatRestoreRow() before calling MatGetRow() a second time");
5673ba16761SJacob Faibussowitsch     *ierr = PETSC_ERR_ARG_WRONGSTATE;
568f4e70085SSatish Balay     return;
569f4e70085SSatish Balay   }
570f4e70085SSatish Balay 
5713ba16761SJacob Faibussowitsch   CHKFORTRANNULLINTEGER(cols);
5723ba16761SJacob Faibussowitsch   if (!cols) oocols = NULL;
5733ba16761SJacob Faibussowitsch   CHKFORTRANNULLSCALAR(vals);
5743ba16761SJacob Faibussowitsch   if (!vals) oovals = NULL;
575f4e70085SSatish Balay 
576f4e70085SSatish Balay   *ierr = MatGetRow(*mat, *row, ncols, oocols, oovals);
577f4e70085SSatish Balay   if (*ierr) return;
578f4e70085SSatish Balay 
5793ba16761SJacob Faibussowitsch   if (oocols) {
5803ba16761SJacob Faibussowitsch     *ierr = PetscArraycpy(cols, my_ocols, *ncols);
5813ba16761SJacob Faibussowitsch     if (*ierr) return;
5823ba16761SJacob Faibussowitsch   }
5833ba16761SJacob Faibussowitsch   if (oovals) {
5843ba16761SJacob Faibussowitsch     *ierr = PetscArraycpy(vals, my_ovals, *ncols);
5853ba16761SJacob Faibussowitsch     if (*ierr) return;
5863ba16761SJacob Faibussowitsch   }
587f4e70085SSatish Balay   matgetrowactive = 1;
588f4e70085SSatish Balay }
589f4e70085SSatish Balay 
59019caf8f3SSatish Balay PETSC_EXTERN void matrestorerow_(Mat *mat, PetscInt *row, PetscInt *ncols, PetscInt *cols, PetscScalar *vals, PetscErrorCode *ierr)
591f4e70085SSatish Balay {
592f4e70085SSatish Balay   const PetscInt    **oocols = &my_ocols;
593f4e70085SSatish Balay   const PetscScalar **oovals = &my_ovals;
5943ba16761SJacob Faibussowitsch 
595f4e70085SSatish Balay   if (!matgetrowactive) {
5963ba16761SJacob Faibussowitsch     *ierr = PetscError(PETSC_COMM_SELF, __LINE__, "MatRestoreRow_Fortran", __FILE__, PETSC_ERR_ARG_WRONGSTATE, PETSC_ERROR_INITIAL, "Must call MatGetRow() first");
5973ba16761SJacob Faibussowitsch     *ierr = PETSC_ERR_ARG_WRONGSTATE;
598f4e70085SSatish Balay     return;
599f4e70085SSatish Balay   }
6003ba16761SJacob Faibussowitsch   CHKFORTRANNULLINTEGER(cols);
6013ba16761SJacob Faibussowitsch   if (!cols) oocols = NULL;
6023ba16761SJacob Faibussowitsch   CHKFORTRANNULLSCALAR(vals);
6033ba16761SJacob Faibussowitsch   if (!vals) oovals = NULL;
604f4e70085SSatish Balay 
605f4e70085SSatish Balay   *ierr           = MatRestoreRow(*mat, *row, ncols, oocols, oovals);
606f4e70085SSatish Balay   matgetrowactive = 0;
607f4e70085SSatish Balay }
608f4e70085SSatish Balay 
60919caf8f3SSatish Balay PETSC_EXTERN void matseqaijgetarray_(Mat *mat, PetscScalar *fa, size_t *ia, PetscErrorCode *ierr)
610f4e70085SSatish Balay {
611f4e70085SSatish Balay   PetscScalar *mm;
612f4e70085SSatish Balay   PetscInt     m, n;
613f4e70085SSatish Balay 
6145975b3b6SBarry Smith   *ierr = MatSeqAIJGetArray(*mat, &mm);
6155975b3b6SBarry Smith   if (*ierr) return;
6165975b3b6SBarry Smith   *ierr = MatGetSize(*mat, &m, &n);
6175975b3b6SBarry Smith   if (*ierr) return;
6185975b3b6SBarry Smith   *ierr = PetscScalarAddressToFortran((PetscObject)*mat, 1, fa, mm, m * n, ia);
6195975b3b6SBarry Smith   if (*ierr) return;
620f4e70085SSatish Balay }
621f4e70085SSatish Balay 
62219caf8f3SSatish Balay PETSC_EXTERN void matseqaijrestorearray_(Mat *mat, PetscScalar *fa, size_t *ia, PetscErrorCode *ierr)
623f4e70085SSatish Balay {
624f4e70085SSatish Balay   PetscScalar *lx;
625f4e70085SSatish Balay   PetscInt     m, n;
626f4e70085SSatish Balay 
6275975b3b6SBarry Smith   *ierr = MatGetSize(*mat, &m, &n);
6285975b3b6SBarry Smith   if (*ierr) return;
6295975b3b6SBarry Smith   *ierr = PetscScalarAddressFromFortran((PetscObject)*mat, fa, *ia, m * n, &lx);
6305975b3b6SBarry Smith   if (*ierr) return;
6315975b3b6SBarry Smith   *ierr = MatSeqAIJRestoreArray(*mat, &lx);
6325975b3b6SBarry Smith   if (*ierr) return;
633f4e70085SSatish Balay }
634f4e70085SSatish Balay 
63519caf8f3SSatish Balay PETSC_EXTERN void matdensegetarray_(Mat *mat, PetscScalar *fa, size_t *ia, PetscErrorCode *ierr)
63673a71a0fSBarry Smith {
63773a71a0fSBarry Smith   PetscScalar *mm;
63873a71a0fSBarry Smith   PetscInt     m, n;
63973a71a0fSBarry Smith 
6405975b3b6SBarry Smith   *ierr = MatDenseGetArray(*mat, &mm);
6415975b3b6SBarry Smith   if (*ierr) return;
6425975b3b6SBarry Smith   *ierr = MatGetSize(*mat, &m, &n);
6435975b3b6SBarry Smith   if (*ierr) return;
6445975b3b6SBarry Smith   *ierr = PetscScalarAddressToFortran((PetscObject)*mat, 1, fa, mm, m * n, ia);
6455975b3b6SBarry Smith   if (*ierr) return;
64673a71a0fSBarry Smith }
64773a71a0fSBarry Smith 
64819caf8f3SSatish Balay PETSC_EXTERN void matdenserestorearray_(Mat *mat, PetscScalar *fa, size_t *ia, PetscErrorCode *ierr)
64973a71a0fSBarry Smith {
65073a71a0fSBarry Smith   PetscScalar *lx;
65173a71a0fSBarry Smith   PetscInt     m, n;
65273a71a0fSBarry Smith 
6535975b3b6SBarry Smith   *ierr = MatGetSize(*mat, &m, &n);
6545975b3b6SBarry Smith   if (*ierr) return;
6555975b3b6SBarry Smith   *ierr = PetscScalarAddressFromFortran((PetscObject)*mat, fa, *ia, m * n, &lx);
6565975b3b6SBarry Smith   if (*ierr) return;
6575975b3b6SBarry Smith   *ierr = MatDenseRestoreArray(*mat, &lx);
6585975b3b6SBarry Smith   if (*ierr) return;
65973a71a0fSBarry Smith }
66073a71a0fSBarry Smith 
66119caf8f3SSatish Balay PETSC_EXTERN void matdensegetarrayread_(Mat *mat, PetscScalar *fa, size_t *ia, PetscErrorCode *ierr)
6628572280aSBarry Smith {
6637067c7f7SBarry Smith   const PetscScalar *mm;
6648572280aSBarry Smith   PetscInt           m, n;
6658572280aSBarry Smith 
6665975b3b6SBarry Smith   *ierr = MatDenseGetArrayRead(*mat, &mm);
6675975b3b6SBarry Smith   if (*ierr) return;
6685975b3b6SBarry Smith   *ierr = MatGetSize(*mat, &m, &n);
6695975b3b6SBarry Smith   if (*ierr) return;
6705975b3b6SBarry Smith   *ierr = PetscScalarAddressToFortran((PetscObject)*mat, 1, fa, (PetscScalar *)mm, m * n, ia);
6715975b3b6SBarry Smith   if (*ierr) return;
6728572280aSBarry Smith }
6738572280aSBarry Smith 
67419caf8f3SSatish Balay PETSC_EXTERN void matdenserestorearrayread_(Mat *mat, PetscScalar *fa, size_t *ia, PetscErrorCode *ierr)
6758572280aSBarry Smith {
6767067c7f7SBarry Smith   const PetscScalar *lx;
6778572280aSBarry Smith   PetscInt           m, n;
6788572280aSBarry Smith 
6795975b3b6SBarry Smith   *ierr = MatGetSize(*mat, &m, &n);
6805975b3b6SBarry Smith   if (*ierr) return;
6815975b3b6SBarry Smith   *ierr = PetscScalarAddressFromFortran((PetscObject)*mat, fa, *ia, m * n, (PetscScalar **)&lx);
6825975b3b6SBarry Smith   if (*ierr) return;
6835975b3b6SBarry Smith   *ierr = MatDenseRestoreArrayRead(*mat, &lx);
6845975b3b6SBarry Smith   if (*ierr) return;
6858572280aSBarry Smith }
6868572280aSBarry Smith 
68719caf8f3SSatish Balay PETSC_EXTERN void matfactorgetsolverpackage_(Mat *mat, char *name, PetscErrorCode *ierr, PETSC_FORTRAN_CHARLEN_T len)
68835bd34faSBarry Smith {
68935bd34faSBarry Smith   const char *tname;
69035bd34faSBarry Smith 
6915975b3b6SBarry Smith   *ierr = MatFactorGetSolverType(*mat, &tname);
6925975b3b6SBarry Smith   if (*ierr) return;
69335bd34faSBarry Smith   if (name != PETSC_NULL_CHARACTER_Fortran) {
6945975b3b6SBarry Smith     *ierr = PetscStrncpy(name, tname, len);
6955975b3b6SBarry Smith     if (*ierr) return;
69635bd34faSBarry Smith   }
69735bd34faSBarry Smith   FIXRETURNCHAR(PETSC_TRUE, name, len);
69835bd34faSBarry Smith }
69935bd34faSBarry Smith 
700f4e70085SSatish Balay /*
7017dae84e0SHong Zhang     MatCreateSubmatrices() is slightly different from C since the
702f4e70085SSatish Balay     Fortran provides the array to hold the submatrix objects,while in C that
7037dae84e0SHong Zhang     array is allocated by the MatCreateSubmatrices()
704f4e70085SSatish Balay */
70519caf8f3SSatish Balay PETSC_EXTERN void matcreatesubmatrices_(Mat *mat, PetscInt *n, IS *isrow, IS *iscol, MatReuse *scall, Mat *smat, PetscErrorCode *ierr)
706f4e70085SSatish Balay {
707f4e70085SSatish Balay   Mat     *lsmat;
708f4e70085SSatish Balay   PetscInt i;
709f4e70085SSatish Balay 
710f4e70085SSatish Balay   if (*scall == MAT_INITIAL_MATRIX) {
7117dae84e0SHong Zhang     *ierr = MatCreateSubMatrices(*mat, *n, isrow, iscol, *scall, &lsmat);
71269d47153SPierre Jolivet     for (i = 0; i <= *n; i++) { /* lsmat[*n] might be a dummy matrix for saving data structure */
713f4e70085SSatish Balay       smat[i] = lsmat[i];
714f4e70085SSatish Balay     }
715f4e70085SSatish Balay     *ierr = PetscFree(lsmat);
716f4e70085SSatish Balay   } else {
7177dae84e0SHong Zhang     *ierr = MatCreateSubMatrices(*mat, *n, isrow, iscol, *scall, &smat);
718f4e70085SSatish Balay   }
719f4e70085SSatish Balay }
720f4e70085SSatish Balay 
7217d6bfa3bSBarry Smith /*
72281ec7b92Smarius     MatCreateSubmatrices() is slightly different from C since the
72381ec7b92Smarius     Fortran provides the array to hold the submatrix objects,while in C that
72481ec7b92Smarius     array is allocated by the MatCreateSubmatrices()
72581ec7b92Smarius */
72619caf8f3SSatish Balay PETSC_EXTERN void matcreatesubmatricesmpi_(Mat *mat, PetscInt *n, IS *isrow, IS *iscol, MatReuse *scall, Mat *smat, PetscErrorCode *ierr)
72781ec7b92Smarius {
72881ec7b92Smarius   Mat     *lsmat;
72981ec7b92Smarius   PetscInt i;
73081ec7b92Smarius 
73181ec7b92Smarius   if (*scall == MAT_INITIAL_MATRIX) {
73281ec7b92Smarius     *ierr = MatCreateSubMatricesMPI(*mat, *n, isrow, iscol, *scall, &lsmat);
73369d47153SPierre Jolivet     for (i = 0; i <= *n; i++) { /* lsmat[*n] might be a dummy matrix for saving data structure */
73481ec7b92Smarius       smat[i] = lsmat[i];
73581ec7b92Smarius     }
73681ec7b92Smarius     *ierr = PetscFree(lsmat);
73781ec7b92Smarius   } else {
73881ec7b92Smarius     *ierr = MatCreateSubMatricesMPI(*mat, *n, isrow, iscol, *scall, &smat);
73981ec7b92Smarius   }
74081ec7b92Smarius }
74181ec7b92Smarius 
74281ec7b92Smarius /*
7437d6bfa3bSBarry Smith     MatDestroyMatrices() is slightly different from C since the
744de7ef04eSHong Zhang     Fortran does not free the array of matrix objects, while in C that
745de7ef04eSHong Zhang     the array is freed
746de7ef04eSHong Zhang */
74719caf8f3SSatish Balay PETSC_EXTERN void matdestroymatrices_(PetscInt *n, Mat *smat, PetscErrorCode *ierr)
748de7ef04eSHong Zhang {
749de7ef04eSHong Zhang   PetscInt i;
750de7ef04eSHong Zhang 
751de7ef04eSHong Zhang   for (i = 0; i < *n; i++) {
7521fb7b255SJunchao Zhang     PETSC_FORTRAN_OBJECT_F_DESTROYED_TO_C_NULL(&smat[i]);
7535975b3b6SBarry Smith     *ierr = MatDestroy(&smat[i]);
7545975b3b6SBarry Smith     if (*ierr) return;
7551fb7b255SJunchao Zhang     PETSC_FORTRAN_OBJECT_C_NULL_TO_F_DESTROYED(&smat[i]);
756de7ef04eSHong Zhang   }
757de7ef04eSHong Zhang }
758de7ef04eSHong Zhang 
759de7ef04eSHong Zhang /*
760de7ef04eSHong Zhang     MatDestroySubMatrices() is slightly different from C since the
7617d6bfa3bSBarry Smith     Fortran provides the array to hold the submatrix objects, while in C that
7627dae84e0SHong Zhang     array is allocated by the MatCreateSubmatrices()
763*0764c050SBarry Smith 
764*0764c050SBarry Smith     An extra matrix may be stored at the end of the array, hence the check see
765*0764c050SBarry Smith     MatDestroySubMatrices_Dummy()
7667d6bfa3bSBarry Smith */
76719caf8f3SSatish Balay PETSC_EXTERN void matdestroysubmatrices_(PetscInt *n, Mat *smat, PetscErrorCode *ierr)
7687d6bfa3bSBarry Smith {
769de7ef04eSHong Zhang   Mat     *lsmat;
7707d6bfa3bSBarry Smith   PetscInt i;
7717d6bfa3bSBarry Smith 
772*0764c050SBarry Smith   if (*n == 0) return;
773de7ef04eSHong Zhang   *ierr = PetscMalloc1(*n + 1, &lsmat);
774*0764c050SBarry Smith   if (!smat[*n]) smat[*n] = (Mat)-2;
775de7ef04eSHong Zhang   for (i = 0; i <= *n; i++) {
7761fb7b255SJunchao Zhang     PETSC_FORTRAN_OBJECT_F_DESTROYED_TO_C_NULL(&smat[i]);
777de7ef04eSHong Zhang     lsmat[i] = smat[i];
7787d6bfa3bSBarry Smith   }
779de7ef04eSHong Zhang   *ierr = MatDestroySubMatrices(*n, &lsmat);
7805975b3b6SBarry Smith   for (i = 0; i <= *n; i++) { PETSC_FORTRAN_OBJECT_C_NULL_TO_F_DESTROYED(&smat[i]); }
7811fb7b255SJunchao Zhang }
7821fb7b255SJunchao Zhang 
78319caf8f3SSatish Balay PETSC_EXTERN void matnullspaceremove_(MatNullSpace *sp, Vec *vec, PetscErrorCode *ierr)
784812c3f48SMatthew Knepley {
785a8f51744SPierre Jolivet   CHKFORTRANNULLOBJECT(*sp);
786d0195637SJed Brown   *ierr = MatNullSpaceRemove(*sp, *vec);
787812c3f48SMatthew Knepley }
7881eea217eSSatish Balay 
78919caf8f3SSatish Balay PETSC_EXTERN void matgetinfo_(Mat *mat, MatInfoType *flag, MatInfo *info, int *ierr)
7905ba43861SSatish Balay {
7914d03fd2bSBarry Smith   *ierr = MatGetInfo(*mat, *flag, info);
7925ba43861SSatish Balay }
7935ba43861SSatish Balay 
79419caf8f3SSatish Balay PETSC_EXTERN void matlufactor_(Mat *mat, IS *row, IS *col, const MatFactorInfo *info, int *ierr)
79522688b47SSatish Balay {
79698e82671SJose E. Roman   CHKFORTRANNULLOBJECT(row);
79798e82671SJose E. Roman   CHKFORTRANNULLOBJECT(col);
79898e82671SJose E. Roman   *ierr = MatLUFactor(*mat, row ? *row : NULL, col ? *col : NULL, info);
79922688b47SSatish Balay }
80022688b47SSatish Balay 
80119caf8f3SSatish Balay PETSC_EXTERN void matilufactor_(Mat *mat, IS *row, IS *col, const MatFactorInfo *info, int *ierr)
80222688b47SSatish Balay {
80398e82671SJose E. Roman   CHKFORTRANNULLOBJECT(row);
80498e82671SJose E. Roman   CHKFORTRANNULLOBJECT(col);
80598e82671SJose E. Roman   *ierr = MatILUFactor(*mat, row ? *row : NULL, col ? *col : NULL, info);
80622688b47SSatish Balay }
80722688b47SSatish Balay 
80819caf8f3SSatish Balay PETSC_EXTERN void matlufactorsymbolic_(Mat *fact, Mat *mat, IS *row, IS *col, const MatFactorInfo *info, int *ierr)
80922688b47SSatish Balay {
81098e82671SJose E. Roman   CHKFORTRANNULLOBJECT(row);
81198e82671SJose E. Roman   CHKFORTRANNULLOBJECT(col);
81298e82671SJose E. Roman   *ierr = MatLUFactorSymbolic(*fact, *mat, row ? *row : NULL, col ? *col : NULL, info);
81322688b47SSatish Balay }
81422688b47SSatish Balay 
81519caf8f3SSatish Balay PETSC_EXTERN void matlufactornumeric_(Mat *fact, Mat *mat, const MatFactorInfo *info, int *ierr)
81622688b47SSatish Balay {
8174d03fd2bSBarry Smith   *ierr = MatLUFactorNumeric(*fact, *mat, info);
81822688b47SSatish Balay }
81922688b47SSatish Balay 
82019caf8f3SSatish Balay PETSC_EXTERN void matcholeskyfactor_(Mat *mat, IS *perm, const MatFactorInfo *info, int *ierr)
82122688b47SSatish Balay {
82298e82671SJose E. Roman   CHKFORTRANNULLOBJECT(perm);
82398e82671SJose E. Roman   *ierr = MatCholeskyFactor(*mat, perm ? *perm : NULL, info);
82422688b47SSatish Balay }
82522688b47SSatish Balay 
82619caf8f3SSatish Balay PETSC_EXTERN void matcholeskyfactorsymbolic_(Mat *fact, Mat *mat, IS *perm, const MatFactorInfo *info, int *ierr)
82722688b47SSatish Balay {
82898e82671SJose E. Roman   CHKFORTRANNULLOBJECT(perm);
82998e82671SJose E. Roman   *ierr = MatCholeskyFactorSymbolic(*fact, *mat, perm ? *perm : NULL, info);
83022688b47SSatish Balay }
83122688b47SSatish Balay 
83219caf8f3SSatish Balay PETSC_EXTERN void matcholeskyfactornumeric_(Mat *fact, Mat *mat, const MatFactorInfo *info, int *ierr)
83322688b47SSatish Balay {
8344d03fd2bSBarry Smith   *ierr = MatCholeskyFactorNumeric(*fact, *mat, info);
83522688b47SSatish Balay }
83622688b47SSatish Balay 
83719caf8f3SSatish Balay PETSC_EXTERN void matilufactorsymbolic_(Mat *fact, Mat *mat, IS *row, IS *col, const MatFactorInfo *info, int *ierr)
83822688b47SSatish Balay {
83998e82671SJose E. Roman   CHKFORTRANNULLOBJECT(row);
84098e82671SJose E. Roman   CHKFORTRANNULLOBJECT(col);
84198e82671SJose E. Roman   *ierr = MatILUFactorSymbolic(*fact, *mat, row ? *row : NULL, col ? *col : NULL, info);
84222688b47SSatish Balay }
84322688b47SSatish Balay 
84419caf8f3SSatish Balay PETSC_EXTERN void maticcfactorsymbolic_(Mat *fact, Mat *mat, IS *perm, const MatFactorInfo *info, int *ierr)
84522688b47SSatish Balay {
84698e82671SJose E. Roman   CHKFORTRANNULLOBJECT(perm);
84798e82671SJose E. Roman   *ierr = MatICCFactorSymbolic(*fact, *mat, perm ? *perm : NULL, info);
84822688b47SSatish Balay }
84922688b47SSatish Balay 
85098e82671SJose E. Roman PETSC_EXTERN void maticcfactor_(Mat *mat, IS *perm, const MatFactorInfo *info, int *ierr)
85122688b47SSatish Balay {
85298e82671SJose E. Roman   CHKFORTRANNULLOBJECT(perm);
85398e82671SJose E. Roman   *ierr = MatICCFactor(*mat, perm ? *perm : NULL, info);
85422688b47SSatish Balay }
85522688b47SSatish Balay 
85619caf8f3SSatish Balay PETSC_EXTERN void matfactorinfoinitialize_(MatFactorInfo *info, int *ierr)
85722688b47SSatish Balay {
8584d03fd2bSBarry Smith   *ierr = MatFactorInfoInitialize(info);
85922688b47SSatish Balay }
86019caf8f3SSatish Balay PETSC_EXTERN void matzerorowslocal_(Mat *mat, PetscInt *numRows, PetscInt rows[], PetscScalar *diag, Vec *x, Vec *b, int *ierr)
861d27e6124SSatish Balay {
862d27e6124SSatish Balay   *ierr = MatZeroRowsLocal(*mat, *numRows, rows, *diag, *x, *b);
863d27e6124SSatish Balay }
86419caf8f3SSatish Balay PETSC_EXTERN void matzerorowslocal0_(Mat *mat, PetscInt *numRows, PetscInt rows[], PetscScalar *diag, Vec *x, Vec *b, int *ierr)
865d27e6124SSatish Balay {
866d27e6124SSatish Balay   matzerorowslocal_(mat, numRows, rows, diag, x, b, ierr);
867d27e6124SSatish Balay }
86819caf8f3SSatish Balay PETSC_EXTERN void matzerorowslocal1_(Mat *mat, PetscInt *numRows, PetscInt rows[], PetscScalar *diag, Vec *x, Vec *b, int *ierr)
869d27e6124SSatish Balay {
870d27e6124SSatish Balay   matzerorowslocal_(mat, numRows, rows, diag, x, b, ierr);
871d27e6124SSatish Balay }
872