Block-Structured AMR Software Framework
Loading...
Searching...
No Matches
AMReX_Reduce.H File Reference
#include <AMReX_Config.H>
#include <AMReX_Gpu.H>
#include <AMReX_Arena.H>
#include <AMReX_OpenMP.H>
#include <AMReX_MFIter.H>
#include <AMReX_TypeList.H>
#include <AMReX_ValLocPair.H>
#include <algorithm>
#include <functional>
#include <limits>

Go to the source code of this file.

Classes

struct  amrex::ReduceOpSum
 
struct  amrex::ReduceOpMin
 
struct  amrex::ReduceOpMax
 
struct  amrex::ReduceOpLogicalAnd
 
struct  amrex::ReduceOpLogicalOr
 
class  amrex::ReduceData< Ts >
 
class  amrex::ReduceOps< Ps >
 
class  amrex::Reducer< Ops, Ts >
 Class for local reductions (e.g., sum, min and max). More...
 

Namespaces

namespace  amrex
 
namespace  amrex::Reduce
 

Functions

template<typename T , typename N , std::enable_if_t< std::is_integral_v< N >, int > = 0>
amrex::Reduce::Sum (N n, T const *v, T init_val=0)
 Compute the sum of an array of values.
 
template<typename T , typename N , typename F , std::enable_if_t< std::is_integral_v< N > &&!std::is_same_v< T *, std::decay_t< F > >, int > = 0>
amrex::Reduce::Sum (N n, F const &f, T init_val=0)
 Compute the sum of values generated by a callable.
 
template<typename T , typename N , std::enable_if_t< std::is_integral_v< N >, int > = 0>
amrex::Reduce::Min (N n, T const *v, T init_val=std::numeric_limits< T >::max())
 Compute the minimum of an array of values.
 
template<typename T , typename N , typename F , std::enable_if_t< std::is_integral_v< N > &&!std::is_same_v< T *, std::decay_t< F > >, int > = 0>
amrex::Reduce::Min (N n, F const &f, T init_val=std::numeric_limits< T >::max())
 Compute the minimum of values generated by a callable.
 
template<typename T , typename N , std::enable_if_t< std::is_integral_v< N >, int > = 0>
amrex::Reduce::Max (N n, T const *v, T init_val=std::numeric_limits< T >::lowest())
 Compute the maximum of an array of values.
 
template<typename T , typename N , typename F , std::enable_if_t< std::is_integral_v< N > &&!std::is_same_v< T *, std::decay_t< F > >, int > = 0>
amrex::Reduce::Max (N n, F const &f, T init_val=std::numeric_limits< T >::lowest())
 Compute the maximum of values generated by a callable.
 
template<typename T , typename N , std::enable_if_t< std::is_integral_v< N >, int > = 0>
std::pair< T, T > amrex::Reduce::MinMax (N n, T const *v)
 Compute the minimum and maximum of an array of values.
 
template<typename T , typename N , typename F , std::enable_if_t< std::is_integral_v< N > &&!std::is_same_v< T *, std::decay_t< F > >, int > = 0>
std::pair< T, T > amrex::Reduce::MinMax (N n, F const &f)
 Compute the minimum and maximum of values generated by a callable.
 
template<typename T , typename N , typename P , std::enable_if_t< std::is_integral_v< N >, int > = 0>
bool amrex::Reduce::AnyOf (N n, T const *v, P const &pred)
 Test whether any element in an array satisfies a unary predicate.
 
template<typename P , int dim>
bool amrex::Reduce::AnyOf (BoxND< dim > const &box, P const &pred)
 Test whether the predicate is true for any index in a Box.
 
template<typename... Ts, typename... Ps>
__host__ __device__ constexpr GpuTuple< Ts... > amrex::IdentityTuple (GpuTuple< Ts... >, ReduceOps< Ps... >) noexcept
 Return a GpuTuple containing the identity element for each operation in ReduceOps. For example 0, +inf and -inf for ReduceOpSum, ReduceOpMin and ReduceOpMax respectively.
 
template<typename... Ts, typename... Ps>
__host__ __device__ constexpr GpuTuple< Ts... > amrex::IdentityTuple (GpuTuple< Ts... >, TypeList< Ps... >) noexcept
 Return a GpuTuple containing the identity element for each ReduceOp in TypeList. For example 0, +inf and -inf for ReduceOpSum, ReduceOpMin and ReduceOpMax respectively.