32template<
class Form,
class Cmpt, Foam::direction Mrows, Foam::direction Ncols>
42template<
class Form,
class Cmpt, Foam::direction Mrows, Foam::direction Ncols>
43template<
class Form2,
class Cmpt2>
53template<
class Form,
class Cmpt, Foam::direction Mrows, Foam::direction Ncols>
56 template<
class, Foam::direction, Foam::direction>
class Block2,
62 const Block2<Form, BRowStart, BColStart>&
block
69 operator()(i, j) =
block(i, j);
75template<
class Form,
class Cmpt, Foam::direction Mrows, Foam::direction Ncols>
82template<
class Form,
class Cmpt, Foam::direction Mrows, Foam::direction Ncols>
83template<
class SubTensor, Foam::direction BRowStart, Foam::direction BColStart>
93 "Rows in block > rows in matrix"
98 "Columns in block > columns in matrix"
103template<
class Form,
class Cmpt, Foam::direction Mrows, Foam::direction Ncols>
104template<
class SubTensor, Foam::direction BRowStart, Foam::direction BColStart>
114 "Rows in block > rows in matrix"
119 "Columns in block > columns in matrix"
126template<
class Form,
class Cmpt, Foam::direction Mrows, Foam::direction Ncols>
127template<Foam::direction Row, Foam::direction Col>
130 static_assert(Row < Mrows && Col < Ncols,
"Address outside matrix");
131 return this->
v_[Row*Ncols + Col];
135template<
class Form,
class Cmpt, Foam::direction Mrows, Foam::direction Ncols>
136template<Foam::direction Row, Foam::direction Col>
139 static_assert(Row < Mrows && Col < Ncols,
"Address outside matrix");
140 return this->
v_[Row*Ncols + Col];
144template<
class Form,
class Cmpt, Foam::direction Mrows, Foam::direction Ncols>
151template<
class Form,
class Cmpt, Foam::direction Mrows, Foam::direction Ncols>
158template<
class Form,
class Cmpt, Foam::direction Mrows, Foam::direction Ncols>
165template<
class Form,
class Cmpt, Foam::direction Mrows, Foam::direction Ncols>
172template<
class Form,
class Cmpt, Foam::direction Mrows, Foam::direction Ncols>
179template<
class Form,
class Cmpt, Foam::direction Mrows, Foam::direction Ncols>
186template<
class Form,
class Cmpt, Foam::direction Mrows, Foam::direction Ncols>
193template<
class Form,
class Cmpt, Foam::direction Mrows, Foam::direction Ncols>
200template<
class Form,
class Cmpt, Foam::direction Mrows, Foam::direction Ncols>
207template<
class Form,
class Cmpt, Foam::direction Mrows, Foam::direction Ncols>
214template<
class Form,
class Cmpt, Foam::direction Mrows, Foam::direction Ncols>
221template<
class Form,
class Cmpt, Foam::direction Mrows, Foam::direction Ncols>
228template<
class Form,
class Cmpt, Foam::direction Mrows, Foam::direction Ncols>
235template<
class Form,
class Cmpt, Foam::direction Mrows, Foam::direction Ncols>
242template<
class Form,
class Cmpt, Foam::direction Mrows, Foam::direction Ncols>
249template<
class Form,
class Cmpt, Foam::direction Mrows, Foam::direction Ncols>
256template<
class Form,
class Cmpt, Foam::direction Mrows, Foam::direction Ncols>
262template<
class Form,
class Cmpt, Foam::direction Mrows, Foam::direction Ncols>
268template<
class Form,
class Cmpt, Foam::direction Mrows, Foam::direction Ncols>
272 static_assert(Mrows == Ncols,
"Matrix is not square");
284template<
class Form,
class Cmpt, Foam::direction Mrows, Foam::direction Ncols>
302template<
class Form,
class Cmpt, Foam::direction Mrows, Foam::direction Ncols>
317template<
class Form,
class Cmpt, Foam::direction Mrows, Foam::direction Ncols>
326 Block<SubTensor, BRowStart, BColStart>
335template<
class Form,
class Cmpt, Foam::direction Mrows, Foam::direction Ncols>
343 if (i >= Mrows || j >= Ncols)
346 <<
"indices out of range"
351 return this->
v_[i*Ncols + j];
355template<
class Form,
class Cmpt, Foam::direction Mrows, Foam::direction Ncols>
363 if (i >= Mrows || j >= Ncols)
366 <<
"indices out of range"
371 return this->
v_[i*Ncols + j];
375template<
class Form,
class Cmpt, Foam::direction Mrows, Foam::direction Ncols>
376template<
class SubTensor, Foam::direction BRowStart, Foam::direction BColStart>
386template<
class Form,
class Cmpt, Foam::direction Mrows, Foam::direction Ncols>
387template<
class SubTensor, Foam::direction BRowStart, Foam::direction BColStart>
393 return matrix_(BRowStart + i, BColStart + j);
397template<
class Form,
class Cmpt, Foam::direction Mrows, Foam::direction Ncols>
398template<
class SubTensor, Foam::direction BRowStart, Foam::direction BColStart>
406 for (
direction i=0; i<SubTensor::mRows; ++i)
408 for (
direction j=0; j<SubTensor::nCols; ++j)
410 st[i*SubTensor::nCols + j] =
operator()(i, j);
418template<
class Form,
class Cmpt, Foam::direction Mrows, Foam::direction Ncols>
419template<
class SubTensor, Foam::direction BRowStart, Foam::direction BColStart>
425 return matrix_(BRowStart + i, BColStart + j);
429template<
class Form,
class Cmpt, Foam::direction Mrows, Foam::direction Ncols>
430template<
class SubTensor, Foam::direction BRowStart, Foam::direction BColStart>
436 return matrix_(BRowStart + i, BColStart + j);
440template<
class Form,
class Cmpt, Foam::direction Mrows, Foam::direction Ncols>
450template<
class Form,
class Cmpt, Foam::direction Mrows, Foam::direction Ncols>
457 *
this = *
this & matrix;
461template<
class Form,
class Cmpt, Foam::direction Mrows, Foam::direction Ncols>
464 template<
class, Foam::direction, Foam::direction>
class Block2,
470 const Block2<Form, BRowStart, BColStart>&
block
483template<
class Form,
class Cmpt, Foam::direction Mrows, Foam::direction Ncols>
484template<
class SubTensor, Foam::direction BRowStart, Foam::direction BColStart>
488Block<SubTensor, BRowStart, BColStart>
::
504template<
class Form,
class Cmpt, Foam::direction Mrows, Foam::direction Ncols>
505template<
class SubTensor, Foam::direction BRowStart, Foam::direction BColStart>
506template<
class VSForm>
509Block<SubTensor, BRowStart, BColStart>
::
515 static_assert(
nCols == 1,
"Matrix must have a single column");
517 for (
direction i=0; i<SubTensor::mRows; ++i)
531template<
class Form,
class Cmpt, direction Mrows, direction Ncols>
541template<
class Form,
class Cmpt, direction Ncmpts>
579 "Number of columns in matrix 1 != number of rows in matrix 2"
590 result(i, j) += matrix1(i,
k)*matrix2(
k, j);
599template<
class Form,
class VSForm,
class Cmpt, direction Mrows, direction Ncols>
612 result[i] += matrix(i, j)*v[j];
640 result(i, j) = v1[i]*v2[j];
An Istream is an abstract base class for all input systems (streams, files, token lists etc)....
static const direction nCols
static const direction mRows
static const direction nCols
static const direction mRows
typeOfTranspose< Cmpt, Form >::type T() const
Return the transpose of the matrix.
static constexpr direction nCols
static msType identity()
An identity matrix for square matrix-spaces.
const Cmpt & elmt() const
Fast const element access using compile-time addressing.
static constexpr direction mRows
ConstBlock< SubTensor, BRowStart, BColStart > block() const
Return a const sub-block corresponding to the specified type.
MatrixSpace()=default
Default construct.
const Cmpt & operator()(const direction &i, const direction &j) const
(i, j) const element access operator
void operator=(const VectorSpace< Form, Cmpt, Ncmpts > &)
Cmpt v_[Ncmpts]
The components of this vector space.
friend Ostream & operator(Ostream &, const VectorSpace< Form, Cmpt, Ncmpts > &)
Creates a single block of cells from point coordinates, numbers of cells in each direction and an exp...
Ostream & operator()() const
Output stream (master only).
friend Ostream & operator(Ostream &, const faMatrix< Type > &)
type
Volume classification types.
A class representing the concept of 0 (zero) that can be used to avoid manipulating objects known to ...
#define FatalErrorInFunction
Report an error message using Foam::FatalError.
errorManip< error > abort(error &err)
static constexpr const zero Zero
Global zero (0)