1af0996ceSBarry Smith #include <petsc/private/fortranimpl.h> 2c6db04a5SJed Brown #include <petscts.h> 3665c2dedSJed Brown #include <petscviewer.h> 4e2df7a95SSatish Balay 5e2df7a95SSatish Balay #if defined(PETSC_HAVE_FORTRAN_CAPS) 6b0bc92c6SBarry Smith #define tsmonitorlgsettransform_ TSMONITORLGSETTRANSFORM 7e2df7a95SSatish Balay #define tssetrhsfunction_ TSSETRHSFUNCTION 837698f3aSJed Brown #define tsgetrhsfunction_ TSGETRHSFUNCTION 9e2df7a95SSatish Balay #define tssetrhsjacobian_ TSSETRHSJACOBIAN 10e2df7a95SSatish Balay #define tsgetrhsjacobian_ TSGETRHSJACOBIAN 1137698f3aSJed Brown #define tssetifunction_ TSSETIFUNCTION 1237698f3aSJed Brown #define tsgetifunction_ TSGETIFUNCTION 1337698f3aSJed Brown #define tssetijacobian_ TSSETIJACOBIAN 1437698f3aSJed Brown #define tsgetijacobian_ TSGETIJACOBIAN 15e2df7a95SSatish Balay #define tsview_ TSVIEW 1637698f3aSJed Brown #define tssetoptionsprefix_ TSSETOPTIONSPREFIX 17e2df7a95SSatish Balay #define tsgetoptionsprefix_ TSGETOPTIONSPREFIX 1837698f3aSJed Brown #define tsappendoptionsprefix_ TSAPPENDOPTIONSPREFIX 19a6570f20SBarry Smith #define tsmonitorset_ TSMONITORSET 200e4ef248SJed Brown #define tscomputerhsfunctionlinear_ TSCOMPUTERHSFUNCTIONLINEAR 210e4ef248SJed Brown #define tscomputerhsjacobianconstant_ TSCOMPUTERHSJACOBIANCONSTANT 220fecffdcSJed Brown #define tscomputeifunctionlinear_ TSCOMPUTEIFUNCTIONLINEAR 230fecffdcSJed Brown #define tscomputeijacobianconstant_ TSCOMPUTEIJACOBIANCONSTANT 24a6570f20SBarry Smith #define tsmonitordefault_ TSMONITORDEFAULT 25dd7ecb2fSBarry Smith #define tssetprestep_ TSSETPRESTEP 26dd7ecb2fSBarry Smith #define tssetpoststep_ TSSETPOSTSTEP 27e2df7a95SSatish Balay #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE) 28b0bc92c6SBarry Smith #define tsmonitorlgsettransform_ tsmonitorlgsettransform 29e2df7a95SSatish Balay #define tssetrhsfunction_ tssetrhsfunction 3037698f3aSJed Brown #define tsgetrhsfunction_ tsgetrhsfunction 31e2df7a95SSatish Balay #define tssetrhsjacobian_ tssetrhsjacobian 32e2df7a95SSatish Balay #define tsgetrhsjacobian_ tsgetrhsjacobian 3337698f3aSJed Brown #define tssetifunction_ tssetifunction 3437698f3aSJed Brown #define tsgetifunction_ tsgetifunction 3537698f3aSJed Brown #define tssetijacobian_ tssetijacobian 3637698f3aSJed Brown #define tsgetijacobian_ tsgetijacobian 37e2df7a95SSatish Balay #define tsview_ tsview 3837698f3aSJed Brown #define tssetoptionsprefix_ tssetoptionsprefix 39e2df7a95SSatish Balay #define tsgetoptionsprefix_ tsgetoptionsprefix 4037698f3aSJed Brown #define tsappendoptionsprefix_ tsappendoptionsprefix 41a6570f20SBarry Smith #define tsmonitorset_ tsmonitorset 420e4ef248SJed Brown #define tscomputerhsfunctionlinear_ tscomputerhsfunctionlinear 430e4ef248SJed Brown #define tscomputerhsjacobianconstant_ tscomputerhsjacobianconstant 440fecffdcSJed Brown #define tscomputeifunctionlinear_ tscomputeifunctionlinear 450fecffdcSJed Brown #define tscomputeijacobianconstant_ tscomputeijacobianconstant 46a6570f20SBarry Smith #define tsmonitordefault_ tsmonitordefault 47dd7ecb2fSBarry Smith #define tssetprestep_ tssetprestep 48dd7ecb2fSBarry Smith #define tssetpoststep_ tssetpoststep 49e2df7a95SSatish Balay #endif 50e2df7a95SSatish Balay 510fecffdcSJed Brown enum {OUR_PRESTEP = 0, 520fecffdcSJed Brown OUR_POSTSTEP, 530fecffdcSJed Brown OUR_RHSFUNCTION, 540fecffdcSJed Brown OUR_IFUNCTION, 550fecffdcSJed Brown OUR_RHSJACOBIAN, 560fecffdcSJed Brown OUR_IJACOBIAN, 570fecffdcSJed Brown OUR_MONITOR, 580fecffdcSJed Brown OUR_MONITORDESTROY, 590fecffdcSJed Brown OUR_MONITOR_CTX, /* Casting from function pointer is invalid according to the standard. */ 600fecffdcSJed Brown OUR_COUNT}; 610fecffdcSJed Brown 62dd7ecb2fSBarry Smith static PetscErrorCode ourprestep(TS ts) 63dd7ecb2fSBarry Smith { 64dd7ecb2fSBarry Smith PetscErrorCode ierr = 0; 650fecffdcSJed Brown (*(void (PETSC_STDCALL*)(TS*,PetscErrorCode*))(((PetscObject)ts)->fortran_func_pointers[OUR_PRESTEP]))(&ts,&ierr); 66dd7ecb2fSBarry Smith return 0; 67dd7ecb2fSBarry Smith } 68dd7ecb2fSBarry Smith static PetscErrorCode ourpoststep(TS ts) 69dd7ecb2fSBarry Smith { 70dd7ecb2fSBarry Smith PetscErrorCode ierr = 0; 710fecffdcSJed Brown (*(void (PETSC_STDCALL*)(TS*,PetscErrorCode*))(((PetscObject)ts)->fortran_func_pointers[OUR_POSTSTEP]))(&ts,&ierr); 72dd7ecb2fSBarry Smith return 0; 73dd7ecb2fSBarry Smith } 740fecffdcSJed Brown static PetscErrorCode ourrhsfunction(TS ts,PetscReal d,Vec x,Vec f,void *ctx) 75e2df7a95SSatish Balay { 76e2df7a95SSatish Balay PetscErrorCode ierr = 0; 770fecffdcSJed Brown (*(void (PETSC_STDCALL*)(TS*,PetscReal*,Vec*,Vec*,void*,PetscErrorCode*))(((PetscObject)ts)->fortran_func_pointers[OUR_RHSFUNCTION]))(&ts,&d,&x,&f,ctx,&ierr); 78e2df7a95SSatish Balay return 0; 79e2df7a95SSatish Balay } 800fecffdcSJed Brown static PetscErrorCode ourifunction(TS ts,PetscReal d,Vec x,Vec xdot,Vec f,void *ctx) 81e2df7a95SSatish Balay { 82e2df7a95SSatish Balay PetscErrorCode ierr = 0; 830fecffdcSJed Brown (*(void (PETSC_STDCALL*)(TS*,PetscReal*,Vec*,Vec*,Vec*,void*,PetscErrorCode*))(((PetscObject)ts)->fortran_func_pointers[OUR_IFUNCTION]))(&ts,&d,&x,&xdot,&f,ctx,&ierr); 840fecffdcSJed Brown return 0; 850fecffdcSJed Brown } 86d1e9a80fSBarry Smith static PetscErrorCode ourrhsjacobian(TS ts,PetscReal d,Vec x,Mat m,Mat p,void *ctx) 870fecffdcSJed Brown { 880fecffdcSJed Brown PetscErrorCode ierr = 0; 89d1e9a80fSBarry Smith (*(void (PETSC_STDCALL*)(TS*,PetscReal*,Vec*,Mat*,Mat*,void*,PetscErrorCode*))(((PetscObject)ts)->fortran_func_pointers[OUR_RHSJACOBIAN]))(&ts,&d,&x,&m,&p,ctx,&ierr); 900fecffdcSJed Brown return 0; 910fecffdcSJed Brown } 92d1e9a80fSBarry Smith static PetscErrorCode ourijacobian(TS ts,PetscReal d,Vec x,Vec xdot,PetscReal shift,Mat m,Mat p,void *ctx) 930fecffdcSJed Brown { 940fecffdcSJed Brown PetscErrorCode ierr = 0; 95d1e9a80fSBarry Smith (*(void (PETSC_STDCALL*)(TS*,PetscReal*,Vec*,Vec*,PetscReal*,Mat*,Mat*,void*,PetscErrorCode*))(((PetscObject)ts)->fortran_func_pointers[OUR_IJACOBIAN]))(&ts,&d,&x,&xdot,&shift,&m,&p,ctx,&ierr); 96e2df7a95SSatish Balay return 0; 97e2df7a95SSatish Balay } 98e2df7a95SSatish Balay 99c2efdce3SBarry Smith static PetscErrorCode ourmonitordestroy(void **ctx) 100e2df7a95SSatish Balay { 101e2df7a95SSatish Balay PetscErrorCode ierr = 0; 102c2efdce3SBarry Smith TS ts = *(TS*)ctx; 1031d14097aSBarry Smith void *mctx = (void*) (PETSC_UINTPTR_T) ((PetscObject)ts)->fortran_func_pointers[OUR_MONITOR_CTX]; 1040fecffdcSJed Brown (*(void (PETSC_STDCALL*)(void*,PetscErrorCode*))(((PetscObject)ts)->fortran_func_pointers[OUR_MONITORDESTROY]))(mctx,&ierr); 105e2df7a95SSatish Balay return 0; 106e2df7a95SSatish Balay } 107e2df7a95SSatish Balay 108e2df7a95SSatish Balay /* 109e2df7a95SSatish Balay Note ctx is the same as ts so we need to get the Fortran context out of the TS 110e2df7a95SSatish Balay */ 1110fecffdcSJed Brown static PetscErrorCode ourmonitor(TS ts,PetscInt i,PetscReal d,Vec v,void *ctx) 112e2df7a95SSatish Balay { 113e2df7a95SSatish Balay PetscErrorCode ierr = 0; 1141d14097aSBarry Smith void *mctx = (void*) (PETSC_UINTPTR_T) ((PetscObject)ts)->fortran_func_pointers[OUR_MONITOR_CTX]; 1150fecffdcSJed Brown (*(void (PETSC_STDCALL*)(TS*,PetscInt*,PetscReal*,Vec*,void*,PetscErrorCode*))(((PetscObject)ts)->fortran_func_pointers[OUR_MONITOR]))(&ts,&i,&d,&v,mctx,&ierr); 116e2df7a95SSatish Balay return 0; 117e2df7a95SSatish Balay } 118e2df7a95SSatish Balay 119b0bc92c6SBarry Smith /* 120b0bc92c6SBarry Smith Currently does not handle destroy or context 121b0bc92c6SBarry Smith */ 122*0d8bfb15SSatish Balay static void (PETSC_STDCALL*yourtransform)(void*ctx,Vec*,Vec*,PetscErrorCode*); 123b0bc92c6SBarry Smith static PetscErrorCode ourtransform(void *ctx,Vec x,Vec *xout) 124b0bc92c6SBarry Smith { 125b0bc92c6SBarry Smith PetscErrorCode ierr = 0; 126b0bc92c6SBarry Smith (*yourtransform)(ctx,&x,xout,&ierr); 127b0bc92c6SBarry Smith return ierr; 128b0bc92c6SBarry Smith } 129b0bc92c6SBarry Smith 130b0bc92c6SBarry Smith PETSC_EXTERN void PETSC_STDCALL tsmonitorlgsettransform_(TS *ts,void (PETSC_STDCALL*f)(void*,Vec*,Vec*,PetscErrorCode*),PetscErrorCode (PETSC_STDCALL*d)(void*,PetscErrorCode*),void *ctx,PetscErrorCode *ierr) 131b0bc92c6SBarry Smith { 132b0bc92c6SBarry Smith *ierr = TSMonitorLGSetTransform(*ts,ourtransform,NULL,NULL); 133b0bc92c6SBarry Smith yourtransform = f; 134b0bc92c6SBarry Smith } 135b0bc92c6SBarry Smith 1368cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL tssetprestep_(TS *ts,PetscErrorCode (PETSC_STDCALL*f)(TS*,PetscErrorCode*),PetscErrorCode *ierr) 137dd7ecb2fSBarry Smith { 1380fecffdcSJed Brown PetscObjectAllocateFortranPointers(*ts,OUR_COUNT); 1390fecffdcSJed Brown ((PetscObject)*ts)->fortran_func_pointers[OUR_PRESTEP] = (PetscVoidFunction)f; 140bbd56ea5SKarl Rupp 141dd7ecb2fSBarry Smith *ierr = TSSetPreStep(*ts,ourprestep); 142dd7ecb2fSBarry Smith } 143dd7ecb2fSBarry Smith 1448cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL tssetpoststep_(TS *ts,PetscErrorCode (PETSC_STDCALL *f)(TS*,PetscErrorCode*),PetscErrorCode *ierr) 145dd7ecb2fSBarry Smith { 1460fecffdcSJed Brown PetscObjectAllocateFortranPointers(*ts,OUR_COUNT); 1470fecffdcSJed Brown ((PetscObject)*ts)->fortran_func_pointers[OUR_POSTSTEP] = (PetscVoidFunction)f; 148bbd56ea5SKarl Rupp 149041da8cfSDebojyoti Ghosh *ierr = TSSetPostStep(*ts,ourpoststep); 150dd7ecb2fSBarry Smith } 151dd7ecb2fSBarry Smith 15269c1e2abSSatish Balay PETSC_EXTERN void tscomputerhsfunctionlinear_(TS *ts,PetscReal *t,Vec *X,Vec *F,void *ctx,PetscErrorCode *ierr) 1530e4ef248SJed Brown { 1540e4ef248SJed Brown *ierr = TSComputeRHSFunctionLinear(*ts,*t,*X,*F,ctx); 1550e4ef248SJed Brown } 1568cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL tssetrhsfunction_(TS *ts,Vec *r,PetscErrorCode (PETSC_STDCALL*f)(TS*,PetscReal*,Vec*,Vec*,void*,PetscErrorCode*),void *fP,PetscErrorCode *ierr) 157e2df7a95SSatish Balay { 1580e4ef248SJed Brown Vec R; 1590e4ef248SJed Brown CHKFORTRANNULLOBJECT(r); 1600e4ef248SJed Brown CHKFORTRANNULLFUNCTION(f); 1610e4ef248SJed Brown CHKFORTRANNULLOBJECT(fP); 1620298fd71SBarry Smith R = r ? *r : (Vec)NULL; 1630e4ef248SJed Brown if ((PetscVoidFunction)f == (PetscVoidFunction)tscomputerhsfunctionlinear_) { 1640e4ef248SJed Brown *ierr = TSSetRHSFunction(*ts,R,TSComputeRHSFunctionLinear,fP); 1650e4ef248SJed Brown } else { 1660fecffdcSJed Brown PetscObjectAllocateFortranPointers(*ts,OUR_COUNT); 1670fecffdcSJed Brown ((PetscObject)*ts)->fortran_func_pointers[OUR_RHSFUNCTION] = (PetscVoidFunction)f; 1680fecffdcSJed Brown *ierr = TSSetRHSFunction(*ts,R,ourrhsfunction,fP); 1690fecffdcSJed Brown } 1700fecffdcSJed Brown } 1718cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL tsgetrhsfunction_(TS *ts,Vec *r,void *func,void **ctx,PetscErrorCode *ierr) 17237698f3aSJed Brown { 17337698f3aSJed Brown CHKFORTRANNULLINTEGER(ctx); 17437698f3aSJed Brown CHKFORTRANNULLOBJECT(r); 1750298fd71SBarry Smith *ierr = TSGetRHSFunction(*ts,r,NULL,ctx); 17637698f3aSJed Brown } 1770fecffdcSJed Brown 17869c1e2abSSatish Balay PETSC_EXTERN void tscomputeifunctionlinear_(TS *ts,PetscReal *t,Vec *X,Vec *Xdot,Vec *F,void *ctx,PetscErrorCode *ierr) 1790fecffdcSJed Brown { 1800fecffdcSJed Brown *ierr = TSComputeIFunctionLinear(*ts,*t,*X,*Xdot,*F,ctx); 1810fecffdcSJed Brown } 1828cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL tssetifunction_(TS *ts,Vec *r,PetscErrorCode (PETSC_STDCALL*f)(TS*,PetscReal*,Vec*,Vec*,Vec*,void*,PetscErrorCode*),void *fP,PetscErrorCode *ierr) 1830fecffdcSJed Brown { 1840fecffdcSJed Brown Vec R; 1850fecffdcSJed Brown CHKFORTRANNULLOBJECT(r); 1860fecffdcSJed Brown CHKFORTRANNULLFUNCTION(f); 1870fecffdcSJed Brown CHKFORTRANNULLOBJECT(fP); 1880298fd71SBarry Smith R = r ? *r : (Vec)NULL; 1890fecffdcSJed Brown if ((PetscVoidFunction)f == (PetscVoidFunction)tscomputeifunctionlinear_) { 1900fecffdcSJed Brown *ierr = TSSetIFunction(*ts,R,TSComputeIFunctionLinear,fP); 1910fecffdcSJed Brown } else { 1920fecffdcSJed Brown PetscObjectAllocateFortranPointers(*ts,OUR_COUNT); 1930fecffdcSJed Brown ((PetscObject)*ts)->fortran_func_pointers[OUR_IFUNCTION] = (PetscVoidFunction)f; 1940fecffdcSJed Brown *ierr = TSSetIFunction(*ts,R,ourifunction,fP); 1950e4ef248SJed Brown } 196e2df7a95SSatish Balay } 1978cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL tsgetifunction_(TS *ts,Vec *r,void *func,void **ctx,PetscErrorCode *ierr) 19837698f3aSJed Brown { 19937698f3aSJed Brown CHKFORTRANNULLINTEGER(ctx); 20037698f3aSJed Brown CHKFORTRANNULLOBJECT(r); 2010298fd71SBarry Smith *ierr = TSGetIFunction(*ts,r,NULL,ctx); 20237698f3aSJed Brown } 20326d46c62SHong Zhang 204e2df7a95SSatish Balay /* ---------------------------------------------------------*/ 205d1e9a80fSBarry Smith PETSC_EXTERN void tscomputerhsjacobianconstant_(TS *ts,PetscReal *t,Vec *X,Mat *A,Mat *B,void *ctx,PetscErrorCode *ierr) 2060e4ef248SJed Brown { 207d1e9a80fSBarry Smith *ierr = TSComputeRHSJacobianConstant(*ts,*t,*X,*A,*B,ctx); 2080e4ef248SJed Brown } 209d1e9a80fSBarry Smith PETSC_EXTERN void PETSC_STDCALL tssetrhsjacobian_(TS *ts,Mat *A,Mat *B,void (PETSC_STDCALL*f)(TS*,PetscReal*,Vec*,Mat*,Mat*,void*,PetscErrorCode*),void *fP,PetscErrorCode *ierr) 210e2df7a95SSatish Balay { 2110fecffdcSJed Brown PetscObjectAllocateFortranPointers(*ts,OUR_COUNT); 212e2df7a95SSatish Balay if (FORTRANNULLFUNCTION(f)) { 2130298fd71SBarry Smith *ierr = TSSetRHSJacobian(*ts,*A,*B,NULL,fP); 2140e4ef248SJed Brown } else if ((PetscVoidFunction)f == (PetscVoidFunction)tscomputerhsjacobianconstant_) { 2150e4ef248SJed Brown *ierr = TSSetRHSJacobian(*ts,*A,*B,TSComputeRHSJacobianConstant,fP); 216e2df7a95SSatish Balay } else { 2170fecffdcSJed Brown ((PetscObject)*ts)->fortran_func_pointers[OUR_RHSJACOBIAN] = (PetscVoidFunction)f; 2180fecffdcSJed Brown *ierr = TSSetRHSJacobian(*ts,*A,*B,ourrhsjacobian,fP); 2190fecffdcSJed Brown } 2200fecffdcSJed Brown } 2210fecffdcSJed Brown 222d1e9a80fSBarry Smith PETSC_EXTERN void tscomputeijacobianconstant_(TS *ts,PetscReal *t,Vec *X,Vec *Xdot,PetscReal *shift,Mat *A,Mat *B,void *ctx,PetscErrorCode *ierr) 2230fecffdcSJed Brown { 224d1e9a80fSBarry Smith *ierr = TSComputeIJacobianConstant(*ts,*t,*X,*Xdot,*shift,*A,*B,ctx); 2250fecffdcSJed Brown } 226d1e9a80fSBarry Smith PETSC_EXTERN void PETSC_STDCALL tssetijacobian_(TS *ts,Mat *A,Mat *B,void (PETSC_STDCALL*f)(TS*,PetscReal*,Vec*,Mat*,Mat*,void*,PetscErrorCode*),void *fP,PetscErrorCode *ierr) 2270fecffdcSJed Brown { 2280fecffdcSJed Brown PetscObjectAllocateFortranPointers(*ts,OUR_COUNT); 2290fecffdcSJed Brown if (FORTRANNULLFUNCTION(f)) { 2300298fd71SBarry Smith *ierr = TSSetIJacobian(*ts,*A,*B,NULL,fP); 2310fecffdcSJed Brown } else if ((PetscVoidFunction)f == (PetscVoidFunction)tscomputeijacobianconstant_) { 2320fecffdcSJed Brown *ierr = TSSetIJacobian(*ts,*A,*B,TSComputeIJacobianConstant,fP); 2330fecffdcSJed Brown } else { 2340fecffdcSJed Brown ((PetscObject)*ts)->fortran_func_pointers[OUR_IJACOBIAN] = (PetscVoidFunction)f; 2350fecffdcSJed Brown *ierr = TSSetIJacobian(*ts,*A,*B,ourijacobian,fP); 236e2df7a95SSatish Balay } 237e2df7a95SSatish Balay } 2388cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL tsgetijacobian_(TS *ts,Mat *J,Mat *M,int *func,void **ctx,PetscErrorCode *ierr) 23937698f3aSJed Brown { 24037698f3aSJed Brown CHKFORTRANNULLINTEGER(ctx); 24137698f3aSJed Brown CHKFORTRANNULLOBJECT(J); 24237698f3aSJed Brown CHKFORTRANNULLOBJECT(M); 24337698f3aSJed Brown *ierr = TSGetIJacobian(*ts,J,M,0,ctx); 24437698f3aSJed Brown } 245e2df7a95SSatish Balay 246e2df7a95SSatish Balay /* ---------------------------------------------------------*/ 247e2df7a95SSatish Balay 2488cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL tsmonitordefault_(TS*,PetscInt*,PetscReal*,Vec*,void*,PetscErrorCode*); 249e2df7a95SSatish Balay 2508cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL tsmonitorset_(TS *ts,void (PETSC_STDCALL*func)(TS*,PetscInt*,PetscReal*,Vec*,void*,PetscErrorCode*),void (*mctx)(void),void (PETSC_STDCALL*d)(void*,PetscErrorCode*),PetscErrorCode *ierr) 251e2df7a95SSatish Balay { 2520fecffdcSJed Brown PetscObjectAllocateFortranPointers(*ts,OUR_COUNT); 253a6570f20SBarry Smith if ((PetscVoidFunction)func == (PetscVoidFunction)tsmonitordefault_) { 254a6570f20SBarry Smith *ierr = TSMonitorSet(*ts,TSMonitorDefault,0,0); 255e2df7a95SSatish Balay } else { 2560fecffdcSJed Brown ((PetscObject)*ts)->fortran_func_pointers[OUR_MONITOR] = (PetscVoidFunction)func; 2570fecffdcSJed Brown ((PetscObject)*ts)->fortran_func_pointers[OUR_MONITORDESTROY] = (PetscVoidFunction)d; 2580fecffdcSJed Brown ((PetscObject)*ts)->fortran_func_pointers[OUR_MONITOR_CTX] = (PetscVoidFunction)mctx; 259e2df7a95SSatish Balay if (FORTRANNULLFUNCTION(d)) { 2600fecffdcSJed Brown *ierr = TSMonitorSet(*ts,ourmonitor,*ts,0); 261e2df7a95SSatish Balay } else { 2620fecffdcSJed Brown *ierr = TSMonitorSet(*ts,ourmonitor,*ts,ourmonitordestroy); 263e2df7a95SSatish Balay } 264e2df7a95SSatish Balay } 265e2df7a95SSatish Balay } 266e2df7a95SSatish Balay 267e2df7a95SSatish Balay /* ---------------------------------------------------------*/ 268089b2837SJed Brown /* func is currently ignored from Fortran */ 2698cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL tsgetrhsjacobian_(TS *ts,Mat *J,Mat *M,int *func,void **ctx,PetscErrorCode *ierr) 270e2df7a95SSatish Balay { 271089b2837SJed Brown *ierr = TSGetRHSJacobian(*ts,J,M,0,ctx); 272e2df7a95SSatish Balay } 273e2df7a95SSatish Balay 2748cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL tsview_(TS *ts,PetscViewer *viewer, PetscErrorCode *ierr) 275e2df7a95SSatish Balay { 276e2df7a95SSatish Balay PetscViewer v; 277e2df7a95SSatish Balay PetscPatchDefaultViewers_Fortran(viewer,v); 278e2df7a95SSatish Balay *ierr = TSView(*ts,v); 279e2df7a95SSatish Balay } 280e2df7a95SSatish Balay 2818cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL tssetoptionsprefix_(TS *ts,CHAR prefix PETSC_MIXED_LEN(len),PetscErrorCode *ierr PETSC_END_LEN(len)) 28237698f3aSJed Brown { 28337698f3aSJed Brown char *t; 28437698f3aSJed Brown FIXCHAR(prefix,len,t); 28537698f3aSJed Brown *ierr = TSSetOptionsPrefix(*ts,t); 28637698f3aSJed Brown FREECHAR(prefix,t); 28737698f3aSJed Brown } 2888cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL tsgetoptionsprefix_(TS *ts,CHAR prefix PETSC_MIXED_LEN(len),PetscErrorCode *ierr PETSC_END_LEN(len)) 289e2df7a95SSatish Balay { 290e2df7a95SSatish Balay const char *tname; 291e2df7a95SSatish Balay 292e2df7a95SSatish Balay *ierr = TSGetOptionsPrefix(*ts,&tname); 293e2df7a95SSatish Balay *ierr = PetscStrncpy(prefix,tname,len); 294e2df7a95SSatish Balay } 2958cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL tsappendoptionsprefix_(TS *ts,CHAR prefix PETSC_MIXED_LEN(len),PetscErrorCode *ierr PETSC_END_LEN(len)) 29637698f3aSJed Brown { 29737698f3aSJed Brown char *t; 29837698f3aSJed Brown FIXCHAR(prefix,len,t); 29937698f3aSJed Brown *ierr = TSAppendOptionsPrefix(*ts,t); 30037698f3aSJed Brown FREECHAR(prefix,t); 30137698f3aSJed Brown } 302e2df7a95SSatish Balay 303