1*ce0a2cd1SBarry 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 EXTERN_C_BEGIN 13cdcc8137SSatish Balay static void (PETSC_STDCALL *f11)(void*,Vec*,Vec*,PetscErrorCode*); 14cdcc8137SSatish Balay EXTERN_C_END 15cdcc8137SSatish Balay 16cdcc8137SSatish Balay static PetscErrorCode ourmatmffdfunction(void *ctx,Vec x,Vec f) 17cdcc8137SSatish Balay { 18cdcc8137SSatish Balay PetscErrorCode ierr = 0; 19cdcc8137SSatish Balay (*f11)(ctx,&x,&f,&ierr);CHKERRQ(ierr); 20cdcc8137SSatish Balay return 0; 21cdcc8137SSatish Balay } 22cdcc8137SSatish Balay 23cdcc8137SSatish Balay EXTERN_C_BEGIN 24cdcc8137SSatish Balay void PETSC_STDCALL matmffdsetfunction_(Mat *mat,void (PETSC_STDCALL *func)(void*,Vec*,Vec*,PetscErrorCode*), 25cdcc8137SSatish Balay void *ctx,PetscErrorCode *ierr) 26cdcc8137SSatish Balay { 27cdcc8137SSatish Balay f11 = func; 28cdcc8137SSatish Balay CHKFORTRANNULLOBJECT(ctx); 29cdcc8137SSatish Balay *ierr = MatMFFDSetFunction(*mat,ourmatmffdfunction,ctx); 30cdcc8137SSatish Balay } 31cdcc8137SSatish Balay 32cdcc8137SSatish Balay void PETSC_STDCALL matmffdsettype_(Mat *mat,CHAR ftype PETSC_MIXED_LEN(len), 33cdcc8137SSatish Balay PetscErrorCode *ierr PETSC_END_LEN(len)) 34cdcc8137SSatish Balay { 35cdcc8137SSatish Balay char *t; 36cdcc8137SSatish Balay FIXCHAR(ftype,len,t); 37cdcc8137SSatish Balay *ierr = MatMFFDSetType(*mat,t); 38cdcc8137SSatish Balay FREECHAR(ftype,t); 39cdcc8137SSatish Balay } 40cdcc8137SSatish Balay 41cdcc8137SSatish Balay EXTERN_C_END 42