ARTS 2.5.10 (git: 2f1c442c)
ConstMatrixView Class Reference

A constant view of a Matrix. More...

#include <matpackI.h>

Inheritance diagram for ConstMatrixView:

## Public Types

using const_iterator = ConstIterator2D

## Public Member Functions

constexpr ConstMatrixView (const ConstMatrixView &)=default

constexpr ConstMatrixView (ConstMatrixView &&)=default

ConstMatrixViewoperator= (const ConstMatrixView &)=default

ConstMatrixViewoperator= (ConstMatrixView &&)=default

Index selem () const noexcept

Index nrows () const noexcept

Index ncols () const noexcept

Index drows () const noexcept

Index dcols () const noexcept

Index size () const noexcept

bool empty () const noexcept

Shape< 2 > shape () const

Numeric operator() (Index r, Index c) const ARTS_NOEXCEPT
Plain const index operator.

Numeric get (Index r, Index c) const ARTS_NOEXCEPT
Get element implementation without assertions.

ConstMatrixView operator() (const Range &r, const Range &c) const ARTS_NOEXCEPT
Const index operator for subrange.

ConstVectorView operator() (const Range &r, Index c) const ARTS_NOEXCEPT
Const index operator returning a column as an object of type ConstVectorView.

ConstVectorView operator() (Index r, const Range &c) const ARTS_NOEXCEPT
Const index operator returning a row as an object of type ConstVectorView.

ConstIterator2D begin () const ARTS_NOEXCEPT
Return const iterator to first row.

ConstIterator2D end () const ARTS_NOEXCEPT
Return const iterator behind last row.

ConstVectorView diagonal () const ARTS_NOEXCEPT
Matrix diagonal as vector.

virtual ~ConstMatrixView ()=default
Destructor.

Numericget_c_array () const noexcept

## Static Public Attributes

static constexpr bool matpack_type {true}

## Protected Member Functions

ConstMatrixView ()=default

ConstMatrixView (Numeric *data, const Range &r, const Range &c) ARTS_NOEXCEPT
Explicit constructor.

ConstMatrixView (Numeric *data, const Range &pr, const Range &pc, const Range &nr, const Range &nc) ARTS_NOEXCEPT
Recursive constructor.

## Protected Attributes

Range mrr {0, 0, 1}
The row range of mdata that is actually used.

Range mcr {0, 0, 1}
The column range of mdata that is actually used.

Numericmdata {nullptr}
Pointer to the plain C array that holds the data.

## Friends

class MatrixView

class ConstIterator3D

class ConstVectorView

class ConstTensor3View

class ConstTensor4View

class ConstTensor5View

class ConstTensor6View

class ConstTensor7View

class ConstComplexMatrixView

ConstMatrixView transpose (ConstMatrixView m) ARTS_NOEXCEPT
Const version of transpose.

int poly_root_solve (Matrix &roots, Vector &coeffs)

void mult (VectorView, const ConstMatrixView &, const ConstVectorView &)
Matrix-Vector Multiplication.

void mult (MatrixView, const ConstMatrixView &, const ConstMatrixView &)
Matrix-Matrix Multiplication.

void mult (MatrixView, const Sparse &, const ConstMatrixView &)
SparseMatrix - Matrix multiplication.

void mult (MatrixView, const ConstMatrixView &, const Sparse &)
Matrix - SparseMatrix multiplication.

void mult_general (VectorView, const ConstMatrixView &, const ConstVectorView &) ARTS_NOEXCEPT
Matrix Vector multiplication.

void mult_general (MatrixView, const ConstMatrixView &, const ConstMatrixView &) ARTS_NOEXCEPT
General matrix multiplication.

void ludcmp (Matrix &, ArrayOfIndex &, ConstMatrixView)
LU decomposition.

void lubacksub (VectorView, ConstMatrixView, ConstVectorView, const ArrayOfIndex &)
LU backsubstitution.

void inv (MatrixView, ConstMatrixView)
Matrix Inverse.

void diagonalize (MatrixView, VectorView, VectorView, ConstMatrixView)
Matrix Diagonalization.

std::ostream & operator<< (std::ostream &os, const ConstMatrixView &v)
Output operator.

## Detailed Description

A constant view of a Matrix.

This, together with the derived class MatrixView, contains the main implementation of a Matrix. It defines the concepts of MatrixView. Plus additionally the recursive subrange operator, which makes it possible to create a MatrixView from a subrange of a MatrixView.

The class Matrix is just a special case of a MatrixView which also allocates storage.

Definition at line 1065 of file matpackI.h.

## ◆ const_iterator

Definition at line 1075 of file matpackI.h.

## ◆ ConstMatrixView() [1/5]

 constexpr ConstMatrixView::ConstMatrixView ( const ConstMatrixView & )
constexprdefault

