1 #ifndef ERF_INTERPOLATE_BILINEAR_H_
2 #define ERF_INTERPOLATE_BILINEAR_H_
4 #include "AMReX_GpuPrint.H"
18 int si = k*nx*ny + j*nx + i;
30 return amrex::max(0, amrex::min(idx, npts - 2));
37 return (xhi > xlo) ? (
x - xlo) / (xhi - xlo) :
amrex::Real(0);
44 const int nx,
const int ny,
const int nz,
59 if (x_interp < xvec[0]) x_interp = xvec[0];
60 if (x_interp > xvec[nx-1]) x_interp = xvec[nx-1];
62 if (y_interp < yvec[0]) y_interp = yvec[0];
63 if (y_interp > yvec[ny-1]) y_interp = yvec[ny-1];
65 if (z_interp < zvec[0]) z_interp = zvec[0];
66 if (z_interp > zvec[nz-1]) z_interp = zvec[nz-1];
68 int iloc =
clamp_interp_index(
static_cast<int>(std::floor((x_interp - xvec[0]) / dxvec)), nx);
69 int jloc =
clamp_interp_index(
static_cast<int>(std::floor((y_interp - yvec[0]) / dyvec)), ny);
74 for (
int k = 1; k < nz; ++k) {
75 if (zvec[k] >= z_interp) {
82 int ihi = (nx > 1) ? iloc + 1 : iloc;
83 int jhi = (ny > 1) ? jloc + 1 : jloc;
84 int khi = (nz > 1) ? kloc + 1 : kloc;
103 tmp_var = (1-w_x)*(1-w_y)*(1-w_z)*varvec[ind0] + w_x*(1-w_y)*(1-w_z)*varvec[ind1] +
104 w_x*w_y*(1-w_z)*varvec[ind2] + (1-w_x)*w_y*(1-w_z)*varvec[ind3] +
105 (1-w_x)*(1-w_y)*w_z*varvec[ind4] + w_x*(1-w_y)*w_z*varvec[ind5] +
106 w_x*w_y*w_z*varvec[ind6] + (1-w_x)*w_y*w_z*varvec[ind7];
120 amrex::Real ic_real = (
x - prob_lo_crse[0]) / dx_crse[0];
121 amrex::Real jc_real = (
y - prob_lo_crse[1]) / dx_crse[1];
122 amrex::Real kc_real = (
z - prob_lo_crse[2]) / dx_crse[2];
124 int ic =
static_cast<int>(amrex::Math::floor(ic_real));
125 int jc =
static_cast<int>(amrex::Math::floor(jc_real));
126 int kc =
static_cast<int>(amrex::Math::floor(kc_real));
140 amrex::Real v111 = crse(ic + 1, jc + 1, kc + 1, n);
143 v100 *
dx * (1 -
dy) * (1 -
dz) +
144 v010 * (1 -
dx) *
dy * (1 -
dz) +
145 v110 *
dx *
dy * (1 -
dz) +
146 v001 * (1 -
dx) * (1 -
dy) *
dz +
147 v101 *
dx * (1 -
dy) *
dz +
148 v011 * (1 -
dx) *
dy *
dz +
155 AMREX_GPU_HOST_DEVICE
158 const int nx,
const int ny,
179 int ihi = (nx > 1) ? iloc + 1 : iloc;
180 int jhi = (ny > 1) ? jloc + 1 : jloc;
193 tmp_var = (1-w_x)*(1-w_y)*varvec[ind0] + w_x*(1-w_y)*varvec[ind1] +
194 w_x*w_y*varvec[ind2] + (1-w_x)*w_y*varvec[ind3];
const Real dy
Definition: ERF_InitCustomPert_ABL.H:24
const Real dx
Definition: ERF_InitCustomPert_ABL.H:23
const int khi
Definition: ERF_InitCustomPert_Bubble.H:21
const Real dz
Definition: ERF_InitCustomPert_Bubble.H:25
AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE void bilinear_interpolation_2d(const amrex::Real *xvec, const amrex::Real *yvec, const amrex::Real dxvec, const amrex::Real dyvec, const int nx, const int ny, amrex::Real x, amrex::Real y, const amrex::Real *varvec, amrex::Real &tmp_var)
Definition: ERF_Interpolation_Bilinear.H:156
AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE int get_single_index(int i, int j, int k, int nx, int ny)
Definition: ERF_Interpolation_Bilinear.H:14
AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE int clamp_interp_index(int idx, int npts)
Definition: ERF_Interpolation_Bilinear.H:24
AMREX_GPU_DEVICE amrex::Real interpolate_from_coarse(const amrex::Array4< const amrex::Real > &crse, int n, amrex::Real x, amrex::Real y, amrex::Real z, const amrex::Real *prob_lo_crse, const amrex::Real *dx_crse)
Definition: ERF_Interpolation_Bilinear.H:113
AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE void bilinear_interpolation(const amrex::Real *xvec, const amrex::Real *yvec, const amrex::Real *zvec, const amrex::Real dxvec, const amrex::Real dyvec, const int nx, const int ny, const int nz, const amrex::Real x, const amrex::Real y, const amrex::Real z, const amrex::Real *varvec, amrex::Real &tmp_var)
Definition: ERF_Interpolation_Bilinear.H:42
AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE amrex::Real get_interp_weight(amrex::Real x, amrex::Real xlo, amrex::Real xhi)
Definition: ERF_Interpolation_Bilinear.H:35
amrex::Real Real
Definition: ERF_ShocInterface.H:19