ERF
Energy Research and Forecasting: An Atmospheric Modeling Code
ERF_Interpolation.H File Reference
Include dependency graph for ERF_Interpolation.H:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Functions

AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real interpolatedVal (amrex::Real avg1, amrex::Real avg2, amrex::Real avg3, amrex::Real diff1, amrex::Real diff2, amrex::Real diff3, amrex::Real scaled_upw, const AdvType adv_type)
 
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real InterpolateInX (int i, int j, int k, const amrex::Array4< const amrex::Real > &qty, int qty_index, amrex::Real upw, const AdvType adv_type)
 
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real InterpolateInY (int i, int j, int k, const amrex::Array4< const amrex::Real > &qty, int qty_index, amrex::Real upw, const AdvType adv_type)
 
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real InterpolateInZ (int i, int j, int k, const amrex::Array4< const amrex::Real > &qty, int qty_index, amrex::Real upw, const AdvType adv_type)
 
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real InterpolatePertFromCell (int i, int j, int k, const amrex::Array4< const amrex::Real > &qty, int qty_index, amrex::Real upw, Coord coordDir, const AdvType adv_type, const amrex::Array4< const amrex::Real > &r0_arr)
 
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real InterpolateDensityPertFromCellToFace (int i, int j, int k, const amrex::Array4< const amrex::Real > &cons_in, amrex::Real upw, Coord coordDir, const AdvType adv_type, const amrex::Array4< const amrex::Real > &r0_arr)
 

Function Documentation

◆ InterpolateDensityPertFromCellToFace()

AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real InterpolateDensityPertFromCellToFace ( int  i,
int  j,
int  k,
const amrex::Array4< const amrex::Real > &  cons_in,
amrex::Real  upw,
Coord  coordDir,
const AdvType  adv_type,
const amrex::Array4< const amrex::Real > &  r0_arr 
)
204 {
205  return InterpolatePertFromCell(i, j, k, cons_in, Rho_comp, upw, coordDir, adv_type, r0_arr);
206 }
#define Rho_comp
Definition: ERF_IndexDefines.H:36
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real InterpolatePertFromCell(int i, int j, int k, const amrex::Array4< const amrex::Real > &qty, int qty_index, amrex::Real upw, Coord coordDir, const AdvType adv_type, const amrex::Array4< const amrex::Real > &r0_arr)
Definition: ERF_Interpolation.H:129
Here is the call graph for this function:

◆ interpolatedVal()

AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real interpolatedVal ( amrex::Real  avg1,
amrex::Real  avg2,
amrex::Real  avg3,
amrex::Real  diff1,
amrex::Real  diff2,
amrex::Real  diff3,
amrex::Real  scaled_upw,
const AdvType  adv_type 
)

Interpolation operators used in construction of advective fluxes using non-WENO schemes

19 {
20  amrex::Real myInterpolatedVal(0.);
21  if (adv_type == AdvType::Centered_2nd) {
22  myInterpolatedVal = 0.5 * avg1;
23  } else if (adv_type == AdvType::Upwind_3rd) {
24  myInterpolatedVal = (7.0/12.0)*avg1 -(1.0/12.0)*avg2 + (scaled_upw/12.0)*(diff2 - 3.0*diff1);
25  } else if (adv_type == AdvType::Centered_4th) {
26  myInterpolatedVal = (7.0/12.0)*avg1 -(1.0/12.0)*avg2;
27  } else if (adv_type == AdvType::Upwind_5th) {
28  myInterpolatedVal = (37.0/60.0)*avg1 -(2.0/15.0)*avg2 +(1.0/60.0)*avg3
29  -(scaled_upw/60.0)*(diff3 - 5.0*diff2 + 10.0*diff1);
30  } else if (adv_type == AdvType::Centered_6th) {
31  myInterpolatedVal = (37.0/60.0)*avg1 -(2.0/15.0)*avg2 +(1.0/60.0)*avg3;
32  }
33  return myInterpolatedVal;
34 }
@ Centered_4th
@ Centered_6th
@ Centered_2nd

Referenced by InterpolateInX(), InterpolateInY(), InterpolateInZ(), and InterpolatePertFromCell().

Here is the caller graph for this function:

◆ InterpolateInX()

AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real InterpolateInX ( int  i,
int  j,
int  k,
const amrex::Array4< const amrex::Real > &  qty,
int  qty_index,
amrex::Real  upw,
const AdvType  adv_type 
)
41 {
42 
43  if (adv_type == AdvType::Centered_2nd) {
44  return 0.5 * (qty(i,j,k,qty_index) + qty(i-1,j,k,qty_index));
45  } else {
46 
47  amrex::Real avg1 = 0.; amrex::Real avg2 = 0.; amrex::Real avg3 = 0.;
48  amrex::Real diff1 = 0.; amrex::Real diff2 = 0.; amrex::Real diff3 = 0.;
49  amrex::Real scaled_upw = 0.;
50  //
51  // The value that comes in has not been normalized so we do that here
52  if (upw != 0.) { scaled_upw = (upw > 0) ? 1. : -1.; }
53 
54  avg1 = (qty(i, j, k, qty_index) + qty(i-1, j, k, qty_index));
55  diff1 = (qty(i, j, k, qty_index) - qty(i-1, j, k, qty_index));
56  avg2 = (qty(i+1, j, k, qty_index) + qty(i-2, j, k, qty_index));
57  diff2 = (qty(i+1, j, k, qty_index) - qty(i-2, j, k, qty_index));
58  if (adv_type == AdvType::Upwind_5th || adv_type == AdvType::Centered_6th)
59  {
60  avg3 = (qty(i+2, j, k, qty_index) + qty(i-3, j, k, qty_index));
61  diff3 = (qty(i+2, j, k, qty_index) - qty(i-3, j, k, qty_index));
62  }
63  return interpolatedVal(avg1,avg2,avg3,diff1,diff2,diff3,scaled_upw,adv_type);
64  }
65 }
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real interpolatedVal(amrex::Real avg1, amrex::Real avg2, amrex::Real avg3, amrex::Real diff1, amrex::Real diff2, amrex::Real diff3, amrex::Real scaled_upw, const AdvType adv_type)
Definition: ERF_Interpolation.H:16
Here is the call graph for this function:

◆ InterpolateInY()

AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real InterpolateInY ( int  i,
int  j,
int  k,
const amrex::Array4< const amrex::Real > &  qty,
int  qty_index,
amrex::Real  upw,
const AdvType  adv_type 
)
72 {
73  if (adv_type == AdvType::Centered_2nd) {
74  return 0.5 * (qty(i,j,k,qty_index) + qty(i,j-1,k,qty_index));
75  } else {
76 
77  amrex::Real avg1; amrex::Real avg2; amrex::Real avg3 = 0.;
78  amrex::Real diff1; amrex::Real diff2; amrex::Real diff3 = 0.;
79  amrex::Real scaled_upw = 0.;
80 
81  // The value that comes in has not been normalized so we do that here
82  if (upw != 0.) { scaled_upw = (upw > 0) ? 1. : -1.; }
83 
84  avg1 = (qty(i, j , k, qty_index) + qty(i, j-1, k, qty_index));
85  diff1 = (qty(i, j , k, qty_index) - qty(i, j-1, k, qty_index));
86  avg2 = (qty(i, j+1, k, qty_index) + qty(i, j-2, k, qty_index));
87  diff2 = (qty(i, j+1, k, qty_index) - qty(i, j-2, k, qty_index));
88  if (adv_type == AdvType::Upwind_5th || adv_type == AdvType::Centered_6th)
89  {
90  avg3 = (qty(i, j+2, k, qty_index) + qty(i, j-3, k, qty_index));
91  diff3 = (qty(i, j+2, k, qty_index) - qty(i, j-3, k, qty_index));
92  }
93  return interpolatedVal(avg1,avg2,avg3,diff1,diff2,diff3,scaled_upw,adv_type);
94  }
95 }
Here is the call graph for this function:

◆ InterpolateInZ()

AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real InterpolateInZ ( int  i,
int  j,
int  k,
const amrex::Array4< const amrex::Real > &  qty,
int  qty_index,
amrex::Real  upw,
const AdvType  adv_type 
)
102 {
103  if (adv_type == AdvType::Centered_2nd) {
104  return 0.5 * (qty(i,j,k,qty_index) + qty(i,j,k-1,qty_index));
105  } else {
106 
107  amrex::Real avg1 = 0.; amrex::Real avg2 = 0.; amrex::Real avg3 = 0.;
108  amrex::Real diff1 = 0.; amrex::Real diff2 = 0.; amrex::Real diff3 = 0.;
109  amrex::Real scaled_upw = 0.;
110  // The value that comes in has not been normalized so we do that here
111  if (upw != 0.) { scaled_upw = (upw > 0) ? 1. : -1.; }
112 
113  avg1 = (qty(i, j, k , qty_index) + qty(i, j, k-1, qty_index));
114  diff1 = (qty(i, j, k , qty_index) - qty(i, j, k-1, qty_index));
115  avg2 = (qty(i, j, k+1, qty_index) + qty(i, j, k-2, qty_index));
116  diff2 = (qty(i, j, k+1, qty_index) - qty(i, j, k-2, qty_index));
117  if (adv_type == AdvType::Upwind_5th || adv_type == AdvType::Centered_6th)
118  {
119  avg3 = (qty(i, j, k+2, qty_index) + qty(i, j, k-3, qty_index));
120  diff3 = (qty(i, j, k+2, qty_index) - qty(i, j, k-3, qty_index));
121  }
122  return interpolatedVal(avg1,avg2,avg3,diff1,diff2,diff3,scaled_upw,adv_type);
123  }
124 }
Here is the call graph for this function:

