1 typedef struct _ARKTableau *ARKTableau; 2 struct _ARKTableau { 3 char *name; 4 PetscBool additive; /* If False, it is a DIRK method */ 5 PetscInt order; /* Classical approximation order of the method */ 6 PetscInt s; /* Number of stages */ 7 PetscBool stiffly_accurate; /* The implicit part is stiffly accurate */ 8 PetscBool FSAL_implicit; /* The implicit part is FSAL */ 9 PetscBool explicit_first_stage; /* The implicit part has an explicit first stage */ 10 PetscInt pinterp; /* Interpolation order */ 11 PetscReal *At, *bt, *ct; /* Stiff tableau */ 12 PetscReal *A, *b, *c; /* Non-stiff tableau */ 13 PetscReal *bembedt, *bembed; /* Embedded formula of order one less (order-1) */ 14 PetscReal *binterpt, *binterp; /* Dense output formula */ 15 PetscReal ccfl; /* Placeholder for CFL coefficient relative to forward Euler */ 16 }; 17 typedef struct _ARKTableauLink *ARKTableauLink; 18 struct _ARKTableauLink { 19 struct _ARKTableau tab; 20 ARKTableauLink next; 21 }; 22 23 typedef struct { 24 ARKTableau tableau; 25 Vec *Y; /* States computed during the step */ 26 Vec *YdotI; /* Time derivatives for the stiff part */ 27 Vec *YdotRHS; /* Function evaluations for the non-stiff part */ 28 Vec *Y_prev; /* States computed during the previous time step */ 29 Vec *YdotI_prev; /* Time derivatives for the stiff part for the previous time step*/ 30 Vec *YdotRHS_prev; /* Function evaluations for the non-stiff part for the previous time step*/ 31 Vec Ydot0; /* Holds the slope from the previous step in FSAL case */ 32 Vec Ydot; /* Work vector holding Ydot during residual evaluation */ 33 Vec Z; /* Ydot = shift(Y-Z) */ 34 IS alg_is; /* Index set for algebraic variables, needed when restarting with DIRK */ 35 PetscScalar *work; /* Scalar work */ 36 PetscReal scoeff; /* shift = scoeff/dt */ 37 PetscReal stage_time; 38 PetscBool imex; 39 PetscBool extrapolate; /* Extrapolate initial guess from previous time-step stage values */ 40 TSStepStatus status; 41 42 /* context for fast-slow split */ 43 Vec Y_snes; /* Work vector for SNES */ 44 Vec *YdotI_fast; /* Function evaluations for the fast components in YdotI */ 45 Vec *YdotRHS_fast; /* Function evaluations for the fast components in YdotRHS */ 46 Vec *YdotRHS_slow; /* Function evaluations for the slow components in YdotRHS */ 47 IS is_slow, is_fast; 48 TS subts_slow, subts_fast; 49 PetscBool fastslowsplit; 50 51 /* context for sensitivity analysis */ 52 Vec *VecsDeltaLam; /* Increment of the adjoint sensitivity w.r.t IC at stage */ 53 Vec *VecsSensiTemp; /* Vectors to be multiplied with Jacobian transpose */ 54 Vec *VecsSensiPTemp; /* Temporary Vectors to store JacobianP-transpose-vector product */ 55 } TS_ARKIMEX; 56