xref: /petsc/src/mat/impls/mffd/ftn-custom/zmffdf.c (revision cdcc8137d37276ce2fb5ff13f9be72596f3ca935)
1*cdcc8137SSatish Balay #include "zpetsc.h"
2*cdcc8137SSatish Balay #include "petscsnes.h"
3*cdcc8137SSatish Balay 
4*cdcc8137SSatish Balay #if defined(PETSC_HAVE_FORTRAN_CAPS)
5*cdcc8137SSatish Balay #define matmffdsetfunction_            MATMFFDSETFUNCTION
6*cdcc8137SSatish Balay #define matmffdsettype_                MATMFFDSETTYPE
7*cdcc8137SSatish Balay #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE)
8*cdcc8137SSatish Balay #define matmffdsetfunction_            matmffdsetfunction
9*cdcc8137SSatish Balay #define matmffdsettype_                matmffdsettype
10*cdcc8137SSatish Balay #endif
11*cdcc8137SSatish Balay 
12*cdcc8137SSatish Balay EXTERN_C_BEGIN
13*cdcc8137SSatish Balay static void (PETSC_STDCALL *f11)(void*,Vec*,Vec*,PetscErrorCode*);
14*cdcc8137SSatish Balay EXTERN_C_END
15*cdcc8137SSatish Balay 
16*cdcc8137SSatish Balay static PetscErrorCode ourmatmffdfunction(void *ctx,Vec x,Vec f)
17*cdcc8137SSatish Balay {
18*cdcc8137SSatish Balay   PetscErrorCode ierr = 0;
19*cdcc8137SSatish Balay   (*f11)(ctx,&x,&f,&ierr);CHKERRQ(ierr);
20*cdcc8137SSatish Balay   return 0;
21*cdcc8137SSatish Balay }
22*cdcc8137SSatish Balay 
23*cdcc8137SSatish Balay EXTERN_C_BEGIN
24*cdcc8137SSatish Balay void PETSC_STDCALL matmffdsetfunction_(Mat *mat,void (PETSC_STDCALL *func)(void*,Vec*,Vec*,PetscErrorCode*),
25*cdcc8137SSatish Balay                       void *ctx,PetscErrorCode *ierr)
26*cdcc8137SSatish Balay {
27*cdcc8137SSatish Balay   f11 = func;
28*cdcc8137SSatish Balay   CHKFORTRANNULLOBJECT(ctx);
29*cdcc8137SSatish Balay   *ierr = MatMFFDSetFunction(*mat,ourmatmffdfunction,ctx);
30*cdcc8137SSatish Balay }
31*cdcc8137SSatish Balay 
32*cdcc8137SSatish Balay void PETSC_STDCALL matmffdsettype_(Mat *mat,CHAR ftype PETSC_MIXED_LEN(len),
33*cdcc8137SSatish Balay                                      PetscErrorCode *ierr PETSC_END_LEN(len))
34*cdcc8137SSatish Balay {
35*cdcc8137SSatish Balay   char *t;
36*cdcc8137SSatish Balay   FIXCHAR(ftype,len,t);
37*cdcc8137SSatish Balay   *ierr = MatMFFDSetType(*mat,t);
38*cdcc8137SSatish Balay   FREECHAR(ftype,t);
39*cdcc8137SSatish Balay }
40*cdcc8137SSatish Balay 
41*cdcc8137SSatish Balay EXTERN_C_END
42