xref: /petsc/src/ts/impls/explicit/rk/rk.h (revision 2e7b7f96234fe412e30f42a61403d5ed8380abcc)
1474dd773SHong Zhang typedef struct _RKTableau *RKTableau;
2474dd773SHong Zhang struct _RKTableau {
3474dd773SHong Zhang   char       *name;
4474dd773SHong Zhang   PetscInt   order;               /* Classical approximation order of the method i              */
5474dd773SHong Zhang   PetscInt   s;                   /* Number of stages                                           */
6474dd773SHong Zhang   PetscInt   p;                   /* Interpolation order                                        */
7474dd773SHong Zhang   PetscBool  FSAL;                /* flag to indicate if tableau is FSAL                        */
8474dd773SHong Zhang   PetscReal  *A,*b,*c;            /* Tableau                                                    */
9474dd773SHong Zhang   PetscReal  *bembed;             /* Embedded formula of order one less (order-1)               */
10474dd773SHong Zhang   PetscReal  *binterp;            /* Dense output formula                                       */
11474dd773SHong Zhang   PetscReal  ccfl;                /* Placeholder for CFL coefficient relative to forward Euler  */
12474dd773SHong Zhang };
13474dd773SHong Zhang typedef struct _RKTableauLink *RKTableauLink;
14474dd773SHong Zhang struct _RKTableauLink {
15474dd773SHong Zhang   struct _RKTableau tab;
16474dd773SHong Zhang   RKTableauLink     next;
17474dd773SHong Zhang };
18474dd773SHong Zhang 
19474dd773SHong Zhang typedef struct {
20474dd773SHong Zhang   RKTableau    tableau;
21474dd773SHong Zhang   Vec          X0;
22474dd773SHong Zhang   Vec          *Y;               /* States computed during the step                                              */
23474dd773SHong Zhang   Vec          *YdotRHS;         /* Function evaluations for the non-stiff part and contains all components      */
24474dd773SHong Zhang   Vec          *YdotRHS_fast;    /* Function evaluations for the non-stiff part and contains fast components     */
25474dd773SHong Zhang   Vec          *YdotRHS_slow;    /* Function evaluations for the non-stiff part and contains slow components     */
26*2e7b7f96SHong Zhang   Vec          *VecsDeltaLam;    /* Increment of the adjoint sensitivity w.r.t IC at stage                       */
27*2e7b7f96SHong Zhang   Vec          *VecsSensiTemp;
28*2e7b7f96SHong Zhang   Vec          VecDeltaMu;       /* Increment of the adjoint sensitivity w.r.t P at stage                        */
29474dd773SHong Zhang   Vec          VecCostIntegral0; /* backup for roll-backs due to events                                          */
30474dd773SHong Zhang   PetscScalar  *work;            /* Scalar work                                                                  */
31474dd773SHong Zhang   PetscInt     slow;             /* flag indicates call slow components solver (0) or fast components solver (1) */
32474dd773SHong Zhang   PetscReal    stage_time;
33474dd773SHong Zhang   TSStepStatus status;
34474dd773SHong Zhang   PetscReal    ptime;
35474dd773SHong Zhang   PetscReal    time_step;
36474dd773SHong Zhang   PetscInt     dtratio;          /* ratio between slow time step size and fast step size                         */
37474dd773SHong Zhang   IS           is_fast,is_slow;
3863a6f1b4SHong Zhang   TS           subts_fast,subts_slow,subts_current,ts_root;
390fe4d17eSHong Zhang   PetscBool    use_multirate;
40474dd773SHong Zhang } TS_RK;
41