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