xref: /petsc/src/mat/interface/ftn-custom/zmatrixf.c (revision d25a37e130ea49ebd07f0cfbda24aaa07a3ed83a)
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
21*d25a37e1SJed Brown #define matzerorowscolumnsstencil_       MATZEROROWSCOLUMNSSTENCIL
22f4e70085SSatish Balay #define matzerorows_                     MATZEROROWS
23f4e70085SSatish Balay #define matzerorowsis_                   MATZEROROWSIS
24f4e70085SSatish Balay #define matzerorowslocal_                MATZEROROWSLOCAL
25f4e70085SSatish Balay #define matzerorowslocalis_              MATZEROROWSLOCALIS
2617ede90eSSatish Balay #define matzerorowscolumnslocal_         MATZEROROWSCOLUMNSLOCAL
2717ede90eSSatish Balay #define matzerorowscolumnslocalis_       MATZEROROWSCOLUMNSLOCALIS
281eea217eSSatish Balay #define matsetoptionsprefix_             MATSETOPTIONSPREFIX
297c54600cSBarry Smith #define matgetvecs_                      MATGETVECS
30c9d5ca86SBarry Smith #define matnullspaceremove_              MATNULLSPACEREMOVE
315ba43861SSatish Balay #define matgetinfo_                      MATGETINFO
3222688b47SSatish Balay #define matlufactor_                     MATLUFACTOR
3322688b47SSatish Balay #define matilufactor_                    MATILUFACTOR
3422688b47SSatish Balay #define matlufactorsymbolic_             MATLUFACTORSYMBOLIC
3522688b47SSatish Balay #define matlufactornumeric_              MATLUFACTORNUMERIC
3622688b47SSatish Balay #define matcholeskyfactor_               MATCHOLESKYFACTOR
3722688b47SSatish Balay #define matcholeskyfactorsymbolic_       MATCHOLESKYFACTORSYMBOLIC
3822688b47SSatish Balay #define matcholeskyfactornumeric_        MATCHOLESKYFACTORNUMERIC
3922688b47SSatish Balay #define matilufactorsymbolic_            MATILUFACTORSYMBOLIC
4022688b47SSatish Balay #define maticcfactorsymbolic_            MATICCFACTORSYMBOLIC
4122688b47SSatish Balay #define maticcfactor_                    MATICCFACTOR
4222688b47SSatish Balay #define matfactorinfoinitialize_         MATFACTORINFOINITIALIZE
43b22b330cSBarry Smith #define matnullspacesetfunction_         MATNULLSPACESETFUNCTION
440905d9aaSJed Brown #define matfindnonzerorows_              MATFINDNONZEROROWS
45f4e70085SSatish Balay #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE)
467d6bfa3bSBarry Smith #define matdestroymatrices_              matdestroymatrices_
475dffd610SBarry Smith #define matgetfactor_                    matgetfactor
4835bd34faSBarry Smith #define matfactorgetsolverpackage_       matfactorgetsolverpackage
497c54600cSBarry Smith #define matgetvecs_                      matgetvecs
50f4e70085SSatish Balay #define matgetrowij_                     matgetrowij
51f4e70085SSatish Balay #define matrestorerowij_                 matrestorerowij
52f4e70085SSatish Balay #define matgetrow_                       matgetrow
53f4e70085SSatish Balay #define matrestorerow_                   matrestorerow
54f4e70085SSatish Balay #define matview_                         matview
55f7e310deSShri Abhyankar #define matload_                         matload
56f4e70085SSatish Balay #define matgetarray_                     matgetarray
57f4e70085SSatish Balay #define matrestorearray_                 matrestorearray
58f4e70085SSatish Balay #define matconvert_                      matconvert
59f4e70085SSatish Balay #define matgetsubmatrices_               matgetsubmatrices
6017ede90eSSatish Balay #define matzerorowscolumns_              matzerorowscolumns
6117ede90eSSatish Balay #define matzerorowscolumnsis_            matzerorowscolumnsis
6217ede90eSSatish Balay #define matzerorowsstencil_              matzerorowsstencil
63*d25a37e1SJed Brown #define matzerorowscolumnsstencil_       matzerorowscolumnsstencil
64f4e70085SSatish Balay #define matzerorows_                     matzerorows
65f4e70085SSatish Balay #define matzerorowsis_                   matzerorowsis
66f4e70085SSatish Balay #define matzerorowslocal_                matzerorowslocal
67f4e70085SSatish Balay #define matzerorowslocalis_              matzerorowslocalis
6817ede90eSSatish Balay #define matzerorowscolumnslocal_         matzerorowscolumnslocal
6917ede90eSSatish Balay #define matzerorowscolumnslocalis_       matzerorowscolumnslocalis
701eea217eSSatish Balay #define matsetoptionsprefix_             matsetoptionsprefix
71812c3f48SMatthew Knepley #define matnullspaceremove_              matnullspaceremove
725ba43861SSatish Balay #define matgetinfo_                      matgetinfo
7322688b47SSatish Balay #define matlufactor_                     matlufactor
7422688b47SSatish Balay #define matilufactor_                    matilufactor
7522688b47SSatish Balay #define matlufactorsymbolic_             matlufactorsymbolic
7622688b47SSatish Balay #define matlufactornumeric_              matlufactornumeric
7722688b47SSatish Balay #define matcholeskyfactor_               matcholeskyfactor
7822688b47SSatish Balay #define matcholeskyfactorsymbolic_       matcholeskyfactorsymbolic
7922688b47SSatish Balay #define matcholeskyfactornumeric_        matcholeskyfactornumeric
8022688b47SSatish Balay #define matilufactorsymbolic_            matilufactorsymbolic
8122688b47SSatish Balay #define maticcfactorsymbolic_            maticcfactorsymbolic
8222688b47SSatish Balay #define maticcfactor_                    maticcfactor
8322688b47SSatish Balay #define matfactorinfoinitialize_         matfactorinfoinitialize
84b22b330cSBarry Smith #define matnullspacesetfunction_         matnullspacesetfunction
850905d9aaSJed Brown #define matfindnonzerorows_              matfindnonzerorows
86f4e70085SSatish Balay #endif
87f4e70085SSatish Balay 
88f4e70085SSatish Balay EXTERN_C_BEGIN
89f4e70085SSatish Balay 
90b22b330cSBarry Smith static PetscErrorCode ournullfunction(MatNullSpace sp,Vec x,void *ctx)
91b22b330cSBarry Smith {
92b22b330cSBarry Smith   PetscErrorCode ierr = 0;
93b22b330cSBarry Smith   (*(void (PETSC_STDCALL *)(MatNullSpace*,Vec*,void*,PetscErrorCode*))(((PetscObject)sp)->fortran_func_pointers[0]))(&sp,&x,ctx,&ierr);CHKERRQ(ierr);
94b22b330cSBarry Smith   return 0;
95b22b330cSBarry Smith }
96b22b330cSBarry Smith 
97b22b330cSBarry Smith void PETSC_STDCALL  matnullspacesetfunction_(MatNullSpace *sp, PetscErrorCode (*rem)(MatNullSpace,Vec,void*),void *ctx,PetscErrorCode *ierr)
98b22b330cSBarry Smith {
99b22b330cSBarry Smith   PetscObjectAllocateFortranPointers(*sp,1);
100b22b330cSBarry Smith   ((PetscObject)*sp)->fortran_func_pointers[0] = (PetscVoidFunction)rem;
101b22b330cSBarry Smith   *ierr = MatNullSpaceSetFunction(*sp,ournullfunction,ctx);
102b22b330cSBarry Smith }
103b22b330cSBarry Smith 
1047c54600cSBarry Smith void PETSC_STDCALL   matgetvecs_(Mat *mat,Vec *right,Vec *left, int *ierr )
1057c54600cSBarry Smith {
1067c54600cSBarry Smith   CHKFORTRANNULLOBJECT(right);
1077c54600cSBarry Smith   CHKFORTRANNULLOBJECT(left);
1087c54600cSBarry Smith   *ierr = MatGetVecs(*mat,right,left);
1097c54600cSBarry Smith }
1107c54600cSBarry Smith 
111ace3abfcSBarry Smith void PETSC_STDCALL matgetrowij_(Mat *B,PetscInt *shift,PetscBool  *sym,PetscBool  *blockcompressed,PetscInt *n,PetscInt *ia,size_t *iia,
112ace3abfcSBarry Smith                                 PetscInt *ja,size_t *jja,PetscBool  *done,PetscErrorCode *ierr)
113f4e70085SSatish Balay {
114f4e70085SSatish Balay   PetscInt *IA,*JA;
1158f7157efSSatish Balay   *ierr = MatGetRowIJ(*B,*shift,*sym,*blockcompressed,n,&IA,&JA,done);if (*ierr) return;
116f4e70085SSatish Balay   *iia  = PetscIntAddressToFortran(ia,IA);
117f4e70085SSatish Balay   *jja  = PetscIntAddressToFortran(ja,JA);
118f4e70085SSatish Balay }
119f4e70085SSatish Balay 
120ace3abfcSBarry Smith void PETSC_STDCALL matrestorerowij_(Mat *B,PetscInt *shift,PetscBool  *sym,PetscBool  *blockcompressed, PetscInt *n,PetscInt *ia,size_t *iia,
121ace3abfcSBarry Smith                                     PetscInt *ja,size_t *jja,PetscBool  *done,PetscErrorCode *ierr)
122f4e70085SSatish Balay {
123f4e70085SSatish Balay   PetscInt *IA = PetscIntAddressFromFortran(ia,*iia),*JA = PetscIntAddressFromFortran(ja,*jja);
1248f7157efSSatish Balay   *ierr = MatRestoreRowIJ(*B,*shift,*sym,*blockcompressed,n,&IA,&JA,done);
125f4e70085SSatish Balay }
126f4e70085SSatish Balay 
127f4e70085SSatish Balay /*
128f4e70085SSatish Balay    This is a poor way of storing the column and value pointers
129f4e70085SSatish Balay   generated by MatGetRow() to be returned with MatRestoreRow()
130f4e70085SSatish Balay   but there is not natural,good place else to store them. Hence
131f4e70085SSatish Balay   Fortran programmers can only have one outstanding MatGetRows()
132f4e70085SSatish Balay   at a time.
133f4e70085SSatish Balay */
134f4e70085SSatish Balay static PetscErrorCode    matgetrowactive = 0;
135f4e70085SSatish Balay static const PetscInt    *my_ocols = 0;
136f4e70085SSatish Balay static const PetscScalar *my_ovals = 0;
137f4e70085SSatish Balay 
138f4e70085SSatish Balay void PETSC_STDCALL matgetrow_(Mat *mat,PetscInt *row,PetscInt *ncols,PetscInt *cols,PetscScalar *vals,PetscErrorCode *ierr)
139f4e70085SSatish Balay {
140f4e70085SSatish Balay   const PetscInt    **oocols = &my_ocols;
141f4e70085SSatish Balay   const PetscScalar **oovals = &my_ovals;
142f4e70085SSatish Balay 
143f4e70085SSatish Balay   if (matgetrowactive) {
144d736bfebSBarry Smith     PetscError(PETSC_COMM_SELF,__LINE__,"MatGetRow_Fortran",__FILE__,__SDIR__,PETSC_ERR_ARG_WRONGSTATE,PETSC_ERROR_INITIAL,
145f4e70085SSatish Balay                "Cannot have two MatGetRow() active simultaneously\n\
146f4e70085SSatish Balay                call MatRestoreRow() before calling MatGetRow() a second time");
147f4e70085SSatish Balay      *ierr = 1;
148f4e70085SSatish Balay      return;
149f4e70085SSatish Balay   }
150f4e70085SSatish Balay 
151f4e70085SSatish Balay   CHKFORTRANNULLINTEGER(cols); if (!cols) oocols = PETSC_NULL;
152f4e70085SSatish Balay   CHKFORTRANNULLSCALAR(vals);  if (!vals) oovals = PETSC_NULL;
153f4e70085SSatish Balay 
154f4e70085SSatish Balay   *ierr = MatGetRow(*mat,*row,ncols,oocols,oovals);
155f4e70085SSatish Balay   if (*ierr) return;
156f4e70085SSatish Balay 
157f4e70085SSatish Balay   if (oocols) { *ierr = PetscMemcpy(cols,my_ocols,(*ncols)*sizeof(PetscInt)); if (*ierr) return;}
158f4e70085SSatish Balay   if (oovals) { *ierr = PetscMemcpy(vals,my_ovals,(*ncols)*sizeof(PetscScalar)); if (*ierr) return; }
159f4e70085SSatish Balay   matgetrowactive = 1;
160f4e70085SSatish Balay }
161f4e70085SSatish Balay 
162f4e70085SSatish Balay void PETSC_STDCALL matrestorerow_(Mat *mat,PetscInt *row,PetscInt *ncols,PetscInt *cols,PetscScalar *vals,PetscErrorCode *ierr)
163f4e70085SSatish Balay {
164f4e70085SSatish Balay   const PetscInt         **oocols = &my_ocols;
165f4e70085SSatish Balay   const PetscScalar **oovals = &my_ovals;
166f4e70085SSatish Balay   if (!matgetrowactive) {
167d736bfebSBarry Smith     PetscError(PETSC_COMM_SELF,__LINE__,"MatRestoreRow_Fortran",__FILE__,__SDIR__,PETSC_ERR_ARG_WRONGSTATE,PETSC_ERROR_INITIAL,
168f4e70085SSatish Balay                "Must call MatGetRow() first");
169f4e70085SSatish Balay      *ierr = 1;
170f4e70085SSatish Balay      return;
171f4e70085SSatish Balay   }
172f4e70085SSatish Balay   CHKFORTRANNULLINTEGER(cols); if (!cols) oocols = PETSC_NULL;
173f4e70085SSatish Balay   CHKFORTRANNULLSCALAR(vals);  if (!vals) oovals = PETSC_NULL;
174f4e70085SSatish Balay 
175f4e70085SSatish Balay   *ierr = MatRestoreRow(*mat,*row,ncols,oocols,oovals);
176f4e70085SSatish Balay   matgetrowactive = 0;
177f4e70085SSatish Balay }
178f4e70085SSatish Balay 
179f4e70085SSatish Balay void PETSC_STDCALL matview_(Mat *mat,PetscViewer *vin,PetscErrorCode *ierr)
180f4e70085SSatish Balay {
181f4e70085SSatish Balay   PetscViewer v;
182f4e70085SSatish Balay   PetscPatchDefaultViewers_Fortran(vin,v);
183f4e70085SSatish Balay   *ierr = MatView(*mat,v);
184f4e70085SSatish Balay }
185f4e70085SSatish Balay 
186112444f4SShri Abhyankar void PETSC_STDCALL matload_(Mat *mat,PetscViewer *vin,PetscErrorCode *ierr)
187f7e310deSShri Abhyankar {
188f7e310deSShri Abhyankar   PetscViewer v;
189f7e310deSShri Abhyankar   PetscPatchDefaultViewers_Fortran(vin,v);
190112444f4SShri Abhyankar   *ierr = MatLoad(*mat,v);
191f7e310deSShri Abhyankar }
192f7e310deSShri Abhyankar 
193f4e70085SSatish Balay void PETSC_STDCALL matgetarray_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr)
194f4e70085SSatish Balay {
195f4e70085SSatish Balay   PetscScalar *mm;
196f4e70085SSatish Balay   PetscInt    m,n;
197f4e70085SSatish Balay 
198f4e70085SSatish Balay   *ierr = MatGetArray(*mat,&mm); if (*ierr) return;
199f4e70085SSatish Balay   *ierr = MatGetSize(*mat,&m,&n);  if (*ierr) return;
200f91d1997SBarry Smith   *ierr = PetscScalarAddressToFortran((PetscObject)*mat,1,fa,mm,m*n,ia); if (*ierr) return;
201f4e70085SSatish Balay }
202f4e70085SSatish Balay 
203f4e70085SSatish Balay void PETSC_STDCALL matrestorearray_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr)
204f4e70085SSatish Balay {
205f4e70085SSatish Balay   PetscScalar          *lx;
206f4e70085SSatish Balay   PetscInt                  m,n;
207f4e70085SSatish Balay 
208f4e70085SSatish Balay   *ierr = MatGetSize(*mat,&m,&n); if (*ierr) return;
209f4e70085SSatish Balay   *ierr = PetscScalarAddressFromFortran((PetscObject)*mat,fa,*ia,m*n,&lx);if (*ierr) return;
210f4e70085SSatish Balay   *ierr = MatRestoreArray(*mat,&lx);if (*ierr) return;
211f4e70085SSatish Balay }
212f4e70085SSatish Balay 
21335bd34faSBarry Smith void PETSC_STDCALL matfactorgetsolverpackage_(Mat *mat,CHAR name PETSC_MIXED_LEN(len),PetscErrorCode *ierr PETSC_END_LEN(len))
21435bd34faSBarry Smith {
21535bd34faSBarry Smith   const char *tname;
21635bd34faSBarry Smith 
21735bd34faSBarry Smith   *ierr = MatFactorGetSolverPackage(*mat,&tname);if (*ierr) return;
21835bd34faSBarry Smith   if (name != PETSC_NULL_CHARACTER_Fortran) {
21935bd34faSBarry Smith     *ierr = PetscStrncpy(name,tname,len);if (*ierr) return;
22035bd34faSBarry Smith   }
22135bd34faSBarry Smith   FIXRETURNCHAR(PETSC_TRUE,name,len);
22235bd34faSBarry Smith }
22335bd34faSBarry Smith 
2249be81726SHong Zhang void PETSC_STDCALL matgetfactor_(Mat *mat,CHAR outtype PETSC_MIXED_LEN(len),MatFactorType *ftype,Mat *M,PetscErrorCode *ierr PETSC_END_LEN(len))
2255dffd610SBarry Smith {
2265dffd610SBarry Smith   char *t;
2275dffd610SBarry Smith   FIXCHAR(outtype,len,t);
2289be81726SHong Zhang   *ierr = MatGetFactor(*mat,t,*ftype,M);
2295dffd610SBarry Smith   FREECHAR(outtype,t);
2305dffd610SBarry Smith }
2315dffd610SBarry Smith 
232f4e70085SSatish Balay void PETSC_STDCALL matconvert_(Mat *mat,CHAR outtype PETSC_MIXED_LEN(len),MatReuse *reuse,Mat *M,PetscErrorCode *ierr PETSC_END_LEN(len))
233f4e70085SSatish Balay {
234f4e70085SSatish Balay   char *t;
235f4e70085SSatish Balay   FIXCHAR(outtype,len,t);
236f4e70085SSatish Balay   *ierr = MatConvert(*mat,t,*reuse,M);
237f4e70085SSatish Balay   FREECHAR(outtype,t);
238f4e70085SSatish Balay }
239f4e70085SSatish Balay 
240f4e70085SSatish Balay /*
241f4e70085SSatish Balay     MatGetSubmatrices() is slightly different from C since the
242f4e70085SSatish Balay     Fortran provides the array to hold the submatrix objects,while in C that
243f4e70085SSatish Balay     array is allocated by the MatGetSubmatrices()
244f4e70085SSatish Balay */
245f4e70085SSatish Balay void PETSC_STDCALL matgetsubmatrices_(Mat *mat,PetscInt *n,IS *isrow,IS *iscol,MatReuse *scall,Mat *smat,PetscErrorCode *ierr)
246f4e70085SSatish Balay {
247f4e70085SSatish Balay   Mat *lsmat;
248f4e70085SSatish Balay   PetscInt i;
249f4e70085SSatish Balay 
250f4e70085SSatish Balay   if (*scall == MAT_INITIAL_MATRIX) {
251f4e70085SSatish Balay     *ierr = MatGetSubMatrices(*mat,*n,isrow,iscol,*scall,&lsmat);
252f4e70085SSatish Balay     for (i=0; i<*n; i++) {
253f4e70085SSatish Balay       smat[i] = lsmat[i];
254f4e70085SSatish Balay     }
255f4e70085SSatish Balay     *ierr = PetscFree(lsmat);
256f4e70085SSatish Balay   } else {
257f4e70085SSatish Balay     *ierr = MatGetSubMatrices(*mat,*n,isrow,iscol,*scall,&smat);
258f4e70085SSatish Balay   }
259f4e70085SSatish Balay }
260f4e70085SSatish Balay 
2617d6bfa3bSBarry Smith /*
2627d6bfa3bSBarry Smith     MatDestroyMatrices() is slightly different from C since the
2637d6bfa3bSBarry Smith     Fortran provides the array to hold the submatrix objects,while in C that
2647d6bfa3bSBarry Smith     array is allocated by the MatGetSubmatrices()
2657d6bfa3bSBarry Smith */
2667d6bfa3bSBarry Smith void PETSC_STDCALL matdestroymatrices_(Mat *mat,PetscInt *n,Mat *smat,PetscErrorCode *ierr)
2677d6bfa3bSBarry Smith {
2687d6bfa3bSBarry Smith   PetscInt i;
2697d6bfa3bSBarry Smith 
2707d6bfa3bSBarry Smith   for (i=0; i<*n; i++) {
2716bf464f9SBarry Smith     *ierr = MatDestroy(&smat[i]);if (*ierr) return;
2727d6bfa3bSBarry Smith   }
2737d6bfa3bSBarry Smith }
2747d6bfa3bSBarry Smith 
27517ede90eSSatish Balay void PETSC_STDCALL matzerorowscolumns_(Mat *mat,PetscInt *numRows,PetscInt *rows,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr)
27617ede90eSSatish Balay {
27717ede90eSSatish Balay   CHKFORTRANNULLOBJECTDEREFERENCE(x);
27817ede90eSSatish Balay   CHKFORTRANNULLOBJECTDEREFERENCE(b);
27917ede90eSSatish Balay   *ierr = MatZeroRowsColumns(*mat,*numRows,rows,*diag,*x,*b);
28017ede90eSSatish Balay }
28117ede90eSSatish Balay 
28217ede90eSSatish Balay void PETSC_STDCALL matzerorowscolumnsis_(Mat *mat,IS *is,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr)
28317ede90eSSatish Balay {
28417ede90eSSatish Balay   CHKFORTRANNULLOBJECTDEREFERENCE(x);
28517ede90eSSatish Balay   CHKFORTRANNULLOBJECTDEREFERENCE(b);
28617ede90eSSatish Balay   *ierr = MatZeroRowsColumnsIS(*mat,*is,*diag,*x,*b);
28717ede90eSSatish Balay }
28817ede90eSSatish Balay 
28917ede90eSSatish Balay void PETSC_STDCALL matzerorowsstencil_(Mat *mat,PetscInt *numRows,MatStencil *rows,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr)
29017ede90eSSatish Balay {
29117ede90eSSatish Balay   CHKFORTRANNULLOBJECTDEREFERENCE(x);
29217ede90eSSatish Balay   CHKFORTRANNULLOBJECTDEREFERENCE(b);
29317ede90eSSatish Balay   *ierr = MatZeroRowsStencil(*mat,*numRows,rows,*diag,*x,*b);
29417ede90eSSatish Balay }
29517ede90eSSatish Balay 
296*d25a37e1SJed Brown void PETSC_STDCALL matzerorowscolumnsstencil_(Mat *mat,PetscInt *numRows,MatStencil *rows,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr)
297*d25a37e1SJed Brown {
298*d25a37e1SJed Brown   CHKFORTRANNULLOBJECTDEREFERENCE(x);
299*d25a37e1SJed Brown   CHKFORTRANNULLOBJECTDEREFERENCE(b);
300*d25a37e1SJed Brown   *ierr = MatZeroRowsColumnsStencil(*mat,*numRows,rows,*diag,*x,*b);
301*d25a37e1SJed Brown }
302*d25a37e1SJed Brown 
3032b40b63fSBarry Smith void PETSC_STDCALL matzerorows_(Mat *mat,PetscInt *numRows,PetscInt *rows,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr)
304f4e70085SSatish Balay {
3052b40b63fSBarry Smith   CHKFORTRANNULLOBJECTDEREFERENCE(x);
3062b40b63fSBarry Smith   CHKFORTRANNULLOBJECTDEREFERENCE(b);
3072b40b63fSBarry Smith   *ierr = MatZeroRows(*mat,*numRows,rows,*diag,*x,*b);
308f4e70085SSatish Balay }
309f4e70085SSatish Balay 
3102b40b63fSBarry Smith void PETSC_STDCALL matzerorowsis_(Mat *mat,IS *is,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr)
311f4e70085SSatish Balay {
3122b40b63fSBarry Smith   CHKFORTRANNULLOBJECTDEREFERENCE(x);
3132b40b63fSBarry Smith   CHKFORTRANNULLOBJECTDEREFERENCE(b);
3142b40b63fSBarry Smith   *ierr = MatZeroRowsIS(*mat,*is,*diag,*x,*b);
315f4e70085SSatish Balay }
316f4e70085SSatish Balay 
3172b40b63fSBarry Smith void PETSC_STDCALL matzerorowslocal_(Mat *mat,PetscInt *numRows,PetscInt *rows,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr)
318f4e70085SSatish Balay {
3192b40b63fSBarry Smith   CHKFORTRANNULLOBJECTDEREFERENCE(x);
3202b40b63fSBarry Smith   CHKFORTRANNULLOBJECTDEREFERENCE(b);
3212b40b63fSBarry Smith   *ierr = MatZeroRowsLocal(*mat,*numRows,rows,*diag,*x,*b);
322f4e70085SSatish Balay }
323f4e70085SSatish Balay 
3242b40b63fSBarry Smith void PETSC_STDCALL matzerorowslocalis_(Mat *mat,IS *is,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr)
325f4e70085SSatish Balay {
3262b40b63fSBarry Smith   CHKFORTRANNULLOBJECTDEREFERENCE(x);
3272b40b63fSBarry Smith   CHKFORTRANNULLOBJECTDEREFERENCE(b);
3282b40b63fSBarry Smith   *ierr = MatZeroRowsLocalIS(*mat,*is,*diag,*x,*b);
329f4e70085SSatish Balay }
330f4e70085SSatish Balay 
33117ede90eSSatish Balay void PETSC_STDCALL matzerorowscolumnslocal_(Mat *mat,PetscInt *numRows,PetscInt *rows,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr)
33217ede90eSSatish Balay {
33317ede90eSSatish Balay   CHKFORTRANNULLOBJECTDEREFERENCE(x);
33417ede90eSSatish Balay   CHKFORTRANNULLOBJECTDEREFERENCE(b);
33517ede90eSSatish Balay   *ierr = MatZeroRowsColumnsLocal(*mat,*numRows,rows,*diag,*x,*b);
33617ede90eSSatish Balay }
33717ede90eSSatish Balay 
33817ede90eSSatish Balay void PETSC_STDCALL matzerorowscolumnslocalis_(Mat *mat,IS *is,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr)
33917ede90eSSatish Balay {
34017ede90eSSatish Balay   CHKFORTRANNULLOBJECTDEREFERENCE(x);
34117ede90eSSatish Balay   CHKFORTRANNULLOBJECTDEREFERENCE(b);
34217ede90eSSatish Balay   *ierr = MatZeroRowsColumnsLocalIS(*mat,*is,*diag,*x,*b);
34317ede90eSSatish Balay }
3441eea217eSSatish Balay 
3452b40b63fSBarry Smith void PETSC_STDCALL matsetoptionsprefix_(Mat *mat,CHAR prefix PETSC_MIXED_LEN(len),PetscErrorCode *ierr PETSC_END_LEN(len))
3461eea217eSSatish Balay {
3471eea217eSSatish Balay   char *t;
3481eea217eSSatish Balay 
3491eea217eSSatish Balay   FIXCHAR(prefix,len,t);
3501eea217eSSatish Balay   *ierr = MatSetOptionsPrefix(*mat,t);
3511eea217eSSatish Balay   FREECHAR(prefix,t);
3521eea217eSSatish Balay }
3531eea217eSSatish Balay 
354812c3f48SMatthew Knepley void PETSC_STDCALL matnullspaceremove_(MatNullSpace *sp,Vec *vec,Vec *out,PetscErrorCode *ierr)
355812c3f48SMatthew Knepley {
356812c3f48SMatthew Knepley   CHKFORTRANNULLOBJECT(out);
357812c3f48SMatthew Knepley   *ierr = MatNullSpaceRemove(*sp,*vec,out);
358812c3f48SMatthew Knepley }
3591eea217eSSatish Balay 
3605ba43861SSatish Balay void PETSC_STDCALL   matgetinfo_(Mat *mat,MatInfoType *flag,MatInfo *info, int *__ierr )
3615ba43861SSatish Balay {
3625ba43861SSatish Balay   *__ierr = MatGetInfo(*mat,*flag,info);
3635ba43861SSatish Balay }
3645ba43861SSatish Balay 
36522688b47SSatish Balay void PETSC_STDCALL   matlufactor_(Mat *mat,IS *row,IS *col, MatFactorInfo *info, int *__ierr )
36622688b47SSatish Balay {
36722688b47SSatish Balay   *__ierr = MatLUFactor(*mat,*row,*col,info);
36822688b47SSatish Balay }
36922688b47SSatish Balay 
37022688b47SSatish Balay void PETSC_STDCALL   matilufactor_(Mat *mat,IS *row,IS *col, MatFactorInfo *info, int *__ierr )
37122688b47SSatish Balay {
37222688b47SSatish Balay   *__ierr = MatILUFactor(*mat,*row,*col,info);
37322688b47SSatish Balay }
37422688b47SSatish Balay 
37522688b47SSatish Balay void PETSC_STDCALL   matlufactorsymbolic_(Mat *fact,Mat *mat,IS *row,IS *col, MatFactorInfo *info, int *__ierr )
37622688b47SSatish Balay {
37722688b47SSatish Balay   *__ierr = MatLUFactorSymbolic(*fact,*mat,*row,*col,info);
37822688b47SSatish Balay }
37922688b47SSatish Balay 
38022688b47SSatish Balay void PETSC_STDCALL   matlufactornumeric_(Mat *fact,Mat *mat, MatFactorInfo *info, int *__ierr )
38122688b47SSatish Balay {
38222688b47SSatish Balay   *__ierr = MatLUFactorNumeric(*fact,*mat,info);
38322688b47SSatish Balay }
38422688b47SSatish Balay 
38522688b47SSatish Balay void PETSC_STDCALL   matcholeskyfactor_(Mat *mat,IS *perm, MatFactorInfo *info, int *__ierr )
38622688b47SSatish Balay {
38722688b47SSatish Balay   *__ierr = MatCholeskyFactor(*mat,*perm,info);
38822688b47SSatish Balay }
38922688b47SSatish Balay 
39022688b47SSatish Balay void PETSC_STDCALL   matcholeskyfactorsymbolic_(Mat *fact,Mat *mat,IS *perm, MatFactorInfo *info, int *__ierr )
39122688b47SSatish Balay {
39222688b47SSatish Balay   *__ierr = MatCholeskyFactorSymbolic(*fact,*mat,*perm,info);
39322688b47SSatish Balay }
39422688b47SSatish Balay 
39522688b47SSatish Balay void PETSC_STDCALL   matcholeskyfactornumeric_(Mat *fact,Mat *mat, MatFactorInfo *info, int *__ierr )
39622688b47SSatish Balay {
39722688b47SSatish Balay   *__ierr = MatCholeskyFactorNumeric(*fact,*mat,info);
39822688b47SSatish Balay }
39922688b47SSatish Balay 
40022688b47SSatish Balay void PETSC_STDCALL   matilufactorsymbolic_(Mat *fact,Mat *mat,IS *row,IS *col, MatFactorInfo *info, int *__ierr )
40122688b47SSatish Balay {
40222688b47SSatish Balay   *__ierr = MatILUFactorSymbolic(*fact,*mat,*row,*col,info);
40322688b47SSatish Balay }
40422688b47SSatish Balay 
40522688b47SSatish Balay void PETSC_STDCALL   maticcfactorsymbolic_(Mat *fact,Mat *mat,IS *perm, MatFactorInfo *info, int *__ierr )
40622688b47SSatish Balay {
40722688b47SSatish Balay   *__ierr = MatICCFactorSymbolic(*fact,*mat,*perm,info);
40822688b47SSatish Balay }
40922688b47SSatish Balay 
41022688b47SSatish Balay void PETSC_STDCALL   maticcfactor_(Mat *mat,IS *row, MatFactorInfo* info, int *__ierr )
41122688b47SSatish Balay {
41222688b47SSatish Balay   *__ierr = MatICCFactor(*mat,*row,info);
41322688b47SSatish Balay }
41422688b47SSatish Balay 
41522688b47SSatish Balay void PETSC_STDCALL   matfactorinfoinitialize_(MatFactorInfo *info, int *__ierr )
41622688b47SSatish Balay {
41722688b47SSatish Balay   *__ierr = MatFactorInfoInitialize(info);
41822688b47SSatish Balay }
41922688b47SSatish Balay 
420f4e70085SSatish Balay EXTERN_C_END
421