xref: /petsc/src/mat/interface/ftn-custom/zmatrixf.c (revision b22b330c5ca615f114690330d6518ed7fe08adeb)
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
12f4e70085SSatish Balay #define matview_                         MATVIEW
13f4e70085SSatish Balay #define matgetarray_                     MATGETARRAY
14f4e70085SSatish Balay #define matrestorearray_                 MATRESTOREARRAY
15f4e70085SSatish Balay #define matconvert_                      MATCONVERT
16f4e70085SSatish Balay #define matgetsubmatrices_               MATGETSUBMATRICES
17f4e70085SSatish Balay #define matzerorows_                     MATZEROROWS
18f4e70085SSatish Balay #define matzerorowsis_                   MATZEROROWSIS
19f4e70085SSatish Balay #define matzerorowslocal_                MATZEROROWSLOCAL
20f4e70085SSatish Balay #define matzerorowslocalis_              MATZEROROWSLOCALIS
211eea217eSSatish Balay #define matsetoptionsprefix_             MATSETOPTIONSPREFIX
227c54600cSBarry Smith #define matgetvecs_                      MATGETVECS
235ba43861SSatish Balay #define matnullspaceremove_              MATNULLSPACEREMOV
245ba43861SSatish Balay #define matgetinfo_                      MATGETINFO
2522688b47SSatish Balay #define matlufactor_                     MATLUFACTOR
2622688b47SSatish Balay #define matilufactor_                    MATILUFACTOR
2722688b47SSatish Balay #define matlufactorsymbolic_             MATLUFACTORSYMBOLIC
2822688b47SSatish Balay #define matlufactornumeric_              MATLUFACTORNUMERIC
2922688b47SSatish Balay #define matcholeskyfactor_               MATCHOLESKYFACTOR
3022688b47SSatish Balay #define matcholeskyfactorsymbolic_       MATCHOLESKYFACTORSYMBOLIC
3122688b47SSatish Balay #define matcholeskyfactornumeric_        MATCHOLESKYFACTORNUMERIC
3222688b47SSatish Balay #define matilufactorsymbolic_            MATILUFACTORSYMBOLIC
3322688b47SSatish Balay #define maticcfactorsymbolic_            MATICCFACTORSYMBOLIC
3422688b47SSatish Balay #define maticcfactor_                    MATICCFACTOR
3522688b47SSatish Balay #define matfactorinfoinitialize_         MATFACTORINFOINITIALIZE
36*b22b330cSBarry Smith #define matnullspacesetfunction_         MATNULLSPACESETFUNCTION
37f4e70085SSatish Balay #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE)
387d6bfa3bSBarry Smith #define matdestroymatrices_              matdestroymatrices_
395dffd610SBarry Smith #define matgetfactor_                    matgetfactor
4035bd34faSBarry Smith #define matfactorgetsolverpackage_       matfactorgetsolverpackage
417c54600cSBarry Smith #define matgetvecs_                      matgetvecs
42f4e70085SSatish Balay #define matgetrowij_                     matgetrowij
43f4e70085SSatish Balay #define matrestorerowij_                 matrestorerowij
44f4e70085SSatish Balay #define matgetrow_                       matgetrow
45f4e70085SSatish Balay #define matrestorerow_                   matrestorerow
46f4e70085SSatish Balay #define matview_                         matview
47f4e70085SSatish Balay #define matgetarray_                     matgetarray
48f4e70085SSatish Balay #define matrestorearray_                 matrestorearray
49f4e70085SSatish Balay #define matconvert_                      matconvert
50f4e70085SSatish Balay #define matgetsubmatrices_               matgetsubmatrices
51f4e70085SSatish Balay #define matzerorows_                     matzerorows
52f4e70085SSatish Balay #define matzerorowsis_                   matzerorowsis
53f4e70085SSatish Balay #define matzerorowslocal_                matzerorowslocal
54f4e70085SSatish Balay #define matzerorowslocalis_              matzerorowslocalis
551eea217eSSatish Balay #define matsetoptionsprefix_             matsetoptionsprefix
56812c3f48SMatthew Knepley #define matnullspaceremove_              matnullspaceremove
575ba43861SSatish Balay #define matgetinfo_                      matgetinfo
5822688b47SSatish Balay #define matlufactor_                     matlufactor
5922688b47SSatish Balay #define matilufactor_                    matilufactor
6022688b47SSatish Balay #define matlufactorsymbolic_             matlufactorsymbolic
6122688b47SSatish Balay #define matlufactornumeric_              matlufactornumeric
6222688b47SSatish Balay #define matcholeskyfactor_               matcholeskyfactor
6322688b47SSatish Balay #define matcholeskyfactorsymbolic_       matcholeskyfactorsymbolic
6422688b47SSatish Balay #define matcholeskyfactornumeric_        matcholeskyfactornumeric
6522688b47SSatish Balay #define matilufactorsymbolic_            matilufactorsymbolic
6622688b47SSatish Balay #define maticcfactorsymbolic_            maticcfactorsymbolic
6722688b47SSatish Balay #define maticcfactor_                    maticcfactor
6822688b47SSatish Balay #define matfactorinfoinitialize_         matfactorinfoinitialize
69*b22b330cSBarry Smith #define matnullspacesetfunction_         matnullspacesetfunction
70f4e70085SSatish Balay #endif
71f4e70085SSatish Balay 
72f4e70085SSatish Balay EXTERN_C_BEGIN
73f4e70085SSatish Balay 
74*b22b330cSBarry Smith static PetscErrorCode ournullfunction(MatNullSpace sp,Vec x,void *ctx)
75*b22b330cSBarry Smith {
76*b22b330cSBarry Smith   PetscErrorCode ierr = 0;
77*b22b330cSBarry Smith   (*(void (PETSC_STDCALL *)(MatNullSpace*,Vec*,void*,PetscErrorCode*))(((PetscObject)sp)->fortran_func_pointers[0]))(&sp,&x,ctx,&ierr);CHKERRQ(ierr);
78*b22b330cSBarry Smith   return 0;
79*b22b330cSBarry Smith }
80*b22b330cSBarry Smith 
81*b22b330cSBarry Smith void PETSC_STDCALL  matnullspacesetfunction_(MatNullSpace *sp, PetscErrorCode (*rem)(MatNullSpace,Vec,void*),void *ctx,PetscErrorCode *ierr)
82*b22b330cSBarry Smith {
83*b22b330cSBarry Smith   PetscObjectAllocateFortranPointers(*sp,1);
84*b22b330cSBarry Smith   ((PetscObject)*sp)->fortran_func_pointers[0] = (PetscVoidFunction)rem;
85*b22b330cSBarry Smith   *ierr = MatNullSpaceSetFunction(*sp,ournullfunction,ctx);
86*b22b330cSBarry Smith }
87*b22b330cSBarry Smith 
887c54600cSBarry Smith void PETSC_STDCALL   matgetvecs_(Mat *mat,Vec *right,Vec *left, int *ierr )
897c54600cSBarry Smith {
907c54600cSBarry Smith   CHKFORTRANNULLOBJECT(right);
917c54600cSBarry Smith   CHKFORTRANNULLOBJECT(left);
927c54600cSBarry Smith   *ierr = MatGetVecs(*mat,right,left);
937c54600cSBarry Smith }
947c54600cSBarry Smith 
958f7157efSSatish Balay void PETSC_STDCALL matgetrowij_(Mat *B,PetscInt *shift,PetscTruth *sym,PetscTruth *blockcompressed,PetscInt *n,PetscInt *ia,size_t *iia,
968f7157efSSatish Balay                                 PetscInt *ja,size_t *jja,PetscTruth *done,PetscErrorCode *ierr)
97f4e70085SSatish Balay {
98f4e70085SSatish Balay   PetscInt *IA,*JA;
998f7157efSSatish Balay   *ierr = MatGetRowIJ(*B,*shift,*sym,*blockcompressed,n,&IA,&JA,done);if (*ierr) return;
100f4e70085SSatish Balay   *iia  = PetscIntAddressToFortran(ia,IA);
101f4e70085SSatish Balay   *jja  = PetscIntAddressToFortran(ja,JA);
102f4e70085SSatish Balay }
103f4e70085SSatish Balay 
1048f7157efSSatish Balay void PETSC_STDCALL matrestorerowij_(Mat *B,PetscInt *shift,PetscTruth *sym,PetscTruth *blockcompressed, PetscInt *n,PetscInt *ia,size_t *iia,
1058f7157efSSatish Balay                                     PetscInt *ja,size_t *jja,PetscTruth *done,PetscErrorCode *ierr)
106f4e70085SSatish Balay {
107f4e70085SSatish Balay   PetscInt *IA = PetscIntAddressFromFortran(ia,*iia),*JA = PetscIntAddressFromFortran(ja,*jja);
1088f7157efSSatish Balay   *ierr = MatRestoreRowIJ(*B,*shift,*sym,*blockcompressed,n,&IA,&JA,done);
109f4e70085SSatish Balay }
110f4e70085SSatish Balay 
111f4e70085SSatish Balay /*
112f4e70085SSatish Balay    This is a poor way of storing the column and value pointers
113f4e70085SSatish Balay   generated by MatGetRow() to be returned with MatRestoreRow()
114f4e70085SSatish Balay   but there is not natural,good place else to store them. Hence
115f4e70085SSatish Balay   Fortran programmers can only have one outstanding MatGetRows()
116f4e70085SSatish Balay   at a time.
117f4e70085SSatish Balay */
118f4e70085SSatish Balay static PetscErrorCode    matgetrowactive = 0;
119f4e70085SSatish Balay static const PetscInt    *my_ocols = 0;
120f4e70085SSatish Balay static const PetscScalar *my_ovals = 0;
121f4e70085SSatish Balay 
122f4e70085SSatish Balay void PETSC_STDCALL matgetrow_(Mat *mat,PetscInt *row,PetscInt *ncols,PetscInt *cols,PetscScalar *vals,PetscErrorCode *ierr)
123f4e70085SSatish Balay {
124f4e70085SSatish Balay   const PetscInt    **oocols = &my_ocols;
125f4e70085SSatish Balay   const PetscScalar **oovals = &my_ovals;
126f4e70085SSatish Balay 
127f4e70085SSatish Balay   if (matgetrowactive) {
128f4e70085SSatish Balay      PetscError(__LINE__,"MatGetRow_Fortran",__FILE__,__SDIR__,1,0,
129f4e70085SSatish Balay                "Cannot have two MatGetRow() active simultaneously\n\
130f4e70085SSatish Balay                call MatRestoreRow() before calling MatGetRow() a second time");
131f4e70085SSatish Balay      *ierr = 1;
132f4e70085SSatish Balay      return;
133f4e70085SSatish Balay   }
134f4e70085SSatish Balay 
135f4e70085SSatish Balay   CHKFORTRANNULLINTEGER(cols); if (!cols) oocols = PETSC_NULL;
136f4e70085SSatish Balay   CHKFORTRANNULLSCALAR(vals);  if (!vals) oovals = PETSC_NULL;
137f4e70085SSatish Balay 
138f4e70085SSatish Balay   *ierr = MatGetRow(*mat,*row,ncols,oocols,oovals);
139f4e70085SSatish Balay   if (*ierr) return;
140f4e70085SSatish Balay 
141f4e70085SSatish Balay   if (oocols) { *ierr = PetscMemcpy(cols,my_ocols,(*ncols)*sizeof(PetscInt)); if (*ierr) return;}
142f4e70085SSatish Balay   if (oovals) { *ierr = PetscMemcpy(vals,my_ovals,(*ncols)*sizeof(PetscScalar)); if (*ierr) return; }
143f4e70085SSatish Balay   matgetrowactive = 1;
144f4e70085SSatish Balay }
145f4e70085SSatish Balay 
146f4e70085SSatish Balay void PETSC_STDCALL matrestorerow_(Mat *mat,PetscInt *row,PetscInt *ncols,PetscInt *cols,PetscScalar *vals,PetscErrorCode *ierr)
147f4e70085SSatish Balay {
148f4e70085SSatish Balay   const PetscInt         **oocols = &my_ocols;
149f4e70085SSatish Balay   const PetscScalar **oovals = &my_ovals;
150f4e70085SSatish Balay   if (!matgetrowactive) {
151f4e70085SSatish Balay      PetscError(__LINE__,"MatRestoreRow_Fortran",__FILE__,__SDIR__,1,0,
152f4e70085SSatish Balay                "Must call MatGetRow() first");
153f4e70085SSatish Balay      *ierr = 1;
154f4e70085SSatish Balay      return;
155f4e70085SSatish Balay   }
156f4e70085SSatish Balay   CHKFORTRANNULLINTEGER(cols); if (!cols) oocols = PETSC_NULL;
157f4e70085SSatish Balay   CHKFORTRANNULLSCALAR(vals);  if (!vals) oovals = PETSC_NULL;
158f4e70085SSatish Balay 
159f4e70085SSatish Balay   *ierr = MatRestoreRow(*mat,*row,ncols,oocols,oovals);
160f4e70085SSatish Balay   matgetrowactive = 0;
161f4e70085SSatish Balay }
162f4e70085SSatish Balay 
163f4e70085SSatish Balay void PETSC_STDCALL matview_(Mat *mat,PetscViewer *vin,PetscErrorCode *ierr)
164f4e70085SSatish Balay {
165f4e70085SSatish Balay   PetscViewer v;
166f4e70085SSatish Balay   PetscPatchDefaultViewers_Fortran(vin,v);
167f4e70085SSatish Balay   *ierr = MatView(*mat,v);
168f4e70085SSatish Balay }
169f4e70085SSatish Balay 
170f4e70085SSatish Balay void PETSC_STDCALL matgetarray_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr)
171f4e70085SSatish Balay {
172f4e70085SSatish Balay   PetscScalar *mm;
173f4e70085SSatish Balay   PetscInt    m,n;
174f4e70085SSatish Balay 
175f4e70085SSatish Balay   *ierr = MatGetArray(*mat,&mm); if (*ierr) return;
176f4e70085SSatish Balay   *ierr = MatGetSize(*mat,&m,&n);  if (*ierr) return;
177f91d1997SBarry Smith   *ierr = PetscScalarAddressToFortran((PetscObject)*mat,1,fa,mm,m*n,ia); if (*ierr) return;
178f4e70085SSatish Balay }
179f4e70085SSatish Balay 
180f4e70085SSatish Balay void PETSC_STDCALL matrestorearray_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr)
181f4e70085SSatish Balay {
182f4e70085SSatish Balay   PetscScalar          *lx;
183f4e70085SSatish Balay   PetscInt                  m,n;
184f4e70085SSatish Balay 
185f4e70085SSatish Balay   *ierr = MatGetSize(*mat,&m,&n); if (*ierr) return;
186f4e70085SSatish Balay   *ierr = PetscScalarAddressFromFortran((PetscObject)*mat,fa,*ia,m*n,&lx);if (*ierr) return;
187f4e70085SSatish Balay   *ierr = MatRestoreArray(*mat,&lx);if (*ierr) return;
188f4e70085SSatish Balay }
189f4e70085SSatish Balay 
19035bd34faSBarry Smith void PETSC_STDCALL matfactorgetsolverpackage_(Mat *mat,CHAR name PETSC_MIXED_LEN(len),PetscErrorCode *ierr PETSC_END_LEN(len))
19135bd34faSBarry Smith {
19235bd34faSBarry Smith   const char *tname;
19335bd34faSBarry Smith 
19435bd34faSBarry Smith   *ierr = MatFactorGetSolverPackage(*mat,&tname);if (*ierr) return;
19535bd34faSBarry Smith   if (name != PETSC_NULL_CHARACTER_Fortran) {
19635bd34faSBarry Smith     *ierr = PetscStrncpy(name,tname,len);if (*ierr) return;
19735bd34faSBarry Smith   }
19835bd34faSBarry Smith   FIXRETURNCHAR(PETSC_TRUE,name,len);
19935bd34faSBarry Smith }
20035bd34faSBarry Smith 
2019be81726SHong Zhang void PETSC_STDCALL matgetfactor_(Mat *mat,CHAR outtype PETSC_MIXED_LEN(len),MatFactorType *ftype,Mat *M,PetscErrorCode *ierr PETSC_END_LEN(len))
2025dffd610SBarry Smith {
2035dffd610SBarry Smith   char *t;
2045dffd610SBarry Smith   FIXCHAR(outtype,len,t);
2059be81726SHong Zhang   *ierr = MatGetFactor(*mat,t,*ftype,M);
2065dffd610SBarry Smith   FREECHAR(outtype,t);
2075dffd610SBarry Smith }
2085dffd610SBarry Smith 
209f4e70085SSatish Balay void PETSC_STDCALL matconvert_(Mat *mat,CHAR outtype PETSC_MIXED_LEN(len),MatReuse *reuse,Mat *M,PetscErrorCode *ierr PETSC_END_LEN(len))
210f4e70085SSatish Balay {
211f4e70085SSatish Balay   char *t;
212f4e70085SSatish Balay   FIXCHAR(outtype,len,t);
213f4e70085SSatish Balay   *ierr = MatConvert(*mat,t,*reuse,M);
214f4e70085SSatish Balay   FREECHAR(outtype,t);
215f4e70085SSatish Balay }
216f4e70085SSatish Balay 
217f4e70085SSatish Balay /*
218f4e70085SSatish Balay     MatGetSubmatrices() is slightly different from C since the
219f4e70085SSatish Balay     Fortran provides the array to hold the submatrix objects,while in C that
220f4e70085SSatish Balay     array is allocated by the MatGetSubmatrices()
221f4e70085SSatish Balay */
222f4e70085SSatish Balay void PETSC_STDCALL matgetsubmatrices_(Mat *mat,PetscInt *n,IS *isrow,IS *iscol,MatReuse *scall,Mat *smat,PetscErrorCode *ierr)
223f4e70085SSatish Balay {
224f4e70085SSatish Balay   Mat *lsmat;
225f4e70085SSatish Balay   PetscInt i;
226f4e70085SSatish Balay 
227f4e70085SSatish Balay   if (*scall == MAT_INITIAL_MATRIX) {
228f4e70085SSatish Balay     *ierr = MatGetSubMatrices(*mat,*n,isrow,iscol,*scall,&lsmat);
229f4e70085SSatish Balay     for (i=0; i<*n; i++) {
230f4e70085SSatish Balay       smat[i] = lsmat[i];
231f4e70085SSatish Balay     }
232f4e70085SSatish Balay     *ierr = PetscFree(lsmat);
233f4e70085SSatish Balay   } else {
234f4e70085SSatish Balay     *ierr = MatGetSubMatrices(*mat,*n,isrow,iscol,*scall,&smat);
235f4e70085SSatish Balay   }
236f4e70085SSatish Balay }
237f4e70085SSatish Balay 
2387d6bfa3bSBarry Smith /*
2397d6bfa3bSBarry Smith     MatDestroyMatrices() is slightly different from C since the
2407d6bfa3bSBarry Smith     Fortran provides the array to hold the submatrix objects,while in C that
2417d6bfa3bSBarry Smith     array is allocated by the MatGetSubmatrices()
2427d6bfa3bSBarry Smith */
2437d6bfa3bSBarry Smith void PETSC_STDCALL matdestroymatrices_(Mat *mat,PetscInt *n,Mat *smat,PetscErrorCode *ierr)
2447d6bfa3bSBarry Smith {
2457d6bfa3bSBarry Smith   PetscInt i;
2467d6bfa3bSBarry Smith 
2477d6bfa3bSBarry Smith   for (i=0; i<*n; i++) {
2487d6bfa3bSBarry Smith     *ierr = MatDestroy(smat[i]);if (*ierr) return;
2497d6bfa3bSBarry Smith   }
2507d6bfa3bSBarry Smith }
2517d6bfa3bSBarry Smith 
252f4e70085SSatish Balay void PETSC_STDCALL matzerorows_(Mat *mat,PetscInt *numRows,PetscInt *rows,PetscScalar *diag,PetscErrorCode *ierr)
253f4e70085SSatish Balay {
254f4e70085SSatish Balay   *ierr = MatZeroRows(*mat,*numRows,rows,*diag);
255f4e70085SSatish Balay }
256f4e70085SSatish Balay 
257f4e70085SSatish Balay void PETSC_STDCALL matzerorowsis_(Mat *mat,IS *is,PetscScalar *diag,PetscErrorCode *ierr)
258f4e70085SSatish Balay {
259f4e70085SSatish Balay   *ierr = MatZeroRowsIS(*mat,*is,*diag);
260f4e70085SSatish Balay }
261f4e70085SSatish Balay 
262f4e70085SSatish Balay void PETSC_STDCALL matzerorowslocal_(Mat *mat,PetscInt *numRows,PetscInt *rows,PetscScalar *diag,PetscErrorCode *ierr)
263f4e70085SSatish Balay {
264f4e70085SSatish Balay   *ierr = MatZeroRowsLocal(*mat,*numRows,rows,*diag);
265f4e70085SSatish Balay }
266f4e70085SSatish Balay 
267f4e70085SSatish Balay void PETSC_STDCALL matzerorowslocalis_(Mat *mat,IS *is,PetscScalar *diag,PetscErrorCode *ierr)
268f4e70085SSatish Balay {
269f4e70085SSatish Balay   *ierr = MatZeroRowsLocalIS(*mat,*is,*diag);
270f4e70085SSatish Balay }
271f4e70085SSatish Balay 
2721eea217eSSatish Balay 
2731eea217eSSatish Balay void PETSC_STDCALL matsetoptionsprefix_(Mat *mat,CHAR prefix PETSC_MIXED_LEN(len),
2741eea217eSSatish Balay                                         PetscErrorCode *ierr PETSC_END_LEN(len))
2751eea217eSSatish Balay {
2761eea217eSSatish Balay   char *t;
2771eea217eSSatish Balay 
2781eea217eSSatish Balay   FIXCHAR(prefix,len,t);
2791eea217eSSatish Balay   *ierr = MatSetOptionsPrefix(*mat,t);
2801eea217eSSatish Balay   FREECHAR(prefix,t);
2811eea217eSSatish Balay }
2821eea217eSSatish Balay 
283812c3f48SMatthew Knepley void PETSC_STDCALL matnullspaceremove_(MatNullSpace *sp,Vec *vec,Vec *out,PetscErrorCode *ierr)
284812c3f48SMatthew Knepley {
285812c3f48SMatthew Knepley   CHKFORTRANNULLOBJECT(out);
286812c3f48SMatthew Knepley   *ierr = MatNullSpaceRemove(*sp,*vec,out);
287812c3f48SMatthew Knepley }
2881eea217eSSatish Balay 
2895ba43861SSatish Balay void PETSC_STDCALL   matgetinfo_(Mat *mat,MatInfoType *flag,MatInfo *info, int *__ierr )
2905ba43861SSatish Balay {
2915ba43861SSatish Balay   *__ierr = MatGetInfo(*mat,*flag,info);
2925ba43861SSatish Balay }
2935ba43861SSatish Balay 
29422688b47SSatish Balay void PETSC_STDCALL   matlufactor_(Mat *mat,IS *row,IS *col, MatFactorInfo *info, int *__ierr )
29522688b47SSatish Balay {
29622688b47SSatish Balay   *__ierr = MatLUFactor(*mat,*row,*col,info);
29722688b47SSatish Balay }
29822688b47SSatish Balay 
29922688b47SSatish Balay void PETSC_STDCALL   matilufactor_(Mat *mat,IS *row,IS *col, MatFactorInfo *info, int *__ierr )
30022688b47SSatish Balay {
30122688b47SSatish Balay   *__ierr = MatILUFactor(*mat,*row,*col,info);
30222688b47SSatish Balay }
30322688b47SSatish Balay 
30422688b47SSatish Balay void PETSC_STDCALL   matlufactorsymbolic_(Mat *fact,Mat *mat,IS *row,IS *col, MatFactorInfo *info, int *__ierr )
30522688b47SSatish Balay {
30622688b47SSatish Balay   *__ierr = MatLUFactorSymbolic(*fact,*mat,*row,*col,info);
30722688b47SSatish Balay }
30822688b47SSatish Balay 
30922688b47SSatish Balay void PETSC_STDCALL   matlufactornumeric_(Mat *fact,Mat *mat, MatFactorInfo *info, int *__ierr )
31022688b47SSatish Balay {
31122688b47SSatish Balay   *__ierr = MatLUFactorNumeric(*fact,*mat,info);
31222688b47SSatish Balay }
31322688b47SSatish Balay 
31422688b47SSatish Balay void PETSC_STDCALL   matcholeskyfactor_(Mat *mat,IS *perm, MatFactorInfo *info, int *__ierr )
31522688b47SSatish Balay {
31622688b47SSatish Balay   *__ierr = MatCholeskyFactor(*mat,*perm,info);
31722688b47SSatish Balay }
31822688b47SSatish Balay 
31922688b47SSatish Balay void PETSC_STDCALL   matcholeskyfactorsymbolic_(Mat *fact,Mat *mat,IS *perm, MatFactorInfo *info, int *__ierr )
32022688b47SSatish Balay {
32122688b47SSatish Balay   *__ierr = MatCholeskyFactorSymbolic(*fact,*mat,*perm,info);
32222688b47SSatish Balay }
32322688b47SSatish Balay 
32422688b47SSatish Balay void PETSC_STDCALL   matcholeskyfactornumeric_(Mat *fact,Mat *mat, MatFactorInfo *info, int *__ierr )
32522688b47SSatish Balay {
32622688b47SSatish Balay   *__ierr = MatCholeskyFactorNumeric(*fact,*mat,info);
32722688b47SSatish Balay }
32822688b47SSatish Balay 
32922688b47SSatish Balay void PETSC_STDCALL   matilufactorsymbolic_(Mat *fact,Mat *mat,IS *row,IS *col, MatFactorInfo *info, int *__ierr )
33022688b47SSatish Balay {
33122688b47SSatish Balay   *__ierr = MatILUFactorSymbolic(*fact,*mat,*row,*col,info);
33222688b47SSatish Balay }
33322688b47SSatish Balay 
33422688b47SSatish Balay void PETSC_STDCALL   maticcfactorsymbolic_(Mat *fact,Mat *mat,IS *perm, MatFactorInfo *info, int *__ierr )
33522688b47SSatish Balay {
33622688b47SSatish Balay   *__ierr = MatICCFactorSymbolic(*fact,*mat,*perm,info);
33722688b47SSatish Balay }
33822688b47SSatish Balay 
33922688b47SSatish Balay void PETSC_STDCALL   maticcfactor_(Mat *mat,IS *row, MatFactorInfo* info, int *__ierr )
34022688b47SSatish Balay {
34122688b47SSatish Balay   *__ierr = MatICCFactor(*mat,*row,info);
34222688b47SSatish Balay }
34322688b47SSatish Balay 
34422688b47SSatish Balay void PETSC_STDCALL   matfactorinfoinitialize_(MatFactorInfo *info, int *__ierr )
34522688b47SSatish Balay {
34622688b47SSatish Balay   *__ierr = MatFactorInfoInitialize(info);
34722688b47SSatish Balay }
34822688b47SSatish Balay 
349f4e70085SSatish Balay EXTERN_C_END
350