xref: /petsc/src/mat/impls/mffd/ftn-custom/zmffdf.c (revision f5b6597de472f9232d13fd9f262bf486f6dc7a6a)
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