9 #ifndef NUMERIC_INTERPOLATOR_NODEBILINEAR_H
10 #define NUMERIC_INTERPOLATOR_NODEBILINEAR_H
12 #include <AMReX_Box.H>
13 #include <AMReX_BCRec.H>
14 #include <AMReX_REAL.H>
15 #include <AMReX_GpuControl.H>
16 #include <AMReX_Interp_C.H>
17 #include <AMReX_Interpolater.H>
21 namespace Interpolator
28 void interp(
const amrex::BaseFab<T>& crse,
30 amrex::BaseFab<T>& fine,
33 const amrex::Box& fine_region,
34 const amrex::IntVect& ratio,
35 const amrex::Geometry& ,
36 const amrex::Geometry& ,
37 amrex::Vector<amrex::BCRec>
const& ,
44 int num_slope = ncomp * (AMREX_D_TERM(2, *2, *2) - 1);
45 const amrex::Box cslope_bx = amrex::enclosedCells(CoarseBox(fine_region, ratio));
46 amrex::BaseFab<T> slopefab(cslope_bx, num_slope);
50 amrex::Array4<T const>
const& crsearr = crse.const_array();
51 amrex::Array4<T>
const& finearr = fine.array();
52 amrex::Array4<T>
const& slopearr = slopefab.array();
54 AMREX_LAUNCH_HOST_DEVICE_LAMBDA_FLAG(runon, cslope_bx, tbx,
56 amrex::nodebilin_slopes<T>(tbx, slopearr, crsearr, crse_comp, ncomp, ratio);
59 AMREX_LAUNCH_HOST_DEVICE_LAMBDA_FLAG(runon, fine_region, tbx,
61 amrex::nodebilin_interp<T>(tbx, finearr, fine_comp, ncomp, slopearr, crsearr, crse_comp, ratio);
70 const amrex::IntVect& ,
71 const amrex::IArrayBox& ,
72 const amrex::Geometry& ,
73 const amrex::Geometry& ,
74 amrex::Vector<amrex::BCRec>
const& ,
78 Util::Abort(
"The version of this Interpolater for face-based data is not implemented or does not apply. Call 'interp' instead.");
81 using amrex::NodeBilinear::interp;
82 using amrex::NodeBilinear::interp_face;