xref: /petsc/src/mat/matfd/ftn-custom/zfdmatrixf.c (revision 7850c7c0c26ecb6b4afa1179c307bda15ba2f298)
1ce0a2cd1SBarry Smith #include "private/fortranimpl.h"
2*7850c7c0SBarry Smith #include "private/matimpl.h"
3f4e70085SSatish Balay #include "petscts.h"
4f4e70085SSatish Balay 
5f4e70085SSatish Balay #if defined(PETSC_HAVE_FORTRAN_CAPS)
6f4e70085SSatish Balay #define matfdcoloringsetfunctionts_      MATFDCOLORINGSETFUNCTIONTS
7f4e70085SSatish Balay #define matfdcoloringsetfunctionsnes_    MATFDCOLORINGSETFUNCTIONSNES
81d2e4005SSatish Balay #define matfdcoloringview_               MATFDCOLORINGVIEW
9f4e70085SSatish Balay #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE)
10f4e70085SSatish Balay #define matfdcoloringsetfunctionts_      matfdcoloringsetfunctionts
11f4e70085SSatish Balay #define matfdcoloringsetfunctionsnes_    matfdcoloringsetfunctionsnes
121d2e4005SSatish Balay #define matfdcoloringview_               matfdcoloringview
13f4e70085SSatish Balay #endif
14f4e70085SSatish Balay 
15f4e70085SSatish Balay 
16f4e70085SSatish Balay /* These are not extern C because they are passed into non-extern C user level functions */
17*7850c7c0SBarry Smith static PetscErrorCode ourmatfdcoloringfunctionts(TS ts,PetscReal t,Vec x,Vec y,MatFDColoring fd)
18f4e70085SSatish Balay {
19f4e70085SSatish Balay   PetscErrorCode ierr = 0;
20*7850c7c0SBarry Smith   (*(void (PETSC_STDCALL *)(TS*,PetscReal*,Vec*,Vec*,void*,PetscErrorCode*))(fd->ftn_func_pointer)) (&ts,&t,&x,&y,fd->ftn_func_cntx,&ierr);
21f4e70085SSatish Balay   return ierr;
22f4e70085SSatish Balay }
23f4e70085SSatish Balay 
24*7850c7c0SBarry Smith static PetscErrorCode ourmatfdcoloringfunctionsnes(SNES snes,Vec x,Vec y,MatFDColoring fd)
25f4e70085SSatish Balay {
26f4e70085SSatish Balay   PetscErrorCode ierr = 0;
27*7850c7c0SBarry Smith   (*(void (PETSC_STDCALL *)(SNES*,Vec*,Vec*,void*,PetscErrorCode*))(fd->ftn_func_pointer)) (&snes,&x,&y,fd->ftn_func_cntx,&ierr);
28f4e70085SSatish Balay   return ierr;
29f4e70085SSatish Balay }
30f4e70085SSatish Balay 
31f4e70085SSatish Balay EXTERN_C_BEGIN
32f4e70085SSatish Balay 
33f4e70085SSatish Balay /*
34*7850c7c0SBarry Smith         MatFDColoringSetFunction sticks the Fortran function and its context into the MatFDColoring structure and passes the MatFDColoring object
35*7850c7c0SBarry Smith     in as the function context. ourmafdcoloringfunctionsnes() and ourmatfdcoloringfunctionts()  then access the function and its context from the
36*7850c7c0SBarry Smith     MatFDColoring that is passed in. This is the same way that fortran_func_pointers is used in PETSc objects.
37f4e70085SSatish Balay 
38f4e70085SSatish Balay    NOTE: FORTRAN USER CANNOT PUT IN A NEW J OR B currently.
39f4e70085SSatish Balay */
40f4e70085SSatish Balay 
41f4e70085SSatish Balay 
42*7850c7c0SBarry Smith void PETSC_STDCALL matfdcoloringsetfunctionts_(MatFDColoring *fd,void (PETSC_STDCALL *f)(TS*,double*,Vec*,Vec*,void*,PetscErrorCode*),void *ctx,PetscErrorCode *ierr)
43f4e70085SSatish Balay {
44*7850c7c0SBarry Smith   (*fd)->ftn_func_pointer = (void*) f;
45*7850c7c0SBarry Smith   (*fd)->ftn_func_cntx = ctx;
46*7850c7c0SBarry Smith   *ierr = MatFDColoringSetFunction(*fd,(PetscErrorCodeFunction)ourmatfdcoloringfunctionts,*fd);
47f4e70085SSatish Balay }
48f4e70085SSatish Balay 
49*7850c7c0SBarry Smith void PETSC_STDCALL matfdcoloringsetfunction_(MatFDColoring *fd,void (PETSC_STDCALL *f)(SNES*,Vec*,Vec*,void*,PetscErrorCode*),void *ctx,PetscErrorCode *ierr)
50f4e70085SSatish Balay {
51*7850c7c0SBarry Smith   (*fd)->ftn_func_pointer = (void*) f;
52*7850c7c0SBarry Smith   (*fd)->ftn_func_cntx = ctx;
53*7850c7c0SBarry Smith   *ierr = MatFDColoringSetFunction(*fd,(PetscErrorCodeFunction)ourmatfdcoloringfunctionsnes,*fd);
54f4e70085SSatish Balay }
55f4e70085SSatish Balay 
561d2e4005SSatish Balay void PETSC_STDCALL matfdcoloringview_(MatFDColoring *c,PetscViewer *vin,PetscErrorCode *ierr)
571d2e4005SSatish Balay {
581d2e4005SSatish Balay   PetscViewer v;
591d2e4005SSatish Balay 
601d2e4005SSatish Balay   PetscPatchDefaultViewers_Fortran(vin,v);
611d2e4005SSatish Balay   *ierr = MatFDColoringView(*c,v);
621d2e4005SSatish Balay }
631d2e4005SSatish Balay 
641d2e4005SSatish Balay 
65f4e70085SSatish Balay EXTERN_C_END
66