1 #ifndef ERF_INTERPOLATE_BILINEAR_H_
2 #define ERF_INTERPOLATE_BILINEAR_H_
17 int si = k*nx*ny + j*nx + i;
24 const amrex::Real dxvec,
const amrex::Real dyvec,
25 const int nx,
const int ny,
const int nz,
26 const amrex::Real x,
const amrex::Real y,
const amrex::Real z,
27 const amrex::Real* varvec,
30 int iloc=-1, jloc=-1, kloc=-1;
31 for(
int k=0;k<nz;k++){
36 else if (zvec[k] ==
z) {
41 iloc = std::floor((
x-xvec[0])/dxvec);
42 jloc = std::floor((
y-yvec[0])/dyvec);
44 if(iloc > nx-1 or iloc < 0 or
45 jloc > ny-1 or iloc < 0 or
46 kloc > nz-1 or kloc < 0){
49 amrex::Real xlo = xvec[0] + iloc*dxvec;
50 amrex::Real ylo = yvec[0] + jloc*dyvec;
51 amrex::Real zlo = zvec[kloc];
53 amrex::Real w_x = (
x - xlo)/dxvec;
54 amrex::Real w_y = (
y - ylo)/dyvec;
55 amrex::Real w_z = (
z - zlo)/(zvec[kloc+1] - zvec[kloc]);
66 tmp_var = (1-w_x)*(1-w_y)*(1-w_z)*varvec[ind0] + w_x*(1-w_y)*(1-w_z)*varvec[ind1] +
67 w_x*w_y*(1-w_z)*varvec[ind2] + (1-w_x)*w_y*(1-w_z)*varvec[ind3] +
68 (1-w_x)*(1-w_y)*w_z*varvec[ind4] + w_x*(1-w_y)*w_z*varvec[ind5] +
69 w_x*w_y*w_z*varvec[ind6] + (1-w_x)*w_y*w_z*varvec[ind7];
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:13
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:23