xref: /petsc/src/mat/interface/ftn-custom/zmatrixf.c (revision 77433607a89e53856bb5781060753af114ae555b)
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
110*77433607SBarry Smith   #define matcreatefromoptions_        MATCREATEFROMOPTIONS
111f4e70085SSatish Balay #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE)
1124d03fd2bSBarry Smith   #define matsetvalues_                matsetvalues
1131006886cSSatish Balay   #define matsetvaluesnnnn_            matsetvaluesnnnn
1143b494cfeSSatish Balay   #define matsetvalues0_               matsetvalues0
1151b266c99SBarry Smith   #define matsetvaluesnn1_             matsetvaluesnn1
1164d03fd2bSBarry Smith   #define matsetvalues11_              matsetvalues11
1174d03fd2bSBarry Smith   #define matsetvaluesn1_              matsetvaluesn1
1184d03fd2bSBarry Smith   #define matsetvalues1n_              matsetvalues1n
1194d03fd2bSBarry Smith   #define matsetvalueslocal_           matsetvalueslocal
1203b494cfeSSatish Balay   #define matsetvalueslocal0_          matsetvalueslocal0
1214d03fd2bSBarry Smith   #define matsetvalueslocal11_         matsetvalueslocal11
1224d03fd2bSBarry Smith   #define matsetvalueslocal11nn_       matsetvalueslocal11nn
1234d03fd2bSBarry Smith   #define matsetvalueslocal111_        matsetvalueslocal111
1244d03fd2bSBarry Smith   #define matsetvalueslocal1n_         matsetvalueslocal1n
1254d03fd2bSBarry Smith   #define matsetvalueslocaln1_         matsetvalueslocaln1
1264d03fd2bSBarry Smith   #define matsetvaluesblocked_         matsetvaluesblocked
1273b494cfeSSatish Balay   #define matsetvaluesblocked0_        matsetvaluesblocked0
1280aee3464SBarry Smith   #define matsetvaluesblocked2_        matsetvaluesblocked2
1294d03fd2bSBarry Smith   #define matsetvaluesblocked11_       matsetvaluesblocked11
1304d03fd2bSBarry Smith   #define matsetvaluesblocked111_      matsetvaluesblocked111
1314d03fd2bSBarry Smith   #define matsetvaluesblocked1n_       matsetvaluesblocked1n
13224aa916eSSatish Balay   #define matsetvaluesblockedn1_       matsetvaluesblockedn1
1334d03fd2bSBarry Smith   #define matsetvaluesblockedlocal_    matsetvaluesblockedlocal
1343b494cfeSSatish Balay   #define matsetvaluesblockedlocal0_   matsetvaluesblockedlocal0
1354d03fd2bSBarry Smith   #define matsetvaluesblockedlocal11_  matsetvaluesblockedlocal11
1364d03fd2bSBarry Smith   #define matsetvaluesblockedlocal111_ matsetvaluesblockedlocal111
1374d03fd2bSBarry Smith   #define matsetvaluesblockedlocal1n_  matsetvaluesblockedlocal1n
13824aa916eSSatish Balay   #define matsetvaluesblockedlocaln1_  matsetvaluesblockedlocaln1
13987bcf4e0SBarry Smith   #define matgetrowmin_                matgetrowmin
14087bcf4e0SBarry Smith   #define matgetrowminabs_             matgetrowminabs
1415928be6bSBarry Smith   #define matgetrowmax_                matgetrowmax
1425928be6bSBarry Smith   #define matgetrowmaxabs_             matgetrowmaxabs
1435928be6bSBarry Smith   #define matdestroymatrices_          matdestroymatrices
144df750dc8SHong Zhang   #define matdestroysubmatrices_       matdestroysubmatrices
1455dffd610SBarry Smith   #define matgetfactor_                matgetfactor
14635bd34faSBarry Smith   #define matfactorgetsolverpackage_   matfactorgetsolverpackage
147fcc9d04bSBarry Smith   #define matcreatevecs_               matcreatevecs
148f4e70085SSatish Balay   #define matgetrowij_                 matgetrowij
149f4e70085SSatish Balay   #define matrestorerowij_             matrestorerowij
150f4e70085SSatish Balay   #define matgetrow_                   matgetrow
151f4e70085SSatish Balay   #define matrestorerow_               matrestorerow
152f4e70085SSatish Balay   #define matview_                     matview
153f7e310deSShri Abhyankar   #define matload_                     matload
1548c778c55SBarry Smith   #define matseqaijgetarray_           matseqaijgetarray
1558c778c55SBarry Smith   #define matseqaijrestorearray_       matseqaijrestorearray
1568c778c55SBarry Smith   #define matdensegetarray_            matdensegetarray
1578572280aSBarry Smith   #define matdensegetarrayread_        matdensegetarrayread
1588c778c55SBarry Smith   #define matdenserestorearray_        matdenserestorearray
1598572280aSBarry Smith   #define matdenserestorearrayread_    matdenserestorearrayread
160f4e70085SSatish Balay   #define matconvert_                  matconvert
1617dae84e0SHong Zhang   #define matcreatesubmatrices_        matcreatesubmatrices
16281ec7b92Smarius   #define matcreatesubmatricesmpi_     matcreatesubmatricesmpi
16317ede90eSSatish Balay   #define matzerorowscolumns_          matzerorowscolumns
16417ede90eSSatish Balay   #define matzerorowscolumnsis_        matzerorowscolumnsis
16517ede90eSSatish Balay   #define matzerorowsstencil_          matzerorowsstencil
166d25a37e1SJed Brown   #define matzerorowscolumnsstencil_   matzerorowscolumnsstencil
167f4e70085SSatish Balay   #define matzerorows_                 matzerorows
168f4e70085SSatish Balay   #define matzerorowsis_               matzerorowsis
169f4e70085SSatish Balay   #define matzerorowslocal_            matzerorowslocal
170f4e70085SSatish Balay   #define matzerorowslocalis_          matzerorowslocalis
17117ede90eSSatish Balay   #define matzerorowscolumnslocal_     matzerorowscolumnslocal
17217ede90eSSatish Balay   #define matzerorowscolumnslocalis_   matzerorowscolumnslocalis
1731eea217eSSatish Balay   #define matsetoptionsprefix_         matsetoptionsprefix
174812c3f48SMatthew Knepley   #define matnullspaceremove_          matnullspaceremove
1755ba43861SSatish Balay   #define matgetinfo_                  matgetinfo
17622688b47SSatish Balay   #define matlufactor_                 matlufactor
17722688b47SSatish Balay   #define matilufactor_                matilufactor
17822688b47SSatish Balay   #define matlufactorsymbolic_         matlufactorsymbolic
17922688b47SSatish Balay   #define matlufactornumeric_          matlufactornumeric
18022688b47SSatish Balay   #define matcholeskyfactor_           matcholeskyfactor
18122688b47SSatish Balay   #define matcholeskyfactorsymbolic_   matcholeskyfactorsymbolic
18222688b47SSatish Balay   #define matcholeskyfactornumeric_    matcholeskyfactornumeric
18322688b47SSatish Balay   #define matilufactorsymbolic_        matilufactorsymbolic
18422688b47SSatish Balay   #define maticcfactorsymbolic_        maticcfactorsymbolic
18522688b47SSatish Balay   #define maticcfactor_                maticcfactor
18622688b47SSatish Balay   #define matfactorinfoinitialize_     matfactorinfoinitialize
187b22b330cSBarry Smith   #define matnullspacesetfunction_     matnullspacesetfunction
1880905d9aaSJed Brown   #define matfindnonzerorows_          matfindnonzerorows
18938135fcbSMartin Diehl   #define matgetsize_                  matgetsize
1903be0408cSBarry Smith   #define matgetsize00_                matgetsize00
1913be0408cSBarry Smith   #define matgetsize10_                matgetsize10
1923be0408cSBarry Smith   #define matgetsize01_                matgetsize01
19338135fcbSMartin Diehl   #define matgetlocalsize_             matgetlocalsize
1943be0408cSBarry Smith   #define matgetlocalsize00_           matgetlocalsize00
1953be0408cSBarry Smith   #define matgetlocalsize10_           matgetlocalsize10
1963be0408cSBarry Smith   #define matgetlocalsize01_           matgetlocalsize01
197f0a86a08SBarry Smith   #define matgetvalues_                matgetvalues
198f0a86a08SBarry Smith   #define matgetvalues0_               matgetvalues0
199f0a86a08SBarry Smith   #define matgetvaluesnn1_             matgetvaluesnn1
200f0a86a08SBarry Smith   #define matgetvaluesnnnn_            matgetvaluesnnnn
201f0a86a08SBarry Smith   #define matgetvalues11_              matgetvalues11
202f0a86a08SBarry Smith   #define matgetvalues1n_              matgetvalues1n
203f0a86a08SBarry Smith   #define matgetvaluesn1_              matgetvaluesn1
204260663b8SBarry Smith   #define matsetnullspace_             matsetnullspace
205260663b8SBarry Smith   #define matgetownershiprange_        matgetownershiprange
20691f56e93SMartin Diehl   #define matgetownershiprange00_      matgetownershiprange00
20791f56e93SMartin Diehl   #define matgetownershiprange10_      matgetownershiprange10
20891f56e93SMartin Diehl   #define matgetownershiprange01_      matgetownershiprange01
20991f56e93SMartin Diehl   #define matgetownershiprange11_      matgetownershiprange11
210c08c7cb9SBarry Smith   #define matgetownershipis_           matgetownershipis
211afc39838SBarry Smith   #define matgetownershiprangecolumn_  matgetownershiprangecolumn
212fe2efc57SMark   #define matviewfromoptions_          matviewfromoptions
2131fb7b255SJunchao Zhang   #define matdestroy_                  matdestroy
214*77433607SBarry Smith   #define matcreatefromoptions_        matcreatefromoptions
215f4e70085SSatish Balay #endif
216f4e70085SSatish Balay 
217*77433607SBarry Smith PETSC_EXTERN void matcreatefromoptions_(MPI_Fint *comm, char *prefix, PetscInt *bs, PetscInt *m, PetscInt *n, PetscInt *M, PetscInt *N, Mat *A, int *ierr, PETSC_FORTRAN_CHARLEN_T len)
218*77433607SBarry Smith {
219*77433607SBarry Smith   char *fprefix;
220*77433607SBarry Smith   FIXCHAR(prefix, len, fprefix);
221*77433607SBarry Smith   *ierr = MatCreateFromOptions(MPI_Comm_f2c(*(comm)), fprefix, *bs, *m, *n, *M, *N, A);
222*77433607SBarry Smith   if (*ierr) return;
223*77433607SBarry Smith   FREECHAR(prefix, fprefix);
224*77433607SBarry Smith }
225*77433607SBarry Smith 
226f0a86a08SBarry Smith PETSC_EXTERN void matgetvalues_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], int *ierr)
227f0a86a08SBarry Smith {
228f0a86a08SBarry Smith   *ierr = MatGetValues(*mat, *m, idxm, *n, idxn, v);
229f0a86a08SBarry Smith }
230f0a86a08SBarry Smith 
231f0a86a08SBarry Smith PETSC_EXTERN void matgetvalues0_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], int *ierr)
232f0a86a08SBarry Smith {
233f0a86a08SBarry Smith   matgetvalues_(mat, m, idxm, n, idxn, v, ierr);
234f0a86a08SBarry Smith }
235f0a86a08SBarry Smith 
236f0a86a08SBarry Smith PETSC_EXTERN void matgetvaluesnn1_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], int *ierr)
237f0a86a08SBarry Smith {
238f0a86a08SBarry Smith   matgetvalues_(mat, m, idxm, n, idxn, v, ierr);
239f0a86a08SBarry Smith }
240f0a86a08SBarry Smith 
241f0a86a08SBarry Smith PETSC_EXTERN void matgetvaluesnnnn_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], int *ierr)
242f0a86a08SBarry Smith {
243f0a86a08SBarry Smith   matgetvalues_(mat, m, idxm, n, idxn, v, ierr);
244f0a86a08SBarry Smith }
245f0a86a08SBarry Smith 
246f0a86a08SBarry Smith PETSC_EXTERN void matgetvalues11_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], int *ierr)
247f0a86a08SBarry Smith {
248f0a86a08SBarry Smith   matgetvalues_(mat, m, idxm, n, idxn, v, ierr);
249f0a86a08SBarry Smith }
250f0a86a08SBarry Smith 
251f0a86a08SBarry Smith PETSC_EXTERN void matgetvalues1n_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], int *ierr)
252f0a86a08SBarry Smith {
253f0a86a08SBarry Smith   matgetvalues_(mat, m, idxm, n, idxn, v, ierr);
254f0a86a08SBarry Smith }
255f0a86a08SBarry Smith 
256f0a86a08SBarry Smith PETSC_EXTERN void matgetvaluesn1_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], int *ierr)
257f0a86a08SBarry Smith {
258f0a86a08SBarry Smith   matgetvalues_(mat, m, idxm, n, idxn, v, ierr);
259f0a86a08SBarry Smith }
260f0a86a08SBarry Smith 
26119caf8f3SSatish Balay PETSC_EXTERN void matgetownershiprange_(Mat *mat, PetscInt *m, PetscInt *n, int *ierr)
262260663b8SBarry Smith {
263260663b8SBarry Smith   CHKFORTRANNULLINTEGER(m);
264260663b8SBarry Smith   CHKFORTRANNULLINTEGER(n);
265260663b8SBarry Smith   *ierr = MatGetOwnershipRange(*mat, m, n);
266260663b8SBarry Smith }
267260663b8SBarry Smith 
26819caf8f3SSatish Balay PETSC_EXTERN void matgetownershiprange00_(Mat *mat, PetscInt *m, PetscInt *n, int *ierr)
2695dd307cdSMartin Diehl {
2705dd307cdSMartin Diehl   CHKFORTRANNULLINTEGER(m);
2715dd307cdSMartin Diehl   CHKFORTRANNULLINTEGER(n);
2725dd307cdSMartin Diehl   *ierr = MatGetOwnershipRange(*mat, m, n);
2735dd307cdSMartin Diehl }
2745dd307cdSMartin Diehl 
27519caf8f3SSatish Balay PETSC_EXTERN void matgetownershiprange10_(Mat *mat, PetscInt *m, PetscInt *n, int *ierr)
2765dd307cdSMartin Diehl {
2775dd307cdSMartin Diehl   CHKFORTRANNULLINTEGER(m);
2785dd307cdSMartin Diehl   CHKFORTRANNULLINTEGER(n);
2795dd307cdSMartin Diehl   *ierr = MatGetOwnershipRange(*mat, m, n);
2805dd307cdSMartin Diehl }
2815dd307cdSMartin Diehl 
28219caf8f3SSatish Balay PETSC_EXTERN void matgetownershiprange01_(Mat *mat, PetscInt *m, PetscInt *n, int *ierr)
2835dd307cdSMartin Diehl {
2845dd307cdSMartin Diehl   CHKFORTRANNULLINTEGER(m);
2855dd307cdSMartin Diehl   CHKFORTRANNULLINTEGER(n);
2865dd307cdSMartin Diehl   *ierr = MatGetOwnershipRange(*mat, m, n);
2875dd307cdSMartin Diehl }
2885dd307cdSMartin Diehl 
28919caf8f3SSatish Balay PETSC_EXTERN void matgetownershiprange11_(Mat *mat, PetscInt *m, PetscInt *n, int *ierr)
2905dd307cdSMartin Diehl {
2915dd307cdSMartin Diehl   CHKFORTRANNULLINTEGER(m);
2925dd307cdSMartin Diehl   CHKFORTRANNULLINTEGER(n);
2935dd307cdSMartin Diehl   *ierr = MatGetOwnershipRange(*mat, m, n);
2945dd307cdSMartin Diehl }
2955dd307cdSMartin Diehl 
29619caf8f3SSatish Balay PETSC_EXTERN void matgetownershipis_(Mat *mat, IS *m, IS *n, int *ierr)
297c08c7cb9SBarry Smith {
298c08c7cb9SBarry Smith   CHKFORTRANNULLOBJECT(m);
299c08c7cb9SBarry Smith   CHKFORTRANNULLOBJECT(n);
300c08c7cb9SBarry Smith   *ierr = MatGetOwnershipIS(*mat, m, n);
301c08c7cb9SBarry Smith }
302c08c7cb9SBarry Smith 
30319caf8f3SSatish Balay PETSC_EXTERN void matgetownershiprangecolumn_(Mat *mat, PetscInt *m, PetscInt *n, int *ierr)
304afc39838SBarry Smith {
305afc39838SBarry Smith   CHKFORTRANNULLINTEGER(m);
306afc39838SBarry Smith   CHKFORTRANNULLINTEGER(n);
307afc39838SBarry Smith   *ierr = MatGetOwnershipRangeColumn(*mat, m, n);
308afc39838SBarry Smith }
309afc39838SBarry Smith 
31019caf8f3SSatish Balay PETSC_EXTERN void matgetsize_(Mat *mat, PetscInt *m, PetscInt *n, int *ierr)
3113be0408cSBarry Smith {
3123be0408cSBarry Smith   CHKFORTRANNULLINTEGER(m);
3133be0408cSBarry Smith   CHKFORTRANNULLINTEGER(n);
3143be0408cSBarry Smith   *ierr = MatGetSize(*mat, m, n);
3153be0408cSBarry Smith }
3163be0408cSBarry Smith 
31719caf8f3SSatish Balay PETSC_EXTERN void matgetsize00_(Mat *mat, PetscInt *m, PetscInt *n, int *ierr)
3183be0408cSBarry Smith {
3193be0408cSBarry Smith   matgetsize_(mat, m, n, ierr);
3203be0408cSBarry Smith }
3213be0408cSBarry Smith 
32219caf8f3SSatish Balay PETSC_EXTERN void matgetsize10_(Mat *mat, PetscInt *m, PetscInt *n, int *ierr)
3233be0408cSBarry Smith {
3243be0408cSBarry Smith   matgetsize_(mat, m, n, ierr);
3253be0408cSBarry Smith }
3263be0408cSBarry Smith 
32719caf8f3SSatish Balay PETSC_EXTERN void matgetsize01_(Mat *mat, PetscInt *m, PetscInt *n, int *ierr)
3283be0408cSBarry Smith {
3293be0408cSBarry Smith   matgetsize_(mat, m, n, ierr);
3303be0408cSBarry Smith }
3313be0408cSBarry Smith 
33219caf8f3SSatish Balay PETSC_EXTERN void matgetlocalsize_(Mat *mat, PetscInt *m, PetscInt *n, int *ierr)
3333be0408cSBarry Smith {
3343be0408cSBarry Smith   CHKFORTRANNULLINTEGER(m);
3353be0408cSBarry Smith   CHKFORTRANNULLINTEGER(n);
3363be0408cSBarry Smith   *ierr = MatGetLocalSize(*mat, m, n);
3373be0408cSBarry Smith }
3383be0408cSBarry Smith 
33919caf8f3SSatish Balay PETSC_EXTERN void matgetlocalsize00_(Mat *mat, PetscInt *m, PetscInt *n, int *ierr)
3403be0408cSBarry Smith {
3413be0408cSBarry Smith   matgetlocalsize_(mat, m, n, ierr);
3423be0408cSBarry Smith }
3433be0408cSBarry Smith 
34419caf8f3SSatish Balay PETSC_EXTERN void matgetlocalsize10_(Mat *mat, PetscInt *m, PetscInt *n, int *ierr)
3453be0408cSBarry Smith {
3463be0408cSBarry Smith   matgetlocalsize_(mat, m, n, ierr);
3473be0408cSBarry Smith }
3483be0408cSBarry Smith 
34919caf8f3SSatish Balay PETSC_EXTERN void matgetlocalsize01_(Mat *mat, PetscInt *m, PetscInt *n, int *ierr)
3503be0408cSBarry Smith {
3513be0408cSBarry Smith   matgetlocalsize_(mat, m, n, ierr);
3523be0408cSBarry Smith }
3533be0408cSBarry Smith 
35470a7d78aSStefano Zampini PETSC_EXTERN void matsetvaluesblocked_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], InsertMode *addv, int *ierr)
35570a7d78aSStefano Zampini {
3564d03fd2bSBarry Smith   *ierr = MatSetValuesBlocked(*mat, *m, idxm, *n, idxn, v, *addv);
3574d03fd2bSBarry Smith }
3584d03fd2bSBarry Smith 
35970a7d78aSStefano 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))
36070a7d78aSStefano Zampini {
361cee688dbSBarry Smith   PetscScalar *fa;
3625975b3b6SBarry Smith   *ierr = F90Array2dAccess(y, MPIU_SCALAR, (void **)&fa PETSC_F90_2PTR_PARAM(ptrd));
3635975b3b6SBarry Smith   if (*ierr) return;
364cee688dbSBarry Smith   matsetvaluesblocked_(mat, m, idxm, n, idxn, fa, addv, ierr);
365cee688dbSBarry Smith }
366cee688dbSBarry Smith 
36770a7d78aSStefano Zampini PETSC_EXTERN void matsetvaluesblocked0_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], InsertMode *addv, int *ierr)
36870a7d78aSStefano Zampini {
3693b494cfeSSatish Balay   matsetvaluesblocked_(mat, m, idxm, n, idxn, v, addv, ierr);
3703b494cfeSSatish Balay }
3713b494cfeSSatish Balay 
37270a7d78aSStefano Zampini PETSC_EXTERN void matsetvaluesblocked11_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], InsertMode *addv, int *ierr)
37370a7d78aSStefano Zampini {
3744d03fd2bSBarry Smith   matsetvaluesblocked_(mat, m, idxm, n, idxn, v, addv, ierr);
3754d03fd2bSBarry Smith }
3764d03fd2bSBarry Smith 
37770a7d78aSStefano Zampini PETSC_EXTERN void matsetvaluesblocked111_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], InsertMode *addv, int *ierr)
37870a7d78aSStefano Zampini {
3794d03fd2bSBarry Smith   matsetvaluesblocked_(mat, m, idxm, n, idxn, v, addv, ierr);
3804d03fd2bSBarry Smith }
3814d03fd2bSBarry Smith 
38270a7d78aSStefano Zampini PETSC_EXTERN void matsetvaluesblocked1n_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], InsertMode *addv, int *ierr)
38370a7d78aSStefano Zampini {
3844d03fd2bSBarry Smith   matsetvaluesblocked_(mat, m, idxm, n, idxn, v, addv, ierr);
3854d03fd2bSBarry Smith }
3864d03fd2bSBarry Smith 
38770a7d78aSStefano Zampini PETSC_EXTERN void matsetvaluesblockedn1_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], InsertMode *addv, int *ierr)
38870a7d78aSStefano Zampini {
3894d03fd2bSBarry Smith   matsetvaluesblocked_(mat, m, idxm, n, idxn, v, addv, ierr);
3904d03fd2bSBarry Smith }
3914d03fd2bSBarry Smith 
39219caf8f3SSatish Balay PETSC_EXTERN void matsetvaluesblockedlocal_(Mat *mat, PetscInt *nrow, PetscInt irow[], PetscInt *ncol, PetscInt icol[], PetscScalar y[], InsertMode *addv, int *ierr)
3934d03fd2bSBarry Smith {
3944d03fd2bSBarry Smith   *ierr = MatSetValuesBlockedLocal(*mat, *nrow, irow, *ncol, icol, y, *addv);
3954d03fd2bSBarry Smith }
3964d03fd2bSBarry Smith 
39770a7d78aSStefano Zampini PETSC_EXTERN void matsetvaluesblockedlocal0_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], InsertMode *addv, int *ierr)
39870a7d78aSStefano Zampini {
3993b494cfeSSatish Balay   matsetvaluesblockedlocal_(mat, m, idxm, n, idxn, v, addv, ierr);
4003b494cfeSSatish Balay }
4013b494cfeSSatish Balay 
40270a7d78aSStefano Zampini PETSC_EXTERN void matsetvaluesblockedlocal11_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], InsertMode *addv, int *ierr)
40370a7d78aSStefano Zampini {
4044d03fd2bSBarry Smith   matsetvaluesblockedlocal_(mat, m, idxm, n, idxn, v, addv, ierr);
4054d03fd2bSBarry Smith }
4064d03fd2bSBarry Smith 
40770a7d78aSStefano Zampini PETSC_EXTERN void matsetvaluesblockedlocal111_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], InsertMode *addv, int *ierr)
40870a7d78aSStefano Zampini {
4094d03fd2bSBarry Smith   matsetvaluesblockedlocal_(mat, m, idxm, n, idxn, v, addv, ierr);
4104d03fd2bSBarry Smith }
4114d03fd2bSBarry Smith 
41270a7d78aSStefano Zampini PETSC_EXTERN void matsetvaluesblockedlocal1n_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], InsertMode *addv, int *ierr)
41370a7d78aSStefano Zampini {
4144d03fd2bSBarry Smith   matsetvaluesblockedlocal_(mat, m, idxm, n, idxn, v, addv, ierr);
4154d03fd2bSBarry Smith }
4164d03fd2bSBarry Smith 
41770a7d78aSStefano Zampini PETSC_EXTERN void matsetvaluesblockedlocaln1_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], InsertMode *addv, int *ierr)
41870a7d78aSStefano Zampini {
4194d03fd2bSBarry Smith   matsetvaluesblockedlocal_(mat, m, idxm, n, idxn, v, addv, ierr);
4204d03fd2bSBarry Smith }
4214d03fd2bSBarry Smith 
42219caf8f3SSatish Balay PETSC_EXTERN void matsetvalues_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], InsertMode *addv, int *ierr)
4234d03fd2bSBarry Smith {
4244d03fd2bSBarry Smith   *ierr = MatSetValues(*mat, *m, idxm, *n, idxn, v, *addv);
4254d03fd2bSBarry Smith }
4264d03fd2bSBarry Smith 
42719caf8f3SSatish Balay PETSC_EXTERN void matsetvaluesnnnn_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], InsertMode *addv, int *ierr)
4281b266c99SBarry Smith {
4291b266c99SBarry Smith   matsetvalues_(mat, m, idxm, n, idxn, v, addv, ierr);
4301b266c99SBarry Smith }
4311b266c99SBarry Smith 
43219caf8f3SSatish Balay PETSC_EXTERN void matsetvalues0_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], InsertMode *addv, int *ierr)
4333b494cfeSSatish Balay {
4343b494cfeSSatish Balay   matsetvalues_(mat, m, idxm, n, idxn, v, addv, ierr);
4353b494cfeSSatish Balay }
4363b494cfeSSatish Balay 
43719caf8f3SSatish Balay PETSC_EXTERN void matsetvaluesnn1_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], InsertMode *addv, int *ierr)
4381b266c99SBarry Smith {
4391b266c99SBarry Smith   matsetvalues_(mat, m, idxm, n, idxn, v, addv, ierr);
4401b266c99SBarry Smith }
4411b266c99SBarry Smith 
44219caf8f3SSatish Balay PETSC_EXTERN void matsetvalues11_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], InsertMode *addv, int *ierr)
4434d03fd2bSBarry Smith {
4444d03fd2bSBarry Smith   matsetvalues_(mat, m, idxm, n, idxn, v, addv, ierr);
4454d03fd2bSBarry Smith }
4464d03fd2bSBarry Smith 
44719caf8f3SSatish Balay PETSC_EXTERN void matsetvaluesn1_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], InsertMode *addv, int *ierr)
4484d03fd2bSBarry Smith {
4494d03fd2bSBarry Smith   matsetvalues_(mat, m, idxm, n, idxn, v, addv, ierr);
4504d03fd2bSBarry Smith }
4514d03fd2bSBarry Smith 
45219caf8f3SSatish Balay PETSC_EXTERN void matsetvalues1n_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], InsertMode *addv, int *ierr)
4534d03fd2bSBarry Smith {
4544d03fd2bSBarry Smith   matsetvalues_(mat, m, idxm, n, idxn, v, addv, ierr);
4554d03fd2bSBarry Smith }
4564d03fd2bSBarry Smith 
45719caf8f3SSatish Balay PETSC_EXTERN void matsetvalueslocal_(Mat *mat, PetscInt *nrow, PetscInt irow[], PetscInt *ncol, PetscInt icol[], PetscScalar y[], InsertMode *addv, int *ierr)
4584d03fd2bSBarry Smith {
4594d03fd2bSBarry Smith   *ierr = MatSetValuesLocal(*mat, *nrow, irow, *ncol, icol, y, *addv);
4604d03fd2bSBarry Smith }
4614d03fd2bSBarry Smith 
46219caf8f3SSatish Balay PETSC_EXTERN void matsetvalueslocal0_(Mat *mat, PetscInt *nrow, PetscInt irow[], PetscInt *ncol, PetscInt icol[], PetscScalar y[], InsertMode *addv, int *ierr)
4633b494cfeSSatish Balay {
4643b494cfeSSatish Balay   matsetvalueslocal_(mat, nrow, irow, ncol, icol, y, addv, ierr);
4653b494cfeSSatish Balay }
4663b494cfeSSatish Balay 
46719caf8f3SSatish Balay PETSC_EXTERN void matsetvalueslocal11_(Mat *mat, PetscInt *nrow, PetscInt irow[], PetscInt *ncol, PetscInt icol[], PetscScalar y[], InsertMode *addv, int *ierr)
4684d03fd2bSBarry Smith {
4694d03fd2bSBarry Smith   matsetvalueslocal_(mat, nrow, irow, ncol, icol, y, addv, ierr);
4704d03fd2bSBarry Smith }
4714d03fd2bSBarry Smith 
47219caf8f3SSatish Balay PETSC_EXTERN void matsetvalueslocal11nn_(Mat *mat, PetscInt *nrow, PetscInt irow[], PetscInt *ncol, PetscInt icol[], PetscScalar y[], InsertMode *addv, int *ierr)
4734d03fd2bSBarry Smith {
4744d03fd2bSBarry Smith   matsetvalueslocal_(mat, nrow, irow, ncol, icol, y, addv, ierr);
4754d03fd2bSBarry Smith }
4764d03fd2bSBarry Smith 
47719caf8f3SSatish Balay PETSC_EXTERN void matsetvalueslocal111_(Mat *mat, PetscInt *nrow, PetscInt irow[], PetscInt *ncol, PetscInt icol[], PetscScalar y[], InsertMode *addv, int *ierr)
4784d03fd2bSBarry Smith {
4794d03fd2bSBarry Smith   matsetvalueslocal_(mat, nrow, irow, ncol, icol, y, addv, ierr);
4804d03fd2bSBarry Smith }
4814d03fd2bSBarry Smith 
48219caf8f3SSatish Balay PETSC_EXTERN void matsetvalueslocal1n_(Mat *mat, PetscInt *nrow, PetscInt irow[], PetscInt *ncol, PetscInt icol[], PetscScalar y[], InsertMode *addv, int *ierr)
4834d03fd2bSBarry Smith {
4844d03fd2bSBarry Smith   matsetvalueslocal_(mat, nrow, irow, ncol, icol, y, addv, ierr);
4854d03fd2bSBarry Smith }
4864d03fd2bSBarry Smith 
48719caf8f3SSatish Balay PETSC_EXTERN void matsetvalueslocaln1_(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 matgetrowmin_(Mat *mat, Vec *v, PetscInt idx[], int *ierr)
49387bcf4e0SBarry Smith {
49487bcf4e0SBarry Smith   CHKFORTRANNULLINTEGER(idx);
49587bcf4e0SBarry Smith   *ierr = MatGetRowMin(*mat, *v, idx);
49687bcf4e0SBarry Smith }
4974d03fd2bSBarry Smith 
49819caf8f3SSatish Balay PETSC_EXTERN void matgetrowminabs_(Mat *mat, Vec *v, PetscInt idx[], int *ierr)
49987bcf4e0SBarry Smith {
50087bcf4e0SBarry Smith   CHKFORTRANNULLINTEGER(idx);
50187bcf4e0SBarry Smith   *ierr = MatGetRowMinAbs(*mat, *v, idx);
50287bcf4e0SBarry Smith }
50387bcf4e0SBarry Smith 
50419caf8f3SSatish Balay PETSC_EXTERN void matgetrowmax_(Mat *mat, Vec *v, PetscInt idx[], int *ierr)
5055928be6bSBarry Smith {
5065928be6bSBarry Smith   CHKFORTRANNULLINTEGER(idx);
5075928be6bSBarry Smith   *ierr = MatGetRowMax(*mat, *v, idx);
5085928be6bSBarry Smith }
5095928be6bSBarry Smith 
51019caf8f3SSatish Balay PETSC_EXTERN void matgetrowmaxabs_(Mat *mat, Vec *v, PetscInt idx[], int *ierr)
5115928be6bSBarry Smith {
5125928be6bSBarry Smith   CHKFORTRANNULLINTEGER(idx);
5135928be6bSBarry Smith   *ierr = MatGetRowMaxAbs(*mat, *v, idx);
5145928be6bSBarry Smith }
5155928be6bSBarry Smith 
516b22b330cSBarry Smith static PetscErrorCode ournullfunction(MatNullSpace sp, Vec x, void *ctx)
517b22b330cSBarry Smith {
5189566063dSJacob Faibussowitsch   PetscCallFortranVoidFunction((*(void (*)(MatNullSpace *, Vec *, void *, PetscErrorCode *))(((PetscObject)sp)->fortran_func_pointers[0]))(&sp, &x, ctx, &ierr));
5193ba16761SJacob Faibussowitsch   return PETSC_SUCCESS;
520b22b330cSBarry Smith }
521b22b330cSBarry Smith 
52219caf8f3SSatish Balay PETSC_EXTERN void matnullspacesetfunction_(MatNullSpace *sp, PetscErrorCode (*rem)(MatNullSpace, Vec, void *), void *ctx, PetscErrorCode *ierr)
523b22b330cSBarry Smith {
524b22b330cSBarry Smith   PetscObjectAllocateFortranPointers(*sp, 1);
525b22b330cSBarry Smith   ((PetscObject)*sp)->fortran_func_pointers[0] = (PetscVoidFunction)rem;
52626fbe8dcSKarl Rupp 
527b22b330cSBarry Smith   *ierr = MatNullSpaceSetFunction(*sp, ournullfunction, ctx);
528b22b330cSBarry Smith }
529b22b330cSBarry Smith 
53019caf8f3SSatish Balay PETSC_EXTERN void matcreatevecs_(Mat *mat, Vec *right, Vec *left, int *ierr)
5317c54600cSBarry Smith {
5327c54600cSBarry Smith   CHKFORTRANNULLOBJECT(right);
5337c54600cSBarry Smith   CHKFORTRANNULLOBJECT(left);
5342a7a6963SBarry Smith   *ierr = MatCreateVecs(*mat, right, left);
5357c54600cSBarry Smith }
5367c54600cSBarry Smith 
5375975b3b6SBarry 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)
538f4e70085SSatish Balay {
5391a83f524SJed Brown   const PetscInt *IA, *JA;
5405975b3b6SBarry Smith   *ierr = MatGetRowIJ(*B, *shift, *sym, *blockcompressed, n, &IA, &JA, done);
5415975b3b6SBarry Smith   if (*ierr) return;
5421a83f524SJed Brown   *iia = PetscIntAddressToFortran(ia, (PetscInt *)IA);
5431a83f524SJed Brown   *jja = PetscIntAddressToFortran(ja, (PetscInt *)JA);
544f4e70085SSatish Balay }
545f4e70085SSatish Balay 
5465975b3b6SBarry 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)
547f4e70085SSatish Balay {
5481a83f524SJed Brown   const PetscInt *IA = PetscIntAddressFromFortran(ia, *iia), *JA = PetscIntAddressFromFortran(ja, *jja);
5498f7157efSSatish Balay   *ierr = MatRestoreRowIJ(*B, *shift, *sym, *blockcompressed, n, &IA, &JA, done);
550f4e70085SSatish Balay }
551f4e70085SSatish Balay 
552f4e70085SSatish Balay /*
553f4e70085SSatish Balay    This is a poor way of storing the column and value pointers
554f4e70085SSatish Balay   generated by MatGetRow() to be returned with MatRestoreRow()
555f4e70085SSatish Balay   but there is not natural,good place else to store them. Hence
556f4e70085SSatish Balay   Fortran programmers can only have one outstanding MatGetRows()
557f4e70085SSatish Balay   at a time.
558f4e70085SSatish Balay */
5593ba16761SJacob Faibussowitsch static int                matgetrowactive = 0;
560f4e70085SSatish Balay static const PetscInt    *my_ocols        = 0;
561f4e70085SSatish Balay static const PetscScalar *my_ovals        = 0;
562f4e70085SSatish Balay 
56319caf8f3SSatish Balay PETSC_EXTERN void matgetrow_(Mat *mat, PetscInt *row, PetscInt *ncols, PetscInt *cols, PetscScalar *vals, PetscErrorCode *ierr)
564f4e70085SSatish Balay {
565f4e70085SSatish Balay   const PetscInt    **oocols = &my_ocols;
566f4e70085SSatish Balay   const PetscScalar **oovals = &my_ovals;
567f4e70085SSatish Balay 
568f4e70085SSatish Balay   if (matgetrowactive) {
5693ba16761SJacob Faibussowitsch     *ierr = PetscError(PETSC_COMM_SELF, __LINE__, "MatGetRow_Fortran", __FILE__, PETSC_ERR_ARG_WRONGSTATE, PETSC_ERROR_INITIAL, "Cannot have two MatGetRow() active simultaneously\n\
570f4e70085SSatish Balay                call MatRestoreRow() before calling MatGetRow() a second time");
5713ba16761SJacob Faibussowitsch     *ierr = PETSC_ERR_ARG_WRONGSTATE;
572f4e70085SSatish Balay     return;
573f4e70085SSatish Balay   }
574f4e70085SSatish Balay 
5753ba16761SJacob Faibussowitsch   CHKFORTRANNULLINTEGER(cols);
5763ba16761SJacob Faibussowitsch   if (!cols) oocols = NULL;
5773ba16761SJacob Faibussowitsch   CHKFORTRANNULLSCALAR(vals);
5783ba16761SJacob Faibussowitsch   if (!vals) oovals = NULL;
579f4e70085SSatish Balay 
580f4e70085SSatish Balay   *ierr = MatGetRow(*mat, *row, ncols, oocols, oovals);
581f4e70085SSatish Balay   if (*ierr) return;
582f4e70085SSatish Balay 
5833ba16761SJacob Faibussowitsch   if (oocols) {
5843ba16761SJacob Faibussowitsch     *ierr = PetscArraycpy(cols, my_ocols, *ncols);
5853ba16761SJacob Faibussowitsch     if (*ierr) return;
5863ba16761SJacob Faibussowitsch   }
5873ba16761SJacob Faibussowitsch   if (oovals) {
5883ba16761SJacob Faibussowitsch     *ierr = PetscArraycpy(vals, my_ovals, *ncols);
5893ba16761SJacob Faibussowitsch     if (*ierr) return;
5903ba16761SJacob Faibussowitsch   }
591f4e70085SSatish Balay   matgetrowactive = 1;
592f4e70085SSatish Balay }
593f4e70085SSatish Balay 
59419caf8f3SSatish Balay PETSC_EXTERN void matrestorerow_(Mat *mat, PetscInt *row, PetscInt *ncols, PetscInt *cols, PetscScalar *vals, PetscErrorCode *ierr)
595f4e70085SSatish Balay {
596f4e70085SSatish Balay   const PetscInt    **oocols = &my_ocols;
597f4e70085SSatish Balay   const PetscScalar **oovals = &my_ovals;
5983ba16761SJacob Faibussowitsch 
599f4e70085SSatish Balay   if (!matgetrowactive) {
6003ba16761SJacob Faibussowitsch     *ierr = PetscError(PETSC_COMM_SELF, __LINE__, "MatRestoreRow_Fortran", __FILE__, PETSC_ERR_ARG_WRONGSTATE, PETSC_ERROR_INITIAL, "Must call MatGetRow() first");
6013ba16761SJacob Faibussowitsch     *ierr = PETSC_ERR_ARG_WRONGSTATE;
602f4e70085SSatish Balay     return;
603f4e70085SSatish Balay   }
6043ba16761SJacob Faibussowitsch   CHKFORTRANNULLINTEGER(cols);
6053ba16761SJacob Faibussowitsch   if (!cols) oocols = NULL;
6063ba16761SJacob Faibussowitsch   CHKFORTRANNULLSCALAR(vals);
6073ba16761SJacob Faibussowitsch   if (!vals) oovals = NULL;
608f4e70085SSatish Balay 
609f4e70085SSatish Balay   *ierr           = MatRestoreRow(*mat, *row, ncols, oocols, oovals);
610f4e70085SSatish Balay   matgetrowactive = 0;
611f4e70085SSatish Balay }
612f4e70085SSatish Balay 
61319caf8f3SSatish Balay PETSC_EXTERN void matview_(Mat *mat, PetscViewer *vin, PetscErrorCode *ierr)
614f4e70085SSatish Balay {
615f4e70085SSatish Balay   PetscViewer v;
616f4e70085SSatish Balay   PetscPatchDefaultViewers_Fortran(vin, v);
617f4e70085SSatish Balay   *ierr = MatView(*mat, v);
618f4e70085SSatish Balay }
619f4e70085SSatish Balay 
62019caf8f3SSatish Balay PETSC_EXTERN void matload_(Mat *mat, PetscViewer *vin, PetscErrorCode *ierr)
621f7e310deSShri Abhyankar {
622f7e310deSShri Abhyankar   PetscViewer v;
623f7e310deSShri Abhyankar   PetscPatchDefaultViewers_Fortran(vin, v);
624112444f4SShri Abhyankar   *ierr = MatLoad(*mat, v);
625f7e310deSShri Abhyankar }
626f7e310deSShri Abhyankar 
62719caf8f3SSatish Balay PETSC_EXTERN void matseqaijgetarray_(Mat *mat, PetscScalar *fa, size_t *ia, PetscErrorCode *ierr)
628f4e70085SSatish Balay {
629f4e70085SSatish Balay   PetscScalar *mm;
630f4e70085SSatish Balay   PetscInt     m, n;
631f4e70085SSatish Balay 
6325975b3b6SBarry Smith   *ierr = MatSeqAIJGetArray(*mat, &mm);
6335975b3b6SBarry Smith   if (*ierr) return;
6345975b3b6SBarry Smith   *ierr = MatGetSize(*mat, &m, &n);
6355975b3b6SBarry Smith   if (*ierr) return;
6365975b3b6SBarry Smith   *ierr = PetscScalarAddressToFortran((PetscObject)*mat, 1, fa, mm, m * n, ia);
6375975b3b6SBarry Smith   if (*ierr) return;
638f4e70085SSatish Balay }
639f4e70085SSatish Balay 
64019caf8f3SSatish Balay PETSC_EXTERN void matseqaijrestorearray_(Mat *mat, PetscScalar *fa, size_t *ia, PetscErrorCode *ierr)
641f4e70085SSatish Balay {
642f4e70085SSatish Balay   PetscScalar *lx;
643f4e70085SSatish Balay   PetscInt     m, n;
644f4e70085SSatish Balay 
6455975b3b6SBarry Smith   *ierr = MatGetSize(*mat, &m, &n);
6465975b3b6SBarry Smith   if (*ierr) return;
6475975b3b6SBarry Smith   *ierr = PetscScalarAddressFromFortran((PetscObject)*mat, fa, *ia, m * n, &lx);
6485975b3b6SBarry Smith   if (*ierr) return;
6495975b3b6SBarry Smith   *ierr = MatSeqAIJRestoreArray(*mat, &lx);
6505975b3b6SBarry Smith   if (*ierr) return;
651f4e70085SSatish Balay }
652f4e70085SSatish Balay 
65319caf8f3SSatish Balay PETSC_EXTERN void matdensegetarray_(Mat *mat, PetscScalar *fa, size_t *ia, PetscErrorCode *ierr)
65473a71a0fSBarry Smith {
65573a71a0fSBarry Smith   PetscScalar *mm;
65673a71a0fSBarry Smith   PetscInt     m, n;
65773a71a0fSBarry Smith 
6585975b3b6SBarry Smith   *ierr = MatDenseGetArray(*mat, &mm);
6595975b3b6SBarry Smith   if (*ierr) return;
6605975b3b6SBarry Smith   *ierr = MatGetSize(*mat, &m, &n);
6615975b3b6SBarry Smith   if (*ierr) return;
6625975b3b6SBarry Smith   *ierr = PetscScalarAddressToFortran((PetscObject)*mat, 1, fa, mm, m * n, ia);
6635975b3b6SBarry Smith   if (*ierr) return;
66473a71a0fSBarry Smith }
66573a71a0fSBarry Smith 
66619caf8f3SSatish Balay PETSC_EXTERN void matdenserestorearray_(Mat *mat, PetscScalar *fa, size_t *ia, PetscErrorCode *ierr)
66773a71a0fSBarry Smith {
66873a71a0fSBarry Smith   PetscScalar *lx;
66973a71a0fSBarry Smith   PetscInt     m, n;
67073a71a0fSBarry Smith 
6715975b3b6SBarry Smith   *ierr = MatGetSize(*mat, &m, &n);
6725975b3b6SBarry Smith   if (*ierr) return;
6735975b3b6SBarry Smith   *ierr = PetscScalarAddressFromFortran((PetscObject)*mat, fa, *ia, m * n, &lx);
6745975b3b6SBarry Smith   if (*ierr) return;
6755975b3b6SBarry Smith   *ierr = MatDenseRestoreArray(*mat, &lx);
6765975b3b6SBarry Smith   if (*ierr) return;
67773a71a0fSBarry Smith }
67873a71a0fSBarry Smith 
67919caf8f3SSatish Balay PETSC_EXTERN void matdensegetarrayread_(Mat *mat, PetscScalar *fa, size_t *ia, PetscErrorCode *ierr)
6808572280aSBarry Smith {
6817067c7f7SBarry Smith   const PetscScalar *mm;
6828572280aSBarry Smith   PetscInt           m, n;
6838572280aSBarry Smith 
6845975b3b6SBarry Smith   *ierr = MatDenseGetArrayRead(*mat, &mm);
6855975b3b6SBarry Smith   if (*ierr) return;
6865975b3b6SBarry Smith   *ierr = MatGetSize(*mat, &m, &n);
6875975b3b6SBarry Smith   if (*ierr) return;
6885975b3b6SBarry Smith   *ierr = PetscScalarAddressToFortran((PetscObject)*mat, 1, fa, (PetscScalar *)mm, m * n, ia);
6895975b3b6SBarry Smith   if (*ierr) return;
6908572280aSBarry Smith }
6918572280aSBarry Smith 
69219caf8f3SSatish Balay PETSC_EXTERN void matdenserestorearrayread_(Mat *mat, PetscScalar *fa, size_t *ia, PetscErrorCode *ierr)
6938572280aSBarry Smith {
6947067c7f7SBarry Smith   const PetscScalar *lx;
6958572280aSBarry Smith   PetscInt           m, n;
6968572280aSBarry Smith 
6975975b3b6SBarry Smith   *ierr = MatGetSize(*mat, &m, &n);
6985975b3b6SBarry Smith   if (*ierr) return;
6995975b3b6SBarry Smith   *ierr = PetscScalarAddressFromFortran((PetscObject)*mat, fa, *ia, m * n, (PetscScalar **)&lx);
7005975b3b6SBarry Smith   if (*ierr) return;
7015975b3b6SBarry Smith   *ierr = MatDenseRestoreArrayRead(*mat, &lx);
7025975b3b6SBarry Smith   if (*ierr) return;
7038572280aSBarry Smith }
7048572280aSBarry Smith 
70519caf8f3SSatish Balay PETSC_EXTERN void matfactorgetsolverpackage_(Mat *mat, char *name, PetscErrorCode *ierr, PETSC_FORTRAN_CHARLEN_T len)
70635bd34faSBarry Smith {
70735bd34faSBarry Smith   const char *tname;
70835bd34faSBarry Smith 
7095975b3b6SBarry Smith   *ierr = MatFactorGetSolverType(*mat, &tname);
7105975b3b6SBarry Smith   if (*ierr) return;
71135bd34faSBarry Smith   if (name != PETSC_NULL_CHARACTER_Fortran) {
7125975b3b6SBarry Smith     *ierr = PetscStrncpy(name, tname, len);
7135975b3b6SBarry Smith     if (*ierr) return;
71435bd34faSBarry Smith   }
71535bd34faSBarry Smith   FIXRETURNCHAR(PETSC_TRUE, name, len);
71635bd34faSBarry Smith }
71735bd34faSBarry Smith 
71819caf8f3SSatish Balay PETSC_EXTERN void matgetfactor_(Mat *mat, char *outtype, MatFactorType *ftype, Mat *M, PetscErrorCode *ierr, PETSC_FORTRAN_CHARLEN_T len)
7195dffd610SBarry Smith {
7205dffd610SBarry Smith   char *t;
7215dffd610SBarry Smith   FIXCHAR(outtype, len, t);
7225975b3b6SBarry Smith   *ierr = MatGetFactor(*mat, t, *ftype, M);
7235975b3b6SBarry Smith   if (*ierr) return;
7245dffd610SBarry Smith   FREECHAR(outtype, t);
7255dffd610SBarry Smith }
7265dffd610SBarry Smith 
72719caf8f3SSatish Balay PETSC_EXTERN void matconvert_(Mat *mat, char *outtype, MatReuse *reuse, Mat *M, PetscErrorCode *ierr, PETSC_FORTRAN_CHARLEN_T len)
728f4e70085SSatish Balay {
729f4e70085SSatish Balay   char *t;
730f4e70085SSatish Balay   FIXCHAR(outtype, len, t);
7315975b3b6SBarry Smith   *ierr = MatConvert(*mat, t, *reuse, M);
7325975b3b6SBarry Smith   if (*ierr) return;
733f4e70085SSatish Balay   FREECHAR(outtype, t);
734f4e70085SSatish Balay }
735f4e70085SSatish Balay 
736f4e70085SSatish Balay /*
7377dae84e0SHong Zhang     MatCreateSubmatrices() is slightly different from C since the
738f4e70085SSatish Balay     Fortran provides the array to hold the submatrix objects,while in C that
7397dae84e0SHong Zhang     array is allocated by the MatCreateSubmatrices()
740f4e70085SSatish Balay */
74119caf8f3SSatish Balay PETSC_EXTERN void matcreatesubmatrices_(Mat *mat, PetscInt *n, IS *isrow, IS *iscol, MatReuse *scall, Mat *smat, PetscErrorCode *ierr)
742f4e70085SSatish Balay {
743f4e70085SSatish Balay   Mat     *lsmat;
744f4e70085SSatish Balay   PetscInt i;
745f4e70085SSatish Balay 
746f4e70085SSatish Balay   if (*scall == MAT_INITIAL_MATRIX) {
7477dae84e0SHong Zhang     *ierr = MatCreateSubMatrices(*mat, *n, isrow, iscol, *scall, &lsmat);
74869d47153SPierre Jolivet     for (i = 0; i <= *n; i++) { /* lsmat[*n] might be a dummy matrix for saving data structure */
749f4e70085SSatish Balay       smat[i] = lsmat[i];
750f4e70085SSatish Balay     }
751f4e70085SSatish Balay     *ierr = PetscFree(lsmat);
752f4e70085SSatish Balay   } else {
7537dae84e0SHong Zhang     *ierr = MatCreateSubMatrices(*mat, *n, isrow, iscol, *scall, &smat);
754f4e70085SSatish Balay   }
755f4e70085SSatish Balay }
756f4e70085SSatish Balay 
7577d6bfa3bSBarry Smith /*
75881ec7b92Smarius     MatCreateSubmatrices() is slightly different from C since the
75981ec7b92Smarius     Fortran provides the array to hold the submatrix objects,while in C that
76081ec7b92Smarius     array is allocated by the MatCreateSubmatrices()
76181ec7b92Smarius */
76219caf8f3SSatish Balay PETSC_EXTERN void matcreatesubmatricesmpi_(Mat *mat, PetscInt *n, IS *isrow, IS *iscol, MatReuse *scall, Mat *smat, PetscErrorCode *ierr)
76381ec7b92Smarius {
76481ec7b92Smarius   Mat     *lsmat;
76581ec7b92Smarius   PetscInt i;
76681ec7b92Smarius 
76781ec7b92Smarius   if (*scall == MAT_INITIAL_MATRIX) {
76881ec7b92Smarius     *ierr = MatCreateSubMatricesMPI(*mat, *n, isrow, iscol, *scall, &lsmat);
76969d47153SPierre Jolivet     for (i = 0; i <= *n; i++) { /* lsmat[*n] might be a dummy matrix for saving data structure */
77081ec7b92Smarius       smat[i] = lsmat[i];
77181ec7b92Smarius     }
77281ec7b92Smarius     *ierr = PetscFree(lsmat);
77381ec7b92Smarius   } else {
77481ec7b92Smarius     *ierr = MatCreateSubMatricesMPI(*mat, *n, isrow, iscol, *scall, &smat);
77581ec7b92Smarius   }
77681ec7b92Smarius }
77781ec7b92Smarius 
77881ec7b92Smarius /*
7797d6bfa3bSBarry Smith     MatDestroyMatrices() is slightly different from C since the
780de7ef04eSHong Zhang     Fortran does not free the array of matrix objects, while in C that
781de7ef04eSHong Zhang     the array is freed
782de7ef04eSHong Zhang */
78319caf8f3SSatish Balay PETSC_EXTERN void matdestroymatrices_(PetscInt *n, Mat *smat, PetscErrorCode *ierr)
784de7ef04eSHong Zhang {
785de7ef04eSHong Zhang   PetscInt i;
786de7ef04eSHong Zhang 
787de7ef04eSHong Zhang   for (i = 0; i < *n; i++) {
7881fb7b255SJunchao Zhang     PETSC_FORTRAN_OBJECT_F_DESTROYED_TO_C_NULL(&smat[i]);
7895975b3b6SBarry Smith     *ierr = MatDestroy(&smat[i]);
7905975b3b6SBarry Smith     if (*ierr) return;
7911fb7b255SJunchao Zhang     PETSC_FORTRAN_OBJECT_C_NULL_TO_F_DESTROYED(&smat[i]);
792de7ef04eSHong Zhang   }
793de7ef04eSHong Zhang }
794de7ef04eSHong Zhang 
795de7ef04eSHong Zhang /*
796de7ef04eSHong Zhang     MatDestroySubMatrices() is slightly different from C since the
7977d6bfa3bSBarry Smith     Fortran provides the array to hold the submatrix objects, while in C that
7987dae84e0SHong Zhang     array is allocated by the MatCreateSubmatrices()
7997d6bfa3bSBarry Smith */
80019caf8f3SSatish Balay PETSC_EXTERN void matdestroysubmatrices_(PetscInt *n, Mat *smat, PetscErrorCode *ierr)
8017d6bfa3bSBarry Smith {
802de7ef04eSHong Zhang   Mat     *lsmat;
8037d6bfa3bSBarry Smith   PetscInt i;
8047d6bfa3bSBarry Smith 
805de7ef04eSHong Zhang   *ierr = PetscMalloc1(*n + 1, &lsmat);
806de7ef04eSHong Zhang   for (i = 0; i <= *n; i++) {
8071fb7b255SJunchao Zhang     PETSC_FORTRAN_OBJECT_F_DESTROYED_TO_C_NULL(&smat[i]);
808de7ef04eSHong Zhang     lsmat[i] = smat[i];
8097d6bfa3bSBarry Smith   }
810de7ef04eSHong Zhang   *ierr = MatDestroySubMatrices(*n, &lsmat);
8115975b3b6SBarry Smith   for (i = 0; i <= *n; i++) { PETSC_FORTRAN_OBJECT_C_NULL_TO_F_DESTROYED(&smat[i]); }
8121fb7b255SJunchao Zhang }
8131fb7b255SJunchao Zhang 
8141fb7b255SJunchao Zhang PETSC_EXTERN void matdestroy_(Mat *x, int *ierr)
8151fb7b255SJunchao Zhang {
8161fb7b255SJunchao Zhang   PETSC_FORTRAN_OBJECT_F_DESTROYED_TO_C_NULL(x);
8175975b3b6SBarry Smith   *ierr = MatDestroy(x);
8185975b3b6SBarry Smith   if (*ierr) return;
8191fb7b255SJunchao Zhang   PETSC_FORTRAN_OBJECT_C_NULL_TO_F_DESTROYED(x);
820df750dc8SHong Zhang }
821df750dc8SHong Zhang 
82219caf8f3SSatish Balay PETSC_EXTERN void matsetoptionsprefix_(Mat *mat, char *prefix, PetscErrorCode *ierr, PETSC_FORTRAN_CHARLEN_T len)
8231eea217eSSatish Balay {
8241eea217eSSatish Balay   char *t;
8251eea217eSSatish Balay 
8261eea217eSSatish Balay   FIXCHAR(prefix, len, t);
8275975b3b6SBarry Smith   *ierr = MatSetOptionsPrefix(*mat, t);
8285975b3b6SBarry Smith   if (*ierr) return;
8291eea217eSSatish Balay   FREECHAR(prefix, t);
8301eea217eSSatish Balay }
8311eea217eSSatish Balay 
83219caf8f3SSatish Balay PETSC_EXTERN void matnullspaceremove_(MatNullSpace *sp, Vec *vec, PetscErrorCode *ierr)
833812c3f48SMatthew Knepley {
834a8f51744SPierre Jolivet   CHKFORTRANNULLOBJECT(*sp);
835d0195637SJed Brown   *ierr = MatNullSpaceRemove(*sp, *vec);
836812c3f48SMatthew Knepley }
8371eea217eSSatish Balay 
83819caf8f3SSatish Balay PETSC_EXTERN void matgetinfo_(Mat *mat, MatInfoType *flag, MatInfo *info, int *ierr)
8395ba43861SSatish Balay {
8404d03fd2bSBarry Smith   *ierr = MatGetInfo(*mat, *flag, info);
8415ba43861SSatish Balay }
8425ba43861SSatish Balay 
84319caf8f3SSatish Balay PETSC_EXTERN void matlufactor_(Mat *mat, IS *row, IS *col, const MatFactorInfo *info, int *ierr)
84422688b47SSatish Balay {
8454d03fd2bSBarry Smith   *ierr = MatLUFactor(*mat, *row, *col, info);
84622688b47SSatish Balay }
84722688b47SSatish Balay 
84819caf8f3SSatish Balay PETSC_EXTERN void matilufactor_(Mat *mat, IS *row, IS *col, const MatFactorInfo *info, int *ierr)
84922688b47SSatish Balay {
8504d03fd2bSBarry Smith   *ierr = MatILUFactor(*mat, *row, *col, info);
85122688b47SSatish Balay }
85222688b47SSatish Balay 
85319caf8f3SSatish Balay PETSC_EXTERN void matlufactorsymbolic_(Mat *fact, Mat *mat, IS *row, IS *col, const MatFactorInfo *info, int *ierr)
85422688b47SSatish Balay {
8554d03fd2bSBarry Smith   *ierr = MatLUFactorSymbolic(*fact, *mat, *row, *col, info);
85622688b47SSatish Balay }
85722688b47SSatish Balay 
85819caf8f3SSatish Balay PETSC_EXTERN void matlufactornumeric_(Mat *fact, Mat *mat, const MatFactorInfo *info, int *ierr)
85922688b47SSatish Balay {
8604d03fd2bSBarry Smith   *ierr = MatLUFactorNumeric(*fact, *mat, info);
86122688b47SSatish Balay }
86222688b47SSatish Balay 
86319caf8f3SSatish Balay PETSC_EXTERN void matcholeskyfactor_(Mat *mat, IS *perm, const MatFactorInfo *info, int *ierr)
86422688b47SSatish Balay {
8654d03fd2bSBarry Smith   *ierr = MatCholeskyFactor(*mat, *perm, info);
86622688b47SSatish Balay }
86722688b47SSatish Balay 
86819caf8f3SSatish Balay PETSC_EXTERN void matcholeskyfactorsymbolic_(Mat *fact, Mat *mat, IS *perm, const MatFactorInfo *info, int *ierr)
86922688b47SSatish Balay {
8704d03fd2bSBarry Smith   *ierr = MatCholeskyFactorSymbolic(*fact, *mat, *perm, info);
87122688b47SSatish Balay }
87222688b47SSatish Balay 
87319caf8f3SSatish Balay PETSC_EXTERN void matcholeskyfactornumeric_(Mat *fact, Mat *mat, const MatFactorInfo *info, int *ierr)
87422688b47SSatish Balay {
8754d03fd2bSBarry Smith   *ierr = MatCholeskyFactorNumeric(*fact, *mat, info);
87622688b47SSatish Balay }
87722688b47SSatish Balay 
87819caf8f3SSatish Balay PETSC_EXTERN void matilufactorsymbolic_(Mat *fact, Mat *mat, IS *row, IS *col, const MatFactorInfo *info, int *ierr)
87922688b47SSatish Balay {
8804d03fd2bSBarry Smith   *ierr = MatILUFactorSymbolic(*fact, *mat, *row, *col, info);
88122688b47SSatish Balay }
88222688b47SSatish Balay 
88319caf8f3SSatish Balay PETSC_EXTERN void maticcfactorsymbolic_(Mat *fact, Mat *mat, IS *perm, const MatFactorInfo *info, int *ierr)
88422688b47SSatish Balay {
8854d03fd2bSBarry Smith   *ierr = MatICCFactorSymbolic(*fact, *mat, *perm, info);
88622688b47SSatish Balay }
88722688b47SSatish Balay 
88819caf8f3SSatish Balay PETSC_EXTERN void maticcfactor_(Mat *mat, IS *row, const MatFactorInfo *info, int *ierr)
88922688b47SSatish Balay {
8904d03fd2bSBarry Smith   *ierr = MatICCFactor(*mat, *row, info);
89122688b47SSatish Balay }
89222688b47SSatish Balay 
89319caf8f3SSatish Balay PETSC_EXTERN void matfactorinfoinitialize_(MatFactorInfo *info, int *ierr)
89422688b47SSatish Balay {
8954d03fd2bSBarry Smith   *ierr = MatFactorInfoInitialize(info);
89622688b47SSatish Balay }
89719caf8f3SSatish Balay PETSC_EXTERN void matzerorowslocal_(Mat *mat, PetscInt *numRows, PetscInt rows[], PetscScalar *diag, Vec *x, Vec *b, int *ierr)
898d27e6124SSatish Balay {
899d27e6124SSatish Balay   *ierr = MatZeroRowsLocal(*mat, *numRows, rows, *diag, *x, *b);
900d27e6124SSatish Balay }
90119caf8f3SSatish Balay PETSC_EXTERN void matzerorowslocal0_(Mat *mat, PetscInt *numRows, PetscInt rows[], PetscScalar *diag, Vec *x, Vec *b, int *ierr)
902d27e6124SSatish Balay {
903d27e6124SSatish Balay   matzerorowslocal_(mat, numRows, rows, diag, x, b, ierr);
904d27e6124SSatish Balay }
90519caf8f3SSatish Balay PETSC_EXTERN void matzerorowslocal1_(Mat *mat, PetscInt *numRows, PetscInt rows[], PetscScalar *diag, Vec *x, Vec *b, int *ierr)
906d27e6124SSatish Balay {
907d27e6124SSatish Balay   matzerorowslocal_(mat, numRows, rows, diag, x, b, ierr);
908d27e6124SSatish Balay }
90919caf8f3SSatish Balay PETSC_EXTERN void matviewfromoptions_(Mat *ao, PetscObject obj, char *type, PetscErrorCode *ierr, PETSC_FORTRAN_CHARLEN_T len)
910fe2efc57SMark {
911fe2efc57SMark   char *t;
912fe2efc57SMark 
913fe2efc57SMark   FIXCHAR(type, len, t);
914b14c0cbaSBlaise Bourdin   CHKFORTRANNULLOBJECT(obj);
9155975b3b6SBarry Smith   *ierr = MatViewFromOptions(*ao, obj, t);
9165975b3b6SBarry Smith   if (*ierr) return;
917fe2efc57SMark   FREECHAR(type, t);
918fe2efc57SMark }
919