xref: /petsc/src/mat/interface/ftn-custom/zmatrixf.c (revision 0905d9aa8368db45f32dac9e6e8322195686cd74)
1b45d2f2cSJed Brown #include <petsc-private/fortranimpl.h>
2c6db04a5SJed Brown #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
1817ede90eSSatish Balay #define matzerorowscolumns_              MATZEROROWSCOLUMNS
1917ede90eSSatish Balay #define matzerorowscolumnsis_            MATZEROROWSCOLUMNSIS
2017ede90eSSatish Balay #define matzerorowsstencil_              MATZEROROWSSTENCIL
21f4e70085SSatish Balay #define matzerorows_                     MATZEROROWS
22f4e70085SSatish Balay #define matzerorowsis_                   MATZEROROWSIS
23f4e70085SSatish Balay #define matzerorowslocal_                MATZEROROWSLOCAL
24f4e70085SSatish Balay #define matzerorowslocalis_              MATZEROROWSLOCALIS
2517ede90eSSatish Balay #define matzerorowscolumnslocal_         MATZEROROWSCOLUMNSLOCAL
2617ede90eSSatish Balay #define matzerorowscolumnslocalis_       MATZEROROWSCOLUMNSLOCALIS
271eea217eSSatish Balay #define matsetoptionsprefix_             MATSETOPTIONSPREFIX
287c54600cSBarry Smith #define matgetvecs_                      MATGETVECS
29c9d5ca86SBarry Smith #define matnullspaceremove_              MATNULLSPACEREMOVE
305ba43861SSatish Balay #define matgetinfo_                      MATGETINFO
3122688b47SSatish Balay #define matlufactor_                     MATLUFACTOR
3222688b47SSatish Balay #define matilufactor_                    MATILUFACTOR
3322688b47SSatish Balay #define matlufactorsymbolic_             MATLUFACTORSYMBOLIC
3422688b47SSatish Balay #define matlufactornumeric_              MATLUFACTORNUMERIC
3522688b47SSatish Balay #define matcholeskyfactor_               MATCHOLESKYFACTOR
3622688b47SSatish Balay #define matcholeskyfactorsymbolic_       MATCHOLESKYFACTORSYMBOLIC
3722688b47SSatish Balay #define matcholeskyfactornumeric_        MATCHOLESKYFACTORNUMERIC
3822688b47SSatish Balay #define matilufactorsymbolic_            MATILUFACTORSYMBOLIC
3922688b47SSatish Balay #define maticcfactorsymbolic_            MATICCFACTORSYMBOLIC
4022688b47SSatish Balay #define maticcfactor_                    MATICCFACTOR
4122688b47SSatish Balay #define matfactorinfoinitialize_         MATFACTORINFOINITIALIZE
42b22b330cSBarry Smith #define matnullspacesetfunction_         MATNULLSPACESETFUNCTION
43*0905d9aaSJed Brown #define matfindnonzerorows_              MATFINDNONZEROROWS
44f4e70085SSatish Balay #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE)
457d6bfa3bSBarry Smith #define matdestroymatrices_              matdestroymatrices_
465dffd610SBarry Smith #define matgetfactor_                    matgetfactor
4735bd34faSBarry Smith #define matfactorgetsolverpackage_       matfactorgetsolverpackage
487c54600cSBarry Smith #define matgetvecs_                      matgetvecs
49f4e70085SSatish Balay #define matgetrowij_                     matgetrowij
50f4e70085SSatish Balay #define matrestorerowij_                 matrestorerowij
51f4e70085SSatish Balay #define matgetrow_                       matgetrow
52f4e70085SSatish Balay #define matrestorerow_                   matrestorerow
53f4e70085SSatish Balay #define matview_                         matview
54f7e310deSShri Abhyankar #define matload_                         matload
55f4e70085SSatish Balay #define matgetarray_                     matgetarray
56f4e70085SSatish Balay #define matrestorearray_                 matrestorearray
57f4e70085SSatish Balay #define matconvert_                      matconvert
58f4e70085SSatish Balay #define matgetsubmatrices_               matgetsubmatrices
5917ede90eSSatish Balay #define matzerorowscolumns_              matzerorowscolumns
6017ede90eSSatish Balay #define matzerorowscolumnsis_            matzerorowscolumnsis
6117ede90eSSatish Balay #define matzerorowsstencil_              matzerorowsstencil
62f4e70085SSatish Balay #define matzerorows_                     matzerorows
63f4e70085SSatish Balay #define matzerorowsis_                   matzerorowsis
64f4e70085SSatish Balay #define matzerorowslocal_                matzerorowslocal
65f4e70085SSatish Balay #define matzerorowslocalis_              matzerorowslocalis
6617ede90eSSatish Balay #define matzerorowscolumnslocal_         matzerorowscolumnslocal
6717ede90eSSatish Balay #define matzerorowscolumnslocalis_       matzerorowscolumnslocalis
681eea217eSSatish Balay #define matsetoptionsprefix_             matsetoptionsprefix
69812c3f48SMatthew Knepley #define matnullspaceremove_              matnullspaceremove
705ba43861SSatish Balay #define matgetinfo_                      matgetinfo
7122688b47SSatish Balay #define matlufactor_                     matlufactor
7222688b47SSatish Balay #define matilufactor_                    matilufactor
7322688b47SSatish Balay #define matlufactorsymbolic_             matlufactorsymbolic
7422688b47SSatish Balay #define matlufactornumeric_              matlufactornumeric
7522688b47SSatish Balay #define matcholeskyfactor_               matcholeskyfactor
7622688b47SSatish Balay #define matcholeskyfactorsymbolic_       matcholeskyfactorsymbolic
7722688b47SSatish Balay #define matcholeskyfactornumeric_        matcholeskyfactornumeric
7822688b47SSatish Balay #define matilufactorsymbolic_            matilufactorsymbolic
7922688b47SSatish Balay #define maticcfactorsymbolic_            maticcfactorsymbolic
8022688b47SSatish Balay #define maticcfactor_                    maticcfactor
8122688b47SSatish Balay #define matfactorinfoinitialize_         matfactorinfoinitialize
82b22b330cSBarry Smith #define matnullspacesetfunction_         matnullspacesetfunction
83*0905d9aaSJed Brown #define matfindnonzerorows_              matfindnonzerorows
84f4e70085SSatish Balay #endif
85f4e70085SSatish Balay 
86f4e70085SSatish Balay EXTERN_C_BEGIN
87f4e70085SSatish Balay 
88b22b330cSBarry Smith static PetscErrorCode ournullfunction(MatNullSpace sp,Vec x,void *ctx)
89b22b330cSBarry Smith {
90b22b330cSBarry Smith   PetscErrorCode ierr = 0;
91b22b330cSBarry Smith   (*(void (PETSC_STDCALL *)(MatNullSpace*,Vec*,void*,PetscErrorCode*))(((PetscObject)sp)->fortran_func_pointers[0]))(&sp,&x,ctx,&ierr);CHKERRQ(ierr);
92b22b330cSBarry Smith   return 0;
93b22b330cSBarry Smith }
94b22b330cSBarry Smith 
95b22b330cSBarry Smith void PETSC_STDCALL  matnullspacesetfunction_(MatNullSpace *sp, PetscErrorCode (*rem)(MatNullSpace,Vec,void*),void *ctx,PetscErrorCode *ierr)
96b22b330cSBarry Smith {
97b22b330cSBarry Smith   PetscObjectAllocateFortranPointers(*sp,1);
98b22b330cSBarry Smith   ((PetscObject)*sp)->fortran_func_pointers[0] = (PetscVoidFunction)rem;
99b22b330cSBarry Smith   *ierr = MatNullSpaceSetFunction(*sp,ournullfunction,ctx);
100b22b330cSBarry Smith }
101b22b330cSBarry Smith 
1027c54600cSBarry Smith void PETSC_STDCALL   matgetvecs_(Mat *mat,Vec *right,Vec *left, int *ierr )
1037c54600cSBarry Smith {
1047c54600cSBarry Smith   CHKFORTRANNULLOBJECT(right);
1057c54600cSBarry Smith   CHKFORTRANNULLOBJECT(left);
1067c54600cSBarry Smith   *ierr = MatGetVecs(*mat,right,left);
1077c54600cSBarry Smith }
1087c54600cSBarry Smith 
109ace3abfcSBarry Smith void PETSC_STDCALL matgetrowij_(Mat *B,PetscInt *shift,PetscBool  *sym,PetscBool  *blockcompressed,PetscInt *n,PetscInt *ia,size_t *iia,
110ace3abfcSBarry Smith                                 PetscInt *ja,size_t *jja,PetscBool  *done,PetscErrorCode *ierr)
111f4e70085SSatish Balay {
112f4e70085SSatish Balay   PetscInt *IA,*JA;
1138f7157efSSatish Balay   *ierr = MatGetRowIJ(*B,*shift,*sym,*blockcompressed,n,&IA,&JA,done);if (*ierr) return;
114f4e70085SSatish Balay   *iia  = PetscIntAddressToFortran(ia,IA);
115f4e70085SSatish Balay   *jja  = PetscIntAddressToFortran(ja,JA);
116f4e70085SSatish Balay }
117f4e70085SSatish Balay 
118ace3abfcSBarry Smith void PETSC_STDCALL matrestorerowij_(Mat *B,PetscInt *shift,PetscBool  *sym,PetscBool  *blockcompressed, PetscInt *n,PetscInt *ia,size_t *iia,
119ace3abfcSBarry Smith                                     PetscInt *ja,size_t *jja,PetscBool  *done,PetscErrorCode *ierr)
120f4e70085SSatish Balay {
121f4e70085SSatish Balay   PetscInt *IA = PetscIntAddressFromFortran(ia,*iia),*JA = PetscIntAddressFromFortran(ja,*jja);
1228f7157efSSatish Balay   *ierr = MatRestoreRowIJ(*B,*shift,*sym,*blockcompressed,n,&IA,&JA,done);
123f4e70085SSatish Balay }
124f4e70085SSatish Balay 
125f4e70085SSatish Balay /*
126f4e70085SSatish Balay    This is a poor way of storing the column and value pointers
127f4e70085SSatish Balay   generated by MatGetRow() to be returned with MatRestoreRow()
128f4e70085SSatish Balay   but there is not natural,good place else to store them. Hence
129f4e70085SSatish Balay   Fortran programmers can only have one outstanding MatGetRows()
130f4e70085SSatish Balay   at a time.
131f4e70085SSatish Balay */
132f4e70085SSatish Balay static PetscErrorCode    matgetrowactive = 0;
133f4e70085SSatish Balay static const PetscInt    *my_ocols = 0;
134f4e70085SSatish Balay static const PetscScalar *my_ovals = 0;
135f4e70085SSatish Balay 
136f4e70085SSatish Balay void PETSC_STDCALL matgetrow_(Mat *mat,PetscInt *row,PetscInt *ncols,PetscInt *cols,PetscScalar *vals,PetscErrorCode *ierr)
137f4e70085SSatish Balay {
138f4e70085SSatish Balay   const PetscInt    **oocols = &my_ocols;
139f4e70085SSatish Balay   const PetscScalar **oovals = &my_ovals;
140f4e70085SSatish Balay 
141f4e70085SSatish Balay   if (matgetrowactive) {
142d736bfebSBarry Smith     PetscError(PETSC_COMM_SELF,__LINE__,"MatGetRow_Fortran",__FILE__,__SDIR__,PETSC_ERR_ARG_WRONGSTATE,PETSC_ERROR_INITIAL,
143f4e70085SSatish Balay                "Cannot have two MatGetRow() active simultaneously\n\
144f4e70085SSatish Balay                call MatRestoreRow() before calling MatGetRow() a second time");
145f4e70085SSatish Balay      *ierr = 1;
146f4e70085SSatish Balay      return;
147f4e70085SSatish Balay   }
148f4e70085SSatish Balay 
149f4e70085SSatish Balay   CHKFORTRANNULLINTEGER(cols); if (!cols) oocols = PETSC_NULL;
150f4e70085SSatish Balay   CHKFORTRANNULLSCALAR(vals);  if (!vals) oovals = PETSC_NULL;
151f4e70085SSatish Balay 
152f4e70085SSatish Balay   *ierr = MatGetRow(*mat,*row,ncols,oocols,oovals);
153f4e70085SSatish Balay   if (*ierr) return;
154f4e70085SSatish Balay 
155f4e70085SSatish Balay   if (oocols) { *ierr = PetscMemcpy(cols,my_ocols,(*ncols)*sizeof(PetscInt)); if (*ierr) return;}
156f4e70085SSatish Balay   if (oovals) { *ierr = PetscMemcpy(vals,my_ovals,(*ncols)*sizeof(PetscScalar)); if (*ierr) return; }
157f4e70085SSatish Balay   matgetrowactive = 1;
158f4e70085SSatish Balay }
159f4e70085SSatish Balay 
160f4e70085SSatish Balay void PETSC_STDCALL matrestorerow_(Mat *mat,PetscInt *row,PetscInt *ncols,PetscInt *cols,PetscScalar *vals,PetscErrorCode *ierr)
161f4e70085SSatish Balay {
162f4e70085SSatish Balay   const PetscInt         **oocols = &my_ocols;
163f4e70085SSatish Balay   const PetscScalar **oovals = &my_ovals;
164f4e70085SSatish Balay   if (!matgetrowactive) {
165d736bfebSBarry Smith     PetscError(PETSC_COMM_SELF,__LINE__,"MatRestoreRow_Fortran",__FILE__,__SDIR__,PETSC_ERR_ARG_WRONGSTATE,PETSC_ERROR_INITIAL,
166f4e70085SSatish Balay                "Must call MatGetRow() first");
167f4e70085SSatish Balay      *ierr = 1;
168f4e70085SSatish Balay      return;
169f4e70085SSatish Balay   }
170f4e70085SSatish Balay   CHKFORTRANNULLINTEGER(cols); if (!cols) oocols = PETSC_NULL;
171f4e70085SSatish Balay   CHKFORTRANNULLSCALAR(vals);  if (!vals) oovals = PETSC_NULL;
172f4e70085SSatish Balay 
173f4e70085SSatish Balay   *ierr = MatRestoreRow(*mat,*row,ncols,oocols,oovals);
174f4e70085SSatish Balay   matgetrowactive = 0;
175f4e70085SSatish Balay }
176f4e70085SSatish Balay 
177f4e70085SSatish Balay void PETSC_STDCALL matview_(Mat *mat,PetscViewer *vin,PetscErrorCode *ierr)
178f4e70085SSatish Balay {
179f4e70085SSatish Balay   PetscViewer v;
180f4e70085SSatish Balay   PetscPatchDefaultViewers_Fortran(vin,v);
181f4e70085SSatish Balay   *ierr = MatView(*mat,v);
182f4e70085SSatish Balay }
183f4e70085SSatish Balay 
184112444f4SShri Abhyankar void PETSC_STDCALL matload_(Mat *mat,PetscViewer *vin,PetscErrorCode *ierr)
185f7e310deSShri Abhyankar {
186f7e310deSShri Abhyankar   PetscViewer v;
187f7e310deSShri Abhyankar   PetscPatchDefaultViewers_Fortran(vin,v);
188112444f4SShri Abhyankar   *ierr = MatLoad(*mat,v);
189f7e310deSShri Abhyankar }
190f7e310deSShri Abhyankar 
191f4e70085SSatish Balay void PETSC_STDCALL matgetarray_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr)
192f4e70085SSatish Balay {
193f4e70085SSatish Balay   PetscScalar *mm;
194f4e70085SSatish Balay   PetscInt    m,n;
195f4e70085SSatish Balay 
196f4e70085SSatish Balay   *ierr = MatGetArray(*mat,&mm); if (*ierr) return;
197f4e70085SSatish Balay   *ierr = MatGetSize(*mat,&m,&n);  if (*ierr) return;
198f91d1997SBarry Smith   *ierr = PetscScalarAddressToFortran((PetscObject)*mat,1,fa,mm,m*n,ia); if (*ierr) return;
199f4e70085SSatish Balay }
200f4e70085SSatish Balay 
201f4e70085SSatish Balay void PETSC_STDCALL matrestorearray_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr)
202f4e70085SSatish Balay {
203f4e70085SSatish Balay   PetscScalar          *lx;
204f4e70085SSatish Balay   PetscInt                  m,n;
205f4e70085SSatish Balay 
206f4e70085SSatish Balay   *ierr = MatGetSize(*mat,&m,&n); if (*ierr) return;
207f4e70085SSatish Balay   *ierr = PetscScalarAddressFromFortran((PetscObject)*mat,fa,*ia,m*n,&lx);if (*ierr) return;
208f4e70085SSatish Balay   *ierr = MatRestoreArray(*mat,&lx);if (*ierr) return;
209f4e70085SSatish Balay }
210f4e70085SSatish Balay 
21135bd34faSBarry Smith void PETSC_STDCALL matfactorgetsolverpackage_(Mat *mat,CHAR name PETSC_MIXED_LEN(len),PetscErrorCode *ierr PETSC_END_LEN(len))
21235bd34faSBarry Smith {
21335bd34faSBarry Smith   const char *tname;
21435bd34faSBarry Smith 
21535bd34faSBarry Smith   *ierr = MatFactorGetSolverPackage(*mat,&tname);if (*ierr) return;
21635bd34faSBarry Smith   if (name != PETSC_NULL_CHARACTER_Fortran) {
21735bd34faSBarry Smith     *ierr = PetscStrncpy(name,tname,len);if (*ierr) return;
21835bd34faSBarry Smith   }
21935bd34faSBarry Smith   FIXRETURNCHAR(PETSC_TRUE,name,len);
22035bd34faSBarry Smith }
22135bd34faSBarry Smith 
2229be81726SHong Zhang void PETSC_STDCALL matgetfactor_(Mat *mat,CHAR outtype PETSC_MIXED_LEN(len),MatFactorType *ftype,Mat *M,PetscErrorCode *ierr PETSC_END_LEN(len))
2235dffd610SBarry Smith {
2245dffd610SBarry Smith   char *t;
2255dffd610SBarry Smith   FIXCHAR(outtype,len,t);
2269be81726SHong Zhang   *ierr = MatGetFactor(*mat,t,*ftype,M);
2275dffd610SBarry Smith   FREECHAR(outtype,t);
2285dffd610SBarry Smith }
2295dffd610SBarry Smith 
230f4e70085SSatish Balay void PETSC_STDCALL matconvert_(Mat *mat,CHAR outtype PETSC_MIXED_LEN(len),MatReuse *reuse,Mat *M,PetscErrorCode *ierr PETSC_END_LEN(len))
231f4e70085SSatish Balay {
232f4e70085SSatish Balay   char *t;
233f4e70085SSatish Balay   FIXCHAR(outtype,len,t);
234f4e70085SSatish Balay   *ierr = MatConvert(*mat,t,*reuse,M);
235f4e70085SSatish Balay   FREECHAR(outtype,t);
236f4e70085SSatish Balay }
237f4e70085SSatish Balay 
238f4e70085SSatish Balay /*
239f4e70085SSatish Balay     MatGetSubmatrices() is slightly different from C since the
240f4e70085SSatish Balay     Fortran provides the array to hold the submatrix objects,while in C that
241f4e70085SSatish Balay     array is allocated by the MatGetSubmatrices()
242f4e70085SSatish Balay */
243f4e70085SSatish Balay void PETSC_STDCALL matgetsubmatrices_(Mat *mat,PetscInt *n,IS *isrow,IS *iscol,MatReuse *scall,Mat *smat,PetscErrorCode *ierr)
244f4e70085SSatish Balay {
245f4e70085SSatish Balay   Mat *lsmat;
246f4e70085SSatish Balay   PetscInt i;
247f4e70085SSatish Balay 
248f4e70085SSatish Balay   if (*scall == MAT_INITIAL_MATRIX) {
249f4e70085SSatish Balay     *ierr = MatGetSubMatrices(*mat,*n,isrow,iscol,*scall,&lsmat);
250f4e70085SSatish Balay     for (i=0; i<*n; i++) {
251f4e70085SSatish Balay       smat[i] = lsmat[i];
252f4e70085SSatish Balay     }
253f4e70085SSatish Balay     *ierr = PetscFree(lsmat);
254f4e70085SSatish Balay   } else {
255f4e70085SSatish Balay     *ierr = MatGetSubMatrices(*mat,*n,isrow,iscol,*scall,&smat);
256f4e70085SSatish Balay   }
257f4e70085SSatish Balay }
258f4e70085SSatish Balay 
2597d6bfa3bSBarry Smith /*
2607d6bfa3bSBarry Smith     MatDestroyMatrices() is slightly different from C since the
2617d6bfa3bSBarry Smith     Fortran provides the array to hold the submatrix objects,while in C that
2627d6bfa3bSBarry Smith     array is allocated by the MatGetSubmatrices()
2637d6bfa3bSBarry Smith */
2647d6bfa3bSBarry Smith void PETSC_STDCALL matdestroymatrices_(Mat *mat,PetscInt *n,Mat *smat,PetscErrorCode *ierr)
2657d6bfa3bSBarry Smith {
2667d6bfa3bSBarry Smith   PetscInt i;
2677d6bfa3bSBarry Smith 
2687d6bfa3bSBarry Smith   for (i=0; i<*n; i++) {
2696bf464f9SBarry Smith     *ierr = MatDestroy(&smat[i]);if (*ierr) return;
2707d6bfa3bSBarry Smith   }
2717d6bfa3bSBarry Smith }
2727d6bfa3bSBarry Smith 
27317ede90eSSatish Balay void PETSC_STDCALL matzerorowscolumns_(Mat *mat,PetscInt *numRows,PetscInt *rows,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr)
27417ede90eSSatish Balay {
27517ede90eSSatish Balay   CHKFORTRANNULLOBJECTDEREFERENCE(x);
27617ede90eSSatish Balay   CHKFORTRANNULLOBJECTDEREFERENCE(b);
27717ede90eSSatish Balay   *ierr = MatZeroRowsColumns(*mat,*numRows,rows,*diag,*x,*b);
27817ede90eSSatish Balay }
27917ede90eSSatish Balay 
28017ede90eSSatish Balay void PETSC_STDCALL matzerorowscolumnsis_(Mat *mat,IS *is,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr)
28117ede90eSSatish Balay {
28217ede90eSSatish Balay   CHKFORTRANNULLOBJECTDEREFERENCE(x);
28317ede90eSSatish Balay   CHKFORTRANNULLOBJECTDEREFERENCE(b);
28417ede90eSSatish Balay   *ierr = MatZeroRowsColumnsIS(*mat,*is,*diag,*x,*b);
28517ede90eSSatish Balay }
28617ede90eSSatish Balay 
28717ede90eSSatish Balay void PETSC_STDCALL matzerorowsstencil_(Mat *mat,PetscInt *numRows,MatStencil *rows,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr)
28817ede90eSSatish Balay {
28917ede90eSSatish Balay   CHKFORTRANNULLOBJECTDEREFERENCE(x);
29017ede90eSSatish Balay   CHKFORTRANNULLOBJECTDEREFERENCE(b);
29117ede90eSSatish Balay   *ierr = MatZeroRowsStencil(*mat,*numRows,rows,*diag,*x,*b);
29217ede90eSSatish Balay }
29317ede90eSSatish Balay 
2942b40b63fSBarry Smith void PETSC_STDCALL matzerorows_(Mat *mat,PetscInt *numRows,PetscInt *rows,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr)
295f4e70085SSatish Balay {
2962b40b63fSBarry Smith   CHKFORTRANNULLOBJECTDEREFERENCE(x);
2972b40b63fSBarry Smith   CHKFORTRANNULLOBJECTDEREFERENCE(b);
2982b40b63fSBarry Smith   *ierr = MatZeroRows(*mat,*numRows,rows,*diag,*x,*b);
299f4e70085SSatish Balay }
300f4e70085SSatish Balay 
3012b40b63fSBarry Smith void PETSC_STDCALL matzerorowsis_(Mat *mat,IS *is,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr)
302f4e70085SSatish Balay {
3032b40b63fSBarry Smith   CHKFORTRANNULLOBJECTDEREFERENCE(x);
3042b40b63fSBarry Smith   CHKFORTRANNULLOBJECTDEREFERENCE(b);
3052b40b63fSBarry Smith   *ierr = MatZeroRowsIS(*mat,*is,*diag,*x,*b);
306f4e70085SSatish Balay }
307f4e70085SSatish Balay 
3082b40b63fSBarry Smith void PETSC_STDCALL matzerorowslocal_(Mat *mat,PetscInt *numRows,PetscInt *rows,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr)
309f4e70085SSatish Balay {
3102b40b63fSBarry Smith   CHKFORTRANNULLOBJECTDEREFERENCE(x);
3112b40b63fSBarry Smith   CHKFORTRANNULLOBJECTDEREFERENCE(b);
3122b40b63fSBarry Smith   *ierr = MatZeroRowsLocal(*mat,*numRows,rows,*diag,*x,*b);
313f4e70085SSatish Balay }
314f4e70085SSatish Balay 
3152b40b63fSBarry Smith void PETSC_STDCALL matzerorowslocalis_(Mat *mat,IS *is,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr)
316f4e70085SSatish Balay {
3172b40b63fSBarry Smith   CHKFORTRANNULLOBJECTDEREFERENCE(x);
3182b40b63fSBarry Smith   CHKFORTRANNULLOBJECTDEREFERENCE(b);
3192b40b63fSBarry Smith   *ierr = MatZeroRowsLocalIS(*mat,*is,*diag,*x,*b);
320f4e70085SSatish Balay }
321f4e70085SSatish Balay 
32217ede90eSSatish Balay void PETSC_STDCALL matzerorowscolumnslocal_(Mat *mat,PetscInt *numRows,PetscInt *rows,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr)
32317ede90eSSatish Balay {
32417ede90eSSatish Balay   CHKFORTRANNULLOBJECTDEREFERENCE(x);
32517ede90eSSatish Balay   CHKFORTRANNULLOBJECTDEREFERENCE(b);
32617ede90eSSatish Balay   *ierr = MatZeroRowsColumnsLocal(*mat,*numRows,rows,*diag,*x,*b);
32717ede90eSSatish Balay }
32817ede90eSSatish Balay 
32917ede90eSSatish Balay void PETSC_STDCALL matzerorowscolumnslocalis_(Mat *mat,IS *is,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr)
33017ede90eSSatish Balay {
33117ede90eSSatish Balay   CHKFORTRANNULLOBJECTDEREFERENCE(x);
33217ede90eSSatish Balay   CHKFORTRANNULLOBJECTDEREFERENCE(b);
33317ede90eSSatish Balay   *ierr = MatZeroRowsColumnsLocalIS(*mat,*is,*diag,*x,*b);
33417ede90eSSatish Balay }
3351eea217eSSatish Balay 
3362b40b63fSBarry Smith void PETSC_STDCALL matsetoptionsprefix_(Mat *mat,CHAR prefix PETSC_MIXED_LEN(len),PetscErrorCode *ierr PETSC_END_LEN(len))
3371eea217eSSatish Balay {
3381eea217eSSatish Balay   char *t;
3391eea217eSSatish Balay 
3401eea217eSSatish Balay   FIXCHAR(prefix,len,t);
3411eea217eSSatish Balay   *ierr = MatSetOptionsPrefix(*mat,t);
3421eea217eSSatish Balay   FREECHAR(prefix,t);
3431eea217eSSatish Balay }
3441eea217eSSatish Balay 
345812c3f48SMatthew Knepley void PETSC_STDCALL matnullspaceremove_(MatNullSpace *sp,Vec *vec,Vec *out,PetscErrorCode *ierr)
346812c3f48SMatthew Knepley {
347812c3f48SMatthew Knepley   CHKFORTRANNULLOBJECT(out);
348812c3f48SMatthew Knepley   *ierr = MatNullSpaceRemove(*sp,*vec,out);
349812c3f48SMatthew Knepley }
3501eea217eSSatish Balay 
3515ba43861SSatish Balay void PETSC_STDCALL   matgetinfo_(Mat *mat,MatInfoType *flag,MatInfo *info, int *__ierr )
3525ba43861SSatish Balay {
3535ba43861SSatish Balay   *__ierr = MatGetInfo(*mat,*flag,info);
3545ba43861SSatish Balay }
3555ba43861SSatish Balay 
35622688b47SSatish Balay void PETSC_STDCALL   matlufactor_(Mat *mat,IS *row,IS *col, MatFactorInfo *info, int *__ierr )
35722688b47SSatish Balay {
35822688b47SSatish Balay   *__ierr = MatLUFactor(*mat,*row,*col,info);
35922688b47SSatish Balay }
36022688b47SSatish Balay 
36122688b47SSatish Balay void PETSC_STDCALL   matilufactor_(Mat *mat,IS *row,IS *col, MatFactorInfo *info, int *__ierr )
36222688b47SSatish Balay {
36322688b47SSatish Balay   *__ierr = MatILUFactor(*mat,*row,*col,info);
36422688b47SSatish Balay }
36522688b47SSatish Balay 
36622688b47SSatish Balay void PETSC_STDCALL   matlufactorsymbolic_(Mat *fact,Mat *mat,IS *row,IS *col, MatFactorInfo *info, int *__ierr )
36722688b47SSatish Balay {
36822688b47SSatish Balay   *__ierr = MatLUFactorSymbolic(*fact,*mat,*row,*col,info);
36922688b47SSatish Balay }
37022688b47SSatish Balay 
37122688b47SSatish Balay void PETSC_STDCALL   matlufactornumeric_(Mat *fact,Mat *mat, MatFactorInfo *info, int *__ierr )
37222688b47SSatish Balay {
37322688b47SSatish Balay   *__ierr = MatLUFactorNumeric(*fact,*mat,info);
37422688b47SSatish Balay }
37522688b47SSatish Balay 
37622688b47SSatish Balay void PETSC_STDCALL   matcholeskyfactor_(Mat *mat,IS *perm, MatFactorInfo *info, int *__ierr )
37722688b47SSatish Balay {
37822688b47SSatish Balay   *__ierr = MatCholeskyFactor(*mat,*perm,info);
37922688b47SSatish Balay }
38022688b47SSatish Balay 
38122688b47SSatish Balay void PETSC_STDCALL   matcholeskyfactorsymbolic_(Mat *fact,Mat *mat,IS *perm, MatFactorInfo *info, int *__ierr )
38222688b47SSatish Balay {
38322688b47SSatish Balay   *__ierr = MatCholeskyFactorSymbolic(*fact,*mat,*perm,info);
38422688b47SSatish Balay }
38522688b47SSatish Balay 
38622688b47SSatish Balay void PETSC_STDCALL   matcholeskyfactornumeric_(Mat *fact,Mat *mat, MatFactorInfo *info, int *__ierr )
38722688b47SSatish Balay {
38822688b47SSatish Balay   *__ierr = MatCholeskyFactorNumeric(*fact,*mat,info);
38922688b47SSatish Balay }
39022688b47SSatish Balay 
39122688b47SSatish Balay void PETSC_STDCALL   matilufactorsymbolic_(Mat *fact,Mat *mat,IS *row,IS *col, MatFactorInfo *info, int *__ierr )
39222688b47SSatish Balay {
39322688b47SSatish Balay   *__ierr = MatILUFactorSymbolic(*fact,*mat,*row,*col,info);
39422688b47SSatish Balay }
39522688b47SSatish Balay 
39622688b47SSatish Balay void PETSC_STDCALL   maticcfactorsymbolic_(Mat *fact,Mat *mat,IS *perm, MatFactorInfo *info, int *__ierr )
39722688b47SSatish Balay {
39822688b47SSatish Balay   *__ierr = MatICCFactorSymbolic(*fact,*mat,*perm,info);
39922688b47SSatish Balay }
40022688b47SSatish Balay 
40122688b47SSatish Balay void PETSC_STDCALL   maticcfactor_(Mat *mat,IS *row, MatFactorInfo* info, int *__ierr )
40222688b47SSatish Balay {
40322688b47SSatish Balay   *__ierr = MatICCFactor(*mat,*row,info);
40422688b47SSatish Balay }
40522688b47SSatish Balay 
40622688b47SSatish Balay void PETSC_STDCALL   matfactorinfoinitialize_(MatFactorInfo *info, int *__ierr )
40722688b47SSatish Balay {
40822688b47SSatish Balay   *__ierr = MatFactorInfoInitialize(info);
40922688b47SSatish Balay }
41022688b47SSatish Balay 
411f4e70085SSatish Balay EXTERN_C_END
412