Actual source code: rk.h
1: typedef struct _RKTableau *RKTableau;
2: struct _RKTableau {
3: char *name;
4: PetscInt order; /* Classical approximation order of the method i */
5: PetscInt s; /* Number of stages */
6: PetscInt p; /* Interpolation order */
7: PetscBool FSAL; /* flag to indicate if tableau is FSAL */
8: PetscReal *A,*b,*c; /* Tableau */
9: PetscReal *bembed; /* Embedded formula of order one less (order-1) */
10: PetscReal *binterp; /* Dense output formula */
11: PetscReal ccfl; /* Placeholder for CFL coefficient relative to forward Euler */
12: };
13: typedef struct _RKTableauLink *RKTableauLink;
14: struct _RKTableauLink {
15: struct _RKTableau tab;
16: RKTableauLink next;
17: };
19: typedef struct {
20: RKTableau tableau;
21: Vec X0;
22: Vec *Y; /* States computed during the step */
23: Vec *YdotRHS; /* Function evaluations for the non-stiff part and contains all components */
24: Vec *YdotRHS_fast; /* Function evaluations for the non-stiff part and contains fast components */
25: Vec *YdotRHS_slow; /* Function evaluations for the non-stiff part and contains slow components */
26: Vec *VecsDeltaLam; /* Increment of the adjoint sensitivity w.r.t IC at stage */
27: Vec *VecsSensiTemp;
28: Vec VecDeltaMu; /* Increment of the adjoint sensitivity w.r.t P at stage */
29: Vec *VecsDeltaLam2; /* Increment of the 2nd-order adjoint sensitivity w.r.t IC at stage */
30: Vec VecDeltaMu2; /* Increment of the 2nd-order adjoint sensitivity w.r.t P at stage */
31: Vec *VecsSensi2Temp;
32: PetscScalar *work; /* Scalar work */
33: PetscInt slow; /* flag indicates call slow components solver (0) or fast components solver (1) */
34: PetscReal stage_time;
35: TSStepStatus status;
36: PetscReal ptime;
37: PetscReal time_step;
38: PetscInt dtratio; /* ratio between slow time step size and fast step size */
39: IS is_fast,is_slow;
40: TS subts_fast,subts_slow,subts_current,ts_root;
41: PetscBool use_multirate;
42: Mat MatFwdSensip0;
43: Mat *MatsFwdStageSensip;
44: Mat *MatsFwdSensipTemp;
45: Vec VecDeltaFwdSensipCol; /* Working vector for holding one column of the sensitivity matrix */
46: } TS_RK;