xref: /petsc/src/mat/interface/ftn-custom/zmatrixf.c (revision 2b40b63f2d83c74feb0a2167f386cf143c8f6e2d)
1ce0a2cd1SBarry Smith #include "private/fortranimpl.h"
2f4e70085SSatish Balay #include "petscmat.h"
3f4e70085SSatish Balay 
4f4e70085SSatish Balay #if defined(PETSC_HAVE_FORTRAN_CAPS)
57d6bfa3bSBarry Smith #define matdestroymatrices_              MATDESTROYMATRICES
65dffd610SBarry Smith #define matgetfactor_                    MATGETFACTOR
735bd34faSBarry Smith #define matfactorgetsolverpackage_       MATFACTORGETSOLVERPACKAGE
8f4e70085SSatish Balay #define matgetrowij_                     MATGETROWIJ
9f4e70085SSatish Balay #define matrestorerowij_                 MATRESTOREROWIJ
10f4e70085SSatish Balay #define matgetrow_                       MATGETROW
11f4e70085SSatish Balay #define matrestorerow_                   MATRESTOREROW
12f7e310deSShri Abhyankar #define matload_                         MATLOAD
13f4e70085SSatish Balay #define matview_                         MATVIEW
14f4e70085SSatish Balay #define matgetarray_                     MATGETARRAY
15f4e70085SSatish Balay #define matrestorearray_                 MATRESTOREARRAY
16f4e70085SSatish Balay #define matconvert_                      MATCONVERT
17f4e70085SSatish Balay #define matgetsubmatrices_               MATGETSUBMATRICES
18f4e70085SSatish Balay #define matzerorows_                     MATZEROROWS
19f4e70085SSatish Balay #define matzerorowsis_                   MATZEROROWSIS
20f4e70085SSatish Balay #define matzerorowslocal_                MATZEROROWSLOCAL
21f4e70085SSatish Balay #define matzerorowslocalis_              MATZEROROWSLOCALIS
221eea217eSSatish Balay #define matsetoptionsprefix_             MATSETOPTIONSPREFIX
237c54600cSBarry Smith #define matgetvecs_                      MATGETVECS
245ba43861SSatish Balay #define matnullspaceremove_              MATNULLSPACEREMOV
255ba43861SSatish Balay #define matgetinfo_                      MATGETINFO
2622688b47SSatish Balay #define matlufactor_                     MATLUFACTOR
2722688b47SSatish Balay #define matilufactor_                    MATILUFACTOR
2822688b47SSatish Balay #define matlufactorsymbolic_             MATLUFACTORSYMBOLIC
2922688b47SSatish Balay #define matlufactornumeric_              MATLUFACTORNUMERIC
3022688b47SSatish Balay #define matcholeskyfactor_               MATCHOLESKYFACTOR
3122688b47SSatish Balay #define matcholeskyfactorsymbolic_       MATCHOLESKYFACTORSYMBOLIC
3222688b47SSatish Balay #define matcholeskyfactornumeric_        MATCHOLESKYFACTORNUMERIC
3322688b47SSatish Balay #define matilufactorsymbolic_            MATILUFACTORSYMBOLIC
3422688b47SSatish Balay #define maticcfactorsymbolic_            MATICCFACTORSYMBOLIC
3522688b47SSatish Balay #define maticcfactor_                    MATICCFACTOR
3622688b47SSatish Balay #define matfactorinfoinitialize_         MATFACTORINFOINITIALIZE
37b22b330cSBarry Smith #define matnullspacesetfunction_         MATNULLSPACESETFUNCTION
38f4e70085SSatish Balay #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE)
397d6bfa3bSBarry Smith #define matdestroymatrices_              matdestroymatrices_
405dffd610SBarry Smith #define matgetfactor_                    matgetfactor
4135bd34faSBarry Smith #define matfactorgetsolverpackage_       matfactorgetsolverpackage
427c54600cSBarry Smith #define matgetvecs_                      matgetvecs
43f4e70085SSatish Balay #define matgetrowij_                     matgetrowij
44f4e70085SSatish Balay #define matrestorerowij_                 matrestorerowij
45f4e70085SSatish Balay #define matgetrow_                       matgetrow
46f4e70085SSatish Balay #define matrestorerow_                   matrestorerow
47f4e70085SSatish Balay #define matview_                         matview
48f7e310deSShri Abhyankar #define matload_                         matload
49f4e70085SSatish Balay #define matgetarray_                     matgetarray
50f4e70085SSatish Balay #define matrestorearray_                 matrestorearray
51f4e70085SSatish Balay #define matconvert_                      matconvert
52f4e70085SSatish Balay #define matgetsubmatrices_               matgetsubmatrices
53f4e70085SSatish Balay #define matzerorows_                     matzerorows
54f4e70085SSatish Balay #define matzerorowsis_                   matzerorowsis
55f4e70085SSatish Balay #define matzerorowslocal_                matzerorowslocal
56f4e70085SSatish Balay #define matzerorowslocalis_              matzerorowslocalis
571eea217eSSatish Balay #define matsetoptionsprefix_             matsetoptionsprefix
58812c3f48SMatthew Knepley #define matnullspaceremove_              matnullspaceremove
595ba43861SSatish Balay #define matgetinfo_                      matgetinfo
6022688b47SSatish Balay #define matlufactor_                     matlufactor
6122688b47SSatish Balay #define matilufactor_                    matilufactor
6222688b47SSatish Balay #define matlufactorsymbolic_             matlufactorsymbolic
6322688b47SSatish Balay #define matlufactornumeric_              matlufactornumeric
6422688b47SSatish Balay #define matcholeskyfactor_               matcholeskyfactor
6522688b47SSatish Balay #define matcholeskyfactorsymbolic_       matcholeskyfactorsymbolic
6622688b47SSatish Balay #define matcholeskyfactornumeric_        matcholeskyfactornumeric
6722688b47SSatish Balay #define matilufactorsymbolic_            matilufactorsymbolic
6822688b47SSatish Balay #define maticcfactorsymbolic_            maticcfactorsymbolic
6922688b47SSatish Balay #define maticcfactor_                    maticcfactor
7022688b47SSatish Balay #define matfactorinfoinitialize_         matfactorinfoinitialize
71b22b330cSBarry Smith #define matnullspacesetfunction_         matnullspacesetfunction
72f4e70085SSatish Balay #endif
73f4e70085SSatish Balay 
74f4e70085SSatish Balay EXTERN_C_BEGIN
75f4e70085SSatish Balay 
76b22b330cSBarry Smith static PetscErrorCode ournullfunction(MatNullSpace sp,Vec x,void *ctx)
77b22b330cSBarry Smith {
78b22b330cSBarry Smith   PetscErrorCode ierr = 0;
79b22b330cSBarry Smith   (*(void (PETSC_STDCALL *)(MatNullSpace*,Vec*,void*,PetscErrorCode*))(((PetscObject)sp)->fortran_func_pointers[0]))(&sp,&x,ctx,&ierr);CHKERRQ(ierr);
80b22b330cSBarry Smith   return 0;
81b22b330cSBarry Smith }
82b22b330cSBarry Smith 
83b22b330cSBarry Smith void PETSC_STDCALL  matnullspacesetfunction_(MatNullSpace *sp, PetscErrorCode (*rem)(MatNullSpace,Vec,void*),void *ctx,PetscErrorCode *ierr)
84b22b330cSBarry Smith {
85b22b330cSBarry Smith   PetscObjectAllocateFortranPointers(*sp,1);
86b22b330cSBarry Smith   ((PetscObject)*sp)->fortran_func_pointers[0] = (PetscVoidFunction)rem;
87b22b330cSBarry Smith   *ierr = MatNullSpaceSetFunction(*sp,ournullfunction,ctx);
88b22b330cSBarry Smith }
89b22b330cSBarry Smith 
907c54600cSBarry Smith void PETSC_STDCALL   matgetvecs_(Mat *mat,Vec *right,Vec *left, int *ierr )
917c54600cSBarry Smith {
927c54600cSBarry Smith   CHKFORTRANNULLOBJECT(right);
937c54600cSBarry Smith   CHKFORTRANNULLOBJECT(left);
947c54600cSBarry Smith   *ierr = MatGetVecs(*mat,right,left);
957c54600cSBarry Smith }
967c54600cSBarry Smith 
97ace3abfcSBarry Smith void PETSC_STDCALL matgetrowij_(Mat *B,PetscInt *shift,PetscBool  *sym,PetscBool  *blockcompressed,PetscInt *n,PetscInt *ia,size_t *iia,
98ace3abfcSBarry Smith                                 PetscInt *ja,size_t *jja,PetscBool  *done,PetscErrorCode *ierr)
99f4e70085SSatish Balay {
100f4e70085SSatish Balay   PetscInt *IA,*JA;
1018f7157efSSatish Balay   *ierr = MatGetRowIJ(*B,*shift,*sym,*blockcompressed,n,&IA,&JA,done);if (*ierr) return;
102f4e70085SSatish Balay   *iia  = PetscIntAddressToFortran(ia,IA);
103f4e70085SSatish Balay   *jja  = PetscIntAddressToFortran(ja,JA);
104f4e70085SSatish Balay }
105f4e70085SSatish Balay 
106ace3abfcSBarry Smith void PETSC_STDCALL matrestorerowij_(Mat *B,PetscInt *shift,PetscBool  *sym,PetscBool  *blockcompressed, PetscInt *n,PetscInt *ia,size_t *iia,
107ace3abfcSBarry Smith                                     PetscInt *ja,size_t *jja,PetscBool  *done,PetscErrorCode *ierr)
108f4e70085SSatish Balay {
109f4e70085SSatish Balay   PetscInt *IA = PetscIntAddressFromFortran(ia,*iia),*JA = PetscIntAddressFromFortran(ja,*jja);
1108f7157efSSatish Balay   *ierr = MatRestoreRowIJ(*B,*shift,*sym,*blockcompressed,n,&IA,&JA,done);
111f4e70085SSatish Balay }
112f4e70085SSatish Balay 
113f4e70085SSatish Balay /*
114f4e70085SSatish Balay    This is a poor way of storing the column and value pointers
115f4e70085SSatish Balay   generated by MatGetRow() to be returned with MatRestoreRow()
116f4e70085SSatish Balay   but there is not natural,good place else to store them. Hence
117f4e70085SSatish Balay   Fortran programmers can only have one outstanding MatGetRows()
118f4e70085SSatish Balay   at a time.
119f4e70085SSatish Balay */
120f4e70085SSatish Balay static PetscErrorCode    matgetrowactive = 0;
121f4e70085SSatish Balay static const PetscInt    *my_ocols = 0;
122f4e70085SSatish Balay static const PetscScalar *my_ovals = 0;
123f4e70085SSatish Balay 
124f4e70085SSatish Balay void PETSC_STDCALL matgetrow_(Mat *mat,PetscInt *row,PetscInt *ncols,PetscInt *cols,PetscScalar *vals,PetscErrorCode *ierr)
125f4e70085SSatish Balay {
126f4e70085SSatish Balay   const PetscInt    **oocols = &my_ocols;
127f4e70085SSatish Balay   const PetscScalar **oovals = &my_ovals;
128f4e70085SSatish Balay 
129f4e70085SSatish Balay   if (matgetrowactive) {
130d736bfebSBarry Smith     PetscError(PETSC_COMM_SELF,__LINE__,"MatGetRow_Fortran",__FILE__,__SDIR__,PETSC_ERR_ARG_WRONGSTATE,PETSC_ERROR_INITIAL,
131f4e70085SSatish Balay                "Cannot have two MatGetRow() active simultaneously\n\
132f4e70085SSatish Balay                call MatRestoreRow() before calling MatGetRow() a second time");
133f4e70085SSatish Balay      *ierr = 1;
134f4e70085SSatish Balay      return;
135f4e70085SSatish Balay   }
136f4e70085SSatish Balay 
137f4e70085SSatish Balay   CHKFORTRANNULLINTEGER(cols); if (!cols) oocols = PETSC_NULL;
138f4e70085SSatish Balay   CHKFORTRANNULLSCALAR(vals);  if (!vals) oovals = PETSC_NULL;
139f4e70085SSatish Balay 
140f4e70085SSatish Balay   *ierr = MatGetRow(*mat,*row,ncols,oocols,oovals);
141f4e70085SSatish Balay   if (*ierr) return;
142f4e70085SSatish Balay 
143f4e70085SSatish Balay   if (oocols) { *ierr = PetscMemcpy(cols,my_ocols,(*ncols)*sizeof(PetscInt)); if (*ierr) return;}
144f4e70085SSatish Balay   if (oovals) { *ierr = PetscMemcpy(vals,my_ovals,(*ncols)*sizeof(PetscScalar)); if (*ierr) return; }
145f4e70085SSatish Balay   matgetrowactive = 1;
146f4e70085SSatish Balay }
147f4e70085SSatish Balay 
148f4e70085SSatish Balay void PETSC_STDCALL matrestorerow_(Mat *mat,PetscInt *row,PetscInt *ncols,PetscInt *cols,PetscScalar *vals,PetscErrorCode *ierr)
149f4e70085SSatish Balay {
150f4e70085SSatish Balay   const PetscInt         **oocols = &my_ocols;
151f4e70085SSatish Balay   const PetscScalar **oovals = &my_ovals;
152f4e70085SSatish Balay   if (!matgetrowactive) {
153d736bfebSBarry Smith     PetscError(PETSC_COMM_SELF,__LINE__,"MatRestoreRow_Fortran",__FILE__,__SDIR__,PETSC_ERR_ARG_WRONGSTATE,PETSC_ERROR_INITIAL,
154f4e70085SSatish Balay                "Must call MatGetRow() first");
155f4e70085SSatish Balay      *ierr = 1;
156f4e70085SSatish Balay      return;
157f4e70085SSatish Balay   }
158f4e70085SSatish Balay   CHKFORTRANNULLINTEGER(cols); if (!cols) oocols = PETSC_NULL;
159f4e70085SSatish Balay   CHKFORTRANNULLSCALAR(vals);  if (!vals) oovals = PETSC_NULL;
160f4e70085SSatish Balay 
161f4e70085SSatish Balay   *ierr = MatRestoreRow(*mat,*row,ncols,oocols,oovals);
162f4e70085SSatish Balay   matgetrowactive = 0;
163f4e70085SSatish Balay }
164f4e70085SSatish Balay 
165f4e70085SSatish Balay void PETSC_STDCALL matview_(Mat *mat,PetscViewer *vin,PetscErrorCode *ierr)
166f4e70085SSatish Balay {
167f4e70085SSatish Balay   PetscViewer v;
168f4e70085SSatish Balay   PetscPatchDefaultViewers_Fortran(vin,v);
169f4e70085SSatish Balay   *ierr = MatView(*mat,v);
170f4e70085SSatish Balay }
171f4e70085SSatish Balay 
172112444f4SShri Abhyankar void PETSC_STDCALL matload_(Mat *mat,PetscViewer *vin,PetscErrorCode *ierr)
173f7e310deSShri Abhyankar {
174f7e310deSShri Abhyankar   PetscViewer v;
175f7e310deSShri Abhyankar   PetscPatchDefaultViewers_Fortran(vin,v);
176112444f4SShri Abhyankar   *ierr = MatLoad(*mat,v);
177f7e310deSShri Abhyankar }
178f7e310deSShri Abhyankar 
179f4e70085SSatish Balay void PETSC_STDCALL matgetarray_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr)
180f4e70085SSatish Balay {
181f4e70085SSatish Balay   PetscScalar *mm;
182f4e70085SSatish Balay   PetscInt    m,n;
183f4e70085SSatish Balay 
184f4e70085SSatish Balay   *ierr = MatGetArray(*mat,&mm); if (*ierr) return;
185f4e70085SSatish Balay   *ierr = MatGetSize(*mat,&m,&n);  if (*ierr) return;
186f91d1997SBarry Smith   *ierr = PetscScalarAddressToFortran((PetscObject)*mat,1,fa,mm,m*n,ia); if (*ierr) return;
187f4e70085SSatish Balay }
188f4e70085SSatish Balay 
189f4e70085SSatish Balay void PETSC_STDCALL matrestorearray_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr)
190f4e70085SSatish Balay {
191f4e70085SSatish Balay   PetscScalar          *lx;
192f4e70085SSatish Balay   PetscInt                  m,n;
193f4e70085SSatish Balay 
194f4e70085SSatish Balay   *ierr = MatGetSize(*mat,&m,&n); if (*ierr) return;
195f4e70085SSatish Balay   *ierr = PetscScalarAddressFromFortran((PetscObject)*mat,fa,*ia,m*n,&lx);if (*ierr) return;
196f4e70085SSatish Balay   *ierr = MatRestoreArray(*mat,&lx);if (*ierr) return;
197f4e70085SSatish Balay }
198f4e70085SSatish Balay 
19935bd34faSBarry Smith void PETSC_STDCALL matfactorgetsolverpackage_(Mat *mat,CHAR name PETSC_MIXED_LEN(len),PetscErrorCode *ierr PETSC_END_LEN(len))
20035bd34faSBarry Smith {
20135bd34faSBarry Smith   const char *tname;
20235bd34faSBarry Smith 
20335bd34faSBarry Smith   *ierr = MatFactorGetSolverPackage(*mat,&tname);if (*ierr) return;
20435bd34faSBarry Smith   if (name != PETSC_NULL_CHARACTER_Fortran) {
20535bd34faSBarry Smith     *ierr = PetscStrncpy(name,tname,len);if (*ierr) return;
20635bd34faSBarry Smith   }
20735bd34faSBarry Smith   FIXRETURNCHAR(PETSC_TRUE,name,len);
20835bd34faSBarry Smith }
20935bd34faSBarry Smith 
2109be81726SHong Zhang void PETSC_STDCALL matgetfactor_(Mat *mat,CHAR outtype PETSC_MIXED_LEN(len),MatFactorType *ftype,Mat *M,PetscErrorCode *ierr PETSC_END_LEN(len))
2115dffd610SBarry Smith {
2125dffd610SBarry Smith   char *t;
2135dffd610SBarry Smith   FIXCHAR(outtype,len,t);
2149be81726SHong Zhang   *ierr = MatGetFactor(*mat,t,*ftype,M);
2155dffd610SBarry Smith   FREECHAR(outtype,t);
2165dffd610SBarry Smith }
2175dffd610SBarry Smith 
218f4e70085SSatish Balay void PETSC_STDCALL matconvert_(Mat *mat,CHAR outtype PETSC_MIXED_LEN(len),MatReuse *reuse,Mat *M,PetscErrorCode *ierr PETSC_END_LEN(len))
219f4e70085SSatish Balay {
220f4e70085SSatish Balay   char *t;
221f4e70085SSatish Balay   FIXCHAR(outtype,len,t);
222f4e70085SSatish Balay   *ierr = MatConvert(*mat,t,*reuse,M);
223f4e70085SSatish Balay   FREECHAR(outtype,t);
224f4e70085SSatish Balay }
225f4e70085SSatish Balay 
226f4e70085SSatish Balay /*
227f4e70085SSatish Balay     MatGetSubmatrices() is slightly different from C since the
228f4e70085SSatish Balay     Fortran provides the array to hold the submatrix objects,while in C that
229f4e70085SSatish Balay     array is allocated by the MatGetSubmatrices()
230f4e70085SSatish Balay */
231f4e70085SSatish Balay void PETSC_STDCALL matgetsubmatrices_(Mat *mat,PetscInt *n,IS *isrow,IS *iscol,MatReuse *scall,Mat *smat,PetscErrorCode *ierr)
232f4e70085SSatish Balay {
233f4e70085SSatish Balay   Mat *lsmat;
234f4e70085SSatish Balay   PetscInt i;
235f4e70085SSatish Balay 
236f4e70085SSatish Balay   if (*scall == MAT_INITIAL_MATRIX) {
237f4e70085SSatish Balay     *ierr = MatGetSubMatrices(*mat,*n,isrow,iscol,*scall,&lsmat);
238f4e70085SSatish Balay     for (i=0; i<*n; i++) {
239f4e70085SSatish Balay       smat[i] = lsmat[i];
240f4e70085SSatish Balay     }
241f4e70085SSatish Balay     *ierr = PetscFree(lsmat);
242f4e70085SSatish Balay   } else {
243f4e70085SSatish Balay     *ierr = MatGetSubMatrices(*mat,*n,isrow,iscol,*scall,&smat);
244f4e70085SSatish Balay   }
245f4e70085SSatish Balay }
246f4e70085SSatish Balay 
2477d6bfa3bSBarry Smith /*
2487d6bfa3bSBarry Smith     MatDestroyMatrices() is slightly different from C since the
2497d6bfa3bSBarry Smith     Fortran provides the array to hold the submatrix objects,while in C that
2507d6bfa3bSBarry Smith     array is allocated by the MatGetSubmatrices()
2517d6bfa3bSBarry Smith */
2527d6bfa3bSBarry Smith void PETSC_STDCALL matdestroymatrices_(Mat *mat,PetscInt *n,Mat *smat,PetscErrorCode *ierr)
2537d6bfa3bSBarry Smith {
2547d6bfa3bSBarry Smith   PetscInt i;
2557d6bfa3bSBarry Smith 
2567d6bfa3bSBarry Smith   for (i=0; i<*n; i++) {
2577d6bfa3bSBarry Smith     *ierr = MatDestroy(smat[i]);if (*ierr) return;
2587d6bfa3bSBarry Smith   }
2597d6bfa3bSBarry Smith }
2607d6bfa3bSBarry Smith 
261*2b40b63fSBarry Smith void PETSC_STDCALL matzerorows_(Mat *mat,PetscInt *numRows,PetscInt *rows,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr)
262f4e70085SSatish Balay {
263*2b40b63fSBarry Smith   CHKFORTRANNULLOBJECTDEREFERENCE(x);
264*2b40b63fSBarry Smith   CHKFORTRANNULLOBJECTDEREFERENCE(b);
265*2b40b63fSBarry Smith   *ierr = MatZeroRows(*mat,*numRows,rows,*diag,*x,*b);
266f4e70085SSatish Balay }
267f4e70085SSatish Balay 
268*2b40b63fSBarry Smith void PETSC_STDCALL matzerorowsis_(Mat *mat,IS *is,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr)
269f4e70085SSatish Balay {
270*2b40b63fSBarry Smith   CHKFORTRANNULLOBJECTDEREFERENCE(x);
271*2b40b63fSBarry Smith   CHKFORTRANNULLOBJECTDEREFERENCE(b);
272*2b40b63fSBarry Smith   *ierr = MatZeroRowsIS(*mat,*is,*diag,*x,*b);
273f4e70085SSatish Balay }
274f4e70085SSatish Balay 
275*2b40b63fSBarry Smith void PETSC_STDCALL matzerorowslocal_(Mat *mat,PetscInt *numRows,PetscInt *rows,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr)
276f4e70085SSatish Balay {
277*2b40b63fSBarry Smith   CHKFORTRANNULLOBJECTDEREFERENCE(x);
278*2b40b63fSBarry Smith   CHKFORTRANNULLOBJECTDEREFERENCE(b);
279*2b40b63fSBarry Smith   *ierr = MatZeroRowsLocal(*mat,*numRows,rows,*diag,*x,*b);
280f4e70085SSatish Balay }
281f4e70085SSatish Balay 
282*2b40b63fSBarry Smith void PETSC_STDCALL matzerorowslocalis_(Mat *mat,IS *is,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr)
283f4e70085SSatish Balay {
284*2b40b63fSBarry Smith   CHKFORTRANNULLOBJECTDEREFERENCE(x);
285*2b40b63fSBarry Smith   CHKFORTRANNULLOBJECTDEREFERENCE(b);
286*2b40b63fSBarry Smith   *ierr = MatZeroRowsLocalIS(*mat,*is,*diag,*x,*b);
287f4e70085SSatish Balay }
288f4e70085SSatish Balay 
2891eea217eSSatish Balay 
290*2b40b63fSBarry Smith void PETSC_STDCALL matsetoptionsprefix_(Mat *mat,CHAR prefix PETSC_MIXED_LEN(len),PetscErrorCode *ierr PETSC_END_LEN(len))
2911eea217eSSatish Balay {
2921eea217eSSatish Balay   char *t;
2931eea217eSSatish Balay 
2941eea217eSSatish Balay   FIXCHAR(prefix,len,t);
2951eea217eSSatish Balay   *ierr = MatSetOptionsPrefix(*mat,t);
2961eea217eSSatish Balay   FREECHAR(prefix,t);
2971eea217eSSatish Balay }
2981eea217eSSatish Balay 
299812c3f48SMatthew Knepley void PETSC_STDCALL matnullspaceremove_(MatNullSpace *sp,Vec *vec,Vec *out,PetscErrorCode *ierr)
300812c3f48SMatthew Knepley {
301812c3f48SMatthew Knepley   CHKFORTRANNULLOBJECT(out);
302812c3f48SMatthew Knepley   *ierr = MatNullSpaceRemove(*sp,*vec,out);
303812c3f48SMatthew Knepley }
3041eea217eSSatish Balay 
3055ba43861SSatish Balay void PETSC_STDCALL   matgetinfo_(Mat *mat,MatInfoType *flag,MatInfo *info, int *__ierr )
3065ba43861SSatish Balay {
3075ba43861SSatish Balay   *__ierr = MatGetInfo(*mat,*flag,info);
3085ba43861SSatish Balay }
3095ba43861SSatish Balay 
31022688b47SSatish Balay void PETSC_STDCALL   matlufactor_(Mat *mat,IS *row,IS *col, MatFactorInfo *info, int *__ierr )
31122688b47SSatish Balay {
31222688b47SSatish Balay   *__ierr = MatLUFactor(*mat,*row,*col,info);
31322688b47SSatish Balay }
31422688b47SSatish Balay 
31522688b47SSatish Balay void PETSC_STDCALL   matilufactor_(Mat *mat,IS *row,IS *col, MatFactorInfo *info, int *__ierr )
31622688b47SSatish Balay {
31722688b47SSatish Balay   *__ierr = MatILUFactor(*mat,*row,*col,info);
31822688b47SSatish Balay }
31922688b47SSatish Balay 
32022688b47SSatish Balay void PETSC_STDCALL   matlufactorsymbolic_(Mat *fact,Mat *mat,IS *row,IS *col, MatFactorInfo *info, int *__ierr )
32122688b47SSatish Balay {
32222688b47SSatish Balay   *__ierr = MatLUFactorSymbolic(*fact,*mat,*row,*col,info);
32322688b47SSatish Balay }
32422688b47SSatish Balay 
32522688b47SSatish Balay void PETSC_STDCALL   matlufactornumeric_(Mat *fact,Mat *mat, MatFactorInfo *info, int *__ierr )
32622688b47SSatish Balay {
32722688b47SSatish Balay   *__ierr = MatLUFactorNumeric(*fact,*mat,info);
32822688b47SSatish Balay }
32922688b47SSatish Balay 
33022688b47SSatish Balay void PETSC_STDCALL   matcholeskyfactor_(Mat *mat,IS *perm, MatFactorInfo *info, int *__ierr )
33122688b47SSatish Balay {
33222688b47SSatish Balay   *__ierr = MatCholeskyFactor(*mat,*perm,info);
33322688b47SSatish Balay }
33422688b47SSatish Balay 
33522688b47SSatish Balay void PETSC_STDCALL   matcholeskyfactorsymbolic_(Mat *fact,Mat *mat,IS *perm, MatFactorInfo *info, int *__ierr )
33622688b47SSatish Balay {
33722688b47SSatish Balay   *__ierr = MatCholeskyFactorSymbolic(*fact,*mat,*perm,info);
33822688b47SSatish Balay }
33922688b47SSatish Balay 
34022688b47SSatish Balay void PETSC_STDCALL   matcholeskyfactornumeric_(Mat *fact,Mat *mat, MatFactorInfo *info, int *__ierr )
34122688b47SSatish Balay {
34222688b47SSatish Balay   *__ierr = MatCholeskyFactorNumeric(*fact,*mat,info);
34322688b47SSatish Balay }
34422688b47SSatish Balay 
34522688b47SSatish Balay void PETSC_STDCALL   matilufactorsymbolic_(Mat *fact,Mat *mat,IS *row,IS *col, MatFactorInfo *info, int *__ierr )
34622688b47SSatish Balay {
34722688b47SSatish Balay   *__ierr = MatILUFactorSymbolic(*fact,*mat,*row,*col,info);
34822688b47SSatish Balay }
34922688b47SSatish Balay 
35022688b47SSatish Balay void PETSC_STDCALL   maticcfactorsymbolic_(Mat *fact,Mat *mat,IS *perm, MatFactorInfo *info, int *__ierr )
35122688b47SSatish Balay {
35222688b47SSatish Balay   *__ierr = MatICCFactorSymbolic(*fact,*mat,*perm,info);
35322688b47SSatish Balay }
35422688b47SSatish Balay 
35522688b47SSatish Balay void PETSC_STDCALL   maticcfactor_(Mat *mat,IS *row, MatFactorInfo* info, int *__ierr )
35622688b47SSatish Balay {
35722688b47SSatish Balay   *__ierr = MatICCFactor(*mat,*row,info);
35822688b47SSatish Balay }
35922688b47SSatish Balay 
36022688b47SSatish Balay void PETSC_STDCALL   matfactorinfoinitialize_(MatFactorInfo *info, int *__ierr )
36122688b47SSatish Balay {
36222688b47SSatish Balay   *__ierr = MatFactorInfoInitialize(info);
36322688b47SSatish Balay }
36422688b47SSatish Balay 
365f4e70085SSatish Balay EXTERN_C_END
366