From 5c16987ae3593f4f3f5f62704496ff1b31ee1c63 Mon Sep 17 00:00:00 2001 From: Brandon Runnels Date: Mon, 10 Feb 2025 11:00:01 -0600 Subject: [PATCH] Adding templating to the MFInterp functions --- Src/AmrCore/AMReX_MFInterp_1D_C.H | 35 ++++++++++++-------- Src/AmrCore/AMReX_MFInterp_2D_C.H | 55 ++++++++++++++++++------------- Src/AmrCore/AMReX_MFInterp_3D_C.H | 37 ++++++++++++--------- 3 files changed, 76 insertions(+), 51 deletions(-) diff --git a/Src/AmrCore/AMReX_MFInterp_1D_C.H b/Src/AmrCore/AMReX_MFInterp_1D_C.H index 2d52ca6d57f..7acef4dbdef 100644 --- a/Src/AmrCore/AMReX_MFInterp_1D_C.H +++ b/Src/AmrCore/AMReX_MFInterp_1D_C.H @@ -3,9 +3,10 @@ namespace amrex { +template AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE -void mf_cell_cons_lin_interp_limit_minmax_llslope (int i, int, int, Array4 const& slope, - Array4 const& u, int scomp, int ncomp, +void mf_cell_cons_lin_interp_limit_minmax_llslope (int i, int, int, Array4 const& slope, + Array4 const& u, int scomp, int ncomp, Box const& domain, IntVect const& ratio, BCRec const* bc) noexcept { Real sfx = Real(1.0); @@ -35,9 +36,10 @@ void mf_cell_cons_lin_interp_limit_minmax_llslope (int i, int, int, Array4 amrex::ignore_unused(ratio); } +template AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE -void mf_cell_cons_lin_interp_llslope (int i, int, int, Array4 const& slope, - Array4 const& u, int scomp, int ncomp, +void mf_cell_cons_lin_interp_llslope (int i, int, int, Array4 const& slope, + Array4 const& u, int scomp, int ncomp, Box const& domain, IntVect const& /*ratio*/, BCRec const* bc) noexcept { Real sfx = Real(1.0); @@ -62,10 +64,11 @@ void mf_cell_cons_lin_interp_llslope (int i, int, int, Array4 const& slope } } +template AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void mf_cell_cons_lin_interp_mcslope (int i, int /*j*/, int /*k*/, int ns, - Array4 const& slope, - Array4 const& u, int scomp, int /*ncomp*/, + Array4 const& slope, + Array4 const& u, int scomp, int /*ncomp*/, Box const& domain, IntVect const& ratio, BCRec const* bc) noexcept { @@ -98,10 +101,11 @@ void mf_cell_cons_lin_interp_mcslope (int i, int /*j*/, int /*k*/, int ns, slope(i,0,0,ns) = sx * alpha; } +template AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void mf_cell_cons_lin_interp (int i, int /*j*/, int /*k*/, int ns, - Array4 const& fine, int fcomp, - Array4 const& slope, Array4 const& crse, + Array4 const& fine, int fcomp, + Array4 const& slope, Array4 const& crse, int ccomp, int /*ncomp*/, IntVect const& ratio) noexcept { const int ic = amrex::coarsen(i, ratio[0]); @@ -110,9 +114,10 @@ void mf_cell_cons_lin_interp (int i, int /*j*/, int /*k*/, int ns, + xoff * slope(ic,0,0,ns); } +template AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE -void mf_cell_cons_lin_interp_mcslope_sph (int i, int ns, Array4 const& slope, - Array4 const& u, int scomp, int /*ncomp*/, +void mf_cell_cons_lin_interp_mcslope_sph (int i, int ns, Array4 const& slope, + Array4 const& u, int scomp, int /*ncomp*/, Box const& domain, IntVect const& ratio, BCRec const* bc, Real drf, Real rlo) noexcept { @@ -161,9 +166,10 @@ void mf_cell_cons_lin_interp_mcslope_sph (int i, int ns, Array4 const& slo slope(i,0,0,ns) = sx * alpha; } +template AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE -void mf_cell_cons_lin_interp_sph (int i, int ns, Array4 const& fine, int fcomp, - Array4 const& slope, Array4 const& crse, +void mf_cell_cons_lin_interp_sph (int i, int ns, Array4 const& fine, int fcomp, + Array4 const& slope, Array4 const& crse, int ccomp, int /*ncomp*/, IntVect const& ratio, Real drf, Real rlo) noexcept { const int ic = amrex::coarsen(i, ratio[0]); @@ -202,9 +208,10 @@ void mf_cell_bilin_interp (int i, int, int, int n, Array4 const& fine, int fc crse(ic+sx,0,0,n+ccomp)*(Real(1.0)-wx); } +template AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE -void mf_nodebilin_interp (int i, int, int, int n, Array4 const& fine, int fcomp, - Array4 const& crse, int ccomp, IntVect const& ratio) noexcept +void mf_nodebilin_interp (int i, int, int, int n, Array4 const& fine, int fcomp, + Array4 const& crse, int ccomp, IntVect const& ratio) noexcept { int ic = amrex::coarsen(i,ratio[0]); int ioff = i - ic*ratio[0]; diff --git a/Src/AmrCore/AMReX_MFInterp_2D_C.H b/Src/AmrCore/AMReX_MFInterp_2D_C.H index c51c37e4419..a8aa8d476f5 100644 --- a/Src/AmrCore/AMReX_MFInterp_2D_C.H +++ b/Src/AmrCore/AMReX_MFInterp_2D_C.H @@ -5,9 +5,10 @@ namespace amrex { +template AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE -void mf_cell_cons_lin_interp_limit_minmax_llslope (int i, int j, int, Array4 const& slope, - Array4 const& u, int scomp, int ncomp, +void mf_cell_cons_lin_interp_limit_minmax_llslope (int i, int j, int, Array4 const& slope, + Array4 const& u, int scomp, int ncomp, Box const& domain, IntVect const& ratio, BCRec const* bc) noexcept { Real sfx = Real(1.0); @@ -86,9 +87,10 @@ void mf_cell_cons_lin_interp_limit_minmax_llslope (int i, int j, int, Array4 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE -void mf_cell_cons_lin_interp_llslope (int i, int j, int, Array4 const& slope, - Array4 const& u, int scomp, int ncomp, +void mf_cell_cons_lin_interp_llslope (int i, int j, int, Array4 const& slope, + Array4 const& u, int scomp, int ncomp, Box const& domain, IntVect const& ratio, BCRec const* bc) noexcept { Real sfx = Real(1.0); @@ -134,9 +136,11 @@ void mf_cell_cons_lin_interp_llslope (int i, int j, int, Array4 const& slo } } + +template AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE -void mf_cell_cons_lin_interp_mcslope (int i, int j, int /*k*/, int ns, Array4 const& slope, - Array4 const& u, int scomp, int ncomp, +void mf_cell_cons_lin_interp_mcslope (int i, int j, int /*k*/, int ns, Array4 const& slope, + Array4 const& u, int scomp, int ncomp, Box const& domain, IntVect const& ratio, BCRec const* bc) noexcept { @@ -188,9 +192,10 @@ void mf_cell_cons_lin_interp_mcslope (int i, int j, int /*k*/, int ns, Array4 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE -void mf_cell_cons_lin_interp (int i, int j, int /*k*/, int ns, Array4 const& fine, int fcomp, - Array4 const& slope, Array4 const& crse, +void mf_cell_cons_lin_interp (int i, int j, int /*k*/, int ns, Array4 const& fine, int fcomp, + Array4 const& slope, Array4 const& crse, int ccomp, int ncomp, IntVect const& ratio) noexcept { const int ic = amrex::coarsen(i, ratio[0]); @@ -202,9 +207,10 @@ void mf_cell_cons_lin_interp (int i, int j, int /*k*/, int ns, Array4 cons + yoff * slope(ic,jc,0,ns+ncomp); } +template AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE -void mf_cell_cons_lin_interp_mcslope_rz (int i, int j, int ns, Array4 const& slope, - Array4 const& u, int scomp, int ncomp, +void mf_cell_cons_lin_interp_mcslope_rz (int i, int j, int ns, Array4 const& slope, + Array4 const& u, int scomp, int ncomp, Box const& domain, IntVect const& ratio, BCRec const* bc, Real drf, Real rlo) noexcept { @@ -273,9 +279,10 @@ void mf_cell_cons_lin_interp_mcslope_rz (int i, int j, int ns, Array4 cons slope(i,j,0,ns+ ncomp) = sy * alpha; } +template AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE -void mf_cell_cons_lin_interp_rz (int i, int j, int ns, Array4 const& fine, int fcomp, - Array4 const& slope, Array4 const& crse, +void mf_cell_cons_lin_interp_rz (int i, int j, int ns, Array4 const& fine, int fcomp, + Array4 const& slope, Array4 const& crse, int ccomp, int ncomp, IntVect const& ratio, Real drf, Real rlo) noexcept { const int ic = amrex::coarsen(i, ratio[0]); @@ -328,9 +335,10 @@ void mf_cell_bilin_interp (int i, int j, int, int n, Array4 const& fine, int crse(ic+sx,jc+sy,0,n+ccomp)*(Real(1.0)-wx)*(Real(1.0)-wy); } +template AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE -void mf_nodebilin_interp (int i, int j, int, int n, Array4 const& fine, int fcomp, - Array4 const& crse, int ccomp, IntVect const& ratio) noexcept +void mf_nodebilin_interp (int i, int j, int, int n, Array4 const& fine, int fcomp, + Array4 const& crse, int ccomp, IntVect const& ratio) noexcept { int ic = amrex::coarsen(i,ratio[0]); int jc = amrex::coarsen(j,ratio[1]); @@ -359,10 +367,11 @@ void mf_nodebilin_interp (int i, int j, int, int n, Array4 const& fine, in } } +template AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void mf_cell_quadratic_calcslope (int i, int j, int /*k*/, int n, - Array4 const& crse, int ccomp, - Array4 const& slope, + Array4 const& crse, int ccomp, + Array4 const& slope, Box const& domain, BCRec const* bc) noexcept { @@ -380,11 +389,12 @@ void mf_cell_quadratic_calcslope (int i, int j, int /*k*/, int n, slope(i,j,0,5*n+4) = sxy; // xy } +template AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void mf_cell_quadratic_interp (int i, int j, int /*k*/, int n, - Array4 const& fine, int fcomp, - Array4 const& crse, int ccomp, - Array4 const& slope, + Array4 const& fine, int fcomp, + Array4 const& crse, int ccomp, + Array4 const& slope, IntVect const& ratio) noexcept { int ic = amrex::coarsen(i, ratio[0]); @@ -404,11 +414,12 @@ void mf_cell_quadratic_interp (int i, int j, int /*k*/, int n, + xoff * yoff * slope(ic,jc,0,5*n+4); // xy } +template AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void mf_cell_quadratic_interp_rz (int i, int j, int /*k*/, int n, - Array4 const& fine, int fcomp, - Array4 const& crse, int ccomp, - Array4 const& slope, + Array4 const& fine, int fcomp, + Array4 const& crse, int ccomp, + Array4 const& slope, IntVect const& ratio, GeometryData const& cs_geomdata, GeometryData const& fn_geomdata) noexcept diff --git a/Src/AmrCore/AMReX_MFInterp_3D_C.H b/Src/AmrCore/AMReX_MFInterp_3D_C.H index 4d2e92ae3ed..9dce87dc9d4 100644 --- a/Src/AmrCore/AMReX_MFInterp_3D_C.H +++ b/Src/AmrCore/AMReX_MFInterp_3D_C.H @@ -3,9 +3,10 @@ namespace amrex { +template AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE -void mf_cell_cons_lin_interp_limit_minmax_llslope (int i, int j, int k, Array4 const& slope, - Array4 const& u, int scomp, int ncomp, +void mf_cell_cons_lin_interp_limit_minmax_llslope (int i, int j, int k, Array4 const& slope, + Array4 const& u, int scomp, int ncomp, Box const& domain, IntVect const& ratio, BCRec const* bc) noexcept { Real sfx = Real(1.0); @@ -107,9 +108,10 @@ void mf_cell_cons_lin_interp_limit_minmax_llslope (int i, int j, int k, Array4 AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE -void mf_cell_cons_lin_interp_llslope (int i, int j, int k, Array4 const& slope, - Array4 const& u, int scomp, int ncomp, +void mf_cell_cons_lin_interp_llslope (int i, int j, int k, Array4 const& slope, + Array4 const& u, int scomp, int ncomp, Box const& domain, IntVect const& ratio, BCRec const* bc) noexcept { Real sfx = Real(1.0); @@ -174,9 +176,10 @@ void mf_cell_cons_lin_interp_llslope (int i, int j, int k, Array4 const& s } } +template AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE -void mf_cell_cons_lin_interp_mcslope (int i, int j, int k, int ns, Array4 const& slope, - Array4 const& u, int scomp, int ncomp, +void mf_cell_cons_lin_interp_mcslope (int i, int j, int k, int ns, Array4 const& slope, + Array4 const& u, int scomp, int ncomp, Box const& domain, IntVect const& ratio, BCRec const* bc) noexcept { @@ -242,9 +245,10 @@ void mf_cell_cons_lin_interp_mcslope (int i, int j, int k, int ns, Array4 slope(i,j,k,ns+2*ncomp) = sz * alpha; } +template AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE -void mf_cell_cons_lin_interp (int i, int j, int k, int ns, Array4 const& fine, int fcomp, - Array4 const& slope, Array4 const& crse, +void mf_cell_cons_lin_interp (int i, int j, int k, int ns, Array4 const& fine, int fcomp, + Array4 const& slope, Array4 const& crse, int ccomp, int ncomp, IntVect const& ratio) noexcept { const int ic = amrex::coarsen(i, ratio[0]); @@ -304,9 +308,10 @@ void mf_cell_bilin_interp (int i, int j, int k, int n, Array4 const& fine, in crse(ic+sx,jc+sy,kc+sz,n+ccomp)*(Real(1.0)-wx)*(Real(1.0)-wy)*(Real(1.0)-wz); } +template AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE -void mf_nodebilin_interp (int i, int j, int k, int n, Array4 const& fine, int fcomp, - Array4 const& crse, int ccomp, IntVect const& ratio) noexcept +void mf_nodebilin_interp (int i, int j, int k, int n, Array4 const& fine, int fcomp, + Array4 const& crse, int ccomp, IntVect const& ratio) noexcept { int ic = amrex::coarsen(i,ratio[0]); int jc = amrex::coarsen(j,ratio[1]); @@ -367,10 +372,11 @@ void mf_nodebilin_interp (int i, int j, int k, int n, Array4 const& fine, } } +template AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void mf_cell_quadratic_calcslope (int i, int j, int k, int n, - Array4 const& crse, int ccomp, - Array4 const& slope, + Array4 const& crse, int ccomp, + Array4 const& slope, Box const& domain, BCRec const* bc) noexcept { @@ -396,11 +402,12 @@ void mf_cell_quadratic_calcslope (int i, int j, int k, int n, slope(i,j,k,9*n+8) = syz; // yz } +template AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void mf_cell_quadratic_interp (int i, int j, int k, int n, - Array4 const& fine, int fcomp, - Array4 const& crse, int ccomp, - Array4 const& slope, + Array4 const& fine, int fcomp, + Array4 const& crse, int ccomp, + Array4 const& slope, IntVect const& ratio) noexcept { int ic = amrex::coarsen(i, ratio[0]);