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 matmffdsettype_          MATMFFDSETTYPE
  7:   #define matmffdsetoptionsprefix_ MATMFFDSETOPTIONSPREFIX
  8:   #define matmffdsetbase_          MATMFFDSETBASE
  9: #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE)
 10:   #define matmffdsetfunction_      matmffdsetfunction
 11:   #define matmffdsettype_          matmffdsettype
 12:   #define matmffdsetoptionsprefix_ matmffdsetoptionsprefix
 13:   #define matmffdsetbase_          matmffdsetbase
 14: #endif

 16: static PetscErrorCode ourmatmffdfunction(void *ctx, Vec x, Vec f)
 17: {
 18:   Mat mat = (Mat)ctx;
 19:   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));
 20:   return PETSC_SUCCESS;
 21: }

 23: PETSC_EXTERN void matmffdsetfunction_(Mat *mat, void (*func)(void *, Vec *, Vec *, PetscErrorCode *), void *ctx, PetscErrorCode *ierr)
 24: {
 25:   PetscObjectAllocateFortranPointers(*mat, 2);
 26:   ((PetscObject)*mat)->fortran_func_pointers[0] = (PetscVoidFn *)func;
 27:   ((PetscObject)*mat)->fortran_func_pointers[1] = (PetscVoidFn *)(PETSC_UINTPTR_T)ctx;

 29:   *ierr = MatMFFDSetFunction(*mat, ourmatmffdfunction, *mat);
 30: }

 32: PETSC_EXTERN void matmffdsettype_(Mat *mat, char *ftype, PetscErrorCode *ierr, PETSC_FORTRAN_CHARLEN_T len)
 33: {
 34:   char *t;
 35:   FIXCHAR(ftype, len, t);
 36:   *ierr = MatMFFDSetType(*mat, t);
 37:   if (*ierr) return;
 38:   FREECHAR(ftype, t);
 39: }

 41: PETSC_EXTERN void matmffdsetoptionsprefix_(Mat *mat, char *prefix, PetscErrorCode *ierr, PETSC_FORTRAN_CHARLEN_T len)
 42: {
 43:   char *t;
 44:   FIXCHAR(prefix, len, t);
 45:   *ierr = MatMFFDSetOptionsPrefix(*mat, t);
 46:   if (*ierr) return;
 47:   FREECHAR(prefix, t);
 48: }