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