xref: /petsc/src/mat/matfd/ftn-custom/zfdmatrixf.c (revision 372a5eeac39dca4d9583473a568e4c915192ea71)
1ce0a2cd1SBarry Smith #include "private/fortranimpl.h"
27850c7c0SBarry 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
7*372a5eeaSSatish Balay #define matfdcoloringsetfunction_        MATFDCOLORINGSETFUNCTIONS
81d2e4005SSatish Balay #define matfdcoloringview_               MATFDCOLORINGVIEW
9f4e70085SSatish Balay #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE)
10f4e70085SSatish Balay #define matfdcoloringsetfunctionts_      matfdcoloringsetfunctionts
11*372a5eeaSSatish Balay #define matfdcoloringsetfunction_        matfdcoloringsetfunction
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 */
177850c7c0SBarry Smith static PetscErrorCode ourmatfdcoloringfunctionts(TS ts,PetscReal t,Vec x,Vec y,MatFDColoring fd)
18f4e70085SSatish Balay {
19f4e70085SSatish Balay   PetscErrorCode ierr = 0;
207850c7c0SBarry 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 
247850c7c0SBarry Smith static PetscErrorCode ourmatfdcoloringfunctionsnes(SNES snes,Vec x,Vec y,MatFDColoring fd)
25f4e70085SSatish Balay {
26f4e70085SSatish Balay   PetscErrorCode ierr = 0;
277850c7c0SBarry 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 /*
347850c7c0SBarry Smith         MatFDColoringSetFunction sticks the Fortran function and its context into the MatFDColoring structure and passes the MatFDColoring object
357850c7c0SBarry Smith     in as the function context. ourmafdcoloringfunctionsnes() and ourmatfdcoloringfunctionts()  then access the function and its context from the
367850c7c0SBarry 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 
427850c7c0SBarry Smith void PETSC_STDCALL matfdcoloringsetfunctionts_(MatFDColoring *fd,void (PETSC_STDCALL *f)(TS*,double*,Vec*,Vec*,void*,PetscErrorCode*),void *ctx,PetscErrorCode *ierr)
43f4e70085SSatish Balay {
447850c7c0SBarry Smith   (*fd)->ftn_func_pointer = (void*) f;
457850c7c0SBarry Smith   (*fd)->ftn_func_cntx = ctx;
467850c7c0SBarry Smith   *ierr = MatFDColoringSetFunction(*fd,(PetscErrorCodeFunction)ourmatfdcoloringfunctionts,*fd);
47f4e70085SSatish Balay }
48f4e70085SSatish Balay 
497850c7c0SBarry Smith void PETSC_STDCALL matfdcoloringsetfunction_(MatFDColoring *fd,void (PETSC_STDCALL *f)(SNES*,Vec*,Vec*,void*,PetscErrorCode*),void *ctx,PetscErrorCode *ierr)
50f4e70085SSatish Balay {
517850c7c0SBarry Smith   (*fd)->ftn_func_pointer = (void*) f;
527850c7c0SBarry Smith   (*fd)->ftn_func_cntx = ctx;
537850c7c0SBarry 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