15#ifndef covariance_matrix_h
16#define covariance_matrix_h
22#include "matpack_data.h"
23#include "matpack_math.h"
24#include "matpack_sparse.h"
67 std::shared_ptr<Matrix>
dense)
90 std::shared_ptr<Sparse>
sparse)
128 return ::diagonal(*
dense_);
164 friend void mult(MatrixView, ConstMatrixView,
const Block &);
165 friend void mult(MatrixView,
const Block &, ConstMatrixView);
166 friend void mult(VectorView,
const Block &, ConstVectorView);
180void mult(MatrixView, ConstMatrixView,
const Block &);
181void mult(MatrixView,
const Block &, ConstMatrixView);
182void mult(VectorView,
const Block &, ConstVectorView);
220 explicit operator Matrix()
const;
383 std::vector<const Block *> &blocks)
const;
MatrixType get_matrix_type() const
Block(Range row_range, Range column_range, IndexPair indices, std::shared_ptr< Sparse > sparse)
Block & operator=(const Block &)=default
const Sparse & get_sparse() const
const Matrix & get_dense() const
Block(Range row_range, Range column_range, IndexPair indices, std::shared_ptr< Matrix > dense)
friend MatrixView operator+=(MatrixView, const Block &)
IndexPair get_indices() const
void set_indices(Index f, Index s)
void set_matrix(std::shared_ptr< Sparse > sparse)
Range get_row_range() const
Range get_column_range() const
void set_matrix(std::shared_ptr< Matrix > dense)
Block & operator=(Block &&)=default
std::shared_ptr< Matrix > dense_
std::shared_ptr< Sparse > sparse_
friend void mult(MatrixView, ConstMatrixView, const Block &)
Block(const Block &)=default
Range & get_column_range()
friend void solve(VectorView, const CovarianceMatrix &, ConstVectorView)
std::vector< Block > correlations_
~CovarianceMatrix()=default
void add_correlation(Block c)
Add block to covariance matrix.
void compute_inverse() const
Compute the inverse of this correlation matrix.
bool has_block(Index i, Index j)
Check if the block with indices (i, j) is contained in the covariance matrix.
const Block * get_block(Index i=-1, Index j=-1)
Return a pointer to the block with indices (i,j).
friend void xml_read_from_stream(istream &, CovarianceMatrix &, bifstream *, const Verbosity &)
Reads CovarianceMatrix from XML input stream.
std::vector< Block > & get_inverse_blocks()
Blocks of the inverse covariance matrix.
bool has_inverse(IndexPair indices) const
Matrix get_inverse() const
bool is_consistent(const ArrayOfArrayOfIndex &jis) const
Checks that the dimensions of the blocks in the covariance matrix are consistent with ranges occupied...
friend MatrixView operator+=(MatrixView, const CovarianceMatrix &)
CovarianceMatrix & operator=(CovarianceMatrix &&)=default
friend std::ostream & operator<<(std::ostream &os, const CovarianceMatrix &v)
std::vector< Block > inverses_
void generate_blocks(std::vector< std::vector< const Block * > > &) const
CovarianceMatrix & operator=(const CovarianceMatrix &)=default
CovarianceMatrix(CovarianceMatrix &&)=default
friend void mult_inv(MatrixView, ConstMatrixView, const CovarianceMatrix &)
void invert_correlation_block(std::vector< Block > &inverses, std::vector< const Block * > &blocks) const
friend void xml_write_to_stream(ostream &, const CovarianceMatrix &, bofstream *, const String &, const Verbosity &)
Write CovarianceMatrix to XML output stream.
CovarianceMatrix()=default
std::vector< Block > & get_blocks()
Block in the covariance matrix.
Vector diagonal() const
Diagonal elements as vector.
bool has_diagonal_blocks(const ArrayOfArrayOfIndex &jis) const
Checks that the covariance matrix contains one diagonal block per retrieval quantity.
friend void mult(MatrixView, ConstMatrixView, const CovarianceMatrix &)
friend void add_inv(MatrixView, const CovarianceMatrix &)
void add_correlation_inverse(Block c)
Add block inverse to covariance matrix.
Index ndiagblocks() const
! The number of diagonal blocks in the matrix excluding inverses.
CovarianceMatrix(const CovarianceMatrix &)=default
Vector inverse_diagonal() const
Diagonal of the inverse of the covariance matrix as vector.
Index nblocks() const
! The number of blocks in the matrix excluding inverses.
Index ninvdiagblocks() const
! The number of inverse diagonal blocks in the matrix.
Binary output file stream class.
Binary output file stream class.
void solve(VectorView, const CovarianceMatrix &, ConstVectorView)
MatrixView operator+=(MatrixView, const Block &)
void mult_inv(MatrixView, ConstMatrixView, const CovarianceMatrix &)
void add_inv(MatrixView A, const Block &)
std::pair< Index, Index > IndexPair
void mult(MatrixView, ConstMatrixView, const Block &)
#define ARTS_ASSERT(condition,...)
Routines for setting up the jacobian.