METHOD
weno.h
Go to the documentation of this file.
1 #ifndef WENO_H
2 #define WENO_H
3 
4 /*
5  This header provides and API for any order WENO reconstruction. The
6  coefficients are copmuted using Ian's weno-coefficients.ipynb, which
7  autogenerates the code for wenoUpwinds.h and wenoUpwinds.cc.
8 */
9 
10 
11 #include "simData.h"
12 #include <stdexcept>
13 
15 
20 class WenoBase
21 {
22  public:
23 
24  Data * data;
25 
26  int order;
27  int shift;
28 
30 
35  WenoBase(Data * data, int order);
36 
37 
38  virtual ~WenoBase() { }
39 
41 
52  virtual double upwindX(double * arr, int var, int i, int j, int k) = 0;
53 
55 
66  virtual double upwindY(double * arr, int var, int i, int j, int k) = 0;
67 
69 
80  virtual double upwindZ(double * arr, int var, int i, int j, int k) = 0;
81 
83 
94  virtual double downwindX(double * arr, int var, int i, int j, int k) = 0;
95 
97 
108  virtual double downwindY(double * arr, int var, int i, int j, int k) = 0;
109 
111 
122  virtual double downwindZ(double * arr, int var, int i, int j, int k) = 0;
123 
125 
134  virtual void reconstructUpwind(double * arr, double * recon, int nvars, int dir);
135 
137 
146  virtual void reconstructDownwind(double * arr, double * recon, int nvars, int dir);
147 
149 
154  virtual void checkSufficientGhostZones();
155 
156 };
157 
158 
159 class Weno3 : public WenoBase
160 {
161  public:
162  Weno3(Data * data) : WenoBase(data, 3) { }
163 
164  virtual ~Weno3() { }
165 
167 
178  virtual double upwindX(double * arr, int var, int i, int j, int k);
179 
181 
192  virtual double upwindY(double * arr, int var, int i, int j, int k);
193 
195 
206  virtual double upwindZ(double * arr, int var, int i, int j, int k);
207 
209 
220  virtual double downwindX(double * arr, int var, int i, int j, int k);
221 
223 
234  virtual double downwindY(double * arr, int var, int i, int j, int k);
235 
237 
248  virtual double downwindZ(double * arr, int var, int i, int j, int k);
249 
250 };
251 
252 
253 class Weno5 : public WenoBase
254 {
255  public:
256  Weno5(Data * data) : WenoBase(data, 5) { }
257 
258  virtual ~Weno5() { }
259 
261 
272  virtual double upwindX(double * arr, int var, int i, int j, int k);
273 
275 
286  virtual double upwindY(double * arr, int var, int i, int j, int k);
287 
289 
300  virtual double upwindZ(double * arr, int var, int i, int j, int k);
301 
303 
314  virtual double downwindX(double * arr, int var, int i, int j, int k);
315 
317 
328  virtual double downwindY(double * arr, int var, int i, int j, int k);
329 
331 
342  virtual double downwindZ(double * arr, int var, int i, int j, int k);
343 
344 };
345 
346 class Weno7 : public WenoBase
347 {
348  public:
349  Weno7(Data * data) : WenoBase(data, 7) { }
350 
351  virtual ~Weno7() { }
352 
354 
365  virtual double upwindX(double * arr, int var, int i, int j, int k);
366 
368 
379  virtual double upwindY(double * arr, int var, int i, int j, int k);
380 
382 
393  virtual double upwindZ(double * arr, int var, int i, int j, int k);
394 
396 
407  virtual double downwindX(double * arr, int var, int i, int j, int k);
408 
410 
421  virtual double downwindY(double * arr, int var, int i, int j, int k);
422 
424 
435  virtual double downwindZ(double * arr, int var, int i, int j, int k);
436 
437 };
438 
439 class Weno9 : public WenoBase
440 {
441  public:
442  Weno9(Data * data) : WenoBase(data, 9) { }
443 
444  virtual ~Weno9() { }
445 
447 
458  virtual double upwindX(double * arr, int var, int i, int j, int k);
459 
461 
472  virtual double upwindY(double * arr, int var, int i, int j, int k);
473 
475 
486  virtual double upwindZ(double * arr, int var, int i, int j, int k);
487 
489 
500  virtual double downwindX(double * arr, int var, int i, int j, int k);
501 
503 
514  virtual double downwindY(double * arr, int var, int i, int j, int k);
515 
517 
528  virtual double downwindZ(double * arr, int var, int i, int j, int k);
529 
530 };
531 
532 class Weno11 : public WenoBase
533 {
534  public:
535  Weno11(Data * data) : WenoBase(data, 11) { }
536 
537  virtual ~Weno11() { }
538 
540 
551  virtual double upwindX(double * arr, int var, int i, int j, int k);
552 
554 
565  virtual double upwindY(double * arr, int var, int i, int j, int k);
566 
568 
579  virtual double upwindZ(double * arr, int var, int i, int j, int k);
580 
582 
593  virtual double downwindX(double * arr, int var, int i, int j, int k);
594 
596 
607  virtual double downwindY(double * arr, int var, int i, int j, int k);
608 
610 
621  virtual double downwindZ(double * arr, int var, int i, int j, int k);
622 
623 };
624 
625 #endif
virtual double downwindX(double *arr, int var, int i, int j, int k)=0
Downwind reconstruction in y-dir.
virtual void reconstructDownwind(double *arr, double *recon, int nvars, int dir)
Check number of ghost cells.
int shift
Shift = (order+1)/2.
Definition: weno.h:27
virtual ~WenoBase()
Destructor.
Definition: weno.h:38
virtual ~Weno5()
Destructor.
Definition: weno.h:258
virtual double downwindZ(double *arr, int var, int i, int j, int k)=0
Upwind reconstruction.
< Base class for Weno reconstructions
Definition: weno.h:20
virtual double downwindY(double *arr, int var, int i, int j, int k)=0
Downwind reconstruction in z-dir.
int order
Order of reconstruction and number of buffers for this scheme (should be 1 more than data->Ng) ...
Definition: weno.h:26
Weno7(Data *data)
Definition: weno.h:349
Definition: weno.h:253
virtual ~Weno7()
Destructor.
Definition: weno.h:351
virtual ~Weno3()
Destructor.
Definition: weno.h:164
virtual void reconstructUpwind(double *arr, double *recon, int nvars, int dir)
Downwind reconstruction.
Weno5(Data *data)
Definition: weno.h:256
WenoBase(Data *data, int order)
Definition: weno.h:439
Weno3(Data *data)
Definition: weno.h:162
virtual ~Weno9()
Destructor.
Definition: weno.h:444
Weno11(Data *data)
Definition: weno.h:535
Data * data
Pointer to Data class containing global simulation data.
Definition: weno.h:24
virtual double upwindX(double *arr, int var, int i, int j, int k)=0
Upwind reconstruction in y-dir.
virtual void checkSufficientGhostZones()
Definition: weno.h:532
virtual double upwindZ(double *arr, int var, int i, int j, int k)=0
Downwind reconstruction in x-dir.
Data object
Definition: simData.h:49
Definition: weno.h:159
virtual ~Weno11()
Destructor.
Definition: weno.h:537
Definition: weno.h:346
virtual double upwindY(double *arr, int var, int i, int j, int k)=0
Upwind reconstruction in z-dir.
Weno9(Data *data)
Definition: weno.h:442