63 for (; i != e; ++i) s += *i;
72 const Range& r)
const {
101 : mrange(0, 1), mdata(&const_cast<
Complex&>(
a)) {
109 : mrange(range), mdata(data) {
126 : mrange(p, n), mdata(data) {
138 os << std::setw(3) << *i;
141 for (; i != end; ++i) {
142 os <<
" " << std::setw(3) << *i;
155 "Creating a ComplexVectorView from a const ComplexVector is not allowed.\n"
156 "This is not really a runtime error, but I don't want to start\n"
157 "producing direct output from inside matpack. And just exiting is\n"
159 "If you see this error, there is a bug in the code, not in the\n"
313 for (; i != e; ++i, ++s) *i *= *s;
326 for (; i != e; ++i, ++s) *i *= *s;
340 for (; i != e; ++i, ++s) *i /= *s;
353 for (; i != e; ++i, ++s) *i /= *s;
367 for (; i != e; ++i, ++s) *i += *s;
380 for (; i != e; ++i, ++s) *i += *s;
394 for (; i != e; ++i, ++s) *i -= *s;
407 for (; i != e; ++i, ++s) *i -= *s;
460 memcpy((
void*)target.
mx,
464 for (; origin != end; ++origin, ++target) *target = *origin;
469 for (; target != end; ++target) *target = x;
513 for (; i != e; ++i) {
533 for (; i != e; ++i) {
553 for (; i != e; ++i) {
573 for (; i != e; ++i) {
603 auto vec_it_end =
v.end();
605 for (
auto vec_it =
v.begin();
606 vec_it != vec_it_end;
614 auto vec_it_end =
v.end();
616 for (
auto vec_it =
v.begin();
617 vec_it != vec_it_end;
648 if (
this not_eq &
v) {
763 swap(v1.mrange, v2.mrange);
764 swap(v1.mdata, v2.mdata);
863 : mrr(rr), mcr(cr), mdata(data) {
886 : mrr(pr, nr), mcr(pc, nc), mdata(data) {
907 os << std::setw(3) << *ic;
910 for (; ic != end_col; ++ic) {
911 os <<
" " << std::setw(3) << *ic;
915 for (; ir != end_row; ++ir) {
921 os << std::setw(3) << *ic;
924 for (; ic != end_col; ++ic) {
925 os <<
" " << std::setw(3) << *ic;
1145 for (; r != er; ++r, ++sr) {
1149 for (;
c != ec; ++
c, ++sc) *
c *= *sc;
1161 for (; r != er; ++r, ++sr) {
1165 for (;
c != ec; ++
c, ++sc) *
c *= *sc;
1178 for (; r != er; ++r, ++sr) {
1182 for (;
c != ec; ++
c, ++sc) *
c /= *sc;
1194 for (; r != er; ++r, ++sr) {
1198 for (;
c != ec; ++
c, ++sc) *
c /= *sc;
1211 for (; r != er; ++r, ++sr) {
1215 for (;
c != ec; ++
c, ++sc) *
c += *sc;
1227 for (; r != er; ++r, ++sr) {
1231 for (;
c != ec; ++
c, ++sc) *
c += *sc;
1244 for (; r != er; ++r, ++sr) {
1248 for (;
c != ec; ++
c, ++sc) *
c -= *sc;
1260 for (; r != er; ++r, ++sr) {
1264 for (;
c != ec; ++
c, ++sc) *
c -= *sc;
1320 for (; origin != end; ++origin, ++target) {
1324 for (; o != e; ++o, ++t) *t = *o;
1330 for (; target != end; ++target) {
1333 for (; t != e; ++t) *t = x;
1339 for (; target != end; ++target) {
1342 for (; t != e; ++t) *t = x;
1378 Range(0, m.nrows(), m.ncols()),
1379 Range(0, m.ncols())) {
1387 Range(0, m.nrows(), m.ncols()),
1388 Range(0, m.ncols())) {
1477 swap(m1.mrr, m2.mrr);
1478 swap(m1.mcr, m2.mcr);
1479 swap(m1.mdata, m2.mdata);
1504 "Error inverting matrix: Matrix not of full rank.");
1543 const auto e =
v.end();
1547 for (; i != e; ++i, ++target) *target = *i;
1565 for (; ai != ae; ++ai, ++bi) res += (*ai) * (*bi);
Interface for BLAS library.
This can be used to make arrays out of anything.
Index nelem() const ARTS_NOEXCEPT
The iterator class for sub vectors.
Complex * mx
Current position.
The row iterator class for sub matrices.
The ComplexMatrixView class.
ComplexMatrixView & operator/=(Complex x)
Division by scalar.
ComplexVectorView diagonal()
ComplexMatrix diagonal as vector.
Complex & operator()(Index r, Index c)
Plain index operator.
ComplexMatrixView & operator+=(Complex x)
Addition of scalar.
MatrixView imag()
Get a view of the imaginary parts of the matrix.
MatrixView real()
Get a view of the real part of the matrix.
ComplexIterator2D end()
Return iterator behind last row.
ComplexMatrixView & operator=(const ConstComplexMatrixView &v)
Assignment operator.
ComplexMatrixView & operator-=(Complex x)
Subtraction of scalar.
ComplexMatrixView()
Default constructor.
ComplexMatrixView & operator*=(Complex x)
Multiplication by scalar.
friend class ComplexVectorView
ComplexIterator2D begin()
Return iterator to first row.
void resize(Index r, Index c)
Resize function.
~ComplexMatrix() noexcept override
Destructor for Matrix.
ComplexMatrix & inv(const lapack_help::Inverse< Complex > &help=lapack_help::Inverse< Complex >{0})
friend void swap(ComplexMatrix &m1, ComplexMatrix &m2) noexcept
Swaps two objects.
ComplexMatrix & operator=(ComplexMatrix x)
Assignment operator from another matrix.
The ComplexVectorView class.
VectorView real()
Get a view of the real part of the vector.
ComplexVectorView operator-=(Complex x)
Subtraction of scalar.
ComplexVectorView operator+=(Complex x)
Addition of scalar.
VectorView imag()
Get a view of the imaginary part of the vector.
ComplexVectorView operator*=(Complex x)
Multiplication by scalar.
ComplexVectorView & operator=(const ConstComplexVectorView &v)
Assignment operator.
ComplexVectorView()=default
ComplexIterator1D end()
Return iterator behind last element.
Complex & operator[](Index n)
Plain Index operator.
ComplexVectorView operator/=(Complex x)
Division by scalar.
ComplexIterator1D begin()
Return iterator to first element.
~ComplexVector() noexcept override
Destructor for ComplexVector.
void resize(Index n)
Resize function.
ComplexVector & operator=(const ComplexVector &v)
Assignment from another Vector.
The constant iterator class for sub vectors.
const Complex * mx
Current position.
The const row iterator class for sub matrices.
A constant view of a ComplexMatrix.
friend class ConstComplexVectorView
ConstComplexIterator2D begin() const
Return const iterator to first row.
Range mcr
The column range of mdata that is actually used.
ConstComplexVectorView diagonal() const
ComplexMatrix diagonal as vector.
Complex operator()(Index r, Index c) const
Plain const index operator.
Complex * mdata
Pointer to the plain C array that holds the data.
Index ncols() const noexcept
ConstComplexMatrixView()=default
Range mrr
The row range of mdata that is actually used.
Index nrows() const noexcept
ConstMatrixView imag() const
Get a view of the imaginary part of the matrix.
ConstComplexIterator2D end() const
Return const iterator behind last row.
ConstMatrixView real() const
Get a view of the real part of the matrix.
A constant view of a ComplexVector.
Complex sum() const
Returns true if variable size is zero.
ConstVectorView imag() const
Get a view of the imaginary part of the vector.
ConstComplexIterator1D end() const
Return const iterator behind last element.
ConstVectorView real() const
Get a view of the real part of the vector.
Range mrange
The range of mdata that is actually used.
ConstComplexVectorView()=default
Complex * mdata
Pointer to the plain C array that holds the data.
ConstComplexIterator1D begin() const
Return const iterator to first element.
Index nelem() const noexcept
const Complex & operator[](Index n) const
Plain const index operator.
The constant iterator class for sub vectors.
The const row iterator class for sub matrices.
A constant view of a Matrix.
ConstIterator2D begin() const ARTS_NOEXCEPT
Return const iterator to first row.
Index nrows() const noexcept
Index ncols() const noexcept
A constant view of a Vector.
ConstIterator1D begin() const ARTS_NOEXCEPT
Return const iterator to first element.
Index nelem() const noexcept
Returns the number of elements.
Index mstart
The start index.
Index mextent
The number of elements.
#define ARTS_ASSERT(condition,...)
#define ARTS_USER_ERROR_IF(condition,...)
The declarations of all the exception classes.
NUMERIC Numeric
The type to use for all floating point numbers.
INDEX Index
The type to use for all integer numbers and indices.
ConstComplexMatrixView transpose(ConstComplexMatrixView m)
Const version of transpose.
void swap(ComplexVector &v1, ComplexVector &v2) noexcept
Swaps two objects.
Complex debug_matrixview_get_elem(ComplexMatrixView &mv, Index r, Index c)
Helper function to access matrix elements.
Complex operator*(const ConstComplexVectorView &a, const ConstComplexVectorView &b)
Scalar product.
std::ostream & operator<<(std::ostream &os, const ConstComplexVectorView &v)
Output operator.
void copy(ConstComplexIterator1D origin, const ConstComplexIterator1D &end, ComplexIterator1D target)
Copy data between begin and end to target.
void mult(ComplexVectorView y, const ConstComplexMatrixView &M, const ConstComplexVectorView &x)
Matrix-Vector Multiplication.
std::complex< Numeric > Complex
void copy(ConstComplexIterator1D origin, const ConstComplexIterator1D &end, ComplexIterator1D target)
Copy data between begin and end to target.
void zgetri_(int *n, std::complex< double > *A, int *lda, int *ipiv, std::complex< double > *work, int *lwork, int *info)
void zgetrf_(int *m, int *n, std::complex< double > *A, int *lda, int *ipiv, int *info)
auto row_vec(matpack::vector auto &&x)
Map the input to a non-owning const-correct Eigen Map representing a column vector.
auto mat(matpack::matrix auto &&x)
Map the input to a non-owning const-correct Eigen Map representing a row matrix.
Struct cannot be const, but can be passed as const to allow defaults.
T * workdata() const noexcept
bool resize_if_smaller(Index N) const
int * lsize() const noexcept
int * size() const noexcept
int * ipivdata() const noexcept