xref: /petsc/src/mat/matfd/ftn-custom/zfdmatrixf.c (revision 1d2e40055fe3bf783df36eeeccf2d7d5fcfab0fd)
1f4e70085SSatish Balay #include "zpetsc.h"
2f4e70085SSatish Balay #include "petscmat.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
8*1d2e4005SSatish Balay #define matfdcoloringview_               MATFDCOLORINGVIEW
9f4e70085SSatish Balay #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE)
10f4e70085SSatish Balay #define matfdcoloringsetfunctionts_      matfdcoloringsetfunctionts
11f4e70085SSatish Balay #define matfdcoloringsetfunctionsnes_    matfdcoloringsetfunctionsnes
12*1d2e4005SSatish Balay #define matfdcoloringview_               matfdcoloringview
13f4e70085SSatish Balay #endif
14f4e70085SSatish Balay 
15f4e70085SSatish Balay EXTERN_C_BEGIN
16f4e70085SSatish Balay static void (PETSC_STDCALL *f7)(TS*,double*,Vec*,Vec*,void*,PetscErrorCode*);
17f4e70085SSatish Balay static void (PETSC_STDCALL *f8)(SNES*,Vec*,Vec*,void*,PetscErrorCode*);
18f4e70085SSatish Balay EXTERN_C_END
19f4e70085SSatish Balay 
20f4e70085SSatish Balay /* These are not extern C because they are passed into non-extern C user level functions */
21f4e70085SSatish Balay static PetscErrorCode ourmatfdcoloringfunctionts(TS ts,double t,Vec x,Vec y,void *ctx)
22f4e70085SSatish Balay {
23f4e70085SSatish Balay   PetscErrorCode ierr = 0;
24f4e70085SSatish Balay   (*f7)(&ts,&t,&x,&y,ctx,&ierr);
25f4e70085SSatish Balay   return ierr;
26f4e70085SSatish Balay }
27f4e70085SSatish Balay 
28f4e70085SSatish Balay static PetscErrorCode ourmatfdcoloringfunctionsnes(SNES ts,Vec x,Vec y,void *ctx)
29f4e70085SSatish Balay {
30f4e70085SSatish Balay   PetscErrorCode ierr = 0;
31f4e70085SSatish Balay   (*f8)(&ts,&x,&y,ctx,&ierr);
32f4e70085SSatish Balay   return ierr;
33f4e70085SSatish Balay }
34f4e70085SSatish Balay 
35f4e70085SSatish Balay EXTERN_C_BEGIN
36f4e70085SSatish Balay 
37f4e70085SSatish Balay /*
38f4e70085SSatish Balay         MatFDColoringSetFunction sticks the Fortran function into the fortran_func_pointers
39f4e70085SSatish Balay     this function is then accessed by ourmatfdcoloringfunction()
40f4e70085SSatish Balay 
41f4e70085SSatish Balay    NOTE: FORTRAN USER CANNOT PUT IN A NEW J OR B currently.
42f4e70085SSatish Balay 
43f4e70085SSatish Balay    USER CAN HAVE ONLY ONE MatFDColoring in code Because there is no place to hang f7!
44f4e70085SSatish Balay */
45f4e70085SSatish Balay 
46f4e70085SSatish Balay 
47f4e70085SSatish Balay void PETSC_STDCALL matfdcoloringsetfunctionts_(MatFDColoring *fd,void (PETSC_STDCALL *f)(TS*,double*,Vec*,Vec*,void*,PetscErrorCode*),
48f4e70085SSatish Balay                                  void *ctx,PetscErrorCode *ierr)
49f4e70085SSatish Balay {
50f4e70085SSatish Balay   f7 = f;
51f68b968cSBarry Smith   *ierr = MatFDColoringSetFunction(*fd,(PetscErrorCodeFunction)ourmatfdcoloringfunctionts,ctx);
52f4e70085SSatish Balay }
53f4e70085SSatish Balay 
54f4e70085SSatish Balay void PETSC_STDCALL matfdcoloringsetfunctionsnes_(MatFDColoring *fd,void (PETSC_STDCALL *f)(SNES*,Vec*,Vec*,void*,PetscErrorCode*),
55f4e70085SSatish Balay                                  void *ctx,PetscErrorCode *ierr)
56f4e70085SSatish Balay {
57f4e70085SSatish Balay   f8 = f;
58f68b968cSBarry Smith   *ierr = MatFDColoringSetFunction(*fd,(PetscErrorCodeFunction)ourmatfdcoloringfunctionsnes,ctx);
59f4e70085SSatish Balay }
60f4e70085SSatish Balay 
61*1d2e4005SSatish Balay void PETSC_STDCALL matfdcoloringview_(MatFDColoring *c,PetscViewer *vin,PetscErrorCode *ierr)
62*1d2e4005SSatish Balay {
63*1d2e4005SSatish Balay   PetscViewer v;
64*1d2e4005SSatish Balay 
65*1d2e4005SSatish Balay   PetscPatchDefaultViewers_Fortran(vin,v);
66*1d2e4005SSatish Balay   *ierr = MatFDColoringView(*c,v);
67*1d2e4005SSatish Balay }
68*1d2e4005SSatish Balay 
69*1d2e4005SSatish Balay 
70f4e70085SSatish Balay EXTERN_C_END
71