1 #ifndef ERF_INTERPOLATION_UTILS_H
2 #define ERF_INTERPOLATION_UTILS_H
4 #include <AMReX_FArrayBox.H>
5 #include <AMReX_GpuContainers.H>
6 #include <AMReX_REAL.H>
7 #include <AMReX_Array4.H>
17 namespace Interpolation {
22 template <
typename ParticleType>
23 AMREX_GPU_DEVICE AMREX_FORCE_INLINE
25 const ParticleType&
p,
26 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& plo,
27 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& dxi,
28 const amrex::Array4<const amrex::Real>* field_arrays,
29 amrex::ParticleReal* result_values,
32 for (
int i = 0; i < num_fields; ++i) {
33 cic_interpolate(
p, plo, dxi, field_arrays[i], &result_values[i], 1);
44 template <
typename ParticleType,
typename Array4Type>
45 AMREX_GPU_DEVICE AMREX_FORCE_INLINE
47 const ParticleType&
p,
48 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& plo,
49 const amrex::GpuArray<amrex::Real, AMREX_SPACEDIM>& dxi,
50 const Array4Type& zheight
53 const int pk = int(amrex::Math::floor((
p.pos(AMREX_SPACEDIM-1) - plo[AMREX_SPACEDIM-1])
54 * dxi[AMREX_SPACEDIM-1]));
55 return (pk < zheight.begin[2] || pk + 2 >= zheight.end[2]);
AMREX_GPU_DEVICE AMREX_FORCE_INLINE bool stencilOutOfBoundsZ(const ParticleType &p, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > &plo, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > &dxi, const Array4Type &zheight) noexcept
Test whether a particle's vertical CIC stencil reads past the local fab. cic_interpolate reads cell-c...
Definition: ERF_InterpolationUtils.H:46
AMREX_GPU_DEVICE AMREX_FORCE_INLINE void interpolateFields(const ParticleType &p, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > &plo, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > &dxi, const amrex::Array4< const amrex::Real > *field_arrays, amrex::ParticleReal *result_values, int num_fields)
Interpolate multiple field values at a particle position using CIC.
Definition: ERF_InterpolationUtils.H:24
Definition: ERF_InterpolationUtils.H:16
@ p
Definition: ERF_WSM6.H:191