xref: /petsc/src/mat/interface/ftn-custom/zmatrixf.c (revision 4d03fd2beba63756fb8890bf1826f747a8ce8800)
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)
6*4d03fd2bSBarry Smith #define matsetvalues_                    MATSETVALUES
7*4d03fd2bSBarry Smith #define matsetvalues11_                  MATSETVALUES11
8*4d03fd2bSBarry Smith #define matsetvalues1n_                  MATSETVALUES1N
9*4d03fd2bSBarry Smith #define matsetvaluesn1_                  MATSETVALUESN1
10*4d03fd2bSBarry Smith #define matsetvaluesblocked_             MATSETVALUESBLOCKED
11*4d03fd2bSBarry Smith #define matsetvaluesblocked11_           MATSETVALUESBLOCKED11
12*4d03fd2bSBarry Smith #define matsetvaluesblocked111_          MATSETVALUESBLOCKED111
13*4d03fd2bSBarry Smith #define matsetvaluesblocked1n_           MATSETVALUESBLOCKED1N
14*4d03fd2bSBarry Smith #define matsetvaluesblockedn1_           MATSETVALUESBLOCKEDN1
15*4d03fd2bSBarry Smith #define matsetvaluesblockedlocal_        MATSETVALUESBLOCKEDLOCAL
16*4d03fd2bSBarry Smith #define matsetvaluesblockedlocal11_      MATSETVALUESBLOCKEDLOCAL11
17*4d03fd2bSBarry Smith #define matsetvaluesblockedlocal111_     MATSETVALUESBLOCKEDLOCAL111
18*4d03fd2bSBarry Smith #define matsetvaluesblockedlocal1n_      MATSETVALUESBLOCKEDLOCAL1N
19*4d03fd2bSBarry Smith #define matsetvaluesblockedlocaln1_      MATSETVALUESBLOCKEDLOCALN1
20*4d03fd2bSBarry Smith #define matsetvalueslocal_               MATSETVALUESLOCAL
21*4d03fd2bSBarry Smith #define matsetvalueslocal11_             MATSETVALUESLOCAL11
22*4d03fd2bSBarry Smith #define matsetvalueslocal11nn_           MATSETVALUESLOCAL11NN
23*4d03fd2bSBarry Smith #define matsetvalueslocal111_            MATSETVALUESLOCAL111
24*4d03fd2bSBarry Smith #define matsetvalueslocal1n_             MATSETVALUESLOCAL1N
25*4d03fd2bSBarry Smith #define matsetvalueslocaln1_             MATSETVALUESLOCALN1
2687bcf4e0SBarry Smith #define matgetrowmin_                    MATGETROWMIN
2787bcf4e0SBarry Smith #define matgetrowminabs_                 MATGETROWMINABS
285928be6bSBarry Smith #define matgetrowmax_                    MATGETROWMAX
295928be6bSBarry Smith #define matgetrowmaxabs_                 MATGETROWMAXABS
307d6bfa3bSBarry Smith #define matdestroymatrices_              MATDESTROYMATRICES
315dffd610SBarry Smith #define matgetfactor_                    MATGETFACTOR
3235bd34faSBarry Smith #define matfactorgetsolverpackage_       MATFACTORGETSOLVERPACKAGE
33f4e70085SSatish Balay #define matgetrowij_                     MATGETROWIJ
34f4e70085SSatish Balay #define matrestorerowij_                 MATRESTOREROWIJ
35f4e70085SSatish Balay #define matgetrow_                       MATGETROW
36f4e70085SSatish Balay #define matrestorerow_                   MATRESTOREROW
37f7e310deSShri Abhyankar #define matload_                         MATLOAD
38f4e70085SSatish Balay #define matview_                         MATVIEW
398c778c55SBarry Smith #define matseqaijgetarray_               MATSEQAIJGETARRAY
406778691eSSatish Balay #define matseqaijrestorearray_           MATSEQAIJRESTOREARRAY
418c778c55SBarry Smith #define matdensegetarray_                MATDENSEGETARRAY
428c778c55SBarry Smith #define matdenserestorearray_            MATDENSERESTOREARRAY
43f4e70085SSatish Balay #define matconvert_                      MATCONVERT
44f4e70085SSatish Balay #define matgetsubmatrices_               MATGETSUBMATRICES
4517ede90eSSatish Balay #define matzerorowscolumns_              MATZEROROWSCOLUMNS
4617ede90eSSatish Balay #define matzerorowscolumnsis_            MATZEROROWSCOLUMNSIS
4717ede90eSSatish Balay #define matzerorowsstencil_              MATZEROROWSSTENCIL
48d25a37e1SJed Brown #define matzerorowscolumnsstencil_       MATZEROROWSCOLUMNSSTENCIL
49f4e70085SSatish Balay #define matzerorows_                     MATZEROROWS
50f4e70085SSatish Balay #define matzerorowsis_                   MATZEROROWSIS
51f4e70085SSatish Balay #define matzerorowslocal_                MATZEROROWSLOCAL
52f4e70085SSatish Balay #define matzerorowslocalis_              MATZEROROWSLOCALIS
5317ede90eSSatish Balay #define matzerorowscolumnslocal_         MATZEROROWSCOLUMNSLOCAL
5417ede90eSSatish Balay #define matzerorowscolumnslocalis_       MATZEROROWSCOLUMNSLOCALIS
551eea217eSSatish Balay #define matsetoptionsprefix_             MATSETOPTIONSPREFIX
56fcc9d04bSBarry Smith #define matcreatevecs_                   MATCREATEVECS
57c9d5ca86SBarry Smith #define matnullspaceremove_              MATNULLSPACEREMOVE
585ba43861SSatish Balay #define matgetinfo_                      MATGETINFO
5922688b47SSatish Balay #define matlufactor_                     MATLUFACTOR
6022688b47SSatish Balay #define matilufactor_                    MATILUFACTOR
6122688b47SSatish Balay #define matlufactorsymbolic_             MATLUFACTORSYMBOLIC
6222688b47SSatish Balay #define matlufactornumeric_              MATLUFACTORNUMERIC
6322688b47SSatish Balay #define matcholeskyfactor_               MATCHOLESKYFACTOR
6422688b47SSatish Balay #define matcholeskyfactorsymbolic_       MATCHOLESKYFACTORSYMBOLIC
6522688b47SSatish Balay #define matcholeskyfactornumeric_        MATCHOLESKYFACTORNUMERIC
6622688b47SSatish Balay #define matilufactorsymbolic_            MATILUFACTORSYMBOLIC
6722688b47SSatish Balay #define maticcfactorsymbolic_            MATICCFACTORSYMBOLIC
6822688b47SSatish Balay #define maticcfactor_                    MATICCFACTOR
6922688b47SSatish Balay #define matfactorinfoinitialize_         MATFACTORINFOINITIALIZE
70b22b330cSBarry Smith #define matnullspacesetfunction_         MATNULLSPACESETFUNCTION
710905d9aaSJed Brown #define matfindnonzerorows_              MATFINDNONZEROROWS
72f4e70085SSatish Balay #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE)
73*4d03fd2bSBarry Smith #define matsetvalues_                    matsetvalues
74*4d03fd2bSBarry Smith #define matsetvalues11_                  matsetvalues11
75*4d03fd2bSBarry Smith #define matsetvaluesn1_                  matsetvaluesn1
76*4d03fd2bSBarry Smith #define matsetvalues1n_                  matsetvalues1n
77*4d03fd2bSBarry Smith #define matsetvalueslocal_               matsetvalueslocal
78*4d03fd2bSBarry Smith #define matsetvalueslocal11_             matsetvalueslocal11
79*4d03fd2bSBarry Smith #define matsetvalueslocal11nn_           matsetvalueslocal11nn
80*4d03fd2bSBarry Smith #define matsetvalueslocal111_            matsetvalueslocal111
81*4d03fd2bSBarry Smith #define matsetvalueslocal1n_             matsetvalueslocal1n
82*4d03fd2bSBarry Smith #define matsetvalueslocaln1_             matsetvalueslocaln1
83*4d03fd2bSBarry Smith #define matsetvaluesblocked_             matsetvaluesblocked
84*4d03fd2bSBarry Smith #define matsetvaluesblocked11_           matsetvaluesblocked11
85*4d03fd2bSBarry Smith #define matsetvaluesblocked111_          matsetvaluesblocked111
86*4d03fd2bSBarry Smith #define matsetvaluesblocked1n_           matsetvaluesblocked1n
87*4d03fd2bSBarry Smith #define matsetvaluesblocked1n_           matsetvaluesblockedn1
88*4d03fd2bSBarry Smith #define matsetvaluesblockedlocal_        matsetvaluesblockedlocal
89*4d03fd2bSBarry Smith #define matsetvaluesblockedlocal11_      matsetvaluesblockedlocal11
90*4d03fd2bSBarry Smith #define matsetvaluesblockedlocal111_     matsetvaluesblockedlocal111
91*4d03fd2bSBarry Smith #define matsetvaluesblockedlocal1n_      matsetvaluesblockedlocal1n
92*4d03fd2bSBarry Smith #define matsetvaluesblockedlocal1n_      matsetvaluesblockedlocaln1
93*4d03fd2bSBarry Smith #define matsetvalueslocal_               matsetvalueslocal
9487bcf4e0SBarry Smith #define matgetrowmin_                    matgetrowmin
9587bcf4e0SBarry Smith #define matgetrowminabs_                 matgetrowminabs
965928be6bSBarry Smith #define matgetrowmax_                    matgetrowmax
975928be6bSBarry Smith #define matgetrowmaxabs_                 matgetrowmaxabs
985928be6bSBarry Smith #define matdestroymatrices_              matdestroymatrices
995dffd610SBarry Smith #define matgetfactor_                    matgetfactor
10035bd34faSBarry Smith #define matfactorgetsolverpackage_       matfactorgetsolverpackage
101fcc9d04bSBarry Smith #define matcreatevecs_                   matcreatevecs
102f4e70085SSatish Balay #define matgetrowij_                     matgetrowij
103f4e70085SSatish Balay #define matrestorerowij_                 matrestorerowij
104f4e70085SSatish Balay #define matgetrow_                       matgetrow
105f4e70085SSatish Balay #define matrestorerow_                   matrestorerow
106f4e70085SSatish Balay #define matview_                         matview
107f7e310deSShri Abhyankar #define matload_                         matload
1088c778c55SBarry Smith #define matseqaijgetarray_               matseqaijgetarray
1098c778c55SBarry Smith #define matseqaijrestorearray_           matseqaijrestorearray
1108c778c55SBarry Smith #define matdensegetarray_                matdensegetarray
1118c778c55SBarry Smith #define matdenserestorearray_            matdenserestorearray
112f4e70085SSatish Balay #define matconvert_                      matconvert
113f4e70085SSatish Balay #define matgetsubmatrices_               matgetsubmatrices
11417ede90eSSatish Balay #define matzerorowscolumns_              matzerorowscolumns
11517ede90eSSatish Balay #define matzerorowscolumnsis_            matzerorowscolumnsis
11617ede90eSSatish Balay #define matzerorowsstencil_              matzerorowsstencil
117d25a37e1SJed Brown #define matzerorowscolumnsstencil_       matzerorowscolumnsstencil
118f4e70085SSatish Balay #define matzerorows_                     matzerorows
119f4e70085SSatish Balay #define matzerorowsis_                   matzerorowsis
120f4e70085SSatish Balay #define matzerorowslocal_                matzerorowslocal
121f4e70085SSatish Balay #define matzerorowslocalis_              matzerorowslocalis
12217ede90eSSatish Balay #define matzerorowscolumnslocal_         matzerorowscolumnslocal
12317ede90eSSatish Balay #define matzerorowscolumnslocalis_       matzerorowscolumnslocalis
1241eea217eSSatish Balay #define matsetoptionsprefix_             matsetoptionsprefix
125812c3f48SMatthew Knepley #define matnullspaceremove_              matnullspaceremove
1265ba43861SSatish Balay #define matgetinfo_                      matgetinfo
12722688b47SSatish Balay #define matlufactor_                     matlufactor
12822688b47SSatish Balay #define matilufactor_                    matilufactor
12922688b47SSatish Balay #define matlufactorsymbolic_             matlufactorsymbolic
13022688b47SSatish Balay #define matlufactornumeric_              matlufactornumeric
13122688b47SSatish Balay #define matcholeskyfactor_               matcholeskyfactor
13222688b47SSatish Balay #define matcholeskyfactorsymbolic_       matcholeskyfactorsymbolic
13322688b47SSatish Balay #define matcholeskyfactornumeric_        matcholeskyfactornumeric
13422688b47SSatish Balay #define matilufactorsymbolic_            matilufactorsymbolic
13522688b47SSatish Balay #define maticcfactorsymbolic_            maticcfactorsymbolic
13622688b47SSatish Balay #define maticcfactor_                    maticcfactor
13722688b47SSatish Balay #define matfactorinfoinitialize_         matfactorinfoinitialize
138b22b330cSBarry Smith #define matnullspacesetfunction_         matnullspacesetfunction
1390905d9aaSJed Brown #define matfindnonzerorows_              matfindnonzerorows
140f4e70085SSatish Balay #endif
141f4e70085SSatish Balay 
142*4d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvaluesblocked_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){
143*4d03fd2bSBarry Smith   *ierr = MatSetValuesBlocked(*mat,*m,idxm,*n,idxn,v,*addv);
144*4d03fd2bSBarry Smith }
145*4d03fd2bSBarry Smith 
146*4d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvaluesblocked11_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){
147*4d03fd2bSBarry Smith   matsetvaluesblocked_(mat,m,idxm,n,idxn,v,addv,ierr);
148*4d03fd2bSBarry Smith }
149*4d03fd2bSBarry Smith 
150*4d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvaluesblocked111_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){
151*4d03fd2bSBarry Smith   matsetvaluesblocked_(mat,m,idxm,n,idxn,v,addv,ierr);
152*4d03fd2bSBarry Smith }
153*4d03fd2bSBarry Smith 
154*4d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvaluesblocked1n_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){
155*4d03fd2bSBarry Smith   matsetvaluesblocked_(mat,m,idxm,n,idxn,v,addv,ierr);
156*4d03fd2bSBarry Smith }
157*4d03fd2bSBarry Smith 
158*4d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvaluesblockedn1_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){
159*4d03fd2bSBarry Smith   matsetvaluesblocked_(mat,m,idxm,n,idxn,v,addv,ierr);
160*4d03fd2bSBarry Smith }
161*4d03fd2bSBarry Smith 
162*4d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvaluesblockedlocal_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr )
163*4d03fd2bSBarry Smith {
164*4d03fd2bSBarry Smith   *ierr = MatSetValuesBlockedLocal(*mat,*nrow,irow,*ncol,icol,y,*addv);
165*4d03fd2bSBarry Smith }
166*4d03fd2bSBarry Smith 
167*4d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvaluesblockedlocal11_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){
168*4d03fd2bSBarry Smith   matsetvaluesblockedlocal_(mat,m,idxm,n,idxn,v,addv,ierr);
169*4d03fd2bSBarry Smith }
170*4d03fd2bSBarry Smith 
171*4d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvaluesblockedlocal111_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){
172*4d03fd2bSBarry Smith   matsetvaluesblockedlocal_(mat,m,idxm,n,idxn,v,addv,ierr);
173*4d03fd2bSBarry Smith }
174*4d03fd2bSBarry Smith 
175*4d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvaluesblockedlocal1n_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){
176*4d03fd2bSBarry Smith   matsetvaluesblockedlocal_(mat,m,idxm,n,idxn,v,addv,ierr);
177*4d03fd2bSBarry Smith }
178*4d03fd2bSBarry Smith 
179*4d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvaluesblockedlocaln1_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){
180*4d03fd2bSBarry Smith   matsetvaluesblockedlocal_(mat,m,idxm,n,idxn,v,addv,ierr);
181*4d03fd2bSBarry Smith }
182*4d03fd2bSBarry Smith 
183*4d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvalues_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr )
184*4d03fd2bSBarry Smith {
185*4d03fd2bSBarry Smith   *ierr = MatSetValues(*mat,*m,idxm,*n,idxn,v,*addv);
186*4d03fd2bSBarry Smith }
187*4d03fd2bSBarry Smith 
188*4d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvalues11_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr )
189*4d03fd2bSBarry Smith {
190*4d03fd2bSBarry Smith   matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr);
191*4d03fd2bSBarry Smith }
192*4d03fd2bSBarry Smith 
193*4d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvaluesn1_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr )
194*4d03fd2bSBarry Smith {
195*4d03fd2bSBarry Smith   matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr);
196*4d03fd2bSBarry Smith }
197*4d03fd2bSBarry Smith 
198*4d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvalues1n_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr )
199*4d03fd2bSBarry Smith {
200*4d03fd2bSBarry Smith   matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr);
201*4d03fd2bSBarry Smith }
202*4d03fd2bSBarry Smith 
203*4d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvalueslocal_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr )
204*4d03fd2bSBarry Smith {
205*4d03fd2bSBarry Smith   *ierr = MatSetValuesLocal(*mat,*nrow,irow,*ncol,icol,y,*addv);
206*4d03fd2bSBarry Smith }
207*4d03fd2bSBarry Smith 
208*4d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvalueslocal11_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr )
209*4d03fd2bSBarry Smith {
210*4d03fd2bSBarry Smith   matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr);
211*4d03fd2bSBarry Smith }
212*4d03fd2bSBarry Smith 
213*4d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvalueslocal11nn_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr )
214*4d03fd2bSBarry Smith {
215*4d03fd2bSBarry Smith   matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr);
216*4d03fd2bSBarry Smith }
217*4d03fd2bSBarry Smith 
218*4d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvalueslocal111_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr )
219*4d03fd2bSBarry Smith {
220*4d03fd2bSBarry Smith   matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr);
221*4d03fd2bSBarry Smith }
222*4d03fd2bSBarry Smith 
223*4d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvalueslocal1n_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr )
224*4d03fd2bSBarry Smith {
225*4d03fd2bSBarry Smith   matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr);
226*4d03fd2bSBarry Smith }
227*4d03fd2bSBarry Smith 
228*4d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matsetvalueslocaln1_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr )
229*4d03fd2bSBarry Smith {
230*4d03fd2bSBarry Smith   matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr);
231*4d03fd2bSBarry Smith }
232*4d03fd2bSBarry Smith 
23387bcf4e0SBarry Smith PETSC_EXTERN void PETSC_STDCALL  matgetrowmin_(Mat *mat,Vec *v,PetscInt idx[], int *ierr )
23487bcf4e0SBarry Smith {
23587bcf4e0SBarry Smith   CHKFORTRANNULLINTEGER(idx);
23687bcf4e0SBarry Smith   *ierr = MatGetRowMin(*mat,*v,idx);
23787bcf4e0SBarry Smith }
238*4d03fd2bSBarry Smith 
23987bcf4e0SBarry Smith PETSC_EXTERN void PETSC_STDCALL  matgetrowminabs_(Mat *mat,Vec *v,PetscInt idx[], int *ierr )
24087bcf4e0SBarry Smith {
24187bcf4e0SBarry Smith   CHKFORTRANNULLINTEGER(idx);
24287bcf4e0SBarry Smith   *ierr = MatGetRowMinAbs(*mat,*v,idx);
24387bcf4e0SBarry Smith }
24487bcf4e0SBarry Smith 
2455928be6bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matgetrowmax_(Mat *mat,Vec *v,PetscInt idx[], int *ierr )
2465928be6bSBarry Smith {
2475928be6bSBarry Smith   CHKFORTRANNULLINTEGER(idx);
2485928be6bSBarry Smith   *ierr = MatGetRowMax(*mat,*v,idx);
2495928be6bSBarry Smith }
2505928be6bSBarry Smith 
2515928be6bSBarry Smith PETSC_EXTERN void PETSC_STDCALL  matgetrowmaxabs_(Mat *mat,Vec *v,PetscInt idx[], int *ierr )
2525928be6bSBarry Smith {
2535928be6bSBarry Smith   CHKFORTRANNULLINTEGER(idx);
2545928be6bSBarry Smith   *ierr = MatGetRowMaxAbs(*mat,*v,idx);
2555928be6bSBarry Smith }
2565928be6bSBarry Smith 
257b22b330cSBarry Smith static PetscErrorCode ournullfunction(MatNullSpace sp,Vec x,void *ctx)
258b22b330cSBarry Smith {
259b22b330cSBarry Smith   PetscErrorCode ierr = 0;
260b22b330cSBarry Smith   (*(void (PETSC_STDCALL *)(MatNullSpace*,Vec*,void*,PetscErrorCode*))(((PetscObject)sp)->fortran_func_pointers[0]))(&sp,&x,ctx,&ierr);CHKERRQ(ierr);
261b22b330cSBarry Smith   return 0;
262b22b330cSBarry Smith }
263b22b330cSBarry Smith 
2648cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matnullspacesetfunction_(MatNullSpace *sp, PetscErrorCode (*rem)(MatNullSpace,Vec,void*),void *ctx,PetscErrorCode *ierr)
265b22b330cSBarry Smith {
266b22b330cSBarry Smith   PetscObjectAllocateFortranPointers(*sp,1);
267b22b330cSBarry Smith   ((PetscObject)*sp)->fortran_func_pointers[0] = (PetscVoidFunction)rem;
26826fbe8dcSKarl Rupp 
269b22b330cSBarry Smith   *ierr = MatNullSpaceSetFunction(*sp,ournullfunction,ctx);
270b22b330cSBarry Smith }
271b22b330cSBarry Smith 
272d2da0f5dSBarry Smith PETSC_EXTERN void PETSC_STDCALL matcreatevecs_(Mat *mat,Vec *right,Vec *left, int *ierr)
2737c54600cSBarry Smith {
2747c54600cSBarry Smith   CHKFORTRANNULLOBJECT(right);
2757c54600cSBarry Smith   CHKFORTRANNULLOBJECT(left);
2762a7a6963SBarry Smith   *ierr = MatCreateVecs(*mat,right,left);
2777c54600cSBarry Smith }
2787c54600cSBarry Smith 
2798cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matgetrowij_(Mat *B,PetscInt *shift,PetscBool *sym,PetscBool *blockcompressed,PetscInt *n,PetscInt *ia,size_t *iia,
280ace3abfcSBarry Smith                                 PetscInt *ja,size_t *jja,PetscBool  *done,PetscErrorCode *ierr)
281f4e70085SSatish Balay {
2821a83f524SJed Brown   const PetscInt *IA,*JA;
2838f7157efSSatish Balay   *ierr = MatGetRowIJ(*B,*shift,*sym,*blockcompressed,n,&IA,&JA,done);if (*ierr) return;
2841a83f524SJed Brown   *iia  = PetscIntAddressToFortran(ia,(PetscInt*)IA);
2851a83f524SJed Brown   *jja  = PetscIntAddressToFortran(ja,(PetscInt*)JA);
286f4e70085SSatish Balay }
287f4e70085SSatish Balay 
2888cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matrestorerowij_(Mat *B,PetscInt *shift,PetscBool *sym,PetscBool *blockcompressed, PetscInt *n,PetscInt *ia,size_t *iia,
289ace3abfcSBarry Smith                                     PetscInt *ja,size_t *jja,PetscBool  *done,PetscErrorCode *ierr)
290f4e70085SSatish Balay {
2911a83f524SJed Brown   const PetscInt *IA = PetscIntAddressFromFortran(ia,*iia),*JA = PetscIntAddressFromFortran(ja,*jja);
2928f7157efSSatish Balay   *ierr = MatRestoreRowIJ(*B,*shift,*sym,*blockcompressed,n,&IA,&JA,done);
293f4e70085SSatish Balay }
294f4e70085SSatish Balay 
295f4e70085SSatish Balay /*
296f4e70085SSatish Balay    This is a poor way of storing the column and value pointers
297f4e70085SSatish Balay   generated by MatGetRow() to be returned with MatRestoreRow()
298f4e70085SSatish Balay   but there is not natural,good place else to store them. Hence
299f4e70085SSatish Balay   Fortran programmers can only have one outstanding MatGetRows()
300f4e70085SSatish Balay   at a time.
301f4e70085SSatish Balay */
302f4e70085SSatish Balay static PetscErrorCode    matgetrowactive = 0;
303f4e70085SSatish Balay static const PetscInt    *my_ocols       = 0;
304f4e70085SSatish Balay static const PetscScalar *my_ovals       = 0;
305f4e70085SSatish Balay 
3068cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matgetrow_(Mat *mat,PetscInt *row,PetscInt *ncols,PetscInt *cols,PetscScalar *vals,PetscErrorCode *ierr)
307f4e70085SSatish Balay {
308f4e70085SSatish Balay   const PetscInt    **oocols = &my_ocols;
309f4e70085SSatish Balay   const PetscScalar **oovals = &my_ovals;
310f4e70085SSatish Balay 
311f4e70085SSatish Balay   if (matgetrowactive) {
312efca3c55SSatish Balay     PetscError(PETSC_COMM_SELF,__LINE__,"MatGetRow_Fortran",__FILE__,PETSC_ERR_ARG_WRONGSTATE,PETSC_ERROR_INITIAL,
313f4e70085SSatish Balay                "Cannot have two MatGetRow() active simultaneously\n\
314f4e70085SSatish Balay                call MatRestoreRow() before calling MatGetRow() a second time");
315f4e70085SSatish Balay     *ierr = 1;
316f4e70085SSatish Balay     return;
317f4e70085SSatish Balay   }
318f4e70085SSatish Balay 
3190298fd71SBarry Smith   CHKFORTRANNULLINTEGER(cols); if (!cols) oocols = NULL;
3200298fd71SBarry Smith   CHKFORTRANNULLSCALAR(vals);  if (!vals) oovals = NULL;
321f4e70085SSatish Balay 
322f4e70085SSatish Balay   *ierr = MatGetRow(*mat,*row,ncols,oocols,oovals);
323f4e70085SSatish Balay   if (*ierr) return;
324f4e70085SSatish Balay 
325f4e70085SSatish Balay   if (oocols) { *ierr = PetscMemcpy(cols,my_ocols,(*ncols)*sizeof(PetscInt)); if (*ierr) return;}
326f4e70085SSatish Balay   if (oovals) { *ierr = PetscMemcpy(vals,my_ovals,(*ncols)*sizeof(PetscScalar)); if (*ierr) return;}
327f4e70085SSatish Balay   matgetrowactive = 1;
328f4e70085SSatish Balay }
329f4e70085SSatish Balay 
3308cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matrestorerow_(Mat *mat,PetscInt *row,PetscInt *ncols,PetscInt *cols,PetscScalar *vals,PetscErrorCode *ierr)
331f4e70085SSatish Balay {
332f4e70085SSatish Balay   const PetscInt    **oocols = &my_ocols;
333f4e70085SSatish Balay   const PetscScalar **oovals = &my_ovals;
334f4e70085SSatish Balay   if (!matgetrowactive) {
335efca3c55SSatish Balay     PetscError(PETSC_COMM_SELF,__LINE__,"MatRestoreRow_Fortran",__FILE__,PETSC_ERR_ARG_WRONGSTATE,PETSC_ERROR_INITIAL,
336f4e70085SSatish Balay                "Must call MatGetRow() first");
337f4e70085SSatish Balay     *ierr = 1;
338f4e70085SSatish Balay     return;
339f4e70085SSatish Balay   }
3400298fd71SBarry Smith   CHKFORTRANNULLINTEGER(cols); if (!cols) oocols = NULL;
3410298fd71SBarry Smith   CHKFORTRANNULLSCALAR(vals);  if (!vals) oovals = NULL;
342f4e70085SSatish Balay 
343f4e70085SSatish Balay   *ierr           = MatRestoreRow(*mat,*row,ncols,oocols,oovals);
344f4e70085SSatish Balay   matgetrowactive = 0;
345f4e70085SSatish Balay }
346f4e70085SSatish Balay 
3478cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matview_(Mat *mat,PetscViewer *vin,PetscErrorCode *ierr)
348f4e70085SSatish Balay {
349f4e70085SSatish Balay   PetscViewer v;
350f4e70085SSatish Balay   PetscPatchDefaultViewers_Fortran(vin,v);
351f4e70085SSatish Balay   *ierr = MatView(*mat,v);
352f4e70085SSatish Balay }
353f4e70085SSatish Balay 
3548cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matload_(Mat *mat,PetscViewer *vin,PetscErrorCode *ierr)
355f7e310deSShri Abhyankar {
356f7e310deSShri Abhyankar   PetscViewer v;
357f7e310deSShri Abhyankar   PetscPatchDefaultViewers_Fortran(vin,v);
358112444f4SShri Abhyankar   *ierr = MatLoad(*mat,v);
359f7e310deSShri Abhyankar }
360f7e310deSShri Abhyankar 
3618cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matseqaijgetarray_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr)
362f4e70085SSatish Balay {
363f4e70085SSatish Balay   PetscScalar *mm;
364f4e70085SSatish Balay   PetscInt    m,n;
365f4e70085SSatish Balay 
3668c778c55SBarry Smith   *ierr = MatSeqAIJGetArray(*mat,&mm); if (*ierr) return;
367f4e70085SSatish Balay   *ierr = MatGetSize(*mat,&m,&n);  if (*ierr) return;
368f91d1997SBarry Smith   *ierr = PetscScalarAddressToFortran((PetscObject)*mat,1,fa,mm,m*n,ia); if (*ierr) return;
369f4e70085SSatish Balay }
370f4e70085SSatish Balay 
3718cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matseqaijrestorearray_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr)
372f4e70085SSatish Balay {
373f4e70085SSatish Balay   PetscScalar *lx;
374f4e70085SSatish Balay   PetscInt    m,n;
375f4e70085SSatish Balay 
376f4e70085SSatish Balay   *ierr = MatGetSize(*mat,&m,&n); if (*ierr) return;
377f4e70085SSatish Balay   *ierr = PetscScalarAddressFromFortran((PetscObject)*mat,fa,*ia,m*n,&lx);if (*ierr) return;
3788c778c55SBarry Smith   *ierr = MatSeqAIJRestoreArray(*mat,&lx);if (*ierr) return;
379f4e70085SSatish Balay }
380f4e70085SSatish Balay 
3818cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matdensegetarray_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr)
38273a71a0fSBarry Smith {
38373a71a0fSBarry Smith   PetscScalar *mm;
38473a71a0fSBarry Smith   PetscInt    m,n;
38573a71a0fSBarry Smith 
3868c778c55SBarry Smith   *ierr = MatDenseGetArray(*mat,&mm); if (*ierr) return;
38773a71a0fSBarry Smith   *ierr = MatGetSize(*mat,&m,&n);  if (*ierr) return;
38873a71a0fSBarry Smith   *ierr = PetscScalarAddressToFortran((PetscObject)*mat,1,fa,mm,m*n,ia); if (*ierr) return;
38973a71a0fSBarry Smith }
39073a71a0fSBarry Smith 
3918cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matdenserestorearray_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr)
39273a71a0fSBarry Smith {
39373a71a0fSBarry Smith   PetscScalar *lx;
39473a71a0fSBarry Smith   PetscInt    m,n;
39573a71a0fSBarry Smith 
39673a71a0fSBarry Smith   *ierr = MatGetSize(*mat,&m,&n); if (*ierr) return;
39773a71a0fSBarry Smith   *ierr = PetscScalarAddressFromFortran((PetscObject)*mat,fa,*ia,m*n,&lx);if (*ierr) return;
3988c778c55SBarry Smith   *ierr = MatDenseRestoreArray(*mat,&lx);if (*ierr) return;
39973a71a0fSBarry Smith }
40073a71a0fSBarry Smith 
4018cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matfactorgetsolverpackage_(Mat *mat,CHAR name PETSC_MIXED_LEN(len),PetscErrorCode *ierr PETSC_END_LEN(len))
40235bd34faSBarry Smith {
40335bd34faSBarry Smith   const char *tname;
40435bd34faSBarry Smith 
40535bd34faSBarry Smith   *ierr = MatFactorGetSolverPackage(*mat,&tname);if (*ierr) return;
40635bd34faSBarry Smith   if (name != PETSC_NULL_CHARACTER_Fortran) {
40735bd34faSBarry Smith     *ierr = PetscStrncpy(name,tname,len);if (*ierr) return;
40835bd34faSBarry Smith   }
40935bd34faSBarry Smith   FIXRETURNCHAR(PETSC_TRUE,name,len);
41035bd34faSBarry Smith }
41135bd34faSBarry Smith 
4128cc058d9SJed 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))
4135dffd610SBarry Smith {
4145dffd610SBarry Smith   char *t;
4155dffd610SBarry Smith   FIXCHAR(outtype,len,t);
4169be81726SHong Zhang   *ierr = MatGetFactor(*mat,t,*ftype,M);
4175dffd610SBarry Smith   FREECHAR(outtype,t);
4185dffd610SBarry Smith }
4195dffd610SBarry Smith 
4208cc058d9SJed 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))
421f4e70085SSatish Balay {
422f4e70085SSatish Balay   char *t;
423f4e70085SSatish Balay   FIXCHAR(outtype,len,t);
424f4e70085SSatish Balay   *ierr = MatConvert(*mat,t,*reuse,M);
425f4e70085SSatish Balay   FREECHAR(outtype,t);
426f4e70085SSatish Balay }
427f4e70085SSatish Balay 
428f4e70085SSatish Balay /*
429f4e70085SSatish Balay     MatGetSubmatrices() is slightly different from C since the
430f4e70085SSatish Balay     Fortran provides the array to hold the submatrix objects,while in C that
431f4e70085SSatish Balay     array is allocated by the MatGetSubmatrices()
432f4e70085SSatish Balay */
4338cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matgetsubmatrices_(Mat *mat,PetscInt *n,IS *isrow,IS *iscol,MatReuse *scall,Mat *smat,PetscErrorCode *ierr)
434f4e70085SSatish Balay {
435f4e70085SSatish Balay   Mat      *lsmat;
436f4e70085SSatish Balay   PetscInt i;
437f4e70085SSatish Balay 
438f4e70085SSatish Balay   if (*scall == MAT_INITIAL_MATRIX) {
439f4e70085SSatish Balay     *ierr = MatGetSubMatrices(*mat,*n,isrow,iscol,*scall,&lsmat);
440f4e70085SSatish Balay     for (i=0; i<*n; i++) {
441f4e70085SSatish Balay       smat[i] = lsmat[i];
442f4e70085SSatish Balay     }
443f4e70085SSatish Balay     *ierr = PetscFree(lsmat);
444f4e70085SSatish Balay   } else {
445f4e70085SSatish Balay     *ierr = MatGetSubMatrices(*mat,*n,isrow,iscol,*scall,&smat);
446f4e70085SSatish Balay   }
447f4e70085SSatish Balay }
448f4e70085SSatish Balay 
4497d6bfa3bSBarry Smith /*
4507d6bfa3bSBarry Smith     MatDestroyMatrices() is slightly different from C since the
4517d6bfa3bSBarry Smith     Fortran provides the array to hold the submatrix objects,while in C that
4527d6bfa3bSBarry Smith     array is allocated by the MatGetSubmatrices()
4537d6bfa3bSBarry Smith */
4548cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matdestroymatrices_(Mat *mat,PetscInt *n,Mat *smat,PetscErrorCode *ierr)
4557d6bfa3bSBarry Smith {
4567d6bfa3bSBarry Smith   PetscInt i;
4577d6bfa3bSBarry Smith 
4587d6bfa3bSBarry Smith   for (i=0; i<*n; i++) {
4596bf464f9SBarry Smith     *ierr = MatDestroy(&smat[i]);if (*ierr) return;
4607d6bfa3bSBarry Smith   }
4617d6bfa3bSBarry Smith }
4627d6bfa3bSBarry Smith 
4638cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matzerorowscolumns_(Mat *mat,PetscInt *numRows,PetscInt *rows,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr)
46417ede90eSSatish Balay {
46517ede90eSSatish Balay   CHKFORTRANNULLOBJECTDEREFERENCE(x);
46617ede90eSSatish Balay   CHKFORTRANNULLOBJECTDEREFERENCE(b);
46717ede90eSSatish Balay   *ierr = MatZeroRowsColumns(*mat,*numRows,rows,*diag,*x,*b);
46817ede90eSSatish Balay }
46917ede90eSSatish Balay 
4708cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matzerorowscolumnsis_(Mat *mat,IS *is,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr)
47117ede90eSSatish Balay {
47217ede90eSSatish Balay   CHKFORTRANNULLOBJECTDEREFERENCE(x);
47317ede90eSSatish Balay   CHKFORTRANNULLOBJECTDEREFERENCE(b);
47417ede90eSSatish Balay   *ierr = MatZeroRowsColumnsIS(*mat,*is,*diag,*x,*b);
47517ede90eSSatish Balay }
47617ede90eSSatish Balay 
4778cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matzerorowsstencil_(Mat *mat,PetscInt *numRows,MatStencil *rows,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr)
47817ede90eSSatish Balay {
47917ede90eSSatish Balay   CHKFORTRANNULLOBJECTDEREFERENCE(x);
48017ede90eSSatish Balay   CHKFORTRANNULLOBJECTDEREFERENCE(b);
48117ede90eSSatish Balay   *ierr = MatZeroRowsStencil(*mat,*numRows,rows,*diag,*x,*b);
48217ede90eSSatish Balay }
48317ede90eSSatish Balay 
4848cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matzerorowscolumnsstencil_(Mat *mat,PetscInt *numRows,MatStencil *rows,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr)
485d25a37e1SJed Brown {
486d25a37e1SJed Brown   CHKFORTRANNULLOBJECTDEREFERENCE(x);
487d25a37e1SJed Brown   CHKFORTRANNULLOBJECTDEREFERENCE(b);
488d25a37e1SJed Brown   *ierr = MatZeroRowsColumnsStencil(*mat,*numRows,rows,*diag,*x,*b);
489d25a37e1SJed Brown }
490d25a37e1SJed Brown 
4918cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matzerorows_(Mat *mat,PetscInt *numRows,PetscInt *rows,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr)
492f4e70085SSatish Balay {
4932b40b63fSBarry Smith   CHKFORTRANNULLOBJECTDEREFERENCE(x);
4942b40b63fSBarry Smith   CHKFORTRANNULLOBJECTDEREFERENCE(b);
4952b40b63fSBarry Smith   *ierr = MatZeroRows(*mat,*numRows,rows,*diag,*x,*b);
496f4e70085SSatish Balay }
497f4e70085SSatish Balay 
4988cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matzerorowsis_(Mat *mat,IS *is,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr)
499f4e70085SSatish Balay {
5002b40b63fSBarry Smith   CHKFORTRANNULLOBJECTDEREFERENCE(x);
5012b40b63fSBarry Smith   CHKFORTRANNULLOBJECTDEREFERENCE(b);
5022b40b63fSBarry Smith   *ierr = MatZeroRowsIS(*mat,*is,*diag,*x,*b);
503f4e70085SSatish Balay }
504f4e70085SSatish Balay 
5058cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matzerorowslocal_(Mat *mat,PetscInt *numRows,PetscInt *rows,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr)
506f4e70085SSatish Balay {
5072b40b63fSBarry Smith   CHKFORTRANNULLOBJECTDEREFERENCE(x);
5082b40b63fSBarry Smith   CHKFORTRANNULLOBJECTDEREFERENCE(b);
5092b40b63fSBarry Smith   *ierr = MatZeroRowsLocal(*mat,*numRows,rows,*diag,*x,*b);
510f4e70085SSatish Balay }
511f4e70085SSatish Balay 
5128cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matzerorowslocalis_(Mat *mat,IS *is,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr)
513f4e70085SSatish Balay {
5142b40b63fSBarry Smith   CHKFORTRANNULLOBJECTDEREFERENCE(x);
5152b40b63fSBarry Smith   CHKFORTRANNULLOBJECTDEREFERENCE(b);
5162b40b63fSBarry Smith   *ierr = MatZeroRowsLocalIS(*mat,*is,*diag,*x,*b);
517f4e70085SSatish Balay }
518f4e70085SSatish Balay 
5198cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matzerorowscolumnslocal_(Mat *mat,PetscInt *numRows,PetscInt *rows,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr)
52017ede90eSSatish Balay {
52117ede90eSSatish Balay   CHKFORTRANNULLOBJECTDEREFERENCE(x);
52217ede90eSSatish Balay   CHKFORTRANNULLOBJECTDEREFERENCE(b);
52317ede90eSSatish Balay   *ierr = MatZeroRowsColumnsLocal(*mat,*numRows,rows,*diag,*x,*b);
52417ede90eSSatish Balay }
52517ede90eSSatish Balay 
5268cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matzerorowscolumnslocalis_(Mat *mat,IS *is,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr)
52717ede90eSSatish Balay {
52817ede90eSSatish Balay   CHKFORTRANNULLOBJECTDEREFERENCE(x);
52917ede90eSSatish Balay   CHKFORTRANNULLOBJECTDEREFERENCE(b);
53017ede90eSSatish Balay   *ierr = MatZeroRowsColumnsLocalIS(*mat,*is,*diag,*x,*b);
53117ede90eSSatish Balay }
5321eea217eSSatish Balay 
5338cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matsetoptionsprefix_(Mat *mat,CHAR prefix PETSC_MIXED_LEN(len),PetscErrorCode *ierr PETSC_END_LEN(len))
5341eea217eSSatish Balay {
5351eea217eSSatish Balay   char *t;
5361eea217eSSatish Balay 
5371eea217eSSatish Balay   FIXCHAR(prefix,len,t);
5381eea217eSSatish Balay   *ierr = MatSetOptionsPrefix(*mat,t);
5391eea217eSSatish Balay   FREECHAR(prefix,t);
5401eea217eSSatish Balay }
5411eea217eSSatish Balay 
542d0195637SJed Brown PETSC_EXTERN void PETSC_STDCALL matnullspaceremove_(MatNullSpace *sp,Vec *vec,PetscErrorCode *ierr)
543812c3f48SMatthew Knepley {
544d0195637SJed Brown   *ierr = MatNullSpaceRemove(*sp,*vec);
545812c3f48SMatthew Knepley }
5461eea217eSSatish Balay 
547*4d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetinfo_(Mat *mat,MatInfoType *flag,MatInfo *info, int *ierr)
5485ba43861SSatish Balay {
549*4d03fd2bSBarry Smith   *ierr = MatGetInfo(*mat,*flag,info);
5505ba43861SSatish Balay }
5515ba43861SSatish Balay 
552*4d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matlufactor_(Mat *mat,IS *row,IS *col,const MatFactorInfo *info, int *ierr)
55322688b47SSatish Balay {
554*4d03fd2bSBarry Smith   *ierr = MatLUFactor(*mat,*row,*col,info);
55522688b47SSatish Balay }
55622688b47SSatish Balay 
557*4d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matilufactor_(Mat *mat,IS *row,IS *col,const MatFactorInfo *info, int *ierr)
55822688b47SSatish Balay {
559*4d03fd2bSBarry Smith   *ierr = MatILUFactor(*mat,*row,*col,info);
56022688b47SSatish Balay }
56122688b47SSatish Balay 
562*4d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matlufactorsymbolic_(Mat *fact,Mat *mat,IS *row,IS *col,const MatFactorInfo *info, int *ierr)
56322688b47SSatish Balay {
564*4d03fd2bSBarry Smith   *ierr = MatLUFactorSymbolic(*fact,*mat,*row,*col,info);
56522688b47SSatish Balay }
56622688b47SSatish Balay 
567*4d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matlufactornumeric_(Mat *fact,Mat *mat,const MatFactorInfo *info, int *ierr)
56822688b47SSatish Balay {
569*4d03fd2bSBarry Smith   *ierr = MatLUFactorNumeric(*fact,*mat,info);
57022688b47SSatish Balay }
57122688b47SSatish Balay 
572*4d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matcholeskyfactor_(Mat *mat,IS *perm,const MatFactorInfo *info, int *ierr)
57322688b47SSatish Balay {
574*4d03fd2bSBarry Smith   *ierr = MatCholeskyFactor(*mat,*perm,info);
57522688b47SSatish Balay }
57622688b47SSatish Balay 
577*4d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matcholeskyfactorsymbolic_(Mat *fact,Mat *mat,IS *perm,const MatFactorInfo *info, int *ierr)
57822688b47SSatish Balay {
579*4d03fd2bSBarry Smith   *ierr = MatCholeskyFactorSymbolic(*fact,*mat,*perm,info);
58022688b47SSatish Balay }
58122688b47SSatish Balay 
582*4d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matcholeskyfactornumeric_(Mat *fact,Mat *mat,const MatFactorInfo *info, int *ierr)
58322688b47SSatish Balay {
584*4d03fd2bSBarry Smith   *ierr = MatCholeskyFactorNumeric(*fact,*mat,info);
58522688b47SSatish Balay }
58622688b47SSatish Balay 
587*4d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matilufactorsymbolic_(Mat *fact,Mat *mat,IS *row,IS *col,const MatFactorInfo *info, int *ierr)
58822688b47SSatish Balay {
589*4d03fd2bSBarry Smith   *ierr = MatILUFactorSymbolic(*fact,*mat,*row,*col,info);
59022688b47SSatish Balay }
59122688b47SSatish Balay 
592*4d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL maticcfactorsymbolic_(Mat *fact,Mat *mat,IS *perm,const MatFactorInfo *info, int *ierr)
59322688b47SSatish Balay {
594*4d03fd2bSBarry Smith   *ierr = MatICCFactorSymbolic(*fact,*mat,*perm,info);
59522688b47SSatish Balay }
59622688b47SSatish Balay 
597*4d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL maticcfactor_(Mat *mat,IS *row,const MatFactorInfo *info, int *ierr)
59822688b47SSatish Balay {
599*4d03fd2bSBarry Smith   *ierr = MatICCFactor(*mat,*row,info);
60022688b47SSatish Balay }
60122688b47SSatish Balay 
602*4d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matfactorinfoinitialize_(MatFactorInfo *info, int *ierr)
60322688b47SSatish Balay {
604*4d03fd2bSBarry Smith   *ierr = MatFactorInfoInitialize(info);
60522688b47SSatish Balay }
606