HyPar  1.0
Finite-Difference Hyperbolic-Parabolic PDE Solver on Cartesian Grids
interpolation.h
Go to the documentation of this file.
1 
6 #ifndef _INTERP_H_
7 #define _INTERP_H_
8 
9 #include "basic.h"
10 
12 #define _FIRST_ORDER_UPWIND_ "1"
13 
14 #define _SECOND_ORDER_CENTRAL_ "2"
15 
16 #define _SECOND_ORDER_MUSCL_ "muscl2"
17 
18 #define _THIRD_ORDER_MUSCL_ "muscl3"
19 
20 #define _FOURTH_ORDER_CENTRAL_ "4"
21 
22 #define _FIFTH_ORDER_UPWIND_ "upw5"
23 
24 #define _FIFTH_ORDER_COMPACT_UPWIND_ "cupw5"
25 
26 #define _FIFTH_ORDER_WENO_ "weno5"
27 
28 #define _FIFTH_ORDER_CRWENO_ "crweno5"
29 
30 #define _FIFTH_ORDER_HCWENO_ "hcweno5"
31 
32 /* interpolation type definitions */
33 #define _CHARACTERISTIC_ "characteristic"
34 #define _COMPONENTS_ "components"
36 /*
37  One-dimensional Interpolation Functions:-
38  Functions to interpolate the primitive of a function at interfaces from its
39  cell-centered values.
40 
41  Arguments:-
42 
43  fI double* array of size (N+1) in the interpolation direction; will contain
44  the interpolated interface function primitive
45  (**needs to be allocated by the calling function)
46  (**does not have ghost points))
47 
48  fC double* array of size (N+2*ghosts) in the interpolation direction of the
49  cell centered function values
50  (**does have ghost points))
51 
52  u double* used only by the characteristic-based interpolation schemes
53  array of size (N+2*ghosts) in the interpolation direction of the
54  cell centered conserved variable (needed to calculate the eigen-
55  decomposition at the interfaces)
56 
57  x double* grid point locations along the 1D line on which the interpolation
58  is being carried out
59  array of size (N+2*ghosts)
60  Used only by non-uniform-grid interpolation schemes
61 
62  upw int upwind direction for non-central schemes
63  (1 -> left biased, -1 -> right biased)
64 
65  dir int direction/dimension along which to carry out interpolation for
66  multi-dimensional domains
67  (eg: 0 for 1D; 0 or 1 for 2D; 0,1 or 2 for 3D)
68 
69  s void* object of type depending on the main solver, should have at least
70  the following data:
71  + ghosts : number of ghosts points in the domain
72  + ndims : number of dimensions
73  + nvars : number of variables per grid point
74  (i.e. size of vector variable being interpolated)
75  + dim_local : local (of this process) dimensions of the domain
76  (integer array of size ndims, with the number of
77  points in each dimension as elements)
78  m void* object containing MPI domain decomposition related variables
79  (this information is used only by compact interpolation schemes)
80 
81  uflag int flag to indicate where the flux function or the solution function
82  is being interpolated
83  (1 -> u; 0 -> f(u) )
84 
85  Notes:
86  + arrangement of points along the direction of interpolation is
87 
88  |<--ghosts-->|0 1 2 ..(interior).. N-1|<--ghosts-->|
89 
90  + number of interfaces are one more than number of interior points
91  + interface i lies between grid points i-1+ghosts and i+ghosts
92 
93  0 1 2 ..... .... N-3 N-2 N-1
94  | x | x | x | x | x | x | x | x | x | x | x | x | x |
95  0 1 2 ... ... ... N-2 N-1 N
96 
97  Returns 0 on normal execution, non-zero on error.
98 */
99 
100 #ifdef __cplusplus
101 extern "C" {
102 #endif
103 
104 /* functions to interpolate the first primitive in a component-wise way
105  (for conservative discretization of the 1st derivative) on a uniform grid */
107 int Interp1PrimFirstOrderUpwind (double*,double*,double*,double*,int,int,void*,void*,int);
109 int Interp1PrimSecondOrderCentral (double*,double*,double*,double*,int,int,void*,void*,int);
111 int Interp1PrimSecondOrderMUSCL (double*,double*,double*,double*,int,int,void*,void*,int);
113 int Interp1PrimThirdOrderMUSCL (double*,double*,double*,double*,int,int,void*,void*,int);
115 int Interp1PrimFourthOrderCentral (double*,double*,double*,double*,int,int,void*,void*,int);
117 int Interp1PrimFifthOrderUpwind (double*,double*,double*,double*,int,int,void*,void*,int);
119 int Interp1PrimFifthOrderCompactUpwind (double*,double*,double*,double*,int,int,void*,void*,int);
121 int Interp1PrimFifthOrderWENO (double*,double*,double*,double*,int,int,void*,void*,int);
123 int Interp1PrimFifthOrderCRWENO (double*,double*,double*,double*,int,int,void*,void*,int);
125 int Interp1PrimFifthOrderHCWENO (double*,double*,double*,double*,int,int,void*,void*,int);
126 
127 #if defined(HAVE_CUDA)
128 
129 int gpuInterp1PrimFifthOrderWENO (double*,double*,double*,double*,int,int,void*,void*,int);
130 #endif
131 
132 /* functions to interpolate the first primitive in a characteristic-based way
133  (for conservative discretization of the 1st derivative) on a uniform grid */
135 int Interp1PrimFirstOrderUpwindChar (double*,double*,double*,double*,int,int,void*,void*,int);
137 int Interp1PrimSecondOrderCentralChar (double*,double*,double*,double*,int,int,void*,void*,int);
139 int Interp1PrimSecondOrderMUSCLChar (double*,double*,double*,double*,int,int,void*,void*,int);
141 int Interp1PrimThirdOrderMUSCLChar (double*,double*,double*,double*,int,int,void*,void*,int);
143 int Interp1PrimFourthOrderCentralChar (double*,double*,double*,double*,int,int,void*,void*,int);
145 int Interp1PrimFifthOrderUpwindChar (double*,double*,double*,double*,int,int,void*,void*,int);
147 int Interp1PrimFifthOrderCompactUpwindChar(double*,double*,double*,double*,int,int,void*,void*,int);
149 int Interp1PrimFifthOrderWENOChar (double*,double*,double*,double*,int,int,void*,void*,int);
151 int Interp1PrimFifthOrderCRWENOChar (double*,double*,double*,double*,int,int,void*,void*,int);
153 int Interp1PrimFifthOrderHCWENOChar (double*,double*,double*,double*,int,int,void*,void*,int);
154 
155 /* functions to interpolate the second primitive
156  (for conservative discretization of the 2nd derivative) */
158 int Interp2PrimSecondOrder (double*,double*,int,void*,void*);
159 
161 int InterpSetLimiterVar(double*,double*,double*,int,void*,void*);
162 
163 #ifdef __cplusplus
164 }
165 #endif
166 
175 typedef struct paramters_muscl {
176 
177  char limiter_type[_MAX_STRING_SIZE_];
178  double eps;
181  double (*LimiterFunction) (double);
182 
184 int MUSCLInitialize(void*,void*);
185 
194 typedef struct parameters_weno {
195  int mapped;
196  int borges;
197  int yc;
199  double eps;
200  double p;
201  double tol;
203  /* hybrid compact-WENO scheme related parameters
204  * **References**:
205  * + http://dx.doi.org/10.1006/jcph.2002.7021
206  * + http://dx.doi.org/10.1016/j.jcp.2003.07.006
207  */
208  double rc,
209  xi;
211  /* Arrays to save the WENO weights */
212  double *w1,
213  *w2,
214  *w3;
215  /* size and offset for the WENO weights arrays */
216  int *offset ,
217  size ;
218 
220 
222 int WENOInitialize(void*,void*,char*,char*);
224 int WENOCleanup(void*, int);
225 
226 /* define optimal weights */
228 #define _WENO_OPTIMAL_WEIGHT_1_ 0.1
229 
230 #define _WENO_OPTIMAL_WEIGHT_2_ 0.6
231 
232 #define _WENO_OPTIMAL_WEIGHT_3_ 0.3
233 
234 #define _CRWENO_OPTIMAL_WEIGHT_1_ 0.2
235 
236 #define _CRWENO_OPTIMAL_WEIGHT_2_ 0.5
237 
238 #define _CRWENO_OPTIMAL_WEIGHT_3_ 0.3
239 
265 #define _WENOWeights_v_JS_(w1,w2,w3,c1,c2,c3,m3,m2,m1,p1,p2,eps,N) \
266  { \
267  int idx; \
268  /* calculate smoothness indicators and the WENO weights */\
269  double b1, b2, b3, a1, a2, a3, a_sum_inv; \
270  for (idx=0; idx<N; idx++) { \
271  b1 = thirteen_by_twelve*(m3[idx]-2*m2[idx]+m1[idx])*(m3[idx]-2*m2[idx]+m1[idx]) \
272  + one_fourth*(m3[idx]-4*m2[idx]+3*m1[idx])*(m3[idx]-4*m2[idx]+3*m1[idx]); \
273  a1 = c1 / ( (b1+eps) * (b1+eps) ); \
274  b2 = thirteen_by_twelve*(m2[idx]-2*m1[idx]+p1[idx])*(m2[idx]-2*m1[idx]+p1[idx]) \
275  + one_fourth*(m2[idx]-p1[idx])*(m2[idx]-p1[idx]); \
276  a2 = c2 / ( (b2+eps) * (b2+eps) ); \
277  b3 = thirteen_by_twelve*(m1[idx]-2*p1[idx]+p2[idx])*(m1[idx]-2*p1[idx]+p2[idx]) \
278  + one_fourth*(3*m1[idx]-4*p1[idx]+p2[idx])*(3*m1[idx]-4*p1[idx]+p2[idx]); \
279  a3 = c3 / ( (b3+eps) * (b3+eps) ); \
280  a_sum_inv = 1.0 / (a1 + a2 + a3); \
281  w1[idx] = a1 * a_sum_inv; \
282  w2[idx] = a2 * a_sum_inv; \
283  w3[idx] = a3 * a_sum_inv; \
284  } \
285  }
286 
314 #define _WENOWeights_v_M_(w1,w2,w3,c1,c2,c3,m3,m2,m1,p1,p2,eps,N) \
315  { \
316  int idx; \
317  /* calculate smoothness indicators and the WENO weights */\
318  double b1, b2, b3, a1, a2, a3, a_sum_inv; \
319  for (idx=0; idx<N; idx++) { \
320  b1 = thirteen_by_twelve*(m3[idx]-2*m2[idx]+m1[idx])*(m3[idx]-2*m2[idx]+m1[idx]) \
321  + one_fourth*(m3[idx]-4*m2[idx]+3*m1[idx])*(m3[idx]-4*m2[idx]+3*m1[idx]); \
322  a1 = c1 / ( (b1+eps) * (b1+eps) ); \
323  b2 = thirteen_by_twelve*(m2[idx]-2*m1[idx]+p1[idx])*(m2[idx]-2*m1[idx]+p1[idx]) \
324  + one_fourth*(m2[idx]-p1[idx])*(m2[idx]-p1[idx]); \
325  a2 = c2 / ( (b2+eps) * (b2+eps) ); \
326  b3 = thirteen_by_twelve*(m1[idx]-2*p1[idx]+p2[idx])*(m1[idx]-2*p1[idx]+p2[idx]) \
327  + one_fourth*(3*m1[idx]-4*p1[idx]+p2[idx])*(3*m1[idx]-4*p1[idx]+p2[idx]); \
328  a3 = c3 / ( (b3+eps) * (b3+eps) ); \
329  a_sum_inv = 1.0 / (a1 + a2 + a3); \
330  w1[idx] = a1 * a_sum_inv; \
331  w2[idx] = a2 * a_sum_inv; \
332  w3[idx] = a3 * a_sum_inv; \
333  a1 = w1[idx] * (c1 + c1*c1 - 3*c1*w1[idx] + w1[idx]*w1[idx]) / (c1*c1 + w1[idx]*(1.0-2.0*c1)); \
334  a2 = w2[idx] * (c2 + c2*c2 - 3*c2*w2[idx] + w2[idx]*w2[idx]) / (c2*c2 + w2[idx]*(1.0-2.0*c2)); \
335  a3 = w3[idx] * (c3 + c3*c3 - 3*c3*w3[idx] + w3[idx]*w3[idx]) / (c3*c3 + w3[idx]*(1.0-2.0*c3)); \
336  a_sum_inv = 1.0 / (a1 + a2 + a3); \
337  w1[idx] = a1 * a_sum_inv; \
338  w2[idx] = a2 * a_sum_inv; \
339  w3[idx] = a3 * a_sum_inv; \
340  } \
341  }
342 
370 #define _WENOWeights_v_M_Scalar_(w1,w2,w3,c1,c2,c3,m3,m2,m1,p1,p2,eps,idx) \
371  { \
372  /* calculate smoothness indicators and the WENO weights */\
373  double b1, b2, b3, a1, a2, a3, a_sum_inv; \
374  b1 = thirteen_by_twelve*(m3[idx]-2*m2[idx]+m1[idx])*(m3[idx]-2*m2[idx]+m1[idx]) \
375  + one_fourth*(m3[idx]-4*m2[idx]+3*m1[idx])*(m3[idx]-4*m2[idx]+3*m1[idx]); \
376  a1 = c1 / ( (b1+eps) * (b1+eps) ); \
377  b2 = thirteen_by_twelve*(m2[idx]-2*m1[idx]+p1[idx])*(m2[idx]-2*m1[idx]+p1[idx]) \
378  + one_fourth*(m2[idx]-p1[idx])*(m2[idx]-p1[idx]); \
379  a2 = c2 / ( (b2+eps) * (b2+eps) ); \
380  b3 = thirteen_by_twelve*(m1[idx]-2*p1[idx]+p2[idx])*(m1[idx]-2*p1[idx]+p2[idx]) \
381  + one_fourth*(3*m1[idx]-4*p1[idx]+p2[idx])*(3*m1[idx]-4*p1[idx]+p2[idx]); \
382  a3 = c3 / ( (b3+eps) * (b3+eps) ); \
383  a_sum_inv = 1.0 / (a1 + a2 + a3); \
384  w1[idx] = a1 * a_sum_inv; \
385  w2[idx] = a2 * a_sum_inv; \
386  w3[idx] = a3 * a_sum_inv; \
387  a1 = w1[idx] * (c1 + c1*c1 - 3*c1*w1[idx] + w1[idx]*w1[idx]) / (c1*c1 + w1[idx]*(1.0-2.0*c1)); \
388  a2 = w2[idx] * (c2 + c2*c2 - 3*c2*w2[idx] + w2[idx]*w2[idx]) / (c2*c2 + w2[idx]*(1.0-2.0*c2)); \
389  a3 = w3[idx] * (c3 + c3*c3 - 3*c3*w3[idx] + w3[idx]*w3[idx]) / (c3*c3 + w3[idx]*(1.0-2.0*c3)); \
390  a_sum_inv = 1.0 / (a1 + a2 + a3); \
391  w1[idx] = a1 * a_sum_inv; \
392  w2[idx] = a2 * a_sum_inv; \
393  w3[idx] = a3 * a_sum_inv; \
394  }
395 
426 #define _WENOWeights_v_Z_(w1,w2,w3,c1,c2,c3,m3,m2,m1,p1,p2,eps,N) \
427  { \
428  int idx; \
429  /* calculate smoothness indicators and the WENO weights */\
430  double b1, b2, b3, a1, a2, a3, a_sum_inv, tau; \
431  for (idx=0; idx<N; idx++) { \
432  b1 = thirteen_by_twelve*(m3[idx]-2*m2[idx]+m1[idx])*(m3[idx]-2*m2[idx]+m1[idx]) \
433  + one_fourth*(m3[idx]-4*m2[idx]+3*m1[idx])*(m3[idx]-4*m2[idx]+3*m1[idx]); \
434  b2 = thirteen_by_twelve*(m2[idx]-2*m1[idx]+p1[idx])*(m2[idx]-2*m1[idx]+p1[idx]) \
435  + one_fourth*(m2[idx]-p1[idx])*(m2[idx]-p1[idx]); \
436  b3 = thirteen_by_twelve*(m1[idx]-2*p1[idx]+p2[idx])*(m1[idx]-2*p1[idx]+p2[idx]) \
437  + one_fourth*(3*m1[idx]-4*p1[idx]+p2[idx])*(3*m1[idx]-4*p1[idx]+p2[idx]); \
438  tau = absolute(b3 - b1); \
439  a1 = c1 * (1.0 + (tau/(b1+eps)) * (tau/(b1+eps)) ); \
440  a2 = c2 * (1.0 + (tau/(b2+eps)) * (tau/(b2+eps)) ); \
441  a3 = c3 * (1.0 + (tau/(b3+eps)) * (tau/(b3+eps)) ); \
442  a_sum_inv = 1.0 / (a1 + a2 + a3); \
443  w1[idx] = a1 * a_sum_inv; \
444  w2[idx] = a2 * a_sum_inv; \
445  w3[idx] = a3 * a_sum_inv; \
446  } \
447  }
448 
479 #define _WENOWeights_v_YC_(w1,w2,w3,c1,c2,c3,m3,m2,m1,p1,p2,eps,N) \
480  { \
481  int idx; \
482  /* calculate smoothness indicators and the WENO weights */\
483  double b1, b2, b3, a1, a2, a3, a_sum_inv, tau; \
484  for (idx=0; idx<N; idx++) { \
485  b1 = thirteen_by_twelve*(m3[idx]-2*m2[idx]+m1[idx])*(m3[idx]-2*m2[idx]+m1[idx]) \
486  + one_fourth*(m3[idx]-4*m2[idx]+3*m1[idx])*(m3[idx]-4*m2[idx]+3*m1[idx]); \
487  b2 = thirteen_by_twelve*(m2[idx]-2*m1[idx]+p1[idx])*(m2[idx]-2*m1[idx]+p1[idx]) \
488  + one_fourth*(m2[idx]-p1[idx])*(m2[idx]-p1[idx]); \
489  b3 = thirteen_by_twelve*(m1[idx]-2*p1[idx]+p2[idx])*(m1[idx]-2*p1[idx]+p2[idx]) \
490  + one_fourth*(3*m1[idx]-4*p1[idx]+p2[idx])*(3*m1[idx]-4*p1[idx]+p2[idx]); \
491  tau = (m3[idx]-4*m2[idx]+6*m1[idx]-4*p1[idx]+p2[idx])*(m3[idx]-4*m2[idx]+6*m1[idx]-4*p1[idx]+p2[idx]); \
492  a1 = c1 * (1.0 + (tau/(b1+eps)) * (tau/(b1+eps)) ); \
493  a2 = c2 * (1.0 + (tau/(b2+eps)) * (tau/(b2+eps)) ); \
494  a3 = c3 * (1.0 + (tau/(b3+eps)) * (tau/(b3+eps)) ); \
495  a_sum_inv = 1.0 / (a1 + a2 + a3); \
496  w1[idx] = a1 * a_sum_inv; \
497  w2[idx] = a2 * a_sum_inv; \
498  w3[idx] = a3 * a_sum_inv; \
499  } \
500  }
501 
532 #define _WENOWeights_v_YC_Scalar_(w1,w2,w3,c1,c2,c3,m3,m2,m1,p1,p2,eps,idx) \
533  { \
534  /* calculate smoothness indicators and the WENO weights */\
535  double b1, b2, b3, a1, a2, a3, a_sum_inv, tau; \
536  b1 = thirteen_by_twelve*(m3[idx]-2*m2[idx]+m1[idx])*(m3[idx]-2*m2[idx]+m1[idx]) \
537  + one_fourth*(m3[idx]-4*m2[idx]+3*m1[idx])*(m3[idx]-4*m2[idx]+3*m1[idx]); \
538  b2 = thirteen_by_twelve*(m2[idx]-2*m1[idx]+p1[idx])*(m2[idx]-2*m1[idx]+p1[idx]) \
539  + one_fourth*(m2[idx]-p1[idx])*(m2[idx]-p1[idx]); \
540  b3 = thirteen_by_twelve*(m1[idx]-2*p1[idx]+p2[idx])*(m1[idx]-2*p1[idx]+p2[idx]) \
541  + one_fourth*(3*m1[idx]-4*p1[idx]+p2[idx])*(3*m1[idx]-4*p1[idx]+p2[idx]); \
542  tau = (m3[idx]-4*m2[idx]+6*m1[idx]-4*p1[idx]+p2[idx])*(m3[idx]-4*m2[idx]+6*m1[idx]-4*p1[idx]+p2[idx]); \
543  a1 = c1 * (1.0 + (tau/(b1+eps)) * (tau/(b1+eps)) ); \
544  a2 = c2 * (1.0 + (tau/(b2+eps)) * (tau/(b2+eps)) ); \
545  a3 = c3 * (1.0 + (tau/(b3+eps)) * (tau/(b3+eps)) ); \
546  a_sum_inv = 1.0 / (a1 + a2 + a3); \
547  w1[idx] = a1 * a_sum_inv; \
548  w2[idx] = a2 * a_sum_inv; \
549  w3[idx] = a3 * a_sum_inv; \
550  }
551 
560 typedef struct compact_scheme {
561 
562  double *A,
563  *B,
564  *C,
565  *R;
566  /* CRWENO scheme: buffer arrays for sending and receiving data */
567  double *sendbuf,
568  *recvbuf;
570 } CompactScheme;
571 
573 int CompactSchemeInitialize(void*,void*,char*);
575 int CompactSchemeCleanup(void*);
576 
577 #endif
int Interp1PrimSecondOrderCentral(double *, double *, double *, double *, int, int, void *, void *, int)
2nd order central reconstruction (component-wise) on a uniform grid
int WENOCleanup(void *, int)
Definition: WENOCleanup.c:17
int InterpSetLimiterVar(double *, double *, double *, int, void *, void *)
int Interp1PrimFifthOrderCRWENOChar(double *, double *, double *, double *, int, int, void *, void *, int)
5th order CRWENO reconstruction (characteristic-based) on a uniform grid
int Interp1PrimFifthOrderCRWENO(double *, double *, double *, double *, int, int, void *, void *, int)
5th order CRWENO reconstruction (component-wise) on a uniform grid
int Interp1PrimSecondOrderMUSCL(double *, double *, double *, double *, int, int, void *, void *, int)
2nd order MUSCL scheme (component-wise) on a uniform grid
int Interp1PrimFifthOrderCompactUpwindChar(double *, double *, double *, double *, int, int, void *, void *, int)
5th order compact upwind reconstruction (characteristic-based) on a uniform grid
int WENOInitialize(void *, void *, char *, char *)
int Interp1PrimFifthOrderUpwindChar(double *, double *, double *, double *, int, int, void *, void *, int)
5th order upwind reconstruction (characteristic-based) on a uniform grid
int Interp1PrimSecondOrderMUSCLChar(double *, double *, double *, double *, int, int, void *, void *, int)
2nd order MUSCL scheme (characteristic-based) on a uniform grid
int Interp1PrimFifthOrderUpwind(double *, double *, double *, double *, int, int, void *, void *, int)
5th order upwind reconstruction (component-wise) on a uniform grid
Some basic definitions and macros.
int MUSCLInitialize(void *, void *)
int Interp1PrimFifthOrderHCWENO(double *, double *, double *, double *, int, int, void *, void *, int)
5th order hybrid compact-WENO reconstruction (component-wise) on a uniform grid
int CompactSchemeInitialize(void *, void *, char *)
#define _MAX_STRING_SIZE_
Definition: basic.h:14
int Interp1PrimFirstOrderUpwindChar(double *, double *, double *, double *, int, int, void *, void *, int)
1st order upwind reconstruction (characteristic-based) on a uniform grid
int Interp1PrimFifthOrderWENOChar(double *, double *, double *, double *, int, int, void *, void *, int)
5th order WENO reconstruction (characteristic-based) on a uniform grid
int Interp1PrimThirdOrderMUSCLChar(double *, double *, double *, double *, int, int, void *, void *, int)
3rd order MUSCL scheme with Koren&#39;s limiter (characteristic-based) on a uniform grid ...
int Interp1PrimFourthOrderCentral(double *, double *, double *, double *, int, int, void *, void *, int)
4th order central reconstruction (component-wise) on a uniform grid
Structure of variables/parameters needed by the WENO-type scheme.
Structure of variables/parameters needed by the compact schemes.
int CompactSchemeCleanup(void *)
int Interp1PrimFifthOrderHCWENOChar(double *, double *, double *, double *, int, int, void *, void *, int)
5th order hybrid compact-WENO reconstruction (characteristic-based) on a uniform grid ...
int Interp1PrimSecondOrderCentralChar(double *, double *, double *, double *, int, int, void *, void *, int)
2nd order central reconstruction (characteristic-based) on a uniform grid
Structure of variables/parameters needed by the MUSCL scheme.
int Interp1PrimFifthOrderCompactUpwind(double *, double *, double *, double *, int, int, void *, void *, int)
5th order compact upwind reconstruction (component-wise) on a uniform grid
int Interp1PrimFourthOrderCentralChar(double *, double *, double *, double *, int, int, void *, void *, int)
4th order central reconstruction (characteristic-based) on a uniform grid
int Interp2PrimSecondOrder(double *, double *, int, void *, void *)
2nd order component-wise interpolation of the 2nd primitive on a uniform grid
int Interp1PrimThirdOrderMUSCL(double *, double *, double *, double *, int, int, void *, void *, int)
3rd order MUSCL scheme with Koren&#39;s limiter (component-wise) on a uniform grid
double * sendbuf
int gpuInterp1PrimFifthOrderWENO(double *, double *, double *, double *, int, int, void *, void *, int)
int Interp1PrimFifthOrderWENO(double *, double *, double *, double *, int, int, void *, void *, int)
5th order WENO reconstruction (component-wise) on a uniform grid
int Interp1PrimFirstOrderUpwind(double *, double *, double *, double *, int, int, void *, void *, int)
1st order upwind reconstruction (component-wise) on a uniform grid