1#ifndef AMREX_GPU_RANGE_H_
2#define AMREX_GPU_RANGE_H_
3#include <AMReX_Config.H>
14template <std::
integral T>
15bool isEmpty (T n)
noexcept {
return n <= 0; }
23namespace range_detail {
26template <std::
integral T>
28Long size (T
const& b)
noexcept {
return static_cast<Long
>(b); }
30template <std::
integral T>
41 amrex::ignore_unused(b);
51 auto iv = b.atOffset(
offset);
52 return BoxND<dim>(iv,iv,b.ixType());
64 explicit range_impl (T
const& b) noexcept : m_b(b), m_n(range_detail::size(b)) {}
67 range_impl (T
const& b, Long gid, Long grange) noexcept
68 : m_b(b), m_n(range_detail::size(b)), m_gid(gid), m_grange(grange) {}
74 iterator (T
const& b, Long i, Long s) noexcept : mi_b(&b), mi_i(i), mi_s(s) {}
77 void operator++ () noexcept { mi_i += mi_s; }
80 bool operator!= (iterator
const& rhs)
const noexcept {
return mi_i < rhs.mi_i; }
83 T operator* () const noexcept {
return range_detail::at(*mi_b,mi_i); }
92 iterator
begin () const noexcept {
93#if defined (__SYCL_DEVICE_ONLY__)
94 return iterator(m_b, m_gid, m_grange);
97 return iterator(m_b, blockDim.x*blockIdx.x+threadIdx.x, blockDim.x*gridDim.x);
100 return iterator(m_b,0,1);
106 iterator
end () const noexcept {
return iterator(m_b,m_n,0); }
121range_detail::range_impl<T>
Range (T
const& b, Long gid, Long grange)
noexcept {
122 return range_detail::range_impl<T>(b,gid,grange);
128range_detail::range_impl<T>
Range (T
const& b)
noexcept {
return range_detail::range_impl<T>(b); }
#define AMREX_FORCE_INLINE
Definition AMReX_Extension.H:119
#define AMREX_IF_ON_DEVICE(CODE)
Definition AMReX_GpuQualifiers.H:56
#define AMREX_IF_ON_HOST(CODE)
Definition AMReX_GpuQualifiers.H:58
#define AMREX_GPU_HOST_DEVICE
Definition AMReX_GpuQualifiers.H:20
Array4< int const > offset
Definition AMReX_HypreMLABecLap.cpp:1139
A Rectangular Domain on an Integer Lattice.
Definition AMReX_Box.H:49
amrex_long Long
Definition AMReX_INT.H:30
__host__ __device__ range_detail::range_impl< T > Range(T const &b) noexcept
Definition AMReX_GpuRange.H:128
Definition AMReX_Amr.cpp:50
__host__ __device__ Dim3 begin(BoxND< dim > const &box) noexcept
Definition AMReX_Box.H:2018
bool isEmpty(T n) noexcept
Definition AMReX_GpuRange.H:15
__host__ __device__ Dim3 end(BoxND< dim > const &box) noexcept
Definition AMReX_Box.H:2028