escript
Revision_
|
this class holds a (distributed) stiffness matrix More...
#include <SystemMatrix.h>
Public Member Functions | |
SystemMatrix () | |
default constructor - throws exception. More... | |
SystemMatrix (SystemMatrixType type, SystemMatrixPattern_ptr pattern, dim_t rowBlockSize, dim_t columnBlockSize, bool patternIsUnrolled, const escript::FunctionSpace &rowFS, const escript::FunctionSpace &colFS) | |
~SystemMatrix () | |
virtual void | nullifyRowsAndCols (escript::Data &mask_row, escript::Data &mask_col, double main_diagonal_value) |
virtual void | saveMM (const std::string &filename) const |
writes the matrix to a file using the Matrix Market file format More... | |
virtual void | saveHB (const std::string &filename) const |
writes the matrix to a file using the Harwell-Boeing file format More... | |
virtual void | resetValues (bool preserveSolverData=false) |
resets the matrix entries More... | |
void | nullifyRows (double *mask_row, double main_diagonal_value) |
void | add (dim_t, index_t *, dim_t, dim_t, index_t *, dim_t, double *) |
void | makeZeroRowSums (double *left_over) |
void | copyColCoupleBlock () |
void | copyRemoteCoupleBlock (bool recreatePattern) |
void | fillWithGlobalCoordinates (double f1) |
void | print () const |
SparseMatrix_ptr | mergeSystemMatrix () const |
void | mergeMainAndCouple (index_t **p_ptr, index_t **p_idx, double **p_val) const |
void | mergeMainAndCouple_CSR_OFFSET0 (index_t **p_ptr, index_t **p_idx, double **p_val) const |
void | mergeMainAndCouple_CSR_OFFSET0_Block (index_t **p_ptr, index_t **p_idx, double **p_val) const |
void | mergeMainAndCouple_CSC_OFFSET1 (index_t **p_ptr, index_t **p_idx, double **p_val) const |
void | copyMain_CSC_OFFSET1 (index_t **p_ptr, index_t **p_idx, double **p_val) |
void | extendedRowsForST (dim_t *degree_ST, index_t *offset_ST, index_t *ST) |
void | applyBalanceInPlace (double *x, bool RHS) const |
void | applyBalance (double *x_out, const double *x, bool RHS) const |
void | balance () |
double | getGlobalSize () const |
void | setPreconditioner (Options *options) |
void | solvePreconditioner (double *x, double *b) |
void | freePreconditioner () |
index_t * | borrowMainDiagonalPointer () const |
void | startCollect (const double *in) const |
double * | finishCollect () const |
void | startColCollect (const double *in) const |
double * | finishColCollect () const |
void | startRowCollect (const double *in) |
double * | finishRowCollect () |
dim_t | getNumRows () const |
dim_t | getNumCols () const |
dim_t | getTotalNumRows () const |
dim_t | getTotalNumCols () const |
dim_t | getRowOverlap () const |
dim_t | getColOverlap () const |
dim_t | getGlobalNumRows () const |
dim_t | getGlobalNumCols () const |
dim_t | getGlobalTotalNumRows () const |
dim_t | getGlobalTotalNumCols () const |
double | getSparsity () const |
dim_t | getNumOutput () const |
void | copyBlockFromMainDiagonal (double *out) const |
void | copyBlockToMainDiagonal (const double *in) |
void | copyFromMainDiagonal (double *out) const |
void | copyToMainDiagonal (const double *in) |
void | setValues (double value) |
void | rowSum (double *row_sum) const |
void | MatrixVector (double alpha, const double *in, double beta, double *out) const |
void | MatrixVector_CSR_OFFSET0 (double alpha, const double *in, double beta, double *out) const |
![]() | |
AbstractSystemMatrix () | |
Default constructor for AbstractSystemMatrix. More... | |
AbstractSystemMatrix (int row_blocksize, const FunctionSpace &row_functionspace, int column_blocksize, const FunctionSpace &column_functionspace) | |
virtual | ~AbstractSystemMatrix () |
Destructor. More... | |
ASM_ptr | getPtr () |
Returns smart pointer which is managing this object. If one does not exist yet it creates one. More... | |
const_ASM_ptr | getPtr () const |
Returns smart pointer which is managing this object. If one does not exist yet it creates one. More... | |
Data | vectorMultiply (const Data &right) const |
returns the matrix-vector product this*right More... | |
bool | isEmpty () const |
returns true if the matrix is empty More... | |
FunctionSpace | getColumnFunctionSpace () const |
returns the column function space More... | |
FunctionSpace | getRowFunctionSpace () const |
returns the row function space More... | |
int | getRowBlockSize () const |
returns the row block size More... | |
int | getColumnBlockSize () const |
returns the column block size More... | |
Data | solve (const Data &in, boost::python::object &options) const |
returns the solution u of the linear system this*u=in More... | |
Static Public Member Functions | |
static SystemMatrix_ptr | loadMM_toCSR (const char *filename) |
static SystemMatrix_ptr | loadMM_toCSC (const char *filename) |
static int | getSystemMatrixTypeId (int solver, int preconditioner, int package, bool symmetry, const escript::JMPI &mpi_info) |
Public Attributes | |
SystemMatrixType | type |
SystemMatrixPattern_ptr | pattern |
dim_t | logical_row_block_size |
dim_t | logical_col_block_size |
dim_t | row_block_size |
dim_t | col_block_size |
dim_t | block_size |
escript::Distribution_ptr | row_distribution |
escript::Distribution_ptr | col_distribution |
escript::JMPI | mpi_info |
Coupler_ptr< real_t > | col_coupler |
Coupler_ptr< real_t > | row_coupler |
SparseMatrix_ptr | mainBlock |
main block More... | |
SparseMatrix_ptr | col_coupleBlock |
coupling to neighbouring processors (row - col) More... | |
SparseMatrix_ptr | row_coupleBlock |
coupling to neighbouring processors (col - row) More... | |
SparseMatrix_ptr | remote_coupleBlock |
coupling of rows-cols on neighbouring processors (may not be valid) More... | |
bool | is_balanced |
double * | balance_vector |
index_t * | global_id |
stores the global ids for all cols in col_coupleBlock More... | |
index_t | solver_package |
package code controlling the solver pointer More... | |
void * | solver_p |
pointer to data needed by a solver More... | |
Private Member Functions | |
virtual void | setToSolution (escript::Data &out, escript::Data &in, boost::python::object &options) const |
solves the linear system this*out=in More... | |
virtual void | ypAx (escript::Data &y, escript::Data &x) const |
performs y+=this*x More... | |
void | solve (double *out, double *in, Options *options) const |
this class holds a (distributed) stiffness matrix
paso::SystemMatrix::SystemMatrix | ( | ) |
default constructor - throws exception.
paso::SystemMatrix::SystemMatrix | ( | SystemMatrixType | ntype, |
SystemMatrixPattern_ptr | npattern, | ||
dim_t | rowBlockSize, | ||
dim_t | colBlockSize, | ||
bool | patternIsUnrolled, | ||
const escript::FunctionSpace & | rowFS, | ||
const escript::FunctionSpace & | colFS | ||
) |
Allocates a SystemMatrix of given type using the given matrix pattern. Values are initialized with zero. If patternIsUnrolled and type & MATRIX_FORMAT_BLK1, it is assumed that the pattern is already unrolled to match the requested block size and offsets. Otherwise unrolling and offset adjustment will be performed.
References MATRIX_FORMAT_BLK1, MATRIX_FORMAT_CSC, MATRIX_FORMAT_DEFAULT, MATRIX_FORMAT_DIAGONAL_BLOCK, and MATRIX_FORMAT_OFFSET1.
paso::SystemMatrix::~SystemMatrix | ( | ) |
References escript::AbstractSystemMatrix::getPtr(), paso::Preconditioner_solve(), and solver_p.
void paso::SystemMatrix::add | ( | dim_t | , |
index_t * | , | ||
dim_t | , | ||
dim_t | , | ||
index_t * | , | ||
dim_t | , | ||
double * | |||
) |
void paso::SystemMatrix::applyBalance | ( | double * | x_out, |
const double * | x, | ||
bool | RHS | ||
) | const |
void paso::SystemMatrix::applyBalanceInPlace | ( | double * | x, |
bool | RHS | ||
) | const |
void paso::SystemMatrix::balance | ( | ) |
References balance_vector.
index_t * paso::SystemMatrix::borrowMainDiagonalPointer | ( | ) | const |
References block_size, pattern, row_block_size, and rowSum().
|
inline |
References mainBlock.
|
inline |
References col_coupleBlock, and mainBlock.
void paso::SystemMatrix::copyColCoupleBlock | ( | ) |
copies the col_coupleBlock into row_coupleBlock. WARNING: this method uses mpi_requests of the coupler attached to the matrix. No reordering on the received columns is performed. In practice this means that components in row_coupleBlock->pattern->index and row_coupler->connector->recv->shared are ordered by increasing value. Note that send and receive row_coupler->connectors are swapping roles.
References block_size, MPI_DOUBLE, mpi_info, row_coupleBlock, and row_coupler.
|
inline |
void paso::SystemMatrix::copyMain_CSC_OFFSET1 | ( | index_t ** | p_ptr, |
index_t ** | p_idx, | ||
double ** | p_val | ||
) |
void paso::SystemMatrix::copyRemoteCoupleBlock | ( | bool | recreatePattern | ) |
References col_coupler, and mpi_info.
|
inline |
References MATRIX_FORMAT_CSC, MATRIX_FORMAT_OFFSET1, and type.
void paso::SystemMatrix::extendedRowsForST | ( | dim_t * | degree_ST, |
index_t * | offset_ST, | ||
index_t * | ST | ||
) |
References col_coupler, and mpi_info.
void paso::SystemMatrix::fillWithGlobalCoordinates | ( | double | f1 | ) |
References block_size, mainBlock, and pattern.
|
inline |
References mainBlock.
|
inline |
References row_coupler.
|
inline |
References getNumRows(), and row_block_size.
void paso::SystemMatrix::freePreconditioner | ( | ) |
|
inline |
References MATRIX_FORMAT_CSC, pattern, and type.
|
inline |
References col_block_size.
|
inline |
double paso::SystemMatrix::getGlobalSize | ( | ) | const |
|
inline |
|
inline |
|
inline |
References row_coupler.
Referenced by getNumRows().
|
inline |
References mainBlock.
|
inline |
References col_block_size, and getNumCols().
Referenced by finishRowCollect().
|
inline |
|
inline |
|
static |
|
inline |
References MATRIX_FORMAT_CSC, pattern, and type.
|
inline |
References col_coupler.
|
static |
|
static |
void paso::SystemMatrix::makeZeroRowSums | ( | double * | left_over | ) |
void paso::SystemMatrix::MatrixVector | ( | double | alpha, |
const double * | in, | ||
double | beta, | ||
double * | out | ||
) | const |
void paso::SystemMatrix::MatrixVector_CSR_OFFSET0 | ( | double | alpha, |
const double * | in, | ||
double | beta, | ||
double * | out | ||
) | const |
void paso::SystemMatrix::mergeMainAndCouple | ( | index_t ** | p_ptr, |
index_t ** | p_idx, | ||
double ** | p_val | ||
) | const |
void paso::SystemMatrix::mergeMainAndCouple_CSC_OFFSET1 | ( | index_t ** | p_ptr, |
index_t ** | p_idx, | ||
double ** | p_val | ||
) | const |
void paso::SystemMatrix::mergeMainAndCouple_CSR_OFFSET0 | ( | index_t ** | p_ptr, |
index_t ** | p_idx, | ||
double ** | p_val | ||
) | const |
void paso::SystemMatrix::mergeMainAndCouple_CSR_OFFSET0_Block | ( | index_t ** | p_ptr, |
index_t ** | p_idx, | ||
double ** | p_val | ||
) | const |
SparseMatrix_ptr paso::SystemMatrix::mergeSystemMatrix | ( | ) | const |
Merges the system matrix which is distributed on several MPI ranks into a complete sparse matrix on rank 0. Used by the Merged Solver.
void paso::SystemMatrix::nullifyRows | ( | double * | mask_row, |
double | main_diagonal_value | ||
) |
Nullifies rows in the matrix. The rows are marked by positive values in mask_row. Values on the main diagonal which are marked to set to zero by mask_row are set to main_diagonal_value.
|
virtual |
Nullifies rows and columns in the matrix. The rows and columns are marked by positive values in mask_row and mask_col. Values on the main diagonal which are marked to set to zero by both mask_row and mask_col are set to main_diagonal_value.
Reimplemented from escript::AbstractSystemMatrix.
void paso::SystemMatrix::print | ( | ) | const |
References block_size, col_coupleBlock, and global_id.
|
virtual |
resets the matrix entries
Reimplemented from escript::AbstractSystemMatrix.
|
inline |
Referenced by borrowMainDiagonalPointer().
|
inlinevirtual |
writes the matrix to a file using the Harwell-Boeing file format
Reimplemented from escript::AbstractSystemMatrix.
|
inlinevirtual |
writes the matrix to a file using the Matrix Market file format
Reimplemented from escript::AbstractSystemMatrix.
void paso::SystemMatrix::setPreconditioner | ( | Options * | options | ) |
References paso::Preconditioner_free(), and solver_p.
|
privatevirtual |
solves the linear system this*out=in
Reimplemented from escript::AbstractSystemMatrix.
|
inline |
|
private |
void paso::SystemMatrix::solvePreconditioner | ( | double * | x, |
double * | b | ||
) |
Applies the preconditioner. This method needs to be called within a parallel region. Barrier synchronization is performed before the evaluation to make sure that the input vector is available
References col_coupleBlock, mainBlock, MPI_DOUBLE, mpi_info, and MPI_SUM.
|
inline |
References row_coupler.
|
inline |
References col_coupler.
|
inline |
References mainBlock.
|
privatevirtual |
performs y+=this*x
Reimplemented from escript::AbstractSystemMatrix.
double* paso::SystemMatrix::balance_vector |
matrix may be balanced by a diagonal matrix D=diagonal(balance_vector) if is_balanced is true, the matrix stored is D*A*D where A is the original matrix. When the system of linear equations is solved we solve D*A*D*y=c. So to solve A*x=b one needs to set c=D*b and x=D*y.
Referenced by balance().
dim_t paso::SystemMatrix::block_size |
Referenced by borrowMainDiagonalPointer(), copyColCoupleBlock(), fillWithGlobalCoordinates(), and print().
dim_t paso::SystemMatrix::col_block_size |
SparseMatrix_ptr paso::SystemMatrix::col_coupleBlock |
coupling to neighbouring processors (row - col)
Referenced by copyBlockToMainDiagonal(), MatrixVector_CSR_OFFSET0(), print(), and solvePreconditioner().
Coupler_ptr<real_t> paso::SystemMatrix::col_coupler |
Referenced by copyRemoteCoupleBlock(), extendedRowsForST(), getTotalNumRows(), and startCollect().
escript::Distribution_ptr paso::SystemMatrix::col_distribution |
|
mutable |
stores the global ids for all cols in col_coupleBlock
Referenced by print().
bool paso::SystemMatrix::is_balanced |
dim_t paso::SystemMatrix::logical_col_block_size |
dim_t paso::SystemMatrix::logical_row_block_size |
SparseMatrix_ptr paso::SystemMatrix::mainBlock |
main block
Referenced by copyBlockFromMainDiagonal(), copyBlockToMainDiagonal(), fillWithGlobalCoordinates(), finishColCollect(), getNumOutput(), solvePreconditioner(), and startRowCollect().
escript::JMPI paso::SystemMatrix::mpi_info |
Referenced by copyColCoupleBlock(), copyRemoteCoupleBlock(), extendedRowsForST(), and solvePreconditioner().
SystemMatrixPattern_ptr paso::SystemMatrix::pattern |
Referenced by borrowMainDiagonalPointer(), fillWithGlobalCoordinates(), getColOverlap(), and getTotalNumCols().
SparseMatrix_ptr paso::SystemMatrix::remote_coupleBlock |
coupling of rows-cols on neighbouring processors (may not be valid)
dim_t paso::SystemMatrix::row_block_size |
SparseMatrix_ptr paso::SystemMatrix::row_coupleBlock |
coupling to neighbouring processors (col - row)
Referenced by copyColCoupleBlock().
Coupler_ptr<real_t> paso::SystemMatrix::row_coupler |
Referenced by copyColCoupleBlock(), finishCollect(), getNumCols(), and startColCollect().
escript::Distribution_ptr paso::SystemMatrix::row_distribution |
void* paso::SystemMatrix::solver_p |
pointer to data needed by a solver
Referenced by setPreconditioner(), and ~SystemMatrix().
|
mutable |
package code controlling the solver pointer
SystemMatrixType paso::SystemMatrix::type |
Referenced by copyToMainDiagonal(), getColOverlap(), getTotalNumCols(), and MatrixVector_CSR_OFFSET0().