xref: /petsc/src/mat/interface/ftn-custom/zmatrixf.c (revision a8f51744601f91dc30d5f98153b1ecd91eebb0e5)
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
12f0a86a08SBarry Smith   #define matgetvalues1n_              MATGETVALUES1n
13f0a86a08SBarry Smith   #define matgetvaluesn1_              MATGETVALUESn1
144d03fd2bSBarry Smith   #define matsetvalues_                MATSETVALUES
151006886cSSatish Balay   #define matsetvaluesnnnn_            MATSETVALUESNNNN
163b494cfeSSatish Balay   #define matsetvalues0_               MATSETVALUES0
171b266c99SBarry Smith   #define matsetvaluesnn1_             MATSETVALUESNN1
184d03fd2bSBarry Smith   #define matsetvalues11_              MATSETVALUES11
194d03fd2bSBarry Smith   #define matsetvalues1n_              MATSETVALUES1N
204d03fd2bSBarry Smith   #define matsetvaluesn1_              MATSETVALUESN1
213b494cfeSSatish Balay   #define matsetvaluesblocked0_        MATSETVALUESBLOCKED0
220aee3464SBarry Smith   #define matsetvaluesblocked2_        MATSETVALUESBLOCKED2
234d03fd2bSBarry Smith   #define matsetvaluesblocked11_       MATSETVALUESBLOCKED11
244d03fd2bSBarry Smith   #define matsetvaluesblocked111_      MATSETVALUESBLOCKED111
254d03fd2bSBarry Smith   #define matsetvaluesblocked1n_       MATSETVALUESBLOCKED1N
264d03fd2bSBarry Smith   #define matsetvaluesblockedn1_       MATSETVALUESBLOCKEDN1
274d03fd2bSBarry Smith   #define matsetvaluesblockedlocal_    MATSETVALUESBLOCKEDLOCAL
283b494cfeSSatish Balay   #define matsetvaluesblockedlocal0_   MATSETVALUESBLOCKEDLOCAL0
294d03fd2bSBarry Smith   #define matsetvaluesblockedlocal11_  MATSETVALUESBLOCKEDLOCAL11
304d03fd2bSBarry Smith   #define matsetvaluesblockedlocal111_ MATSETVALUESBLOCKEDLOCAL111
314d03fd2bSBarry Smith   #define matsetvaluesblockedlocal1n_  MATSETVALUESBLOCKEDLOCAL1N
324d03fd2bSBarry Smith   #define matsetvaluesblockedlocaln1_  MATSETVALUESBLOCKEDLOCALN1
334d03fd2bSBarry Smith   #define matsetvalueslocal_           MATSETVALUESLOCAL
343b494cfeSSatish Balay   #define matsetvalueslocal0_          MATSETVALUESLOCAL0
354d03fd2bSBarry Smith   #define matsetvalueslocal11_         MATSETVALUESLOCAL11
364d03fd2bSBarry Smith   #define matsetvalueslocal11nn_       MATSETVALUESLOCAL11NN
374d03fd2bSBarry Smith   #define matsetvalueslocal111_        MATSETVALUESLOCAL111
384d03fd2bSBarry Smith   #define matsetvalueslocal1n_         MATSETVALUESLOCAL1N
394d03fd2bSBarry Smith   #define matsetvalueslocaln1_         MATSETVALUESLOCALN1
4087bcf4e0SBarry Smith   #define matgetrowmin_                MATGETROWMIN
4187bcf4e0SBarry Smith   #define matgetrowminabs_             MATGETROWMINABS
425928be6bSBarry Smith   #define matgetrowmax_                MATGETROWMAX
435928be6bSBarry Smith   #define matgetrowmaxabs_             MATGETROWMAXABS
447d6bfa3bSBarry Smith   #define matdestroymatrices_          MATDESTROYMATRICES
45df750dc8SHong Zhang   #define matdestroysubmatrices_       MATDESTROYSUBMATRICES
465dffd610SBarry Smith   #define matgetfactor_                MATGETFACTOR
4735bd34faSBarry Smith   #define matfactorgetsolverpackage_   MATFACTORGETSOLVERPACKAGE
48f4e70085SSatish Balay   #define matgetrowij_                 MATGETROWIJ
49f4e70085SSatish Balay   #define matrestorerowij_             MATRESTOREROWIJ
50f4e70085SSatish Balay   #define matgetrow_                   MATGETROW
51f4e70085SSatish Balay   #define matrestorerow_               MATRESTOREROW
52f7e310deSShri Abhyankar   #define matload_                     MATLOAD
53f4e70085SSatish Balay   #define matview_                     MATVIEW
548c778c55SBarry Smith   #define matseqaijgetarray_           MATSEQAIJGETARRAY
556778691eSSatish Balay   #define matseqaijrestorearray_       MATSEQAIJRESTOREARRAY
568c778c55SBarry Smith   #define matdensegetarray_            MATDENSEGETARRAY
578572280aSBarry Smith   #define matdensegetarrayread_        MATDENSEGETARRAYREAD
588c778c55SBarry Smith   #define matdenserestorearray_        MATDENSERESTOREARRAY
598572280aSBarry Smith   #define matdenserestorearrayread_    MATDENSERESTOREARRAYREAD
60f4e70085SSatish Balay   #define matconvert_                  MATCONVERT
617dae84e0SHong Zhang   #define matcreatesubmatrices_        MATCREATESUBMATRICES
6281ec7b92Smarius   #define matcreatesubmatricesmpi_     MATCREATESUBMATRICESMPI
6317ede90eSSatish Balay   #define matzerorowscolumns_          MATZEROROWSCOLUMNS
6417ede90eSSatish Balay   #define matzerorowscolumnsis_        MATZEROROWSCOLUMNSIS
6517ede90eSSatish Balay   #define matzerorowsstencil_          MATZEROROWSSTENCIL
66d25a37e1SJed Brown   #define matzerorowscolumnsstencil_   MATZEROROWSCOLUMNSSTENCIL
67f4e70085SSatish Balay   #define matzerorows_                 MATZEROROWS
68f4e70085SSatish Balay   #define matzerorowsis_               MATZEROROWSIS
69f4e70085SSatish Balay   #define matzerorowslocal_            MATZEROROWSLOCAL
70d27e6124SSatish Balay   #define matzerorowslocal0_           MATZEROROWSLOCAL0
71d27e6124SSatish Balay   #define matzerorowslocal1_           MATZEROROWSLOCAL1
72f4e70085SSatish Balay   #define matzerorowslocalis_          MATZEROROWSLOCALIS
7317ede90eSSatish Balay   #define matzerorowscolumnslocal_     MATZEROROWSCOLUMNSLOCAL
7417ede90eSSatish Balay   #define matzerorowscolumnslocalis_   MATZEROROWSCOLUMNSLOCALIS
751eea217eSSatish Balay   #define matsetoptionsprefix_         MATSETOPTIONSPREFIX
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
107afc39838SBarry Smith   #define matgetownershiprangecolumn_  MATGETOWNERSHIPRANGECOLUMN
108fe2efc57SMark   #define matviewfromoptions_          MATVIEWFROMOPTIONS
1091fb7b255SJunchao Zhang   #define matdestroy_                  MATDESTROY
110f4e70085SSatish Balay #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE)
1114d03fd2bSBarry Smith   #define matsetvalues_                matsetvalues
1121006886cSSatish Balay   #define matsetvaluesnnnn_            matsetvaluesnnnn
1133b494cfeSSatish Balay   #define matsetvalues0_               matsetvalues0
1141b266c99SBarry Smith   #define matsetvaluesnn1_             matsetvaluesnn1
1154d03fd2bSBarry Smith   #define matsetvalues11_              matsetvalues11
1164d03fd2bSBarry Smith   #define matsetvaluesn1_              matsetvaluesn1
1174d03fd2bSBarry Smith   #define matsetvalues1n_              matsetvalues1n
1184d03fd2bSBarry Smith   #define matsetvalueslocal_           matsetvalueslocal
1193b494cfeSSatish Balay   #define matsetvalueslocal0_          matsetvalueslocal0
1204d03fd2bSBarry Smith   #define matsetvalueslocal11_         matsetvalueslocal11
1214d03fd2bSBarry Smith   #define matsetvalueslocal11nn_       matsetvalueslocal11nn
1224d03fd2bSBarry Smith   #define matsetvalueslocal111_        matsetvalueslocal111
1234d03fd2bSBarry Smith   #define matsetvalueslocal1n_         matsetvalueslocal1n
1244d03fd2bSBarry Smith   #define matsetvalueslocaln1_         matsetvalueslocaln1
1254d03fd2bSBarry Smith   #define matsetvaluesblocked_         matsetvaluesblocked
1263b494cfeSSatish Balay   #define matsetvaluesblocked0_        matsetvaluesblocked0
1270aee3464SBarry Smith   #define matsetvaluesblocked2_        matsetvaluesblocked2
1284d03fd2bSBarry Smith   #define matsetvaluesblocked11_       matsetvaluesblocked11
1294d03fd2bSBarry Smith   #define matsetvaluesblocked111_      matsetvaluesblocked111
1304d03fd2bSBarry Smith   #define matsetvaluesblocked1n_       matsetvaluesblocked1n
13124aa916eSSatish Balay   #define matsetvaluesblockedn1_       matsetvaluesblockedn1
1324d03fd2bSBarry Smith   #define matsetvaluesblockedlocal_    matsetvaluesblockedlocal
1333b494cfeSSatish Balay   #define matsetvaluesblockedlocal0_   matsetvaluesblockedlocal0
1344d03fd2bSBarry Smith   #define matsetvaluesblockedlocal11_  matsetvaluesblockedlocal11
1354d03fd2bSBarry Smith   #define matsetvaluesblockedlocal111_ matsetvaluesblockedlocal111
1364d03fd2bSBarry Smith   #define matsetvaluesblockedlocal1n_  matsetvaluesblockedlocal1n
13724aa916eSSatish Balay   #define matsetvaluesblockedlocaln1_  matsetvaluesblockedlocaln1
13887bcf4e0SBarry Smith   #define matgetrowmin_                matgetrowmin
13987bcf4e0SBarry Smith   #define matgetrowminabs_             matgetrowminabs
1405928be6bSBarry Smith   #define matgetrowmax_                matgetrowmax
1415928be6bSBarry Smith   #define matgetrowmaxabs_             matgetrowmaxabs
1425928be6bSBarry Smith   #define matdestroymatrices_          matdestroymatrices
143df750dc8SHong Zhang   #define matdestroysubmatrices_       matdestroysubmatrices
1445dffd610SBarry Smith   #define matgetfactor_                matgetfactor
14535bd34faSBarry Smith   #define matfactorgetsolverpackage_   matfactorgetsolverpackage
146fcc9d04bSBarry Smith   #define matcreatevecs_               matcreatevecs
147f4e70085SSatish Balay   #define matgetrowij_                 matgetrowij
148f4e70085SSatish Balay   #define matrestorerowij_             matrestorerowij
149f4e70085SSatish Balay   #define matgetrow_                   matgetrow
150f4e70085SSatish Balay   #define matrestorerow_               matrestorerow
151f4e70085SSatish Balay   #define matview_                     matview
152f7e310deSShri Abhyankar   #define matload_                     matload
1538c778c55SBarry Smith   #define matseqaijgetarray_           matseqaijgetarray
1548c778c55SBarry Smith   #define matseqaijrestorearray_       matseqaijrestorearray
1558c778c55SBarry Smith   #define matdensegetarray_            matdensegetarray
1568572280aSBarry Smith   #define matdensegetarrayread_        matdensegetarrayread
1578c778c55SBarry Smith   #define matdenserestorearray_        matdenserestorearray
1588572280aSBarry Smith   #define matdenserestorearrayread_    matdenserestorearrayread
159f4e70085SSatish Balay   #define matconvert_                  matconvert
1607dae84e0SHong Zhang   #define matcreatesubmatrices_        matcreatesubmatrices
16181ec7b92Smarius   #define matcreatesubmatricesmpi_     matcreatesubmatricesmpi
16217ede90eSSatish Balay   #define matzerorowscolumns_          matzerorowscolumns
16317ede90eSSatish Balay   #define matzerorowscolumnsis_        matzerorowscolumnsis
16417ede90eSSatish Balay   #define matzerorowsstencil_          matzerorowsstencil
165d25a37e1SJed Brown   #define matzerorowscolumnsstencil_   matzerorowscolumnsstencil
166f4e70085SSatish Balay   #define matzerorows_                 matzerorows
167f4e70085SSatish Balay   #define matzerorowsis_               matzerorowsis
168f4e70085SSatish Balay   #define matzerorowslocal_            matzerorowslocal
169f4e70085SSatish Balay   #define matzerorowslocalis_          matzerorowslocalis
17017ede90eSSatish Balay   #define matzerorowscolumnslocal_     matzerorowscolumnslocal
17117ede90eSSatish Balay   #define matzerorowscolumnslocalis_   matzerorowscolumnslocalis
1721eea217eSSatish Balay   #define matsetoptionsprefix_         matsetoptionsprefix
173812c3f48SMatthew Knepley   #define matnullspaceremove_          matnullspaceremove
1745ba43861SSatish Balay   #define matgetinfo_                  matgetinfo
17522688b47SSatish Balay   #define matlufactor_                 matlufactor
17622688b47SSatish Balay   #define matilufactor_                matilufactor
17722688b47SSatish Balay   #define matlufactorsymbolic_         matlufactorsymbolic
17822688b47SSatish Balay   #define matlufactornumeric_          matlufactornumeric
17922688b47SSatish Balay   #define matcholeskyfactor_           matcholeskyfactor
18022688b47SSatish Balay   #define matcholeskyfactorsymbolic_   matcholeskyfactorsymbolic
18122688b47SSatish Balay   #define matcholeskyfactornumeric_    matcholeskyfactornumeric
18222688b47SSatish Balay   #define matilufactorsymbolic_        matilufactorsymbolic
18322688b47SSatish Balay   #define maticcfactorsymbolic_        maticcfactorsymbolic
18422688b47SSatish Balay   #define maticcfactor_                maticcfactor
18522688b47SSatish Balay   #define matfactorinfoinitialize_     matfactorinfoinitialize
186b22b330cSBarry Smith   #define matnullspacesetfunction_     matnullspacesetfunction
1870905d9aaSJed Brown   #define matfindnonzerorows_          matfindnonzerorows
18838135fcbSMartin Diehl   #define matgetsize_                  matgetsize
1893be0408cSBarry Smith   #define matgetsize00_                matgetsize00
1903be0408cSBarry Smith   #define matgetsize10_                matgetsize10
1913be0408cSBarry Smith   #define matgetsize01_                matgetsize01
19238135fcbSMartin Diehl   #define matgetlocalsize_             matgetlocalsize
1933be0408cSBarry Smith   #define matgetlocalsize00_           matgetlocalsize00
1943be0408cSBarry Smith   #define matgetlocalsize10_           matgetlocalsize10
1953be0408cSBarry Smith   #define matgetlocalsize01_           matgetlocalsize01
196f0a86a08SBarry Smith   #define matgetvalues_                matgetvalues
197f0a86a08SBarry Smith   #define matgetvalues0_               matgetvalues0
198f0a86a08SBarry Smith   #define matgetvaluesnn1_             matgetvaluesnn1
199f0a86a08SBarry Smith   #define matgetvaluesnnnn_            matgetvaluesnnnn
200f0a86a08SBarry Smith   #define matgetvalues11_              matgetvalues11
201f0a86a08SBarry Smith   #define matgetvalues1n_              matgetvalues1n
202f0a86a08SBarry Smith   #define matgetvaluesn1_              matgetvaluesn1
203260663b8SBarry Smith   #define matsetnullspace_             matsetnullspace
204260663b8SBarry Smith   #define matgetownershiprange_        matgetownershiprange
20591f56e93SMartin Diehl   #define matgetownershiprange00_      matgetownershiprange00
20691f56e93SMartin Diehl   #define matgetownershiprange10_      matgetownershiprange10
20791f56e93SMartin Diehl   #define matgetownershiprange01_      matgetownershiprange01
20891f56e93SMartin Diehl   #define matgetownershiprange11_      matgetownershiprange11
209c08c7cb9SBarry Smith   #define matgetownershipis_           matgetownershipis
210afc39838SBarry Smith   #define matgetownershiprangecolumn_  matgetownershiprangecolumn
211fe2efc57SMark   #define matviewfromoptions_          matviewfromoptions
2121fb7b255SJunchao Zhang   #define matdestroy_                  matdestroy
213f4e70085SSatish Balay #endif
214f4e70085SSatish Balay 
215f0a86a08SBarry Smith PETSC_EXTERN void matgetvalues_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], int *ierr)
216f0a86a08SBarry Smith {
217f0a86a08SBarry Smith   *ierr = MatGetValues(*mat, *m, idxm, *n, idxn, v);
218f0a86a08SBarry Smith }
219f0a86a08SBarry Smith 
220f0a86a08SBarry Smith PETSC_EXTERN void matgetvalues0_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], int *ierr)
221f0a86a08SBarry Smith {
222f0a86a08SBarry Smith   matgetvalues_(mat, m, idxm, n, idxn, v, ierr);
223f0a86a08SBarry Smith }
224f0a86a08SBarry Smith 
225f0a86a08SBarry Smith PETSC_EXTERN void matgetvaluesnn1_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], int *ierr)
226f0a86a08SBarry Smith {
227f0a86a08SBarry Smith   matgetvalues_(mat, m, idxm, n, idxn, v, ierr);
228f0a86a08SBarry Smith }
229f0a86a08SBarry Smith 
230f0a86a08SBarry Smith PETSC_EXTERN void matgetvaluesnnnn_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], int *ierr)
231f0a86a08SBarry Smith {
232f0a86a08SBarry Smith   matgetvalues_(mat, m, idxm, n, idxn, v, ierr);
233f0a86a08SBarry Smith }
234f0a86a08SBarry Smith 
235f0a86a08SBarry Smith PETSC_EXTERN void matgetvalues11_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], int *ierr)
236f0a86a08SBarry Smith {
237f0a86a08SBarry Smith   matgetvalues_(mat, m, idxm, n, idxn, v, ierr);
238f0a86a08SBarry Smith }
239f0a86a08SBarry Smith 
240f0a86a08SBarry Smith PETSC_EXTERN void matgetvalues1n_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], int *ierr)
241f0a86a08SBarry Smith {
242f0a86a08SBarry Smith   matgetvalues_(mat, m, idxm, n, idxn, v, ierr);
243f0a86a08SBarry Smith }
244f0a86a08SBarry Smith 
245f0a86a08SBarry Smith PETSC_EXTERN void matgetvaluesn1_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], int *ierr)
246f0a86a08SBarry Smith {
247f0a86a08SBarry Smith   matgetvalues_(mat, m, idxm, n, idxn, v, ierr);
248f0a86a08SBarry Smith }
249f0a86a08SBarry Smith 
25019caf8f3SSatish Balay PETSC_EXTERN void matgetownershiprange_(Mat *mat, PetscInt *m, PetscInt *n, int *ierr)
251260663b8SBarry Smith {
252260663b8SBarry Smith   CHKFORTRANNULLINTEGER(m);
253260663b8SBarry Smith   CHKFORTRANNULLINTEGER(n);
254260663b8SBarry Smith   *ierr = MatGetOwnershipRange(*mat, m, n);
255260663b8SBarry Smith }
256260663b8SBarry Smith 
25719caf8f3SSatish Balay PETSC_EXTERN void matgetownershiprange00_(Mat *mat, PetscInt *m, PetscInt *n, int *ierr)
2585dd307cdSMartin Diehl {
2595dd307cdSMartin Diehl   CHKFORTRANNULLINTEGER(m);
2605dd307cdSMartin Diehl   CHKFORTRANNULLINTEGER(n);
2615dd307cdSMartin Diehl   *ierr = MatGetOwnershipRange(*mat, m, n);
2625dd307cdSMartin Diehl }
2635dd307cdSMartin Diehl 
26419caf8f3SSatish Balay PETSC_EXTERN void matgetownershiprange10_(Mat *mat, PetscInt *m, PetscInt *n, int *ierr)
2655dd307cdSMartin Diehl {
2665dd307cdSMartin Diehl   CHKFORTRANNULLINTEGER(m);
2675dd307cdSMartin Diehl   CHKFORTRANNULLINTEGER(n);
2685dd307cdSMartin Diehl   *ierr = MatGetOwnershipRange(*mat, m, n);
2695dd307cdSMartin Diehl }
2705dd307cdSMartin Diehl 
27119caf8f3SSatish Balay PETSC_EXTERN void matgetownershiprange01_(Mat *mat, PetscInt *m, PetscInt *n, int *ierr)
2725dd307cdSMartin Diehl {
2735dd307cdSMartin Diehl   CHKFORTRANNULLINTEGER(m);
2745dd307cdSMartin Diehl   CHKFORTRANNULLINTEGER(n);
2755dd307cdSMartin Diehl   *ierr = MatGetOwnershipRange(*mat, m, n);
2765dd307cdSMartin Diehl }
2775dd307cdSMartin Diehl 
27819caf8f3SSatish Balay PETSC_EXTERN void matgetownershiprange11_(Mat *mat, PetscInt *m, PetscInt *n, int *ierr)
2795dd307cdSMartin Diehl {
2805dd307cdSMartin Diehl   CHKFORTRANNULLINTEGER(m);
2815dd307cdSMartin Diehl   CHKFORTRANNULLINTEGER(n);
2825dd307cdSMartin Diehl   *ierr = MatGetOwnershipRange(*mat, m, n);
2835dd307cdSMartin Diehl }
2845dd307cdSMartin Diehl 
28519caf8f3SSatish Balay PETSC_EXTERN void matgetownershipis_(Mat *mat, IS *m, IS *n, int *ierr)
286c08c7cb9SBarry Smith {
287c08c7cb9SBarry Smith   CHKFORTRANNULLOBJECT(m);
288c08c7cb9SBarry Smith   CHKFORTRANNULLOBJECT(n);
289c08c7cb9SBarry Smith   *ierr = MatGetOwnershipIS(*mat, m, n);
290c08c7cb9SBarry Smith }
291c08c7cb9SBarry Smith 
29219caf8f3SSatish Balay PETSC_EXTERN void matgetownershiprangecolumn_(Mat *mat, PetscInt *m, PetscInt *n, int *ierr)
293afc39838SBarry Smith {
294afc39838SBarry Smith   CHKFORTRANNULLINTEGER(m);
295afc39838SBarry Smith   CHKFORTRANNULLINTEGER(n);
296afc39838SBarry Smith   *ierr = MatGetOwnershipRangeColumn(*mat, m, n);
297afc39838SBarry Smith }
298afc39838SBarry Smith 
29919caf8f3SSatish Balay PETSC_EXTERN void matgetsize_(Mat *mat, PetscInt *m, PetscInt *n, int *ierr)
3003be0408cSBarry Smith {
3013be0408cSBarry Smith   CHKFORTRANNULLINTEGER(m);
3023be0408cSBarry Smith   CHKFORTRANNULLINTEGER(n);
3033be0408cSBarry Smith   *ierr = MatGetSize(*mat, m, n);
3043be0408cSBarry Smith }
3053be0408cSBarry Smith 
30619caf8f3SSatish Balay PETSC_EXTERN void matgetsize00_(Mat *mat, PetscInt *m, PetscInt *n, int *ierr)
3073be0408cSBarry Smith {
3083be0408cSBarry Smith   matgetsize_(mat, m, n, ierr);
3093be0408cSBarry Smith }
3103be0408cSBarry Smith 
31119caf8f3SSatish Balay PETSC_EXTERN void matgetsize10_(Mat *mat, PetscInt *m, PetscInt *n, int *ierr)
3123be0408cSBarry Smith {
3133be0408cSBarry Smith   matgetsize_(mat, m, n, ierr);
3143be0408cSBarry Smith }
3153be0408cSBarry Smith 
31619caf8f3SSatish Balay PETSC_EXTERN void matgetsize01_(Mat *mat, PetscInt *m, PetscInt *n, int *ierr)
3173be0408cSBarry Smith {
3183be0408cSBarry Smith   matgetsize_(mat, m, n, ierr);
3193be0408cSBarry Smith }
3203be0408cSBarry Smith 
32119caf8f3SSatish Balay PETSC_EXTERN void matgetlocalsize_(Mat *mat, PetscInt *m, PetscInt *n, int *ierr)
3223be0408cSBarry Smith {
3233be0408cSBarry Smith   CHKFORTRANNULLINTEGER(m);
3243be0408cSBarry Smith   CHKFORTRANNULLINTEGER(n);
3253be0408cSBarry Smith   *ierr = MatGetLocalSize(*mat, m, n);
3263be0408cSBarry Smith }
3273be0408cSBarry Smith 
32819caf8f3SSatish Balay PETSC_EXTERN void matgetlocalsize00_(Mat *mat, PetscInt *m, PetscInt *n, int *ierr)
3293be0408cSBarry Smith {
3303be0408cSBarry Smith   matgetlocalsize_(mat, m, n, ierr);
3313be0408cSBarry Smith }
3323be0408cSBarry Smith 
33319caf8f3SSatish Balay PETSC_EXTERN void matgetlocalsize10_(Mat *mat, PetscInt *m, PetscInt *n, int *ierr)
3343be0408cSBarry Smith {
3353be0408cSBarry Smith   matgetlocalsize_(mat, m, n, ierr);
3363be0408cSBarry Smith }
3373be0408cSBarry Smith 
33819caf8f3SSatish Balay PETSC_EXTERN void matgetlocalsize01_(Mat *mat, PetscInt *m, PetscInt *n, int *ierr)
3393be0408cSBarry Smith {
3403be0408cSBarry Smith   matgetlocalsize_(mat, m, n, ierr);
3413be0408cSBarry Smith }
3423be0408cSBarry Smith 
34370a7d78aSStefano Zampini PETSC_EXTERN void matsetvaluesblocked_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], InsertMode *addv, int *ierr)
34470a7d78aSStefano Zampini {
3454d03fd2bSBarry Smith   *ierr = MatSetValuesBlocked(*mat, *m, idxm, *n, idxn, v, *addv);
3464d03fd2bSBarry Smith }
3474d03fd2bSBarry Smith 
34870a7d78aSStefano 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))
34970a7d78aSStefano Zampini {
350cee688dbSBarry Smith   PetscScalar *fa;
3515975b3b6SBarry Smith   *ierr = F90Array2dAccess(y, MPIU_SCALAR, (void **)&fa PETSC_F90_2PTR_PARAM(ptrd));
3525975b3b6SBarry Smith   if (*ierr) return;
353cee688dbSBarry Smith   matsetvaluesblocked_(mat, m, idxm, n, idxn, fa, addv, ierr);
354cee688dbSBarry Smith }
355cee688dbSBarry Smith 
35670a7d78aSStefano Zampini PETSC_EXTERN void matsetvaluesblocked0_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], InsertMode *addv, int *ierr)
35770a7d78aSStefano Zampini {
3583b494cfeSSatish Balay   matsetvaluesblocked_(mat, m, idxm, n, idxn, v, addv, ierr);
3593b494cfeSSatish Balay }
3603b494cfeSSatish Balay 
36170a7d78aSStefano Zampini PETSC_EXTERN void matsetvaluesblocked11_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], InsertMode *addv, int *ierr)
36270a7d78aSStefano Zampini {
3634d03fd2bSBarry Smith   matsetvaluesblocked_(mat, m, idxm, n, idxn, v, addv, ierr);
3644d03fd2bSBarry Smith }
3654d03fd2bSBarry Smith 
36670a7d78aSStefano Zampini PETSC_EXTERN void matsetvaluesblocked111_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], InsertMode *addv, int *ierr)
36770a7d78aSStefano Zampini {
3684d03fd2bSBarry Smith   matsetvaluesblocked_(mat, m, idxm, n, idxn, v, addv, ierr);
3694d03fd2bSBarry Smith }
3704d03fd2bSBarry Smith 
37170a7d78aSStefano Zampini PETSC_EXTERN void matsetvaluesblocked1n_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], InsertMode *addv, int *ierr)
37270a7d78aSStefano Zampini {
3734d03fd2bSBarry Smith   matsetvaluesblocked_(mat, m, idxm, n, idxn, v, addv, ierr);
3744d03fd2bSBarry Smith }
3754d03fd2bSBarry Smith 
37670a7d78aSStefano Zampini PETSC_EXTERN void matsetvaluesblockedn1_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], InsertMode *addv, int *ierr)
37770a7d78aSStefano Zampini {
3784d03fd2bSBarry Smith   matsetvaluesblocked_(mat, m, idxm, n, idxn, v, addv, ierr);
3794d03fd2bSBarry Smith }
3804d03fd2bSBarry Smith 
38119caf8f3SSatish Balay PETSC_EXTERN void matsetvaluesblockedlocal_(Mat *mat, PetscInt *nrow, PetscInt irow[], PetscInt *ncol, PetscInt icol[], PetscScalar y[], InsertMode *addv, int *ierr)
3824d03fd2bSBarry Smith {
3834d03fd2bSBarry Smith   *ierr = MatSetValuesBlockedLocal(*mat, *nrow, irow, *ncol, icol, y, *addv);
3844d03fd2bSBarry Smith }
3854d03fd2bSBarry Smith 
38670a7d78aSStefano Zampini PETSC_EXTERN void matsetvaluesblockedlocal0_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], InsertMode *addv, int *ierr)
38770a7d78aSStefano Zampini {
3883b494cfeSSatish Balay   matsetvaluesblockedlocal_(mat, m, idxm, n, idxn, v, addv, ierr);
3893b494cfeSSatish Balay }
3903b494cfeSSatish Balay 
39170a7d78aSStefano Zampini PETSC_EXTERN void matsetvaluesblockedlocal11_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], InsertMode *addv, int *ierr)
39270a7d78aSStefano Zampini {
3934d03fd2bSBarry Smith   matsetvaluesblockedlocal_(mat, m, idxm, n, idxn, v, addv, ierr);
3944d03fd2bSBarry Smith }
3954d03fd2bSBarry Smith 
39670a7d78aSStefano Zampini PETSC_EXTERN void matsetvaluesblockedlocal111_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], InsertMode *addv, int *ierr)
39770a7d78aSStefano Zampini {
3984d03fd2bSBarry Smith   matsetvaluesblockedlocal_(mat, m, idxm, n, idxn, v, addv, ierr);
3994d03fd2bSBarry Smith }
4004d03fd2bSBarry Smith 
40170a7d78aSStefano Zampini PETSC_EXTERN void matsetvaluesblockedlocal1n_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], InsertMode *addv, int *ierr)
40270a7d78aSStefano Zampini {
4034d03fd2bSBarry Smith   matsetvaluesblockedlocal_(mat, m, idxm, n, idxn, v, addv, ierr);
4044d03fd2bSBarry Smith }
4054d03fd2bSBarry Smith 
40670a7d78aSStefano Zampini PETSC_EXTERN void matsetvaluesblockedlocaln1_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], InsertMode *addv, int *ierr)
40770a7d78aSStefano Zampini {
4084d03fd2bSBarry Smith   matsetvaluesblockedlocal_(mat, m, idxm, n, idxn, v, addv, ierr);
4094d03fd2bSBarry Smith }
4104d03fd2bSBarry Smith 
41119caf8f3SSatish Balay PETSC_EXTERN void matsetvalues_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], InsertMode *addv, int *ierr)
4124d03fd2bSBarry Smith {
4134d03fd2bSBarry Smith   *ierr = MatSetValues(*mat, *m, idxm, *n, idxn, v, *addv);
4144d03fd2bSBarry Smith }
4154d03fd2bSBarry Smith 
41619caf8f3SSatish Balay PETSC_EXTERN void matsetvaluesnnnn_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], InsertMode *addv, int *ierr)
4171b266c99SBarry Smith {
4181b266c99SBarry Smith   matsetvalues_(mat, m, idxm, n, idxn, v, addv, ierr);
4191b266c99SBarry Smith }
4201b266c99SBarry Smith 
42119caf8f3SSatish Balay PETSC_EXTERN void matsetvalues0_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], InsertMode *addv, int *ierr)
4223b494cfeSSatish Balay {
4233b494cfeSSatish Balay   matsetvalues_(mat, m, idxm, n, idxn, v, addv, ierr);
4243b494cfeSSatish Balay }
4253b494cfeSSatish Balay 
42619caf8f3SSatish Balay PETSC_EXTERN void matsetvaluesnn1_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], InsertMode *addv, int *ierr)
4271b266c99SBarry Smith {
4281b266c99SBarry Smith   matsetvalues_(mat, m, idxm, n, idxn, v, addv, ierr);
4291b266c99SBarry Smith }
4301b266c99SBarry Smith 
43119caf8f3SSatish Balay PETSC_EXTERN void matsetvalues11_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], InsertMode *addv, int *ierr)
4324d03fd2bSBarry Smith {
4334d03fd2bSBarry Smith   matsetvalues_(mat, m, idxm, n, idxn, v, addv, ierr);
4344d03fd2bSBarry Smith }
4354d03fd2bSBarry Smith 
43619caf8f3SSatish Balay PETSC_EXTERN void matsetvaluesn1_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], InsertMode *addv, int *ierr)
4374d03fd2bSBarry Smith {
4384d03fd2bSBarry Smith   matsetvalues_(mat, m, idxm, n, idxn, v, addv, ierr);
4394d03fd2bSBarry Smith }
4404d03fd2bSBarry Smith 
44119caf8f3SSatish Balay PETSC_EXTERN void matsetvalues1n_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], InsertMode *addv, int *ierr)
4424d03fd2bSBarry Smith {
4434d03fd2bSBarry Smith   matsetvalues_(mat, m, idxm, n, idxn, v, addv, ierr);
4444d03fd2bSBarry Smith }
4454d03fd2bSBarry Smith 
44619caf8f3SSatish Balay PETSC_EXTERN void matsetvalueslocal_(Mat *mat, PetscInt *nrow, PetscInt irow[], PetscInt *ncol, PetscInt icol[], PetscScalar y[], InsertMode *addv, int *ierr)
4474d03fd2bSBarry Smith {
4484d03fd2bSBarry Smith   *ierr = MatSetValuesLocal(*mat, *nrow, irow, *ncol, icol, y, *addv);
4494d03fd2bSBarry Smith }
4504d03fd2bSBarry Smith 
45119caf8f3SSatish Balay PETSC_EXTERN void matsetvalueslocal0_(Mat *mat, PetscInt *nrow, PetscInt irow[], PetscInt *ncol, PetscInt icol[], PetscScalar y[], InsertMode *addv, int *ierr)
4523b494cfeSSatish Balay {
4533b494cfeSSatish Balay   matsetvalueslocal_(mat, nrow, irow, ncol, icol, y, addv, ierr);
4543b494cfeSSatish Balay }
4553b494cfeSSatish Balay 
45619caf8f3SSatish Balay PETSC_EXTERN void matsetvalueslocal11_(Mat *mat, PetscInt *nrow, PetscInt irow[], PetscInt *ncol, PetscInt icol[], PetscScalar y[], InsertMode *addv, int *ierr)
4574d03fd2bSBarry Smith {
4584d03fd2bSBarry Smith   matsetvalueslocal_(mat, nrow, irow, ncol, icol, y, addv, ierr);
4594d03fd2bSBarry Smith }
4604d03fd2bSBarry Smith 
46119caf8f3SSatish Balay PETSC_EXTERN void matsetvalueslocal11nn_(Mat *mat, PetscInt *nrow, PetscInt irow[], PetscInt *ncol, PetscInt icol[], PetscScalar y[], InsertMode *addv, int *ierr)
4624d03fd2bSBarry Smith {
4634d03fd2bSBarry Smith   matsetvalueslocal_(mat, nrow, irow, ncol, icol, y, addv, ierr);
4644d03fd2bSBarry Smith }
4654d03fd2bSBarry Smith 
46619caf8f3SSatish Balay PETSC_EXTERN void matsetvalueslocal111_(Mat *mat, PetscInt *nrow, PetscInt irow[], PetscInt *ncol, PetscInt icol[], PetscScalar y[], InsertMode *addv, int *ierr)
4674d03fd2bSBarry Smith {
4684d03fd2bSBarry Smith   matsetvalueslocal_(mat, nrow, irow, ncol, icol, y, addv, ierr);
4694d03fd2bSBarry Smith }
4704d03fd2bSBarry Smith 
47119caf8f3SSatish Balay PETSC_EXTERN void matsetvalueslocal1n_(Mat *mat, PetscInt *nrow, PetscInt irow[], PetscInt *ncol, PetscInt icol[], PetscScalar y[], InsertMode *addv, int *ierr)
4724d03fd2bSBarry Smith {
4734d03fd2bSBarry Smith   matsetvalueslocal_(mat, nrow, irow, ncol, icol, y, addv, ierr);
4744d03fd2bSBarry Smith }
4754d03fd2bSBarry Smith 
47619caf8f3SSatish Balay PETSC_EXTERN void matsetvalueslocaln1_(Mat *mat, PetscInt *nrow, PetscInt irow[], PetscInt *ncol, PetscInt icol[], PetscScalar y[], InsertMode *addv, int *ierr)
4774d03fd2bSBarry Smith {
4784d03fd2bSBarry Smith   matsetvalueslocal_(mat, nrow, irow, ncol, icol, y, addv, ierr);
4794d03fd2bSBarry Smith }
4804d03fd2bSBarry Smith 
48119caf8f3SSatish Balay PETSC_EXTERN void matgetrowmin_(Mat *mat, Vec *v, PetscInt idx[], int *ierr)
48287bcf4e0SBarry Smith {
48387bcf4e0SBarry Smith   CHKFORTRANNULLINTEGER(idx);
48487bcf4e0SBarry Smith   *ierr = MatGetRowMin(*mat, *v, idx);
48587bcf4e0SBarry Smith }
4864d03fd2bSBarry Smith 
48719caf8f3SSatish Balay PETSC_EXTERN void matgetrowminabs_(Mat *mat, Vec *v, PetscInt idx[], int *ierr)
48887bcf4e0SBarry Smith {
48987bcf4e0SBarry Smith   CHKFORTRANNULLINTEGER(idx);
49087bcf4e0SBarry Smith   *ierr = MatGetRowMinAbs(*mat, *v, idx);
49187bcf4e0SBarry Smith }
49287bcf4e0SBarry Smith 
49319caf8f3SSatish Balay PETSC_EXTERN void matgetrowmax_(Mat *mat, Vec *v, PetscInt idx[], int *ierr)
4945928be6bSBarry Smith {
4955928be6bSBarry Smith   CHKFORTRANNULLINTEGER(idx);
4965928be6bSBarry Smith   *ierr = MatGetRowMax(*mat, *v, idx);
4975928be6bSBarry Smith }
4985928be6bSBarry Smith 
49919caf8f3SSatish Balay PETSC_EXTERN void matgetrowmaxabs_(Mat *mat, Vec *v, PetscInt idx[], int *ierr)
5005928be6bSBarry Smith {
5015928be6bSBarry Smith   CHKFORTRANNULLINTEGER(idx);
5025928be6bSBarry Smith   *ierr = MatGetRowMaxAbs(*mat, *v, idx);
5035928be6bSBarry Smith }
5045928be6bSBarry Smith 
505b22b330cSBarry Smith static PetscErrorCode ournullfunction(MatNullSpace sp, Vec x, void *ctx)
506b22b330cSBarry Smith {
5079566063dSJacob Faibussowitsch   PetscCallFortranVoidFunction((*(void (*)(MatNullSpace *, Vec *, void *, PetscErrorCode *))(((PetscObject)sp)->fortran_func_pointers[0]))(&sp, &x, ctx, &ierr));
5083ba16761SJacob Faibussowitsch   return PETSC_SUCCESS;
509b22b330cSBarry Smith }
510b22b330cSBarry Smith 
51119caf8f3SSatish Balay PETSC_EXTERN void matnullspacesetfunction_(MatNullSpace *sp, PetscErrorCode (*rem)(MatNullSpace, Vec, void *), void *ctx, PetscErrorCode *ierr)
512b22b330cSBarry Smith {
513b22b330cSBarry Smith   PetscObjectAllocateFortranPointers(*sp, 1);
514b22b330cSBarry Smith   ((PetscObject)*sp)->fortran_func_pointers[0] = (PetscVoidFunction)rem;
51526fbe8dcSKarl Rupp 
516b22b330cSBarry Smith   *ierr = MatNullSpaceSetFunction(*sp, ournullfunction, ctx);
517b22b330cSBarry Smith }
518b22b330cSBarry Smith 
51919caf8f3SSatish Balay PETSC_EXTERN void matcreatevecs_(Mat *mat, Vec *right, Vec *left, int *ierr)
5207c54600cSBarry Smith {
5217c54600cSBarry Smith   CHKFORTRANNULLOBJECT(right);
5227c54600cSBarry Smith   CHKFORTRANNULLOBJECT(left);
5232a7a6963SBarry Smith   *ierr = MatCreateVecs(*mat, right, left);
5247c54600cSBarry Smith }
5257c54600cSBarry Smith 
5265975b3b6SBarry 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)
527f4e70085SSatish Balay {
5281a83f524SJed Brown   const PetscInt *IA, *JA;
5295975b3b6SBarry Smith   *ierr = MatGetRowIJ(*B, *shift, *sym, *blockcompressed, n, &IA, &JA, done);
5305975b3b6SBarry Smith   if (*ierr) return;
5311a83f524SJed Brown   *iia = PetscIntAddressToFortran(ia, (PetscInt *)IA);
5321a83f524SJed Brown   *jja = PetscIntAddressToFortran(ja, (PetscInt *)JA);
533f4e70085SSatish Balay }
534f4e70085SSatish Balay 
5355975b3b6SBarry 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)
536f4e70085SSatish Balay {
5371a83f524SJed Brown   const PetscInt *IA = PetscIntAddressFromFortran(ia, *iia), *JA = PetscIntAddressFromFortran(ja, *jja);
5388f7157efSSatish Balay   *ierr = MatRestoreRowIJ(*B, *shift, *sym, *blockcompressed, n, &IA, &JA, done);
539f4e70085SSatish Balay }
540f4e70085SSatish Balay 
541f4e70085SSatish Balay /*
542f4e70085SSatish Balay    This is a poor way of storing the column and value pointers
543f4e70085SSatish Balay   generated by MatGetRow() to be returned with MatRestoreRow()
544f4e70085SSatish Balay   but there is not natural,good place else to store them. Hence
545f4e70085SSatish Balay   Fortran programmers can only have one outstanding MatGetRows()
546f4e70085SSatish Balay   at a time.
547f4e70085SSatish Balay */
5483ba16761SJacob Faibussowitsch static int                matgetrowactive = 0;
549f4e70085SSatish Balay static const PetscInt    *my_ocols        = 0;
550f4e70085SSatish Balay static const PetscScalar *my_ovals        = 0;
551f4e70085SSatish Balay 
55219caf8f3SSatish Balay PETSC_EXTERN void matgetrow_(Mat *mat, PetscInt *row, PetscInt *ncols, PetscInt *cols, PetscScalar *vals, PetscErrorCode *ierr)
553f4e70085SSatish Balay {
554f4e70085SSatish Balay   const PetscInt    **oocols = &my_ocols;
555f4e70085SSatish Balay   const PetscScalar **oovals = &my_ovals;
556f4e70085SSatish Balay 
557f4e70085SSatish Balay   if (matgetrowactive) {
5583ba16761SJacob Faibussowitsch     *ierr = PetscError(PETSC_COMM_SELF, __LINE__, "MatGetRow_Fortran", __FILE__, PETSC_ERR_ARG_WRONGSTATE, PETSC_ERROR_INITIAL, "Cannot have two MatGetRow() active simultaneously\n\
559f4e70085SSatish Balay                call MatRestoreRow() before calling MatGetRow() a second time");
5603ba16761SJacob Faibussowitsch     *ierr = PETSC_ERR_ARG_WRONGSTATE;
561f4e70085SSatish Balay     return;
562f4e70085SSatish Balay   }
563f4e70085SSatish Balay 
5643ba16761SJacob Faibussowitsch   CHKFORTRANNULLINTEGER(cols);
5653ba16761SJacob Faibussowitsch   if (!cols) oocols = NULL;
5663ba16761SJacob Faibussowitsch   CHKFORTRANNULLSCALAR(vals);
5673ba16761SJacob Faibussowitsch   if (!vals) oovals = NULL;
568f4e70085SSatish Balay 
569f4e70085SSatish Balay   *ierr = MatGetRow(*mat, *row, ncols, oocols, oovals);
570f4e70085SSatish Balay   if (*ierr) return;
571f4e70085SSatish Balay 
5723ba16761SJacob Faibussowitsch   if (oocols) {
5733ba16761SJacob Faibussowitsch     *ierr = PetscArraycpy(cols, my_ocols, *ncols);
5743ba16761SJacob Faibussowitsch     if (*ierr) return;
5753ba16761SJacob Faibussowitsch   }
5763ba16761SJacob Faibussowitsch   if (oovals) {
5773ba16761SJacob Faibussowitsch     *ierr = PetscArraycpy(vals, my_ovals, *ncols);
5783ba16761SJacob Faibussowitsch     if (*ierr) return;
5793ba16761SJacob Faibussowitsch   }
580f4e70085SSatish Balay   matgetrowactive = 1;
581f4e70085SSatish Balay }
582f4e70085SSatish Balay 
58319caf8f3SSatish Balay PETSC_EXTERN void matrestorerow_(Mat *mat, PetscInt *row, PetscInt *ncols, PetscInt *cols, PetscScalar *vals, PetscErrorCode *ierr)
584f4e70085SSatish Balay {
585f4e70085SSatish Balay   const PetscInt    **oocols = &my_ocols;
586f4e70085SSatish Balay   const PetscScalar **oovals = &my_ovals;
5873ba16761SJacob Faibussowitsch 
588f4e70085SSatish Balay   if (!matgetrowactive) {
5893ba16761SJacob Faibussowitsch     *ierr = PetscError(PETSC_COMM_SELF, __LINE__, "MatRestoreRow_Fortran", __FILE__, PETSC_ERR_ARG_WRONGSTATE, PETSC_ERROR_INITIAL, "Must call MatGetRow() first");
5903ba16761SJacob Faibussowitsch     *ierr = PETSC_ERR_ARG_WRONGSTATE;
591f4e70085SSatish Balay     return;
592f4e70085SSatish Balay   }
5933ba16761SJacob Faibussowitsch   CHKFORTRANNULLINTEGER(cols);
5943ba16761SJacob Faibussowitsch   if (!cols) oocols = NULL;
5953ba16761SJacob Faibussowitsch   CHKFORTRANNULLSCALAR(vals);
5963ba16761SJacob Faibussowitsch   if (!vals) oovals = NULL;
597f4e70085SSatish Balay 
598f4e70085SSatish Balay   *ierr           = MatRestoreRow(*mat, *row, ncols, oocols, oovals);
599f4e70085SSatish Balay   matgetrowactive = 0;
600f4e70085SSatish Balay }
601f4e70085SSatish Balay 
60219caf8f3SSatish Balay PETSC_EXTERN void matview_(Mat *mat, PetscViewer *vin, PetscErrorCode *ierr)
603f4e70085SSatish Balay {
604f4e70085SSatish Balay   PetscViewer v;
605f4e70085SSatish Balay   PetscPatchDefaultViewers_Fortran(vin, v);
606f4e70085SSatish Balay   *ierr = MatView(*mat, v);
607f4e70085SSatish Balay }
608f4e70085SSatish Balay 
60919caf8f3SSatish Balay PETSC_EXTERN void matload_(Mat *mat, PetscViewer *vin, PetscErrorCode *ierr)
610f7e310deSShri Abhyankar {
611f7e310deSShri Abhyankar   PetscViewer v;
612f7e310deSShri Abhyankar   PetscPatchDefaultViewers_Fortran(vin, v);
613112444f4SShri Abhyankar   *ierr = MatLoad(*mat, v);
614f7e310deSShri Abhyankar }
615f7e310deSShri Abhyankar 
61619caf8f3SSatish Balay PETSC_EXTERN void matseqaijgetarray_(Mat *mat, PetscScalar *fa, size_t *ia, PetscErrorCode *ierr)
617f4e70085SSatish Balay {
618f4e70085SSatish Balay   PetscScalar *mm;
619f4e70085SSatish Balay   PetscInt     m, n;
620f4e70085SSatish Balay 
6215975b3b6SBarry Smith   *ierr = MatSeqAIJGetArray(*mat, &mm);
6225975b3b6SBarry Smith   if (*ierr) return;
6235975b3b6SBarry Smith   *ierr = MatGetSize(*mat, &m, &n);
6245975b3b6SBarry Smith   if (*ierr) return;
6255975b3b6SBarry Smith   *ierr = PetscScalarAddressToFortran((PetscObject)*mat, 1, fa, mm, m * n, ia);
6265975b3b6SBarry Smith   if (*ierr) return;
627f4e70085SSatish Balay }
628f4e70085SSatish Balay 
62919caf8f3SSatish Balay PETSC_EXTERN void matseqaijrestorearray_(Mat *mat, PetscScalar *fa, size_t *ia, PetscErrorCode *ierr)
630f4e70085SSatish Balay {
631f4e70085SSatish Balay   PetscScalar *lx;
632f4e70085SSatish Balay   PetscInt     m, n;
633f4e70085SSatish Balay 
6345975b3b6SBarry Smith   *ierr = MatGetSize(*mat, &m, &n);
6355975b3b6SBarry Smith   if (*ierr) return;
6365975b3b6SBarry Smith   *ierr = PetscScalarAddressFromFortran((PetscObject)*mat, fa, *ia, m * n, &lx);
6375975b3b6SBarry Smith   if (*ierr) return;
6385975b3b6SBarry Smith   *ierr = MatSeqAIJRestoreArray(*mat, &lx);
6395975b3b6SBarry Smith   if (*ierr) return;
640f4e70085SSatish Balay }
641f4e70085SSatish Balay 
64219caf8f3SSatish Balay PETSC_EXTERN void matdensegetarray_(Mat *mat, PetscScalar *fa, size_t *ia, PetscErrorCode *ierr)
64373a71a0fSBarry Smith {
64473a71a0fSBarry Smith   PetscScalar *mm;
64573a71a0fSBarry Smith   PetscInt     m, n;
64673a71a0fSBarry Smith 
6475975b3b6SBarry Smith   *ierr = MatDenseGetArray(*mat, &mm);
6485975b3b6SBarry Smith   if (*ierr) return;
6495975b3b6SBarry Smith   *ierr = MatGetSize(*mat, &m, &n);
6505975b3b6SBarry Smith   if (*ierr) return;
6515975b3b6SBarry Smith   *ierr = PetscScalarAddressToFortran((PetscObject)*mat, 1, fa, mm, m * n, ia);
6525975b3b6SBarry Smith   if (*ierr) return;
65373a71a0fSBarry Smith }
65473a71a0fSBarry Smith 
65519caf8f3SSatish Balay PETSC_EXTERN void matdenserestorearray_(Mat *mat, PetscScalar *fa, size_t *ia, PetscErrorCode *ierr)
65673a71a0fSBarry Smith {
65773a71a0fSBarry Smith   PetscScalar *lx;
65873a71a0fSBarry Smith   PetscInt     m, n;
65973a71a0fSBarry Smith 
6605975b3b6SBarry Smith   *ierr = MatGetSize(*mat, &m, &n);
6615975b3b6SBarry Smith   if (*ierr) return;
6625975b3b6SBarry Smith   *ierr = PetscScalarAddressFromFortran((PetscObject)*mat, fa, *ia, m * n, &lx);
6635975b3b6SBarry Smith   if (*ierr) return;
6645975b3b6SBarry Smith   *ierr = MatDenseRestoreArray(*mat, &lx);
6655975b3b6SBarry Smith   if (*ierr) return;
66673a71a0fSBarry Smith }
66773a71a0fSBarry Smith 
66819caf8f3SSatish Balay PETSC_EXTERN void matdensegetarrayread_(Mat *mat, PetscScalar *fa, size_t *ia, PetscErrorCode *ierr)
6698572280aSBarry Smith {
6707067c7f7SBarry Smith   const PetscScalar *mm;
6718572280aSBarry Smith   PetscInt           m, n;
6728572280aSBarry Smith 
6735975b3b6SBarry Smith   *ierr = MatDenseGetArrayRead(*mat, &mm);
6745975b3b6SBarry Smith   if (*ierr) return;
6755975b3b6SBarry Smith   *ierr = MatGetSize(*mat, &m, &n);
6765975b3b6SBarry Smith   if (*ierr) return;
6775975b3b6SBarry Smith   *ierr = PetscScalarAddressToFortran((PetscObject)*mat, 1, fa, (PetscScalar *)mm, m * n, ia);
6785975b3b6SBarry Smith   if (*ierr) return;
6798572280aSBarry Smith }
6808572280aSBarry Smith 
68119caf8f3SSatish Balay PETSC_EXTERN void matdenserestorearrayread_(Mat *mat, PetscScalar *fa, size_t *ia, PetscErrorCode *ierr)
6828572280aSBarry Smith {
6837067c7f7SBarry Smith   const PetscScalar *lx;
6848572280aSBarry Smith   PetscInt           m, n;
6858572280aSBarry Smith 
6865975b3b6SBarry Smith   *ierr = MatGetSize(*mat, &m, &n);
6875975b3b6SBarry Smith   if (*ierr) return;
6885975b3b6SBarry Smith   *ierr = PetscScalarAddressFromFortran((PetscObject)*mat, fa, *ia, m * n, (PetscScalar **)&lx);
6895975b3b6SBarry Smith   if (*ierr) return;
6905975b3b6SBarry Smith   *ierr = MatDenseRestoreArrayRead(*mat, &lx);
6915975b3b6SBarry Smith   if (*ierr) return;
6928572280aSBarry Smith }
6938572280aSBarry Smith 
69419caf8f3SSatish Balay PETSC_EXTERN void matfactorgetsolverpackage_(Mat *mat, char *name, PetscErrorCode *ierr, PETSC_FORTRAN_CHARLEN_T len)
69535bd34faSBarry Smith {
69635bd34faSBarry Smith   const char *tname;
69735bd34faSBarry Smith 
6985975b3b6SBarry Smith   *ierr = MatFactorGetSolverType(*mat, &tname);
6995975b3b6SBarry Smith   if (*ierr) return;
70035bd34faSBarry Smith   if (name != PETSC_NULL_CHARACTER_Fortran) {
7015975b3b6SBarry Smith     *ierr = PetscStrncpy(name, tname, len);
7025975b3b6SBarry Smith     if (*ierr) return;
70335bd34faSBarry Smith   }
70435bd34faSBarry Smith   FIXRETURNCHAR(PETSC_TRUE, name, len);
70535bd34faSBarry Smith }
70635bd34faSBarry Smith 
70719caf8f3SSatish Balay PETSC_EXTERN void matgetfactor_(Mat *mat, char *outtype, MatFactorType *ftype, Mat *M, PetscErrorCode *ierr, PETSC_FORTRAN_CHARLEN_T len)
7085dffd610SBarry Smith {
7095dffd610SBarry Smith   char *t;
7105dffd610SBarry Smith   FIXCHAR(outtype, len, t);
7115975b3b6SBarry Smith   *ierr = MatGetFactor(*mat, t, *ftype, M);
7125975b3b6SBarry Smith   if (*ierr) return;
7135dffd610SBarry Smith   FREECHAR(outtype, t);
7145dffd610SBarry Smith }
7155dffd610SBarry Smith 
71619caf8f3SSatish Balay PETSC_EXTERN void matconvert_(Mat *mat, char *outtype, MatReuse *reuse, Mat *M, PetscErrorCode *ierr, PETSC_FORTRAN_CHARLEN_T len)
717f4e70085SSatish Balay {
718f4e70085SSatish Balay   char *t;
719f4e70085SSatish Balay   FIXCHAR(outtype, len, t);
7205975b3b6SBarry Smith   *ierr = MatConvert(*mat, t, *reuse, M);
7215975b3b6SBarry Smith   if (*ierr) return;
722f4e70085SSatish Balay   FREECHAR(outtype, t);
723f4e70085SSatish Balay }
724f4e70085SSatish Balay 
725f4e70085SSatish Balay /*
7267dae84e0SHong Zhang     MatCreateSubmatrices() is slightly different from C since the
727f4e70085SSatish Balay     Fortran provides the array to hold the submatrix objects,while in C that
7287dae84e0SHong Zhang     array is allocated by the MatCreateSubmatrices()
729f4e70085SSatish Balay */
73019caf8f3SSatish Balay PETSC_EXTERN void matcreatesubmatrices_(Mat *mat, PetscInt *n, IS *isrow, IS *iscol, MatReuse *scall, Mat *smat, PetscErrorCode *ierr)
731f4e70085SSatish Balay {
732f4e70085SSatish Balay   Mat     *lsmat;
733f4e70085SSatish Balay   PetscInt i;
734f4e70085SSatish Balay 
735f4e70085SSatish Balay   if (*scall == MAT_INITIAL_MATRIX) {
7367dae84e0SHong Zhang     *ierr = MatCreateSubMatrices(*mat, *n, isrow, iscol, *scall, &lsmat);
73769d47153SPierre Jolivet     for (i = 0; i <= *n; i++) { /* lsmat[*n] might be a dummy matrix for saving data structure */
738f4e70085SSatish Balay       smat[i] = lsmat[i];
739f4e70085SSatish Balay     }
740f4e70085SSatish Balay     *ierr = PetscFree(lsmat);
741f4e70085SSatish Balay   } else {
7427dae84e0SHong Zhang     *ierr = MatCreateSubMatrices(*mat, *n, isrow, iscol, *scall, &smat);
743f4e70085SSatish Balay   }
744f4e70085SSatish Balay }
745f4e70085SSatish Balay 
7467d6bfa3bSBarry Smith /*
74781ec7b92Smarius     MatCreateSubmatrices() is slightly different from C since the
74881ec7b92Smarius     Fortran provides the array to hold the submatrix objects,while in C that
74981ec7b92Smarius     array is allocated by the MatCreateSubmatrices()
75081ec7b92Smarius */
75119caf8f3SSatish Balay PETSC_EXTERN void matcreatesubmatricesmpi_(Mat *mat, PetscInt *n, IS *isrow, IS *iscol, MatReuse *scall, Mat *smat, PetscErrorCode *ierr)
75281ec7b92Smarius {
75381ec7b92Smarius   Mat     *lsmat;
75481ec7b92Smarius   PetscInt i;
75581ec7b92Smarius 
75681ec7b92Smarius   if (*scall == MAT_INITIAL_MATRIX) {
75781ec7b92Smarius     *ierr = MatCreateSubMatricesMPI(*mat, *n, isrow, iscol, *scall, &lsmat);
75869d47153SPierre Jolivet     for (i = 0; i <= *n; i++) { /* lsmat[*n] might be a dummy matrix for saving data structure */
75981ec7b92Smarius       smat[i] = lsmat[i];
76081ec7b92Smarius     }
76181ec7b92Smarius     *ierr = PetscFree(lsmat);
76281ec7b92Smarius   } else {
76381ec7b92Smarius     *ierr = MatCreateSubMatricesMPI(*mat, *n, isrow, iscol, *scall, &smat);
76481ec7b92Smarius   }
76581ec7b92Smarius }
76681ec7b92Smarius 
76781ec7b92Smarius /*
7687d6bfa3bSBarry Smith     MatDestroyMatrices() is slightly different from C since the
769de7ef04eSHong Zhang     Fortran does not free the array of matrix objects, while in C that
770de7ef04eSHong Zhang     the array is freed
771de7ef04eSHong Zhang */
77219caf8f3SSatish Balay PETSC_EXTERN void matdestroymatrices_(PetscInt *n, Mat *smat, PetscErrorCode *ierr)
773de7ef04eSHong Zhang {
774de7ef04eSHong Zhang   PetscInt i;
775de7ef04eSHong Zhang 
776de7ef04eSHong Zhang   for (i = 0; i < *n; i++) {
7771fb7b255SJunchao Zhang     PETSC_FORTRAN_OBJECT_F_DESTROYED_TO_C_NULL(&smat[i]);
7785975b3b6SBarry Smith     *ierr = MatDestroy(&smat[i]);
7795975b3b6SBarry Smith     if (*ierr) return;
7801fb7b255SJunchao Zhang     PETSC_FORTRAN_OBJECT_C_NULL_TO_F_DESTROYED(&smat[i]);
781de7ef04eSHong Zhang   }
782de7ef04eSHong Zhang }
783de7ef04eSHong Zhang 
784de7ef04eSHong Zhang /*
785de7ef04eSHong Zhang     MatDestroySubMatrices() is slightly different from C since the
7867d6bfa3bSBarry Smith     Fortran provides the array to hold the submatrix objects, while in C that
7877dae84e0SHong Zhang     array is allocated by the MatCreateSubmatrices()
7887d6bfa3bSBarry Smith */
78919caf8f3SSatish Balay PETSC_EXTERN void matdestroysubmatrices_(PetscInt *n, Mat *smat, PetscErrorCode *ierr)
7907d6bfa3bSBarry Smith {
791de7ef04eSHong Zhang   Mat     *lsmat;
7927d6bfa3bSBarry Smith   PetscInt i;
7937d6bfa3bSBarry Smith 
794de7ef04eSHong Zhang   *ierr = PetscMalloc1(*n + 1, &lsmat);
795de7ef04eSHong Zhang   for (i = 0; i <= *n; i++) {
7961fb7b255SJunchao Zhang     PETSC_FORTRAN_OBJECT_F_DESTROYED_TO_C_NULL(&smat[i]);
797de7ef04eSHong Zhang     lsmat[i] = smat[i];
7987d6bfa3bSBarry Smith   }
799de7ef04eSHong Zhang   *ierr = MatDestroySubMatrices(*n, &lsmat);
8005975b3b6SBarry Smith   for (i = 0; i <= *n; i++) { PETSC_FORTRAN_OBJECT_C_NULL_TO_F_DESTROYED(&smat[i]); }
8011fb7b255SJunchao Zhang }
8021fb7b255SJunchao Zhang 
8031fb7b255SJunchao Zhang PETSC_EXTERN void matdestroy_(Mat *x, int *ierr)
8041fb7b255SJunchao Zhang {
8051fb7b255SJunchao Zhang   PETSC_FORTRAN_OBJECT_F_DESTROYED_TO_C_NULL(x);
8065975b3b6SBarry Smith   *ierr = MatDestroy(x);
8075975b3b6SBarry Smith   if (*ierr) return;
8081fb7b255SJunchao Zhang   PETSC_FORTRAN_OBJECT_C_NULL_TO_F_DESTROYED(x);
809df750dc8SHong Zhang }
810df750dc8SHong Zhang 
81119caf8f3SSatish Balay PETSC_EXTERN void matsetoptionsprefix_(Mat *mat, char *prefix, PetscErrorCode *ierr, PETSC_FORTRAN_CHARLEN_T len)
8121eea217eSSatish Balay {
8131eea217eSSatish Balay   char *t;
8141eea217eSSatish Balay 
8151eea217eSSatish Balay   FIXCHAR(prefix, len, t);
8165975b3b6SBarry Smith   *ierr = MatSetOptionsPrefix(*mat, t);
8175975b3b6SBarry Smith   if (*ierr) return;
8181eea217eSSatish Balay   FREECHAR(prefix, t);
8191eea217eSSatish Balay }
8201eea217eSSatish Balay 
82119caf8f3SSatish Balay PETSC_EXTERN void matnullspaceremove_(MatNullSpace *sp, Vec *vec, PetscErrorCode *ierr)
822812c3f48SMatthew Knepley {
823*a8f51744SPierre Jolivet   CHKFORTRANNULLOBJECT(*sp);
824d0195637SJed Brown   *ierr = MatNullSpaceRemove(*sp, *vec);
825812c3f48SMatthew Knepley }
8261eea217eSSatish Balay 
82719caf8f3SSatish Balay PETSC_EXTERN void matgetinfo_(Mat *mat, MatInfoType *flag, MatInfo *info, int *ierr)
8285ba43861SSatish Balay {
8294d03fd2bSBarry Smith   *ierr = MatGetInfo(*mat, *flag, info);
8305ba43861SSatish Balay }
8315ba43861SSatish Balay 
83219caf8f3SSatish Balay PETSC_EXTERN void matlufactor_(Mat *mat, IS *row, IS *col, const MatFactorInfo *info, int *ierr)
83322688b47SSatish Balay {
8344d03fd2bSBarry Smith   *ierr = MatLUFactor(*mat, *row, *col, info);
83522688b47SSatish Balay }
83622688b47SSatish Balay 
83719caf8f3SSatish Balay PETSC_EXTERN void matilufactor_(Mat *mat, IS *row, IS *col, const MatFactorInfo *info, int *ierr)
83822688b47SSatish Balay {
8394d03fd2bSBarry Smith   *ierr = MatILUFactor(*mat, *row, *col, info);
84022688b47SSatish Balay }
84122688b47SSatish Balay 
84219caf8f3SSatish Balay PETSC_EXTERN void matlufactorsymbolic_(Mat *fact, Mat *mat, IS *row, IS *col, const MatFactorInfo *info, int *ierr)
84322688b47SSatish Balay {
8444d03fd2bSBarry Smith   *ierr = MatLUFactorSymbolic(*fact, *mat, *row, *col, info);
84522688b47SSatish Balay }
84622688b47SSatish Balay 
84719caf8f3SSatish Balay PETSC_EXTERN void matlufactornumeric_(Mat *fact, Mat *mat, const MatFactorInfo *info, int *ierr)
84822688b47SSatish Balay {
8494d03fd2bSBarry Smith   *ierr = MatLUFactorNumeric(*fact, *mat, info);
85022688b47SSatish Balay }
85122688b47SSatish Balay 
85219caf8f3SSatish Balay PETSC_EXTERN void matcholeskyfactor_(Mat *mat, IS *perm, const MatFactorInfo *info, int *ierr)
85322688b47SSatish Balay {
8544d03fd2bSBarry Smith   *ierr = MatCholeskyFactor(*mat, *perm, info);
85522688b47SSatish Balay }
85622688b47SSatish Balay 
85719caf8f3SSatish Balay PETSC_EXTERN void matcholeskyfactorsymbolic_(Mat *fact, Mat *mat, IS *perm, const MatFactorInfo *info, int *ierr)
85822688b47SSatish Balay {
8594d03fd2bSBarry Smith   *ierr = MatCholeskyFactorSymbolic(*fact, *mat, *perm, info);
86022688b47SSatish Balay }
86122688b47SSatish Balay 
86219caf8f3SSatish Balay PETSC_EXTERN void matcholeskyfactornumeric_(Mat *fact, Mat *mat, const MatFactorInfo *info, int *ierr)
86322688b47SSatish Balay {
8644d03fd2bSBarry Smith   *ierr = MatCholeskyFactorNumeric(*fact, *mat, info);
86522688b47SSatish Balay }
86622688b47SSatish Balay 
86719caf8f3SSatish Balay PETSC_EXTERN void matilufactorsymbolic_(Mat *fact, Mat *mat, IS *row, IS *col, const MatFactorInfo *info, int *ierr)
86822688b47SSatish Balay {
8694d03fd2bSBarry Smith   *ierr = MatILUFactorSymbolic(*fact, *mat, *row, *col, info);
87022688b47SSatish Balay }
87122688b47SSatish Balay 
87219caf8f3SSatish Balay PETSC_EXTERN void maticcfactorsymbolic_(Mat *fact, Mat *mat, IS *perm, const MatFactorInfo *info, int *ierr)
87322688b47SSatish Balay {
8744d03fd2bSBarry Smith   *ierr = MatICCFactorSymbolic(*fact, *mat, *perm, info);
87522688b47SSatish Balay }
87622688b47SSatish Balay 
87719caf8f3SSatish Balay PETSC_EXTERN void maticcfactor_(Mat *mat, IS *row, const MatFactorInfo *info, int *ierr)
87822688b47SSatish Balay {
8794d03fd2bSBarry Smith   *ierr = MatICCFactor(*mat, *row, info);
88022688b47SSatish Balay }
88122688b47SSatish Balay 
88219caf8f3SSatish Balay PETSC_EXTERN void matfactorinfoinitialize_(MatFactorInfo *info, int *ierr)
88322688b47SSatish Balay {
8844d03fd2bSBarry Smith   *ierr = MatFactorInfoInitialize(info);
88522688b47SSatish Balay }
88619caf8f3SSatish Balay PETSC_EXTERN void matzerorowslocal_(Mat *mat, PetscInt *numRows, PetscInt rows[], PetscScalar *diag, Vec *x, Vec *b, int *ierr)
887d27e6124SSatish Balay {
888d27e6124SSatish Balay   *ierr = MatZeroRowsLocal(*mat, *numRows, rows, *diag, *x, *b);
889d27e6124SSatish Balay }
89019caf8f3SSatish Balay PETSC_EXTERN void matzerorowslocal0_(Mat *mat, PetscInt *numRows, PetscInt rows[], PetscScalar *diag, Vec *x, Vec *b, int *ierr)
891d27e6124SSatish Balay {
892d27e6124SSatish Balay   matzerorowslocal_(mat, numRows, rows, diag, x, b, ierr);
893d27e6124SSatish Balay }
89419caf8f3SSatish Balay PETSC_EXTERN void matzerorowslocal1_(Mat *mat, PetscInt *numRows, PetscInt rows[], PetscScalar *diag, Vec *x, Vec *b, int *ierr)
895d27e6124SSatish Balay {
896d27e6124SSatish Balay   matzerorowslocal_(mat, numRows, rows, diag, x, b, ierr);
897d27e6124SSatish Balay }
89819caf8f3SSatish Balay PETSC_EXTERN void matviewfromoptions_(Mat *ao, PetscObject obj, char *type, PetscErrorCode *ierr, PETSC_FORTRAN_CHARLEN_T len)
899fe2efc57SMark {
900fe2efc57SMark   char *t;
901fe2efc57SMark 
902fe2efc57SMark   FIXCHAR(type, len, t);
903b14c0cbaSBlaise Bourdin   CHKFORTRANNULLOBJECT(obj);
9045975b3b6SBarry Smith   *ierr = MatViewFromOptions(*ao, obj, t);
9055975b3b6SBarry Smith   if (*ierr) return;
906fe2efc57SMark   FREECHAR(type, t);
907fe2efc57SMark }
908