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;