escript  Revision_Unversioneddirectory
Public Member Functions | Static Public Member Functions | Public Attributes | List of all members
paso::SystemMatrix Struct Reference

#include <SystemMatrix.h>

Inheritance diagram for paso::SystemMatrix:

Public Member Functions

 SystemMatrix (SystemMatrixType, SystemMatrixPattern_ptr, dim_t, dim_t, bool patternIsUnrolled)
 
 ~SystemMatrix ()
 
void nullifyRowsAndCols (double *mask_row, double *mask_col, double main_diagonal_value)
 
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_tborrowMainDiagonalPointer () const
 
void startCollect (const double *in)
 
double * finishCollect ()
 
void startColCollect (const double *in)
 
double * finishColCollect ()
 
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 saveMM (const char *filename) const
 
void saveHB (const char *filename) const
 
void rowSum (double *row_sum) const
 

Static Public Member Functions

static SystemMatrix_ptr loadMM_toCSR (const char *filename)
 
static SystemMatrix_ptr loadMM_toCSC (const char *filename)
 
static index_t getSystemMatrixTypeId (index_t solver, index_t preconditioner, index_t package, bool symmetry, const esysUtils::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
 
Distribution_ptr row_distribution
 
Distribution_ptr col_distribution
 
esysUtils::JMPI mpi_info
 
Coupler_ptr col_coupler
 
Coupler_ptr 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_tglobal_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...
 
void * trilinos_data
 this is only used for a trilinos matrix More...
 

Constructor & Destructor Documentation

paso::SystemMatrix::SystemMatrix ( SystemMatrixType  ntype,
SystemMatrixPattern_ptr  npattern,
dim_t  rowBlockSize,
dim_t  colBlockSize,
bool  patternIsUnrolled 
)

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 balance_vector, block_size, col_block_size, col_coupleBlock, col_coupler, col_distribution, Esys_noError(), Esys_resetError(), Esys_setError(), mainBlock, MATRIX_FORMAT_BLK1, MATRIX_FORMAT_CSC, MATRIX_FORMAT_DEFAULT, MATRIX_FORMAT_DIAGONAL_BLOCK, MATRIX_FORMAT_OFFSET1, MATRIX_FORMAT_TRILINOS_CRS, MAX, MIN, mpi_info, pattern, row_block_size, row_coupleBlock, row_coupler, row_distribution, type, TYPE_ERROR, and XNOR.

Referenced by loadMM_toCSC(), and loadMM_toCSR().

paso::SystemMatrix::~SystemMatrix ( )

Member Function Documentation

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 ( )
index_t * paso::SystemMatrix::borrowMainDiagonalPointer ( ) const
void paso::SystemMatrix::copyBlockFromMainDiagonal ( double *  out) const
inline

References mainBlock.

void paso::SystemMatrix::copyBlockToMainDiagonal ( const double *  in)
inline

References 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, col_coupleBlock, col_coupler, ESYS_MPI_INC_COUNTER, Esys_setError(), MPI_DOUBLE, mpi_info, pattern, row_coupleBlock, row_coupler, SYSTEM_ERROR, and VALUE_ERROR.

void paso::SystemMatrix::copyFromMainDiagonal ( double *  out) const
inline

References mainBlock.

void paso::SystemMatrix::copyMain_CSC_OFFSET1 ( index_t **  p_ptr,
index_t **  p_idx,
double **  p_val 
)
void paso::SystemMatrix::copyRemoteCoupleBlock ( bool  recreatePattern)
void paso::SystemMatrix::copyToMainDiagonal ( const double *  in)
inline

References mainBlock.

void paso::SystemMatrix::extendedRowsForST ( dim_t degree_ST,
index_t offset_ST,
index_t ST 
)
void paso::SystemMatrix::fillWithGlobalCoordinates ( double  f1)
double* paso::SystemMatrix::finishColCollect ( )
inline

References col_coupler.

Referenced by finishCollect(), and nullifyRowsAndCols().

double* paso::SystemMatrix::finishCollect ( )
inline

References finishColCollect().

Referenced by balance().

double* paso::SystemMatrix::finishRowCollect ( )
inline

References row_coupler.

Referenced by nullifyRows(), and nullifyRowsAndCols().

void paso::SystemMatrix::freePreconditioner ( )

References paso::Preconditioner_free(), and solver_p.

Referenced by paso::Solver_free().

dim_t paso::SystemMatrix::getColOverlap ( ) const
inline

References col_coupler.

dim_t paso::SystemMatrix::getGlobalNumCols ( ) const
inline

References MATRIX_FORMAT_CSC, pattern, and type.

Referenced by balance(), and getGlobalTotalNumCols().

dim_t paso::SystemMatrix::getGlobalNumRows ( ) const
inline
double paso::SystemMatrix::getGlobalSize ( ) const

References col_coupleBlock, mainBlock, MPI_DOUBLE, mpi_info, and MPI_SUM.

Referenced by getSparsity().

dim_t paso::SystemMatrix::getGlobalTotalNumCols ( ) const
inline

References col_block_size, and getGlobalNumCols().

Referenced by getSparsity().

dim_t paso::SystemMatrix::getGlobalTotalNumRows ( ) const
inline

References getGlobalNumRows(), and row_block_size.

Referenced by getSparsity().

dim_t paso::SystemMatrix::getNumCols ( ) const
inline

References mainBlock.

Referenced by fillWithGlobalCoordinates(), and getTotalNumCols().

dim_t paso::SystemMatrix::getNumOutput ( ) const
inline

References pattern.

dim_t paso::SystemMatrix::getNumRows ( ) const
inline
dim_t paso::SystemMatrix::getRowOverlap ( ) const
inline

References row_coupler.

double paso::SystemMatrix::getSparsity ( ) const
inline
index_t paso::SystemMatrix::getSystemMatrixTypeId ( index_t  solver,
index_t  preconditioner,
index_t  package,
bool  symmetry,
const esysUtils::JMPI mpi_info 
)
static
dim_t paso::SystemMatrix::getTotalNumCols ( ) const
inline

References col_block_size, and getNumCols().

Referenced by applyBalance(), and applyBalanceInPlace().

dim_t paso::SystemMatrix::getTotalNumRows ( ) const
inline
SystemMatrix_ptr paso::SystemMatrix::loadMM_toCSC ( const char *  filename)
static
SystemMatrix_ptr paso::SystemMatrix::loadMM_toCSR ( const char *  filename)
static
void paso::SystemMatrix::makeZeroRowSums ( double *  left_over)
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

References Esys_setError(), and TYPE_ERROR.

Referenced by mergeMainAndCouple().

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.

References block_size, ESYS_MPI_INC_COUNTER, ESYS_MPI_SET_COUNTER, getGlobalNumRows(), mainBlock, mergeMainAndCouple(), MPI_DOUBLE, mpi_info, MPI_INT, and row_distribution.

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.

References col_block_size, col_coupleBlock, Esys_setError(), finishRowCollect(), mainBlock, MATRIX_FORMAT_CSC, MATRIX_FORMAT_TRILINOS_CRS, row_block_size, row_coupleBlock, startRowCollect(), SYSTEM_ERROR, and type.

void paso::SystemMatrix::nullifyRowsAndCols ( double *  mask_row,
double *  mask_col,
double  main_diagonal_value 
)

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.

References col_block_size, col_coupleBlock, Esys_setError(), finishColCollect(), finishRowCollect(), mainBlock, MATRIX_FORMAT_CSC, MATRIX_FORMAT_TRILINOS_CRS, mpi_info, row_block_size, row_coupleBlock, startColCollect(), startRowCollect(), SYSTEM_ERROR, and type.

void paso::SystemMatrix::print ( void  ) const
void paso::SystemMatrix::rowSum ( double *  row_sum) const
inline
void paso::SystemMatrix::saveHB ( const char *  filename) const
inline
void paso::SystemMatrix::saveMM ( const char *  filename) const
inline
void paso::SystemMatrix::setPreconditioner ( Options options)
void paso::SystemMatrix::setValues ( double  value)
inline
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 paso::Preconditioner_solve(), and solver_p.

void paso::SystemMatrix::startColCollect ( const double *  in)
inline

References col_coupler.

Referenced by nullifyRowsAndCols(), and startCollect().

void paso::SystemMatrix::startCollect ( const double *  in)
inline

References startColCollect().

Referenced by balance().

void paso::SystemMatrix::startRowCollect ( const double *  in)
inline

References row_coupler.

Referenced by nullifyRows(), and nullifyRowsAndCols().

Member Data Documentation

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 applyBalance(), applyBalanceInPlace(), balance(), SystemMatrix(), and ~SystemMatrix().

dim_t paso::SystemMatrix::block_size
dim_t paso::SystemMatrix::col_block_size
SparseMatrix_ptr paso::SystemMatrix::col_coupleBlock
Coupler_ptr paso::SystemMatrix::col_coupler
Distribution_ptr paso::SystemMatrix::col_distribution
index_t* paso::SystemMatrix::global_id
mutable
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
esysUtils::JMPI paso::SystemMatrix::mpi_info
SystemMatrixPattern_ptr paso::SystemMatrix::pattern
SparseMatrix_ptr paso::SystemMatrix::remote_coupleBlock

coupling of rows-cols on neighbouring processors (may not be valid)

Referenced by copyRemoteCoupleBlock(), and print().

dim_t paso::SystemMatrix::row_block_size
SparseMatrix_ptr paso::SystemMatrix::row_coupleBlock
Coupler_ptr paso::SystemMatrix::row_coupler
Distribution_ptr paso::SystemMatrix::row_distribution
void* paso::SystemMatrix::solver_p

pointer to data needed by a solver

Referenced by freePreconditioner(), setPreconditioner(), paso::solve_free(), and solvePreconditioner().

index_t paso::SystemMatrix::solver_package

package code controlling the solver pointer

Referenced by paso::solve_free().

void* paso::SystemMatrix::trilinos_data

this is only used for a trilinos matrix

SystemMatrixType paso::SystemMatrix::type

The documentation for this struct was generated from the following files: