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 >
 
struct  amrex::IsAlgVector< V >
 

Namespaces

namespace  amrex
 

Functions

template<typename V1 , typename F >
requires (IsAlgVector<std::decay_t<V1> >::value)
void amrex::ForEach (V1 &x, F const &f)
 Apply f to every element of x.
 
template<typename V1 , typename V2 , typename F >
requires (IsAlgVector<std::decay_t<V1> >::value && IsAlgVector<std::decay_t<V2> >::value)
void 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 >
requires (IsAlgVector<std::decay_t<V1> >::value && IsAlgVector<std::decay_t<V2> >::value && IsAlgVector<std::decay_t<V3> >::value)
void 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 >
requires (IsAlgVector<std::decay_t<V1> >::value && IsAlgVector<std::decay_t<V2> >::value && IsAlgVector<std::decay_t<V3> >::value && IsAlgVector<std::decay_t<V4> >::value)
void 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 >
requires (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)
void 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.).