xref: /petsc/src/mat/interface/ftn-custom/zmatrixf.c (revision 21e3ffae2f3b73c0bd738cf6d0a809700fc04bb0)
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));if (*ierr) return;
352   matsetvaluesblocked_(mat,m,idxm,n,idxn,fa,addv,ierr);
353 }
354 
355 PETSC_EXTERN void  matsetvaluesblocked0_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr)
356 {
357   matsetvaluesblocked_(mat,m,idxm,n,idxn,v,addv,ierr);
358 }
359 
360 PETSC_EXTERN void  matsetvaluesblocked11_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr)
361 {
362   matsetvaluesblocked_(mat,m,idxm,n,idxn,v,addv,ierr);
363 }
364 
365 PETSC_EXTERN void  matsetvaluesblocked111_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr)
366 {
367   matsetvaluesblocked_(mat,m,idxm,n,idxn,v,addv,ierr);
368 }
369 
370 PETSC_EXTERN void  matsetvaluesblocked1n_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr)
371 {
372   matsetvaluesblocked_(mat,m,idxm,n,idxn,v,addv,ierr);
373 }
374 
375 PETSC_EXTERN void  matsetvaluesblockedn1_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr)
376 {
377   matsetvaluesblocked_(mat,m,idxm,n,idxn,v,addv,ierr);
378 }
379 
380 PETSC_EXTERN void  matsetvaluesblockedlocal_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr)
381 {
382   *ierr = MatSetValuesBlockedLocal(*mat,*nrow,irow,*ncol,icol,y,*addv);
383 }
384 
385 PETSC_EXTERN void  matsetvaluesblockedlocal0_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr)
386 {
387   matsetvaluesblockedlocal_(mat,m,idxm,n,idxn,v,addv,ierr);
388 }
389 
390 PETSC_EXTERN void  matsetvaluesblockedlocal11_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr)
391 {
392   matsetvaluesblockedlocal_(mat,m,idxm,n,idxn,v,addv,ierr);
393 }
394 
395 PETSC_EXTERN void  matsetvaluesblockedlocal111_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr)
396 {
397   matsetvaluesblockedlocal_(mat,m,idxm,n,idxn,v,addv,ierr);
398 }
399 
400 PETSC_EXTERN void  matsetvaluesblockedlocal1n_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr)
401 {
402   matsetvaluesblockedlocal_(mat,m,idxm,n,idxn,v,addv,ierr);
403 }
404 
405 PETSC_EXTERN void  matsetvaluesblockedlocaln1_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr)
406 {
407   matsetvaluesblockedlocal_(mat,m,idxm,n,idxn,v,addv,ierr);
408 }
409 
410 PETSC_EXTERN void  matsetvalues_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr)
411 {
412   *ierr = MatSetValues(*mat,*m,idxm,*n,idxn,v,*addv);
413 }
414 
415 PETSC_EXTERN void  matsetvaluesnnnn_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr)
416 {
417   matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr);
418 }
419 
420 PETSC_EXTERN void  matsetvalues0_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr)
421 {
422   matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr);
423 }
424 
425 PETSC_EXTERN void  matsetvaluesnn1_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr)
426 {
427   matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr);
428 }
429 
430 PETSC_EXTERN void  matsetvalues11_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr)
431 {
432   matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr);
433 }
434 
435 PETSC_EXTERN void  matsetvaluesn1_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr)
436 {
437   matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr);
438 }
439 
440 PETSC_EXTERN void  matsetvalues1n_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr)
441 {
442   matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr);
443 }
444 
445 PETSC_EXTERN void  matsetvalueslocal_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr)
446 {
447   *ierr = MatSetValuesLocal(*mat,*nrow,irow,*ncol,icol,y,*addv);
448 }
449 
450 PETSC_EXTERN void  matsetvalueslocal0_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr)
451 {
452   matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr);
453 }
454 
455 PETSC_EXTERN void  matsetvalueslocal11_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr)
456 {
457   matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr);
458 }
459 
460 PETSC_EXTERN void  matsetvalueslocal11nn_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr)
461 {
462   matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr);
463 }
464 
465 PETSC_EXTERN void  matsetvalueslocal111_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr)
466 {
467   matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr);
468 }
469 
470 PETSC_EXTERN void  matsetvalueslocal1n_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr)
471 {
472   matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr);
473 }
474 
475 PETSC_EXTERN void  matsetvalueslocaln1_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr)
476 {
477   matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr);
478 }
479 
480 PETSC_EXTERN void  matgetrowmin_(Mat *mat,Vec *v,PetscInt idx[], int *ierr)
481 {
482   CHKFORTRANNULLINTEGER(idx);
483   *ierr = MatGetRowMin(*mat,*v,idx);
484 }
485 
486 PETSC_EXTERN void  matgetrowminabs_(Mat *mat,Vec *v,PetscInt idx[], int *ierr)
487 {
488   CHKFORTRANNULLINTEGER(idx);
489   *ierr = MatGetRowMinAbs(*mat,*v,idx);
490 }
491 
492 PETSC_EXTERN void  matgetrowmax_(Mat *mat,Vec *v,PetscInt idx[], int *ierr)
493 {
494   CHKFORTRANNULLINTEGER(idx);
495   *ierr = MatGetRowMax(*mat,*v,idx);
496 }
497 
498 PETSC_EXTERN void  matgetrowmaxabs_(Mat *mat,Vec *v,PetscInt idx[], int *ierr)
499 {
500   CHKFORTRANNULLINTEGER(idx);
501   *ierr = MatGetRowMaxAbs(*mat,*v,idx);
502 }
503 
504 static PetscErrorCode ournullfunction(MatNullSpace sp, Vec x, void *ctx)
505 {
506   PetscCallFortranVoidFunction((*(void (*)(MatNullSpace *, Vec *, void *, PetscErrorCode *))(((PetscObject)sp)->fortran_func_pointers[0]))(&sp, &x, ctx, &ierr));
507   return PETSC_SUCCESS;
508 }
509 
510 PETSC_EXTERN void matnullspacesetfunction_(MatNullSpace *sp, PetscErrorCode (*rem)(MatNullSpace,Vec,void*),void *ctx,PetscErrorCode *ierr)
511 {
512   PetscObjectAllocateFortranPointers(*sp,1);
513   ((PetscObject)*sp)->fortran_func_pointers[0] = (PetscVoidFunction)rem;
514 
515   *ierr = MatNullSpaceSetFunction(*sp,ournullfunction,ctx);
516 }
517 
518 PETSC_EXTERN void matcreatevecs_(Mat *mat,Vec *right,Vec *left, int *ierr)
519 {
520   CHKFORTRANNULLOBJECT(right);
521   CHKFORTRANNULLOBJECT(left);
522   *ierr = MatCreateVecs(*mat,right,left);
523 }
524 
525 PETSC_EXTERN void matgetrowij_(Mat *B,PetscInt *shift,PetscBool *sym,PetscBool *blockcompressed,PetscInt *n,PetscInt *ia,size_t *iia,
526                                 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);if (*ierr) return;
530   *iia  = PetscIntAddressToFortran(ia,(PetscInt*)IA);
531   *jja  = PetscIntAddressToFortran(ja,(PetscInt*)JA);
532 }
533 
534 PETSC_EXTERN void matrestorerowij_(Mat *B,PetscInt *shift,PetscBool *sym,PetscBool *blockcompressed, PetscInt *n,PetscInt *ia,size_t *iia,
535                                     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); 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 matseqaijrestorearray_(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 = MatSeqAIJRestoreArray(*mat,&lx);if (*ierr) return;
634 }
635 
636 PETSC_EXTERN void matdensegetarray_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr)
637 {
638   PetscScalar *mm;
639   PetscInt    m,n;
640 
641   *ierr = MatDenseGetArray(*mat,&mm); if (*ierr) return;
642   *ierr = MatGetSize(*mat,&m,&n);  if (*ierr) return;
643   *ierr = PetscScalarAddressToFortran((PetscObject)*mat,1,fa,mm,m*n,ia); if (*ierr) return;
644 }
645 
646 PETSC_EXTERN void matdenserestorearray_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr)
647 {
648   PetscScalar *lx;
649   PetscInt    m,n;
650 
651   *ierr = MatGetSize(*mat,&m,&n); if (*ierr) return;
652   *ierr = PetscScalarAddressFromFortran((PetscObject)*mat,fa,*ia,m*n,&lx);if (*ierr) return;
653   *ierr = MatDenseRestoreArray(*mat,&lx);if (*ierr) return;
654 }
655 
656 PETSC_EXTERN void matdensegetarrayread_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr)
657 {
658   const PetscScalar *mm;
659   PetscInt         m,n;
660 
661   *ierr = MatDenseGetArrayRead(*mat,&mm); if (*ierr) return;
662   *ierr = MatGetSize(*mat,&m,&n);  if (*ierr) return;
663   *ierr = PetscScalarAddressToFortran((PetscObject)*mat,1,fa,(PetscScalar*)mm,m*n,ia); if (*ierr) return;
664 }
665 
666 PETSC_EXTERN void matdenserestorearrayread_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr)
667 {
668   const PetscScalar *lx;
669   PetscInt          m,n;
670 
671   *ierr = MatGetSize(*mat,&m,&n); if (*ierr) return;
672   *ierr = PetscScalarAddressFromFortran((PetscObject)*mat,fa,*ia,m*n,(PetscScalar**)&lx);if (*ierr) return;
673   *ierr = MatDenseRestoreArrayRead(*mat,&lx);if (*ierr) return;
674 }
675 
676 PETSC_EXTERN void matfactorgetsolverpackage_(Mat *mat,char* name,PetscErrorCode *ierr,PETSC_FORTRAN_CHARLEN_T len)
677 {
678   const char *tname;
679 
680   *ierr = MatFactorGetSolverType(*mat,&tname);if (*ierr) return;
681   if (name != PETSC_NULL_CHARACTER_Fortran) {
682     *ierr = PetscStrncpy(name,tname,len);if (*ierr) return;
683   }
684   FIXRETURNCHAR(PETSC_TRUE,name,len);
685 }
686 
687 PETSC_EXTERN void matgetfactor_(Mat *mat,char* outtype,MatFactorType *ftype,Mat *M,PetscErrorCode *ierr,PETSC_FORTRAN_CHARLEN_T len)
688 {
689   char *t;
690   FIXCHAR(outtype,len,t);
691   *ierr = MatGetFactor(*mat,t,*ftype,M);if (*ierr) return;
692   FREECHAR(outtype,t);
693 }
694 
695 PETSC_EXTERN void matconvert_(Mat *mat,char* outtype,MatReuse *reuse,Mat *M,PetscErrorCode *ierr,PETSC_FORTRAN_CHARLEN_T len)
696 {
697   char *t;
698   FIXCHAR(outtype,len,t);
699   *ierr = MatConvert(*mat,t,*reuse,M);if (*ierr) return;
700   FREECHAR(outtype,t);
701 }
702 
703 /*
704     MatCreateSubmatrices() is slightly different from C since the
705     Fortran provides the array to hold the submatrix objects,while in C that
706     array is allocated by the MatCreateSubmatrices()
707 */
708 PETSC_EXTERN void matcreatesubmatrices_(Mat *mat,PetscInt *n,IS *isrow,IS *iscol,MatReuse *scall,Mat *smat,PetscErrorCode *ierr)
709 {
710   Mat      *lsmat;
711   PetscInt i;
712 
713   if (*scall == MAT_INITIAL_MATRIX) {
714     *ierr = MatCreateSubMatrices(*mat,*n,isrow,iscol,*scall,&lsmat);
715     for (i=0; i<=*n; i++) { /* lsmat[*n] might be a dummy matrix for saving data struc */
716       smat[i] = lsmat[i];
717     }
718     *ierr = PetscFree(lsmat);
719   } else {
720     *ierr = MatCreateSubMatrices(*mat,*n,isrow,iscol,*scall,&smat);
721   }
722 }
723 
724 /*
725     MatCreateSubmatrices() is slightly different from C since the
726     Fortran provides the array to hold the submatrix objects,while in C that
727     array is allocated by the MatCreateSubmatrices()
728 */
729 PETSC_EXTERN void matcreatesubmatricesmpi_(Mat *mat,PetscInt *n,IS *isrow,IS *iscol,MatReuse *scall,Mat *smat,PetscErrorCode *ierr)
730 {
731   Mat      *lsmat;
732   PetscInt i;
733 
734   if (*scall == MAT_INITIAL_MATRIX) {
735     *ierr = MatCreateSubMatricesMPI(*mat,*n,isrow,iscol,*scall,&lsmat);
736     for (i=0; i<=*n; i++) { /* lsmat[*n] might be a dummy matrix for saving data struc */
737       smat[i] = lsmat[i];
738     }
739     *ierr = PetscFree(lsmat);
740   } else {
741     *ierr = MatCreateSubMatricesMPI(*mat,*n,isrow,iscol,*scall,&smat);
742   }
743 }
744 
745 /*
746     MatDestroyMatrices() is slightly different from C since the
747     Fortran does not free the array of matrix objects, while in C that
748     the array is freed
749 */
750 PETSC_EXTERN void matdestroymatrices_(PetscInt *n,Mat *smat,PetscErrorCode *ierr)
751 {
752   PetscInt i;
753 
754   for (i=0; i<*n; i++) {
755     PETSC_FORTRAN_OBJECT_F_DESTROYED_TO_C_NULL(&smat[i]);
756     *ierr = MatDestroy(&smat[i]);if (*ierr) return;
757     PETSC_FORTRAN_OBJECT_C_NULL_TO_F_DESTROYED(&smat[i]);
758   }
759 }
760 
761 /*
762     MatDestroySubMatrices() is slightly different from C since the
763     Fortran provides the array to hold the submatrix objects, while in C that
764     array is allocated by the MatCreateSubmatrices()
765 */
766 PETSC_EXTERN void matdestroysubmatrices_(PetscInt *n,Mat *smat,PetscErrorCode *ierr)
767 {
768   Mat      *lsmat;
769   PetscInt i;
770 
771   *ierr = PetscMalloc1(*n+1,&lsmat);
772   for (i=0; i<=*n; i++) {
773       PETSC_FORTRAN_OBJECT_F_DESTROYED_TO_C_NULL(&smat[i]);
774       lsmat[i] = smat[i];
775   }
776   *ierr = MatDestroySubMatrices(*n,&lsmat);
777   for (i=0; i<=*n; i++) {
778     PETSC_FORTRAN_OBJECT_C_NULL_TO_F_DESTROYED(&smat[i]);
779   }
780 }
781 
782 PETSC_EXTERN void matdestroy_(Mat *x,int *ierr)
783 {
784   PETSC_FORTRAN_OBJECT_F_DESTROYED_TO_C_NULL(x);
785   *ierr = MatDestroy(x); if (*ierr) return;
786   PETSC_FORTRAN_OBJECT_C_NULL_TO_F_DESTROYED(x);
787 }
788 
789 PETSC_EXTERN void matsetoptionsprefix_(Mat *mat,char* prefix,PetscErrorCode *ierr,PETSC_FORTRAN_CHARLEN_T len)
790 {
791   char *t;
792 
793   FIXCHAR(prefix,len,t);
794   *ierr = MatSetOptionsPrefix(*mat,t);if (*ierr) return;
795   FREECHAR(prefix,t);
796 }
797 
798 PETSC_EXTERN void matnullspaceremove_(MatNullSpace *sp,Vec *vec,PetscErrorCode *ierr)
799 {
800   CHKFORTRANNULLOBJECT(*sp)
801   *ierr = MatNullSpaceRemove(*sp,*vec);
802 }
803 
804 PETSC_EXTERN void matgetinfo_(Mat *mat,MatInfoType *flag,MatInfo *info, int *ierr)
805 {
806   *ierr = MatGetInfo(*mat,*flag,info);
807 }
808 
809 PETSC_EXTERN void matlufactor_(Mat *mat,IS *row,IS *col,const MatFactorInfo *info, int *ierr)
810 {
811   *ierr = MatLUFactor(*mat,*row,*col,info);
812 }
813 
814 PETSC_EXTERN void matilufactor_(Mat *mat,IS *row,IS *col,const MatFactorInfo *info, int *ierr)
815 {
816   *ierr = MatILUFactor(*mat,*row,*col,info);
817 }
818 
819 PETSC_EXTERN void matlufactorsymbolic_(Mat *fact,Mat *mat,IS *row,IS *col,const MatFactorInfo *info, int *ierr)
820 {
821   *ierr = MatLUFactorSymbolic(*fact,*mat,*row,*col,info);
822 }
823 
824 PETSC_EXTERN void matlufactornumeric_(Mat *fact,Mat *mat,const MatFactorInfo *info, int *ierr)
825 {
826   *ierr = MatLUFactorNumeric(*fact,*mat,info);
827 }
828 
829 PETSC_EXTERN void matcholeskyfactor_(Mat *mat,IS *perm,const MatFactorInfo *info, int *ierr)
830 {
831   *ierr = MatCholeskyFactor(*mat,*perm,info);
832 }
833 
834 PETSC_EXTERN void matcholeskyfactorsymbolic_(Mat *fact,Mat *mat,IS *perm,const MatFactorInfo *info, int *ierr)
835 {
836   *ierr = MatCholeskyFactorSymbolic(*fact,*mat,*perm,info);
837 }
838 
839 PETSC_EXTERN void matcholeskyfactornumeric_(Mat *fact,Mat *mat,const MatFactorInfo *info, int *ierr)
840 {
841   *ierr = MatCholeskyFactorNumeric(*fact,*mat,info);
842 }
843 
844 PETSC_EXTERN void matilufactorsymbolic_(Mat *fact,Mat *mat,IS *row,IS *col,const MatFactorInfo *info, int *ierr)
845 {
846   *ierr = MatILUFactorSymbolic(*fact,*mat,*row,*col,info);
847 }
848 
849 PETSC_EXTERN void maticcfactorsymbolic_(Mat *fact,Mat *mat,IS *perm,const MatFactorInfo *info, int *ierr)
850 {
851   *ierr = MatICCFactorSymbolic(*fact,*mat,*perm,info);
852 }
853 
854 PETSC_EXTERN void maticcfactor_(Mat *mat,IS *row,const MatFactorInfo *info, int *ierr)
855 {
856   *ierr = MatICCFactor(*mat,*row,info);
857 }
858 
859 PETSC_EXTERN void matfactorinfoinitialize_(MatFactorInfo *info, int *ierr)
860 {
861   *ierr = MatFactorInfoInitialize(info);
862 }
863 PETSC_EXTERN void  matzerorowslocal_(Mat *mat,PetscInt *numRows, PetscInt rows[],PetscScalar *diag,Vec *x,Vec *b, int *ierr)
864 {
865   *ierr = MatZeroRowsLocal(*mat,*numRows,rows,*diag,*x,*b);
866 }
867 PETSC_EXTERN void  matzerorowslocal0_(Mat *mat,PetscInt *numRows, PetscInt rows[],PetscScalar *diag,Vec *x,Vec *b, int *ierr)
868 {
869   matzerorowslocal_(mat,numRows,rows,diag,x,b,ierr);
870 }
871 PETSC_EXTERN void  matzerorowslocal1_(Mat *mat,PetscInt *numRows, PetscInt rows[],PetscScalar *diag,Vec *x,Vec *b, int *ierr)
872 {
873   matzerorowslocal_(mat,numRows,rows,diag,x,b,ierr);
874 }
875 PETSC_EXTERN void matviewfromoptions_(Mat *ao,PetscObject obj,char* type,PetscErrorCode *ierr,PETSC_FORTRAN_CHARLEN_T len)
876 {
877   char *t;
878 
879   FIXCHAR(type,len,t);
880   CHKFORTRANNULLOBJECT(obj);
881   *ierr = MatViewFromOptions(*ao,obj,t);if (*ierr) return;
882   FREECHAR(type,t);
883 }
884