1 #include "private/fortranimpl.h" 2 #include "petscsnes.h" 3 4 #if defined(PETSC_HAVE_FORTRAN_CAPS) 5 #define matmffdsetfunction_ MATMFFDSETFUNCTION 6 #define matmffdsettype_ MATMFFDSETTYPE 7 #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE) 8 #define matmffdsetfunction_ matmffdsetfunction 9 #define matmffdsettype_ matmffdsettype 10 #endif 11 12 EXTERN_C_BEGIN 13 static void (PETSC_STDCALL *f11)(void*,Vec*,Vec*,PetscErrorCode*); 14 EXTERN_C_END 15 16 static PetscErrorCode ourmatmffdfunction(void *ctx,Vec x,Vec f) 17 { 18 PetscErrorCode ierr = 0; 19 (*f11)(ctx,&x,&f,&ierr);CHKERRQ(ierr); 20 return 0; 21 } 22 23 EXTERN_C_BEGIN 24 void PETSC_STDCALL matmffdsetfunction_(Mat *mat,void (PETSC_STDCALL *func)(void*,Vec*,Vec*,PetscErrorCode*), 25 void *ctx,PetscErrorCode *ierr) 26 { 27 f11 = func; 28 CHKFORTRANNULLOBJECT(ctx); 29 *ierr = MatMFFDSetFunction(*mat,ourmatmffdfunction,ctx); 30 } 31 32 void PETSC_STDCALL matmffdsettype_(Mat *mat,CHAR ftype PETSC_MIXED_LEN(len), 33 PetscErrorCode *ierr PETSC_END_LEN(len)) 34 { 35 char *t; 36 FIXCHAR(ftype,len,t); 37 *ierr = MatMFFDSetType(*mat,t); 38 FREECHAR(ftype,t); 39 } 40 41 EXTERN_C_END 42