◆ InterpolatePertFromCell()

AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real InterpolatePertFromCell ( int  i,
int  j,
int  k,
const amrex::Array4< const amrex::Real > &  qty,
int  qty_index,
amrex::Real  upw,
Coord  coordDir,
const AdvType  adv_type,
const amrex::Array4< const amrex::Real > &  r0_arr 
)
133 {
134  amrex::Real avg1 = 0.; amrex::Real avg2 = 0.; amrex::Real avg3 = 0.;
135  amrex::Real diff1 = 0.; amrex::Real diff2 = 0.; amrex::Real diff3 = 0.;
136  amrex::Real scaled_upw = 0.;
137 
138  // The value that comes in has not been normalized so we do that here
139  if (upw != 0.) { scaled_upw = (upw > 0) ? 1. : -1.; }
140 
141  if (coordDir == Coord::x) {
142  avg1 = (qty(i , j, k, qty_index) + qty(i-1, j, k, qty_index));
143  avg1 -= (r0_arr(i,j,k) + r0_arr(i-1,j,k));
144  diff1 = (qty(i , j, k, qty_index) - qty(i-1, j, k, qty_index));
145  if (adv_type != AdvType::Centered_2nd)
146  {
147  avg2 = (qty(i+1, j, k, qty_index) + qty(i-2, j, k, qty_index));
148  avg2 -= (r0_arr(i+1,j,k) + r0_arr(i-2,j,k));
149  diff2 = (qty(i+1, j, k, qty_index) - qty(i-2, j, k, qty_index));
150  }
151  if (adv_type == AdvType::Upwind_5th || adv_type == AdvType::Centered_6th)
152  {
153  avg3 = (qty(i+2, j, k, qty_index) + qty(i-3, j, k, qty_index));
154  avg3 -= (r0_arr(i+2,j,k) + r0_arr(i-3,j,k));
155  diff3 = (qty(i+2, j, k, qty_index) - qty(i-3, j, k, qty_index));
156  }
157  } else if (coordDir == Coord::y) {
158  avg1 = (qty(i, j , k, qty_index) + qty(i, j-1, k, qty_index));
159  avg1 -= (r0_arr(i,j,k) + r0_arr(i,j-1,k));
160  diff1 = (qty(i, j , k, qty_index) - qty(i, j-1, k, qty_index));
161  if (adv_type != AdvType::Centered_2nd)
162  {
163  avg2 = (qty(i, j+1, k, qty_index) + qty(i, j-2, k, qty_index));
164  avg2 -= (r0_arr(i,j+1,k) + r0_arr(i,j-2,k));
165  diff2 = (qty(i, j+1, k, qty_index) - qty(i, j-2, k, qty_index));
166  }
167  if (adv_type == AdvType::Upwind_5th || adv_type == AdvType::Centered_6th)
168  {
169  avg3 = (qty(i, j+2, k, qty_index) + qty(i, j-3, k, qty_index));
170  avg3 -= (r0_arr(i,j+2,k) + r0_arr(i,j-3,k));
171  diff3 = (qty(i, j+2, k, qty_index) - qty(i, j-3, k, qty_index));
172  }
173  } else {
174  avg1 = (qty(i, j, k , qty_index) + qty(i, j, k-1, qty_index));
175  diff1 = (qty(i, j, k , qty_index) - qty(i, j, k-1, qty_index));
176  avg1 -= (r0_arr(i,j,k) + r0_arr(i,j,k-1));
177  diff1 -= (r0_arr(i,j,k) - r0_arr(i,j,k-1));
178 
179  if (adv_type != AdvType::Centered_2nd)
180  {
181  avg2 = (qty(i, j, k+1, qty_index) + qty(i, j, k-2, qty_index));
182  diff2 = (qty(i, j, k+1, qty_index) - qty(i, j, k-2, qty_index));
183  avg2 -= (r0_arr(i,j,k+1) + r0_arr(i,j,k-2));
184  diff2 -= (r0_arr(i,j,k+1) - r0_arr(i,j,k-2));
185  }
186  if (adv_type == AdvType::Upwind_5th || adv_type == AdvType::Centered_6th)
187  {
188  avg3 = (qty(i, j, k+2, qty_index) + qty(i, j, k-3, qty_index));
189  diff3 = (qty(i, j, k+2, qty_index) - qty(i, j, k-3, qty_index));
190  avg3 -= (r0_arr(i,j,k+2) + r0_arr(i,j,k-3));
191  diff3 -= (r0_arr(i,j,k+2) - r0_arr(i,j,k-3));
192  }
193  }
194 
195  return interpolatedVal(avg1,avg2,avg3,diff1,diff2,diff3,scaled_upw,adv_type);
196 }

Referenced by InterpolateDensityPertFromCellToFace().

Here is the call graph for this function:
Here is the caller graph for this function: