Block-Structured AMR Software Framework
Loading...
Searching...
No Matches
amrex::Array2D< T, XLO, XHI, YLO, YHI, ORDER > Class Template Reference

A GPU-compatible two-dimensional array. More...

#include <AMReX_Array.H>

Public Member Functions

__host__ __device__ const T * begin () const noexcept
 
__host__ __device__ const T * end () const noexcept
 
__host__ __device__ T * begin () noexcept
 
__host__ __device__ T * end () noexcept
 
__host__ __device__ const T & operator() (int i, int j) const noexcept
 
__host__ __device__ T & operator() (int i, int j) noexcept
 
__host__ __device__ constexpr T sum () const noexcept
 
__host__ __device__ constexpr T sum (int axis, int loc) const noexcept
 
__host__ __device__ constexpr T product () const noexcept
 
__host__ __device__ constexpr T product (int axis, int loc) const noexcept
 

Static Public Member Functions

__host__ static __device__ constexpr unsigned int size () noexcept
 
__host__ static __device__ constexpr int xlo () noexcept
 
__host__ static __device__ constexpr int xhi () noexcept
 
__host__ static __device__ constexpr unsigned int xlen () noexcept
 
__host__ static __device__ constexpr int ylo () noexcept
 
__host__ static __device__ constexpr int yhi () noexcept
 
__host__ static __device__ constexpr unsigned int ylen () noexcept
 

Detailed Description

template<class T, int XLO, int XHI, int YLO, int YHI, Order ORDER = Order::F>
class amrex::Array2D< T, XLO, XHI, YLO, YHI, ORDER >

A GPU-compatible two-dimensional array.

Array2D objects can be indexed according to Fortran column-major order (first index moving fastest) or C/C++ row-major order (last index moving fastest). If not specified, Fortran order is assumed.

Template Parameters
TValue data type.
XLOIndex for inclusive lower bound in x dimension. Can be other than 0.
XHIIndex for inclusive upper bound in x dimension.
YLOIndex for inclusive lower bound in y dimension. Can be other than 0.
YHIIndex for inclusive upper bound in y dimension.
ORDEREither Order::C (C/C++ row-major order) or Order::F (Fortran column-major order, which is the default if not given)

Member Function Documentation

◆ begin() [1/2]

template<class T , int XLO, int XHI, int YLO, int YHI, Order ORDER = Order::F>
__host__ __device__ const T * amrex::Array2D< T, XLO, XHI, YLO, YHI, ORDER >::begin ( ) const
inlinenoexcept

Returns a const pointer address to the first element of the Array2D object, as if the object is treated as one-dimensional.

◆ begin() [2/2]

template<class T , int XLO, int XHI, int YLO, int YHI, Order ORDER = Order::F>
__host__ __device__ T * amrex::Array2D< T, XLO, XHI, YLO, YHI, ORDER >::begin ( )
inlinenoexcept

Returns a pointer address to the first element of the Array2D object, as if the object is treated as one-dimensional.

◆ end() [1/2]

template<class T , int XLO, int XHI, int YLO, int YHI, Order ORDER = Order::F>
__host__ __device__ const T * amrex::Array2D< T, XLO, XHI, YLO, YHI, ORDER >::end ( ) const
inlinenoexcept

Returns a const pointer address right after the last element of the Array2D object, as if the object is treated as one-dimensional.

◆ end() [2/2]

template<class T , int XLO, int XHI, int YLO, int YHI, Order ORDER = Order::F>
__host__ __device__ T * amrex::Array2D< T, XLO, XHI, YLO, YHI, ORDER >::end ( )
inlinenoexcept

Returns a pointer address right after the last element of the Array2D object, as if the object is treated as one-dimensional.

◆ operator()() [1/2]

template<class T , int XLO, int XHI, int YLO, int YHI, Order ORDER = Order::F>
__host__ __device__ const T & amrex::Array2D< T, XLO, XHI, YLO, YHI, ORDER >::operator() ( int  i,
int  j 
) const
inlinenoexcept

The elements of an Array2D object are accessed using parentheses, e.g. array(i,j), instead of using square brackets.

Parameters
iIndex in x dimension.
jIndex in y dimension.

◆ operator()() [2/2]

template<class T , int XLO, int XHI, int YLO, int YHI, Order ORDER = Order::F>
__host__ __device__ T & amrex::Array2D< T, XLO, XHI, YLO, YHI, ORDER >::operator() ( int  i,
int  j 
)
inlinenoexcept

The elements of an Array2D object are accessed using parentheses, e.g. array(i,j), instead of using square brackets.

Parameters
iIndex in x dimension.
jIndex in y dimension.

◆ product() [1/2]

template<class T , int XLO, int XHI, int YLO, int YHI, Order ORDER = Order::F>
__host__ __device__ constexpr T amrex::Array2D< T, XLO, XHI, YLO, YHI, ORDER >::product ( ) const
inlineconstexprnoexcept

