xref: /petsc/src/mat/interface/ftn-custom/zmatrixf.c (revision ea9ee2c1d69c9e3cf6d2b3c8a205b9880d3dba39)
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 {
345   *ierr = MatSetValuesBlocked(*mat, *m, idxm, *n, idxn, v, *addv);
346 }
347 
348 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))
349 {
350   PetscScalar *fa;
351   *ierr = F90Array2dAccess(y, MPIU_SCALAR, (void **)&fa PETSC_F90_2PTR_PARAM(ptrd));
352   if (*ierr) return;
353   matsetvaluesblocked_(mat, m, idxm, n, idxn, fa, addv, ierr);
354 }
355 
356 PETSC_EXTERN void matsetvaluesblocked0_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], InsertMode *addv, int *ierr)
357 {
358   matsetvaluesblocked_(mat, m, idxm, n, idxn, v, addv, ierr);
359 }
360 
361 PETSC_EXTERN void matsetvaluesblocked11_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], InsertMode *addv, int *ierr)
362 {
363   matsetvaluesblocked_(mat, m, idxm, n, idxn, v, addv, ierr);
364 }
365 
366 PETSC_EXTERN void matsetvaluesblocked111_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], InsertMode *addv, int *ierr)
367 {
368   matsetvaluesblocked_(mat, m, idxm, n, idxn, v, addv, ierr);
369 }
370 
371 PETSC_EXTERN void matsetvaluesblocked1n_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], InsertMode *addv, int *ierr)
372 {
373   matsetvaluesblocked_(mat, m, idxm, n, idxn, v, addv, ierr);
374 }
375 
376 PETSC_EXTERN void matsetvaluesblockedn1_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], InsertMode *addv, int *ierr)
377 {
378   matsetvaluesblocked_(mat, m, idxm, n, idxn, v, addv, ierr);
379 }
380 
381 PETSC_EXTERN void matsetvaluesblockedlocal_(Mat *mat, PetscInt *nrow, PetscInt irow[], PetscInt *ncol, PetscInt icol[], PetscScalar y[], InsertMode *addv, int *ierr)
382 {
383   *ierr = MatSetValuesBlockedLocal(*mat, *nrow, irow, *ncol, icol, y, *addv);
384 }
385 
386 PETSC_EXTERN void matsetvaluesblockedlocal0_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], InsertMode *addv, int *ierr)
387 {
388   matsetvaluesblockedlocal_(mat, m, idxm, n, idxn, v, addv, ierr);
389 }
390 
391 PETSC_EXTERN void matsetvaluesblockedlocal11_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], InsertMode *addv, int *ierr)
392 {
393   matsetvaluesblockedlocal_(mat, m, idxm, n, idxn, v, addv, ierr);
394 }
395 
396 PETSC_EXTERN void matsetvaluesblockedlocal111_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], InsertMode *addv, int *ierr)
397 {
398   matsetvaluesblockedlocal_(mat, m, idxm, n, idxn, v, addv, ierr);
399 }
400 
401 PETSC_EXTERN void matsetvaluesblockedlocal1n_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], InsertMode *addv, int *ierr)
402 {
403   matsetvaluesblockedlocal_(mat, m, idxm, n, idxn, v, addv, ierr);
404 }
405 
406 PETSC_EXTERN void matsetvaluesblockedlocaln1_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], InsertMode *addv, int *ierr)
407 {
408   matsetvaluesblockedlocal_(mat, m, idxm, n, idxn, v, addv, ierr);
409 }
410 
411 PETSC_EXTERN void matsetvalues_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], InsertMode *addv, int *ierr)
412 {
413   *ierr = MatSetValues(*mat, *m, idxm, *n, idxn, v, *addv);
414 }
415 
416 PETSC_EXTERN void matsetvaluesnnnn_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], InsertMode *addv, int *ierr)
417 {
418   matsetvalues_(mat, m, idxm, n, idxn, v, addv, ierr);
419 }
420 
421 PETSC_EXTERN void matsetvalues0_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], InsertMode *addv, int *ierr)
422 {
423   matsetvalues_(mat, m, idxm, n, idxn, v, addv, ierr);
424 }
425 
426 PETSC_EXTERN void matsetvaluesnn1_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], InsertMode *addv, int *ierr)
427 {
428   matsetvalues_(mat, m, idxm, n, idxn, v, addv, ierr);
429 }
430 
431 PETSC_EXTERN void matsetvalues11_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], InsertMode *addv, int *ierr)
432 {
433   matsetvalues_(mat, m, idxm, n, idxn, v, addv, ierr);
434 }
435 
436 PETSC_EXTERN void matsetvaluesn1_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], InsertMode *addv, int *ierr)
437 {
438   matsetvalues_(mat, m, idxm, n, idxn, v, addv, ierr);
439 }
440 
441 PETSC_EXTERN void matsetvalues1n_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], InsertMode *addv, int *ierr)
442 {
443   matsetvalues_(mat, m, idxm, n, idxn, v, addv, ierr);
444 }
445 
446 PETSC_EXTERN void matsetvalueslocal_(Mat *mat, PetscInt *nrow, PetscInt irow[], PetscInt *ncol, PetscInt icol[], PetscScalar y[], InsertMode *addv, int *ierr)
447 {
448   *ierr = MatSetValuesLocal(*mat, *nrow, irow, *ncol, icol, y, *addv);
449 }
450 
451 PETSC_EXTERN void matsetvalueslocal0_(Mat *mat, PetscInt *nrow, PetscInt irow[], PetscInt *ncol, PetscInt icol[], PetscScalar y[], InsertMode *addv, int *ierr)
452 {
453   matsetvalueslocal_(mat, nrow, irow, ncol, icol, y, addv, ierr);
454 }
455 
456 PETSC_EXTERN void matsetvalueslocal11_(Mat *mat, PetscInt *nrow, PetscInt irow[], PetscInt *ncol, PetscInt icol[], PetscScalar y[], InsertMode *addv, int *ierr)
457 {
458   matsetvalueslocal_(mat, nrow, irow, ncol, icol, y, addv, ierr);
459 }
460 
461 PETSC_EXTERN void matsetvalueslocal11nn_(Mat *mat, PetscInt *nrow, PetscInt irow[], PetscInt *ncol, PetscInt icol[], PetscScalar y[], InsertMode *addv, int *ierr)
462 {
463   matsetvalueslocal_(mat, nrow, irow, ncol, icol, y, addv, ierr);
464 }
465 
466 PETSC_EXTERN void matsetvalueslocal111_(Mat *mat, PetscInt *nrow, PetscInt irow[], PetscInt *ncol, PetscInt icol[], PetscScalar y[], InsertMode *addv, int *ierr)
467 {
468   matsetvalueslocal_(mat, nrow, irow, ncol, icol, y, addv, ierr);
469 }
470 
471 PETSC_EXTERN void matsetvalueslocal1n_(Mat *mat, PetscInt *nrow, PetscInt irow[], PetscInt *ncol, PetscInt icol[], PetscScalar y[], InsertMode *addv, int *ierr)
472 {
473   matsetvalueslocal_(mat, nrow, irow, ncol, icol, y, addv, ierr);
474 }
475 
476 PETSC_EXTERN void matsetvalueslocaln1_(Mat *mat, PetscInt *nrow, PetscInt irow[], PetscInt *ncol, PetscInt icol[], PetscScalar y[], InsertMode *addv, int *ierr)
477 {
478   matsetvalueslocal_(mat, nrow, irow, ncol, icol, y, addv, ierr);
479 }
480 
481 PETSC_EXTERN void matgetrowmin_(Mat *mat, Vec *v, PetscInt idx[], int *ierr)
482 {
483   CHKFORTRANNULLINTEGER(idx);
484   *ierr = MatGetRowMin(*mat, *v, idx);
485 }
486 
487 PETSC_EXTERN void matgetrowminabs_(Mat *mat, Vec *v, PetscInt idx[], int *ierr)
488 {
489   CHKFORTRANNULLINTEGER(idx);
490   *ierr = MatGetRowMinAbs(*mat, *v, idx);
491 }
492 
493 PETSC_EXTERN void matgetrowmax_(Mat *mat, Vec *v, PetscInt idx[], int *ierr)
494 {
495   CHKFORTRANNULLINTEGER(idx);
496   *ierr = MatGetRowMax(*mat, *v, idx);
497 }
498 
499 PETSC_EXTERN void matgetrowmaxabs_(Mat *mat, Vec *v, PetscInt idx[], int *ierr)
500 {
501   CHKFORTRANNULLINTEGER(idx);
502   *ierr = MatGetRowMaxAbs(*mat, *v, idx);
503 }
504 
505 static PetscErrorCode ournullfunction(MatNullSpace sp, Vec x, void *ctx)
506 {
507   PetscCallFortranVoidFunction((*(void (*)(MatNullSpace *, Vec *, void *, PetscErrorCode *))(((PetscObject)sp)->fortran_func_pointers[0]))(&sp, &x, ctx, &ierr));
508   return PETSC_SUCCESS;
509 }
510 
511 PETSC_EXTERN void matnullspacesetfunction_(MatNullSpace *sp, PetscErrorCode (*rem)(MatNullSpace, Vec, void *), void *ctx, PetscErrorCode *ierr)
512 {
513   PetscObjectAllocateFortranPointers(*sp, 1);
514   ((PetscObject)*sp)->fortran_func_pointers[0] = (PetscVoidFunction)rem;
515 
516   *ierr = MatNullSpaceSetFunction(*sp, ournullfunction, ctx);
517 }
518 
519 PETSC_EXTERN void matcreatevecs_(Mat *mat, Vec *right, Vec *left, int *ierr)
520 {
521   CHKFORTRANNULLOBJECT(right);
522   CHKFORTRANNULLOBJECT(left);
523   *ierr = MatCreateVecs(*mat, right, left);
524 }
525 
526 PETSC_EXTERN void matgetrowij_(Mat *B, PetscInt *shift, PetscBool *sym, PetscBool *blockcompressed, PetscInt *n, PetscInt *ia, size_t *iia, PetscInt *ja, size_t *jja, PetscBool *done, PetscErrorCode *ierr)
527 {
528   const PetscInt *IA, *JA;
529   *ierr = MatGetRowIJ(*B, *shift, *sym, *blockcompressed, n, &IA, &JA, done);
530   if (*ierr) return;
531   *iia = PetscIntAddressToFortran(ia, (PetscInt *)IA);
532   *jja = PetscIntAddressToFortran(ja, (PetscInt *)JA);
533 }
534 
535 PETSC_EXTERN void matrestorerowij_(Mat *B, PetscInt *shift, PetscBool *sym, PetscBool *blockcompressed, PetscInt *n, PetscInt *ia, size_t *iia, PetscInt *ja, size_t *jja, PetscBool *done, PetscErrorCode *ierr)
536 {
537   const PetscInt *IA = PetscIntAddressFromFortran(ia, *iia), *JA = PetscIntAddressFromFortran(ja, *jja);
538   *ierr = MatRestoreRowIJ(*B, *shift, *sym, *blockcompressed, n, &IA, &JA, done);
539 }
540 
541 /*
542    This is a poor way of storing the column and value pointers
543   generated by MatGetRow() to be returned with MatRestoreRow()
544   but there is not natural,good place else to store them. Hence
545   Fortran programmers can only have one outstanding MatGetRows()
546   at a time.
547 */
548 static int                matgetrowactive = 0;
549 static const PetscInt    *my_ocols        = 0;
550 static const PetscScalar *my_ovals        = 0;
551 
552 PETSC_EXTERN void matgetrow_(Mat *mat, PetscInt *row, PetscInt *ncols, PetscInt *cols, PetscScalar *vals, PetscErrorCode *ierr)
553 {
554   const PetscInt    **oocols = &my_ocols;
555   const PetscScalar **oovals = &my_ovals;
556 
557   if (matgetrowactive) {
558     *ierr = PetscError(PETSC_COMM_SELF, __LINE__, "MatGetRow_Fortran", __FILE__, PETSC_ERR_ARG_WRONGSTATE, PETSC_ERROR_INITIAL, "Cannot have two MatGetRow() active simultaneously\n\
559                call MatRestoreRow() before calling MatGetRow() a second time");
560     *ierr = PETSC_ERR_ARG_WRONGSTATE;
561     return;
562   }
563 
564   CHKFORTRANNULLINTEGER(cols);
565   if (!cols) oocols = NULL;
566   CHKFORTRANNULLSCALAR(vals);
567   if (!vals) oovals = NULL;
568 
569   *ierr = MatGetRow(*mat, *row, ncols, oocols, oovals);
570   if (*ierr) return;
571 
572   if (oocols) {
573     *ierr = PetscArraycpy(cols, my_ocols, *ncols);
574     if (*ierr) return;
575   }
576   if (oovals) {
577     *ierr = PetscArraycpy(vals, my_ovals, *ncols);
578     if (*ierr) return;
579   }
580   matgetrowactive = 1;
581 }
582 
583 PETSC_EXTERN void matrestorerow_(Mat *mat, PetscInt *row, PetscInt *ncols, PetscInt *cols, PetscScalar *vals, PetscErrorCode *ierr)
584 {
585   const PetscInt    **oocols = &my_ocols;
586   const PetscScalar **oovals = &my_ovals;
587 
588   if (!matgetrowactive) {
589     *ierr = PetscError(PETSC_COMM_SELF, __LINE__, "MatRestoreRow_Fortran", __FILE__, PETSC_ERR_ARG_WRONGSTATE, PETSC_ERROR_INITIAL, "Must call MatGetRow() first");
590     *ierr = PETSC_ERR_ARG_WRONGSTATE;
591     return;
592   }
593   CHKFORTRANNULLINTEGER(cols);
594   if (!cols) oocols = NULL;
595   CHKFORTRANNULLSCALAR(vals);
596   if (!vals) oovals = NULL;
597 
598   *ierr           = MatRestoreRow(*mat, *row, ncols, oocols, oovals);
599   matgetrowactive = 0;
600 }
601 
602 PETSC_EXTERN void matview_(Mat *mat, PetscViewer *vin, PetscErrorCode *ierr)
603 {
604   PetscViewer v;
605   PetscPatchDefaultViewers_Fortran(vin, v);
606   *ierr = MatView(*mat, v);
607 }
608 
609 PETSC_EXTERN void matload_(Mat *mat, PetscViewer *vin, PetscErrorCode *ierr)
610 {
611   PetscViewer v;
612   PetscPatchDefaultViewers_Fortran(vin, v);
613   *ierr = MatLoad(*mat, v);
614 }
615 
616 PETSC_EXTERN void matseqaijgetarray_(Mat *mat, PetscScalar *fa, size_t *ia, PetscErrorCode *ierr)
617 {
618   PetscScalar *mm;
619   PetscInt     m, n;
620 
621   *ierr = MatSeqAIJGetArray(*mat, &mm);
622   if (*ierr) return;
623   *ierr = MatGetSize(*mat, &m, &n);
624   if (*ierr) return;
625   *ierr = PetscScalarAddressToFortran((PetscObject)*mat, 1, fa, mm, m * n, ia);
626   if (*ierr) return;
627 }
628 
629 PETSC_EXTERN void matseqaijrestorearray_(Mat *mat, PetscScalar *fa, size_t *ia, PetscErrorCode *ierr)
630 {
631   PetscScalar *lx;
632   PetscInt     m, n;
633 
634   *ierr = MatGetSize(*mat, &m, &n);
635   if (*ierr) return;
636   *ierr = PetscScalarAddressFromFortran((PetscObject)*mat, fa, *ia, m * n, &lx);
637   if (*ierr) return;
638   *ierr = MatSeqAIJRestoreArray(*mat, &lx);
639   if (*ierr) return;
640 }
641 
642 PETSC_EXTERN void matdensegetarray_(Mat *mat, PetscScalar *fa, size_t *ia, PetscErrorCode *ierr)
643 {
644   PetscScalar *mm;
645   PetscInt     m, n;
646 
647   *ierr = MatDenseGetArray(*mat, &mm);
648   if (*ierr) return;
649   *ierr = MatGetSize(*mat, &m, &n);
650   if (*ierr) return;
651   *ierr = PetscScalarAddressToFortran((PetscObject)*mat, 1, fa, mm, m * n, ia);
652   if (*ierr) return;
653 }
654 
655 PETSC_EXTERN void matdenserestorearray_(Mat *mat, PetscScalar *fa, size_t *ia, PetscErrorCode *ierr)
656 {
657   PetscScalar *lx;
658   PetscInt     m, n;
659 
660   *ierr = MatGetSize(*mat, &m, &n);
661   if (*ierr) return;
662   *ierr = PetscScalarAddressFromFortran((PetscObject)*mat, fa, *ia, m * n, &lx);
663   if (*ierr) return;
664   *ierr = MatDenseRestoreArray(*mat, &lx);
665   if (*ierr) return;
666 }
667 
668 PETSC_EXTERN void matdensegetarrayread_(Mat *mat, PetscScalar *fa, size_t *ia, PetscErrorCode *ierr)
669 {
670   const PetscScalar *mm;
671   PetscInt           m, n;
672 
673   *ierr = MatDenseGetArrayRead(*mat, &mm);
674   if (*ierr) return;
675   *ierr = MatGetSize(*mat, &m, &n);
676   if (*ierr) return;
677   *ierr = PetscScalarAddressToFortran((PetscObject)*mat, 1, fa, (PetscScalar *)mm, m * n, ia);
678   if (*ierr) return;
679 }
680 
681 PETSC_EXTERN void matdenserestorearrayread_(Mat *mat, PetscScalar *fa, size_t *ia, PetscErrorCode *ierr)
682 {
683   const PetscScalar *lx;
684   PetscInt           m, n;
685 
686   *ierr = MatGetSize(*mat, &m, &n);
687   if (*ierr) return;
688   *ierr = PetscScalarAddressFromFortran((PetscObject)*mat, fa, *ia, m * n, (PetscScalar **)&lx);
689   if (*ierr) return;
690   *ierr = MatDenseRestoreArrayRead(*mat, &lx);
691   if (*ierr) return;
692 }
693 
694 PETSC_EXTERN void matfactorgetsolverpackage_(Mat *mat, char *name, PetscErrorCode *ierr, PETSC_FORTRAN_CHARLEN_T len)
695 {
696   const char *tname;
697 
698   *ierr = MatFactorGetSolverType(*mat, &tname);
699   if (*ierr) return;
700   if (name != PETSC_NULL_CHARACTER_Fortran) {
701     *ierr = PetscStrncpy(name, tname, len);
702     if (*ierr) return;
703   }
704   FIXRETURNCHAR(PETSC_TRUE, name, len);
705 }
706 
707 PETSC_EXTERN void matgetfactor_(Mat *mat, char *outtype, MatFactorType *ftype, Mat *M, PetscErrorCode *ierr, PETSC_FORTRAN_CHARLEN_T len)
708 {
709   char *t;
710   FIXCHAR(outtype, len, t);
711   *ierr = MatGetFactor(*mat, t, *ftype, M);
712   if (*ierr) return;
713   FREECHAR(outtype, t);
714 }
715 
716 PETSC_EXTERN void matconvert_(Mat *mat, char *outtype, MatReuse *reuse, Mat *M, PetscErrorCode *ierr, PETSC_FORTRAN_CHARLEN_T len)
717 {
718   char *t;
719   FIXCHAR(outtype, len, t);
720   *ierr = MatConvert(*mat, t, *reuse, M);
721   if (*ierr) return;
722   FREECHAR(outtype, t);
723 }
724 
725 /*
726     MatCreateSubmatrices() is slightly different from C since the
727     Fortran provides the array to hold the submatrix objects,while in C that
728     array is allocated by the MatCreateSubmatrices()
729 */
730 PETSC_EXTERN void matcreatesubmatrices_(Mat *mat, PetscInt *n, IS *isrow, IS *iscol, MatReuse *scall, Mat *smat, PetscErrorCode *ierr)
731 {
732   Mat     *lsmat;
733   PetscInt i;
734 
735   if (*scall == MAT_INITIAL_MATRIX) {
736     *ierr = MatCreateSubMatrices(*mat, *n, isrow, iscol, *scall, &lsmat);
737     for (i = 0; i <= *n; i++) { /* lsmat[*n] might be a dummy matrix for saving data structure */
738       smat[i] = lsmat[i];
739     }
740     *ierr = PetscFree(lsmat);
741   } else {
742     *ierr = MatCreateSubMatrices(*mat, *n, isrow, iscol, *scall, &smat);
743   }
744 }
745 
746 /*
747     MatCreateSubmatrices() is slightly different from C since the
748     Fortran provides the array to hold the submatrix objects,while in C that
749     array is allocated by the MatCreateSubmatrices()
750 */
751 PETSC_EXTERN void matcreatesubmatricesmpi_(Mat *mat, PetscInt *n, IS *isrow, IS *iscol, MatReuse *scall, Mat *smat, PetscErrorCode *ierr)
752 {
753   Mat     *lsmat;
754   PetscInt i;
755 
756   if (*scall == MAT_INITIAL_MATRIX) {
757     *ierr = MatCreateSubMatricesMPI(*mat, *n, isrow, iscol, *scall, &lsmat);
758     for (i = 0; i <= *n; i++) { /* lsmat[*n] might be a dummy matrix for saving data structure */
759       smat[i] = lsmat[i];
760     }
761     *ierr = PetscFree(lsmat);
762   } else {
763     *ierr = MatCreateSubMatricesMPI(*mat, *n, isrow, iscol, *scall, &smat);
764   }
765 }
766 
767 /*
768     MatDestroyMatrices() is slightly different from C since the
769     Fortran does not free the array of matrix objects, while in C that
770     the array is freed
771 */
772 PETSC_EXTERN void matdestroymatrices_(PetscInt *n, Mat *smat, PetscErrorCode *ierr)
773 {
774   PetscInt i;
775 
776   for (i = 0; i < *n; i++) {
777     PETSC_FORTRAN_OBJECT_F_DESTROYED_TO_C_NULL(&smat[i]);
778     *ierr = MatDestroy(&smat[i]);
779     if (*ierr) return;
780     PETSC_FORTRAN_OBJECT_C_NULL_TO_F_DESTROYED(&smat[i]);
781   }
782 }
783 
784 /*
785     MatDestroySubMatrices() is slightly different from C since the
786     Fortran provides the array to hold the submatrix objects, while in C that
787     array is allocated by the MatCreateSubmatrices()
788 */
789 PETSC_EXTERN void matdestroysubmatrices_(PetscInt *n, Mat *smat, PetscErrorCode *ierr)
790 {
791   Mat     *lsmat;
792   PetscInt i;
793 
794   *ierr = PetscMalloc1(*n + 1, &lsmat);
795   for (i = 0; i <= *n; i++) {
796     PETSC_FORTRAN_OBJECT_F_DESTROYED_TO_C_NULL(&smat[i]);
797     lsmat[i] = smat[i];
798   }
799   *ierr = MatDestroySubMatrices(*n, &lsmat);
800   for (i = 0; i <= *n; i++) { PETSC_FORTRAN_OBJECT_C_NULL_TO_F_DESTROYED(&smat[i]); }
801 }
802 
803 PETSC_EXTERN void matdestroy_(Mat *x, int *ierr)
804 {
805   PETSC_FORTRAN_OBJECT_F_DESTROYED_TO_C_NULL(x);
806   *ierr = MatDestroy(x);
807   if (*ierr) return;
808   PETSC_FORTRAN_OBJECT_C_NULL_TO_F_DESTROYED(x);
809 }
810 
811 PETSC_EXTERN void matsetoptionsprefix_(Mat *mat, char *prefix, PetscErrorCode *ierr, PETSC_FORTRAN_CHARLEN_T len)
812 {
813   char *t;
814 
815   FIXCHAR(prefix, len, t);
816   *ierr = MatSetOptionsPrefix(*mat, t);
817   if (*ierr) return;
818   FREECHAR(prefix, t);
819 }
820 
821 PETSC_EXTERN void matnullspaceremove_(MatNullSpace *sp, Vec *vec, PetscErrorCode *ierr)
822 {
823   CHKFORTRANNULLOBJECT(*sp)
824   *ierr = MatNullSpaceRemove(*sp, *vec);
825 }
826 
827 PETSC_EXTERN void matgetinfo_(Mat *mat, MatInfoType *flag, MatInfo *info, int *ierr)
828 {
829   *ierr = MatGetInfo(*mat, *flag, info);
830 }
831 
832 PETSC_EXTERN void matlufactor_(Mat *mat, IS *row, IS *col, const MatFactorInfo *info, int *ierr)
833 {
834   *ierr = MatLUFactor(*mat, *row, *col, info);
835 }
836 
837 PETSC_EXTERN void matilufactor_(Mat *mat, IS *row, IS *col, const MatFactorInfo *info, int *ierr)
838 {
839   *ierr = MatILUFactor(*mat, *row, *col, info);
840 }
841 
842 PETSC_EXTERN void matlufactorsymbolic_(Mat *fact, Mat *mat, IS *row, IS *col, const MatFactorInfo *info, int *ierr)
843 {
844   *ierr = MatLUFactorSymbolic(*fact, *mat, *row, *col, info);
845 }
846 
847 PETSC_EXTERN void matlufactornumeric_(Mat *fact, Mat *mat, const MatFactorInfo *info, int *ierr)
848 {
849   *ierr = MatLUFactorNumeric(*fact, *mat, info);
850 }
851 
852 PETSC_EXTERN void matcholeskyfactor_(Mat *mat, IS *perm, const MatFactorInfo *info, int *ierr)
853 {
854   *ierr = MatCholeskyFactor(*mat, *perm, info);
855 }
856 
857 PETSC_EXTERN void matcholeskyfactorsymbolic_(Mat *fact, Mat *mat, IS *perm, const MatFactorInfo *info, int *ierr)
858 {
859   *ierr = MatCholeskyFactorSymbolic(*fact, *mat, *perm, info);
860 }
861 
862 PETSC_EXTERN void matcholeskyfactornumeric_(Mat *fact, Mat *mat, const MatFactorInfo *info, int *ierr)
863 {
864   *ierr = MatCholeskyFactorNumeric(*fact, *mat, info);
865 }
866 
867 PETSC_EXTERN void matilufactorsymbolic_(Mat *fact, Mat *mat, IS *row, IS *col, const MatFactorInfo *info, int *ierr)
868 {
869   *ierr = MatILUFactorSymbolic(*fact, *mat, *row, *col, info);
870 }
871 
872 PETSC_EXTERN void maticcfactorsymbolic_(Mat *fact, Mat *mat, IS *perm, const MatFactorInfo *info, int *ierr)
873 {
874   *ierr = MatICCFactorSymbolic(*fact, *mat, *perm, info);
875 }
876 
877 PETSC_EXTERN void maticcfactor_(Mat *mat, IS *row, const MatFactorInfo *info, int *ierr)
878 {
879   *ierr = MatICCFactor(*mat, *row, info);
880 }
881 
882 PETSC_EXTERN void matfactorinfoinitialize_(MatFactorInfo *info, int *ierr)
883 {
884   *ierr = MatFactorInfoInitialize(info);
885 }
886 PETSC_EXTERN void matzerorowslocal_(Mat *mat, PetscInt *numRows, PetscInt rows[], PetscScalar *diag, Vec *x, Vec *b, int *ierr)
887 {
888   *ierr = MatZeroRowsLocal(*mat, *numRows, rows, *diag, *x, *b);
889 }
890 PETSC_EXTERN void matzerorowslocal0_(Mat *mat, PetscInt *numRows, PetscInt rows[], PetscScalar *diag, Vec *x, Vec *b, int *ierr)
891 {
892   matzerorowslocal_(mat, numRows, rows, diag, x, b, ierr);
893 }
894 PETSC_EXTERN void matzerorowslocal1_(Mat *mat, PetscInt *numRows, PetscInt rows[], PetscScalar *diag, Vec *x, Vec *b, int *ierr)
895 {
896   matzerorowslocal_(mat, numRows, rows, diag, x, b, ierr);
897 }
898 PETSC_EXTERN void matviewfromoptions_(Mat *ao, PetscObject obj, char *type, PetscErrorCode *ierr, PETSC_FORTRAN_CHARLEN_T len)
899 {
900   char *t;
901 
902   FIXCHAR(type, len, t);
903   CHKFORTRANNULLOBJECT(obj);
904   *ierr = MatViewFromOptions(*ao, obj, t);
905   if (*ierr) return;
906   FREECHAR(type, t);
907 }
908