Block-Structured AMR Software Framework
Loading...
Searching...
No Matches
AMReX_Loop.H File Reference
#include <AMReX_Config.H>
#include <AMReX_Box.H>
#include <AMReX_ConstexprFor.H>
#include <AMReX_Extension.H>
#include <AMReX_Loop.nolint.H>

Go to the source code of this file.

Namespaces

namespace  amrex

Macros

#define AMREX_LOOP_3D(bx, i, j, k, block)
#define AMREX_LOOP_4D(bx, ncomp, i, j, k, n, block)

Functions

template<class F>
__host__ __device__ void amrex::Loop (Dim3 lo, Dim3 hi, F const &f) noexcept
template<class F>
__host__ __device__ void amrex::Loop (Dim3 lo, Dim3 hi, int ncomp, F const &f) noexcept
template<class F>
__host__ __device__ void amrex::LoopConcurrent (Dim3 lo, Dim3 hi, F const &f) noexcept
template<class F>
__host__ __device__ void amrex::LoopConcurrent (Dim3 lo, Dim3 hi, int ncomp, F const &f) noexcept
template<class F, int dim>
__host__ __device__ void amrex::Loop (BoxND< dim > const &bx, F const &f) noexcept
template<class F, int dim>
__host__ __device__ void amrex::Loop (BoxND< dim > const &bx, int ncomp, F const &f) noexcept
template<class F, int dim>
__host__ __device__ void amrex::LoopConcurrent (BoxND< dim > const &bx, F const &f) noexcept
template<class F, int dim>
__host__ __device__ void amrex::LoopConcurrent (BoxND< dim > const &bx, int ncomp, F const &f) noexcept
template<class F>
void amrex::LoopOnCpu (Dim3 lo, Dim3 hi, F const &f) noexcept
template<class F>
void amrex::LoopOnCpu (Dim3 lo, Dim3 hi, int ncomp, F const &f) noexcept
template<class F>
void amrex::LoopConcurrentOnCpu (Dim3 lo, Dim3 hi, F const &f) noexcept
template<class F>
void amrex::LoopConcurrentOnCpu (Dim3 lo, Dim3 hi, int ncomp, F const &f) noexcept
template<class F, int dim>
void amrex::LoopOnCpu (BoxND< dim > const &bx, F const &f) noexcept
template<class F, int dim>
void amrex::LoopOnCpu (BoxND< dim > const &bx, int ncomp, F const &f) noexcept
template<class F, int dim>
void amrex::LoopConcurrentOnCpu (BoxND< dim > const &bx, F const &f) noexcept
template<class F, int dim>
void amrex::LoopConcurrentOnCpu (BoxND< dim > const &bx, int ncomp, F const &f) noexcept

Macro Definition Documentation

◆ AMREX_LOOP_3D

#define AMREX_LOOP_3D ( bx,
i,
j,
k,
block )
Value:
{ \
const auto amrex_i_lo = amrex::lbound(bx); \
const auto amrex_i_hi = amrex::ubound(bx); \
for (int k = amrex_i_lo.z; k <= amrex_i_hi.z; ++k) { \
for (int j = amrex_i_lo.y; j <= amrex_i_hi.y; ++j) { \
for (int i = amrex_i_lo.x; i <= amrex_i_hi.x; ++i) { \
AMREX_D_PICK(amrex::ignore_unused(j,k),amrex::ignore_unused(k),(void)0); \
block \
}}} \
}
__host__ __device__ Dim3 ubound(Array4< T > const &a) noexcept
Return the inclusive upper bounds of an Array4 in Dim3 form.
Definition AMReX_Array4.H:1365
__host__ __device__ Dim3 lbound(Array4< T > const &a) noexcept
Return the inclusive lower bounds of an Array4 in Dim3 form.
Definition AMReX_Array4.H:1351
__host__ __device__ void ignore_unused(const Ts &...)
No-op helper that marks variables as intentionally unused.
Definition AMReX.H:273

◆ AMREX_LOOP_4D

#define AMREX_LOOP_4D ( bx,
ncomp,
i,
j,
k,
n,
block )
Value:
{ \
const auto amrex_i_lo = amrex::lbound(bx); \
const auto amrex_i_hi = amrex::ubound(bx); \
for (int n = 0; n < ncomp; ++n) { \
for (int k = amrex_i_lo.z; k <= amrex_i_hi.z; ++k) { \
for (int j = amrex_i_lo.y; j <= amrex_i_hi.y; ++j) { \
for (int i = amrex_i_lo.x; i <= amrex_i_hi.x; ++i) { \
AMREX_D_PICK(amrex::ignore_unused(j,k),amrex::ignore_unused(k),(void)0); \
block \
}}}} \
}