12#ifndef __Eigen_SparseArray_HPP
13#define __Eigen_SparseArray_HPP
20#if ENABLE_SUITESPARSE == 1
27template <
typename Eigen_ArrayType = Eigen::VectorXd,
typename Eigen_SparseArrayType = Eigen::SparseMatrix<
double>>
33 std::list<Eigen::Triplet<double>> _triplets;
97 void Triplet(
const unsigned int &i,
const unsigned int &j,
const double &value);
99 void Triplets(
const std::vector<unsigned int> &i,
const std::vector<unsigned int> &j,
const std::vector<double> &values);
134 inline unsigned int rows()
const
136 return _matrix.rows();
139 inline unsigned int cols()
const
141 return _matrix.cols();
146 _matrix = std::move(
matrix);
154 return _matrix.norm();
165#if ENABLE_SUITESPARSE == 1
167 return Gedim::SuiteSparse_Utilities::condest(_matrix);
170 throw std::runtime_error(
"Not valid method to compute the condition number.");
176 return _matrix.nonZeros();
Eigen column vector.
Definition Eigen_Array.hpp:23
Eigen sparse array.
Definition Eigen_SparseArray.hpp:29
ISparseArray & operator/=(const double &c)
Definition Eigen_SparseArray.hpp:123
void SetSize(const unsigned int &numRows, const unsigned int &numCols, const SparseArrayTypes &type=SparseArrayTypes::None)
Resize the Matrix.
Definition Eigen_SparseArray.hpp:72
void Copy(const ISparseArray &A)
Definition Eigen_SparseArray.hpp:129
void Destroy()
Definition Eigen_SparseArray.hpp:84
unsigned int NonZeros() const
Definition Eigen_SparseArray.hpp:174
void Triplet(const unsigned int &i, const unsigned int &j, const double &value)
Given the row index i and the column index j the value val is put into the Matrix in ADD or INSERT mo...
Definition Eigen_SparseArray.cpp:32
Eigen_SparseArray(const Eigen_SparseArrayType &matrix, const SparseArrayTypes &type=SparseArrayTypes::None)
Definition Eigen_SparseArray.hpp:45
Eigen_SparseArray()
Definition Eigen_SparseArray.hpp:36
Eigen_SparseArray< Eigen_ArrayType, Eigen_SparseArrayType > & operator=(Eigen_SparseArrayType &&matrix)
Definition Eigen_SparseArray.hpp:144
std::ostream & Print(std::ostream &output) const
Print the array.
Definition Eigen_SparseArray.hpp:101
const Eigen_SparseArrayType & Cast(const ISparseArray &v) const
Definition Eigen_SparseArray.hpp:67
void Create()
Matrix Allocation is implemented in child classes.
Definition Eigen_SparseArray.cpp:24
unsigned int rows() const
Definition Eigen_SparseArray.hpp:134
void ToBinaryFile(const std::string &filePath, const bool &append=false) const
Write sparse array to binary file.
Definition Eigen_SparseArray.cpp:74
unsigned int cols() const
Definition Eigen_SparseArray.hpp:139
~Eigen_SparseArray()
Definition Eigen_SparseArray.hpp:40
void Reset()
Put zero-values in the Matrix.
Definition Eigen_SparseArray.hpp:91
const Eigen_SparseArrayType & Cast(const ISparseArray &v)
Definition Eigen_SparseArray.hpp:63
Eigen_SparseArrayType & Cast(ISparseArray &v)
Definition Eigen_SparseArray.hpp:59
ISparseArray & operator-=(const ISparseArray &A)
Definition Eigen_SparseArray.hpp:112
SparseArrayTypes Type() const
Definition Eigen_SparseArray.hpp:78
void Triplets(const std::vector< unsigned int > &i, const std::vector< unsigned int > &j, const std::vector< double > &values)
Given the row indices i and the column indices j the values val are put into the Matrix in ADD or INS...
Definition Eigen_SparseArray.cpp:61
void Flush()
Intermediate flush of the Matrix during creation.
Definition Eigen_SparseArray.hpp:88
double Cond(const ISparseArray::ConditionNumberAlgorithm &algorithm=ISparseArray::ConditionNumberAlgorithm::SVDLapack) const
Definition Eigen_SparseArray.hpp:157
ISparseArray & operator+=(const ISparseArray &A)
Definition Eigen_SparseArray.hpp:106
double Norm() const
Definition Eigen_SparseArray.hpp:152
ISparseArray & operator*=(const double &c)
Definition Eigen_SparseArray.hpp:118
Interface used for sparse Array of double.
Definition ISparseArray.hpp:25
SparseArrayTypes
Definition ISparseArray.hpp:28
ConditionNumberAlgorithm
Definition ISparseArray.hpp:37
virtual SparseArrayTypes Type() const =0
static void Assert(const bool &logicResult)
Assert for all code, generate exception if something goes wrong.
Definition IOUtilities.hpp:126
Definition Eigen_Array.cpp:22
double cond(const Eigen::VectorXd &s)
Compute condition number in norm 2 given singular values.
Definition LAPACK_utilities.hpp:38
double rcondest(const Eigen::SparseMatrix< double > &sparseA)
Definition LAPACK_utilities.cpp:117
void svd(Eigen::MatrixXd A, Eigen::MatrixXd &V, Eigen::VectorXd &S)
Given A = U * S * V' returns only S and V'.
Definition LAPACK_utilities.cpp:166