xref: /petsc/src/mat/interface/ftn-custom/zmatrixf.c (revision 2fb1d9daa8d289b4e375fe89ef72d82069342f85)
1 #include <petsc/private/fortranimpl.h>
2 #include <petsc/private/f90impl.h>
3 #include <petscmat.h>
4 #include <petscviewer.h>
5 
6 #if defined(PETSC_HAVE_FORTRAN_CAPS)
7 #define matgetvalues_                    MATGETVALUES
8 #define matgetvalues0_                   MATGETVALUES0
9 #define matgetvaluesnn1_                 MATGETVALUESnn1
10 #define matgetvaluesnnnn_                MATGETVALUESnnnn
11 #define matgetvalues11_                  MATGETVALUES11
12 #define matgetvalues1n_                  MATGETVALUES1n
13 #define matgetvaluesn1_                  MATGETVALUESn1
14 #define matsetvalues_                    MATSETVALUES
15 #define matsetvaluesnnnn_                MATSETVALUESNNNN
16 #define matsetvalues0_                   MATSETVALUES0
17 #define matsetvaluesnn1_                 MATSETVALUESNN1
18 #define matsetvalues11_                  MATSETVALUES11
19 #define matsetvalues1n_                  MATSETVALUES1N
20 #define matsetvaluesn1_                  MATSETVALUESN1
21 #define matsetvaluesblocked0_            MATSETVALUESBLOCKED0
22 #define matsetvaluesblocked2_            MATSETVALUESBLOCKED2
23 #define matsetvaluesblocked11_           MATSETVALUESBLOCKED11
24 #define matsetvaluesblocked111_          MATSETVALUESBLOCKED111
25 #define matsetvaluesblocked1n_           MATSETVALUESBLOCKED1N
26 #define matsetvaluesblockedn1_           MATSETVALUESBLOCKEDN1
27 #define matsetvaluesblockedlocal_        MATSETVALUESBLOCKEDLOCAL
28 #define matsetvaluesblockedlocal0_       MATSETVALUESBLOCKEDLOCAL0
29 #define matsetvaluesblockedlocal11_      MATSETVALUESBLOCKEDLOCAL11
30 #define matsetvaluesblockedlocal111_     MATSETVALUESBLOCKEDLOCAL111
31 #define matsetvaluesblockedlocal1n_      MATSETVALUESBLOCKEDLOCAL1N
32 #define matsetvaluesblockedlocaln1_      MATSETVALUESBLOCKEDLOCALN1
33 #define matsetvalueslocal_               MATSETVALUESLOCAL
34 #define matsetvalueslocal0_              MATSETVALUESLOCAL0
35 #define matsetvalueslocal11_             MATSETVALUESLOCAL11
36 #define matsetvalueslocal11nn_           MATSETVALUESLOCAL11NN
37 #define matsetvalueslocal111_            MATSETVALUESLOCAL111
38 #define matsetvalueslocal1n_             MATSETVALUESLOCAL1N
39 #define matsetvalueslocaln1_             MATSETVALUESLOCALN1
40 #define matgetrowmin_                    MATGETROWMIN
41 #define matgetrowminabs_                 MATGETROWMINABS
42 #define matgetrowmax_                    MATGETROWMAX
43 #define matgetrowmaxabs_                 MATGETROWMAXABS
44 #define matdestroymatrices_              MATDESTROYMATRICES
45 #define matdestroysubmatrices_           MATDESTROYSUBMATRICES
46 #define matgetfactor_                    MATGETFACTOR
47 #define matfactorgetsolverpackage_       MATFACTORGETSOLVERPACKAGE
48 #define matgetrowij_                     MATGETROWIJ
49 #define matrestorerowij_                 MATRESTOREROWIJ
50 #define matgetrow_                       MATGETROW
51 #define matrestorerow_                   MATRESTOREROW
52 #define matload_                         MATLOAD
53 #define matview_                         MATVIEW
54 #define matseqaijgetarray_               MATSEQAIJGETARRAY
55 #define matseqaijrestorearray_           MATSEQAIJRESTOREARRAY
56 #define matdensegetarray_                MATDENSEGETARRAY
57 #define matdensegetarrayread_            MATDENSEGETARRAYREAD
58 #define matdenserestorearray_            MATDENSERESTOREARRAY
59 #define matdenserestorearrayread_        MATDENSERESTOREARRAYREAD
60 #define matconvert_                      MATCONVERT
61 #define matcreatesubmatrices_            MATCREATESUBMATRICES
62 #define matcreatesubmatricesmpi_         MATCREATESUBMATRICESMPI
63 #define matzerorowscolumns_              MATZEROROWSCOLUMNS
64 #define matzerorowscolumnsis_            MATZEROROWSCOLUMNSIS
65 #define matzerorowsstencil_              MATZEROROWSSTENCIL
66 #define matzerorowscolumnsstencil_       MATZEROROWSCOLUMNSSTENCIL
67 #define matzerorows_                     MATZEROROWS
68 #define matzerorowsis_                   MATZEROROWSIS
69 #define matzerorowslocal_                MATZEROROWSLOCAL
70 #define matzerorowslocal0_               MATZEROROWSLOCAL0
71 #define matzerorowslocal1_               MATZEROROWSLOCAL1
72 #define matzerorowslocalis_              MATZEROROWSLOCALIS
73 #define matzerorowscolumnslocal_         MATZEROROWSCOLUMNSLOCAL
74 #define matzerorowscolumnslocalis_       MATZEROROWSCOLUMNSLOCALIS
75 #define matsetoptionsprefix_             MATSETOPTIONSPREFIX
76 #define matcreatevecs_                   MATCREATEVECS
77 #define matnullspaceremove_              MATNULLSPACEREMOVE
78 #define matgetinfo_                      MATGETINFO
79 #define matlufactor_                     MATLUFACTOR
80 #define matilufactor_                    MATILUFACTOR
81 #define matlufactorsymbolic_             MATLUFACTORSYMBOLIC
82 #define matlufactornumeric_              MATLUFACTORNUMERIC
83 #define matcholeskyfactor_               MATCHOLESKYFACTOR
84 #define matcholeskyfactorsymbolic_       MATCHOLESKYFACTORSYMBOLIC
85 #define matcholeskyfactornumeric_        MATCHOLESKYFACTORNUMERIC
86 #define matilufactorsymbolic_            MATILUFACTORSYMBOLIC
87 #define maticcfactorsymbolic_            MATICCFACTORSYMBOLIC
88 #define maticcfactor_                    MATICCFACTOR
89 #define matfactorinfoinitialize_         MATFACTORINFOINITIALIZE
90 #define matnullspacesetfunction_         MATNULLSPACESETFUNCTION
91 #define matfindnonzerorows_              MATFINDNONZEROROWS
92 #define matgetsize_                      MATGETSIZE
93 #define matgetsize00_                    MATGETSIZE00
94 #define matgetsize10_                    MATGETSIZE10
95 #define matgetsize01_                    MATGETSIZE01
96 #define matgetlocalsize_                 MATGETLOCALSIZE
97 #define matgetlocalsize00_               MATGETLOCALSIZE00
98 #define matgetlocalsize10_               MATGETLOCALSIZE10
99 #define matgetlocalsize01_               MATGETLOCALSIZE01
100 #define matsetnullspace_                 MATSETNULLSPACE
101 #define matgetownershiprange_            MATGETOWNERSHIPRANGE
102 #define matgetownershiprange00_          MATGETOWNERSHIPRANGE00
103 #define matgetownershiprange10_          MATGETOWNERSHIPRANGE10
104 #define matgetownershiprange01_          MATGETOWNERSHIPRANGE01
105 #define matgetownershiprange11_          MATGETOWNERSHIPRANGE11
106 #define matgetownershipis_               MATGETOWNERSHIPIS
107 #define matgetownershiprangecolumn_      MATGETOWNERSHIPRANGECOLUMN
108 #define matviewfromoptions_              MATVIEWFROMOPTIONS
109 #define matdestroy_                      MATDESTROY
110 #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE)
111 #define matsetvalues_                    matsetvalues
112 #define matsetvaluesnnnn_                matsetvaluesnnnn
113 #define matsetvalues0_                   matsetvalues0
114 #define matsetvaluesnn1_                 matsetvaluesnn1
115 #define matsetvalues11_                  matsetvalues11
116 #define matsetvaluesn1_                  matsetvaluesn1
117 #define matsetvalues1n_                  matsetvalues1n
118 #define matsetvalueslocal_               matsetvalueslocal
119 #define matsetvalueslocal0_              matsetvalueslocal0
120 #define matsetvalueslocal11_             matsetvalueslocal11
121 #define matsetvalueslocal11nn_           matsetvalueslocal11nn
122 #define matsetvalueslocal111_            matsetvalueslocal111
123 #define matsetvalueslocal1n_             matsetvalueslocal1n
124 #define matsetvalueslocaln1_             matsetvalueslocaln1
125 #define matsetvaluesblocked_             matsetvaluesblocked
126 #define matsetvaluesblocked0_            matsetvaluesblocked0
127 #define matsetvaluesblocked2_            matsetvaluesblocked2
128 #define matsetvaluesblocked11_           matsetvaluesblocked11
129 #define matsetvaluesblocked111_          matsetvaluesblocked111
130 #define matsetvaluesblocked1n_           matsetvaluesblocked1n
131 #define matsetvaluesblockedn1_           matsetvaluesblockedn1
132 #define matsetvaluesblockedlocal_        matsetvaluesblockedlocal
133 #define matsetvaluesblockedlocal0_       matsetvaluesblockedlocal0
134 #define matsetvaluesblockedlocal11_      matsetvaluesblockedlocal11
135 #define matsetvaluesblockedlocal111_     matsetvaluesblockedlocal111
136 #define matsetvaluesblockedlocal1n_      matsetvaluesblockedlocal1n
137 #define matsetvaluesblockedlocaln1_      matsetvaluesblockedlocaln1
138 #define matgetrowmin_                    matgetrowmin
139 #define matgetrowminabs_                 matgetrowminabs
140 #define matgetrowmax_                    matgetrowmax
141 #define matgetrowmaxabs_                 matgetrowmaxabs
142 #define matdestroymatrices_              matdestroymatrices
143 #define matdestroysubmatrices_           matdestroysubmatrices
144 #define matgetfactor_                    matgetfactor
145 #define matfactorgetsolverpackage_       matfactorgetsolverpackage
146 #define matcreatevecs_                   matcreatevecs
147 #define matgetrowij_                     matgetrowij
148 #define matrestorerowij_                 matrestorerowij
149 #define matgetrow_                       matgetrow
150 #define matrestorerow_                   matrestorerow
151 #define matview_                         matview
152 #define matload_                         matload
153 #define matseqaijgetarray_               matseqaijgetarray
154 #define matseqaijrestorearray_           matseqaijrestorearray
155 #define matdensegetarray_                matdensegetarray
156 #define matdensegetarrayread_            matdensegetarrayread
157 #define matdenserestorearray_            matdenserestorearray
158 #define matdenserestorearrayread_        matdenserestorearrayread
159 #define matconvert_                      matconvert
160 #define matcreatesubmatrices_            matcreatesubmatrices
161 #define matcreatesubmatricesmpi_         matcreatesubmatricesmpi
162 #define matzerorowscolumns_              matzerorowscolumns
163 #define matzerorowscolumnsis_            matzerorowscolumnsis
164 #define matzerorowsstencil_              matzerorowsstencil
165 #define matzerorowscolumnsstencil_       matzerorowscolumnsstencil
166 #define matzerorows_                     matzerorows
167 #define matzerorowsis_                   matzerorowsis
168 #define matzerorowslocal_                matzerorowslocal
169 #define matzerorowslocalis_              matzerorowslocalis
170 #define matzerorowscolumnslocal_         matzerorowscolumnslocal
171 #define matzerorowscolumnslocalis_       matzerorowscolumnslocalis
172 #define matsetoptionsprefix_             matsetoptionsprefix
173 #define matnullspaceremove_              matnullspaceremove
174 #define matgetinfo_                      matgetinfo
175 #define matlufactor_                     matlufactor
176 #define matilufactor_                    matilufactor
177 #define matlufactorsymbolic_             matlufactorsymbolic
178 #define matlufactornumeric_              matlufactornumeric
179 #define matcholeskyfactor_               matcholeskyfactor
180 #define matcholeskyfactorsymbolic_       matcholeskyfactorsymbolic
181 #define matcholeskyfactornumeric_        matcholeskyfactornumeric
182 #define matilufactorsymbolic_            matilufactorsymbolic
183 #define maticcfactorsymbolic_            maticcfactorsymbolic
184 #define maticcfactor_                    maticcfactor
185 #define matfactorinfoinitialize_         matfactorinfoinitialize
186 #define matnullspacesetfunction_         matnullspacesetfunction
187 #define matfindnonzerorows_              matfindnonzerorows
188 #define matgetsize_                      matgetsize
189 #define matgetsize00_                    matgetsize00
190 #define matgetsize10_                    matgetsize10
191 #define matgetsize01_                    matgetsize01
192 #define matgetlocalsize_                 matgetlocalsize
193 #define matgetlocalsize00_               matgetlocalsize00
194 #define matgetlocalsize10_               matgetlocalsize10
195 #define matgetlocalsize01_               matgetlocalsize01
196 #define matgetvalues_                    matgetvalues
197 #define matgetvalues0_                   matgetvalues0
198 #define matgetvaluesnn1_                 matgetvaluesnn1
199 #define matgetvaluesnnnn_                matgetvaluesnnnn
200 #define matgetvalues11_                  matgetvalues11
201 #define matgetvalues1n_                  matgetvalues1n
202 #define matgetvaluesn1_                  matgetvaluesn1
203 #define matsetnullspace_                 matsetnullspace
204 #define matgetownershiprange_            matgetownershiprange
205 #define matgetownershiprange00_          matgetownershiprange00
206 #define matgetownershiprange10_          matgetownershiprange10
207 #define matgetownershiprange01_          matgetownershiprange01
208 #define matgetownershiprange11_          matgetownershiprange11
209 #define matgetownershipis_               matgetownershipis
210 #define matgetownershiprangecolumn_      matgetownershiprangecolumn
211 #define matviewfromoptions_              matviewfromoptions
212 #define matdestroy_                      matdestroy
213 #endif
214 
215 PETSC_EXTERN void matgetvalues_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[],PetscScalar v[], int *ierr)
216 {
217   *ierr = MatGetValues(*mat,*m,idxm,*n,idxn,v);
218 }
219 
220 PETSC_EXTERN void matgetvalues0_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[],PetscScalar v[], int *ierr)
221 {
222   matgetvalues_(mat,m,idxm,n,idxn,v,ierr);
223 }
224 
225 PETSC_EXTERN void matgetvaluesnn1_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[],PetscScalar v[], int *ierr)
226 {
227   matgetvalues_(mat,m,idxm,n,idxn,v,ierr);
228 }
229 
230 PETSC_EXTERN void matgetvaluesnnnn_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[],PetscScalar v[], int *ierr)
231 {
232   matgetvalues_(mat,m,idxm,n,idxn,v,ierr);
233 }
234 
235 PETSC_EXTERN void matgetvalues11_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[],PetscScalar v[], int *ierr)
236 {
237   matgetvalues_(mat,m,idxm,n,idxn,v,ierr);
238 }
239 
240 PETSC_EXTERN void matgetvalues1n_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[],PetscScalar v[], int *ierr)
241 {
242   matgetvalues_(mat,m,idxm,n,idxn,v,ierr);
243 }
244 
245 PETSC_EXTERN void matgetvaluesn1_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[],PetscScalar v[], int *ierr)
246 {
247   matgetvalues_(mat,m,idxm,n,idxn,v,ierr);
248 }
249 
250 PETSC_EXTERN void  matgetownershiprange_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr)
251 {
252   CHKFORTRANNULLINTEGER(m);
253   CHKFORTRANNULLINTEGER(n);
254   *ierr = MatGetOwnershipRange(*mat,m,n);
255 }
256 
257 PETSC_EXTERN void  matgetownershiprange00_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr)
258 {
259   CHKFORTRANNULLINTEGER(m);
260   CHKFORTRANNULLINTEGER(n);
261   *ierr = MatGetOwnershipRange(*mat,m,n);
262 }
263 
264 PETSC_EXTERN void  matgetownershiprange10_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr)
265 {
266   CHKFORTRANNULLINTEGER(m);
267   CHKFORTRANNULLINTEGER(n);
268   *ierr = MatGetOwnershipRange(*mat,m,n);
269 }
270 
271 PETSC_EXTERN void  matgetownershiprange01_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr)
272 {
273   CHKFORTRANNULLINTEGER(m);
274   CHKFORTRANNULLINTEGER(n);
275   *ierr = MatGetOwnershipRange(*mat,m,n);
276 }
277 
278 PETSC_EXTERN void  matgetownershiprange11_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr)
279 {
280   CHKFORTRANNULLINTEGER(m);
281   CHKFORTRANNULLINTEGER(n);
282   *ierr = MatGetOwnershipRange(*mat,m,n);
283 }
284 
285 PETSC_EXTERN void  matgetownershipis_(Mat *mat,IS *m,IS *n, int *ierr)
286 {
287   CHKFORTRANNULLOBJECT(m);
288   CHKFORTRANNULLOBJECT(n);
289   *ierr = MatGetOwnershipIS(*mat,m,n);
290 }
291 
292 PETSC_EXTERN void  matgetownershiprangecolumn_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr)
293 {
294   CHKFORTRANNULLINTEGER(m);
295   CHKFORTRANNULLINTEGER(n);
296   *ierr = MatGetOwnershipRangeColumn(*mat,m,n);
297 }
298 
299 PETSC_EXTERN void  matgetsize_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr)
300 {
301   CHKFORTRANNULLINTEGER(m);
302   CHKFORTRANNULLINTEGER(n);
303   *ierr = MatGetSize(*mat,m,n);
304 }
305 
306 PETSC_EXTERN void  matgetsize00_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr)
307 {
308   matgetsize_(mat,m,n,ierr);
309 }
310 
311 PETSC_EXTERN void  matgetsize10_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr)
312 {
313   matgetsize_(mat,m,n,ierr);
314 }
315 
316 PETSC_EXTERN void  matgetsize01_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr)
317 {
318   matgetsize_(mat,m,n,ierr);
319 }
320 
321 PETSC_EXTERN void  matgetlocalsize_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr)
322 {
323   CHKFORTRANNULLINTEGER(m);
324   CHKFORTRANNULLINTEGER(n);
325   *ierr = MatGetLocalSize(*mat,m,n);
326 }
327 
328 PETSC_EXTERN void  matgetlocalsize00_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr)
329 {
330   matgetlocalsize_(mat,m,n,ierr);
331 }
332 
333 PETSC_EXTERN void  matgetlocalsize10_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr)
334 {
335   matgetlocalsize_(mat,m,n,ierr);
336 }
337 
338 PETSC_EXTERN void  matgetlocalsize01_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr)
339 {
340   matgetlocalsize_(mat,m,n,ierr);
341 }
342 
343 PETSC_EXTERN void  matsetvaluesblocked_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr){
344   *ierr = MatSetValuesBlocked(*mat,*m,idxm,*n,idxn,v,*addv);
345 }
346 
347 PETSC_EXTERN void  matsetvaluesblocked2_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], F90Array2d *y,InsertMode *addv, int *ierr PETSC_F90_2PTR_PROTO(ptrd)){
348   PetscScalar *fa;
349   *ierr = F90Array2dAccess(y,MPIU_SCALAR,(void**)&fa PETSC_F90_2PTR_PARAM(ptrd));if (*ierr) return;
350   matsetvaluesblocked_(mat,m,idxm,n,idxn,fa,addv,ierr);
351 }
352 
353 PETSC_EXTERN void  matsetvaluesblocked0_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr){
354   matsetvaluesblocked_(mat,m,idxm,n,idxn,v,addv,ierr);
355 }
356 
357 PETSC_EXTERN void  matsetvaluesblocked11_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr){
358   matsetvaluesblocked_(mat,m,idxm,n,idxn,v,addv,ierr);
359 }
360 
361 PETSC_EXTERN void  matsetvaluesblocked111_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr){
362   matsetvaluesblocked_(mat,m,idxm,n,idxn,v,addv,ierr);
363 }
364 
365 PETSC_EXTERN void  matsetvaluesblocked1n_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr){
366   matsetvaluesblocked_(mat,m,idxm,n,idxn,v,addv,ierr);
367 }
368 
369 PETSC_EXTERN void  matsetvaluesblockedn1_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr){
370   matsetvaluesblocked_(mat,m,idxm,n,idxn,v,addv,ierr);
371 }
372 
373 PETSC_EXTERN void  matsetvaluesblockedlocal_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr)
374 {
375   *ierr = MatSetValuesBlockedLocal(*mat,*nrow,irow,*ncol,icol,y,*addv);
376 }
377 
378 PETSC_EXTERN void  matsetvaluesblockedlocal0_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr){
379   matsetvaluesblockedlocal_(mat,m,idxm,n,idxn,v,addv,ierr);
380 }
381 
382 PETSC_EXTERN void  matsetvaluesblockedlocal11_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr){
383   matsetvaluesblockedlocal_(mat,m,idxm,n,idxn,v,addv,ierr);
384 }
385 
386 PETSC_EXTERN void  matsetvaluesblockedlocal111_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr){
387   matsetvaluesblockedlocal_(mat,m,idxm,n,idxn,v,addv,ierr);
388 }
389 
390 PETSC_EXTERN void  matsetvaluesblockedlocal1n_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr){
391   matsetvaluesblockedlocal_(mat,m,idxm,n,idxn,v,addv,ierr);
392 }
393 
394 PETSC_EXTERN void  matsetvaluesblockedlocaln1_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr){
395   matsetvaluesblockedlocal_(mat,m,idxm,n,idxn,v,addv,ierr);
396 }
397 
398 PETSC_EXTERN void  matsetvalues_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr)
399 {
400   *ierr = MatSetValues(*mat,*m,idxm,*n,idxn,v,*addv);
401 }
402 
403 PETSC_EXTERN void  matsetvaluesnnnn_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr)
404 {
405   matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr);
406 }
407 
408 PETSC_EXTERN void  matsetvalues0_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr)
409 {
410   matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr);
411 }
412 
413 PETSC_EXTERN void  matsetvaluesnn1_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr)
414 {
415   matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr);
416 }
417 
418 PETSC_EXTERN void  matsetvalues11_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr)
419 {
420   matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr);
421 }
422 
423 PETSC_EXTERN void  matsetvaluesn1_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr)
424 {
425   matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr);
426 }
427 
428 PETSC_EXTERN void  matsetvalues1n_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr)
429 {
430   matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr);
431 }
432 
433 PETSC_EXTERN void  matsetvalueslocal_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr)
434 {
435   *ierr = MatSetValuesLocal(*mat,*nrow,irow,*ncol,icol,y,*addv);
436 }
437 
438 PETSC_EXTERN void  matsetvalueslocal0_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr)
439 {
440   matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr);
441 }
442 
443 PETSC_EXTERN void  matsetvalueslocal11_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr)
444 {
445   matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr);
446 }
447 
448 PETSC_EXTERN void  matsetvalueslocal11nn_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr)
449 {
450   matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr);
451 }
452 
453 PETSC_EXTERN void  matsetvalueslocal111_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr)
454 {
455   matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr);
456 }
457 
458 PETSC_EXTERN void  matsetvalueslocal1n_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr)
459 {
460   matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr);
461 }
462 
463 PETSC_EXTERN void  matsetvalueslocaln1_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr)
464 {
465   matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr);
466 }
467 
468 PETSC_EXTERN void  matgetrowmin_(Mat *mat,Vec *v,PetscInt idx[], int *ierr)
469 {
470   CHKFORTRANNULLINTEGER(idx);
471   *ierr = MatGetRowMin(*mat,*v,idx);
472 }
473 
474 PETSC_EXTERN void  matgetrowminabs_(Mat *mat,Vec *v,PetscInt idx[], int *ierr)
475 {
476   CHKFORTRANNULLINTEGER(idx);
477   *ierr = MatGetRowMinAbs(*mat,*v,idx);
478 }
479 
480 PETSC_EXTERN void  matgetrowmax_(Mat *mat,Vec *v,PetscInt idx[], int *ierr)
481 {
482   CHKFORTRANNULLINTEGER(idx);
483   *ierr = MatGetRowMax(*mat,*v,idx);
484 }
485 
486 PETSC_EXTERN void  matgetrowmaxabs_(Mat *mat,Vec *v,PetscInt idx[], int *ierr)
487 {
488   CHKFORTRANNULLINTEGER(idx);
489   *ierr = MatGetRowMaxAbs(*mat,*v,idx);
490 }
491 
492 static PetscErrorCode ournullfunction(MatNullSpace sp,Vec x,void *ctx)
493 {
494   PetscErrorCode ierr = 0;
495   (*(void (*)(MatNullSpace*,Vec*,void*,PetscErrorCode*))(((PetscObject)sp)->fortran_func_pointers[0]))(&sp,&x,ctx,&ierr);CHKERRQ(ierr);
496   return 0;
497 }
498 
499 PETSC_EXTERN void matnullspacesetfunction_(MatNullSpace *sp, PetscErrorCode (*rem)(MatNullSpace,Vec,void*),void *ctx,PetscErrorCode *ierr)
500 {
501   PetscObjectAllocateFortranPointers(*sp,1);
502   ((PetscObject)*sp)->fortran_func_pointers[0] = (PetscVoidFunction)rem;
503 
504   *ierr = MatNullSpaceSetFunction(*sp,ournullfunction,ctx);
505 }
506 
507 PETSC_EXTERN void matcreatevecs_(Mat *mat,Vec *right,Vec *left, int *ierr)
508 {
509   CHKFORTRANNULLOBJECT(right);
510   CHKFORTRANNULLOBJECT(left);
511   *ierr = MatCreateVecs(*mat,right,left);
512 }
513 
514 PETSC_EXTERN void matgetrowij_(Mat *B,PetscInt *shift,PetscBool *sym,PetscBool *blockcompressed,PetscInt *n,PetscInt *ia,size_t *iia,
515                                 PetscInt *ja,size_t *jja,PetscBool  *done,PetscErrorCode *ierr)
516 {
517   const PetscInt *IA,*JA;
518   *ierr = MatGetRowIJ(*B,*shift,*sym,*blockcompressed,n,&IA,&JA,done);if (*ierr) return;
519   *iia  = PetscIntAddressToFortran(ia,(PetscInt*)IA);
520   *jja  = PetscIntAddressToFortran(ja,(PetscInt*)JA);
521 }
522 
523 PETSC_EXTERN void matrestorerowij_(Mat *B,PetscInt *shift,PetscBool *sym,PetscBool *blockcompressed, PetscInt *n,PetscInt *ia,size_t *iia,
524                                     PetscInt *ja,size_t *jja,PetscBool  *done,PetscErrorCode *ierr)
525 {
526   const PetscInt *IA = PetscIntAddressFromFortran(ia,*iia),*JA = PetscIntAddressFromFortran(ja,*jja);
527   *ierr = MatRestoreRowIJ(*B,*shift,*sym,*blockcompressed,n,&IA,&JA,done);
528 }
529 
530 /*
531    This is a poor way of storing the column and value pointers
532   generated by MatGetRow() to be returned with MatRestoreRow()
533   but there is not natural,good place else to store them. Hence
534   Fortran programmers can only have one outstanding MatGetRows()
535   at a time.
536 */
537 static PetscErrorCode    matgetrowactive = 0;
538 static const PetscInt    *my_ocols       = 0;
539 static const PetscScalar *my_ovals       = 0;
540 
541 PETSC_EXTERN void matgetrow_(Mat *mat,PetscInt *row,PetscInt *ncols,PetscInt *cols,PetscScalar *vals,PetscErrorCode *ierr)
542 {
543   const PetscInt    **oocols = &my_ocols;
544   const PetscScalar **oovals = &my_ovals;
545 
546   if (matgetrowactive) {
547     PetscError(PETSC_COMM_SELF,__LINE__,"MatGetRow_Fortran",__FILE__,PETSC_ERR_ARG_WRONGSTATE,PETSC_ERROR_INITIAL,
548                "Cannot have two MatGetRow() active simultaneously\n\
549                call MatRestoreRow() before calling MatGetRow() a second time");
550     *ierr = 1;
551     return;
552   }
553 
554   CHKFORTRANNULLINTEGER(cols); if (!cols) oocols = NULL;
555   CHKFORTRANNULLSCALAR(vals);  if (!vals) oovals = NULL;
556 
557   *ierr = MatGetRow(*mat,*row,ncols,oocols,oovals);
558   if (*ierr) return;
559 
560   if (oocols) { *ierr = PetscArraycpy(cols,my_ocols,*ncols); if (*ierr) return;}
561   if (oovals) { *ierr = PetscArraycpy(vals,my_ovals,*ncols); if (*ierr) return;}
562   matgetrowactive = 1;
563 }
564 
565 PETSC_EXTERN void matrestorerow_(Mat *mat,PetscInt *row,PetscInt *ncols,PetscInt *cols,PetscScalar *vals,PetscErrorCode *ierr)
566 {
567   const PetscInt    **oocols = &my_ocols;
568   const PetscScalar **oovals = &my_ovals;
569   if (!matgetrowactive) {
570     PetscError(PETSC_COMM_SELF,__LINE__,"MatRestoreRow_Fortran",__FILE__,PETSC_ERR_ARG_WRONGSTATE,PETSC_ERROR_INITIAL,
571                "Must call MatGetRow() first");
572     *ierr = 1;
573     return;
574   }
575   CHKFORTRANNULLINTEGER(cols); if (!cols) oocols = NULL;
576   CHKFORTRANNULLSCALAR(vals);  if (!vals) oovals = NULL;
577 
578   *ierr           = MatRestoreRow(*mat,*row,ncols,oocols,oovals);
579   matgetrowactive = 0;
580 }
581 
582 PETSC_EXTERN void matview_(Mat *mat,PetscViewer *vin,PetscErrorCode *ierr)
583 {
584   PetscViewer v;
585   PetscPatchDefaultViewers_Fortran(vin,v);
586   *ierr = MatView(*mat,v);
587 }
588 
589 PETSC_EXTERN void matload_(Mat *mat,PetscViewer *vin,PetscErrorCode *ierr)
590 {
591   PetscViewer v;
592   PetscPatchDefaultViewers_Fortran(vin,v);
593   *ierr = MatLoad(*mat,v);
594 }
595 
596 PETSC_EXTERN void matseqaijgetarray_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr)
597 {
598   PetscScalar *mm;
599   PetscInt    m,n;
600 
601   *ierr = MatSeqAIJGetArray(*mat,&mm); if (*ierr) return;
602   *ierr = MatGetSize(*mat,&m,&n);  if (*ierr) return;
603   *ierr = PetscScalarAddressToFortran((PetscObject)*mat,1,fa,mm,m*n,ia); if (*ierr) return;
604 }
605 
606 PETSC_EXTERN void matseqaijrestorearray_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr)
607 {
608   PetscScalar *lx;
609   PetscInt    m,n;
610 
611   *ierr = MatGetSize(*mat,&m,&n); if (*ierr) return;
612   *ierr = PetscScalarAddressFromFortran((PetscObject)*mat,fa,*ia,m*n,&lx);if (*ierr) return;
613   *ierr = MatSeqAIJRestoreArray(*mat,&lx);if (*ierr) return;
614 }
615 
616 PETSC_EXTERN void matdensegetarray_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr)
617 {
618   PetscScalar *mm;
619   PetscInt    m,n;
620 
621   *ierr = MatDenseGetArray(*mat,&mm); if (*ierr) return;
622   *ierr = MatGetSize(*mat,&m,&n);  if (*ierr) return;
623   *ierr = PetscScalarAddressToFortran((PetscObject)*mat,1,fa,mm,m*n,ia); if (*ierr) return;
624 }
625 
626 PETSC_EXTERN void matdenserestorearray_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr)
627 {
628   PetscScalar *lx;
629   PetscInt    m,n;
630 
631   *ierr = MatGetSize(*mat,&m,&n); if (*ierr) return;
632   *ierr = PetscScalarAddressFromFortran((PetscObject)*mat,fa,*ia,m*n,&lx);if (*ierr) return;
633   *ierr = MatDenseRestoreArray(*mat,&lx);if (*ierr) return;
634 }
635 
636 PETSC_EXTERN void matdensegetarrayread_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr)
637 {
638   const PetscScalar *mm;
639   PetscInt         m,n;
640 
641   *ierr = MatDenseGetArrayRead(*mat,&mm); if (*ierr) return;
642   *ierr = MatGetSize(*mat,&m,&n);  if (*ierr) return;
643   *ierr = PetscScalarAddressToFortran((PetscObject)*mat,1,fa,(PetscScalar*)mm,m*n,ia); if (*ierr) return;
644 }
645 
646 
647 PETSC_EXTERN void matdenserestorearrayread_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr)
648 {
649   const PetscScalar *lx;
650   PetscInt          m,n;
651 
652   *ierr = MatGetSize(*mat,&m,&n); if (*ierr) return;
653   *ierr = PetscScalarAddressFromFortran((PetscObject)*mat,fa,*ia,m*n,(PetscScalar**)&lx);if (*ierr) return;
654   *ierr = MatDenseRestoreArrayRead(*mat,&lx);if (*ierr) return;
655 }
656 
657 PETSC_EXTERN void matfactorgetsolverpackage_(Mat *mat,char* name,PetscErrorCode *ierr,PETSC_FORTRAN_CHARLEN_T len)
658 {
659   const char *tname;
660 
661   *ierr = MatFactorGetSolverType(*mat,&tname);if (*ierr) return;
662   if (name != PETSC_NULL_CHARACTER_Fortran) {
663     *ierr = PetscStrncpy(name,tname,len);if (*ierr) return;
664   }
665   FIXRETURNCHAR(PETSC_TRUE,name,len);
666 }
667 
668 PETSC_EXTERN void matgetfactor_(Mat *mat,char* outtype,MatFactorType *ftype,Mat *M,PetscErrorCode *ierr,PETSC_FORTRAN_CHARLEN_T len)
669 {
670   char *t;
671   FIXCHAR(outtype,len,t);
672   *ierr = MatGetFactor(*mat,t,*ftype,M);if (*ierr) return;
673   FREECHAR(outtype,t);
674 }
675 
676 PETSC_EXTERN void matconvert_(Mat *mat,char* outtype,MatReuse *reuse,Mat *M,PetscErrorCode *ierr,PETSC_FORTRAN_CHARLEN_T len)
677 {
678   char *t;
679   FIXCHAR(outtype,len,t);
680   *ierr = MatConvert(*mat,t,*reuse,M);if (*ierr) return;
681   FREECHAR(outtype,t);
682 }
683 
684 /*
685     MatCreateSubmatrices() is slightly different from C since the
686     Fortran provides the array to hold the submatrix objects,while in C that
687     array is allocated by the MatCreateSubmatrices()
688 */
689 PETSC_EXTERN void matcreatesubmatrices_(Mat *mat,PetscInt *n,IS *isrow,IS *iscol,MatReuse *scall,Mat *smat,PetscErrorCode *ierr)
690 {
691   Mat      *lsmat;
692   PetscInt i;
693 
694   if (*scall == MAT_INITIAL_MATRIX) {
695     *ierr = MatCreateSubMatrices(*mat,*n,isrow,iscol,*scall,&lsmat);
696     for (i=0; i<=*n; i++) { /* lsmat[*n] might be a dummy matrix for saving data struc */
697       smat[i] = lsmat[i];
698     }
699     *ierr = PetscFree(lsmat);
700   } else {
701     *ierr = MatCreateSubMatrices(*mat,*n,isrow,iscol,*scall,&smat);
702   }
703 }
704 
705 /*
706     MatCreateSubmatrices() is slightly different from C since the
707     Fortran provides the array to hold the submatrix objects,while in C that
708     array is allocated by the MatCreateSubmatrices()
709 */
710 PETSC_EXTERN void matcreatesubmatricesmpi_(Mat *mat,PetscInt *n,IS *isrow,IS *iscol,MatReuse *scall,Mat *smat,PetscErrorCode *ierr)
711 {
712   Mat      *lsmat;
713   PetscInt i;
714 
715   if (*scall == MAT_INITIAL_MATRIX) {
716     *ierr = MatCreateSubMatricesMPI(*mat,*n,isrow,iscol,*scall,&lsmat);
717     for (i=0; i<=*n; i++) { /* lsmat[*n] might be a dummy matrix for saving data struc */
718       smat[i] = lsmat[i];
719     }
720     *ierr = PetscFree(lsmat);
721   } else {
722     *ierr = MatCreateSubMatricesMPI(*mat,*n,isrow,iscol,*scall,&smat);
723   }
724 }
725 
726 /*
727     MatDestroyMatrices() is slightly different from C since the
728     Fortran does not free the array of matrix objects, while in C that
729     the array is freed
730 */
731 PETSC_EXTERN void matdestroymatrices_(PetscInt *n,Mat *smat,PetscErrorCode *ierr)
732 {
733   PetscInt i;
734 
735   for (i=0; i<*n; i++) {
736     PETSC_FORTRAN_OBJECT_F_DESTROYED_TO_C_NULL(&smat[i]);
737     *ierr = MatDestroy(&smat[i]);if (*ierr) return;
738     PETSC_FORTRAN_OBJECT_C_NULL_TO_F_DESTROYED(&smat[i]);
739   }
740 }
741 
742 /*
743     MatDestroySubMatrices() is slightly different from C since the
744     Fortran provides the array to hold the submatrix objects, while in C that
745     array is allocated by the MatCreateSubmatrices()
746 */
747 PETSC_EXTERN void matdestroysubmatrices_(PetscInt *n,Mat *smat,PetscErrorCode *ierr)
748 {
749   Mat      *lsmat;
750   PetscInt i;
751 
752   *ierr = PetscMalloc1(*n+1,&lsmat);
753   for (i=0; i<=*n; i++) {
754       PETSC_FORTRAN_OBJECT_F_DESTROYED_TO_C_NULL(&smat[i]);
755       lsmat[i] = smat[i];
756   }
757   *ierr = MatDestroySubMatrices(*n,&lsmat);
758   for (i=0; i<=*n; i++) {
759     PETSC_FORTRAN_OBJECT_C_NULL_TO_F_DESTROYED(&smat[i]);
760   }
761 }
762 
763 PETSC_EXTERN void matdestroy_(Mat *x,int *ierr)
764 {
765   PETSC_FORTRAN_OBJECT_F_DESTROYED_TO_C_NULL(x);
766   *ierr = MatDestroy(x); if (*ierr) return;
767   PETSC_FORTRAN_OBJECT_C_NULL_TO_F_DESTROYED(x);
768 }
769 
770 PETSC_EXTERN void matsetoptionsprefix_(Mat *mat,char* prefix,PetscErrorCode *ierr,PETSC_FORTRAN_CHARLEN_T len)
771 {
772   char *t;
773 
774   FIXCHAR(prefix,len,t);
775   *ierr = MatSetOptionsPrefix(*mat,t);if (*ierr) return;
776   FREECHAR(prefix,t);
777 }
778 
779 PETSC_EXTERN void matnullspaceremove_(MatNullSpace *sp,Vec *vec,PetscErrorCode *ierr)
780 {
781   CHKFORTRANNULLOBJECT(*sp)
782   *ierr = MatNullSpaceRemove(*sp,*vec);
783 }
784 
785 PETSC_EXTERN void matgetinfo_(Mat *mat,MatInfoType *flag,MatInfo *info, int *ierr)
786 {
787   *ierr = MatGetInfo(*mat,*flag,info);
788 }
789 
790 PETSC_EXTERN void matlufactor_(Mat *mat,IS *row,IS *col,const MatFactorInfo *info, int *ierr)
791 {
792   *ierr = MatLUFactor(*mat,*row,*col,info);
793 }
794 
795 PETSC_EXTERN void matilufactor_(Mat *mat,IS *row,IS *col,const MatFactorInfo *info, int *ierr)
796 {
797   *ierr = MatILUFactor(*mat,*row,*col,info);
798 }
799 
800 PETSC_EXTERN void matlufactorsymbolic_(Mat *fact,Mat *mat,IS *row,IS *col,const MatFactorInfo *info, int *ierr)
801 {
802   *ierr = MatLUFactorSymbolic(*fact,*mat,*row,*col,info);
803 }
804 
805 PETSC_EXTERN void matlufactornumeric_(Mat *fact,Mat *mat,const MatFactorInfo *info, int *ierr)
806 {
807   *ierr = MatLUFactorNumeric(*fact,*mat,info);
808 }
809 
810 PETSC_EXTERN void matcholeskyfactor_(Mat *mat,IS *perm,const MatFactorInfo *info, int *ierr)
811 {
812   *ierr = MatCholeskyFactor(*mat,*perm,info);
813 }
814 
815 PETSC_EXTERN void matcholeskyfactorsymbolic_(Mat *fact,Mat *mat,IS *perm,const MatFactorInfo *info, int *ierr)
816 {
817   *ierr = MatCholeskyFactorSymbolic(*fact,*mat,*perm,info);
818 }
819 
820 PETSC_EXTERN void matcholeskyfactornumeric_(Mat *fact,Mat *mat,const MatFactorInfo *info, int *ierr)
821 {
822   *ierr = MatCholeskyFactorNumeric(*fact,*mat,info);
823 }
824 
825 PETSC_EXTERN void matilufactorsymbolic_(Mat *fact,Mat *mat,IS *row,IS *col,const MatFactorInfo *info, int *ierr)
826 {
827   *ierr = MatILUFactorSymbolic(*fact,*mat,*row,*col,info);
828 }
829 
830 PETSC_EXTERN void maticcfactorsymbolic_(Mat *fact,Mat *mat,IS *perm,const MatFactorInfo *info, int *ierr)
831 {
832   *ierr = MatICCFactorSymbolic(*fact,*mat,*perm,info);
833 }
834 
835 PETSC_EXTERN void maticcfactor_(Mat *mat,IS *row,const MatFactorInfo *info, int *ierr)
836 {
837   *ierr = MatICCFactor(*mat,*row,info);
838 }
839 
840 PETSC_EXTERN void matfactorinfoinitialize_(MatFactorInfo *info, int *ierr)
841 {
842   *ierr = MatFactorInfoInitialize(info);
843 }
844 PETSC_EXTERN void  matzerorowslocal_(Mat *mat,PetscInt *numRows, PetscInt rows[],PetscScalar *diag,Vec *x,Vec *b, int *ierr)
845 {
846   *ierr = MatZeroRowsLocal(*mat,*numRows,rows,*diag,*x,*b);
847 }
848 PETSC_EXTERN void  matzerorowslocal0_(Mat *mat,PetscInt *numRows, PetscInt rows[],PetscScalar *diag,Vec *x,Vec *b, int *ierr)
849 {
850   matzerorowslocal_(mat,numRows,rows,diag,x,b,ierr);
851 }
852 PETSC_EXTERN void  matzerorowslocal1_(Mat *mat,PetscInt *numRows, PetscInt rows[],PetscScalar *diag,Vec *x,Vec *b, int *ierr)
853 {
854   matzerorowslocal_(mat,numRows,rows,diag,x,b,ierr);
855 }
856 PETSC_EXTERN void matviewfromoptions_(Mat *ao,PetscObject obj,char* type,PetscErrorCode *ierr,PETSC_FORTRAN_CHARLEN_T len)
857 {
858   char *t;
859 
860   FIXCHAR(type,len,t);
861   CHKFORTRANNULLOBJECT(obj);
862   *ierr = MatViewFromOptions(*ao,obj,t);if (*ierr) return;
863   FREECHAR(type,t);
864 }
865