33template<
class Form,
class Type>
36 const label len = size();
48template<
class Form,
class Type>
57template<
class Form,
class Type>
60 Matrix<Form, Type>(dims.first(), dims.second())
64template<
class Form,
class Type>
67 Matrix<Form, Type>(dims.first(), dims.second(),
Zero)
71template<
class Form,
class Type>
74 Matrix<Form, Type>(dims.first(), dims.second(), val)
78template<
class Form,
class Type>
88template<
class Form,
class Type>
91 return NullObjectRef<Matrix<Form, Type>>();
95template<
class Form,
class Type>
102template<
class Form,
class Type>
109template<
class Form,
class Type>
112 return mRows_ * nCols_;
116template<
class Form,
class Type>
123template<
class Form,
class Type>
126 return !mRows_ || !nCols_;
130template<
class Form,
class Type>
133 if (!mRows_ || !nCols_)
136 <<
"Attempt to access element from empty matrix"
139 if (i < 0 || mRows_ <= i)
142 <<
"Index " << i <<
" out of range 0 ... " << mRows_-1
148template<
class Form,
class Type>
151 if (!mRows_ || !nCols_)
154 <<
"Attempt to access element from empty matrix"
157 if (j < 0 || nCols_ <= j)
160 <<
"index " << j <<
" out of range 0 ... " << nCols_-1
166template<
class Form,
class Type>
169 if (mRows_ < 0 || nCols_ < 0)
172 <<
"Incorrect size (" << mRows_ <<
", " << nCols_ <<
')' <<
nl
179template<
class Form,
class Type>
182 const label len = size();
189 for (label idx = 1; idx < len; ++idx)
191 if (v_[0] != v_[idx])
201template<
class Form,
class Type>
208template<
class Form,
class Type>
215template<
class Form,
class Type>
218 return reinterpret_cast<const char*
>(v_);
222template<
class Form,
class Type>
225 return reinterpret_cast<char*
>(v_);
229template<
class Form,
class Type>
232 return mRows_*nCols_*
sizeof(Type);
236template<
class Form,
class Type>
242 return (v_ + irow*nCols_);
246template<
class Form,
class Type>
252 return (v_ + irow*nCols_);
256template<
class Form,
class Type>
260 if (idx < 0 || this->size() <= idx)
263 <<
"index " << idx <<
" out of range 0 ... " << this->size()
271template<
class Form,
class Type>
275 if (idx < 0 || this->size() <= idx)
278 <<
"index " << idx <<
" out of range 0 ... " << this->size()
286template<
class Form,
class Type>
290 const label colIndex,
291 const label rowIndex,
297 len = mRows_ - rowIndex;
311template<
class Form,
class Type>
315 const label rowIndex,
316 const label colIndex,
322 len = nCols_ - colIndex;
336template<
class Form,
class Type>
340 const label rowIndex,
341 const label colIndex,
346 if (szRows < 0) szRows = mRows_ - rowIndex;
347 if (szCols < 0) szCols = nCols_ - colIndex;
360template<
class Form,
class Type>
361template<
class VectorSpace>
365 const label rowIndex,
380template<
class Form,
class Type>
384 const label colIndex,
385 const label rowIndex,
391 len = mRows_ - rowIndex;
405template<
class Form,
class Type>
409 const label rowIndex,
410 const label colIndex,
416 len = nCols_ - colIndex;
430template<
class Form,
class Type>
434 const label rowIndex,
435 const label colIndex,
440 if (szRows < 0) szRows = mRows_ - rowIndex;
441 if (szCols < 0) szCols = nCols_ - colIndex;
454template<
class Form,
class Type>
455template<
class VectorSpace>
459 const label rowIndex,
474template<
class Form,
class Type>
481template<
class Form,
class Type>
489template<
class Form,
class Type>
495 return this->AmulImpl(
x);
499template<
class Form,
class Type>
506 return this->AmulImpl(
x);
510template<
class Form,
class Type>
516 return this->TmulImpl(
x);
520template<
class Form,
class Type>
527 return this->TmulImpl(
x);
533template<
class Form,
class Type>
541template<
class Form,
class Type>
545 return v_ + (mRows_ * nCols_);
549template<
class Form,
class Type>
557template<
class Form,
class Type>
561 return v_ + (mRows_ * nCols_);
565template<
class Form,
class Type>
573template<
class Form,
class Type>
577 return v_ + (mRows_ * nCols_);
583template<
class Form,
class Type>
594 return v_[irow*nCols_ + jcol];
598template<
class Form,
class Type>
609 return v_[irow*nCols_ + jcol];
613template<
class Form,
class Type>
619 return v_ + irow*nCols_;
623template<
class Form,
class Type>
629 return v_ + irow*nCols_;
641template<
class Form,
class Type>
653template<
class Form,
class Type,
class Addr>
665template<
class Form,
class Type>
677template<
class Form,
class Type,
class Addr>
Base for lists with indirect addressing, templated on the list contents type and the addressing type....
A templated block of an (m x n) matrix of type <MatrixType>.
A templated (m x n) matrix of objects of <T>. The layout is (mRows x nCols) - row-major order:
const Type * const_iterator
Random access iterator for traversing a Matrix.
label n() const noexcept
The number of columns.
const Type * cdata() const noexcept
Type * iterator
Random access iterator for traversing a Matrix.
ConstMatrixBlock< mType > subRow(const label rowIndex, const label colIndex=0, label len=-1) const
Return const row or const row's subset of Matrix.
char * data_bytes() noexcept
const_iterator cbegin() const noexcept
Return const_iterator to begin traversing a constant Matrix.
bool empty() const noexcept
Return true if Matrix is empty (i.e., size() is zero)
const Type * rowData(const label irow) const
Return const pointer to data in the specified row.
label size() const
The number of elements in Matrix (m*n)
autoPtr< mType > clone() const
Clone.
void checki(const label irow) const
Check index i is within valid range [0, m)
void shallowResize(const label m, const label n)
Resize Matrix without reallocating storage (unsafe)
labelPair sizes() const
Return row/column sizes.
void checkSize() const
Check that dimensions are positive, non-zero.
ConstMatrixBlock< mType > subMatrix(const label rowIndex, const label colIndex, label szRows=-1, label szCols=-1) const
Return const sub-block of Matrix.
iterator begin() noexcept
Return an iterator to begin traversing a Matrix.
iterator end() noexcept
Return an iterator to end traversing a Matrix.
void setSize(const label m, const label n)
Change Matrix dimensions, preserving the elements.
bool uniform() const
True if all entries have identical values, and Matrix is non-empty.
const Type & at(const label idx) const
Linear addressing const element access.
const char * cdata_bytes() const noexcept
const Type * operator[](const label irow) const
Return const pointer to data in the specified row - rowData().
Matrix() noexcept
Default construct (empty matrix)
void checkj(const label jcol) const
Check index j is within valid range [0, n)
label m() const noexcept
The number of rows.
std::streamsize size_bytes() const noexcept
tmp< Field< Type > > Tmul(const UList< Type > &x) const
Left-multiply Matrix by a row vector (x * A)
tmp< Field< Type > > Amul(const UList< Type > &x) const
Right-multiply Matrix by a column vector (A * x)
static const Matrix< Form, Type > & null()
Return a null Matrix.
ConstMatrixBlock< mType > subColumn(const label colIndex, const label rowIndex=0, label len=-1) const
Return const column or column's subset of Matrix.
const_iterator cend() const noexcept
Return const_iterator to end traversing a constant Matrix.
A 1D vector of objects of type <T>, where the size of the vector is known and can be used for subscri...
static constexpr direction nCols
static constexpr direction mRows
Pointer management similar to std::unique_ptr, with some additional methods and type checking.
Creates a single block of cells from point coordinates, numbers of cells in each direction and an exp...
friend Ostream & operator(Ostream &, const faMatrix< Type > &)
A class for managing temporary objects.
A class representing the concept of 0 (zero) that can be used to avoid manipulating objects known to ...
patchWriters resize(patchIds.size())
#define FatalErrorInFunction
Report an error message using Foam::FatalError.
Pair< label > labelPair
A pair of labels.
errorManip< error > abort(error &err)
static constexpr const zero Zero
Global zero (0)
tmp< DimensionedField< TypeR, GeoMesh > > New(const tmp< DimensionedField< TypeR, GeoMesh > > &tdf1, const word &name, const dimensionSet &dimensions)
Global function forwards to reuseTmpDimensionedField::New.
constexpr char nl
The newline '\n' character (0x0a)