Actual source code: zmffdf.c

  1: #include <petsc/private/fortranimpl.h>
  2: #include <petscmat.h>

  4: #if defined(PETSC_HAVE_FORTRAN_CAPS)
  5:   #define matmffdsetfunction_ MATMFFDSETFUNCTION
  6:   #define matmffdsetbase_     MATMFFDSETBASE
  7: #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE)
  8:   #define matmffdsetfunction_ matmffdsetfunction
  9:   #define matmffdsetbase_     matmffdsetbase
 10: #endif

 12: static PetscErrorCode ourmatmffdfunction(void *ctx, Vec x, Vec f)
 13: {
 14:   Mat mat = (Mat)ctx;
 15:   PetscCallFortranVoidFunction((*(void (*)(void *, Vec *, Vec *, PetscErrorCode *))(((PetscObject)mat)->fortran_func_pointers[0]))((void *)(PETSC_UINTPTR_T)((PetscObject)mat)->fortran_func_pointers[1], &x, &f, &ierr));
 16:   return PETSC_SUCCESS;
 17: }

 19: PETSC_EXTERN void matmffdsetfunction_(Mat *mat, void (*func)(void *, Vec *, Vec *, PetscErrorCode *), void *ctx, PetscErrorCode *ierr)
 20: {
 21:   PetscObjectAllocateFortranPointers(*mat, 2);
 22:   ((PetscObject)*mat)->fortran_func_pointers[0] = (PetscVoidFn *)func;
 23:   ((PetscObject)*mat)->fortran_func_pointers[1] = (PetscVoidFn *)(PETSC_UINTPTR_T)ctx;

 25:   *ierr = MatMFFDSetFunction(*mat, ourmatmffdfunction, *mat);
 26: }