Isis Developer Reference
|
#include <SparseBlockMatrix.h>
Public Member Functions | |
SparseBlockMatrix () | |
~SparseBlockMatrix () | |
Destructor. | |
SparseBlockMatrix (const SparseBlockMatrix &src) | |
Copy constructor. | |
SparseBlockMatrix & | operator= (const SparseBlockMatrix &src) |
"Equals" operator. | |
void | wipe () |
Deletes all pointer elements and removes them from the list. | |
void | copy (const SparseBlockMatrix &src) |
Copy method. | |
bool | setNumberOfColumns (int n) |
Initializes number of columns (SparseBlockColumnMatrix). | |
void | zeroBlocks () |
Sets all elements of all matrix blocks to zero. | |
bool | insertMatrixBlock (int nColumnBlock, int nRowBlock, int nRows, int nCols) |
Inserts a "newed" boost LinearAlgebra::Matrix pointer of size (nRows, nCols) into the matrix at nColumnBlock, nRowBlock. | |
LinearAlgebra::Matrix * | getBlock (int column, int row) |
Returns pointer to boost matrix at position (column, row). | |
int | numberOfBlocks () |
Returns total number of blocks in matrix. | |
int | numberOfDiagonalBlocks () |
Returns number of diagonal matrix blocks (equivalent to size - there is one per column). | |
int | numberOfOffDiagonalBlocks () |
Returns number of off-diagonal matrix blocks. | |
int | numberOfElements () |
Returns number of matrix elements in matrix. | |
void | print (std::ostream &outstream) |
Prints matrix blocks to std output stream out for debugging. | |
void | printClean (std::ostream &outstream) |
Prints matrix blocks to std output stream out for debugging. | |
bool | write (std::ofstream &fp_out, bool binary=true) |
int | getLeadingColumnsForBlock (int nblockColumn) |
Sums and returns the number of columns in each matrix block prior to nblockColumn. | |
int | getLeadingRowsForBlock (int nblockRow) |
Sums and returns the number of rows in each matrix block prior to nblockRow. | |
The CHOLMOD (Cholesky decomposition) package uses the compressed column storage (CCS) matrix format which is efficient in memory storage but inefficient to fill in an arbitrary manner because the insertion of every non-zero entry requires that all succeeding entries be shifted.
To build the reduced normal equations matrix, an interim sparse matrix structure is required that can be efficiently populated in a random fashion and can be traversed by column in row order to subsequently construct the CCS matrix required by CHOLMOD. We use a type of Block Compressed Column Storage (BCCS) which consists of an array of map containers (QList of SparseBlockColumnMatrices), each representing a column of square matrix blocks in the reduced normal equations. The key into each column map is the block’s row index.The value at each key is a square dense matrix (Boost matrix) with a dimension equivalent to the number of exterior orientation parameters used for the image. Zero blocks are not stored. The BCCS matrix is created only in the first iteration of the bundle adjustment; in subsequent iterations it need only be repopulated. As the normal equations matrix is symmetric, only the upper triangular portion is stored in memory.
|
inline |
Isis::SparseBlockMatrix::~SparseBlockMatrix | ( | ) |
Destructor.
References wipe().
Isis::SparseBlockMatrix::SparseBlockMatrix | ( | const SparseBlockMatrix & | src | ) |
Copy constructor.
Calls copy method immediately below.
src | SparseBlockMatrix to copy |
References copy().
void Isis::SparseBlockMatrix::copy | ( | const SparseBlockMatrix & | src | ) |
Copy method.
src | SparseBlockMatrix to copy |
References wipe().
Referenced by operator=(), and SparseBlockMatrix().
LinearAlgebra::Matrix * Isis::SparseBlockMatrix::getBlock | ( | int | column, |
int | row ) |
Returns pointer to boost matrix at position (column, row).
column | block column number |
row | block row number |
int Isis::SparseBlockMatrix::getLeadingColumnsForBlock | ( | int | nblockColumn | ) |
Sums and returns the number of columns in each matrix block prior to nblockColumn.
nblockColumn |
int Isis::SparseBlockMatrix::getLeadingRowsForBlock | ( | int | nblockRow | ) |
Sums and returns the number of rows in each matrix block prior to nblockRow.
nblockRow |
bool Isis::SparseBlockMatrix::insertMatrixBlock | ( | int | nColumnBlock, |
int | nRowBlock, | ||
int | nRows, | ||
int | nCols ) |
Inserts a "newed" boost LinearAlgebra::Matrix pointer of size (nRows, nCols) into the matrix at nColumnBlock, nRowBlock.
The inserted matrix elements are initialized to zero. If an entry exists at nColumnBlock, RowBlock, no insertion is made.
nColumnBlock | block column number of inserted matrix (QList index) |
nRowBlock | block row number of inserted matrix (key into map) |
nRows | number of rows in matrix to be inserted |
nCols | number of columns in matrix to be inserted |
int Isis::SparseBlockMatrix::numberOfBlocks | ( | ) |
Returns total number of blocks in matrix.
Referenced by numberOfOffDiagonalBlocks().
int Isis::SparseBlockMatrix::numberOfDiagonalBlocks | ( | ) |
Returns number of diagonal matrix blocks (equivalent to size - there is one per column).
Referenced by numberOfOffDiagonalBlocks().
int Isis::SparseBlockMatrix::numberOfElements | ( | ) |
Returns number of matrix elements in matrix.
int Isis::SparseBlockMatrix::numberOfOffDiagonalBlocks | ( | ) |
Returns number of off-diagonal matrix blocks.
References numberOfBlocks(), and numberOfDiagonalBlocks().
SparseBlockMatrix & Isis::SparseBlockMatrix::operator= | ( | const SparseBlockMatrix & | src | ) |
void Isis::SparseBlockMatrix::print | ( | std::ostream & | outstream | ) |
Prints matrix blocks to std output stream out for debugging.
outstream | output stream |
References Isis::SparseBlockColumnMatrix::print().
void Isis::SparseBlockMatrix::printClean | ( | std::ostream & | outstream | ) |
Prints matrix blocks to std output stream out for debugging.
outstream | output stream |
References Isis::SparseBlockColumnMatrix::printClean().
bool Isis::SparseBlockMatrix::setNumberOfColumns | ( | int | n | ) |
Initializes number of columns (SparseBlockColumnMatrix).
n | number of columns to insert |
void Isis::SparseBlockMatrix::wipe | ( | ) |
Deletes all pointer elements and removes them from the list.
Effectively, a destructor, and in fact, called by the ~SparseBlockMatrix above.
Referenced by copy(), and ~SparseBlockMatrix().
bool Isis::SparseBlockMatrix::write | ( | std::ofstream & | fp_out, |
bool | binary = true ) |
void Isis::SparseBlockMatrix::zeroBlocks | ( | ) |
Sets all elements of all matrix blocks to zero.
Referenced by Isis::BundleAdjust::solveCholesky().