xref: /petsc/src/mat/interface/ftn-custom/zmatrixf.c (revision 3be0408ca14ca3b174df41a89596ca319fd79311)
1af0996ceSBarry Smith #include <petsc/private/fortranimpl.h>
2c6db04a5SJed Brown #include <petscmat.h>
3665c2dedSJed Brown #include <petscviewer.h>
4f4e70085SSatish Balay 
5f4e70085SSatish Balay #if defined(PETSC_HAVE_FORTRAN_CAPS)
64d03fd2bSBarry Smith #define matsetvalues_                    MATSETVALUES
71006886cSSatish Balay #define matsetvaluesnnnn_                MATSETVALUESNNNN
83b494cfeSSatish Balay #define matsetvalues0_                   MATSETVALUES0
91b266c99SBarry Smith #define matsetvaluesnn1_                 MATSETVALUESNN1
104d03fd2bSBarry Smith #define matsetvalues11_                  MATSETVALUES11
114d03fd2bSBarry Smith #define matsetvalues1n_                  MATSETVALUES1N
124d03fd2bSBarry Smith #define matsetvaluesn1_                  MATSETVALUESN1
133b494cfeSSatish Balay #define matsetvaluesblocked0_            MATSETVALUESBLOCKED0
144d03fd2bSBarry Smith #define matsetvaluesblocked11_           MATSETVALUESBLOCKED11
154d03fd2bSBarry Smith #define matsetvaluesblocked111_          MATSETVALUESBLOCKED111
164d03fd2bSBarry Smith #define matsetvaluesblocked1n_           MATSETVALUESBLOCKED1N
174d03fd2bSBarry Smith #define matsetvaluesblockedn1_           MATSETVALUESBLOCKEDN1
184d03fd2bSBarry Smith #define matsetvaluesblockedlocal_        MATSETVALUESBLOCKEDLOCAL
193b494cfeSSatish Balay #define matsetvaluesblockedlocal0_       MATSETVALUESBLOCKEDLOCAL0
204d03fd2bSBarry Smith #define matsetvaluesblockedlocal11_      MATSETVALUESBLOCKEDLOCAL11
214d03fd2bSBarry Smith #define matsetvaluesblockedlocal111_     MATSETVALUESBLOCKEDLOCAL111
224d03fd2bSBarry Smith #define matsetvaluesblockedlocal1n_      MATSETVALUESBLOCKEDLOCAL1N
234d03fd2bSBarry Smith #define matsetvaluesblockedlocaln1_      MATSETVALUESBLOCKEDLOCALN1
244d03fd2bSBarry Smith #define matsetvalueslocal_               MATSETVALUESLOCAL
253b494cfeSSatish Balay #define matsetvalueslocal0_              MATSETVALUESLOCAL0
264d03fd2bSBarry Smith #define matsetvalueslocal11_             MATSETVALUESLOCAL11
274d03fd2bSBarry Smith #define matsetvalueslocal11nn_           MATSETVALUESLOCAL11NN
284d03fd2bSBarry Smith #define matsetvalueslocal111_            MATSETVALUESLOCAL111
294d03fd2bSBarry Smith #define matsetvalueslocal1n_             MATSETVALUESLOCAL1N
304d03fd2bSBarry Smith #define matsetvalueslocaln1_             MATSETVALUESLOCALN1
3187bcf4e0SBarry Smith #define matgetrowmin_                    MATGETROWMIN
3287bcf4e0SBarry Smith #define matgetrowminabs_                 MATGETROWMINABS
335928be6bSBarry Smith #define matgetrowmax_                    MATGETROWMAX
345928be6bSBarry Smith #define matgetrowmaxabs_                 MATGETROWMAXABS
357d6bfa3bSBarry Smith #define matdestroymatrices_              MATDESTROYMATRICES
365dffd610SBarry Smith #define matgetfactor_                    MATGETFACTOR
3735bd34faSBarry Smith #define matfactorgetsolverpackage_       MATFACTORGETSOLVERPACKAGE
38f4e70085SSatish Balay #define matgetrowij_                     MATGETROWIJ
39f4e70085SSatish Balay #define matrestorerowij_                 MATRESTOREROWIJ
40f4e70085SSatish Balay #define matgetrow_                       MATGETROW
41f4e70085SSatish Balay #define matrestorerow_                   MATRESTOREROW
42f7e310deSShri Abhyankar #define matload_                         MATLOAD
43f4e70085SSatish Balay #define matview_                         MATVIEW
448c778c55SBarry Smith #define matseqaijgetarray_               MATSEQAIJGETARRAY
456778691eSSatish Balay #define matseqaijrestorearray_           MATSEQAIJRESTOREARRAY
468c778c55SBarry Smith #define matdensegetarray_                MATDENSEGETARRAY
478c778c55SBarry Smith #define matdenserestorearray_            MATDENSERESTOREARRAY
48f4e70085SSatish Balay #define matconvert_                      MATCONVERT
49f4e70085SSatish Balay #define matgetsubmatrices_               MATGETSUBMATRICES
5017ede90eSSatish Balay #define matzerorowscolumns_              MATZEROROWSCOLUMNS
5117ede90eSSatish Balay #define matzerorowscolumnsis_            MATZEROROWSCOLUMNSIS
5217ede90eSSatish Balay #define matzerorowsstencil_              MATZEROROWSSTENCIL
53d25a37e1SJed Brown #define matzerorowscolumnsstencil_       MATZEROROWSCOLUMNSSTENCIL
54f4e70085SSatish Balay #define matzerorows_                     MATZEROROWS
55f4e70085SSatish Balay #define matzerorowsis_                   MATZEROROWSIS
56f4e70085SSatish Balay #define matzerorowslocal_                MATZEROROWSLOCAL
57f4e70085SSatish Balay #define matzerorowslocalis_              MATZEROROWSLOCALIS
5817ede90eSSatish Balay #define matzerorowscolumnslocal_         MATZEROROWSCOLUMNSLOCAL
5917ede90eSSatish Balay #define matzerorowscolumnslocalis_       MATZEROROWSCOLUMNSLOCALIS
601eea217eSSatish Balay #define matsetoptionsprefix_             MATSETOPTIONSPREFIX
61fcc9d04bSBarry Smith #define matcreatevecs_                   MATCREATEVECS
62c9d5ca86SBarry Smith #define matnullspaceremove_              MATNULLSPACEREMOVE
635ba43861SSatish Balay #define matgetinfo_                      MATGETINFO
6422688b47SSatish Balay #define matlufactor_                     MATLUFACTOR
6522688b47SSatish Balay #define matilufactor_                    MATILUFACTOR
6622688b47SSatish Balay #define matlufactorsymbolic_             MATLUFACTORSYMBOLIC
6722688b47SSatish Balay #define matlufactornumeric_              MATLUFACTORNUMERIC
6822688b47SSatish Balay #define matcholeskyfactor_               MATCHOLESKYFACTOR
6922688b47SSatish Balay #define matcholeskyfactorsymbolic_       MATCHOLESKYFACTORSYMBOLIC
7022688b47SSatish Balay #define matcholeskyfactornumeric_        MATCHOLESKYFACTORNUMERIC
7122688b47SSatish Balay #define matilufactorsymbolic_            MATILUFACTORSYMBOLIC
7222688b47SSatish Balay #define maticcfactorsymbolic_            MATICCFACTORSYMBOLIC
7322688b47SSatish Balay #define maticcfactor_                    MATICCFACTOR
7422688b47SSatish Balay #define matfactorinfoinitialize_         MATFACTORINFOINITIALIZE
75b22b330cSBarry Smith #define matnullspacesetfunction_         MATNULLSPACESETFUNCTION
760905d9aaSJed Brown #define matfindnonzerorows_              MATFINDNONZEROROWS
77*3be0408cSBarry Smith #define matgetsize00_                    MATGETSIZE00
78*3be0408cSBarry Smith #define matgetsize10_                    MATGETSIZE10
79*3be0408cSBarry Smith #define matgetsize01_                    MATGETSIZE01
80*3be0408cSBarry Smith #define matgetlocalsize00_               MATGETLOCALSIZE00
81*3be0408cSBarry Smith #define matgetlocalsize10_               MATGETLOCALSIZE10
82*3be0408cSBarry Smith #define matgetlocalsize01_               MATGETLOCALSIZE01
83f4e70085SSatish Balay #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE)
844d03fd2bSBarry Smith #define matsetvalues_                    matsetvalues
851006886cSSatish Balay #define matsetvaluesnnnn_                matsetvaluesnnnn
863b494cfeSSatish Balay #define matsetvalues0_                   matsetvalues0
871b266c99SBarry Smith #define matsetvaluesnn1_                 matsetvaluesnn1
884d03fd2bSBarry Smith #define matsetvalues11_                  matsetvalues11
894d03fd2bSBarry Smith #define matsetvaluesn1_                  matsetvaluesn1
904d03fd2bSBarry Smith #define matsetvalues1n_                  matsetvalues1n
914d03fd2bSBarry Smith #define matsetvalueslocal_               matsetvalueslocal
923b494cfeSSatish Balay #define matsetvalueslocal0_              matsetvalueslocal0
934d03fd2bSBarry Smith #define matsetvalueslocal11_             matsetvalueslocal11
944d03fd2bSBarry Smith #define matsetvalueslocal11nn_           matsetvalueslocal11nn
954d03fd2bSBarry Smith #define matsetvalueslocal111_            matsetvalueslocal111
964d03fd2bSBarry Smith #define matsetvalueslocal1n_             matsetvalueslocal1n
974d03fd2bSBarry Smith #define matsetvalueslocaln1_             matsetvalueslocaln1
984d03fd2bSBarry Smith #define matsetvaluesblocked_             matsetvaluesblocked
993b494cfeSSatish Balay #define matsetvaluesblocked0_            matsetvaluesblocked0
1004d03fd2bSBarry Smith #define matsetvaluesblocked11_           matsetvaluesblocked11
1014d03fd2bSBarry Smith #define matsetvaluesblocked111_          matsetvaluesblocked111
1024d03fd2bSBarry Smith #define matsetvaluesblocked1n_           matsetvaluesblocked1n
1034d03fd2bSBarry Smith #define matsetvaluesblocked1n_           matsetvaluesblockedn1
1044d03fd2bSBarry Smith #define matsetvaluesblockedlocal_        matsetvaluesblockedlocal
1053b494cfeSSatish Balay #define matsetvaluesblockedlocal0_       matsetvaluesblockedlocal0
1064d03fd2bSBarry Smith #define matsetvaluesblockedlocal11_      matsetvaluesblockedlocal11
1074d03fd2bSBarry Smith #define matsetvaluesblockedlocal111_     matsetvaluesblockedlocal111
1084d03fd2bSBarry Smith #define matsetvaluesblockedlocal1n_      matsetvaluesblockedlocal1n
1094d03fd2bSBarry Smith #define matsetvaluesblockedlocal1n_      matsetvaluesblockedlocaln1
11087bcf4e0SBarry Smith #define matgetrowmin_                    matgetrowmin
11187bcf4e0SBarry Smith #define matgetrowminabs_                 matgetrowminabs
1125928be6bSBarry Smith #define matgetrowmax_                    matgetrowmax
1135928be6bSBarry Smith #define matgetrowmaxabs_                 matgetrowmaxabs
1145928be6bSBarry Smith #define matdestroymatrices_              matdestroymatrices
1155dffd610SBarry Smith #define matgetfactor_                    matgetfactor
11635bd34faSBarry Smith #define matfactorgetsolverpackage_       matfactorgetsolverpackage
117fcc9d04bSBarry Smith #define matcreatevecs_                   matcreatevecs
118f4e70085SSatish Balay #define matgetrowij_                     matgetrowij
119f4e70085SSatish Balay #define matrestorerowij_                 matrestorerowij
120f4e70085SSatish Balay #define matgetrow_                       matgetrow
121f4e70085SSatish Balay #define matrestorerow_                   matrestorerow
122f4e70085SSatish Balay #define matview_                         matview
123f7e310deSShri Abhyankar #define matload_                         matload
1248c778c55SBarry Smith #define matseqaijgetarray_               matseqaijgetarray
1258c778c55SBarry Smith #define matseqaijrestorearray_           matseqaijrestorearray
1268c778c55SBarry Smith #define matdensegetarray_                matdensegetarray
1278c778c55SBarry Smith #define matdenserestorearray_            matdenserestorearray
128f4e70085SSatish Balay #define matconvert_                      matconvert
129f4e70085SSatish Balay #define matgetsubmatrices_               matgetsubmatrices
13017ede90eSSatish Balay #define matzerorowscolumns_              matzerorowscolumns
13117ede90eSSatish Balay #define matzerorowscolumnsis_            matzerorowscolumnsis
13217ede90eSSatish Balay #define matzerorowsstencil_              matzerorowsstencil
133d25a37e1SJed Brown #define matzerorowscolumnsstencil_       matzerorowscolumnsstencil
134f4e70085SSatish Balay #define matzerorows_                     matzerorows
135f4e70085SSatish Balay #define matzerorowsis_                   matzerorowsis
136f4e70085SSatish Balay #define matzerorowslocal_                matzerorowslocal
137f4e70085SSatish Balay #define matzerorowslocalis_              matzerorowslocalis
13817ede90eSSatish Balay #define matzerorowscolumnslocal_         matzerorowscolumnslocal
13917ede90eSSatish Balay #define matzerorowscolumnslocalis_       matzerorowscolumnslocalis
1401eea217eSSatish Balay #define matsetoptionsprefix_             matsetoptionsprefix
141812c3f48SMatthew Knepley #define matnullspaceremove_              matnullspaceremove
1425ba43861SSatish Balay #define matgetinfo_                      matgetinfo
14322688b47SSatish Balay #define matlufactor_                     matlufactor
14422688b47SSatish Balay #define matilufactor_                    matilufactor
14522688b47SSatish Balay #define matlufactorsymbolic_             matlufactorsymbolic
14622688b47SSatish Balay #define matlufactornumeric_              matlufactornumeric
14722688b47SSatish Balay #define matcholeskyfactor_               matcholeskyfactor
14822688b47SSatish Balay #define matcholeskyfactorsymbolic_       matcholeskyfactorsymbolic
14922688b47SSatish Balay #define matcholeskyfactornumeric_        matcholeskyfactornumeric
15022688b47SSatish Balay #define matilufactorsymbolic_            matilufactorsymbolic
15122688b47SSatish Balay #define maticcfactorsymbolic_            maticcfactorsymbolic
15222688b47SSatish Balay #define maticcfactor_                    maticcfactor
15322688b47SSatish Balay #define matfactorinfoinitialize_         matfactorinfoinitialize
154b22b330cSBarry Smith #define matnullspacesetfunction_         matnullspacesetfunction
1550905d9aaSJed Brown #define matfindnonzerorows_              matfindnonzerorows
156*3be0408cSBarry Smith #define matgetsize00_                    matgetsize00
157*3be0408cSBarry Smith #define matgetsize10_                    matgetsize10
158*3be0408cSBarry Smith #define matgetsize01_                    matgetsize01
159*3be0408cSBarry Smith #define matgetlocalsize00_               matgetlocalsize00
160*3be0408cSBarry Smith #define matgetlocalsize10_               matgetlocalsize10
161*3be0408cSBarry Smith #define matgetlocalsize01_               matgetlocalsize01
162f4e70085SSatish Balay #endif
163f4e70085SSatish Balay 
164*3be0408cSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matgetsize_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr )
165*3be0408cSBarry Smith {
166*3be0408cSBarry Smith   CHKFORTRANNULLINTEGER(m);
167*3be0408cSBarry Smith   CHKFORTRANNULLINTEGER(n);
168*3be0408cSBarry Smith   *ierr = MatGetSize(*mat,m,n);
169*3be0408cSBarry Smith }
170*3be0408cSBarry Smith 
171*3be0408cSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matgetsize00_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr )
172*3be0408cSBarry Smith {
173*3be0408cSBarry Smith   matgetsize_(mat,m,n,ierr);
174*3be0408cSBarry Smith }
175*3be0408cSBarry Smith 
176*3be0408cSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matgetsize10_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr )
177*3be0408cSBarry Smith {
178*3be0408cSBarry Smith   matgetsize_(mat,m,n,ierr);
179*3be0408cSBarry Smith }
180*3be0408cSBarry Smith 
181*3be0408cSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matgetsize01_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr )
182*3be0408cSBarry Smith {
183*3be0408cSBarry Smith   matgetsize_(mat,m,n,ierr);
184*3be0408cSBarry Smith }
185*3be0408cSBarry Smith 
186*3be0408cSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matgetlocalsize_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr )
187*3be0408cSBarry Smith {
188*3be0408cSBarry Smith   CHKFORTRANNULLINTEGER(m);
189*3be0408cSBarry Smith   CHKFORTRANNULLINTEGER(n);
190*3be0408cSBarry Smith   *ierr = MatGetLocalSize(*mat,m,n);
191*3be0408cSBarry Smith }
192*3be0408cSBarry Smith 
193*3be0408cSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matgetlocalsize00_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr )
194*3be0408cSBarry Smith {
195*3be0408cSBarry Smith   matgetlocalsize_(mat,m,n,ierr);
196*3be0408cSBarry Smith }
197*3be0408cSBarry Smith 
198*3be0408cSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matgetlocalsize10_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr )
199*3be0408cSBarry Smith {
200*3be0408cSBarry Smith   matgetlocalsize_(mat,m,n,ierr);
201*3be0408cSBarry Smith }
202*3be0408cSBarry Smith 
203*3be0408cSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matgetlocalsize01_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr )
204*3be0408cSBarry Smith {
205*3be0408cSBarry Smith   matgetlocalsize_(mat,m,n,ierr);
206*3be0408cSBarry Smith }
207*3be0408cSBarry Smith 
2084d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvaluesblocked_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){
2094d03fd2bSBarry Smith   *ierr = MatSetValuesBlocked(*mat,*m,idxm,*n,idxn,v,*addv);
2104d03fd2bSBarry Smith }
2114d03fd2bSBarry Smith 
2123b494cfeSSatish Balay PETSC_EXTERN void PETSC_STDCALL  matsetvaluesblocked0_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){
2133b494cfeSSatish Balay   matsetvaluesblocked_(mat,m,idxm,n,idxn,v,addv,ierr);
2143b494cfeSSatish Balay }
2153b494cfeSSatish Balay 
2164d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvaluesblocked11_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){
2174d03fd2bSBarry Smith   matsetvaluesblocked_(mat,m,idxm,n,idxn,v,addv,ierr);
2184d03fd2bSBarry Smith }
2194d03fd2bSBarry Smith 
2204d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvaluesblocked111_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){
2214d03fd2bSBarry Smith   matsetvaluesblocked_(mat,m,idxm,n,idxn,v,addv,ierr);
2224d03fd2bSBarry Smith }
2234d03fd2bSBarry Smith 
2244d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvaluesblocked1n_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){
2254d03fd2bSBarry Smith   matsetvaluesblocked_(mat,m,idxm,n,idxn,v,addv,ierr);
2264d03fd2bSBarry Smith }
2274d03fd2bSBarry Smith 
2284d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvaluesblockedn1_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){
2294d03fd2bSBarry Smith   matsetvaluesblocked_(mat,m,idxm,n,idxn,v,addv,ierr);
2304d03fd2bSBarry Smith }
2314d03fd2bSBarry Smith 
2324d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvaluesblockedlocal_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr )
2334d03fd2bSBarry Smith {
2344d03fd2bSBarry Smith   *ierr = MatSetValuesBlockedLocal(*mat,*nrow,irow,*ncol,icol,y,*addv);
2354d03fd2bSBarry Smith }
2364d03fd2bSBarry Smith 
2373b494cfeSSatish Balay PETSC_EXTERN void PETSC_STDCALL  matsetvaluesblockedlocal0_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){
2383b494cfeSSatish Balay   matsetvaluesblockedlocal_(mat,m,idxm,n,idxn,v,addv,ierr);
2393b494cfeSSatish Balay }
2403b494cfeSSatish Balay 
2414d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvaluesblockedlocal11_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){
2424d03fd2bSBarry Smith   matsetvaluesblockedlocal_(mat,m,idxm,n,idxn,v,addv,ierr);
2434d03fd2bSBarry Smith }
2444d03fd2bSBarry Smith 
2454d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvaluesblockedlocal111_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){
2464d03fd2bSBarry Smith   matsetvaluesblockedlocal_(mat,m,idxm,n,idxn,v,addv,ierr);
2474d03fd2bSBarry Smith }
2484d03fd2bSBarry Smith 
2494d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvaluesblockedlocal1n_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){
2504d03fd2bSBarry Smith   matsetvaluesblockedlocal_(mat,m,idxm,n,idxn,v,addv,ierr);
2514d03fd2bSBarry Smith }
2524d03fd2bSBarry Smith 
2534d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvaluesblockedlocaln1_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){
2544d03fd2bSBarry Smith   matsetvaluesblockedlocal_(mat,m,idxm,n,idxn,v,addv,ierr);
2554d03fd2bSBarry Smith }
2564d03fd2bSBarry Smith 
2574d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvalues_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr )
2584d03fd2bSBarry Smith {
2594d03fd2bSBarry Smith   *ierr = MatSetValues(*mat,*m,idxm,*n,idxn,v,*addv);
2604d03fd2bSBarry Smith }
2614d03fd2bSBarry Smith 
2621b266c99SBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvaluesnnnn_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr )
2631b266c99SBarry Smith {
2641b266c99SBarry Smith   matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr);
2651b266c99SBarry Smith }
2661b266c99SBarry Smith 
2673b494cfeSSatish Balay PETSC_EXTERN void PETSC_STDCALL  matsetvalues0_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr )
2683b494cfeSSatish Balay {
2693b494cfeSSatish Balay   matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr);
2703b494cfeSSatish Balay }
2713b494cfeSSatish Balay 
2721b266c99SBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvaluesnn1_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr )
2731b266c99SBarry Smith {
2741b266c99SBarry Smith   matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr);
2751b266c99SBarry Smith }
2761b266c99SBarry Smith 
2774d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvalues11_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr )
2784d03fd2bSBarry Smith {
2794d03fd2bSBarry Smith   matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr);
2804d03fd2bSBarry Smith }
2814d03fd2bSBarry Smith 
2824d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvaluesn1_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr )
2834d03fd2bSBarry Smith {
2844d03fd2bSBarry Smith   matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr);
2854d03fd2bSBarry Smith }
2864d03fd2bSBarry Smith 
2874d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvalues1n_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr )
2884d03fd2bSBarry Smith {
2894d03fd2bSBarry Smith   matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr);
2904d03fd2bSBarry Smith }
2914d03fd2bSBarry Smith 
2924d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvalueslocal_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr )
2934d03fd2bSBarry Smith {
2944d03fd2bSBarry Smith   *ierr = MatSetValuesLocal(*mat,*nrow,irow,*ncol,icol,y,*addv);
2954d03fd2bSBarry Smith }
2964d03fd2bSBarry Smith 
2973b494cfeSSatish Balay PETSC_EXTERN void PETSC_STDCALL  matsetvalueslocal0_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr )
2983b494cfeSSatish Balay {
2993b494cfeSSatish Balay   matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr);
3003b494cfeSSatish Balay }
3013b494cfeSSatish Balay 
3024d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvalueslocal11_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr )
3034d03fd2bSBarry Smith {
3044d03fd2bSBarry Smith   matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr);
3054d03fd2bSBarry Smith }
3064d03fd2bSBarry Smith 
3074d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvalueslocal11nn_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr )
3084d03fd2bSBarry Smith {
3094d03fd2bSBarry Smith   matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr);
3104d03fd2bSBarry Smith }
3114d03fd2bSBarry Smith 
3124d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvalueslocal111_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr )
3134d03fd2bSBarry Smith {
3144d03fd2bSBarry Smith   matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr);
3154d03fd2bSBarry Smith }
3164d03fd2bSBarry Smith 
3174d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvalueslocal1n_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr )
3184d03fd2bSBarry Smith {
3194d03fd2bSBarry Smith   matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr);
3204d03fd2bSBarry Smith }
3214d03fd2bSBarry Smith 
3224d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvalueslocaln1_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr )
3234d03fd2bSBarry Smith {
3244d03fd2bSBarry Smith   matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr);
3254d03fd2bSBarry Smith }
3264d03fd2bSBarry Smith 
32787bcf4e0SBarry Smith PETSC_EXTERN void PETSC_STDCALL  matgetrowmin_(Mat *mat,Vec *v,PetscInt idx[], int *ierr )
32887bcf4e0SBarry Smith {
32987bcf4e0SBarry Smith   CHKFORTRANNULLINTEGER(idx);
33087bcf4e0SBarry Smith   *ierr = MatGetRowMin(*mat,*v,idx);
33187bcf4e0SBarry Smith }
3324d03fd2bSBarry Smith 
33387bcf4e0SBarry Smith PETSC_EXTERN void PETSC_STDCALL  matgetrowminabs_(Mat *mat,Vec *v,PetscInt idx[], int *ierr )
33487bcf4e0SBarry Smith {
33587bcf4e0SBarry Smith   CHKFORTRANNULLINTEGER(idx);
33687bcf4e0SBarry Smith   *ierr = MatGetRowMinAbs(*mat,*v,idx);
33787bcf4e0SBarry Smith }
33887bcf4e0SBarry Smith 
3395928be6bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matgetrowmax_(Mat *mat,Vec *v,PetscInt idx[], int *ierr )
3405928be6bSBarry Smith {
3415928be6bSBarry Smith   CHKFORTRANNULLINTEGER(idx);
3425928be6bSBarry Smith   *ierr = MatGetRowMax(*mat,*v,idx);
3435928be6bSBarry Smith }
3445928be6bSBarry Smith 
3455928be6bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matgetrowmaxabs_(Mat *mat,Vec *v,PetscInt idx[], int *ierr )
3465928be6bSBarry Smith {
3475928be6bSBarry Smith   CHKFORTRANNULLINTEGER(idx);
3485928be6bSBarry Smith   *ierr = MatGetRowMaxAbs(*mat,*v,idx);
3495928be6bSBarry Smith }
3505928be6bSBarry Smith 
351b22b330cSBarry Smith static PetscErrorCode ournullfunction(MatNullSpace sp,Vec x,void *ctx)
352b22b330cSBarry Smith {
353b22b330cSBarry Smith   PetscErrorCode ierr = 0;
354b22b330cSBarry Smith   (*(void (PETSC_STDCALL *)(MatNullSpace*,Vec*,void*,PetscErrorCode*))(((PetscObject)sp)->fortran_func_pointers[0]))(&sp,&x,ctx,&ierr);CHKERRQ(ierr);
355b22b330cSBarry Smith   return 0;
356b22b330cSBarry Smith }
357b22b330cSBarry Smith 
3588cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matnullspacesetfunction_(MatNullSpace *sp, PetscErrorCode (*rem)(MatNullSpace,Vec,void*),void *ctx,PetscErrorCode *ierr)
359b22b330cSBarry Smith {
360b22b330cSBarry Smith   PetscObjectAllocateFortranPointers(*sp,1);
361b22b330cSBarry Smith   ((PetscObject)*sp)->fortran_func_pointers[0] = (PetscVoidFunction)rem;
36226fbe8dcSKarl Rupp 
363b22b330cSBarry Smith   *ierr = MatNullSpaceSetFunction(*sp,ournullfunction,ctx);
364b22b330cSBarry Smith }
365b22b330cSBarry Smith 
366d2da0f5dSBarry Smith PETSC_EXTERN void PETSC_STDCALL matcreatevecs_(Mat *mat,Vec *right,Vec *left, int *ierr)
3677c54600cSBarry Smith {
3687c54600cSBarry Smith   CHKFORTRANNULLOBJECT(right);
3697c54600cSBarry Smith   CHKFORTRANNULLOBJECT(left);
3702a7a6963SBarry Smith   *ierr = MatCreateVecs(*mat,right,left);
3717c54600cSBarry Smith }
3727c54600cSBarry Smith 
3738cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matgetrowij_(Mat *B,PetscInt *shift,PetscBool *sym,PetscBool *blockcompressed,PetscInt *n,PetscInt *ia,size_t *iia,
374ace3abfcSBarry Smith                                 PetscInt *ja,size_t *jja,PetscBool  *done,PetscErrorCode *ierr)
375f4e70085SSatish Balay {
3761a83f524SJed Brown   const PetscInt *IA,*JA;
3778f7157efSSatish Balay   *ierr = MatGetRowIJ(*B,*shift,*sym,*blockcompressed,n,&IA,&JA,done);if (*ierr) return;
3781a83f524SJed Brown   *iia  = PetscIntAddressToFortran(ia,(PetscInt*)IA);
3791a83f524SJed Brown   *jja  = PetscIntAddressToFortran(ja,(PetscInt*)JA);
380f4e70085SSatish Balay }
381f4e70085SSatish Balay 
3828cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matrestorerowij_(Mat *B,PetscInt *shift,PetscBool *sym,PetscBool *blockcompressed, PetscInt *n,PetscInt *ia,size_t *iia,
383ace3abfcSBarry Smith                                     PetscInt *ja,size_t *jja,PetscBool  *done,PetscErrorCode *ierr)
384f4e70085SSatish Balay {
3851a83f524SJed Brown   const PetscInt *IA = PetscIntAddressFromFortran(ia,*iia),*JA = PetscIntAddressFromFortran(ja,*jja);
3868f7157efSSatish Balay   *ierr = MatRestoreRowIJ(*B,*shift,*sym,*blockcompressed,n,&IA,&JA,done);
387f4e70085SSatish Balay }
388f4e70085SSatish Balay 
389f4e70085SSatish Balay /*
390f4e70085SSatish Balay    This is a poor way of storing the column and value pointers
391f4e70085SSatish Balay   generated by MatGetRow() to be returned with MatRestoreRow()
392f4e70085SSatish Balay   but there is not natural,good place else to store them. Hence
393f4e70085SSatish Balay   Fortran programmers can only have one outstanding MatGetRows()
394f4e70085SSatish Balay   at a time.
395f4e70085SSatish Balay */
396f4e70085SSatish Balay static PetscErrorCode    matgetrowactive = 0;
397f4e70085SSatish Balay static const PetscInt    *my_ocols       = 0;
398f4e70085SSatish Balay static const PetscScalar *my_ovals       = 0;
399f4e70085SSatish Balay 
4008cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matgetrow_(Mat *mat,PetscInt *row,PetscInt *ncols,PetscInt *cols,PetscScalar *vals,PetscErrorCode *ierr)
401f4e70085SSatish Balay {
402f4e70085SSatish Balay   const PetscInt    **oocols = &my_ocols;
403f4e70085SSatish Balay   const PetscScalar **oovals = &my_ovals;
404f4e70085SSatish Balay 
405f4e70085SSatish Balay   if (matgetrowactive) {
406efca3c55SSatish Balay     PetscError(PETSC_COMM_SELF,__LINE__,"MatGetRow_Fortran",__FILE__,PETSC_ERR_ARG_WRONGSTATE,PETSC_ERROR_INITIAL,
407f4e70085SSatish Balay                "Cannot have two MatGetRow() active simultaneously\n\
408f4e70085SSatish Balay                call MatRestoreRow() before calling MatGetRow() a second time");
409f4e70085SSatish Balay     *ierr = 1;
410f4e70085SSatish Balay     return;
411f4e70085SSatish Balay   }
412f4e70085SSatish Balay 
4130298fd71SBarry Smith   CHKFORTRANNULLINTEGER(cols); if (!cols) oocols = NULL;
4140298fd71SBarry Smith   CHKFORTRANNULLSCALAR(vals);  if (!vals) oovals = NULL;
415f4e70085SSatish Balay 
416f4e70085SSatish Balay   *ierr = MatGetRow(*mat,*row,ncols,oocols,oovals);
417f4e70085SSatish Balay   if (*ierr) return;
418f4e70085SSatish Balay 
419f4e70085SSatish Balay   if (oocols) { *ierr = PetscMemcpy(cols,my_ocols,(*ncols)*sizeof(PetscInt)); if (*ierr) return;}
420f4e70085SSatish Balay   if (oovals) { *ierr = PetscMemcpy(vals,my_ovals,(*ncols)*sizeof(PetscScalar)); if (*ierr) return;}
421f4e70085SSatish Balay   matgetrowactive = 1;
422f4e70085SSatish Balay }
423f4e70085SSatish Balay 
4248cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matrestorerow_(Mat *mat,PetscInt *row,PetscInt *ncols,PetscInt *cols,PetscScalar *vals,PetscErrorCode *ierr)
425f4e70085SSatish Balay {
426f4e70085SSatish Balay   const PetscInt    **oocols = &my_ocols;
427f4e70085SSatish Balay   const PetscScalar **oovals = &my_ovals;
428f4e70085SSatish Balay   if (!matgetrowactive) {
429efca3c55SSatish Balay     PetscError(PETSC_COMM_SELF,__LINE__,"MatRestoreRow_Fortran",__FILE__,PETSC_ERR_ARG_WRONGSTATE,PETSC_ERROR_INITIAL,
430f4e70085SSatish Balay                "Must call MatGetRow() first");
431f4e70085SSatish Balay     *ierr = 1;
432f4e70085SSatish Balay     return;
433f4e70085SSatish Balay   }
4340298fd71SBarry Smith   CHKFORTRANNULLINTEGER(cols); if (!cols) oocols = NULL;
4350298fd71SBarry Smith   CHKFORTRANNULLSCALAR(vals);  if (!vals) oovals = NULL;
436f4e70085SSatish Balay 
437f4e70085SSatish Balay   *ierr           = MatRestoreRow(*mat,*row,ncols,oocols,oovals);
438f4e70085SSatish Balay   matgetrowactive = 0;
439f4e70085SSatish Balay }
440f4e70085SSatish Balay 
4418cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matview_(Mat *mat,PetscViewer *vin,PetscErrorCode *ierr)
442f4e70085SSatish Balay {
443f4e70085SSatish Balay   PetscViewer v;
444f4e70085SSatish Balay   PetscPatchDefaultViewers_Fortran(vin,v);
445f4e70085SSatish Balay   *ierr = MatView(*mat,v);
446f4e70085SSatish Balay }
447f4e70085SSatish Balay 
4488cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matload_(Mat *mat,PetscViewer *vin,PetscErrorCode *ierr)
449f7e310deSShri Abhyankar {
450f7e310deSShri Abhyankar   PetscViewer v;
451f7e310deSShri Abhyankar   PetscPatchDefaultViewers_Fortran(vin,v);
452112444f4SShri Abhyankar   *ierr = MatLoad(*mat,v);
453f7e310deSShri Abhyankar }
454f7e310deSShri Abhyankar 
4558cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matseqaijgetarray_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr)
456f4e70085SSatish Balay {
457f4e70085SSatish Balay   PetscScalar *mm;
458f4e70085SSatish Balay   PetscInt    m,n;
459f4e70085SSatish Balay 
4608c778c55SBarry Smith   *ierr = MatSeqAIJGetArray(*mat,&mm); if (*ierr) return;
461f4e70085SSatish Balay   *ierr = MatGetSize(*mat,&m,&n);  if (*ierr) return;
462f91d1997SBarry Smith   *ierr = PetscScalarAddressToFortran((PetscObject)*mat,1,fa,mm,m*n,ia); if (*ierr) return;
463f4e70085SSatish Balay }
464f4e70085SSatish Balay 
4658cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matseqaijrestorearray_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr)
466f4e70085SSatish Balay {
467f4e70085SSatish Balay   PetscScalar *lx;
468f4e70085SSatish Balay   PetscInt    m,n;
469f4e70085SSatish Balay 
470f4e70085SSatish Balay   *ierr = MatGetSize(*mat,&m,&n); if (*ierr) return;
471f4e70085SSatish Balay   *ierr = PetscScalarAddressFromFortran((PetscObject)*mat,fa,*ia,m*n,&lx);if (*ierr) return;
4728c778c55SBarry Smith   *ierr = MatSeqAIJRestoreArray(*mat,&lx);if (*ierr) return;
473f4e70085SSatish Balay }
474f4e70085SSatish Balay 
4758cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matdensegetarray_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr)
47673a71a0fSBarry Smith {
47773a71a0fSBarry Smith   PetscScalar *mm;
47873a71a0fSBarry Smith   PetscInt    m,n;
47973a71a0fSBarry Smith 
4808c778c55SBarry Smith   *ierr = MatDenseGetArray(*mat,&mm); if (*ierr) return;
48173a71a0fSBarry Smith   *ierr = MatGetSize(*mat,&m,&n);  if (*ierr) return;
48273a71a0fSBarry Smith   *ierr = PetscScalarAddressToFortran((PetscObject)*mat,1,fa,mm,m*n,ia); if (*ierr) return;
48373a71a0fSBarry Smith }
48473a71a0fSBarry Smith 
4858cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matdenserestorearray_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr)
48673a71a0fSBarry Smith {
48773a71a0fSBarry Smith   PetscScalar *lx;
48873a71a0fSBarry Smith   PetscInt    m,n;
48973a71a0fSBarry Smith 
49073a71a0fSBarry Smith   *ierr = MatGetSize(*mat,&m,&n); if (*ierr) return;
49173a71a0fSBarry Smith   *ierr = PetscScalarAddressFromFortran((PetscObject)*mat,fa,*ia,m*n,&lx);if (*ierr) return;
4928c778c55SBarry Smith   *ierr = MatDenseRestoreArray(*mat,&lx);if (*ierr) return;
49373a71a0fSBarry Smith }
49473a71a0fSBarry Smith 
4958cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matfactorgetsolverpackage_(Mat *mat,CHAR name PETSC_MIXED_LEN(len),PetscErrorCode *ierr PETSC_END_LEN(len))
49635bd34faSBarry Smith {
49735bd34faSBarry Smith   const char *tname;
49835bd34faSBarry Smith 
49935bd34faSBarry Smith   *ierr = MatFactorGetSolverPackage(*mat,&tname);if (*ierr) return;
50035bd34faSBarry Smith   if (name != PETSC_NULL_CHARACTER_Fortran) {
50135bd34faSBarry Smith     *ierr = PetscStrncpy(name,tname,len);if (*ierr) return;
50235bd34faSBarry Smith   }
50335bd34faSBarry Smith   FIXRETURNCHAR(PETSC_TRUE,name,len);
50435bd34faSBarry Smith }
50535bd34faSBarry Smith 
5068cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matgetfactor_(Mat *mat,CHAR outtype PETSC_MIXED_LEN(len),MatFactorType *ftype,Mat *M,PetscErrorCode *ierr PETSC_END_LEN(len))
5075dffd610SBarry Smith {
5085dffd610SBarry Smith   char *t;
5095dffd610SBarry Smith   FIXCHAR(outtype,len,t);
5109be81726SHong Zhang   *ierr = MatGetFactor(*mat,t,*ftype,M);
5115dffd610SBarry Smith   FREECHAR(outtype,t);
5125dffd610SBarry Smith }
5135dffd610SBarry Smith 
5148cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matconvert_(Mat *mat,CHAR outtype PETSC_MIXED_LEN(len),MatReuse *reuse,Mat *M,PetscErrorCode *ierr PETSC_END_LEN(len))
515f4e70085SSatish Balay {
516f4e70085SSatish Balay   char *t;
517f4e70085SSatish Balay   FIXCHAR(outtype,len,t);
518f4e70085SSatish Balay   *ierr = MatConvert(*mat,t,*reuse,M);
519f4e70085SSatish Balay   FREECHAR(outtype,t);
520f4e70085SSatish Balay }
521f4e70085SSatish Balay 
522f4e70085SSatish Balay /*
523f4e70085SSatish Balay     MatGetSubmatrices() is slightly different from C since the
524f4e70085SSatish Balay     Fortran provides the array to hold the submatrix objects,while in C that
525f4e70085SSatish Balay     array is allocated by the MatGetSubmatrices()
526f4e70085SSatish Balay */
5278cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matgetsubmatrices_(Mat *mat,PetscInt *n,IS *isrow,IS *iscol,MatReuse *scall,Mat *smat,PetscErrorCode *ierr)
528f4e70085SSatish Balay {
529f4e70085SSatish Balay   Mat      *lsmat;
530f4e70085SSatish Balay   PetscInt i;
531f4e70085SSatish Balay 
532f4e70085SSatish Balay   if (*scall == MAT_INITIAL_MATRIX) {
533f4e70085SSatish Balay     *ierr = MatGetSubMatrices(*mat,*n,isrow,iscol,*scall,&lsmat);
534f4e70085SSatish Balay     for (i=0; i<*n; i++) {
535f4e70085SSatish Balay       smat[i] = lsmat[i];
536f4e70085SSatish Balay     }
537f4e70085SSatish Balay     *ierr = PetscFree(lsmat);
538f4e70085SSatish Balay   } else {
539f4e70085SSatish Balay     *ierr = MatGetSubMatrices(*mat,*n,isrow,iscol,*scall,&smat);
540f4e70085SSatish Balay   }
541f4e70085SSatish Balay }
542f4e70085SSatish Balay 
5437d6bfa3bSBarry Smith /*
5447d6bfa3bSBarry Smith     MatDestroyMatrices() is slightly different from C since the
5457d6bfa3bSBarry Smith     Fortran provides the array to hold the submatrix objects,while in C that
5467d6bfa3bSBarry Smith     array is allocated by the MatGetSubmatrices()
5477d6bfa3bSBarry Smith */
5488cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matdestroymatrices_(Mat *mat,PetscInt *n,Mat *smat,PetscErrorCode *ierr)
5497d6bfa3bSBarry Smith {
5507d6bfa3bSBarry Smith   PetscInt i;
5517d6bfa3bSBarry Smith 
5527d6bfa3bSBarry Smith   for (i=0; i<*n; i++) {
5536bf464f9SBarry Smith     *ierr = MatDestroy(&smat[i]);if (*ierr) return;
5547d6bfa3bSBarry Smith   }
5557d6bfa3bSBarry Smith }
5567d6bfa3bSBarry Smith 
5578cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matzerorowscolumns_(Mat *mat,PetscInt *numRows,PetscInt *rows,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr)
55817ede90eSSatish Balay {
55917ede90eSSatish Balay   CHKFORTRANNULLOBJECTDEREFERENCE(x);
56017ede90eSSatish Balay   CHKFORTRANNULLOBJECTDEREFERENCE(b);
56117ede90eSSatish Balay   *ierr = MatZeroRowsColumns(*mat,*numRows,rows,*diag,*x,*b);
56217ede90eSSatish Balay }
56317ede90eSSatish Balay 
5648cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matzerorowscolumnsis_(Mat *mat,IS *is,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr)
56517ede90eSSatish Balay {
56617ede90eSSatish Balay   CHKFORTRANNULLOBJECTDEREFERENCE(x);
56717ede90eSSatish Balay   CHKFORTRANNULLOBJECTDEREFERENCE(b);
56817ede90eSSatish Balay   *ierr = MatZeroRowsColumnsIS(*mat,*is,*diag,*x,*b);
56917ede90eSSatish Balay }
57017ede90eSSatish Balay 
5718cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matzerorowsstencil_(Mat *mat,PetscInt *numRows,MatStencil *rows,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr)
57217ede90eSSatish Balay {
57317ede90eSSatish Balay   CHKFORTRANNULLOBJECTDEREFERENCE(x);
57417ede90eSSatish Balay   CHKFORTRANNULLOBJECTDEREFERENCE(b);
57517ede90eSSatish Balay   *ierr = MatZeroRowsStencil(*mat,*numRows,rows,*diag,*x,*b);
57617ede90eSSatish Balay }
57717ede90eSSatish Balay 
5788cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matzerorowscolumnsstencil_(Mat *mat,PetscInt *numRows,MatStencil *rows,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr)
579d25a37e1SJed Brown {
580d25a37e1SJed Brown   CHKFORTRANNULLOBJECTDEREFERENCE(x);
581d25a37e1SJed Brown   CHKFORTRANNULLOBJECTDEREFERENCE(b);
582d25a37e1SJed Brown   *ierr = MatZeroRowsColumnsStencil(*mat,*numRows,rows,*diag,*x,*b);
583d25a37e1SJed Brown }
584d25a37e1SJed Brown 
5858cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matzerorows_(Mat *mat,PetscInt *numRows,PetscInt *rows,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr)
586f4e70085SSatish Balay {
5872b40b63fSBarry Smith   CHKFORTRANNULLOBJECTDEREFERENCE(x);
5882b40b63fSBarry Smith   CHKFORTRANNULLOBJECTDEREFERENCE(b);
5892b40b63fSBarry Smith   *ierr = MatZeroRows(*mat,*numRows,rows,*diag,*x,*b);
590f4e70085SSatish Balay }
591f4e70085SSatish Balay 
5928cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matzerorowsis_(Mat *mat,IS *is,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr)
593f4e70085SSatish Balay {
5942b40b63fSBarry Smith   CHKFORTRANNULLOBJECTDEREFERENCE(x);
5952b40b63fSBarry Smith   CHKFORTRANNULLOBJECTDEREFERENCE(b);
5962b40b63fSBarry Smith   *ierr = MatZeroRowsIS(*mat,*is,*diag,*x,*b);
597f4e70085SSatish Balay }
598f4e70085SSatish Balay 
5998cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matzerorowslocal_(Mat *mat,PetscInt *numRows,PetscInt *rows,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr)
600f4e70085SSatish Balay {
6012b40b63fSBarry Smith   CHKFORTRANNULLOBJECTDEREFERENCE(x);
6022b40b63fSBarry Smith   CHKFORTRANNULLOBJECTDEREFERENCE(b);
6032b40b63fSBarry Smith   *ierr = MatZeroRowsLocal(*mat,*numRows,rows,*diag,*x,*b);
604f4e70085SSatish Balay }
605f4e70085SSatish Balay 
6068cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matzerorowslocalis_(Mat *mat,IS *is,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr)
607f4e70085SSatish Balay {
6082b40b63fSBarry Smith   CHKFORTRANNULLOBJECTDEREFERENCE(x);
6092b40b63fSBarry Smith   CHKFORTRANNULLOBJECTDEREFERENCE(b);
6102b40b63fSBarry Smith   *ierr = MatZeroRowsLocalIS(*mat,*is,*diag,*x,*b);
611f4e70085SSatish Balay }
612f4e70085SSatish Balay 
6138cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matzerorowscolumnslocal_(Mat *mat,PetscInt *numRows,PetscInt *rows,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr)
61417ede90eSSatish Balay {
61517ede90eSSatish Balay   CHKFORTRANNULLOBJECTDEREFERENCE(x);
61617ede90eSSatish Balay   CHKFORTRANNULLOBJECTDEREFERENCE(b);
61717ede90eSSatish Balay   *ierr = MatZeroRowsColumnsLocal(*mat,*numRows,rows,*diag,*x,*b);
61817ede90eSSatish Balay }
61917ede90eSSatish Balay 
6208cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matzerorowscolumnslocalis_(Mat *mat,IS *is,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr)
62117ede90eSSatish Balay {
62217ede90eSSatish Balay   CHKFORTRANNULLOBJECTDEREFERENCE(x);
62317ede90eSSatish Balay   CHKFORTRANNULLOBJECTDEREFERENCE(b);
62417ede90eSSatish Balay   *ierr = MatZeroRowsColumnsLocalIS(*mat,*is,*diag,*x,*b);
62517ede90eSSatish Balay }
6261eea217eSSatish Balay 
6278cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matsetoptionsprefix_(Mat *mat,CHAR prefix PETSC_MIXED_LEN(len),PetscErrorCode *ierr PETSC_END_LEN(len))
6281eea217eSSatish Balay {
6291eea217eSSatish Balay   char *t;
6301eea217eSSatish Balay 
6311eea217eSSatish Balay   FIXCHAR(prefix,len,t);
6321eea217eSSatish Balay   *ierr = MatSetOptionsPrefix(*mat,t);
6331eea217eSSatish Balay   FREECHAR(prefix,t);
6341eea217eSSatish Balay }
6351eea217eSSatish Balay 
636d0195637SJed Brown PETSC_EXTERN void PETSC_STDCALL matnullspaceremove_(MatNullSpace *sp,Vec *vec,PetscErrorCode *ierr)
637812c3f48SMatthew Knepley {
638d0195637SJed Brown   *ierr = MatNullSpaceRemove(*sp,*vec);
639812c3f48SMatthew Knepley }
6401eea217eSSatish Balay 
6414d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetinfo_(Mat *mat,MatInfoType *flag,MatInfo *info, int *ierr)
6425ba43861SSatish Balay {
6434d03fd2bSBarry Smith   *ierr = MatGetInfo(*mat,*flag,info);
6445ba43861SSatish Balay }
6455ba43861SSatish Balay 
6464d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matlufactor_(Mat *mat,IS *row,IS *col,const MatFactorInfo *info, int *ierr)
64722688b47SSatish Balay {
6484d03fd2bSBarry Smith   *ierr = MatLUFactor(*mat,*row,*col,info);
64922688b47SSatish Balay }
65022688b47SSatish Balay 
6514d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matilufactor_(Mat *mat,IS *row,IS *col,const MatFactorInfo *info, int *ierr)
65222688b47SSatish Balay {
6534d03fd2bSBarry Smith   *ierr = MatILUFactor(*mat,*row,*col,info);
65422688b47SSatish Balay }
65522688b47SSatish Balay 
6564d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matlufactorsymbolic_(Mat *fact,Mat *mat,IS *row,IS *col,const MatFactorInfo *info, int *ierr)
65722688b47SSatish Balay {
6584d03fd2bSBarry Smith   *ierr = MatLUFactorSymbolic(*fact,*mat,*row,*col,info);
65922688b47SSatish Balay }
66022688b47SSatish Balay 
6614d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matlufactornumeric_(Mat *fact,Mat *mat,const MatFactorInfo *info, int *ierr)
66222688b47SSatish Balay {
6634d03fd2bSBarry Smith   *ierr = MatLUFactorNumeric(*fact,*mat,info);
66422688b47SSatish Balay }
66522688b47SSatish Balay 
6664d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matcholeskyfactor_(Mat *mat,IS *perm,const MatFactorInfo *info, int *ierr)
66722688b47SSatish Balay {
6684d03fd2bSBarry Smith   *ierr = MatCholeskyFactor(*mat,*perm,info);
66922688b47SSatish Balay }
67022688b47SSatish Balay 
6714d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matcholeskyfactorsymbolic_(Mat *fact,Mat *mat,IS *perm,const MatFactorInfo *info, int *ierr)
67222688b47SSatish Balay {
6734d03fd2bSBarry Smith   *ierr = MatCholeskyFactorSymbolic(*fact,*mat,*perm,info);
67422688b47SSatish Balay }
67522688b47SSatish Balay 
6764d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matcholeskyfactornumeric_(Mat *fact,Mat *mat,const MatFactorInfo *info, int *ierr)
67722688b47SSatish Balay {
6784d03fd2bSBarry Smith   *ierr = MatCholeskyFactorNumeric(*fact,*mat,info);
67922688b47SSatish Balay }
68022688b47SSatish Balay 
6814d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matilufactorsymbolic_(Mat *fact,Mat *mat,IS *row,IS *col,const MatFactorInfo *info, int *ierr)
68222688b47SSatish Balay {
6834d03fd2bSBarry Smith   *ierr = MatILUFactorSymbolic(*fact,*mat,*row,*col,info);
68422688b47SSatish Balay }
68522688b47SSatish Balay 
6864d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL maticcfactorsymbolic_(Mat *fact,Mat *mat,IS *perm,const MatFactorInfo *info, int *ierr)
68722688b47SSatish Balay {
6884d03fd2bSBarry Smith   *ierr = MatICCFactorSymbolic(*fact,*mat,*perm,info);
68922688b47SSatish Balay }
69022688b47SSatish Balay 
6914d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL maticcfactor_(Mat *mat,IS *row,const MatFactorInfo *info, int *ierr)
69222688b47SSatish Balay {
6934d03fd2bSBarry Smith   *ierr = MatICCFactor(*mat,*row,info);
69422688b47SSatish Balay }
69522688b47SSatish Balay 
6964d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matfactorinfoinitialize_(MatFactorInfo *info, int *ierr)
69722688b47SSatish Balay {
6984d03fd2bSBarry Smith   *ierr = MatFactorInfoInitialize(info);
69922688b47SSatish Balay }
700