Go to the documentation of this file.
30 #ifndef __PASO_SYSTEMMATRIX_H__
31 #define __PASO_SYSTEMMATRIX_H__
36 #include <escript/AbstractSystemMatrix.h>
67 double main_diagonal_value);
69 virtual inline void saveMM(
const std::string& filename)
const
75 merged->saveMM(filename.c_str());
81 virtual inline void saveHB(
const std::string& filename)
const
84 throw PasoException(
"SystemMatrix::saveHB: Only single rank supported.");
86 throw PasoException(
"SystemMatrix::saveHB: Only CSC format supported.");
92 virtual void resetValues(
bool preserveSolverData =
false);
98 void nullifyRows(
double* mask_row,
double main_diagonal_value);
137 void applyBalance(
double* x_out,
const double* x,
bool RHS)
const;
218 return pattern->input_distribution->getGlobalNumComponents();
220 return pattern->output_distribution->getGlobalNumComponents();
226 return pattern->output_distribution->getGlobalNumComponents();
228 return pattern->input_distribution->getGlobalNumComponents();
249 return pattern->getNumOutput();
254 mainBlock->copyBlockFromMainDiagonal(out);
280 inline void rowSum(
double* row_sum)
const
283 throw PasoException(
"SystemMatrix::rowSum: No normalization "
284 "available for compressed sparse column or index offset 1.");
287 #pragma omp parallel for
288 for (
index_t irow=0; irow<nrow; ++irow) {
296 void MatrixVector(
double alpha,
const double* in,
double beta,
307 int package,
bool symmetry,
356 boost::python::object& options)
const;
369 #endif // __PASO_SYSTEMMATRIX_H__
#define MATRIX_FORMAT_BLK1
Definition: Paso.h:64
void copyFromMainDiagonal(double *out) const
Definition: SystemMatrix.h:276
bool isComplex() const
True if components of this data are stored as complex.
Definition: Data.cpp:1160
virtual void nullifyRowsAndCols(escript::Data &mask_row, escript::Data &mask_col, double main_diagonal_value)
Definition: SystemMatrix.cpp:259
double getGlobalSize() const
Definition: SystemMatrix.cpp:186
static SystemMatrix_ptr loadMM_toCSC(const char *filename)
Definition: SystemMatrix_loadMM.cpp:215
void nullifyRows(double *mask_row, double main_diagonal_value)
Definition: SystemMatrix.cpp:238
double real_t
type of all real-valued scalars in escript
Definition: DataTypes.h:79
escript::JMPI mpi_info
Definition: SystemMatrix.h:336
void requireWrite()
Ensures data is ready for write access. This means that the data will be resolved if lazy and will be...
Definition: Data.cpp:1239
bool is_balanced
Definition: SystemMatrix.h:350
void freePreconditioner()
Definition: SystemMatrix.cpp:179
void copyBlockFromMainDiagonal(double *out) const
Definition: SystemMatrix.h:266
boost::shared_ptr< Distribution > Distribution_ptr
Definition: Distribution.h:39
void copyColCoupleBlock()
Definition: SystemMatrix.cpp:380
escript::Distribution_ptr col_distribution
Definition: SystemMatrix.h:335
#define MATRIX_FORMAT_CSC
Definition: Paso.h:63
void RHS_loadMM_toCSR(const char *filename, double *b, dim_t size)
Definition: SystemMatrix_loadMM.cpp:314
void print() const
Definition: SystemMatrix_debug.cpp:123
void solve_free(SystemMatrix *in)
Definition: solve.cpp:143
dim_t getColOverlap() const
Definition: SystemMatrix.h:224
virtual void resetValues(bool preserveSolverData=false)
resets the matrix entries
Definition: SystemMatrix.cpp:321
void mergeMainAndCouple_CSR_OFFSET0(index_t **p_ptr, index_t **p_idx, double **p_val) const
Definition: SystemMatrix_mergeMainAndCouple.cpp:82
void rowSum(double *row_sum) const
Definition: SystemMatrix.h:294
virtual void saveHB(const std::string &filename) const
writes the matrix to a file using the Harwell-Boeing file format
Definition: SystemMatrix.h:95
dim_t getGlobalNumCols() const
Definition: SystemMatrix.h:237
void copyBlockToMainDiagonal(const double *in)
Definition: SystemMatrix.h:271
dim_t getGlobalTotalNumRows() const
Definition: SystemMatrix.h:245
dim_t getGlobalTotalNumCols() const
Definition: SystemMatrix.h:250
void mergeMainAndCouple_CSC_OFFSET1(index_t **p_ptr, index_t **p_idx, double **p_val) const
Definition: SystemMatrix_mergeMainAndCouple.cpp:302
boost::shared_ptr< SystemMatrix > SystemMatrix_ptr
Definition: SystemMatrix.h:55
static int getPackage(int solver, int package, bool symmetry, const escript::JMPI &mpi_info)
Definition: Options.cpp:325
double getSparsity() const
Definition: SystemMatrix.h:255
#define MPI_SUM
Definition: EsysMPI.h:52
void add(dim_t, index_t *, dim_t, dim_t, index_t *, dim_t, double *)
boost::shared_ptr< SystemMatrixPattern > SystemMatrixPattern_ptr
Definition: SystemMatrixPattern.h:54
void mergeMainAndCouple_CSR_OFFSET0_Block(index_t **p_ptr, index_t **p_idx, double **p_val) const
Definition: SystemMatrix_mergeMainAndCouple.cpp:194
static int mapEscriptOption(int escriptOption)
returns the corresponding paso option code for an escript option code
Definition: Options.cpp:365
FunctionSpace getColumnFunctionSpace() const
returns the column function space
Definition: AbstractSystemMatrix.h:106
void copyRemoteCoupleBlock(bool recreatePattern)
Definition: SystemMatrix_copyRemoteCoupleBlock.cpp:54
int getDataPointSize() const
Return the size of the data point. It is the product of the data point shape dimensions.
Definition: Data.cpp:1360
Definition: FunctionSpace.h:49
void applyBalanceInPlace(double *x, bool RHS) const
Definition: SystemMatrix.cpp:458
ElementType * data()
Definition: DataVectorAlt.h:228
const FunctionSpace & getFunctionSpace() const
Return the function space.
Definition: Data.h:463
void setPreconditioner(Options *options)
Definition: SystemMatrix.cpp:164
#define PASO_MKL
Definition: Options.h:50
#define MATRIX_FORMAT_OFFSET1
Definition: Paso.h:65
double * finishCollect() const
Definition: SystemMatrix.h:174
void startCollect(const double *in) const
Definition: SystemMatrix.h:169
#define MPI_INT
Definition: EsysMPI.h:46
void applyBalance(double *x_out, const double *x, bool RHS) const
Definition: SystemMatrix.cpp:477
#define MPI_MAX
Definition: EsysMPI.h:54
index_t solver_package
package code controlling the solver pointer
Definition: SystemMatrix.h:363
double * balance_vector
Definition: SystemMatrix.h:357
Data represents a collection of datapoints.
Definition: Data.h:64
ASM_ptr getPtr()
Returns smart pointer which is managing this object. If one does not exist yet it creates one.
Definition: AbstractSystemMatrix.cpp:56
index_t dim_t
Definition: DataTypes.h:93
SparseMatrix_ptr mergeSystemMatrix() const
Definition: SystemMatrix.cpp:581
boost::shared_ptr< JMPI_ > JMPI
Definition: EsysMPI.h:72
SystemMatrixType type
Definition: SystemMatrix.h:324
dim_t getGlobalNumRows() const
Definition: SystemMatrix.h:229
Base class for escript system matrices.
Definition: AbstractSystemMatrix.h:57
Coupler_ptr< real_t > col_coupler
Definition: SystemMatrix.h:338
index_t * borrowMainDiagonalPointer() const
Definition: SystemMatrix.cpp:202
void * solver_p
pointer to data needed by a solver
Definition: SystemMatrix.h:366
void balance()
Definition: SystemMatrix.cpp:496
SparseMatrix_ptr mainBlock
main block
Definition: SystemMatrix.h:342
boost::shared_ptr< Coupler< T > > Coupler_ptr
Definition: Coupler.h:57
void copyMain_CSC_OFFSET1(index_t **p_ptr, index_t **p_idx, double **p_val)
index_t * global_id
stores the global ids for all cols in col_coupleBlock
Definition: SystemMatrix.h:360
virtual void ypAx(escript::Data &y, escript::Data &x) const
performs y+=this*x
Definition: SystemMatrix.cpp:356
Coupler_ptr< real_t > row_coupler
Definition: SystemMatrix.h:339
SparseMatrix_ptr row_coupleBlock
coupling to neighbouring processors (col - row)
Definition: SystemMatrix.h:346
boost::shared_ptr< const SystemMatrix > const_SystemMatrix_ptr
Definition: SystemMatrix.h:57
dim_t col_block_size
Definition: SystemMatrix.h:331
#define PASO_PASO
Definition: Options.h:56
#define PASO_UMFPACK
Definition: Options.h:51
void extendedRowsForST(dim_t *degree_ST, index_t *offset_ST, index_t *ST)
Definition: SystemMatrix_extendedRows.cpp:56
dim_t getRowOverlap() const
Definition: SystemMatrix.h:219
void copyToMainDiagonal(const double *in)
Definition: SystemMatrix.h:281
dim_t getTotalNumCols() const
Definition: SystemMatrix.h:214
dim_t row_block_size
Definition: SystemMatrix.h:330
boost::shared_ptr< SparseMatrix > SparseMatrix_ptr
Definition: SparseMatrix.h:50
SystemMatrixPattern_ptr pattern
Definition: SystemMatrix.h:325
#define MPI_DOUBLE
Definition: EsysMPI.h:47
void fillWithGlobalCoordinates(double f1)
Definition: SystemMatrix_debug.cpp:60
Definition: Preconditioner.h:50
dim_t getTotalNumRows() const
Definition: SystemMatrix.h:209
void solvePreconditioner(double *x, double *b)
Definition: SystemMatrix.cpp:172
PasoException exception class.
Definition: PasoException.h:47
dim_t getNumCols() const
Definition: SystemMatrix.h:204
SparseMatrix_ptr remote_coupleBlock
coupling of rows-cols on neighbouring processors (may not be valid)
Definition: SystemMatrix.h:348
void startColCollect(const double *in) const
Definition: SystemMatrix.h:179
int SystemMatrixType
Definition: SystemMatrix.h:59
dim_t getNumOutput() const
Definition: SystemMatrix.h:261
int index_t
type for array/matrix indices used both globally and on each rank
Definition: DataTypes.h:88
dim_t logical_row_block_size
Definition: SystemMatrix.h:327
double * finishRowCollect()
Definition: SystemMatrix.h:194
Definition: AbstractContinuousDomain.cpp:23
void solve(double *out, double *in, Options *options) const
Definition: solve.cpp:54
void mergeMainAndCouple(index_t **p_ptr, index_t **p_idx, double **p_val) const
Definition: SystemMatrix_mergeMainAndCouple.cpp:66
dim_t getNumRows() const
Definition: SystemMatrix.h:199
Preconditioner * Preconditioner_alloc(SystemMatrix_ptr A, Options *options)
Definition: Preconditioner.cpp:65
void setValues(double value)
Definition: SystemMatrix.h:286
FunctionSpace getRowFunctionSpace() const
returns the row function space
Definition: AbstractSystemMatrix.h:117
boost::shared_ptr< Pattern > Pattern_ptr
Definition: Pattern.h:52
SystemMatrix()
default constructor - throws exception.
Definition: SystemMatrix.cpp:56
double * finishColCollect() const
Definition: SystemMatrix.h:184
void MatrixVector(double alpha, const double *in, double beta, double *out) const
Definition: SystemMatrix_MatrixVector.cpp:49
void makeZeroRowSums(double *left_over)
Definition: SystemMatrix.cpp:216
static int getSystemMatrixTypeId(int solver, int preconditioner, int package, bool symmetry, const escript::JMPI &mpi_info)
Definition: SystemMatrix.cpp:547
void startRowCollect(const double *in)
Definition: SystemMatrix.h:189
static SystemMatrix_ptr loadMM_toCSR(const char *filename)
Definition: SystemMatrix_loadMM.cpp:115
DataTypes::RealVectorType & getExpandedVectorReference(DataTypes::real_t dummy=0)
Ensures that the Data is expanded and returns its underlying vector Does not check for exclusive writ...
Definition: Data.cpp:5841
dim_t block_size
Definition: SystemMatrix.h:332
Definition: BiCGStab.cpp:26
void MatrixVector_CSR_OFFSET0(double alpha, const double *in, double beta, double *out) const
Definition: SystemMatrix_MatrixVector.cpp:78
void Preconditioner_free(Preconditioner *in)
Definition: Preconditioner.cpp:54
int getRowBlockSize() const
returns the row block size
Definition: AbstractSystemMatrix.h:128
void expand()
Whatever the current Data type make this into a DataExpanded.
Definition: Data.cpp:1180
int getColumnBlockSize() const
returns the column block size
Definition: AbstractSystemMatrix.h:139
virtual void setToSolution(escript::Data &out, escript::Data &in, boost::python::object &options) const
solves the linear system this*out=in
Definition: SystemMatrix.cpp:328
void Preconditioner_solve(Preconditioner *prec, SystemMatrix_ptr A, double *x, double *b)
Definition: Preconditioner.cpp:130
Definition: SparseMatrix.h:57
#define MATRIX_FORMAT_DEFAULT
Definition: Paso.h:62
#define MATRIX_FORMAT_DIAGONAL_BLOCK
Definition: Paso.h:66
escript::Distribution_ptr row_distribution
Definition: SystemMatrix.h:334
dim_t logical_col_block_size
Definition: SystemMatrix.h:328
virtual void saveMM(const std::string &filename) const
writes the matrix to a file using the Matrix Market file format
Definition: SystemMatrix.h:83
~SystemMatrix()
Definition: SystemMatrix.cpp:157
SparseMatrix_ptr col_coupleBlock
coupling to neighbouring processors (row - col)
Definition: SystemMatrix.h:344