Advanced Multi-Physics (AMP)
On-Line Documentation
Array.h
Go to the documentation of this file.
1#ifndef included_AMP_ArrayClass
2#define included_AMP_ArrayClass
3
4#include "AMP/utils/ArraySize.h"
5#include "AMP/utils/FunctionTable.h"
6#include "AMP/utils/Memory.h"
7
8#include <array>
9#include <cstddef>
10#include <functional>
11#include <initializer_list>
12#include <iostream>
13#include <memory>
14#include <string>
15#include <vector>
16
17
18namespace AMP {
19
20
24template<class TYPE, class FUN, class Allocator>
25class Array final
26{
27public: // Typedefs
28 typedef TYPE value_type;
29 typedef FUN function_table;
30 static_assert( !std::is_same_v<TYPE, std::vector<bool>::reference> );
31 static_assert( std::is_same_v<typename FUN::value_type, TYPE> );
32 static_assert( std::is_same_v<typename Allocator::value_type, void> ||
33 std::is_same_v<typename Allocator::value_type, TYPE> );
35 typename std::allocator_traits<Allocator>::template rebind_alloc<TYPE>;
36
37public: // Constructors / assignment operators
42
48 explicit Array( const ArraySize &N, const TYPE *data = nullptr );
49
54 explicit Array( size_t N );
55
61 explicit Array( size_t N_rows, size_t N_columns );
62
69 explicit Array( size_t N1, size_t N2, size_t N3 );
70
78 explicit Array( size_t N1, size_t N2, size_t N3, size_t N4 );
79
88 explicit Array( size_t N1, size_t N2, size_t N3, size_t N4, size_t N5 );
89
94 template<typename U = TYPE, typename = typename std::enable_if<std::is_same_v<U, TYPE>>::type>
95 explicit Array( const Range<U> &range );
96
101 explicit Array( std::string range );
102
107 Array( std::initializer_list<TYPE> data );
108
113 Array( std::initializer_list<std::initializer_list<TYPE>> data );
114
115
120 Array( const Array &rhs );
121
126 Array( Array &&rhs );
127
132 Array &operator=( const Array &rhs );
133
139
144 Array &operator=( const std::vector<TYPE> &rhs );
145
147 ARRAY_INLINE bool isCopyable() const { return d_isCopyable; }
148
150 ARRAY_INLINE void setCopyable( bool flag ) { d_isCopyable = flag; }
151
153 ARRAY_INLINE bool isFixedSize() const { return d_isFixedSize; }
154
156 ARRAY_INLINE void setFixedSize( bool flag ) { d_isFixedSize = flag; }
157
160
161
162public: // Views/copies/subset
168 static std::unique_ptr<Array> view( const ArraySize &N, std::shared_ptr<TYPE> data );
169
170
176 static std::unique_ptr<const Array> constView( const ArraySize &N,
177 const std::shared_ptr<const TYPE> &data );
178
183
184
189 void view2( Array &src );
190
196 void view2( const ArraySize &N, std::shared_ptr<TYPE> data );
197
212 int ndim, const size_t *dims, TYPE *data, bool isCopyable = true, bool isFixedSize = true )
213 {
215 }
216
229 void viewRaw( const ArraySize &N, TYPE *data, bool isCopyable = true, bool isFixedSize = true )
230 {
233 d_ptr.reset();
234 d_size = N;
235 d_data = data;
236 }
237
248 static Array staticView( const ArraySize &N, TYPE *data )
249 {
250 Array x;
251 x.viewRaw( N, data, true, true );
252 return x;
253 }
254
259 template<class TYPE2>
260 static inline auto convert( std::shared_ptr<Array<TYPE, FUN, Allocator>> array )
261 {
262 using FUN2 = typename FUN::template cloneTo<TYPE2>;
263 static_assert( std::is_same_v<typename FUN2::value_type, TYPE2> );
264 using ARRAY2 = Array<TYPE2, FUN2, Allocator>;
265 auto array2 = std::make_unique<ARRAY2>( array->size() );
266 array2.copy( *array );
267 return array2;
268 }
269
270
275 template<class TYPE2>
276 static inline auto convert( std::shared_ptr<const Array<TYPE, FUN, Allocator>> array )
277 {
278 using FUN2 = typename FUN::template cloneTo<TYPE2>;
279 static_assert( std::is_same_v<typename FUN2::value_type, TYPE2> );
280 using ARRAY2 = Array<TYPE2, FUN2, Allocator>;
281 auto array2 = std::make_unique<ARRAY2>( array->size() );
282 array2.copy( *array );
283 return array2;
284 }
285
286
291 template<class TYPE2, class FUN2, class Allocator2>
292 void inline copy( const Array<TYPE2, FUN2, Allocator2> &array )
293 {
294 resize( array.size() );
295 copy( array.data() );
296 }
297
303 template<class TYPE2>
304 inline void copy( const TYPE2 *data );
305
310 template<class TYPE2>
311 inline void copyTo( TYPE2 *data ) const;
312
316 template<class TYPE2>
317 inline auto cloneTo() const
318 {
319 using FUN2 = typename FUN::template cloneTo<TYPE2>;
320 static_assert( std::is_same_v<typename FUN2::value_type, TYPE2> );
322 copyTo( dst.data() );
323 return dst;
324 }
325
326
330 template<class TYPE2>
331 inline auto reinterpretArray() const
332 {
333 static_assert( sizeof( TYPE ) == sizeof( TYPE2 ) );
334 auto ptr = std::reinterpret_pointer_cast<TYPE2>( std::const_pointer_cast<TYPE>( d_ptr ) );
335 using FUN2 = typename FUN::template cloneTo<TYPE2>;
336 static_assert( std::is_same_v<typename FUN2::value_type, TYPE2> );
338 y.view2( d_size, ptr );
339 return y;
340 }
341
342
344 void swap( Array &other );
345
346
351 ARRAY_INLINE void fill( const TYPE &y )
352 {
353 for ( auto &x : *this )
354 x = y;
355 }
356
361 void scale( const TYPE &y );
362
363
369 void pow( const Array &base, const TYPE &exp );
370
371
373 void clear();
374
375
377 ARRAY_INLINE int ndim() const { return d_size.ndim(); }
378
379
381 ARRAY_INLINE const ArraySize &size() const { return d_size; }
382
383
385 ARRAY_INLINE size_t size( int d ) const { return d_size[d]; }
386
387
389 ARRAY_INLINE size_t length() const { return d_size.length(); }
390
391
393 ARRAY_INLINE bool empty() const { return d_size.length() == 0; }
394
395
397 ARRAY_INLINE operator bool() const { return d_size.length() != 0; }
398
399
404 void resize( size_t N );
405
406
412 void resize( size_t N_row, size_t N_col );
413
420 void resize( size_t N1, size_t N2, size_t N3 );
421
426 void resize( const ArraySize &N );
427
428
435 void resizeDim( int dim, size_t N, const TYPE &value );
436
437
442 void reshape( const ArraySize &N );
443
444
451
452
457 Array subset( const std::vector<size_t> &index ) const;
458
459
464 Array subset( const std::vector<Range<size_t>> &index ) const;
465
466
472 void copySubset( const std::vector<size_t> &index, const Array &subset );
473
479 void copySubset( const std::vector<Range<size_t>> &index, const Array &subset );
480
486 void addSubset( const std::vector<size_t> &index, const Array &subset );
487
493 void addSubset( const std::vector<Range<size_t>> &index, const Array &subset );
494
495
496public: // Accessors
501 ARRAY_INLINE TYPE &operator()( size_t i ) { return d_data[d_size.index( i )]; }
502
507 ARRAY_INLINE const TYPE &operator()( size_t i ) const { return d_data[d_size.index( i )]; }
508
514 ARRAY_INLINE TYPE &operator()( size_t i, size_t j ) { return d_data[d_size.index( i, j )]; }
515
521 ARRAY_INLINE const TYPE &operator()( size_t i, size_t j ) const
522 {
523 return d_data[d_size.index( i, j )];
524 }
525
532 ARRAY_INLINE TYPE &operator()( size_t i, size_t j, size_t k )
533 {
534 return d_data[d_size.index( i, j, k )];
535 }
536
543 ARRAY_INLINE const TYPE &operator()( size_t i, size_t j, size_t k ) const
544 {
545 return d_data[d_size.index( i, j, k )];
546 }
547
555 ARRAY_INLINE TYPE &operator()( size_t i1, size_t i2, size_t i3, size_t i4 )
556 {
557 return d_data[d_size.index( i1, i2, i3, i4 )];
558 }
559
567 ARRAY_INLINE const TYPE &operator()( size_t i1, size_t i2, size_t i3, size_t i4 ) const
568 {
569 return d_data[d_size.index( i1, i2, i3, i4 )];
570 }
571
580 ARRAY_INLINE TYPE &operator()( size_t i1, size_t i2, size_t i3, size_t i4, size_t i5 )
581 {
582 return d_data[d_size.index( i1, i2, i3, i4, i5 )];
583 }
584
593 ARRAY_INLINE const TYPE &
594 operator()( size_t i1, size_t i2, size_t i3, size_t i4, size_t i5 ) const
595 {
596 return d_data[d_size.index( i1, i2, i3, i4, i5 )];
597 }
598
603 ARRAY_INLINE TYPE &operator[]( size_t i ) { return d_data[i]; }
604
609 ARRAY_INLINE const TYPE &operator[]( size_t i ) const { return d_data[i]; }
610
611
616 ARRAY_INLINE TYPE *ptr( size_t i ) { return i >= d_size.length() ? nullptr : &d_data[i]; }
617
622 ARRAY_INLINE const TYPE *ptr( size_t i ) const
623 {
624 return i >= d_size.length() ? nullptr : &d_data[i];
625 }
626
628 ARRAY_INLINE TYPE *begin() { return d_data; }
629
631 ARRAY_INLINE const TYPE *begin() const { return d_data; }
632
634 ARRAY_INLINE TYPE *end() { return d_data + d_size.length(); }
635
637 ARRAY_INLINE const TYPE *end() const { return d_data + d_size.length(); }
638
640 std::shared_ptr<TYPE> getPtr() { return d_ptr; }
641
643 std::shared_ptr<const TYPE> getPtr() const { return d_ptr; }
644
646 ARRAY_INLINE TYPE *data() { return d_data; }
647
649 ARRAY_INLINE const TYPE *data() const { return d_data; }
650
651
652public: // Operator overloading
654 // Equality means the dimensions and data have to be identical
655 bool operator==( const Array &rhs ) const;
656
658 bool operator!=( const Array &rhs ) const;
659
661 Array &operator+=( const Array &rhs );
662
664 Array &operator-=( const Array &rhs );
665
667 Array &operator+=( const TYPE &rhs );
668
670 Array &operator-=( const TYPE &rhs );
671
672
673public: // Math operations
675 static Array cat( const std::vector<Array> &x, int dim = 0 );
676
678 static Array cat( const std::initializer_list<Array> &x, int dim = 0 );
679
681 static Array cat( size_t N_array, const Array *x, int dim );
682
684 void cat( const Array &x, int dim = 0 );
685
687 void rand();
688
690 bool NaNs() const;
691
693 TYPE min() const;
694
696 TYPE max() const;
697
699 TYPE sum() const;
700
702 TYPE mean() const;
703
705 Array min( int dir ) const;
706
708 Array max( int dir ) const;
709
711 Array sum( int dir ) const;
712
714 TYPE min( const std::vector<size_t> &index ) const;
715
717 TYPE max( const std::vector<size_t> &index ) const;
718
720 TYPE sum( const std::vector<size_t> &index ) const;
721
723 TYPE mean( const std::vector<size_t> &index ) const;
724
726 TYPE min( const std::vector<Range<size_t>> &index ) const;
727
729 TYPE max( const std::vector<Range<size_t>> &index ) const;
730
732 TYPE sum( const std::vector<Range<size_t>> &index ) const;
733
735 TYPE mean( const std::vector<Range<size_t>> &index ) const;
736
738 std::vector<size_t> find( const TYPE &value,
739 std::function<bool( const TYPE &, const TYPE & )> compare ) const;
740
742 int64_t findFirst( const TYPE &value,
743 std::function<bool( const TYPE &, const TYPE & )> compare ) const;
744
746 int64_t findLast( const TYPE &value,
747 std::function<bool( const TYPE &, const TYPE & )> compare ) const;
748
750 void
751 print( std::ostream &os, const std::string &name = "A", const std::string &prefix = "" ) const;
752
755
757 Array repmat( const ArraySize &N ) const;
758
760 Array coarsen( const Array &filter ) const;
761
763 Array coarsen( const ArraySize &ratio, std::function<TYPE( const Array & )> filter ) const;
764
770 static Array transform( std::function<TYPE( const TYPE & )> fun, const Array &x );
771
778 static Array transform( std::function<TYPE( const TYPE &, const TYPE & )> fun,
779 const Array &x,
780 const Array &y );
781
788 void axpby( const TYPE &alpha, const Array &x, const TYPE &beta );
789
794 inline TYPE interp( const std::vector<double> &x ) const { return interp( x.data() ); }
795
800 TYPE interp( const double *x ) const;
801
809 bool equals( const Array &rhs, const TYPE &tol = 0.000001 ) const;
810
811public:
813 size_t packSize() const;
815 size_t pack( std::byte * ) const;
817 size_t unpack( const std::byte * );
818
819private:
821 bool d_isCopyable; // Can the array be copied
822 bool d_isFixedSize; // Can the array be resized
823 ArraySize d_size; // Size of each dimension
824 TYPE *d_data; // Raw pointer to data in array
825 std::shared_ptr<TYPE> d_ptr; // Shared pointer to data in array
826 void allocate( const ArraySize &N );
827
828private:
829 inline void checkSubsetIndex( const std::vector<Range<size_t>> &range ) const;
830 inline std::vector<Range<size_t>> convert( const std::vector<size_t> &index ) const;
831 static inline void getSubsetArrays( const std::vector<Range<size_t>> &range,
832 std::array<size_t, 5> &first,
833 std::array<size_t, 5> &last,
834 std::array<size_t, 5> &inc,
835 std::array<size_t, 5> &N );
836
837private:
839 {
840 public:
841 Deleter( const scalarAllocator_t &alloc, size_t N ) : d_alloc( alloc ), d_N( N ) {}
842 void operator()( TYPE *p )
843 {
844 if constexpr ( !std::is_trivially_copyable<TYPE>::value ) {
845 for ( size_t i = 0; i < d_N; ++i )
846 p[i].~TYPE();
847 }
848 d_alloc.deallocate( p, d_N );
849 }
850
851 private:
853 size_t d_N;
854 };
855};
856
857
858/********************************************************
859 * ostream operator *
860 ********************************************************/
861inline std::ostream &operator<<( std::ostream &out, const AMP::ArraySize &s )
862{
863 out << "[" << s[0];
864 for ( size_t i = 1; i < s.ndim(); i++ )
865 out << "," << s[i];
866 out << "]";
867 return out;
868}
869template<class TYPE>
870inline std::ostream &operator<<( std::ostream &out, const AMP::Range<TYPE> &r )
871{
872 out << r.i << ':' << r.k << ':' << r.j;
873 return out;
874}
875
876
877/********************************************************
878 * Math operations *
879 ********************************************************/
880template<class TYPE, class FUN, class Allocator>
883{
884 auto c = a;
885 c += b;
886 return c;
887}
888template<class TYPE, class FUN, class Allocator>
891{
892 auto c = a;
893 c -= b;
894 return c;
895}
896template<class TYPE, class FUN, class Allocator>
899{
900 Array<TYPE, FUN, Allocator> c( multiplySize( a.size(), b.size() ) );
901 FUN::multiply( a.size(), a.data(), b.size(), b.data(), c.size(), c.data() );
902 return c;
903}
904template<class TYPE, class FUN, class Allocator>
906 const std::vector<TYPE> &b )
907{
909 b2.viewRaw( { b.size() }, const_cast<TYPE *>( b.data() ) );
910 Array<TYPE, FUN, Allocator> c( multiplySize( a.size(), b.size() ) );
911 FUN::multiply( a.size(), a.data(), b2.size(), b2.data(), c.size(), c.data() );
912 return c;
913}
914template<class TYPE, class FUN, class Allocator>
916{
917 auto c = b;
918 c.scale( a );
919 return c;
920}
921template<class TYPE, class FUN, class Allocator>
923{
924 auto c = a;
925 c.scale( b );
926 return c;
927}
928
929
930/********************************************************
931 * Copy array *
932 ********************************************************/
933template<class TYPE, class FUN, class Allocator>
934template<class TYPE2>
935inline void AMP::Array<TYPE, FUN, Allocator>::copy( const TYPE2 *data )
936{
937 if constexpr ( std::is_same_v<TYPE, TYPE2> ) {
938 std::copy( data, data + d_size.length(), d_data );
939 } else {
940 for ( size_t i = 0; i < d_size.length(); i++ )
941 d_data[i] = static_cast<TYPE>( data[i] );
942 }
943}
944template<class TYPE, class FUN, class Allocator>
945template<class TYPE2>
946inline void AMP::Array<TYPE, FUN, Allocator>::copyTo( TYPE2 *data ) const
947{
948 if constexpr ( std::is_same_v<TYPE, TYPE2> ) {
949 std::copy( d_data, d_data + d_size.length(), data );
950 } else {
951 for ( size_t i = 0; i < d_size.length(); i++ )
952 data[i] = static_cast<TYPE2>( d_data[i] );
953 }
954}
955
956
957} // namespace AMP
958
959
960#endif
#define ARRAY_INLINE
Definition ArraySize.h:41
Simple class to store the array dimensions.
Definition ArraySize.h:138
constexpr void setNdim(uint8_t ndim)
Definition ArraySize.h:288
constexpr uint8_t ndim() const
Return the number of dimensions.
Definition ArraySize.h:265
constexpr size_t index(size_t i) const
Get the index.
Definition ArraySize.h:316
constexpr size_t length() const
Return the total number of elements in the array.
Definition ArraySize.h:271
scalarAllocator_t d_alloc
Definition Array.h:852
Deleter(const scalarAllocator_t &alloc, size_t N)
Definition Array.h:841
void operator()(TYPE *p)
Definition Array.h:842
std::vector< Range< size_t > > convert(const std::vector< size_t > &index) const
ARRAY_INLINE TYPE * ptr(size_t i)
Definition Array.h:616
static Array transform(std::function< TYPE(const TYPE &, const TYPE &)> fun, const Array &x, const Array &y)
bool NaNs() const
Return true if NaNs are present.
std::shared_ptr< const TYPE > getPtr() const
Return the pointer to the raw data.
Definition Array.h:643
void pow(const Array &base, const TYPE &exp)
Array & operator=(const std::vector< TYPE > &rhs)
~Array()
Destructor.
int64_t findFirst(const TYPE &value, std::function< bool(const TYPE &, const TYPE &)> compare) const
Find all elements that match the operator (if element is not found return -1)
ARRAY_INLINE TYPE & operator()(size_t i1, size_t i2, size_t i3, size_t i4, size_t i5)
Definition Array.h:580
void copyTo(TYPE2 *data) const
Definition Array.h:946
Array reverseDim() const
Transpose an array.
ARRAY_INLINE bool empty() const
Return true if the Array is empty.
Definition Array.h:393
TYPE value_type
Definition Array.h:28
Array coarsen(const Array &filter) const
Coarsen an array using the given filter.
TYPE sum(const std::vector< size_t > &index) const
Return the sum of all elements.
Array(size_t N)
ARRAY_INLINE const TYPE & operator()(size_t i, size_t j, size_t k) const
Definition Array.h:543
ARRAY_INLINE void setFixedSize(bool flag)
Set is copyable.
Definition Array.h:156
ARRAY_INLINE void setNdim(int ndim)
Definition Array.h:450
scalarAllocator_t d_alloc
Definition Array.h:820
static Array staticView(const ArraySize &N, TYPE *data)
Definition Array.h:248
ARRAY_INLINE const TYPE * end() const
Get iterator to beginning of data.
Definition Array.h:637
ARRAY_INLINE bool isFixedSize() const
Is fixed size?
Definition Array.h:153
ARRAY_INLINE const TYPE & operator()(size_t i, size_t j) const
Definition Array.h:521
void cat(const Array &x, int dim=0)
Concatenates a given array with the current array.
TYPE max(const std::vector< size_t > &index) const
Return the largest value.
bool d_isCopyable
Definition Array.h:821
TYPE mean(const std::vector< Range< size_t > > &index) const
Return the mean of all elements.
ARRAY_INLINE const TYPE * begin() const
Get iterator to beginning of data.
Definition Array.h:631
Array & operator+=(const Array &rhs)
Add another array.
ARRAY_INLINE const TYPE & operator[](size_t i) const
Definition Array.h:609
static auto convert(std::shared_ptr< const Array< TYPE, FUN, Allocator > > array)
Definition Array.h:276
TYPE * d_data
Definition Array.h:824
static auto convert(std::shared_ptr< Array< TYPE, FUN, Allocator > > array)
Definition Array.h:260
ARRAY_INLINE TYPE * data()
Return the pointer to the raw data.
Definition Array.h:646
ARRAY_INLINE TYPE & operator[](size_t i)
Definition Array.h:603
void checkSubsetIndex(const std::vector< Range< size_t > > &range) const
Array(std::initializer_list< TYPE > data)
void print(std::ostream &os, const std::string &name="A", const std::string &prefix="") const
Print an array.
Array & operator=(const Array &rhs)
std::shared_ptr< TYPE > d_ptr
Definition Array.h:825
Array sum(int dir) const
Return the sum of all elements in a given direction.
Array(Array &&rhs)
bool equals(const Array &rhs, const TYPE &tol=0.000001) const
Determine if two Arrays are equal using an absolute tolerance.
void resize(size_t N)
void viewRaw(const ArraySize &N, TYPE *data, bool isCopyable=true, bool isFixedSize=true)
Definition Array.h:229
ARRAY_INLINE size_t size(int d) const
Return the size of the Array.
Definition Array.h:385
std::vector< size_t > find(const TYPE &value, std::function< bool(const TYPE &, const TYPE &)> compare) const
Find all elements that match the operator.
ARRAY_INLINE const ArraySize & size() const
Return the size of the Array.
Definition Array.h:381
bool operator!=(const Array &rhs) const
Check if two matrices are not equal.
void addSubset(const std::vector< Range< size_t > > &index, const Array &subset)
bool d_isFixedSize
Definition Array.h:822
Array & operator+=(const TYPE &rhs)
Add a scalar.
void addSubset(const std::vector< size_t > &index, const Array &subset)
void view2(Array &src)
void allocate(const ArraySize &N)
void copySubset(const std::vector< Range< size_t > > &index, const Array &subset)
TYPE sum(const std::vector< Range< size_t > > &index) const
Return the sum of all elements.
ARRAY_INLINE const TYPE & operator()(size_t i) const
Definition Array.h:507
Array(size_t N_rows, size_t N_columns)
Array & operator=(Array &&rhs)
bool operator==(const Array &rhs) const
Check if two matrices are equal.
void view2(const ArraySize &N, std::shared_ptr< TYPE > data)
TYPE min() const
Return the smallest value.
static Array cat(const std::vector< Array > &x, int dim=0)
Concatenates the arrays along the dimension dim.
static std::unique_ptr< Array > view(const ArraySize &N, std::shared_ptr< TYPE > data)
auto reinterpretArray() const
Definition Array.h:331
Array(size_t N1, size_t N2, size_t N3, size_t N4, size_t N5)
int64_t findLast(const TYPE &value, std::function< bool(const TYPE &, const TYPE &)> compare) const
Find all elements that match the operator (if element is not found return -1)
TYPE sum() const
Return the sum of all elements.
void swap(Array &other)
FUN function_table
Definition Array.h:29
void clear()
Clear the data in the array.
static Array transform(std::function< TYPE(const TYPE &)> fun, const Array &x)
std::shared_ptr< TYPE > getPtr()
Return the pointer to the raw data.
Definition Array.h:640
Array max(int dir) const
Return the max of all elements in a given direction.
static Array cat(size_t N_array, const Array *x, int dim)
Concatenates the arrays along the dimension dim.
ARRAY_INLINE TYPE & operator()(size_t i, size_t j, size_t k)
Definition Array.h:532
TYPE min(const std::vector< size_t > &index) const
Return the smallest value.
Array coarsen(const ArraySize &ratio, std::function< TYPE(const Array &)> filter) const
Coarsen an array using the given filter.
ARRAY_INLINE void setCopyable(bool flag)
Set is copyable.
Definition Array.h:150
ARRAY_INLINE const TYPE & operator()(size_t i1, size_t i2, size_t i3, size_t i4) const
Definition Array.h:567
void copy(const Array< TYPE2, FUN2, Allocator2 > &array)
Definition Array.h:292
static std::unique_ptr< const Array > constView(const ArraySize &N, const std::shared_ptr< const TYPE > &data)
TYPE mean() const
Return the mean of all elements.
typename std::allocator_traits< Allocator >::template rebind_alloc< TYPE > scalarAllocator_t
Definition Array.h:35
Array(const Array &rhs)
ARRAY_INLINE const TYPE * ptr(size_t i) const
Definition Array.h:622
ARRAY_INLINE const TYPE & operator()(size_t i1, size_t i2, size_t i3, size_t i4, size_t i5) const
Definition Array.h:594
ARRAY_INLINE TYPE & operator()(size_t i, size_t j)
Definition Array.h:514
Array(const Range< U > &range)
Array min(int dir) const
Return the min of all elements in a given direction.
ARRAY_INLINE int ndim() const
Return the size of the Array.
Definition Array.h:377
void resize(size_t N_row, size_t N_col)
Array repmat(const ArraySize &N) const
Replicate an array a given number of times in each direction.
ARRAY_INLINE void fill(const TYPE &y)
Definition Array.h:351
TYPE interp(const std::vector< double > &x) const
Definition Array.h:794
void scale(const TYPE &y)
void viewRaw(int ndim, const size_t *dims, TYPE *data, bool isCopyable=true, bool isFixedSize=true)
Definition Array.h:211
void axpby(const TYPE &alpha, const Array &x, const TYPE &beta)
Array & operator-=(const Array &rhs)
Subtract another array.
ARRAY_INLINE TYPE * end()
Get iterator to beginning of data.
Definition Array.h:634
Array(const ArraySize &N, const TYPE *data=nullptr)
Array subset(const std::vector< Range< size_t > > &index) const
ArraySize d_size
Definition Array.h:823
void copy(const TYPE2 *data)
Definition Array.h:935
size_t pack(std::byte *) const
Pack the data to a buffer.
TYPE max() const
Return the largest value.
size_t unpack(const std::byte *)
Unpack the data from a buffer.
ARRAY_INLINE size_t length() const
Return the size of the Array.
Definition Array.h:389
auto cloneTo() const
Definition Array.h:317
void reshape(const ArraySize &N)
ARRAY_INLINE bool isCopyable() const
Is copyable?
Definition Array.h:147
Array< TYPE, FUN, Allocator > view()
ARRAY_INLINE TYPE & operator()(size_t i)
Definition Array.h:501
size_t packSize() const
Return the number of bytes required to pack the data.
ARRAY_INLINE const TYPE * data() const
Return the pointer to the raw data.
Definition Array.h:649
TYPE min(const std::vector< Range< size_t > > &index) const
Return the smallest value.
void rand()
Initialize the array with random values (defined from the function table)
Array(size_t N1, size_t N2, size_t N3)
ARRAY_INLINE TYPE * begin()
Get iterator to beginning of data.
Definition Array.h:628
void resize(const ArraySize &N)
Array(std::initializer_list< std::initializer_list< TYPE > > data)
void resize(size_t N1, size_t N2, size_t N3)
void resizeDim(int dim, size_t N, const TYPE &value)
Array(size_t N1, size_t N2, size_t N3, size_t N4)
Array(std::string range)
Array & operator-=(const TYPE &rhs)
Subtract a scalar.
Array subset(const std::vector< size_t > &index) const
void copySubset(const std::vector< size_t > &index, const Array &subset)
ARRAY_INLINE TYPE & operator()(size_t i1, size_t i2, size_t i3, size_t i4)
Definition Array.h:555
static Array cat(const std::initializer_list< Array > &x, int dim=0)
Concatenates the arrays along the dimension dim.
TYPE mean(const std::vector< size_t > &index) const
Return the mean of all elements.
TYPE max(const std::vector< Range< size_t > > &index) const
Return the largest value.
TYPE interp(const double *x) const
static void getSubsetArrays(const std::vector< Range< size_t > > &range, std::array< size_t, 5 > &first, std::array< size_t, 5 > &last, std::array< size_t, 5 > &inc, std::array< size_t, 5 > &N)
Simple range class.
Definition ArraySize.h:79
Array< TYPE, FUN, Allocator > operator-(const Array< TYPE, FUN, Allocator > &a, const Array< TYPE, FUN, Allocator > &b)
Definition Array.h:889
constexpr ArraySize multiplySize(const ArraySize &sa, const ArraySize &sb)
Definition ArraySize.h:486
std::ostream & operator<<(std::ostream &out, const AMP::ArraySize &s)
Definition Array.h:861
Array< TYPE, FUN, Allocator > operator*(const Array< TYPE, FUN, Allocator > &a, const Array< TYPE, FUN, Allocator > &b)
Definition Array.h:897
Array< TYPE, FUN, Allocator > operator+(const Array< TYPE, FUN, Allocator > &a, const Array< TYPE, FUN, Allocator > &b)
Definition Array.h:881



Advanced Multi-Physics (AMP)
Oak Ridge National Laboratory
Idaho National Laboratory
Los Alamos National Laboratory
This page automatically produced from the
source code by doxygen
Last updated: Tue Mar 10 2026 13:06:41.
Comments on this page