79 bool periodic,
bool flip_lon,
bool flip_lat,
80 amrex::Real lt, amrex::Real pt, amrex::Real tol)
87 m = amrex::max(0,
bracket(lon, nlon, lt));
89 const Real right = (m == nlon-1) ? lon[0] + Real(360.0) : lon[m+1];
90 p = (lt - lon[m]) / (right - lon[m]);
92 inside = (lt >= lon[0] - tol) && (lt <= lon[nlon-1] + tol);
93 m = amrex::min(amrex::max(
bracket(lon, nlon, lt), 0), nlon-2);
95 p = (lt - lon[m]) / (lon[m2] - lon[m]);
97 inside = inside && (pt >= lat[0] - tol) && (pt <= lat[nlat-1] + tol);
98 const int n = amrex::min(amrex::max(
bracket(lat, nlat, pt), 0), nlat-2);
100 Real q = (pt - lat[n]) / (lat[n2] - lat[n]);
101 p = amrex::min(amrex::max(p, Real(0.0)), Real(1.0));
102 q = amrex::min(amrex::max(q, Real(0.0)), Real(1.0));
104 const int fm = flip_lon ? nlon-1-m : m;
105 const int fm2 = flip_lon ? nlon-1-m2 : m2;
106 const int fn = flip_lat ? nlat-1-n : n;
107 const int fn2 = flip_lat ? nlat-1-n2 : n2;
110 s.
i[0] = fm;
s.i[1] = fm2;
s.i[2] = fm2;
s.i[3] = fm;
111 s.j[0] = fn;
s.j[1] = fn;
s.j[2] = fn2;
s.j[3] = fn2;
112 s.w[0] = (Real(1.0)-p)*(Real(1.0)-q);
113 s.w[1] = p*(Real(1.0)-q);
115 s.w[3] = (Real(1.0)-p)*q;