Block-Structured AMR Software Framework
Loading...
Searching...
No Matches
AMReX_AlgVecUtil.H File Reference
#include <AMReX_Config.H>
#include <AMReX_AlgVector.H>

Go to the source code of this file.

Classes

struct  amrex::IsAlgVector< V, Enable >
 
struct  amrex::IsAlgVector< V, std::enable_if_t< std::is_same_v< AlgVector< typename V::value_type, typename V::allocator_type >, V > > >
 

Namespaces

namespace  amrex
 

Functions

template<typename V1 , typename F >
std::enable_if_t< IsAlgVector< std::decay_t< V1 > >::value > amrex::ForEach (V1 &x, F const &f)
 Apply f to every element of x.
 
template<typename V1 , typename V2 , typename F >
std::enable_if_t< IsAlgVector< std::decay_t< V1 > >::value &&IsAlgVector< std::decay_t< V2 > >::value > amrex::ForEach (V1 &x, V2 &y, F const &f)
 Apply f to paired entries from x and y.
 
template<typename V1 , typename V2 , typename V3 , typename F >
std::enable_if_t< IsAlgVector< std::decay_t< V1 > >::value &&IsAlgVector< std::decay_t< V2 > >::value &&IsAlgVector< std::decay_t< V3 > >::value > amrex::ForEach (V1 &x, V2 &y, V3 &z, F const &f)
 Apply f to triplets drawn from x, y, and z.
 
template<typename V1 , typename V2 , typename V3 , typename V4 , typename F >
std::enable_if_t< IsAlgVector< std::decay_t< V1 > >::value &&IsAlgVector< std::decay_t< V2 > >::value &&IsAlgVector< std::decay_t< V3 > >::value &&IsAlgVector< std::decay_t< V4 > >::value > amrex::ForEach (V1 &x, V2 &y, V3 &z, V4 &a, F const &f)
 Apply f to tuples drawn from four AlgVectors.
 
template<typename V1 , typename V2 , typename V3 , typename V4 , typename V5 , typename F >
std::enable_if_t< IsAlgVector< std::decay_t< V1 > >::value &&IsAlgVector< std::decay_t< V2 > >::value &&IsAlgVector< std::decay_t< V3 > >::value &&IsAlgVector< std::decay_t< V4 > >::value &&IsAlgVector< std::decay_t< V5 > >::value > amrex::ForEach (V1 &x, V2 &y, V3 &z, V4 &a, V5 &b, F const &f)
 Apply f to tuples spanning five AlgVectors.
 
template<typename T , typename Allocator >
amrex::Dot (AlgVector< T, Allocator > const &x, AlgVector< T, Allocator > const &y, bool local=false)
 Dot product of two AlgVectors with optional local-only reduction.
 
template<typename T , typename Allocator >
void amrex::Axpy (AlgVector< T, Allocator > &y, T a, AlgVector< T, Allocator > const &x)
 y = ax + y. For GPU builds this is asynchronous with respect to the host.
 
template<typename T , typename Allocator >
void amrex::Xpay (AlgVector< T, Allocator > &y, T a, AlgVector< T, Allocator > const &x)
 y = x + a*y. For GPU builds this is asynchronous with respect to the host.
 
template<typename T , typename Allocator >
void amrex::LinComb (AlgVector< T, Allocator > &y, T a, AlgVector< T, Allocator > const &xa, T b, AlgVector< T, Allocator > const &xb)
 y = a*xa + b*xb. For GPU builds this is asynchronous with respect to the host.
 

Detailed Description

Device-friendly helpers for element-wise operations on AlgVector specializations (ForEach, BLAS-like routines, etc.).