When called without any arguments, returns the product of all elements in the Array2D object.

◆ product() [2/2]

template<class T , int XLO, int XHI, int YLO, int YHI, Order ORDER = Order::F>
__host__ __device__ constexpr T amrex::Array2D< T, XLO, XHI, YLO, YHI, ORDER >::product ( int  axis,
int  loc 
) const
inlineconstexprnoexcept

When called with two arguments, performs a product reduction over the specified axis, for a particular location index loc.

Parameters
axisThe dimension to reduce (0 for x dimension, 1 for y dimension)
locThe appropriate location index

This can be used, for instance, to calculate the product over the x dimension of an Array2D object that was instantiated as

A GPU-compatible two-dimensional array.
Definition AMReX_Array.H:357

One could instantiate an Array1D object to hold the results with,

A GPU-compatible one-dimensional array.
Definition AMReX_Array.H:204

and then perform the product for each element of the resulting vector.

for (int j = 1; j <= N; ++j) {
vec(j) = array.sum(0,j)
}
__host__ __device__ constexpr T sum() const noexcept
Definition AMReX_Array.H:482

In this example, the axis is 0 and the location index is j.

◆ size()

template<class T , int XLO, int XHI, int YLO, int YHI, Order ORDER = Order::F>
__host__ static __device__ constexpr unsigned int amrex::Array2D< T, XLO, XHI, YLO, YHI, ORDER >::size ( )
inlinestaticconstexprnoexcept

Returns the total number of elements of the Array2D object as an unsigned integer.

◆ sum() [1/2]

template<class T , int XLO, int XHI, int YLO, int YHI, Order ORDER = Order::F>
__host__ __device__ constexpr T amrex::Array2D< T, XLO, XHI, YLO, YHI, ORDER >::sum ( ) const
inlineconstexprnoexcept

When called without any arguments, returns the sum of all elements in the Array2D object.

◆ sum() [2/2]

template<class T , int XLO, int XHI, int YLO, int YHI, Order ORDER = Order::F>
__host__ __device__ constexpr T amrex::Array2D< T, XLO, XHI, YLO, YHI, ORDER >::sum ( int  axis,
int  loc 
) const
inlineconstexprnoexcept

When called with two arguments, performs a sum reduction over the specified axis, for a particular location index loc.

Parameters
axisThe dimension to reduce (0 for x dimension, 1 for y dimension)
locThe appropriate location index

This can be used, for instance, to calculate the sum over the y dimension of an Array2D object that was instantiated as

One could instantiate an Array1D object to hold the results,

and then perform the summation for each element of the resulting vector.

for (int i = 1; i <= M; ++i) {
vec(i) = array.sum(1,i)
}

In this example, the axis is 1 and the location index is i.

◆ xhi()

template<class T , int XLO, int XHI, int YLO, int YHI, Order ORDER = Order::F>
__host__ static __device__ constexpr int amrex::Array2D< T, XLO, XHI, YLO, YHI, ORDER >::xhi ( )
inlinestaticconstexprnoexcept

Returns the inclusive upper bound of the Array2D object in the x direction.

◆ xlen()

template<class T , int XLO, int XHI, int YLO, int YHI, Order ORDER = Order::F>
__host__ static __device__ constexpr unsigned int amrex::Array2D< T, XLO, XHI, YLO, YHI, ORDER >::xlen ( )
inlinestaticconstexprnoexcept

Returns the number of elements of the Array2D object in the x direction as an unsigned integer.

◆ xlo()

template<class T , int XLO, int XHI, int YLO, int YHI, Order ORDER = Order::F>
__host__ static __device__ constexpr int amrex::Array2D< T, XLO, XHI, YLO, YHI, ORDER >::xlo ( )
inlinestaticconstexprnoexcept

Returns the inclusive lower bound of the Array2D object in the x direction. Can be other than 0.

◆ yhi()

template<class T , int XLO, int XHI, int YLO, int YHI, Order ORDER = Order::F>
__host__ static __device__ constexpr int amrex::Array2D< T, XLO, XHI, YLO, YHI, ORDER >::yhi ( )
inlinestaticconstexprnoexcept

Returns the inclusive upper bound of the Array2D object in the y direction.

◆ ylen()

template<class T , int XLO, int XHI, int YLO, int YHI, Order ORDER = Order::F>
__host__ static __device__ constexpr unsigned int amrex::Array2D< T, XLO, XHI, YLO, YHI, ORDER >::ylen ( )
inlinestaticconstexprnoexcept

Returns the number of elements of the Array2D object in the y direction as an unsigned integer.

◆ ylo()

template<class T , int XLO, int XHI, int YLO, int YHI, Order ORDER = Order::F>
__host__ static __device__ constexpr int amrex::Array2D< T, XLO, XHI, YLO, YHI, ORDER >::ylo ( )
inlinestaticconstexprnoexcept

Returns the inclusive lower bound of the Array2D object in the y direction. Can be other than 0.


The documentation for this class was generated from the following file: