1*ce0a2cd1SBarry Smith #include "private/fortranimpl.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 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 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 611d2e4005SSatish Balay void PETSC_STDCALL matfdcoloringview_(MatFDColoring *c,PetscViewer *vin,PetscErrorCode *ierr) 621d2e4005SSatish Balay { 631d2e4005SSatish Balay PetscViewer v; 641d2e4005SSatish Balay 651d2e4005SSatish Balay PetscPatchDefaultViewers_Fortran(vin,v); 661d2e4005SSatish Balay *ierr = MatFDColoringView(*c,v); 671d2e4005SSatish Balay } 681d2e4005SSatish Balay 691d2e4005SSatish Balay 70f4e70085SSatish Balay EXTERN_C_END 71