![]() |
|
A class for compressed column matrices that store doubles. More...
#include <matrices.h>
Public Member Functions | |
CCDoubleMatrix () | |
Default constructor. More... | |
CCDoubleMatrix (const Vector< double > &value, const Vector< int > &row_index_, const Vector< int > &column_start_, const unsigned long &n, const unsigned long &m) | |
CCDoubleMatrix (const CCDoubleMatrix &matrix)=delete | |
Broken copy constructor. More... | |
void | operator= (const CCDoubleMatrix &)=delete |
Broken assignment operator. More... | |
virtual | ~CCDoubleMatrix () |
Destructor: Kill the LU factors if they have been setup. More... | |
unsigned long | nrow () const |
Return the number of rows of the matrix. More... | |
unsigned long | ncol () const |
Return the number of columns of the matrix. More... | |
double | operator() (const unsigned long &i, const unsigned long &j) const |
virtual void | ludecompose () |
LU decomposition using SuperLU. More... | |
virtual void | lubksub (DoubleVector &rhs) |
LU back solve for given RHS. More... | |
void | multiply (const DoubleVector &x, DoubleVector &soln) const |
Multiply the matrix by the vector x: soln=Ax. More... | |
void | multiply_transpose (const DoubleVector &x, DoubleVector &soln) const |
Multiply the transposed matrix by the vector x: soln=A^T x. More... | |
void | multiply (const CCDoubleMatrix &matrix_in, CCDoubleMatrix &result) |
void | matrix_reduction (const double &alpha, CCDoubleMatrix &reduced_matrix) |
unsigned & | matrix_matrix_multiply_method () |
![]() | |
DoubleMatrixBase () | |
(Empty) constructor. More... | |
DoubleMatrixBase (const DoubleMatrixBase &matrix)=delete | |
Broken copy constructor. More... | |
void | operator= (const DoubleMatrixBase &)=delete |
Broken assignment operator. More... | |
virtual | ~DoubleMatrixBase () |
virtual (empty) destructor More... | |
LinearSolver *& | linear_solver_pt () |
Return a pointer to the linear solver object. More... | |
LinearSolver *const & | linear_solver_pt () const |
Return a pointer to the linear solver object (const version) More... | |
void | solve (DoubleVector &rhs) |
void | solve (const DoubleVector &rhs, DoubleVector &soln) |
void | solve (Vector< double > &rhs) |
void | solve (const Vector< double > &rhs, Vector< double > &soln) |
virtual void | residual (const DoubleVector &x, const DoubleVector &b, DoubleVector &residual_) |
Find the residual, i.e. r=b-Ax the residual. More... | |
virtual double | max_residual (const DoubleVector &x, const DoubleVector &rhs) |
![]() | |
CCMatrix () | |
Default constructor. More... | |
CCMatrix (const Vector< double > &value, const Vector< int > &row_index_, const Vector< int > &column_start_, const unsigned long &n, const unsigned long &m) | |
CCMatrix (const CCMatrix &source_matrix) | |
Copy constructor. More... | |
void | operator= (const CCMatrix &)=delete |
Broken assignment operator. More... | |
virtual | ~CCMatrix () |
Destructor, delete any allocated memory. More... | |
double | get_entry (const unsigned long &i, const unsigned long &j) const |
double & | entry (const unsigned long &i, const unsigned long &j) |
int * | column_start () |
Access to C-style column_start array. More... | |
const int * | column_start () const |
Access to C-style column_start array (const version) More... | |
int * | row_index () |
Access to C-style row index array. More... | |
const int * | row_index () const |
Access to C-style row index array (const version) More... | |
void | output_bottom_right_zero_helper (std::ostream &outfile) const |
void | sparse_indexed_output_helper (std::ostream &outfile) const |
void | clean_up_memory () |
Wipe matrix data and set all values to 0. More... | |
void | build (const Vector< double > &value, const Vector< int > &row_index, const Vector< int > &column_start, const unsigned long &n, const unsigned long &m) |
void | build_without_copy (double *value, int *row_index, int *column_start, const unsigned long &nnz, const unsigned long &n, const unsigned long &m) |
![]() | |
SparseMatrix () | |
Default constructor. More... | |
SparseMatrix (const SparseMatrix &source_matrix) | |
Copy constructor. More... | |
void | operator= (const SparseMatrix &)=delete |
Broken assignment operator. More... | |
virtual | ~SparseMatrix () |
Destructor, delete the memory associated with the values. More... | |
T * | value () |
Access to C-style value array. More... | |
const T * | value () const |
Access to C-style value array (const version) More... | |
unsigned long | nnz () const |
Return the number of nonzero entries. More... | |
![]() | |
Matrix () | |
(Empty) constructor More... | |
Matrix (const Matrix &matrix)=delete | |
Broken copy constructor. More... | |
void | operator= (const Matrix &)=delete |
Broken assignment operator. More... | |
virtual | ~Matrix () |
Virtual (empty) destructor. More... | |
T | operator() (const unsigned long &i, const unsigned long &j) const |
T & | operator() (const unsigned long &i, const unsigned long &j) |
virtual void | output (std::ostream &outfile) const |
void | sparse_indexed_output (std::ostream &outfile, const unsigned &precision=0, const bool &output_bottom_right_zero=false) const |
void | sparse_indexed_output (std::string filename, const unsigned &precision=0, const bool &output_bottom_right_zero=false) const |
Private Attributes | |
unsigned | Matrix_matrix_multiply_method |
Flag to determine which matrix-matrix multiplication method is used. More... | |
Additional Inherited Members | |
![]() | |
void | range_check (const unsigned long &i, const unsigned long &j) const |
![]() | |
LinearSolver * | Linear_solver_pt |
LinearSolver * | Default_linear_solver_pt |
![]() | |
int * | Row_index |
Row index. More... | |
int * | Column_start |
Start index for column. More... | |
![]() | |
T * | Value |
Internal representation of the matrix values, a pointer. More... | |
unsigned long | N |
Number of rows. More... | |
unsigned long | M |
Number of columns. More... | |
unsigned long | Nnz |
Number of non-zero values (i.e. size of Value array) More... | |
![]() | |
static T | Zero = T(0) |
Dummy zero. More... | |
A class for compressed column matrices that store doubles.
//////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////
oomph::CCDoubleMatrix::CCDoubleMatrix | ( | ) |
Default constructor.
//////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// Default constructor, set the default linear solver and matrix-matrix multiplication method.
References oomph::DoubleMatrixBase::Default_linear_solver_pt, oomph::DoubleMatrixBase::Linear_solver_pt, and Matrix_matrix_multiply_method.
oomph::CCDoubleMatrix::CCDoubleMatrix | ( | const Vector< double > & | value, |
const Vector< int > & | row_index, | ||
const Vector< int > & | column_start, | ||
const unsigned long & | n, | ||
const unsigned long & | m | ||
) |
Constructor: Pass vector of values, vector of row indices, vector of column starts and number of rows (can be suppressed for square matrices). Number of nonzero entries is read off from value, so make sure the vector has been shrunk to its correct length.
References oomph::DoubleMatrixBase::Default_linear_solver_pt, oomph::DoubleMatrixBase::Linear_solver_pt, and Matrix_matrix_multiply_method.
|
delete |
Broken copy constructor.
|
virtual |
Destructor: Kill the LU factors if they have been setup.
Destructor: delete the default linear solver.
References oomph::DoubleMatrixBase::Default_linear_solver_pt.
|
virtual |
LU back solve for given RHS.
Do the backsubstitution.
References oomph::DoubleMatrixBase::Default_linear_solver_pt.
|
virtual |
LU decomposition using SuperLU.
Perform LU decomposition. Return the sign of the determinant.
References oomph::DoubleMatrixBase::Default_linear_solver_pt.
|
inline |
Access function to Matrix_matrix_multiply_method, the flag which determines the matrix matrix multiplication method used. Method 1: First runs through this matrix and matrix_in to find the storage requirements for result - arrays of the correct size are then allocated before performing the calculation. Minimises memory requirements but more costly. Method 2: Grows storage for values and column indices of result 'on the fly' using an array of maps. Faster but more memory intensive. Method 3: Grows storage for values and column indices of result 'on the fly' using a vector of vectors. Not particularly impressive on the platforms we tried...
References Matrix_matrix_multiply_method.
Referenced by main().
void oomph::CCDoubleMatrix::matrix_reduction | ( | const double & | alpha, |
CCDoubleMatrix & | reduced_matrix | ||
) |
For every row, find the maximum absolute value of the entries in this row. Set all values that are less than alpha times this maximum to zero and return the resulting matrix in reduced_matrix. Note: Diagonal entries are retained regardless of their size.
References alpha, oomph::CCMatrix< double >::build(), oomph::CCMatrix< double >::Column_start, boost::multiprecision::fabs(), i, j, k, ncol(), nrow(), oomph::CCMatrix< double >::Row_index, and oomph::SparseMatrix< T, MATRIX_TYPE >::Value.
void oomph::CCDoubleMatrix::multiply | ( | const CCDoubleMatrix & | matrix_in, |
CCDoubleMatrix & | result | ||
) |
Function to multiply this matrix by the CCDoubleMatrix matrix_in The multiplication method used can be selected using the flag Matrix_matrix_multiply_method. By default Method 2 is used. Method 1: First runs through this matrix and matrix_in to find the storage requirements for result - arrays of the correct size are then allocated before performing the calculation. Minimises memory requirements but more costly. Method 2: Grows storage for values and column indices of result 'on the fly' using an array of maps. Faster but more memory intensive. Method 3: Grows storage for values and column indices of result 'on the fly' using a vector of vectors. Not particularly impressive on the platforms we tried...
References oomph::CCMatrix< T >::build_without_copy(), col(), oomph::CCMatrix< double >::column_start(), oomph::CCMatrix< T >::column_start(), oomph::CCMatrix< double >::Column_start, i, oomph::SparseMatrix< T, MATRIX_TYPE >::M, Matrix_matrix_multiply_method, oomph::SparseMatrix< T, MATRIX_TYPE >::N, ncol(), oomph::SparseMatrix< T, MATRIX_TYPE >::Nnz, nrow(), OOMPH_CURRENT_FUNCTION, OOMPH_EXCEPTION_LOCATION, row(), oomph::CCMatrix< T >::row_index(), oomph::CCMatrix< double >::row_index(), oomph::CCMatrix< double >::Row_index, rows, size, oomph::SparseMatrix< T, MATRIX_TYPE >::Value, and oomph::SparseMatrix< T, MATRIX_TYPE >::value().
|
virtual |
Multiply the matrix by the vector x: soln=Ax.
Multiply the matrix by the vector x.
Implements oomph::DoubleMatrixBase.
References oomph::DoubleVector::build(), oomph::DoubleVector::built(), oomph::CCMatrix< double >::Column_start, oomph::LinearAlgebraDistribution::communicator_pt(), oomph::DistributableLinearAlgebraObject::distributed(), oomph::DistributableLinearAlgebraObject::distribution_pt(), i, oomph::DoubleVector::initialise(), j, k, oomph::SparseMatrix< T, MATRIX_TYPE >::N, ncol(), oomph::DistributableLinearAlgebraObject::nrow(), OOMPH_CURRENT_FUNCTION, OOMPH_EXCEPTION_LOCATION, oomph::CCMatrix< double >::Row_index, oomph::SparseMatrix< T, MATRIX_TYPE >::Value, oomph::DoubleVector::values_pt(), and plotDoE::x.
Referenced by main().
|
virtual |
Multiply the transposed matrix by the vector x: soln=A^T x.
Implements oomph::DoubleMatrixBase.
References oomph::DoubleVector::build(), oomph::DoubleVector::built(), oomph::CCMatrix< double >::Column_start, oomph::LinearAlgebraDistribution::communicator_pt(), oomph::DistributableLinearAlgebraObject::distributed(), oomph::DistributableLinearAlgebraObject::distribution_pt(), i, oomph::DoubleVector::initialise(), j, k, oomph::SparseMatrix< T, MATRIX_TYPE >::N, oomph::DistributableLinearAlgebraObject::nrow(), nrow(), OOMPH_CURRENT_FUNCTION, OOMPH_EXCEPTION_LOCATION, oomph::CCMatrix< double >::Row_index, oomph::SparseMatrix< T, MATRIX_TYPE >::Value, oomph::DoubleVector::values_pt(), and plotDoE::x.
Referenced by oomph::SuperLUSolver::solve(), and oomph::SuperLUSolver::solve_transpose().
|
inlinevirtual |
Return the number of columns of the matrix.
Implements oomph::DoubleMatrixBase.
References oomph::SparseMatrix< T, CCMatrix< T > >::ncol().
Referenced by matrix_reduction(), and multiply().
|
inlinevirtual |
Return the number of rows of the matrix.
Implements oomph::DoubleMatrixBase.
References oomph::SparseMatrix< T, CCMatrix< T > >::nrow().
Referenced by matrix_reduction(), multiply(), multiply_transpose(), and oomph::ILUZeroPreconditioner< CCDoubleMatrix >::setup().
|
inlinevirtual |
Overload the round-bracket access operator to provide read-only (const) access to the data
Implements oomph::DoubleMatrixBase.
References oomph::CCMatrix< T >::get_entry(), i, and j.
|
delete |
Broken assignment operator.
|
private |
Flag to determine which matrix-matrix multiplication method is used.
Referenced by CCDoubleMatrix(), matrix_matrix_multiply_method(), and multiply().