escript  Revision_
RipleySystemMatrix.h
Go to the documentation of this file.
1 
2 /*****************************************************************************
3 *
4 * Copyright (c) 2014-2018 by The University of Queensland
5 * http://www.uq.edu.au
6 *
7 * Primary Business: Queensland, Australia
8 * Licensed under the Apache License, version 2.0
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Development until 2012 by Earth Systems Science Computational Center (ESSCC)
12 * Development 2012-2013 by School of Earth Sciences
13 * Development from 2014-2017 by Centre for Geoscience Computing (GeoComp)
14 * Development from 2019 by School of Earth and Environmental Sciences
15 **
16 *****************************************************************************/
17 
18 #ifndef __RIPLEY_SYSTEMMATRIX_H__
19 #define __RIPLEY_SYSTEMMATRIX_H__
20 
21 #include <escript/AbstractSystemMatrix.h>
22 #include <escript/FunctionSpace.h>
23 
24 #include <ripley/Ripley.h>
25 
26 namespace escript {
27 class SolverBuddy;
28 }
29 
30 #include <cusp/cds_matrix.h>
31 
32 namespace ripley {
33 
34 typedef cusp::cds_matrix<int, double, cusp::host_memory> HostMatrixType;
35 typedef cusp::cds_matrix<int, double, cusp::device_memory> DeviceMatrixType;
36 typedef cusp::array1d<double, cusp::host_memory> HostVectorType;
37 typedef cusp::array1d<double, cusp::device_memory> DeviceVectorType;
38 
40 {
41 public:
42  SystemMatrix(escript::JMPI mpiInfo, int blocksize,
43  const escript::FunctionSpace& fs, int nRows,
44  const IndexVector& diagonalOffsets, bool symmetric);
45 
46  virtual ~SystemMatrix() {}
47 
48  virtual void nullifyRowsAndCols(escript::Data& row_q,
49  escript::Data& col_q,
50  double mdv);
51 
52  virtual void saveMM(const std::string& filename) const;
53 
54  virtual void saveHB(const std::string& filename) const;
55 
56  virtual void resetValues(bool preserveSolverData = false);
57 
58  void add(const IndexVector& rowIndex, const std::vector<double>& array);
59 
60  inline int getBlockSize() const { return getRowBlockSize(); }
61 
62 private:
63  template<class LinearOperator, class Vector, class Preconditioner>
64  void runSolver(LinearOperator& A, Vector& x, Vector& b, Preconditioner& M,
65  escript::SolverBuddy& sb) const;
66 
68  void copyMatrixToDevice(bool verbose=false) const;
69 
70  virtual void setToSolution(escript::Data& out, escript::Data& in,
71  boost::python::object& options) const;
72 
73  virtual void ypAx(escript::Data& y, escript::Data& x) const;
74 
75  static void checkCUDA();
76 
78  static std::vector<int> cudaDevices;
79 
83  mutable bool matrixAltered;
84  bool symmetric;
85 };
86 
87 } // namespace ripley
88 
89 #endif // __RIPLEY_SYSTEMMATRIX_H__
90 
ripley::SystemMatrix::dmat
DeviceMatrixType dmat
Definition: RipleySystemMatrix.h:82
escript::SolverBuddy
Definition: SolverOptions.h:161
ripley
Definition: ripley/src/AbstractAssembler.h:26
ripley::SystemMatrix::runSolver
void runSolver(LinearOperator &A, Vector &x, Vector &b, Preconditioner &M, escript::SolverBuddy &sb) const
ripley::SystemMatrix::resetValues
virtual void resetValues(bool preserveSolverData=false)
resets the matrix entries
ripley::SystemMatrix::symmetric
bool symmetric
Definition: RipleySystemMatrix.h:84
ripley::SystemMatrix::checkCUDA
static void checkCUDA()
ripley::SystemMatrix::ypAx
virtual void ypAx(escript::Data &y, escript::Data &x) const
performs y+=this*x
ripley::SystemMatrix::~SystemMatrix
virtual ~SystemMatrix()
Definition: RipleySystemMatrix.h:46
ripley::SystemMatrix::saveMM
virtual void saveMM(const std::string &filename) const
writes the matrix to a file using the Matrix Market file format
ripley::SystemMatrix::cudaDevices
static std::vector< int > cudaDevices
GPU device IDs supporting CUDA.
Definition: RipleySystemMatrix.h:78
ripley::SystemMatrix::copyMatrixToDevice
void copyMatrixToDevice(bool verbose=false) const
copies the current matrix stored on host to device if required
escript::FunctionSpace
Definition: FunctionSpace.h:36
ripley::SystemMatrix::m_mpiInfo
escript::JMPI m_mpiInfo
Definition: RipleySystemMatrix.h:80
ripley::SystemMatrix::matrixAltered
bool matrixAltered
Definition: RipleySystemMatrix.h:83
ripley::SystemMatrix::getBlockSize
int getBlockSize() const
Definition: RipleySystemMatrix.h:60
ripley::DeviceVectorType
cusp::array1d< double, cusp::device_memory > DeviceVectorType
Definition: RipleySystemMatrix.h:37
escript::Data
Data represents a collection of datapoints.
Definition: Data.h:64
escript::JMPI
boost::shared_ptr< JMPI_ > JMPI
Definition: EsysMPI.h:74
escript::AbstractSystemMatrix
Base class for escript system matrices.
Definition: AbstractSystemMatrix.h:44
ripley::SystemMatrix::nullifyRowsAndCols
virtual void nullifyRowsAndCols(escript::Data &row_q, escript::Data &col_q, double mdv)
sets matrix entries to zero in specified rows and columns. The rows and columns are marked by positiv...
ripley::SystemMatrix::setToSolution
virtual void setToSolution(escript::Data &out, escript::Data &in, boost::python::object &options) const
solves the linear system this*out=in
ripley::IndexVector
std::vector< index_t > IndexVector
Definition: Ripley.h:44
ripley::SystemMatrix::saveHB
virtual void saveHB(const std::string &filename) const
writes the matrix to a file using the Harwell-Boeing file format
ripley::HostMatrixType
cusp::cds_matrix< int, double, cusp::host_memory > HostMatrixType
Definition: RipleySystemMatrix.h:34
escript
Definition: AbstractContinuousDomain.cpp:23
ripley::HostVectorType
cusp::array1d< double, cusp::host_memory > HostVectorType
Definition: RipleySystemMatrix.h:36
escript::Vector
Data Vector(double value, const FunctionSpace &what, bool expanded)
Return a Data object containing vector data-points. ie: rank 1 data-points.
Definition: DataFactory.cpp:125
paso::M
static dim_t M
Definition: SparseMatrix_saveHB.cpp:37
ripley::SystemMatrix::SystemMatrix
SystemMatrix(escript::JMPI mpiInfo, int blocksize, const escript::FunctionSpace &fs, int nRows, const IndexVector &diagonalOffsets, bool symmetric)
ripley::SystemMatrix::mat
HostMatrixType mat
Definition: RipleySystemMatrix.h:81
ripley::DeviceMatrixType
cusp::cds_matrix< int, double, cusp::device_memory > DeviceMatrixType
Definition: RipleySystemMatrix.h:35
escript::AbstractSystemMatrix::getRowBlockSize
int getRowBlockSize() const
returns the row block size
Definition: AbstractSystemMatrix.h:114
ripley::SystemMatrix
Definition: RipleySystemMatrix.h:40
ripley::SystemMatrix::add
void add(const IndexVector &rowIndex, const std::vector< double > &array)