xref: /petsc/src/mat/interface/ftn-custom/zmatrixf.c (revision 5dd307cdd913d76f2b6ad0c5451f31d1994709e2)
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)
74d03fd2bSBarry Smith #define matsetvalues_                    MATSETVALUES
81006886cSSatish Balay #define matsetvaluesnnnn_                MATSETVALUESNNNN
93b494cfeSSatish Balay #define matsetvalues0_                   MATSETVALUES0
101b266c99SBarry Smith #define matsetvaluesnn1_                 MATSETVALUESNN1
114d03fd2bSBarry Smith #define matsetvalues11_                  MATSETVALUES11
124d03fd2bSBarry Smith #define matsetvalues1n_                  MATSETVALUES1N
134d03fd2bSBarry Smith #define matsetvaluesn1_                  MATSETVALUESN1
143b494cfeSSatish Balay #define matsetvaluesblocked0_            MATSETVALUESBLOCKED0
150aee3464SBarry Smith #define matsetvaluesblocked2_            MATSETVALUESBLOCKED2
164d03fd2bSBarry Smith #define matsetvaluesblocked11_           MATSETVALUESBLOCKED11
174d03fd2bSBarry Smith #define matsetvaluesblocked111_          MATSETVALUESBLOCKED111
184d03fd2bSBarry Smith #define matsetvaluesblocked1n_           MATSETVALUESBLOCKED1N
194d03fd2bSBarry Smith #define matsetvaluesblockedn1_           MATSETVALUESBLOCKEDN1
204d03fd2bSBarry Smith #define matsetvaluesblockedlocal_        MATSETVALUESBLOCKEDLOCAL
213b494cfeSSatish Balay #define matsetvaluesblockedlocal0_       MATSETVALUESBLOCKEDLOCAL0
224d03fd2bSBarry Smith #define matsetvaluesblockedlocal11_      MATSETVALUESBLOCKEDLOCAL11
234d03fd2bSBarry Smith #define matsetvaluesblockedlocal111_     MATSETVALUESBLOCKEDLOCAL111
244d03fd2bSBarry Smith #define matsetvaluesblockedlocal1n_      MATSETVALUESBLOCKEDLOCAL1N
254d03fd2bSBarry Smith #define matsetvaluesblockedlocaln1_      MATSETVALUESBLOCKEDLOCALN1
264d03fd2bSBarry Smith #define matsetvalueslocal_               MATSETVALUESLOCAL
273b494cfeSSatish Balay #define matsetvalueslocal0_              MATSETVALUESLOCAL0
284d03fd2bSBarry Smith #define matsetvalueslocal11_             MATSETVALUESLOCAL11
294d03fd2bSBarry Smith #define matsetvalueslocal11nn_           MATSETVALUESLOCAL11NN
304d03fd2bSBarry Smith #define matsetvalueslocal111_            MATSETVALUESLOCAL111
314d03fd2bSBarry Smith #define matsetvalueslocal1n_             MATSETVALUESLOCAL1N
324d03fd2bSBarry Smith #define matsetvalueslocaln1_             MATSETVALUESLOCALN1
3387bcf4e0SBarry Smith #define matgetrowmin_                    MATGETROWMIN
3487bcf4e0SBarry Smith #define matgetrowminabs_                 MATGETROWMINABS
355928be6bSBarry Smith #define matgetrowmax_                    MATGETROWMAX
365928be6bSBarry Smith #define matgetrowmaxabs_                 MATGETROWMAXABS
377d6bfa3bSBarry Smith #define matdestroymatrices_              MATDESTROYMATRICES
38df750dc8SHong Zhang #define matdestroysubmatrices_           MATDESTROYSUBMATRICES
395dffd610SBarry Smith #define matgetfactor_                    MATGETFACTOR
4035bd34faSBarry Smith #define matfactorgetsolverpackage_       MATFACTORGETSOLVERPACKAGE
41f4e70085SSatish Balay #define matgetrowij_                     MATGETROWIJ
42f4e70085SSatish Balay #define matrestorerowij_                 MATRESTOREROWIJ
43f4e70085SSatish Balay #define matgetrow_                       MATGETROW
44f4e70085SSatish Balay #define matrestorerow_                   MATRESTOREROW
45f7e310deSShri Abhyankar #define matload_                         MATLOAD
46f4e70085SSatish Balay #define matview_                         MATVIEW
478c778c55SBarry Smith #define matseqaijgetarray_               MATSEQAIJGETARRAY
486778691eSSatish Balay #define matseqaijrestorearray_           MATSEQAIJRESTOREARRAY
498c778c55SBarry Smith #define matdensegetarray_                MATDENSEGETARRAY
508572280aSBarry Smith #define matdensegetarrayread_            MATDENSEGETARRAYREAD
518c778c55SBarry Smith #define matdenserestorearray_            MATDENSERESTOREARRAY
528572280aSBarry Smith #define matdenserestorearrayread_        MATDENSERESTOREARRAYREAD
53f4e70085SSatish Balay #define matconvert_                      MATCONVERT
547dae84e0SHong Zhang #define matcreatesubmatrices_            MATCREATESUBMATRICES
5517ede90eSSatish Balay #define matzerorowscolumns_              MATZEROROWSCOLUMNS
5617ede90eSSatish Balay #define matzerorowscolumnsis_            MATZEROROWSCOLUMNSIS
5717ede90eSSatish Balay #define matzerorowsstencil_              MATZEROROWSSTENCIL
58d25a37e1SJed Brown #define matzerorowscolumnsstencil_       MATZEROROWSCOLUMNSSTENCIL
59f4e70085SSatish Balay #define matzerorows_                     MATZEROROWS
60f4e70085SSatish Balay #define matzerorowsis_                   MATZEROROWSIS
61f4e70085SSatish Balay #define matzerorowslocal_                MATZEROROWSLOCAL
62d27e6124SSatish Balay #define matzerorowslocal0_               MATZEROROWSLOCAL0
63d27e6124SSatish Balay #define matzerorowslocal1_               MATZEROROWSLOCAL1
64f4e70085SSatish Balay #define matzerorowslocalis_              MATZEROROWSLOCALIS
6517ede90eSSatish Balay #define matzerorowscolumnslocal_         MATZEROROWSCOLUMNSLOCAL
6617ede90eSSatish Balay #define matzerorowscolumnslocalis_       MATZEROROWSCOLUMNSLOCALIS
671eea217eSSatish Balay #define matsetoptionsprefix_             MATSETOPTIONSPREFIX
68fcc9d04bSBarry Smith #define matcreatevecs_                   MATCREATEVECS
69c9d5ca86SBarry Smith #define matnullspaceremove_              MATNULLSPACEREMOVE
705ba43861SSatish Balay #define matgetinfo_                      MATGETINFO
7122688b47SSatish Balay #define matlufactor_                     MATLUFACTOR
7222688b47SSatish Balay #define matilufactor_                    MATILUFACTOR
7322688b47SSatish Balay #define matlufactorsymbolic_             MATLUFACTORSYMBOLIC
7422688b47SSatish Balay #define matlufactornumeric_              MATLUFACTORNUMERIC
7522688b47SSatish Balay #define matcholeskyfactor_               MATCHOLESKYFACTOR
7622688b47SSatish Balay #define matcholeskyfactorsymbolic_       MATCHOLESKYFACTORSYMBOLIC
7722688b47SSatish Balay #define matcholeskyfactornumeric_        MATCHOLESKYFACTORNUMERIC
7822688b47SSatish Balay #define matilufactorsymbolic_            MATILUFACTORSYMBOLIC
7922688b47SSatish Balay #define maticcfactorsymbolic_            MATICCFACTORSYMBOLIC
8022688b47SSatish Balay #define maticcfactor_                    MATICCFACTOR
8122688b47SSatish Balay #define matfactorinfoinitialize_         MATFACTORINFOINITIALIZE
82b22b330cSBarry Smith #define matnullspacesetfunction_         MATNULLSPACESETFUNCTION
830905d9aaSJed Brown #define matfindnonzerorows_              MATFINDNONZEROROWS
8438135fcbSMartin Diehl #define matgetsize_                      MATGETSIZE
853be0408cSBarry Smith #define matgetsize00_                    MATGETSIZE00
863be0408cSBarry Smith #define matgetsize10_                    MATGETSIZE10
873be0408cSBarry Smith #define matgetsize01_                    MATGETSIZE01
8838135fcbSMartin Diehl #define matgetlocalsize_                 MATGETLOCALSIZE
893be0408cSBarry Smith #define matgetlocalsize00_               MATGETLOCALSIZE00
903be0408cSBarry Smith #define matgetlocalsize10_               MATGETLOCALSIZE10
913be0408cSBarry Smith #define matgetlocalsize01_               MATGETLOCALSIZE01
92260663b8SBarry Smith #define matsetnullspace_                 MATSETNULLSPACE
93260663b8SBarry Smith #define matgetownershiprange_            MATGETOWNERSHIPRANGE
9491f56e93SMartin Diehl #define matgetownershiprange00_          MATGETOWNERSHIPRANGE00
9591f56e93SMartin Diehl #define matgetownershiprange10_          MATGETOWNERSHIPRANGE10
9691f56e93SMartin Diehl #define matgetownershiprange01_          MATGETOWNERSHIPRANGE01
9791f56e93SMartin Diehl #define matgetownershiprange10_          MATGETOWNERSHIPRANGE11
98c08c7cb9SBarry Smith #define matgetownershipis_               MATGETOWNERSHIPIS
99afc39838SBarry Smith #define matgetownershiprangecolumn_      MATGETOWNERSHIPRANGECOLUMN
100f4e70085SSatish Balay #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE)
1014d03fd2bSBarry Smith #define matsetvalues_                    matsetvalues
1021006886cSSatish Balay #define matsetvaluesnnnn_                matsetvaluesnnnn
1033b494cfeSSatish Balay #define matsetvalues0_                   matsetvalues0
1041b266c99SBarry Smith #define matsetvaluesnn1_                 matsetvaluesnn1
1054d03fd2bSBarry Smith #define matsetvalues11_                  matsetvalues11
1064d03fd2bSBarry Smith #define matsetvaluesn1_                  matsetvaluesn1
1074d03fd2bSBarry Smith #define matsetvalues1n_                  matsetvalues1n
1084d03fd2bSBarry Smith #define matsetvalueslocal_               matsetvalueslocal
1093b494cfeSSatish Balay #define matsetvalueslocal0_              matsetvalueslocal0
1104d03fd2bSBarry Smith #define matsetvalueslocal11_             matsetvalueslocal11
1114d03fd2bSBarry Smith #define matsetvalueslocal11nn_           matsetvalueslocal11nn
1124d03fd2bSBarry Smith #define matsetvalueslocal111_            matsetvalueslocal111
1134d03fd2bSBarry Smith #define matsetvalueslocal1n_             matsetvalueslocal1n
1144d03fd2bSBarry Smith #define matsetvalueslocaln1_             matsetvalueslocaln1
1154d03fd2bSBarry Smith #define matsetvaluesblocked_             matsetvaluesblocked
1163b494cfeSSatish Balay #define matsetvaluesblocked0_            matsetvaluesblocked0
1170aee3464SBarry Smith #define matsetvaluesblocked2_            matsetvaluesblocked2
1184d03fd2bSBarry Smith #define matsetvaluesblocked11_           matsetvaluesblocked11
1194d03fd2bSBarry Smith #define matsetvaluesblocked111_          matsetvaluesblocked111
1204d03fd2bSBarry Smith #define matsetvaluesblocked1n_           matsetvaluesblocked1n
12124aa916eSSatish Balay #define matsetvaluesblockedn1_           matsetvaluesblockedn1
1224d03fd2bSBarry Smith #define matsetvaluesblockedlocal_        matsetvaluesblockedlocal
1233b494cfeSSatish Balay #define matsetvaluesblockedlocal0_       matsetvaluesblockedlocal0
1244d03fd2bSBarry Smith #define matsetvaluesblockedlocal11_      matsetvaluesblockedlocal11
1254d03fd2bSBarry Smith #define matsetvaluesblockedlocal111_     matsetvaluesblockedlocal111
1264d03fd2bSBarry Smith #define matsetvaluesblockedlocal1n_      matsetvaluesblockedlocal1n
12724aa916eSSatish Balay #define matsetvaluesblockedlocaln1_      matsetvaluesblockedlocaln1
12887bcf4e0SBarry Smith #define matgetrowmin_                    matgetrowmin
12987bcf4e0SBarry Smith #define matgetrowminabs_                 matgetrowminabs
1305928be6bSBarry Smith #define matgetrowmax_                    matgetrowmax
1315928be6bSBarry Smith #define matgetrowmaxabs_                 matgetrowmaxabs
1325928be6bSBarry Smith #define matdestroymatrices_              matdestroymatrices
133df750dc8SHong Zhang #define matdestroysubmatrices_           matdestroysubmatrices
1345dffd610SBarry Smith #define matgetfactor_                    matgetfactor
13535bd34faSBarry Smith #define matfactorgetsolverpackage_       matfactorgetsolverpackage
136fcc9d04bSBarry Smith #define matcreatevecs_                   matcreatevecs
137f4e70085SSatish Balay #define matgetrowij_                     matgetrowij
138f4e70085SSatish Balay #define matrestorerowij_                 matrestorerowij
139f4e70085SSatish Balay #define matgetrow_                       matgetrow
140f4e70085SSatish Balay #define matrestorerow_                   matrestorerow
141f4e70085SSatish Balay #define matview_                         matview
142f7e310deSShri Abhyankar #define matload_                         matload
1438c778c55SBarry Smith #define matseqaijgetarray_               matseqaijgetarray
1448c778c55SBarry Smith #define matseqaijrestorearray_           matseqaijrestorearray
1458c778c55SBarry Smith #define matdensegetarray_                matdensegetarray
1468572280aSBarry Smith #define matdensegetarrayread_            matdensegetarrayread
1478c778c55SBarry Smith #define matdenserestorearray_            matdenserestorearray
1488572280aSBarry Smith #define matdenserestorearrayread_        matdenserestorearrayread
149f4e70085SSatish Balay #define matconvert_                      matconvert
1507dae84e0SHong Zhang #define matcreatesubmatrices_            matcreatesubmatrices
15117ede90eSSatish Balay #define matzerorowscolumns_              matzerorowscolumns
15217ede90eSSatish Balay #define matzerorowscolumnsis_            matzerorowscolumnsis
15317ede90eSSatish Balay #define matzerorowsstencil_              matzerorowsstencil
154d25a37e1SJed Brown #define matzerorowscolumnsstencil_       matzerorowscolumnsstencil
155f4e70085SSatish Balay #define matzerorows_                     matzerorows
156f4e70085SSatish Balay #define matzerorowsis_                   matzerorowsis
157f4e70085SSatish Balay #define matzerorowslocal_                matzerorowslocal
158f4e70085SSatish Balay #define matzerorowslocalis_              matzerorowslocalis
15917ede90eSSatish Balay #define matzerorowscolumnslocal_         matzerorowscolumnslocal
16017ede90eSSatish Balay #define matzerorowscolumnslocalis_       matzerorowscolumnslocalis
1611eea217eSSatish Balay #define matsetoptionsprefix_             matsetoptionsprefix
162812c3f48SMatthew Knepley #define matnullspaceremove_              matnullspaceremove
1635ba43861SSatish Balay #define matgetinfo_                      matgetinfo
16422688b47SSatish Balay #define matlufactor_                     matlufactor
16522688b47SSatish Balay #define matilufactor_                    matilufactor
16622688b47SSatish Balay #define matlufactorsymbolic_             matlufactorsymbolic
16722688b47SSatish Balay #define matlufactornumeric_              matlufactornumeric
16822688b47SSatish Balay #define matcholeskyfactor_               matcholeskyfactor
16922688b47SSatish Balay #define matcholeskyfactorsymbolic_       matcholeskyfactorsymbolic
17022688b47SSatish Balay #define matcholeskyfactornumeric_        matcholeskyfactornumeric
17122688b47SSatish Balay #define matilufactorsymbolic_            matilufactorsymbolic
17222688b47SSatish Balay #define maticcfactorsymbolic_            maticcfactorsymbolic
17322688b47SSatish Balay #define maticcfactor_                    maticcfactor
17422688b47SSatish Balay #define matfactorinfoinitialize_         matfactorinfoinitialize
175b22b330cSBarry Smith #define matnullspacesetfunction_         matnullspacesetfunction
1760905d9aaSJed Brown #define matfindnonzerorows_              matfindnonzerorows
17738135fcbSMartin Diehl #define matgetsize_                      matgetsize
1783be0408cSBarry Smith #define matgetsize00_                    matgetsize00
1793be0408cSBarry Smith #define matgetsize10_                    matgetsize10
1803be0408cSBarry Smith #define matgetsize01_                    matgetsize01
18138135fcbSMartin Diehl #define matgetlocalsize_                 matgetlocalsize
1823be0408cSBarry Smith #define matgetlocalsize00_               matgetlocalsize00
1833be0408cSBarry Smith #define matgetlocalsize10_               matgetlocalsize10
1843be0408cSBarry Smith #define matgetlocalsize01_               matgetlocalsize01
185260663b8SBarry Smith #define matsetnullspace_                 matsetnullspace
186260663b8SBarry Smith #define matgetownershiprange_            matgetownershiprange
18791f56e93SMartin Diehl #define matgetownershiprange00_          matgetownershiprange00
18891f56e93SMartin Diehl #define matgetownershiprange10_          matgetownershiprange10
18991f56e93SMartin Diehl #define matgetownershiprange01_          matgetownershiprange01
19091f56e93SMartin Diehl #define matgetownershiprange11_          matgetownershiprange11
191c08c7cb9SBarry Smith #define matgetownershipis_               matgetownershipis
192afc39838SBarry Smith #define matgetownershiprangecolumn_      matgetownershiprangecolumn
193f4e70085SSatish Balay #endif
194f4e70085SSatish Balay 
195260663b8SBarry Smith PETSC_EXTERN void PETSC_STDCALL  matgetownershiprange_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr )
196260663b8SBarry Smith {
197260663b8SBarry Smith   CHKFORTRANNULLINTEGER(m);
198260663b8SBarry Smith   CHKFORTRANNULLINTEGER(n);
199260663b8SBarry Smith   *ierr = MatGetOwnershipRange(*mat,m,n);
200260663b8SBarry Smith }
201260663b8SBarry Smith 
202*5dd307cdSMartin Diehl PETSC_EXTERN void PETSC_STDCALL  matgetownershiprange00_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr )
203*5dd307cdSMartin Diehl {
204*5dd307cdSMartin Diehl   CHKFORTRANNULLINTEGER(m);
205*5dd307cdSMartin Diehl   CHKFORTRANNULLINTEGER(n);
206*5dd307cdSMartin Diehl   *ierr = MatGetOwnershipRange(*mat,m,n);
207*5dd307cdSMartin Diehl }
208*5dd307cdSMartin Diehl 
209*5dd307cdSMartin Diehl PETSC_EXTERN void PETSC_STDCALL  matgetownershiprange10_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr )
210*5dd307cdSMartin Diehl {
211*5dd307cdSMartin Diehl   CHKFORTRANNULLINTEGER(m);
212*5dd307cdSMartin Diehl   CHKFORTRANNULLINTEGER(n);
213*5dd307cdSMartin Diehl   *ierr = MatGetOwnershipRange(*mat,m,n);
214*5dd307cdSMartin Diehl }
215*5dd307cdSMartin Diehl 
216*5dd307cdSMartin Diehl PETSC_EXTERN void PETSC_STDCALL  matgetownershiprange01_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr )
217*5dd307cdSMartin Diehl {
218*5dd307cdSMartin Diehl   CHKFORTRANNULLINTEGER(m);
219*5dd307cdSMartin Diehl   CHKFORTRANNULLINTEGER(n);
220*5dd307cdSMartin Diehl   *ierr = MatGetOwnershipRange(*mat,m,n);
221*5dd307cdSMartin Diehl }
222*5dd307cdSMartin Diehl 
223*5dd307cdSMartin Diehl PETSC_EXTERN void PETSC_STDCALL  matgetownershiprange11_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr )
224*5dd307cdSMartin Diehl {
225*5dd307cdSMartin Diehl   CHKFORTRANNULLINTEGER(m);
226*5dd307cdSMartin Diehl   CHKFORTRANNULLINTEGER(n);
227*5dd307cdSMartin Diehl   *ierr = MatGetOwnershipRange(*mat,m,n);
228*5dd307cdSMartin Diehl }
229*5dd307cdSMartin Diehl 
230c08c7cb9SBarry Smith PETSC_EXTERN void PETSC_STDCALL  matgetownershipis_(Mat *mat,IS *m,IS *n, int *ierr )
231c08c7cb9SBarry Smith {
232c08c7cb9SBarry Smith   CHKFORTRANNULLOBJECT(m);
233c08c7cb9SBarry Smith   CHKFORTRANNULLOBJECT(n);
234c08c7cb9SBarry Smith   *ierr = MatGetOwnershipIS(*mat,m,n);
235c08c7cb9SBarry Smith }
236c08c7cb9SBarry Smith 
237afc39838SBarry Smith PETSC_EXTERN void PETSC_STDCALL  matgetownershiprangecolumn_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr )
238afc39838SBarry Smith {
239afc39838SBarry Smith   CHKFORTRANNULLINTEGER(m);
240afc39838SBarry Smith   CHKFORTRANNULLINTEGER(n);
241afc39838SBarry Smith   *ierr = MatGetOwnershipRangeColumn(*mat,m,n);
242afc39838SBarry Smith }
243afc39838SBarry Smith 
2443be0408cSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matgetsize_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr )
2453be0408cSBarry Smith {
2463be0408cSBarry Smith   CHKFORTRANNULLINTEGER(m);
2473be0408cSBarry Smith   CHKFORTRANNULLINTEGER(n);
2483be0408cSBarry Smith   *ierr = MatGetSize(*mat,m,n);
2493be0408cSBarry Smith }
2503be0408cSBarry Smith 
2513be0408cSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matgetsize00_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr )
2523be0408cSBarry Smith {
2533be0408cSBarry Smith   matgetsize_(mat,m,n,ierr);
2543be0408cSBarry Smith }
2553be0408cSBarry Smith 
2563be0408cSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matgetsize10_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr )
2573be0408cSBarry Smith {
2583be0408cSBarry Smith   matgetsize_(mat,m,n,ierr);
2593be0408cSBarry Smith }
2603be0408cSBarry Smith 
2613be0408cSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matgetsize01_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr )
2623be0408cSBarry Smith {
2633be0408cSBarry Smith   matgetsize_(mat,m,n,ierr);
2643be0408cSBarry Smith }
2653be0408cSBarry Smith 
2663be0408cSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matgetlocalsize_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr )
2673be0408cSBarry Smith {
2683be0408cSBarry Smith   CHKFORTRANNULLINTEGER(m);
2693be0408cSBarry Smith   CHKFORTRANNULLINTEGER(n);
2703be0408cSBarry Smith   *ierr = MatGetLocalSize(*mat,m,n);
2713be0408cSBarry Smith }
2723be0408cSBarry Smith 
2733be0408cSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matgetlocalsize00_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr )
2743be0408cSBarry Smith {
2753be0408cSBarry Smith   matgetlocalsize_(mat,m,n,ierr);
2763be0408cSBarry Smith }
2773be0408cSBarry Smith 
2783be0408cSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matgetlocalsize10_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr )
2793be0408cSBarry Smith {
2803be0408cSBarry Smith   matgetlocalsize_(mat,m,n,ierr);
2813be0408cSBarry Smith }
2823be0408cSBarry Smith 
2833be0408cSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matgetlocalsize01_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr )
2843be0408cSBarry Smith {
2853be0408cSBarry Smith   matgetlocalsize_(mat,m,n,ierr);
2863be0408cSBarry Smith }
2873be0408cSBarry Smith 
2884d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvaluesblocked_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){
2894d03fd2bSBarry Smith   *ierr = MatSetValuesBlocked(*mat,*m,idxm,*n,idxn,v,*addv);
2904d03fd2bSBarry Smith }
2914d03fd2bSBarry Smith 
292cee688dbSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvaluesblocked2_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], F90Array2d *y,InsertMode *addv, int *ierr PETSC_F90_2PTR_PROTO(ptrd)){
293cee688dbSBarry Smith   PetscScalar *fa;
2940aee3464SBarry Smith   *ierr = F90Array2dAccess(y,MPIU_SCALAR,(void**)&fa PETSC_F90_2PTR_PARAM(ptrd));if (*ierr) return;
295cee688dbSBarry Smith   matsetvaluesblocked_(mat,m,idxm,n,idxn,fa,addv,ierr);
296cee688dbSBarry Smith }
297cee688dbSBarry Smith 
2983b494cfeSSatish Balay PETSC_EXTERN void PETSC_STDCALL  matsetvaluesblocked0_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){
2993b494cfeSSatish Balay   matsetvaluesblocked_(mat,m,idxm,n,idxn,v,addv,ierr);
3003b494cfeSSatish Balay }
3013b494cfeSSatish Balay 
3024d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvaluesblocked11_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){
3034d03fd2bSBarry Smith   matsetvaluesblocked_(mat,m,idxm,n,idxn,v,addv,ierr);
3044d03fd2bSBarry Smith }
3054d03fd2bSBarry Smith 
3064d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvaluesblocked111_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){
3074d03fd2bSBarry Smith   matsetvaluesblocked_(mat,m,idxm,n,idxn,v,addv,ierr);
3084d03fd2bSBarry Smith }
3094d03fd2bSBarry Smith 
3104d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvaluesblocked1n_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){
3114d03fd2bSBarry Smith   matsetvaluesblocked_(mat,m,idxm,n,idxn,v,addv,ierr);
3124d03fd2bSBarry Smith }
3134d03fd2bSBarry Smith 
3144d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvaluesblockedn1_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){
3154d03fd2bSBarry Smith   matsetvaluesblocked_(mat,m,idxm,n,idxn,v,addv,ierr);
3164d03fd2bSBarry Smith }
3174d03fd2bSBarry Smith 
3184d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvaluesblockedlocal_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr )
3194d03fd2bSBarry Smith {
3204d03fd2bSBarry Smith   *ierr = MatSetValuesBlockedLocal(*mat,*nrow,irow,*ncol,icol,y,*addv);
3214d03fd2bSBarry Smith }
3224d03fd2bSBarry Smith 
3233b494cfeSSatish Balay PETSC_EXTERN void PETSC_STDCALL  matsetvaluesblockedlocal0_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){
3243b494cfeSSatish Balay   matsetvaluesblockedlocal_(mat,m,idxm,n,idxn,v,addv,ierr);
3253b494cfeSSatish Balay }
3263b494cfeSSatish Balay 
3274d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvaluesblockedlocal11_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){
3284d03fd2bSBarry Smith   matsetvaluesblockedlocal_(mat,m,idxm,n,idxn,v,addv,ierr);
3294d03fd2bSBarry Smith }
3304d03fd2bSBarry Smith 
3314d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvaluesblockedlocal111_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){
3324d03fd2bSBarry Smith   matsetvaluesblockedlocal_(mat,m,idxm,n,idxn,v,addv,ierr);
3334d03fd2bSBarry Smith }
3344d03fd2bSBarry Smith 
3354d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvaluesblockedlocal1n_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){
3364d03fd2bSBarry Smith   matsetvaluesblockedlocal_(mat,m,idxm,n,idxn,v,addv,ierr);
3374d03fd2bSBarry Smith }
3384d03fd2bSBarry Smith 
3394d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvaluesblockedlocaln1_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){
3404d03fd2bSBarry Smith   matsetvaluesblockedlocal_(mat,m,idxm,n,idxn,v,addv,ierr);
3414d03fd2bSBarry Smith }
3424d03fd2bSBarry Smith 
3434d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvalues_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr )
3444d03fd2bSBarry Smith {
3454d03fd2bSBarry Smith   *ierr = MatSetValues(*mat,*m,idxm,*n,idxn,v,*addv);
3464d03fd2bSBarry Smith }
3474d03fd2bSBarry Smith 
3481b266c99SBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvaluesnnnn_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr )
3491b266c99SBarry Smith {
3501b266c99SBarry Smith   matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr);
3511b266c99SBarry Smith }
3521b266c99SBarry Smith 
3533b494cfeSSatish Balay PETSC_EXTERN void PETSC_STDCALL  matsetvalues0_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr )
3543b494cfeSSatish Balay {
3553b494cfeSSatish Balay   matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr);
3563b494cfeSSatish Balay }
3573b494cfeSSatish Balay 
3581b266c99SBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvaluesnn1_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr )
3591b266c99SBarry Smith {
3601b266c99SBarry Smith   matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr);
3611b266c99SBarry Smith }
3621b266c99SBarry Smith 
3634d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvalues11_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr )
3644d03fd2bSBarry Smith {
3654d03fd2bSBarry Smith   matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr);
3664d03fd2bSBarry Smith }
3674d03fd2bSBarry Smith 
3684d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvaluesn1_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr )
3694d03fd2bSBarry Smith {
3704d03fd2bSBarry Smith   matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr);
3714d03fd2bSBarry Smith }
3724d03fd2bSBarry Smith 
3734d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvalues1n_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr )
3744d03fd2bSBarry Smith {
3754d03fd2bSBarry Smith   matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr);
3764d03fd2bSBarry Smith }
3774d03fd2bSBarry Smith 
3784d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvalueslocal_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr )
3794d03fd2bSBarry Smith {
3804d03fd2bSBarry Smith   *ierr = MatSetValuesLocal(*mat,*nrow,irow,*ncol,icol,y,*addv);
3814d03fd2bSBarry Smith }
3824d03fd2bSBarry Smith 
3833b494cfeSSatish Balay PETSC_EXTERN void PETSC_STDCALL  matsetvalueslocal0_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr )
3843b494cfeSSatish Balay {
3853b494cfeSSatish Balay   matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr);
3863b494cfeSSatish Balay }
3873b494cfeSSatish Balay 
3884d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvalueslocal11_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr )
3894d03fd2bSBarry Smith {
3904d03fd2bSBarry Smith   matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr);
3914d03fd2bSBarry Smith }
3924d03fd2bSBarry Smith 
3934d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvalueslocal11nn_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr )
3944d03fd2bSBarry Smith {
3954d03fd2bSBarry Smith   matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr);
3964d03fd2bSBarry Smith }
3974d03fd2bSBarry Smith 
3984d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvalueslocal111_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr )
3994d03fd2bSBarry Smith {
4004d03fd2bSBarry Smith   matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr);
4014d03fd2bSBarry Smith }
4024d03fd2bSBarry Smith 
4034d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvalueslocal1n_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr )
4044d03fd2bSBarry Smith {
4054d03fd2bSBarry Smith   matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr);
4064d03fd2bSBarry Smith }
4074d03fd2bSBarry Smith 
4084d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvalueslocaln1_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr )
4094d03fd2bSBarry Smith {
4104d03fd2bSBarry Smith   matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr);
4114d03fd2bSBarry Smith }
4124d03fd2bSBarry Smith 
41387bcf4e0SBarry Smith PETSC_EXTERN void PETSC_STDCALL  matgetrowmin_(Mat *mat,Vec *v,PetscInt idx[], int *ierr )
41487bcf4e0SBarry Smith {
41587bcf4e0SBarry Smith   CHKFORTRANNULLINTEGER(idx);
41687bcf4e0SBarry Smith   *ierr = MatGetRowMin(*mat,*v,idx);
41787bcf4e0SBarry Smith }
4184d03fd2bSBarry Smith 
41987bcf4e0SBarry Smith PETSC_EXTERN void PETSC_STDCALL  matgetrowminabs_(Mat *mat,Vec *v,PetscInt idx[], int *ierr )
42087bcf4e0SBarry Smith {
42187bcf4e0SBarry Smith   CHKFORTRANNULLINTEGER(idx);
42287bcf4e0SBarry Smith   *ierr = MatGetRowMinAbs(*mat,*v,idx);
42387bcf4e0SBarry Smith }
42487bcf4e0SBarry Smith 
4255928be6bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matgetrowmax_(Mat *mat,Vec *v,PetscInt idx[], int *ierr )
4265928be6bSBarry Smith {
4275928be6bSBarry Smith   CHKFORTRANNULLINTEGER(idx);
4285928be6bSBarry Smith   *ierr = MatGetRowMax(*mat,*v,idx);
4295928be6bSBarry Smith }
4305928be6bSBarry Smith 
4315928be6bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matgetrowmaxabs_(Mat *mat,Vec *v,PetscInt idx[], int *ierr )
4325928be6bSBarry Smith {
4335928be6bSBarry Smith   CHKFORTRANNULLINTEGER(idx);
4345928be6bSBarry Smith   *ierr = MatGetRowMaxAbs(*mat,*v,idx);
4355928be6bSBarry Smith }
4365928be6bSBarry Smith 
437b22b330cSBarry Smith static PetscErrorCode ournullfunction(MatNullSpace sp,Vec x,void *ctx)
438b22b330cSBarry Smith {
439b22b330cSBarry Smith   PetscErrorCode ierr = 0;
440b22b330cSBarry Smith   (*(void (PETSC_STDCALL *)(MatNullSpace*,Vec*,void*,PetscErrorCode*))(((PetscObject)sp)->fortran_func_pointers[0]))(&sp,&x,ctx,&ierr);CHKERRQ(ierr);
441b22b330cSBarry Smith   return 0;
442b22b330cSBarry Smith }
443b22b330cSBarry Smith 
4448cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matnullspacesetfunction_(MatNullSpace *sp, PetscErrorCode (*rem)(MatNullSpace,Vec,void*),void *ctx,PetscErrorCode *ierr)
445b22b330cSBarry Smith {
446b22b330cSBarry Smith   PetscObjectAllocateFortranPointers(*sp,1);
447b22b330cSBarry Smith   ((PetscObject)*sp)->fortran_func_pointers[0] = (PetscVoidFunction)rem;
44826fbe8dcSKarl Rupp 
449b22b330cSBarry Smith   *ierr = MatNullSpaceSetFunction(*sp,ournullfunction,ctx);
450b22b330cSBarry Smith }
451b22b330cSBarry Smith 
452d2da0f5dSBarry Smith PETSC_EXTERN void PETSC_STDCALL matcreatevecs_(Mat *mat,Vec *right,Vec *left, int *ierr)
4537c54600cSBarry Smith {
4547c54600cSBarry Smith   CHKFORTRANNULLOBJECT(right);
4557c54600cSBarry Smith   CHKFORTRANNULLOBJECT(left);
4562a7a6963SBarry Smith   *ierr = MatCreateVecs(*mat,right,left);
4577c54600cSBarry Smith }
4587c54600cSBarry Smith 
4598cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matgetrowij_(Mat *B,PetscInt *shift,PetscBool *sym,PetscBool *blockcompressed,PetscInt *n,PetscInt *ia,size_t *iia,
460ace3abfcSBarry Smith                                 PetscInt *ja,size_t *jja,PetscBool  *done,PetscErrorCode *ierr)
461f4e70085SSatish Balay {
4621a83f524SJed Brown   const PetscInt *IA,*JA;
4638f7157efSSatish Balay   *ierr = MatGetRowIJ(*B,*shift,*sym,*blockcompressed,n,&IA,&JA,done);if (*ierr) return;
4641a83f524SJed Brown   *iia  = PetscIntAddressToFortran(ia,(PetscInt*)IA);
4651a83f524SJed Brown   *jja  = PetscIntAddressToFortran(ja,(PetscInt*)JA);
466f4e70085SSatish Balay }
467f4e70085SSatish Balay 
4688cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matrestorerowij_(Mat *B,PetscInt *shift,PetscBool *sym,PetscBool *blockcompressed, PetscInt *n,PetscInt *ia,size_t *iia,
469ace3abfcSBarry Smith                                     PetscInt *ja,size_t *jja,PetscBool  *done,PetscErrorCode *ierr)
470f4e70085SSatish Balay {
4711a83f524SJed Brown   const PetscInt *IA = PetscIntAddressFromFortran(ia,*iia),*JA = PetscIntAddressFromFortran(ja,*jja);
4728f7157efSSatish Balay   *ierr = MatRestoreRowIJ(*B,*shift,*sym,*blockcompressed,n,&IA,&JA,done);
473f4e70085SSatish Balay }
474f4e70085SSatish Balay 
475f4e70085SSatish Balay /*
476f4e70085SSatish Balay    This is a poor way of storing the column and value pointers
477f4e70085SSatish Balay   generated by MatGetRow() to be returned with MatRestoreRow()
478f4e70085SSatish Balay   but there is not natural,good place else to store them. Hence
479f4e70085SSatish Balay   Fortran programmers can only have one outstanding MatGetRows()
480f4e70085SSatish Balay   at a time.
481f4e70085SSatish Balay */
482f4e70085SSatish Balay static PetscErrorCode    matgetrowactive = 0;
483f4e70085SSatish Balay static const PetscInt    *my_ocols       = 0;
484f4e70085SSatish Balay static const PetscScalar *my_ovals       = 0;
485f4e70085SSatish Balay 
4868cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matgetrow_(Mat *mat,PetscInt *row,PetscInt *ncols,PetscInt *cols,PetscScalar *vals,PetscErrorCode *ierr)
487f4e70085SSatish Balay {
488f4e70085SSatish Balay   const PetscInt    **oocols = &my_ocols;
489f4e70085SSatish Balay   const PetscScalar **oovals = &my_ovals;
490f4e70085SSatish Balay 
491f4e70085SSatish Balay   if (matgetrowactive) {
492efca3c55SSatish Balay     PetscError(PETSC_COMM_SELF,__LINE__,"MatGetRow_Fortran",__FILE__,PETSC_ERR_ARG_WRONGSTATE,PETSC_ERROR_INITIAL,
493f4e70085SSatish Balay                "Cannot have two MatGetRow() active simultaneously\n\
494f4e70085SSatish Balay                call MatRestoreRow() before calling MatGetRow() a second time");
495f4e70085SSatish Balay     *ierr = 1;
496f4e70085SSatish Balay     return;
497f4e70085SSatish Balay   }
498f4e70085SSatish Balay 
4990298fd71SBarry Smith   CHKFORTRANNULLINTEGER(cols); if (!cols) oocols = NULL;
5000298fd71SBarry Smith   CHKFORTRANNULLSCALAR(vals);  if (!vals) oovals = NULL;
501f4e70085SSatish Balay 
502f4e70085SSatish Balay   *ierr = MatGetRow(*mat,*row,ncols,oocols,oovals);
503f4e70085SSatish Balay   if (*ierr) return;
504f4e70085SSatish Balay 
505f4e70085SSatish Balay   if (oocols) { *ierr = PetscMemcpy(cols,my_ocols,(*ncols)*sizeof(PetscInt)); if (*ierr) return;}
506f4e70085SSatish Balay   if (oovals) { *ierr = PetscMemcpy(vals,my_ovals,(*ncols)*sizeof(PetscScalar)); if (*ierr) return;}
507f4e70085SSatish Balay   matgetrowactive = 1;
508f4e70085SSatish Balay }
509f4e70085SSatish Balay 
5108cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matrestorerow_(Mat *mat,PetscInt *row,PetscInt *ncols,PetscInt *cols,PetscScalar *vals,PetscErrorCode *ierr)
511f4e70085SSatish Balay {
512f4e70085SSatish Balay   const PetscInt    **oocols = &my_ocols;
513f4e70085SSatish Balay   const PetscScalar **oovals = &my_ovals;
514f4e70085SSatish Balay   if (!matgetrowactive) {
515efca3c55SSatish Balay     PetscError(PETSC_COMM_SELF,__LINE__,"MatRestoreRow_Fortran",__FILE__,PETSC_ERR_ARG_WRONGSTATE,PETSC_ERROR_INITIAL,
516f4e70085SSatish Balay                "Must call MatGetRow() first");
517f4e70085SSatish Balay     *ierr = 1;
518f4e70085SSatish Balay     return;
519f4e70085SSatish Balay   }
5200298fd71SBarry Smith   CHKFORTRANNULLINTEGER(cols); if (!cols) oocols = NULL;
5210298fd71SBarry Smith   CHKFORTRANNULLSCALAR(vals);  if (!vals) oovals = NULL;
522f4e70085SSatish Balay 
523f4e70085SSatish Balay   *ierr           = MatRestoreRow(*mat,*row,ncols,oocols,oovals);
524f4e70085SSatish Balay   matgetrowactive = 0;
525f4e70085SSatish Balay }
526f4e70085SSatish Balay 
5278cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matview_(Mat *mat,PetscViewer *vin,PetscErrorCode *ierr)
528f4e70085SSatish Balay {
529f4e70085SSatish Balay   PetscViewer v;
530f4e70085SSatish Balay   PetscPatchDefaultViewers_Fortran(vin,v);
531f4e70085SSatish Balay   *ierr = MatView(*mat,v);
532f4e70085SSatish Balay }
533f4e70085SSatish Balay 
5348cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matload_(Mat *mat,PetscViewer *vin,PetscErrorCode *ierr)
535f7e310deSShri Abhyankar {
536f7e310deSShri Abhyankar   PetscViewer v;
537f7e310deSShri Abhyankar   PetscPatchDefaultViewers_Fortran(vin,v);
538112444f4SShri Abhyankar   *ierr = MatLoad(*mat,v);
539f7e310deSShri Abhyankar }
540f7e310deSShri Abhyankar 
5418cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matseqaijgetarray_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr)
542f4e70085SSatish Balay {
543f4e70085SSatish Balay   PetscScalar *mm;
544f4e70085SSatish Balay   PetscInt    m,n;
545f4e70085SSatish Balay 
5468c778c55SBarry Smith   *ierr = MatSeqAIJGetArray(*mat,&mm); if (*ierr) return;
547f4e70085SSatish Balay   *ierr = MatGetSize(*mat,&m,&n);  if (*ierr) return;
548f91d1997SBarry Smith   *ierr = PetscScalarAddressToFortran((PetscObject)*mat,1,fa,mm,m*n,ia); if (*ierr) return;
549f4e70085SSatish Balay }
550f4e70085SSatish Balay 
5518cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matseqaijrestorearray_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr)
552f4e70085SSatish Balay {
553f4e70085SSatish Balay   PetscScalar *lx;
554f4e70085SSatish Balay   PetscInt    m,n;
555f4e70085SSatish Balay 
556f4e70085SSatish Balay   *ierr = MatGetSize(*mat,&m,&n); if (*ierr) return;
557f4e70085SSatish Balay   *ierr = PetscScalarAddressFromFortran((PetscObject)*mat,fa,*ia,m*n,&lx);if (*ierr) return;
5588c778c55SBarry Smith   *ierr = MatSeqAIJRestoreArray(*mat,&lx);if (*ierr) return;
559f4e70085SSatish Balay }
560f4e70085SSatish Balay 
5618cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matdensegetarray_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr)
56273a71a0fSBarry Smith {
56373a71a0fSBarry Smith   PetscScalar *mm;
56473a71a0fSBarry Smith   PetscInt    m,n;
56573a71a0fSBarry Smith 
5668c778c55SBarry Smith   *ierr = MatDenseGetArray(*mat,&mm); if (*ierr) return;
56773a71a0fSBarry Smith   *ierr = MatGetSize(*mat,&m,&n);  if (*ierr) return;
56873a71a0fSBarry Smith   *ierr = PetscScalarAddressToFortran((PetscObject)*mat,1,fa,mm,m*n,ia); if (*ierr) return;
56973a71a0fSBarry Smith }
57073a71a0fSBarry Smith 
5718cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matdenserestorearray_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr)
57273a71a0fSBarry Smith {
57373a71a0fSBarry Smith   PetscScalar *lx;
57473a71a0fSBarry Smith   PetscInt    m,n;
57573a71a0fSBarry Smith 
57673a71a0fSBarry Smith   *ierr = MatGetSize(*mat,&m,&n); if (*ierr) return;
57773a71a0fSBarry Smith   *ierr = PetscScalarAddressFromFortran((PetscObject)*mat,fa,*ia,m*n,&lx);if (*ierr) return;
5788c778c55SBarry Smith   *ierr = MatDenseRestoreArray(*mat,&lx);if (*ierr) return;
57973a71a0fSBarry Smith }
58073a71a0fSBarry Smith 
5817067c7f7SBarry Smith PETSC_EXTERN void PETSC_STDCALL matdensegetarrayread_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr)
5828572280aSBarry Smith {
5837067c7f7SBarry Smith   const PetscScalar *mm;
5848572280aSBarry Smith   PetscInt         m,n;
5858572280aSBarry Smith 
5868572280aSBarry Smith   *ierr = MatDenseGetArrayRead(*mat,&mm); if (*ierr) return;
5878572280aSBarry Smith   *ierr = MatGetSize(*mat,&m,&n);  if (*ierr) return;
5887067c7f7SBarry Smith   *ierr = PetscScalarAddressToFortran((PetscObject)*mat,1,fa,(PetscScalar*)mm,m*n,ia); if (*ierr) return;
5898572280aSBarry Smith }
5908572280aSBarry Smith 
5917067c7f7SBarry Smith 
5927067c7f7SBarry Smith PETSC_EXTERN void PETSC_STDCALL matdenserestorearrayread_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr)
5938572280aSBarry Smith {
5947067c7f7SBarry Smith   const PetscScalar *lx;
5958572280aSBarry Smith   PetscInt          m,n;
5968572280aSBarry Smith 
5978572280aSBarry Smith   *ierr = MatGetSize(*mat,&m,&n); if (*ierr) return;
5987067c7f7SBarry Smith   *ierr = PetscScalarAddressFromFortran((PetscObject)*mat,fa,*ia,m*n,(PetscScalar**)&lx);if (*ierr) return;
5998572280aSBarry Smith   *ierr = MatDenseRestoreArrayRead(*mat,&lx);if (*ierr) return;
6008572280aSBarry Smith }
6018572280aSBarry Smith 
602390e1bf2SBarry Smith PETSC_EXTERN void PETSC_STDCALL matfactorgetsolverpackage_(Mat *mat,char* name PETSC_MIXED_LEN(len),PetscErrorCode *ierr PETSC_END_LEN(len))
60335bd34faSBarry Smith {
60435bd34faSBarry Smith   const char *tname;
60535bd34faSBarry Smith 
6063ca39a21SBarry Smith   *ierr = MatFactorGetSolverType(*mat,&tname);if (*ierr) return;
60735bd34faSBarry Smith   if (name != PETSC_NULL_CHARACTER_Fortran) {
60835bd34faSBarry Smith     *ierr = PetscStrncpy(name,tname,len);if (*ierr) return;
60935bd34faSBarry Smith   }
61035bd34faSBarry Smith   FIXRETURNCHAR(PETSC_TRUE,name,len);
61135bd34faSBarry Smith }
61235bd34faSBarry Smith 
613390e1bf2SBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetfactor_(Mat *mat,char* outtype PETSC_MIXED_LEN(len),MatFactorType *ftype,Mat *M,PetscErrorCode *ierr PETSC_END_LEN(len))
6145dffd610SBarry Smith {
6155dffd610SBarry Smith   char *t;
6165dffd610SBarry Smith   FIXCHAR(outtype,len,t);
617d49bb8f9SBarry Smith   *ierr = MatGetFactor(*mat,t,*ftype,M);if (*ierr) return;
6185dffd610SBarry Smith   FREECHAR(outtype,t);
6195dffd610SBarry Smith }
6205dffd610SBarry Smith 
621390e1bf2SBarry Smith PETSC_EXTERN void PETSC_STDCALL matconvert_(Mat *mat,char* outtype PETSC_MIXED_LEN(len),MatReuse *reuse,Mat *M,PetscErrorCode *ierr PETSC_END_LEN(len))
622f4e70085SSatish Balay {
623f4e70085SSatish Balay   char *t;
624f4e70085SSatish Balay   FIXCHAR(outtype,len,t);
625d49bb8f9SBarry Smith   *ierr = MatConvert(*mat,t,*reuse,M);if (*ierr) return;
626f4e70085SSatish Balay   FREECHAR(outtype,t);
627f4e70085SSatish Balay }
628f4e70085SSatish Balay 
629f4e70085SSatish Balay /*
6307dae84e0SHong Zhang     MatCreateSubmatrices() is slightly different from C since the
631f4e70085SSatish Balay     Fortran provides the array to hold the submatrix objects,while in C that
6327dae84e0SHong Zhang     array is allocated by the MatCreateSubmatrices()
633f4e70085SSatish Balay */
6347dae84e0SHong Zhang PETSC_EXTERN void PETSC_STDCALL matcreatesubmatrices_(Mat *mat,PetscInt *n,IS *isrow,IS *iscol,MatReuse *scall,Mat *smat,PetscErrorCode *ierr)
635f4e70085SSatish Balay {
636f4e70085SSatish Balay   Mat      *lsmat;
637f4e70085SSatish Balay   PetscInt i;
638f4e70085SSatish Balay 
639f4e70085SSatish Balay   if (*scall == MAT_INITIAL_MATRIX) {
6407dae84e0SHong Zhang     *ierr = MatCreateSubMatrices(*mat,*n,isrow,iscol,*scall,&lsmat);
641de7ef04eSHong Zhang     for (i=0; i<=*n; i++) { /* lsmat[*n] might be a dummy matrix for saving data struc */
642f4e70085SSatish Balay       smat[i] = lsmat[i];
643f4e70085SSatish Balay     }
644f4e70085SSatish Balay     *ierr = PetscFree(lsmat);
645f4e70085SSatish Balay   } else {
6467dae84e0SHong Zhang     *ierr = MatCreateSubMatrices(*mat,*n,isrow,iscol,*scall,&smat);
647f4e70085SSatish Balay   }
648f4e70085SSatish Balay }
649f4e70085SSatish Balay 
6507d6bfa3bSBarry Smith /*
6517d6bfa3bSBarry Smith     MatDestroyMatrices() is slightly different from C since the
652de7ef04eSHong Zhang     Fortran does not free the array of matrix objects, while in C that
653de7ef04eSHong Zhang     the array is freed
654de7ef04eSHong Zhang */
655de7ef04eSHong Zhang PETSC_EXTERN void PETSC_STDCALL matdestroymatrices_(PetscInt *n,Mat *smat,PetscErrorCode *ierr)
656de7ef04eSHong Zhang {
657de7ef04eSHong Zhang   PetscInt i;
658de7ef04eSHong Zhang 
659de7ef04eSHong Zhang   for (i=0; i<*n; i++) {
660de7ef04eSHong Zhang     *ierr = MatDestroy(&smat[i]);if (*ierr) return;
661de7ef04eSHong Zhang   }
662de7ef04eSHong Zhang }
663de7ef04eSHong Zhang 
664de7ef04eSHong Zhang /*
665de7ef04eSHong Zhang     MatDestroySubMatrices() is slightly different from C since the
6667d6bfa3bSBarry Smith     Fortran provides the array to hold the submatrix objects, while in C that
6677dae84e0SHong Zhang     array is allocated by the MatCreateSubmatrices()
6687d6bfa3bSBarry Smith */
669de7ef04eSHong Zhang PETSC_EXTERN void PETSC_STDCALL matdestroysubmatrices_(PetscInt *n,Mat *smat,PetscErrorCode *ierr)
6707d6bfa3bSBarry Smith {
671de7ef04eSHong Zhang   Mat      *lsmat;
6727d6bfa3bSBarry Smith   PetscInt i;
6737d6bfa3bSBarry Smith 
674de7ef04eSHong Zhang   *ierr = PetscMalloc1(*n+1,&lsmat);
675de7ef04eSHong Zhang   for (i=0; i<=*n; i++) {
676de7ef04eSHong Zhang       lsmat[i] = smat[i];
6777d6bfa3bSBarry Smith   }
678de7ef04eSHong Zhang   *ierr = MatDestroySubMatrices(*n,&lsmat);
679df750dc8SHong Zhang }
680df750dc8SHong Zhang 
681390e1bf2SBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetoptionsprefix_(Mat *mat,char* prefix PETSC_MIXED_LEN(len),PetscErrorCode *ierr PETSC_END_LEN(len))
6821eea217eSSatish Balay {
6831eea217eSSatish Balay   char *t;
6841eea217eSSatish Balay 
6851eea217eSSatish Balay   FIXCHAR(prefix,len,t);
686d49bb8f9SBarry Smith   *ierr = MatSetOptionsPrefix(*mat,t);if (*ierr) return;
6871eea217eSSatish Balay   FREECHAR(prefix,t);
6881eea217eSSatish Balay }
6891eea217eSSatish Balay 
690d0195637SJed Brown PETSC_EXTERN void PETSC_STDCALL matnullspaceremove_(MatNullSpace *sp,Vec *vec,PetscErrorCode *ierr)
691812c3f48SMatthew Knepley {
692260663b8SBarry Smith   CHKFORTRANNULLOBJECT(*sp)
693d0195637SJed Brown   *ierr = MatNullSpaceRemove(*sp,*vec);
694812c3f48SMatthew Knepley }
6951eea217eSSatish Balay 
6964d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetinfo_(Mat *mat,MatInfoType *flag,MatInfo *info, int *ierr)
6975ba43861SSatish Balay {
6984d03fd2bSBarry Smith   *ierr = MatGetInfo(*mat,*flag,info);
6995ba43861SSatish Balay }
7005ba43861SSatish Balay 
7014d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matlufactor_(Mat *mat,IS *row,IS *col,const MatFactorInfo *info, int *ierr)
70222688b47SSatish Balay {
7034d03fd2bSBarry Smith   *ierr = MatLUFactor(*mat,*row,*col,info);
70422688b47SSatish Balay }
70522688b47SSatish Balay 
7064d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matilufactor_(Mat *mat,IS *row,IS *col,const MatFactorInfo *info, int *ierr)
70722688b47SSatish Balay {
7084d03fd2bSBarry Smith   *ierr = MatILUFactor(*mat,*row,*col,info);
70922688b47SSatish Balay }
71022688b47SSatish Balay 
7114d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matlufactorsymbolic_(Mat *fact,Mat *mat,IS *row,IS *col,const MatFactorInfo *info, int *ierr)
71222688b47SSatish Balay {
7134d03fd2bSBarry Smith   *ierr = MatLUFactorSymbolic(*fact,*mat,*row,*col,info);
71422688b47SSatish Balay }
71522688b47SSatish Balay 
7164d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matlufactornumeric_(Mat *fact,Mat *mat,const MatFactorInfo *info, int *ierr)
71722688b47SSatish Balay {
7184d03fd2bSBarry Smith   *ierr = MatLUFactorNumeric(*fact,*mat,info);
71922688b47SSatish Balay }
72022688b47SSatish Balay 
7214d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matcholeskyfactor_(Mat *mat,IS *perm,const MatFactorInfo *info, int *ierr)
72222688b47SSatish Balay {
7234d03fd2bSBarry Smith   *ierr = MatCholeskyFactor(*mat,*perm,info);
72422688b47SSatish Balay }
72522688b47SSatish Balay 
7264d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matcholeskyfactorsymbolic_(Mat *fact,Mat *mat,IS *perm,const MatFactorInfo *info, int *ierr)
72722688b47SSatish Balay {
7284d03fd2bSBarry Smith   *ierr = MatCholeskyFactorSymbolic(*fact,*mat,*perm,info);
72922688b47SSatish Balay }
73022688b47SSatish Balay 
7314d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matcholeskyfactornumeric_(Mat *fact,Mat *mat,const MatFactorInfo *info, int *ierr)
73222688b47SSatish Balay {
7334d03fd2bSBarry Smith   *ierr = MatCholeskyFactorNumeric(*fact,*mat,info);
73422688b47SSatish Balay }
73522688b47SSatish Balay 
7364d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matilufactorsymbolic_(Mat *fact,Mat *mat,IS *row,IS *col,const MatFactorInfo *info, int *ierr)
73722688b47SSatish Balay {
7384d03fd2bSBarry Smith   *ierr = MatILUFactorSymbolic(*fact,*mat,*row,*col,info);
73922688b47SSatish Balay }
74022688b47SSatish Balay 
7414d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL maticcfactorsymbolic_(Mat *fact,Mat *mat,IS *perm,const MatFactorInfo *info, int *ierr)
74222688b47SSatish Balay {
7434d03fd2bSBarry Smith   *ierr = MatICCFactorSymbolic(*fact,*mat,*perm,info);
74422688b47SSatish Balay }
74522688b47SSatish Balay 
7464d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL maticcfactor_(Mat *mat,IS *row,const MatFactorInfo *info, int *ierr)
74722688b47SSatish Balay {
7484d03fd2bSBarry Smith   *ierr = MatICCFactor(*mat,*row,info);
74922688b47SSatish Balay }
75022688b47SSatish Balay 
7514d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matfactorinfoinitialize_(MatFactorInfo *info, int *ierr)
75222688b47SSatish Balay {
7534d03fd2bSBarry Smith   *ierr = MatFactorInfoInitialize(info);
75422688b47SSatish Balay }
755d27e6124SSatish Balay PETSC_EXTERN void PETSC_STDCALL  matzerorowslocal_(Mat *mat,PetscInt *numRows, PetscInt rows[],PetscScalar *diag,Vec *x,Vec *b, int *ierr)
756d27e6124SSatish Balay {
757d27e6124SSatish Balay   *ierr = MatZeroRowsLocal(*mat,*numRows,rows,*diag,*x,*b);
758d27e6124SSatish Balay }
759d27e6124SSatish Balay PETSC_EXTERN void PETSC_STDCALL  matzerorowslocal0_(Mat *mat,PetscInt *numRows, PetscInt rows[],PetscScalar *diag,Vec *x,Vec *b, int *ierr)
760d27e6124SSatish Balay {
761d27e6124SSatish Balay   matzerorowslocal_(mat,numRows,rows,diag,x,b,ierr);
762d27e6124SSatish Balay }
763d27e6124SSatish Balay PETSC_EXTERN void PETSC_STDCALL  matzerorowslocal1_(Mat *mat,PetscInt *numRows, PetscInt rows[],PetscScalar *diag,Vec *x,Vec *b, int *ierr)
764d27e6124SSatish Balay {
765d27e6124SSatish Balay   matzerorowslocal_(mat,numRows,rows,diag,x,b,ierr);
766d27e6124SSatish Balay }
767