## ◆ ConstMatrixView() [2/5]

 constexpr ConstMatrixView::ConstMatrixView ( ConstMatrixView && )
constexprdefault

## ◆ ~ConstMatrixView()

 virtual ConstMatrixView::~ConstMatrixView ( )
virtualdefault

Destructor.

## ◆ ConstMatrixView() [3/5]

 ConstMatrixView::ConstMatrixView ( )
protecteddefault

## ◆ ConstMatrixView() [4/5]

 ConstMatrixView::ConstMatrixView ( Numeric * data, const Range & rr, const Range & cr )
protected

Explicit constructor.

This one is used by Matrix to initialize its own MatrixView part. The row range rr must have a stride to account for the length of one row.

Definition at line 478 of file matpackI.cc.

## ◆ ConstMatrixView() [5/5]

 ConstMatrixView::ConstMatrixView ( Numeric * data, const Range & pr, const Range & pc, const Range & nr, const Range & nc )
protected

Recursive constructor.

This is used to construct SubMatrices from SubMatrices. That means that the new ranges have to be interpreted relative to the original ranges.

The new ranges may contain -1 for the extent which acts as a joker. However, the used Range constructor converts this to an explicit range, consistent with the original Range.

Parameters
 *data The actual data. pr Previous range. pc Previous range. nr New Range. nc New Range.

Definition at line 500 of file matpackI.cc.

## ◆ begin()

 ConstIterator2D ConstMatrixView::begin ( ) const

Return const iterator to first row.

Definition at line 449 of file matpackI.cc.

References ConstVectorView, mcr, mdata, mrr, Range::mstart, and Range::mstride.

## ◆ dcols()

 Index ConstMatrixView::dcols ( ) const
inlinenoexcept

Definition at line 1082 of file matpackI.h.

## ◆ diagonal()

 ConstVectorView ConstMatrixView::diagonal ( ) const

Matrix diagonal as vector.

Returns a ConstMatrixView on the diagonal entries of the matrix. For a given (n,m) matrix M the diagonal vector v is the vector of length min{n,m} with entries

 v[i] = M(i,i)

Returns
The diagonal vector v.

Definition at line 469 of file matpackI.cc.

References ConstVectorView, mcr, mdata, Range::mextent, mrr, Range::mstart, and Range::mstride.

Referenced by test_diagonal().

## ◆ drows()

 Index ConstMatrixView::drows ( ) const
inlinenoexcept

Definition at line 1081 of file matpackI.h.

## ◆ empty()

 bool ConstMatrixView::empty ( ) const
inlinenoexcept

## ◆ end()

 ConstIterator2D ConstMatrixView::end ( ) const

Return const iterator behind last row.

Definition at line 454 of file matpackI.cc.

References ConstVectorView, mcr, mdata, Range::mextent, mrr, Range::mstart, and Range::mstride.

Referenced by copy(), Matrix::Matrix(), MatrixView::operator=(), Matrix::operator=(), and transform().

## ◆ get()

 Numeric ConstMatrixView::get ( Index r, Index c ) const
inline

Get element implementation without assertions.

Definition at line 1104 of file matpackI.h.

References c, and ConstVectorView::mdata.

Referenced by interp().

## ◆ get_c_array()

 Numeric * ConstMatrixView::get_c_array ( ) const
inlinenoexcept

Definition at line 1157 of file matpackI.h.

References ConstVectorView::mdata.

## ◆ operator()() [1/4]

 ConstMatrixView ConstMatrixView::operator() ( const Range & r, const Range & c ) const

Const index operator for subrange.

We have to also account for the case, that *this is already a subrange of a Matrix. This allows correct recursive behavior.

Definition at line 415 of file matpackI.cc.

References c.

## ◆ operator()() [2/4]

 ConstVectorView ConstMatrixView::operator() ( const Range & r, Index c ) const

Const index operator returning a column as an object of type ConstVectorView.

Parameters
 r A range of rows. c Index of selected column

Definition at line 425 of file matpackI.cc.

References ARTS_ASSERT, and c.

## ◆ operator()() [3/4]

 ConstVectorView ConstMatrixView::operator() ( Index r, const Range & c ) const

Const index operator returning a row as an object of type ConstVectorView.

Parameters
 r Index of selected row. c Range of columns

Definition at line 439 of file matpackI.cc.

References ARTS_ASSERT.

## ◆ operator()() [4/4]

 Numeric ConstMatrixView::operator() ( Index r, Index c ) const
inline

Plain const index operator.

Definition at line 1093 of file matpackI.h.

References ARTS_ASSERT, c, and ConstVectorView::get().

## ◆ operator=() [1/2]

 ConstMatrixView & ConstMatrixView::operator= ( const ConstMatrixView & )
default

