42 using Scalar =
typename std::remove_const<T>::type;
59 template <class U = T, su2enable_if<std::is_const<U>::value> = 0>
70 template <
class StaticContainer>
72 constexpr size_t Size = StaticContainer::StaticSize;
73 static_assert(Size,
"This method requires a static output type.");
75 for (
size_t k = 0; k < Size; ++k) ret.data()[k] = m_ptr[i * m_cols + start + k];
82 template <
class StaticContainer,
class U,
size_t N>
84 constexpr size_t Size = StaticContainer::StaticSize;
85 static_assert(Size,
"This method requires a static output type.");
87 for (
size_t lane = 0; lane < N; ++lane)
88 for (
size_t k = 0; k < Size; ++k) ret.data()[k][lane] = m_ptr[i[lane] * m_cols + start + k];
92 template <class U = T, su2enable_if<!std::is_const<U>::value> = 0>
94 return &m_ptr[i * m_cols];
97 template <class U = T, su2enable_if<!std::is_const<U>::value> = 0>
99 return m_ptr[i * m_cols + j];
109template <
class Storage>
111 static_assert(!Storage::IsVector,
"Storage type must be a matrix.");
112 static_assert(Storage::IsRowMajor,
"Storage type must be row major.");
116 using Index =
typename Storage::Index;
124 template <
class T,
size_t N>
146 Index size() const noexcept {
return m_storage.size(); }
148 Index rows() const noexcept {
return m_storage.cols() / m_innerSz; }
168 return ConstMatrix(m_storage[i] + j * m_innerSz, m_innerSz);
175 return CInnerIter(&m_storage(i, j * m_innerSz), 1);
181 template <
class T,
size_t N>
191 template <
class StaticContainer,
class Int>
193 return m_storage.template get<StaticContainer>(i, j * m_innerSz);
218 static_assert(T::IsVector,
"This class decorates vectors.");
228 template <class U = T, su2enable_if<!std::is_const<U>::value> = 0>
245 static_assert(!T::IsVector,
"This class decorates matrices.");
255 template <class U = T, su2enable_if<!std::is_const<U>::value> = 0>
274template <
class IndexVector,
class VectorOfVector,
class Scalar =
int>
277 for (
size_t i = 0; i <
M; ++i) {
279 for (
auto& x : X[i]) x = val;
286template <
class IndexVector,
class VectorOfVector,
class Scalar =
int>
302template <
class IndexVector,
class VectorOfMatrix,
class Scalar =
int>
305 for (
size_t i = 0; i <
M; ++i) {
306 X[i].resize(N[i], P);
307 for (
auto& x : X[i]) x = val;
314template <
class IndexVector,
class VectorOfMatrix,
class Scalar =
int>
A templated vector/matrix object.
CNewtonIntegration::Scalar Scalar
Definition CNewtonIntegration.cpp:31
A templated matrix/vector-like object.
Definition C2DContainer.hpp:374
Decorate a matrix type (Storage) with 3 dimensions.
Definition container_decorators.hpp:110
CInnerIter innerIter(Index i, Index j) const noexcept
Get a scalar iterator to the inner-most dimension of the container.
Definition container_decorators.hpp:174
ConstMatrix operator()(Index i, Index j) const noexcept
Definition container_decorators.hpp:167
static constexpr bool IsColumnMajor
Definition container_decorators.hpp:118
Index cols() const noexcept
Definition container_decorators.hpp:149
StaticContainer get(Int i, Index j=0) const noexcept
Return copy of data in a static size container (see C2DContainer::get).
Definition container_decorators.hpp:192
Index length() const noexcept
Definition container_decorators.hpp:147
Index rows() const noexcept
Definition container_decorators.hpp:148
CMatrixView< const Scalar > ConstMatrix
Definition container_decorators.hpp:121
typename Storage::Scalar Scalar
Definition container_decorators.hpp:115
ConstMatrix operator[](Index i) const noexcept
Definition container_decorators.hpp:161
CInnerIterGather< T, N > innerIter(simd::Array< T, N > i, Index j) const noexcept
Get a SIMD gather iterator to the inner-most dimension of the container.
Definition container_decorators.hpp:182
Index size() const noexcept
Container sizes.
Definition container_decorators.hpp:146
void resize(Index length, Index rows, Index cols, Scalar value=0) noexcept
Definition container_decorators.hpp:138
static constexpr bool IsRowMajor
Definition container_decorators.hpp:117
CMatrixView< Scalar > Matrix
Definition container_decorators.hpp:120
typename Storage::template CInnerIterGather< simd::Array< T, N > > CInnerIterGather
Definition container_decorators.hpp:125
Scalar * data()
Raw data access, for Python wrapper.
Definition container_decorators.hpp:199
typename Storage::Index Index
Definition container_decorators.hpp:116
C3DContainerDecorator(Index length, Index rows, Index cols, Scalar value=0) noexcept
Definition container_decorators.hpp:134
const Scalar & operator()(Index i, Index j, Index k) const noexcept
Definition container_decorators.hpp:155
Scalar & operator()(Index i, Index j, Index k) noexcept
Element-wise access.
Definition container_decorators.hpp:154
C3DContainerDecorator()=default
Matrix operator()(Index i, Index j) noexcept
Matrix access with an offset.
Definition container_decorators.hpp:166
Matrix operator[](Index i) noexcept
Matrix access.
Definition container_decorators.hpp:160
typename Storage::CInnerIter CInnerIter
Definition container_decorators.hpp:123
Class to represent a matrix (without owning the data, this just wraps a pointer).
Definition container_decorators.hpp:40
CMatrixView(const CMatrixView< U > &other)
Definition container_decorators.hpp:55
typename std::remove_const< T >::type Scalar
Definition container_decorators.hpp:42
friend CMatrixView operator+(CMatrixView mv, Index incr)
Definition container_decorators.hpp:102
unsigned long Index
Definition container_decorators.hpp:43
CMatrixView(T *ptr=nullptr, Index cols=0)
Definition container_decorators.hpp:50
Scalar & operator()(Index i, Index j) noexcept
Definition container_decorators.hpp:98
StaticContainer get(Index i, Index start=0) const noexcept
Return copy of data in a static size container (see C2DContainer::get).
Definition container_decorators.hpp:71
Scalar * operator[](Index i) noexcept
Definition container_decorators.hpp:93
CMatrixView(const su2matrix< Scalar > &mat)
Definition container_decorators.hpp:60
friend class CMatrixView
Definition container_decorators.hpp:53
CMatrixView(su2matrix< Scalar > &mat)
Definition container_decorators.hpp:57
const Scalar & operator()(Index i, Index j) const noexcept
Definition container_decorators.hpp:63
const Scalar * operator[](Index i) const noexcept
Definition container_decorators.hpp:62
StaticContainer get(simd::Array< U, N > i, Index start=0) const noexcept
SIMD gather version of get, one row per lane.
Definition container_decorators.hpp:83
A simple SIMD type relying on implicit vectorization, i.e. done by the compiler, explicitly vectorize...
Definition vectorization.hpp:89
#define FORCEINLINE
Definition code_config.hpp:44
void AllocVectorOfVectors(size_t M, const IndexVector &N, VectorOfVector &X, Scalar val=0)
Allocate a vector of varying-size vectors and initialize with some value.
Definition container_decorators.hpp:275
C3DContainerDecorator< su2activematrix > C3DDoubleMatrix
Definition container_decorators.hpp:206
void AllocVectorOfMatrices(size_t M, const IndexVector &N, size_t P, VectorOfMatrix &X, Scalar val=0)
Allocate a vector of matrices with varying row count, and initialize with some value.
Definition container_decorators.hpp:303
Helper class, adds dummy trailing dimension to a reference of a vector object making it a dummy matri...
Definition container_decorators.hpp:217
typename T::Index Index
Definition container_decorators.hpp:219
T & data
Definition container_decorators.hpp:222
C2DDummyLastView(T &ref)
Definition container_decorators.hpp:226
const Scalar & operator()(Index i, Index) const noexcept
Definition container_decorators.hpp:233
Scalar & operator()(Index i, Index) noexcept
Definition container_decorators.hpp:229
C2DDummyLastView()=delete
typename T::Scalar Scalar
Definition container_decorators.hpp:220
Helper class, adds dummy middle dimension to a reference of a matrix object making it a dummy 3D arra...
Definition container_decorators.hpp:244
Scalar & operator()(Index i, Index, Index k) noexcept
Definition container_decorators.hpp:256
typename T::Scalar Scalar
Definition container_decorators.hpp:247
T & data
Definition container_decorators.hpp:249
C3DDummyMiddleView(T &ref)
Definition container_decorators.hpp:253
typename T::Index Index
Definition container_decorators.hpp:246
const Scalar & operator()(Index i, Index, Index k) const noexcept
Definition container_decorators.hpp:260
C3DDummyMiddleView()=delete