1*a4963045SJacob Faibussowitsch #pragma once 2474dd773SHong Zhang typedef struct _RKTableau *RKTableau; 3474dd773SHong Zhang struct _RKTableau { 4474dd773SHong Zhang char *name; 5474dd773SHong Zhang PetscInt order; /* Classical approximation order of the method i */ 6474dd773SHong Zhang PetscInt s; /* Number of stages */ 7474dd773SHong Zhang PetscInt p; /* Interpolation order */ 8474dd773SHong Zhang PetscBool FSAL; /* flag to indicate if tableau is FSAL */ 9474dd773SHong Zhang PetscReal *A, *b, *c; /* Tableau */ 10474dd773SHong Zhang PetscReal *bembed; /* Embedded formula of order one less (order-1) */ 11474dd773SHong Zhang PetscReal *binterp; /* Dense output formula */ 12474dd773SHong Zhang PetscReal ccfl; /* Placeholder for CFL coefficient relative to forward Euler */ 13474dd773SHong Zhang }; 14474dd773SHong Zhang typedef struct _RKTableauLink *RKTableauLink; 15474dd773SHong Zhang struct _RKTableauLink { 16474dd773SHong Zhang struct _RKTableau tab; 17474dd773SHong Zhang RKTableauLink next; 18474dd773SHong Zhang }; 19474dd773SHong Zhang 20474dd773SHong Zhang typedef struct { 21474dd773SHong Zhang RKTableau tableau; 22630f8c86SStefano Zampini PetscBool newtableau; /* flag to indicate if tableau has changed */ 23474dd773SHong Zhang Vec X0; 24474dd773SHong Zhang Vec *Y; /* States computed during the step */ 25474dd773SHong Zhang Vec *YdotRHS; /* Function evaluations for the non-stiff part and contains all components */ 26474dd773SHong Zhang Vec *YdotRHS_fast; /* Function evaluations for the non-stiff part and contains fast components */ 27474dd773SHong Zhang Vec *YdotRHS_slow; /* Function evaluations for the non-stiff part and contains slow components */ 282e7b7f96SHong Zhang Vec *VecsDeltaLam; /* Increment of the adjoint sensitivity w.r.t IC at stage */ 292e7b7f96SHong Zhang Vec *VecsSensiTemp; 302e7b7f96SHong Zhang Vec VecDeltaMu; /* Increment of the adjoint sensitivity w.r.t P at stage */ 3113af1a74SHong Zhang Vec *VecsDeltaLam2; /* Increment of the 2nd-order adjoint sensitivity w.r.t IC at stage */ 3213af1a74SHong Zhang Vec VecDeltaMu2; /* Increment of the 2nd-order adjoint sensitivity w.r.t P at stage */ 3313af1a74SHong Zhang Vec *VecsSensi2Temp; 34474dd773SHong Zhang PetscScalar *work; /* Scalar work */ 35474dd773SHong Zhang PetscInt slow; /* flag indicates call slow components solver (0) or fast components solver (1) */ 36474dd773SHong Zhang PetscReal stage_time; 37474dd773SHong Zhang TSStepStatus status; 38474dd773SHong Zhang PetscReal ptime; 39474dd773SHong Zhang PetscReal time_step; 40474dd773SHong Zhang PetscInt dtratio; /* ratio between slow time step size and fast step size */ 41474dd773SHong Zhang IS is_fast, is_slow; 4263a6f1b4SHong Zhang TS subts_fast, subts_slow, subts_current, ts_root; 430fe4d17eSHong Zhang PetscBool use_multirate; 44922a638cSHong Zhang Mat MatFwdSensip0; 45922a638cSHong Zhang Mat *MatsFwdStageSensip; 46922a638cSHong Zhang Mat *MatsFwdSensipTemp; 47922a638cSHong Zhang Vec VecDeltaFwdSensipCol; /* Working vector for holding one column of the sensitivity matrix */ 48474dd773SHong Zhang } TS_RK; 49