Actual source code: rk.h

      1: #pragma once
      2: typedef struct _RKTableau *RKTableau;
      3: struct _RKTableau {
      4:   char      *name;
      5:   PetscInt   order;     /* Classical approximation order of the method i              */
      6:   PetscInt   s;         /* Number of stages                                           */
      7:   PetscInt   p;         /* Interpolation order                                        */
      8:   PetscBool  FSAL;      /* flag to indicate if tableau is FSAL                        */
      9:   PetscReal *A, *b, *c; /* Tableau                                                    */
     10:   PetscReal *bembed;    /* Embedded formula of order one less (order-1)               */
     11:   PetscReal *binterp;   /* Dense output formula                                       */
     12:   PetscReal  ccfl;      /* Placeholder for CFL coefficient relative to forward Euler  */
     13: };
     14: typedef struct _RKTableauLink *RKTableauLink;
     15: struct _RKTableauLink {
     16:   struct _RKTableau tab;
     17:   RKTableauLink     next;
     18: };

     20: typedef struct {
     21:   RKTableau    tableau;
     22:   PetscBool    newtableau; /* flag to indicate if tableau has changed */
     23:   Vec          X0;
     24:   Vec         *Y;            /* States computed during the step                                              */
     25:   Vec         *YdotRHS;      /* Function evaluations for the non-stiff part and contains all components      */
     26:   Vec         *YdotRHS_fast; /* Function evaluations for the non-stiff part and contains fast components     */
     27:   Vec         *YdotRHS_slow; /* Function evaluations for the non-stiff part and contains slow components     */
     28:   Vec         *VecsDeltaLam; /* Increment of the adjoint sensitivity w.r.t IC at stage                       */
     29:   Vec         *VecsSensiTemp;
     30:   Vec          VecDeltaMu;    /* Increment of the adjoint sensitivity w.r.t P at stage                        */
     31:   Vec         *VecsDeltaLam2; /* Increment of the 2nd-order adjoint sensitivity w.r.t IC at stage */
     32:   Vec          VecDeltaMu2;   /* Increment of the 2nd-order adjoint sensitivity w.r.t P at stage */
     33:   Vec         *VecsSensi2Temp;
     34:   PetscScalar *work; /* Scalar work                                                                  */
     35:   PetscInt     slow; /* flag indicates call slow components solver (0) or fast components solver (1) */
     36:   PetscReal    stage_time;
     37:   TSStepStatus status;
     38:   PetscReal    ptime;
     39:   PetscReal    time_step;
     40:   PetscInt     dtratio; /* ratio between slow time step size and fast step size                         */
     41:   IS           is_fast, is_slow;
     42:   TS           subts_fast, subts_slow, subts_current, ts_root;
     43:   PetscBool    use_multirate;
     44:   Mat          MatFwdSensip0;
     45:   Mat         *MatsFwdStageSensip;
     46:   Mat         *MatsFwdSensipTemp;
     47:   Vec          VecDeltaFwdSensipCol; /* Working vector for holding one column of the sensitivity matrix */
     48: } TS_RK;