libROM
v1.0
Data-driven physical simulation library
|
#include <Matrix.h>
Public Member Functions | |
Matrix () | |
Matrix (int num_rows, int num_cols, bool distributed, bool randomized=false) | |
Matrix (double *mat, int num_rows, int num_cols, bool distributed, bool copy_data=true) | |
Matrix (const Matrix &other) | |
Copy constructor. More... | |
~Matrix () | |
Destructor. | |
Matrix & | operator= (const Matrix &rhs) |
Assignment operator. More... | |
Matrix & | operator= (const double a) |
Assignment operator. More... | |
Matrix & | operator+= (const Matrix &rhs) |
Addition operator. More... | |
Matrix & | operator-= (const Matrix &rhs) |
Subtraction operator. More... | |
void | setSize (int num_rows, int num_cols) |
Sets the number of rows and columns of the matrix and reallocates storage if needed. All values are initialized to zero. More... | |
bool | distributed () const |
Returns true if the Matrix is distributed. More... | |
bool | balanced () const |
Returns true if rows of matrix are load-balanced. | |
int | numRows () const |
Returns the number of rows of the Matrix on this processor. More... | |
int | numDistributedRows () const |
Returns the number of rows of the Matrix across all processors. More... | |
int | numColumns () const |
Returns the number of columns in the Matrix. This method will return the same value from each processor. More... | |
Matrix * | getFirstNColumns (int n) const |
Get the first N columns of a matrix. More... | |
void | getFirstNColumns (int n, Matrix *&result) const |
Get the first N columns of a matrix. More... | |
void | getFirstNColumns (int n, Matrix &result) const |
Get the first N columns of a matrix. More... | |
Matrix * | mult (const Matrix &other) const |
Multiplies this Matrix with other and returns the product, reference version. More... | |
Matrix * | mult (const Matrix *other) const |
Multiplies this Matrix with other and returns the product, pointer version. More... | |
void | mult (const Matrix &other, Matrix *&result) const |
Multiplies this Matrix with other and fills result with the answer. More... | |
void | mult (const Matrix &other, Matrix &result) const |
Multiplies this Matrix with other and fills result with the answer. More... | |
Vector * | mult (const Vector &other) const |
Multiplies this Matrix with other and returns the product, reference version. More... | |
Vector * | mult (const Vector *other) const |
Multiplies this Matrix with other and returns the product, pointer version. More... | |
void | mult (const Vector &other, Vector *&result) const |
Multiplies this Matrix with other and fills result with the answer. More... | |
void | mult (const Vector &other, Vector &result) const |
Multiplies this Matrix with other and fills result with the answer. More... | |
void | pointwise_mult (int this_row, const Vector &other, Vector &result) const |
Multiplies a specified row of this Matrix with other pointwise. More... | |
void | pointwise_mult (int this_row, Vector &other) const |
Multiplies a specified row of this Matrix with other pointwise. This modifies other. More... | |
Matrix * | elementwise_mult (const Matrix &other) const |
Multiplies two matrices element-wise. More... | |
Matrix * | elementwise_mult (const Matrix *other) const |
Multiplies two matrices element-wise and returns the product, pointer version. More... | |
void | elementwise_mult (const Matrix &other, Matrix *&result) const |
Multiplies two matrices element-wise and fills result with the answer. More... | |
void | elementwise_mult (const Matrix &other, Matrix &result) const |
Multiplies two matrices element-wise and fills result with the answer. More... | |
Matrix * | elementwise_square () const |
Square every element in the matrix. More... | |
void | elementwise_square (Matrix *&result) const |
Square every element in the matrix. More... | |
void | elementwise_square (Matrix &result) const |
Square every element in the matrix. More... | |
void | multPlus (Vector &a, const Vector &b, double c) const |
Computes a += this*b*c. More... | |
Matrix * | transposeMult (const Matrix &other) const |
Multiplies the transpose of this Matrix with other and returns the product, reference version. More... | |
Matrix * | transposeMult (const Matrix *other) const |
Multiplies the transpose of this Matrix with other and returns the product, pointer version. More... | |
void | transposeMult (const Matrix &other, Matrix *&result) const |
Multiplies the transpose of this Matrix with other and fills result with the answer. More... | |
void | transposeMult (const Matrix &other, Matrix &result) const |
Multiplies the transpose of this Matrix with other and fills result with the answer. More... | |
Vector * | transposeMult (const Vector &other) const |
Multiplies the transpose of this Matrix with other and returns the product, reference version. More... | |
Vector * | transposeMult (const Vector *other) const |
Multiplies the transpose of this Matrix with other and returns the product, pointer version. More... | |
void | transposeMult (const Vector &other, Vector *&result) const |
Multiplies the transpose of this Matrix with other and fills result with the answer. More... | |
void | transposeMult (const Vector &other, Vector &result) const |
Multiplies the transpose of this Matrix with other and fills result with the answer. More... | |
Matrix * | inverse () const |
Computes and returns the inverse of this. More... | |
void | inverse (Matrix *&result) const |
Computes and returns the inverse of this. More... | |
void | inverse (Matrix &result) const |
Computes and returns the inverse of this. More... | |
void | inverse () |
Computes the inverse of this and stores result in this. More... | |
Vector * | getColumn (int column) const |
Returns a column of the matrix (not owned by Matrix). More... | |
void | getColumn (int column, Vector *&result) const |
Returns a column of the matrix (not owned by Matrix). More... | |
void | getColumn (int column, Vector &result) const |
Returns a column of the matrix (not owned by Matrix). More... | |
void | transpose () |
Replaces this Matrix with its transpose (in place), in the serial square case only. More... | |
void | transposePseudoinverse () |
Computes the transposePseudoinverse of this. More... | |
Matrix * | qr_factorize () const |
Computes and returns the Q of the QR factorization of this. More... | |
void | qrcp_pivots_transpose (int *row_pivot, int *row_pivot_owner, int pivots_requested) const |
Compute the leading numColumns() column pivots from a QR decomposition with column pivots (QRCP) of the transpose of this. More... | |
void | orthogonalize () |
Orthogonalizes the matrix. | |
void | rescale_rows_max () |
Rescale every matrix row by its maximum absolute value. | |
void | rescale_cols_max () |
Rescale every matrix column by its maximum absolute value. | |
const double & | item (int row, int col) const |
Const Matrix member access. Matrix data is stored in row-major format. More... | |
double & | item (int row, int col) |
Non-const Matrix member access. Matrix data is stored in row-major format. More... | |
const double & | operator() (int row, int col) const |
Const Matrix member access. More... | |
double & | operator() (int row, int col) |
Non-const Matrix member access. More... | |
void | print (const char *prefix) const |
print Matrix into (a) ascii file(s). More... | |
void | write (const std::string &base_file_name) const |
write Matrix into (a) HDF file(s). More... | |
void | read (const std::string &base_file_name) |
read Matrix into (a) HDF file(s). More... | |
void | local_read (const std::string &base_file_name, int rank) |
read a single rank of a distributed Matrix into (a) HDF file(s). More... | |
double * | getData () const |
Get the matrix data as a pointer. | |
void | distribute (const int &local_num_rows) |
Distribute this matrix rows among MPI processes, based on the specified local number of rows. This becomes distributed after this function is executed. More... | |
void | gather () |
Gather all the distributed rows among MPI processes. This becomes not distributed after this function is executed. More... | |
Class Matrix is a simple matrix class in which the rows may be distributed across multiple processes. This class supports only the basic operations that are needed by the SVD library.
CAROM::Matrix::Matrix | ( | ) |
Empty Constructor
CAROM::Matrix::Matrix | ( | int | num_rows, |
int | num_cols, | ||
bool | distributed, | ||
bool | randomized = false |
||
) |
Constructor creating a Matrix with uninitialized values.
[in] | num_rows | When undistributed, the total number of rows of the Matrix. When distributed, the part of the total number of rows of the Matrix on this processor. |
[in] | num_cols | The total number of columns of the Matrix. |
[in] | distributed | If true the rows of the Matrix are spread over all processors. |
[in] | randomized | If true the matrix will be a standard normally distributed random matrix. |
CAROM::Matrix::Matrix | ( | double * | mat, |
int | num_rows, | ||
int | num_cols, | ||
bool | distributed, | ||
bool | copy_data = true |
||
) |
Constructor creating a Matrix with uninitialized values.
[in] | mat | The initial values of the Matrix. |
[in] | num_rows | When undistributed, the total number of rows of the Matrix. When distributed, the part of the total number of rows of the Matrix on this processor. |
[in] | num_cols | The total number of columns of the Matrix. |
[in] | distributed | If true the rows of the Matrix are spread over all processors. |
[in] | copy_data | If true the matrix allocates its own storage and copies the contents of mat into its own storage. Otherwise it uses mat as its storage. |
CAROM::Matrix::Matrix | ( | const Matrix & | other | ) |
Copy constructor.
[in] | other | The Matrix to copy. |
void CAROM::Matrix::distribute | ( | const int & | local_num_rows | ) |
Distribute this matrix rows among MPI processes, based on the specified local number of rows. This becomes distributed after this function is executed.
[in] | local_num_rows | number of rows for local MPI rank. |
|
inline |
Multiplies two matrices element-wise.
[in] | other | The Matrix to multiply with this. |
Multiplies two matrices element-wise and fills result with the answer.
Multiplies two matrices element-wise and fills result with the answer.
Multiplies two matrices element-wise and returns the product, pointer version.
[in] | other | The Matrix to multiply with this. |
|
inline |
Square every element in the matrix.
void CAROM::Matrix::elementwise_square | ( | Matrix & | result | ) | const |
Square every element in the matrix.
[out] | result | The product Matrix. |
void CAROM::Matrix::elementwise_square | ( | Matrix *& | result | ) | const |
Square every element in the matrix.
[out] | result | The product Matrix. |
void CAROM::Matrix::gather | ( | ) |
Gather all the distributed rows among MPI processes. This becomes not distributed after this function is executed.
|
inline |
void CAROM::Matrix::getColumn | ( | int | column, |
Vector & | result | ||
) | const |
void CAROM::Matrix::getColumn | ( | int | column, |
Vector *& | result | ||
) | const |
Matrix * CAROM::Matrix::getFirstNColumns | ( | int | n | ) | const |
Get the first N columns of a matrix.
[in] | n | The number of columns to return. |
void CAROM::Matrix::getFirstNColumns | ( | int | n, |
Matrix & | result | ||
) | const |
Get the first N columns of a matrix.
[in] | n | The number of columns to return. |
[out] | result | The truncated Matrix. |
void CAROM::Matrix::getFirstNColumns | ( | int | n, |
Matrix *& | result | ||
) | const |
Get the first N columns of a matrix.
[in] | n | The number of columns to return. |
[out] | result | The truncated Matrix. |
void CAROM::Matrix::inverse | ( | ) |
Computes the inverse of this and stores result in this.
|
inline |
Computes and returns the inverse of this.
void CAROM::Matrix::inverse | ( | Matrix & | result | ) | const |
Computes and returns the inverse of this.
Result will be sized accordingly.
[out] | result | The inverse of this. |
void CAROM::Matrix::inverse | ( | Matrix *& | result | ) | const |
Computes and returns the inverse of this.
If result has not been allocated it will be, otherwise it will be sized accordingly.
[out] | result | The inverse of this. |
|
inline |
Non-const Matrix member access. Matrix data is stored in row-major format.
Allows constructs of the form mat[i, j] = val;
|
inline |
void CAROM::Matrix::local_read | ( | const std::string & | base_file_name, |
int | rank | ||
) |
read a single rank of a distributed Matrix into (a) HDF file(s).
[in] | base_file_name | The base part of the file name. |
[in] | rank | The rank to read from. |
Multiplies this Matrix with other and returns the product, reference version.
Supports multiplication of two undistributed matrices returning an undistributed Matrix, and multiplication of a distributed Matrix with an undistributed Matrix returning a distributed Matrix.
[in] | other | The Matrix to multiply with this. |
Multiplies this Matrix with other and fills result with the answer.
Supports multiplication of two undistributed matrices resulting in an undistributed Matrix, and multiplication of a distributed Matrix with an undistributed Matrix resulting in a distributed Matrix. Result will be sized accordingly.
Multiplies this Matrix with other and fills result with the answer.
Supports multiplication of two undistributed matrices resulting in an undistributed Matrix, and multiplication of a distributed Matrix with an undistributed Matrix resulting in a distributed Matrix. If result has not been allocated it will be, otherwise it will be sized accordingly.
Multiplies this Matrix with other and returns the product, pointer version.
Supports multiplication of two undistributed matrices returning an undistributed Matrix, and multiplication of a distributed Matrix with an undistributed Matrix returning a distributed Matrix.
[in] | other | The Matrix to multiply with this. |
Multiplies this Matrix with other and returns the product, reference version.
Supports multiplication of an undistributed Matrix and Vector returning an undistributed Vector, and multiplication of a distributed Matrix and an undistributed Vector returning a distributed Vector.
[in] | other | The Vector to multiply with this. |
Multiplies this Matrix with other and fills result with the answer.
Supports multiplication of an undistributed Matrix and Vector resulting in an undistributed Vector, and multiplication of a distributed Matrix and an undistributed Vector resulting in a distributed Vector. Result will be sized accordingly.
Multiplies this Matrix with other and fills result with the answer.
Supports multiplication of an undistributed Matrix and Vector resulting in an undistributed Vector, and multiplication of a distributed Matrix and an undistributed Vector resulting in a distributed Vector. If result has not been allocated it will be, otherwise it will be sized accordingly.
Multiplies this Matrix with other and returns the product, pointer version.
Supports multiplication of an undistributed Matrix and Vector returning an undistributed Vector, and multiplication of a distributed Matrix and an undistributed Vector returning a distributed Vector.
[in] | other | The Vector to multiply with this. |
Computes a += this*b*c.
Supports accumulation of the multiplication of an undistributed Matrix and Vector into an undistributed Vector, and accumulation of the multiplication of a distributed Matrix and an undistributed Vector into a distributed Vector.
|
inline |
|
inline |
|
inline |
|
inline |
Non-const Matrix member access.
Allows constructs of the form mat[i, j] = val;
|
inline |
Const Matrix member access.
Addition operator.
[in] | rhs | The Matrix to add to this. |
Subtraction operator.
[in] | rhs | The Matrix to subtract to this. |
Matrix & CAROM::Matrix::operator= | ( | const double | a | ) |
Assignment operator.
[in] | a | constant value |
Assignment operator.
[in] | rhs | The Matrix to assign to this. |
Multiplies a specified row of this Matrix with other pointwise.
Only supports multiplication of an undistributed Matrix and Vector resulting in an undistributed Vector. Result will be sized accordingly.
void CAROM::Matrix::pointwise_mult | ( | int | this_row, |
Vector & | other | ||
) | const |
Multiplies a specified row of this Matrix with other pointwise. This modifies other.
Only supports multiplication of an undistributed Matrix and Vector resulting in an undistributed Vector. Result will be sized accordingly.
void CAROM::Matrix::print | ( | const char * | prefix | ) | const |
print Matrix into (a) ascii file(s).
[in] | prefix | The name of the prefix of the file name. |
Matrix * CAROM::Matrix::qr_factorize | ( | ) | const |
Computes and returns the Q of the QR factorization of this.
void CAROM::Matrix::qrcp_pivots_transpose | ( | int * | row_pivot, |
int * | row_pivot_owner, | ||
int | pivots_requested | ||
) | const |
Compute the leading numColumns() column pivots from a QR decomposition with column pivots (QRCP) of the transpose of this.
[out] | row_pivot | Array of leading column pivots from QRCP of transpose of this Matrix, has length pivots_requested |
[out] | row_pivot_owner | Array of process rank that owns each pivot on the communicator owned by this Matrix. |
[in] | pivots_requested | The number of pivots requested, must be less than or equal to the number of rows of this Matrix. |
void CAROM::Matrix::read | ( | const std::string & | base_file_name | ) |
read Matrix into (a) HDF file(s).
[in] | base_file_name | The base part of the file name. |
|
inline |
Sets the number of rows and columns of the matrix and reallocates storage if needed. All values are initialized to zero.
[in] | num_rows | New number of rows |
[in] | num_cols | New number of cols |
void CAROM::Matrix::transpose | ( | ) |
Replaces this Matrix with its transpose (in place), in the serial square case only.
Multiplies the transpose of this Matrix with other and returns the product, reference version.
Supports multiplication of two undistributed matrices returning an undistributed Matrix or two distributed matrices returning an undistributed Matrix.
[in] | other | The Matrix to multiply with this. |
Multiplies the transpose of this Matrix with other and fills result with the answer.
Supports multiplication of two undistributed matrices or two distributed matrices resulting in an undistributed Matrix. Result will be sized accordingly.
Multiplies the transpose of this Matrix with other and fills result with the answer.
Supports multiplication of two undistributed matrices or two distributed matrices resulting in an undistributed Matrix. If result has not been allocated it will be, otherwise it will be sized accordingly.
Multiplies the transpose of this Matrix with other and returns the product, pointer version.
Supports multiplication of two undistributed matrices returning an undistributed Matrix or two distributed matrices returning an undistributed Matrix.
[in] | other | The Matrix to multiply with this. |
Multiplies the transpose of this Matrix with other and returns the product, reference version.
Supports multiplication of an undistributed Matrix and an undistributed Vector or a distributed Matrix and a distributed Vector returning an undistributed Vector.
[in] | other | The Vector to multiply with this. |
Multiplies the transpose of this Matrix with other and fills result with the answer.
Supports multiplication of an undistributed Matrix and an undistributed Vector or a distributed Matrix and a distributed Vector resulting in an undistributed Vector. Result will be sized accordingly.
Multiplies the transpose of this Matrix with other and fills result with the answer.
Supports multiplication of an undistributed Matrix and an undistributed Vector or a distributed Matrix and a distributed Vector resulting in an undistributed Vector. If result has not been allocated it will be, otherwise it will be sized accordingly.
Multiplies the transpose of this Matrix with other and returns the product, pointer version.
Supports multiplication of an undistributed Matrix and an undistributed Vector or a distributed Matrix and a distributed Vector returning an undistributed Vector.
[in] | other | The Vector to multiply with this. |
void CAROM::Matrix::transposePseudoinverse | ( | ) |
Computes the transposePseudoinverse of this.
Assumes this is full column rank; may fail if this is not full column rank.
void CAROM::Matrix::write | ( | const std::string & | base_file_name | ) | const |
write Matrix into (a) HDF file(s).
[in] | base_file_name | The base part of the file name. |