METHOD
RKPlus.h
Go to the documentation of this file.
1 #ifndef RKPLUS_H
2 #define RKPLUS_H
3 
4 #include "timeInt.h"
5 
6 
7 /*
8  This header files prvides the API for a number of explicit RK integrators,
9  all of which are taken from Gottlieb, Ketchson & Shu (2009), and are strong
10  stability preserving.
11 
12  Differently to the previous RK integrators, we combine the source and flux
13  approximations into the RHS and treat as an ODE, as opposed to operator
14  splitting methods. As a result ALL these integrators can be used as id for
15  models with sources.
16 
17  The RK2, RKSplit and RKSplit2 integrators are now deprecated. Now choose from
18  the following integrators:
19  RK2(2,2), RK3(3,3), RK4(4,5), RK4(4,10)
20 */
21 
22 
23 
24 
25 
26 
27 
28 
30 
35 class RKPlus : public TimeIntegrator
36 {
37  public:
38 
39  double * fluxCont;
40 
42 
54 
55  virtual ~RKPlus();
56 
58 
76  virtual void rhs(double * cons, double * prims, double * aux, double * rhsVec);
77 
78 };
79 
80 
82 
97 class RK2B : public RKPlus
98 {
99  public:
100 
101 
102  double
104  *u1cons,
105  *u1prims,
106  *u1aux,
107  *rhs1,
108  *rhs2;
110 
112 
124 
125  virtual ~RK2B();
126 
128 
137  void stage1(double * cons, double * prims, double * aux, double dt);
138 
140 
149  void stage2(double * cons, double * prims, double * aux, double dt);
150 
152 
164  void step(double * cons, double * prims, double * aux, double dt=0);
165 
166 };
167 
169 
189 class RK3 : public RKPlus
190 {
191  public:
192 
193  double
195  *u1cons,
196  *u1prims,
197  *u1aux,
198  *u2cons,
199  *u2prims,
200  *u2aux,
201  *rhs1,
202  *rhs2,
203  *rhs3;
205 
207 
219 
220  virtual ~RK3();
221 
223 
232  void stage1(double * cons, double * prims, double * aux, double dt);
233 
235 
244  void stage2(double * cons, double * prims, double * aux, double dt);
245 
247 
256  void stage3(double * cons, double * prims, double * aux, double dt);
257 
259 
271  void step(double * cons, double * prims, double * aux, double dt=0);
272 
273 };
274 
276 
307 class RK4 : public RKPlus
308 {
309  public:
310 
311 
312  double
314  *u1cons, *u1prims, *u1aux,
315  *u2cons, *u2prims, *u2aux,
316  *u3cons, *u3prims, *u3aux,
317  *u4cons, *u4prims, *u4aux,
318  *rhs1, *rhs2, *rhs3,
319  *rhs4, *rhs5;
321 
323 
335 
336  virtual ~RK4();
337 
339 
348  void stage1(double * cons, double * prims, double * aux, double dt);
349 
351 
360  void stage2(double * cons, double * prims, double * aux, double dt);
361 
363 
372  void stage3(double * cons, double * prims, double * aux, double dt);
373 
375 
384  void stage4(double * cons, double * prims, double * aux, double dt);
385 
387 
396  void stage5(double * cons, double * prims, double * aux, double dt);
397 
399 
411  void step(double * cons, double * prims, double * aux, double dt=0);
412 
413 };
414 
415 
417 
421 class RK4_10 : public RKPlus
422 {
423  public:
424 
425  // Need some work arrays
426  double
428  *u1cons, *u1prims, *u1aux,
429  *u2cons, *u2prims, *u2aux,
430  *rhs1;
432 
434 
446 
447  virtual ~RK4_10();
448 
450 
459  void prepare1(double * cons, double * prims, double * aux);
460 
462 
471  void prepare2(double * cons, double * prims, double * aux);
472 
474 
483  void stageRepeat(double * cons, double * prims, double * aux, double dt);
484 
486 
495  void stageFinal(double * cons, double * prims, double * aux, double dt);
496 
498 
510  void step(double * cons, double * prims, double * aux, double dt=0);
511 
512 };
513 
514 
515 #endif
virtual void rhs(double *cons, double *prims, double *aux, double *rhsVec)
Right-hand side evaluator.
virtual ~RKPlus()
Model * model
Pointer to Model object, contains governing equations and spectral decomposition. ...
Definition: timeInt.h:24
Third order RK.
Definition: RKPlus.h:189
double * u2prims
Work arrays for interstage results.
Definition: RKPlus.h:195
Second order RK.
Definition: RKPlus.h:97
Extension to the base physics model
Boundary Conditions
Definition: boundaryConds.h:13
Fourth order RK.
Definition: RKPlus.h:421
double * u4prims
Work arrays for interstage results.
Definition: RKPlus.h:314
double * fluxCont
Temporary work array to store numerical flux.
Definition: RKPlus.h:39
Data * data
Pointer to Data class containing global simulation data.
Definition: timeInt.h:22
FluxMethod * fluxMethod
Pointer to FluxMethod object.
Definition: timeInt.h:28
Physics model that we want to use
Definition: model.h:15
ModelExtension * modelExtension
Pointer to model extension class.
Definition: timeInt.h:30
Bcs * bcs
Pointer to boundary conditions, Bcs, object.
Definition: timeInt.h:26
RKPlus(Data *data, Model *model, Bcs *bcs, FluxMethod *fluxMethod, ModelExtension *modelExtension=NULL)
Constructor.
General form of the time integrator
Definition: timeInt.h:85
< Base for RKPlus classes
Definition: RKPlus.h:35
Abstract base class for flux reconstruction methods
Definition: flux.h:17
double * u1prims
Work arrays for interstage results.
Definition: RKPlus.h:104
Data object
Definition: simData.h:49
Fourth order RK.
Definition: RKPlus.h:307
virtual void step(double *cons, double *prims, double *aux, double dt=0)=0
Perform a single timestep on the conserved variables.
double * u2prims
Work arrays for interstage results.
Definition: RKPlus.h:428