## ◆ operator=() [2/2]

 ConstMatrixView & ConstMatrixView::operator= ( ConstMatrixView && )
default

## ◆ selem()

 Index ConstMatrixView::selem ( ) const
inlinenoexcept

Definition at line 1078 of file matpackI.h.

## ◆ shape()

 Shape< 2 > ConstMatrixView::shape ( ) const
inline

Returns the shape as an array (to allow templates to just look for shape on different matpack objects)

Definition at line 1089 of file matpackI.h.

Referenced by test_multiplication_and_setting().

## ◆ size()

 Index ConstMatrixView::size ( ) const
inlinenoexcept

Definition at line 1085 of file matpackI.h.

## ◆ ConstComplexMatrixView

 friend class ConstComplexMatrixView
friend

Definition at line 1133 of file matpackI.h.

## ◆ ConstIterator3D

 friend class ConstIterator3D
friend

Definition at line 1126 of file matpackI.h.

## ◆ ConstTensor3View

 friend class ConstTensor3View
friend

Definition at line 1128 of file matpackI.h.

## ◆ ConstTensor4View

 friend class ConstTensor4View
friend

Definition at line 1129 of file matpackI.h.

## ◆ ConstTensor5View

 friend class ConstTensor5View
friend

Definition at line 1130 of file matpackI.h.

## ◆ ConstTensor6View

 friend class ConstTensor6View
friend

Definition at line 1131 of file matpackI.h.

## ◆ ConstTensor7View

 friend class ConstTensor7View
friend

Definition at line 1132 of file matpackI.h.

## ◆ ConstVectorView

 friend class ConstVectorView
friend

Definition at line 1127 of file matpackI.h.

Referenced by begin(), diagonal(), and end().

## ◆ diagonalize

 void diagonalize ( MatrixView , VectorView , VectorView , ConstMatrixView )
friend

Matrix Diagonalization.

Return P and W from A in the statement diag(P^-1*A*P)-W == 0. The real function will require some manipulation if the eigenvalues are imaginary.

The real version returns WR and WI as returned by dgeev. The complex version just returns W.

The function makes many copies and is thereby not fast. There are no tests on the condition of the returned matrix, so nan and inf can occur.

Parameters
 [out] P The right eigenvectors. [out] WR The real eigenvalues. [out] WI The imaginary eigenvalues. [in] A The matrix to diagonalize.

Definition at line 240 of file lin_alg.cc.

## ◆ inv

 void inv ( MatrixView , ConstMatrixView )
friend

Matrix Inverse.

Compute the inverse of a matrix such that I = Ainv*A = A*Ainv. Both MatrixViews must be square and have the same size n. During the inversion one additional n times n Matrix is allocated and work space memory for faster inversion is allocated and freed.

Parameters
 [out] Ainv The MatrixView to contain the inverse of A. [in] A The matrix to be inverted.

Definition at line 167 of file lin_alg.cc.

## ◆ lubacksub

 void lubacksub ( VectorView , ConstMatrixView , ConstVectorView , const ArrayOfIndex & )
friend

LU backsubstitution.

Solves a set of linear equations Ax=b. It is neccessairy to do a L decomposition using the function ludcp before using this function. The backsubstitution is in-place, i.e. x and b may be the same vector.

Parameters
 x Output: Solution vector of the equation system. LU Input: LU decomposition of the matrix (output of function ludcp). b Input: Right-hand-side vector of equation system. indx Input: Pivoting information (output of function ludcp).

Definition at line 91 of file lin_alg.cc.

## ◆ ludcmp

 void ludcmp ( Matrix & , ArrayOfIndex & , ConstMatrixView )
friend

LU decomposition.

This function performes a LU Decomposition of the matrix A. (Compare Numerical Recipies in C, pages 36-48.)

Parameters
 LU Output: returns L and U in one matrix indx Output: Vector that records the row permutation. A Input: Matrix for which the LU decomposition is performed

Definition at line 57 of file lin_alg.cc.

## ◆ MatrixView

 friend class MatrixView
friend

Definition at line 1125 of file matpackI.h.

## ◆ mult [1/4]

 void mult ( MatrixView , const ConstMatrixView & , const ConstMatrixView & )
friend

Matrix-Matrix Multiplication.

Performs the matrix multiplication A = B * C. The dimensions must match, i.e. A must be a m times n matrix, B a m times k matrix and C a k times c matrix. No memory reallocation takes place, only the data is copied. Using this function on overlapping MatrixViews belonging to the same Matrix will lead to unpredictable results. In particular, this means that A and B must not be the same matrix!

If the memory layout allows it, the multiplication is performed using BLAS' _dgemm, which leads to a significant speed up of the operation. To be compatible with BLAS the matrix views A, B and C must satisfy:

• A must have column or row stride 1
• B must have column or row stride 1
• C must have column stride 1

