xref: /petsc/src/mat/interface/ftn-custom/zmatrixf.c (revision 3ba1676111f5c958fe6c2729b46ca4d523958bb3)
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;
3510aee3464SBarry Smith   *ierr = F90Array2dAccess(y,MPIU_SCALAR,(void**)&fa PETSC_F90_2PTR_PARAM(ptrd));if (*ierr) return;
352cee688dbSBarry Smith   matsetvaluesblocked_(mat,m,idxm,n,idxn,fa,addv,ierr);
353cee688dbSBarry Smith }
354cee688dbSBarry Smith 
35570a7d78aSStefano Zampini PETSC_EXTERN void  matsetvaluesblocked0_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr)
35670a7d78aSStefano Zampini {
3573b494cfeSSatish Balay   matsetvaluesblocked_(mat,m,idxm,n,idxn,v,addv,ierr);
3583b494cfeSSatish Balay }
3593b494cfeSSatish Balay 
36070a7d78aSStefano Zampini PETSC_EXTERN void  matsetvaluesblocked11_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr)
36170a7d78aSStefano Zampini {
3624d03fd2bSBarry Smith   matsetvaluesblocked_(mat,m,idxm,n,idxn,v,addv,ierr);
3634d03fd2bSBarry Smith }
3644d03fd2bSBarry Smith 
36570a7d78aSStefano Zampini PETSC_EXTERN void  matsetvaluesblocked111_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr)
36670a7d78aSStefano Zampini {
3674d03fd2bSBarry Smith   matsetvaluesblocked_(mat,m,idxm,n,idxn,v,addv,ierr);
3684d03fd2bSBarry Smith }
3694d03fd2bSBarry Smith 
37070a7d78aSStefano Zampini PETSC_EXTERN void  matsetvaluesblocked1n_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr)
37170a7d78aSStefano Zampini {
3724d03fd2bSBarry Smith   matsetvaluesblocked_(mat,m,idxm,n,idxn,v,addv,ierr);
3734d03fd2bSBarry Smith }
3744d03fd2bSBarry Smith 
37570a7d78aSStefano Zampini PETSC_EXTERN void  matsetvaluesblockedn1_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr)
37670a7d78aSStefano Zampini {
3774d03fd2bSBarry Smith   matsetvaluesblocked_(mat,m,idxm,n,idxn,v,addv,ierr);
3784d03fd2bSBarry Smith }
3794d03fd2bSBarry Smith 
38019caf8f3SSatish Balay PETSC_EXTERN void  matsetvaluesblockedlocal_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr)
3814d03fd2bSBarry Smith {
3824d03fd2bSBarry Smith   *ierr = MatSetValuesBlockedLocal(*mat,*nrow,irow,*ncol,icol,y,*addv);
3834d03fd2bSBarry Smith }
3844d03fd2bSBarry Smith 
38570a7d78aSStefano Zampini PETSC_EXTERN void  matsetvaluesblockedlocal0_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr)
38670a7d78aSStefano Zampini {
3873b494cfeSSatish Balay   matsetvaluesblockedlocal_(mat,m,idxm,n,idxn,v,addv,ierr);
3883b494cfeSSatish Balay }
3893b494cfeSSatish Balay 
39070a7d78aSStefano Zampini PETSC_EXTERN void  matsetvaluesblockedlocal11_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr)
39170a7d78aSStefano Zampini {
3924d03fd2bSBarry Smith   matsetvaluesblockedlocal_(mat,m,idxm,n,idxn,v,addv,ierr);
3934d03fd2bSBarry Smith }
3944d03fd2bSBarry Smith 
39570a7d78aSStefano Zampini PETSC_EXTERN void  matsetvaluesblockedlocal111_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr)
39670a7d78aSStefano Zampini {
3974d03fd2bSBarry Smith   matsetvaluesblockedlocal_(mat,m,idxm,n,idxn,v,addv,ierr);
3984d03fd2bSBarry Smith }
3994d03fd2bSBarry Smith 
40070a7d78aSStefano Zampini PETSC_EXTERN void  matsetvaluesblockedlocal1n_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr)
40170a7d78aSStefano Zampini {
4024d03fd2bSBarry Smith   matsetvaluesblockedlocal_(mat,m,idxm,n,idxn,v,addv,ierr);
4034d03fd2bSBarry Smith }
4044d03fd2bSBarry Smith 
40570a7d78aSStefano Zampini PETSC_EXTERN void  matsetvaluesblockedlocaln1_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr)
40670a7d78aSStefano Zampini {
4074d03fd2bSBarry Smith   matsetvaluesblockedlocal_(mat,m,idxm,n,idxn,v,addv,ierr);
4084d03fd2bSBarry Smith }
4094d03fd2bSBarry Smith 
41019caf8f3SSatish Balay PETSC_EXTERN void  matsetvalues_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr)
4114d03fd2bSBarry Smith {
4124d03fd2bSBarry Smith   *ierr = MatSetValues(*mat,*m,idxm,*n,idxn,v,*addv);
4134d03fd2bSBarry Smith }
4144d03fd2bSBarry Smith 
41519caf8f3SSatish Balay PETSC_EXTERN void  matsetvaluesnnnn_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr)
4161b266c99SBarry Smith {
4171b266c99SBarry Smith   matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr);
4181b266c99SBarry Smith }
4191b266c99SBarry Smith 
42019caf8f3SSatish Balay PETSC_EXTERN void  matsetvalues0_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr)
4213b494cfeSSatish Balay {
4223b494cfeSSatish Balay   matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr);
4233b494cfeSSatish Balay }
4243b494cfeSSatish Balay 
42519caf8f3SSatish Balay PETSC_EXTERN void  matsetvaluesnn1_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr)
4261b266c99SBarry Smith {
4271b266c99SBarry Smith   matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr);
4281b266c99SBarry Smith }
4291b266c99SBarry Smith 
43019caf8f3SSatish Balay PETSC_EXTERN void  matsetvalues11_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr)
4314d03fd2bSBarry Smith {
4324d03fd2bSBarry Smith   matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr);
4334d03fd2bSBarry Smith }
4344d03fd2bSBarry Smith 
43519caf8f3SSatish Balay PETSC_EXTERN void  matsetvaluesn1_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr)
4364d03fd2bSBarry Smith {
4374d03fd2bSBarry Smith   matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr);
4384d03fd2bSBarry Smith }
4394d03fd2bSBarry Smith 
44019caf8f3SSatish Balay PETSC_EXTERN void  matsetvalues1n_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr)
4414d03fd2bSBarry Smith {
4424d03fd2bSBarry Smith   matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr);
4434d03fd2bSBarry Smith }
4444d03fd2bSBarry Smith 
44519caf8f3SSatish Balay PETSC_EXTERN void  matsetvalueslocal_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr)
4464d03fd2bSBarry Smith {
4474d03fd2bSBarry Smith   *ierr = MatSetValuesLocal(*mat,*nrow,irow,*ncol,icol,y,*addv);
4484d03fd2bSBarry Smith }
4494d03fd2bSBarry Smith 
45019caf8f3SSatish Balay PETSC_EXTERN void  matsetvalueslocal0_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr)
4513b494cfeSSatish Balay {
4523b494cfeSSatish Balay   matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr);
4533b494cfeSSatish Balay }
4543b494cfeSSatish Balay 
45519caf8f3SSatish Balay PETSC_EXTERN void  matsetvalueslocal11_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr)
4564d03fd2bSBarry Smith {
4574d03fd2bSBarry Smith   matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr);
4584d03fd2bSBarry Smith }
4594d03fd2bSBarry Smith 
46019caf8f3SSatish Balay PETSC_EXTERN void  matsetvalueslocal11nn_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr)
4614d03fd2bSBarry Smith {
4624d03fd2bSBarry Smith   matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr);
4634d03fd2bSBarry Smith }
4644d03fd2bSBarry Smith 
46519caf8f3SSatish Balay PETSC_EXTERN void  matsetvalueslocal111_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr)
4664d03fd2bSBarry Smith {
4674d03fd2bSBarry Smith   matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr);
4684d03fd2bSBarry Smith }
4694d03fd2bSBarry Smith 
47019caf8f3SSatish Balay PETSC_EXTERN void  matsetvalueslocal1n_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr)
4714d03fd2bSBarry Smith {
4724d03fd2bSBarry Smith   matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr);
4734d03fd2bSBarry Smith }
4744d03fd2bSBarry Smith 
47519caf8f3SSatish Balay PETSC_EXTERN void  matsetvalueslocaln1_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr)
4764d03fd2bSBarry Smith {
4774d03fd2bSBarry Smith   matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr);
4784d03fd2bSBarry Smith }
4794d03fd2bSBarry Smith 
48019caf8f3SSatish Balay PETSC_EXTERN void  matgetrowmin_(Mat *mat,Vec *v,PetscInt idx[], int *ierr)
48187bcf4e0SBarry Smith {
48287bcf4e0SBarry Smith   CHKFORTRANNULLINTEGER(idx);
48387bcf4e0SBarry Smith   *ierr = MatGetRowMin(*mat,*v,idx);
48487bcf4e0SBarry Smith }
4854d03fd2bSBarry Smith 
48619caf8f3SSatish Balay PETSC_EXTERN void  matgetrowminabs_(Mat *mat,Vec *v,PetscInt idx[], int *ierr)
48787bcf4e0SBarry Smith {
48887bcf4e0SBarry Smith   CHKFORTRANNULLINTEGER(idx);
48987bcf4e0SBarry Smith   *ierr = MatGetRowMinAbs(*mat,*v,idx);
49087bcf4e0SBarry Smith }
49187bcf4e0SBarry Smith 
49219caf8f3SSatish Balay PETSC_EXTERN void  matgetrowmax_(Mat *mat,Vec *v,PetscInt idx[], int *ierr)
4935928be6bSBarry Smith {
4945928be6bSBarry Smith   CHKFORTRANNULLINTEGER(idx);
4955928be6bSBarry Smith   *ierr = MatGetRowMax(*mat,*v,idx);
4965928be6bSBarry Smith }
4975928be6bSBarry Smith 
49819caf8f3SSatish Balay PETSC_EXTERN void  matgetrowmaxabs_(Mat *mat,Vec *v,PetscInt idx[], int *ierr)
4995928be6bSBarry Smith {
5005928be6bSBarry Smith   CHKFORTRANNULLINTEGER(idx);
5015928be6bSBarry Smith   *ierr = MatGetRowMaxAbs(*mat,*v,idx);
5025928be6bSBarry Smith }
5035928be6bSBarry Smith 
504b22b330cSBarry Smith static PetscErrorCode ournullfunction(MatNullSpace sp, Vec x, void *ctx)
505b22b330cSBarry Smith {
5069566063dSJacob Faibussowitsch   PetscCallFortranVoidFunction((*(void (*)(MatNullSpace *, Vec *, void *, PetscErrorCode *))(((PetscObject)sp)->fortran_func_pointers[0]))(&sp, &x, ctx, &ierr));
507*3ba16761SJacob Faibussowitsch   return PETSC_SUCCESS;
508b22b330cSBarry Smith }
509b22b330cSBarry Smith 
51019caf8f3SSatish Balay PETSC_EXTERN void matnullspacesetfunction_(MatNullSpace *sp, PetscErrorCode (*rem)(MatNullSpace,Vec,void*),void *ctx,PetscErrorCode *ierr)
511b22b330cSBarry Smith {
512b22b330cSBarry Smith   PetscObjectAllocateFortranPointers(*sp,1);
513b22b330cSBarry Smith   ((PetscObject)*sp)->fortran_func_pointers[0] = (PetscVoidFunction)rem;
51426fbe8dcSKarl Rupp 
515b22b330cSBarry Smith   *ierr = MatNullSpaceSetFunction(*sp,ournullfunction,ctx);
516b22b330cSBarry Smith }
517b22b330cSBarry Smith 
51819caf8f3SSatish Balay PETSC_EXTERN void matcreatevecs_(Mat *mat,Vec *right,Vec *left, int *ierr)
5197c54600cSBarry Smith {
5207c54600cSBarry Smith   CHKFORTRANNULLOBJECT(right);
5217c54600cSBarry Smith   CHKFORTRANNULLOBJECT(left);
5222a7a6963SBarry Smith   *ierr = MatCreateVecs(*mat,right,left);
5237c54600cSBarry Smith }
5247c54600cSBarry Smith 
52519caf8f3SSatish Balay PETSC_EXTERN void matgetrowij_(Mat *B,PetscInt *shift,PetscBool *sym,PetscBool *blockcompressed,PetscInt *n,PetscInt *ia,size_t *iia,
526ace3abfcSBarry Smith                                 PetscInt *ja,size_t *jja,PetscBool  *done,PetscErrorCode *ierr)
527f4e70085SSatish Balay {
5281a83f524SJed Brown   const PetscInt *IA,*JA;
5298f7157efSSatish Balay   *ierr = MatGetRowIJ(*B,*shift,*sym,*blockcompressed,n,&IA,&JA,done);if (*ierr) return;
5301a83f524SJed Brown   *iia  = PetscIntAddressToFortran(ia,(PetscInt*)IA);
5311a83f524SJed Brown   *jja  = PetscIntAddressToFortran(ja,(PetscInt*)JA);
532f4e70085SSatish Balay }
533f4e70085SSatish Balay 
53419caf8f3SSatish Balay PETSC_EXTERN void matrestorerowij_(Mat *B,PetscInt *shift,PetscBool *sym,PetscBool *blockcompressed, PetscInt *n,PetscInt *ia,size_t *iia,
535ace3abfcSBarry Smith                                     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 */
548*3ba16761SJacob 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) {
558*3ba16761SJacob 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");
560*3ba16761SJacob Faibussowitsch     *ierr = PETSC_ERR_ARG_WRONGSTATE;
561f4e70085SSatish Balay     return;
562f4e70085SSatish Balay   }
563f4e70085SSatish Balay 
564*3ba16761SJacob Faibussowitsch   CHKFORTRANNULLINTEGER(cols);
565*3ba16761SJacob Faibussowitsch   if (!cols) oocols = NULL;
566*3ba16761SJacob Faibussowitsch   CHKFORTRANNULLSCALAR(vals);
567*3ba16761SJacob Faibussowitsch   if (!vals) oovals = NULL;
568f4e70085SSatish Balay 
569f4e70085SSatish Balay   *ierr = MatGetRow(*mat, *row, ncols, oocols, oovals);
570f4e70085SSatish Balay   if (*ierr) return;
571f4e70085SSatish Balay 
572*3ba16761SJacob Faibussowitsch   if (oocols) {
573*3ba16761SJacob Faibussowitsch     *ierr = PetscArraycpy(cols, my_ocols, *ncols);
574*3ba16761SJacob Faibussowitsch     if (*ierr) return;
575*3ba16761SJacob Faibussowitsch   }
576*3ba16761SJacob Faibussowitsch   if (oovals) {
577*3ba16761SJacob Faibussowitsch     *ierr = PetscArraycpy(vals, my_ovals, *ncols);
578*3ba16761SJacob Faibussowitsch     if (*ierr) return;
579*3ba16761SJacob 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;
587*3ba16761SJacob Faibussowitsch 
588f4e70085SSatish Balay   if (!matgetrowactive) {
589*3ba16761SJacob Faibussowitsch     *ierr = PetscError(PETSC_COMM_SELF, __LINE__, "MatRestoreRow_Fortran", __FILE__, PETSC_ERR_ARG_WRONGSTATE, PETSC_ERROR_INITIAL, "Must call MatGetRow() first");
590*3ba16761SJacob Faibussowitsch     *ierr = PETSC_ERR_ARG_WRONGSTATE;
591f4e70085SSatish Balay     return;
592f4e70085SSatish Balay   }
593*3ba16761SJacob Faibussowitsch   CHKFORTRANNULLINTEGER(cols);
594*3ba16761SJacob Faibussowitsch   if (!cols) oocols = NULL;
595*3ba16761SJacob Faibussowitsch   CHKFORTRANNULLSCALAR(vals);
596*3ba16761SJacob 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 
6218c778c55SBarry Smith   *ierr = MatSeqAIJGetArray(*mat,&mm); if (*ierr) return;
622f4e70085SSatish Balay   *ierr = MatGetSize(*mat,&m,&n);  if (*ierr) return;
623f91d1997SBarry Smith   *ierr = PetscScalarAddressToFortran((PetscObject)*mat,1,fa,mm,m*n,ia); if (*ierr) return;
624f4e70085SSatish Balay }
625f4e70085SSatish Balay 
62619caf8f3SSatish Balay PETSC_EXTERN void matseqaijrestorearray_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr)
627f4e70085SSatish Balay {
628f4e70085SSatish Balay   PetscScalar *lx;
629f4e70085SSatish Balay   PetscInt    m,n;
630f4e70085SSatish Balay 
631f4e70085SSatish Balay   *ierr = MatGetSize(*mat,&m,&n); if (*ierr) return;
632f4e70085SSatish Balay   *ierr = PetscScalarAddressFromFortran((PetscObject)*mat,fa,*ia,m*n,&lx);if (*ierr) return;
6338c778c55SBarry Smith   *ierr = MatSeqAIJRestoreArray(*mat,&lx);if (*ierr) return;
634f4e70085SSatish Balay }
635f4e70085SSatish Balay 
63619caf8f3SSatish Balay PETSC_EXTERN void matdensegetarray_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr)
63773a71a0fSBarry Smith {
63873a71a0fSBarry Smith   PetscScalar *mm;
63973a71a0fSBarry Smith   PetscInt    m,n;
64073a71a0fSBarry Smith 
6418c778c55SBarry Smith   *ierr = MatDenseGetArray(*mat,&mm); if (*ierr) return;
64273a71a0fSBarry Smith   *ierr = MatGetSize(*mat,&m,&n);  if (*ierr) return;
64373a71a0fSBarry Smith   *ierr = PetscScalarAddressToFortran((PetscObject)*mat,1,fa,mm,m*n,ia); if (*ierr) return;
64473a71a0fSBarry Smith }
64573a71a0fSBarry Smith 
64619caf8f3SSatish Balay PETSC_EXTERN void matdenserestorearray_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr)
64773a71a0fSBarry Smith {
64873a71a0fSBarry Smith   PetscScalar *lx;
64973a71a0fSBarry Smith   PetscInt    m,n;
65073a71a0fSBarry Smith 
65173a71a0fSBarry Smith   *ierr = MatGetSize(*mat,&m,&n); if (*ierr) return;
65273a71a0fSBarry Smith   *ierr = PetscScalarAddressFromFortran((PetscObject)*mat,fa,*ia,m*n,&lx);if (*ierr) return;
6538c778c55SBarry Smith   *ierr = MatDenseRestoreArray(*mat,&lx);if (*ierr) return;
65473a71a0fSBarry Smith }
65573a71a0fSBarry Smith 
65619caf8f3SSatish Balay PETSC_EXTERN void matdensegetarrayread_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr)
6578572280aSBarry Smith {
6587067c7f7SBarry Smith   const PetscScalar *mm;
6598572280aSBarry Smith   PetscInt         m,n;
6608572280aSBarry Smith 
6618572280aSBarry Smith   *ierr = MatDenseGetArrayRead(*mat,&mm); if (*ierr) return;
6628572280aSBarry Smith   *ierr = MatGetSize(*mat,&m,&n);  if (*ierr) return;
6637067c7f7SBarry Smith   *ierr = PetscScalarAddressToFortran((PetscObject)*mat,1,fa,(PetscScalar*)mm,m*n,ia); if (*ierr) return;
6648572280aSBarry Smith }
6658572280aSBarry Smith 
66619caf8f3SSatish Balay PETSC_EXTERN void matdenserestorearrayread_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr)
6678572280aSBarry Smith {
6687067c7f7SBarry Smith   const PetscScalar *lx;
6698572280aSBarry Smith   PetscInt          m,n;
6708572280aSBarry Smith 
6718572280aSBarry Smith   *ierr = MatGetSize(*mat,&m,&n); if (*ierr) return;
6727067c7f7SBarry Smith   *ierr = PetscScalarAddressFromFortran((PetscObject)*mat,fa,*ia,m*n,(PetscScalar**)&lx);if (*ierr) return;
6738572280aSBarry Smith   *ierr = MatDenseRestoreArrayRead(*mat,&lx);if (*ierr) return;
6748572280aSBarry Smith }
6758572280aSBarry Smith 
67619caf8f3SSatish Balay PETSC_EXTERN void matfactorgetsolverpackage_(Mat *mat,char* name,PetscErrorCode *ierr,PETSC_FORTRAN_CHARLEN_T len)
67735bd34faSBarry Smith {
67835bd34faSBarry Smith   const char *tname;
67935bd34faSBarry Smith 
6803ca39a21SBarry Smith   *ierr = MatFactorGetSolverType(*mat,&tname);if (*ierr) return;
68135bd34faSBarry Smith   if (name != PETSC_NULL_CHARACTER_Fortran) {
68235bd34faSBarry Smith     *ierr = PetscStrncpy(name,tname,len);if (*ierr) return;
68335bd34faSBarry Smith   }
68435bd34faSBarry Smith   FIXRETURNCHAR(PETSC_TRUE,name,len);
68535bd34faSBarry Smith }
68635bd34faSBarry Smith 
68719caf8f3SSatish Balay PETSC_EXTERN void matgetfactor_(Mat *mat,char* outtype,MatFactorType *ftype,Mat *M,PetscErrorCode *ierr,PETSC_FORTRAN_CHARLEN_T len)
6885dffd610SBarry Smith {
6895dffd610SBarry Smith   char *t;
6905dffd610SBarry Smith   FIXCHAR(outtype,len,t);
691d49bb8f9SBarry Smith   *ierr = MatGetFactor(*mat,t,*ftype,M);if (*ierr) return;
6925dffd610SBarry Smith   FREECHAR(outtype,t);
6935dffd610SBarry Smith }
6945dffd610SBarry Smith 
69519caf8f3SSatish Balay PETSC_EXTERN void matconvert_(Mat *mat,char* outtype,MatReuse *reuse,Mat *M,PetscErrorCode *ierr,PETSC_FORTRAN_CHARLEN_T len)
696f4e70085SSatish Balay {
697f4e70085SSatish Balay   char *t;
698f4e70085SSatish Balay   FIXCHAR(outtype,len,t);
699d49bb8f9SBarry Smith   *ierr = MatConvert(*mat,t,*reuse,M);if (*ierr) return;
700f4e70085SSatish Balay   FREECHAR(outtype,t);
701f4e70085SSatish Balay }
702f4e70085SSatish Balay 
703f4e70085SSatish Balay /*
7047dae84e0SHong Zhang     MatCreateSubmatrices() is slightly different from C since the
705f4e70085SSatish Balay     Fortran provides the array to hold the submatrix objects,while in C that
7067dae84e0SHong Zhang     array is allocated by the MatCreateSubmatrices()
707f4e70085SSatish Balay */
70819caf8f3SSatish Balay PETSC_EXTERN void matcreatesubmatrices_(Mat *mat,PetscInt *n,IS *isrow,IS *iscol,MatReuse *scall,Mat *smat,PetscErrorCode *ierr)
709f4e70085SSatish Balay {
710f4e70085SSatish Balay   Mat      *lsmat;
711f4e70085SSatish Balay   PetscInt i;
712f4e70085SSatish Balay 
713f4e70085SSatish Balay   if (*scall == MAT_INITIAL_MATRIX) {
7147dae84e0SHong Zhang     *ierr = MatCreateSubMatrices(*mat,*n,isrow,iscol,*scall,&lsmat);
715de7ef04eSHong Zhang     for (i=0; i<=*n; i++) { /* lsmat[*n] might be a dummy matrix for saving data struc */
716f4e70085SSatish Balay       smat[i] = lsmat[i];
717f4e70085SSatish Balay     }
718f4e70085SSatish Balay     *ierr = PetscFree(lsmat);
719f4e70085SSatish Balay   } else {
7207dae84e0SHong Zhang     *ierr = MatCreateSubMatrices(*mat,*n,isrow,iscol,*scall,&smat);
721f4e70085SSatish Balay   }
722f4e70085SSatish Balay }
723f4e70085SSatish Balay 
7247d6bfa3bSBarry Smith /*
72581ec7b92Smarius     MatCreateSubmatrices() is slightly different from C since the
72681ec7b92Smarius     Fortran provides the array to hold the submatrix objects,while in C that
72781ec7b92Smarius     array is allocated by the MatCreateSubmatrices()
72881ec7b92Smarius */
72919caf8f3SSatish Balay PETSC_EXTERN void matcreatesubmatricesmpi_(Mat *mat,PetscInt *n,IS *isrow,IS *iscol,MatReuse *scall,Mat *smat,PetscErrorCode *ierr)
73081ec7b92Smarius {
73181ec7b92Smarius   Mat      *lsmat;
73281ec7b92Smarius   PetscInt i;
73381ec7b92Smarius 
73481ec7b92Smarius   if (*scall == MAT_INITIAL_MATRIX) {
73581ec7b92Smarius     *ierr = MatCreateSubMatricesMPI(*mat,*n,isrow,iscol,*scall,&lsmat);
73681ec7b92Smarius     for (i=0; i<=*n; i++) { /* lsmat[*n] might be a dummy matrix for saving data struc */
73781ec7b92Smarius       smat[i] = lsmat[i];
73881ec7b92Smarius     }
73981ec7b92Smarius     *ierr = PetscFree(lsmat);
74081ec7b92Smarius   } else {
74181ec7b92Smarius     *ierr = MatCreateSubMatricesMPI(*mat,*n,isrow,iscol,*scall,&smat);
74281ec7b92Smarius   }
74381ec7b92Smarius }
74481ec7b92Smarius 
74581ec7b92Smarius /*
7467d6bfa3bSBarry Smith     MatDestroyMatrices() is slightly different from C since the
747de7ef04eSHong Zhang     Fortran does not free the array of matrix objects, while in C that
748de7ef04eSHong Zhang     the array is freed
749de7ef04eSHong Zhang */
75019caf8f3SSatish Balay PETSC_EXTERN void matdestroymatrices_(PetscInt *n,Mat *smat,PetscErrorCode *ierr)
751de7ef04eSHong Zhang {
752de7ef04eSHong Zhang   PetscInt i;
753de7ef04eSHong Zhang 
754de7ef04eSHong Zhang   for (i=0; i<*n; i++) {
7551fb7b255SJunchao Zhang     PETSC_FORTRAN_OBJECT_F_DESTROYED_TO_C_NULL(&smat[i]);
756de7ef04eSHong Zhang     *ierr = MatDestroy(&smat[i]);if (*ierr) return;
7571fb7b255SJunchao Zhang     PETSC_FORTRAN_OBJECT_C_NULL_TO_F_DESTROYED(&smat[i]);
758de7ef04eSHong Zhang   }
759de7ef04eSHong Zhang }
760de7ef04eSHong Zhang 
761de7ef04eSHong Zhang /*
762de7ef04eSHong Zhang     MatDestroySubMatrices() is slightly different from C since the
7637d6bfa3bSBarry Smith     Fortran provides the array to hold the submatrix objects, while in C that
7647dae84e0SHong Zhang     array is allocated by the MatCreateSubmatrices()
7657d6bfa3bSBarry Smith */
76619caf8f3SSatish Balay PETSC_EXTERN void matdestroysubmatrices_(PetscInt *n,Mat *smat,PetscErrorCode *ierr)
7677d6bfa3bSBarry Smith {
768de7ef04eSHong Zhang   Mat      *lsmat;
7697d6bfa3bSBarry Smith   PetscInt i;
7707d6bfa3bSBarry Smith 
771de7ef04eSHong Zhang   *ierr = PetscMalloc1(*n+1,&lsmat);
772de7ef04eSHong Zhang   for (i=0; i<=*n; i++) {
7731fb7b255SJunchao Zhang       PETSC_FORTRAN_OBJECT_F_DESTROYED_TO_C_NULL(&smat[i]);
774de7ef04eSHong Zhang       lsmat[i] = smat[i];
7757d6bfa3bSBarry Smith   }
776de7ef04eSHong Zhang   *ierr = MatDestroySubMatrices(*n,&lsmat);
7771fb7b255SJunchao Zhang   for (i=0; i<=*n; i++) {
7781fb7b255SJunchao Zhang     PETSC_FORTRAN_OBJECT_C_NULL_TO_F_DESTROYED(&smat[i]);
7791fb7b255SJunchao Zhang   }
7801fb7b255SJunchao Zhang }
7811fb7b255SJunchao Zhang 
7821fb7b255SJunchao Zhang PETSC_EXTERN void matdestroy_(Mat *x,int *ierr)
7831fb7b255SJunchao Zhang {
7841fb7b255SJunchao Zhang   PETSC_FORTRAN_OBJECT_F_DESTROYED_TO_C_NULL(x);
7851fb7b255SJunchao Zhang   *ierr = MatDestroy(x); if (*ierr) return;
7861fb7b255SJunchao Zhang   PETSC_FORTRAN_OBJECT_C_NULL_TO_F_DESTROYED(x);
787df750dc8SHong Zhang }
788df750dc8SHong Zhang 
78919caf8f3SSatish Balay PETSC_EXTERN void matsetoptionsprefix_(Mat *mat,char* prefix,PetscErrorCode *ierr,PETSC_FORTRAN_CHARLEN_T len)
7901eea217eSSatish Balay {
7911eea217eSSatish Balay   char *t;
7921eea217eSSatish Balay 
7931eea217eSSatish Balay   FIXCHAR(prefix,len,t);
794d49bb8f9SBarry Smith   *ierr = MatSetOptionsPrefix(*mat,t);if (*ierr) return;
7951eea217eSSatish Balay   FREECHAR(prefix,t);
7961eea217eSSatish Balay }
7971eea217eSSatish Balay 
79819caf8f3SSatish Balay PETSC_EXTERN void matnullspaceremove_(MatNullSpace *sp,Vec *vec,PetscErrorCode *ierr)
799812c3f48SMatthew Knepley {
800260663b8SBarry Smith   CHKFORTRANNULLOBJECT(*sp)
801d0195637SJed Brown   *ierr = MatNullSpaceRemove(*sp,*vec);
802812c3f48SMatthew Knepley }
8031eea217eSSatish Balay 
80419caf8f3SSatish Balay PETSC_EXTERN void matgetinfo_(Mat *mat,MatInfoType *flag,MatInfo *info, int *ierr)
8055ba43861SSatish Balay {
8064d03fd2bSBarry Smith   *ierr = MatGetInfo(*mat,*flag,info);
8075ba43861SSatish Balay }
8085ba43861SSatish Balay 
80919caf8f3SSatish Balay PETSC_EXTERN void matlufactor_(Mat *mat,IS *row,IS *col,const MatFactorInfo *info, int *ierr)
81022688b47SSatish Balay {
8114d03fd2bSBarry Smith   *ierr = MatLUFactor(*mat,*row,*col,info);
81222688b47SSatish Balay }
81322688b47SSatish Balay 
81419caf8f3SSatish Balay PETSC_EXTERN void matilufactor_(Mat *mat,IS *row,IS *col,const MatFactorInfo *info, int *ierr)
81522688b47SSatish Balay {
8164d03fd2bSBarry Smith   *ierr = MatILUFactor(*mat,*row,*col,info);
81722688b47SSatish Balay }
81822688b47SSatish Balay 
81919caf8f3SSatish Balay PETSC_EXTERN void matlufactorsymbolic_(Mat *fact,Mat *mat,IS *row,IS *col,const MatFactorInfo *info, int *ierr)
82022688b47SSatish Balay {
8214d03fd2bSBarry Smith   *ierr = MatLUFactorSymbolic(*fact,*mat,*row,*col,info);
82222688b47SSatish Balay }
82322688b47SSatish Balay 
82419caf8f3SSatish Balay PETSC_EXTERN void matlufactornumeric_(Mat *fact,Mat *mat,const MatFactorInfo *info, int *ierr)
82522688b47SSatish Balay {
8264d03fd2bSBarry Smith   *ierr = MatLUFactorNumeric(*fact,*mat,info);
82722688b47SSatish Balay }
82822688b47SSatish Balay 
82919caf8f3SSatish Balay PETSC_EXTERN void matcholeskyfactor_(Mat *mat,IS *perm,const MatFactorInfo *info, int *ierr)
83022688b47SSatish Balay {
8314d03fd2bSBarry Smith   *ierr = MatCholeskyFactor(*mat,*perm,info);
83222688b47SSatish Balay }
83322688b47SSatish Balay 
83419caf8f3SSatish Balay PETSC_EXTERN void matcholeskyfactorsymbolic_(Mat *fact,Mat *mat,IS *perm,const MatFactorInfo *info, int *ierr)
83522688b47SSatish Balay {
8364d03fd2bSBarry Smith   *ierr = MatCholeskyFactorSymbolic(*fact,*mat,*perm,info);
83722688b47SSatish Balay }
83822688b47SSatish Balay 
83919caf8f3SSatish Balay PETSC_EXTERN void matcholeskyfactornumeric_(Mat *fact,Mat *mat,const MatFactorInfo *info, int *ierr)
84022688b47SSatish Balay {
8414d03fd2bSBarry Smith   *ierr = MatCholeskyFactorNumeric(*fact,*mat,info);
84222688b47SSatish Balay }
84322688b47SSatish Balay 
84419caf8f3SSatish Balay PETSC_EXTERN void matilufactorsymbolic_(Mat *fact,Mat *mat,IS *row,IS *col,const MatFactorInfo *info, int *ierr)
84522688b47SSatish Balay {
8464d03fd2bSBarry Smith   *ierr = MatILUFactorSymbolic(*fact,*mat,*row,*col,info);
84722688b47SSatish Balay }
84822688b47SSatish Balay 
84919caf8f3SSatish Balay PETSC_EXTERN void maticcfactorsymbolic_(Mat *fact,Mat *mat,IS *perm,const MatFactorInfo *info, int *ierr)
85022688b47SSatish Balay {
8514d03fd2bSBarry Smith   *ierr = MatICCFactorSymbolic(*fact,*mat,*perm,info);
85222688b47SSatish Balay }
85322688b47SSatish Balay 
85419caf8f3SSatish Balay PETSC_EXTERN void maticcfactor_(Mat *mat,IS *row,const MatFactorInfo *info, int *ierr)
85522688b47SSatish Balay {
8564d03fd2bSBarry Smith   *ierr = MatICCFactor(*mat,*row,info);
85722688b47SSatish Balay }
85822688b47SSatish Balay 
85919caf8f3SSatish Balay PETSC_EXTERN void matfactorinfoinitialize_(MatFactorInfo *info, int *ierr)
86022688b47SSatish Balay {
8614d03fd2bSBarry Smith   *ierr = MatFactorInfoInitialize(info);
86222688b47SSatish Balay }
86319caf8f3SSatish Balay PETSC_EXTERN void  matzerorowslocal_(Mat *mat,PetscInt *numRows, PetscInt rows[],PetscScalar *diag,Vec *x,Vec *b, int *ierr)
864d27e6124SSatish Balay {
865d27e6124SSatish Balay   *ierr = MatZeroRowsLocal(*mat,*numRows,rows,*diag,*x,*b);
866d27e6124SSatish Balay }
86719caf8f3SSatish Balay PETSC_EXTERN void  matzerorowslocal0_(Mat *mat,PetscInt *numRows, PetscInt rows[],PetscScalar *diag,Vec *x,Vec *b, int *ierr)
868d27e6124SSatish Balay {
869d27e6124SSatish Balay   matzerorowslocal_(mat,numRows,rows,diag,x,b,ierr);
870d27e6124SSatish Balay }
87119caf8f3SSatish Balay PETSC_EXTERN void  matzerorowslocal1_(Mat *mat,PetscInt *numRows, PetscInt rows[],PetscScalar *diag,Vec *x,Vec *b, int *ierr)
872d27e6124SSatish Balay {
873d27e6124SSatish Balay   matzerorowslocal_(mat,numRows,rows,diag,x,b,ierr);
874d27e6124SSatish Balay }
87519caf8f3SSatish Balay PETSC_EXTERN void matviewfromoptions_(Mat *ao,PetscObject obj,char* type,PetscErrorCode *ierr,PETSC_FORTRAN_CHARLEN_T len)
876fe2efc57SMark {
877fe2efc57SMark   char *t;
878fe2efc57SMark 
879fe2efc57SMark   FIXCHAR(type,len,t);
880b14c0cbaSBlaise Bourdin   CHKFORTRANNULLOBJECT(obj);
881fe2efc57SMark   *ierr = MatViewFromOptions(*ao,obj,t);if (*ierr) return;
882fe2efc57SMark   FREECHAR(type,t);
883fe2efc57SMark }
884