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
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>
131 static_assert(Row < Mrows && Col < Ncols,
"Address outside matrix");
132 return this->
v_[Row*Ncols + Col];
136template<
class Form,
class Cmpt, Foam::direction Mrows, Foam::direction Ncols>
137template<Foam::direction Row, Foam::direction Col>
141 static_assert(Row < Mrows && Col < Ncols,
"Address outside matrix");
142 return this->
v_[Row*Ncols + Col];
146template<
class Form,
class Cmpt, Foam::direction Mrows, Foam::direction Ncols>
150 static_assert(Mrows == Ncols,
"Matrix is not square");
162template<
class Form,
class Cmpt, Foam::direction Mrows, Foam::direction Ncols>
180template<
class Form,
class Cmpt, Foam::direction Mrows, Foam::direction Ncols>
188 ConstBlock<SubTensor, BRowStart, BColStart>
195template<
class Form,
class Cmpt, Foam::direction Mrows, Foam::direction Ncols>
213template<
class Form,
class Cmpt, Foam::direction Mrows, Foam::direction Ncols>
221 if (i >= Mrows || j >= Ncols)
224 <<
"indices out of range"
229 return this->
v_[i*Ncols + j];
233template<
class Form,
class Cmpt, Foam::direction Mrows, Foam::direction Ncols>
241 if (i >= Mrows || j >= Ncols)
244 <<
"indices out of range"
249 return this->
v_[i*Ncols + j];
253template<
class Form,
class Cmpt, Foam::direction Mrows, Foam::direction Ncols>
254template<
class SubTensor, Foam::direction BRowStart, Foam::direction BColStart>
264template<
class Form,
class Cmpt, Foam::direction Mrows, Foam::direction Ncols>
265template<
class SubTensor, Foam::direction BRowStart, Foam::direction BColStart>
271 return matrix_(BRowStart + i, BColStart + j);
275template<
class Form,
class Cmpt, Foam::direction Mrows, Foam::direction Ncols>
276template<
class SubTensor, Foam::direction BRowStart, Foam::direction BColStart>
284 for (
direction i=0; i<SubTensor::mRows; ++i)
286 for (
direction j=0; j<SubTensor::nCols; ++j)
288 st[i*SubTensor::nCols + j] =
operator()(i, j);
296template<
class Form,
class Cmpt, Foam::direction Mrows, Foam::direction Ncols>
297template<
class SubTensor, Foam::direction BRowStart, Foam::direction BColStart>
303 return matrix_(BRowStart + i, BColStart + j);
307template<
class Form,
class Cmpt, Foam::direction Mrows, Foam::direction Ncols>
308template<
class SubTensor, Foam::direction BRowStart, Foam::direction BColStart>
314 return matrix_(BRowStart + i, BColStart + j);
318template<
class Form,
class Cmpt, Foam::direction Mrows, Foam::direction Ncols>
328template<
class Form,
class Cmpt, Foam::direction Mrows, Foam::direction Ncols>
335 *
this = *
this & matrix;
339template<
class Form,
class Cmpt, Foam::direction Mrows, Foam::direction Ncols>
342 template<
class, Foam::direction, Foam::direction>
class Block2,
348 const Block2<Form, BRowStart, BColStart>&
block
361template<
class Form,
class Cmpt, Foam::direction Mrows, Foam::direction Ncols>
362template<
class SubTensor, Foam::direction BRowStart, Foam::direction BColStart>
366Block<SubTensor, BRowStart, BColStart>
::
382template<
class Form,
class Cmpt, Foam::direction Mrows, Foam::direction Ncols>
383template<
class SubTensor, Foam::direction BRowStart, Foam::direction BColStart>
384template<
class VSForm>
387Block<SubTensor, BRowStart, BColStart>
::
393 static_assert(
nCols == 1,
"Matrix must have a single column");
395 for (
direction i=0; i<SubTensor::mRows; ++i)
409template<
class Form,
class Cmpt, direction Mrows, direction Ncols>
419template<
class Form,
class Cmpt, direction Ncmpts>
420inline typename typeOfTranspose<Cmpt, Form>::type
T
422 const VectorSpace<Form, Cmpt, Ncmpts>& v
425 typename typeOfTranspose<Cmpt, Form>::type result;
457 "Number of columns in matrix 1 != number of rows in matrix 2"
468 result(i, j) += matrix1(i,
k)*matrix2(
k, j);
477template<
class Form,
class VSForm,
class Cmpt, direction Mrows, direction Ncols>
490 result[i] += matrix(i, j)*v[j];
518 result(i, j) = v1[i]*v2[j];
tmp< GeometricField< Type, PatchField, GeoMesh > > T() const
Return transpose (only if it is a tensor field).
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 mRows
typeOfTranspose< Cmpt, Form >::type T() const
Return the transpose of the matrix.
static constexpr direction nCols
MatrixSpace< Form, Cmpt, Mrows, Ncols > msType
MatrixSpace type.
const Cmpt & elmt() const noexcept
Fast const element access using compile-time addressing.
static msType identity()
An identity matrix for square matrix-spaces.
const Cmpt & operator()(const direction i, const direction j) const
(i, j) const element access operator
static constexpr direction mRows
ConstBlock< SubTensor, BRowStart, BColStart > block() const
Return a const sub-block corresponding to the specified type.
MatrixSpace()=default
Default construct.
void operator=(const VectorSpace< Form, Cmpt, Ncmpts > &)
VectorSpace< Form, Cmpt, Ncmpts > vsType
friend Ostream & operator(Ostream &, const VectorSpace< Form, Cmpt, Ncmpts > &)
Abstract template class to provide the form resulting from the inner-product of two forms.
Abstract template class to provide the form resulting from the outer-product of two forms.
Abstract template class to provide the transpose form of a form.
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).
error FatalError
Error stream (stdout output on all processes), with additional 'FOAM FATAL ERROR' header text and sta...