That means that A and B can be ConstMatrixView objects corresponding to transposed/non-transposed submatrices of a matrix, that are continuous along their first/second dimension. C must correspond to a non-transposed submatrix of a matrix, that is continuous along its second dimension.

Parameters
 [in,out] A The matrix A, that will hold the result of the multiplication. [in] B The matrix B [in] C The matrix C

Definition at line 1199 of file matpackI.cc.

## ◆ mult [2/4]

 void mult ( MatrixView , const ConstMatrixView & , const Sparse & )
friend

Matrix - SparseMatrix multiplication.

Calculates the matrix product:

A = B*C, where C is sparse.

Output comes first!

Dimensions of A, B, and C must match. No memory reallocation takes place, only the data is copied.

Parameters
 A Output: Result matrix (full). B First matrix to multiply (sparse). C Second matrix to multiply (full).
Date
Tue Jul 15 15:05:40 2003

Definition at line 539 of file matpackII.cc.

## ◆ mult [3/4]

 void mult ( MatrixView , const Sparse & , const ConstMatrixView & )
friend

SparseMatrix - Matrix multiplication.

Calculates the matrix product:

A = B*C, where B is sparse.

Output comes first!

Dimensions of A, B, and C must match. No memory reallocation takes place, only the data is copied.

Parameters
 A Output: Result matrix (full). B First matrix to multiply (sparse). C Second matrix to multiply (full).
Date
Tue Jul 15 15:05:40 2003

Definition at line 490 of file matpackII.cc.

## ◆ mult [4/4]

 void mult ( VectorView , const ConstMatrixView & , const ConstVectorView & )
friend

Matrix-Vector Multiplication.

Computes the Matrix-Vector product y = M * x, for a m times n matrix M, a length-m vector y and a length-n vector x.

The product is computed using the dgemv_ routine from the BLAS library if the matrix is contiguous in memory. If this is not the case, the mult_general method is used to compute the product.

No memory is allocated for the computation and the matrix and vector views may not overlap.

Parameters
 [out] y The length-m VectorView where the result is stored. [in] M Reference to the m-times-n ConstMatrixView holding the matrix M. [in] x Reference to the length-n ConstVectorView holding the vector x.

Definition at line 1080 of file matpackI.cc.

## ◆ mult_general [1/2]

 void mult_general ( MatrixView , const ConstMatrixView & , const ConstMatrixView & )
friend

General matrix multiplication.

This is the fallback matrix multiplication which works for all ConstMatrixView objects.

Parameters
 [in,out] A The matrix A, that will hold the result of the multiplication. [in] B The matrix B [in] C The matrix C

Definition at line 1303 of file matpackI.cc.

## ◆ mult_general [2/2]

 void mult_general ( VectorView y, const ConstMatrixView & M, const ConstVectorView & x )
friend

Matrix Vector multiplication.

y = M*x. Note that the order is different from MTL, output comes first! Dimensions of y, M, and x must match. No memory reallocation takes place, only the data is copied. Using this function on overlapping Matrix and VectorViews belonging to the same Matrix will lead to unpredictable results.

The implementation here is different from the other multiplication routines. It does not use iterators but a more drastic approach to gain maximum performance.

Definition at line 1138 of file matpackI.cc.

## ◆ operator<<

 std::ostream & operator<< ( std::ostream & os, const ConstMatrixView & v )
friend

Output operator.

This demonstrates how iterators can be used to traverse the matrix. The iterators know which part of the matrix is ‘active’, and also the strides in both directions. This function is a bit more complicated than necessary to illustrate the concept, because the formating should look nice. This means that the first row, and the first element in each row, have to be treated individually.

Definition at line 517 of file matpackI.cc.

## ◆ poly_root_solve

 int poly_root_solve ( Matrix & roots, Vector & coeffs )
friend

Definition at line 90 of file poly_roots.cc.

## ◆ transpose

 ConstMatrixView transpose ( ConstMatrixView m )
friend

Const version of transpose.

Definition at line 1403 of file matpackI.cc.

## ◆ matpack_type

 constexpr bool ConstMatrixView::matpack_type {true}
staticconstexpr

Definition at line 1067 of file matpackI.h.

Referenced by test_concepts().

## ◆ mcr

 Range ConstMatrixView::mcr {0, 0, 1}
protected

The column range of mdata that is actually used.

Definition at line 1174 of file matpackI.h.

## ◆ mdata

 Numeric* ConstMatrixView::mdata {nullptr}
protected

Pointer to the plain C array that holds the data.

Definition at line 1176 of file matpackI.h.

## ◆ mrr

 Range ConstMatrixView::mrr {0, 0, 1}
protected

The row range of mdata that is actually used.

Definition at line 1172 of file matpackI.h.

The documentation for this class was generated from the following files: