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
26namespace escript {
27class SolverBuddy;
28}
29
30#include <cusp/cds_matrix.h>
31
32namespace ripley {
33
34typedef cusp::cds_matrix<int, double, cusp::host_memory> HostMatrixType;
35typedef cusp::cds_matrix<int, double, cusp::device_memory> DeviceMatrixType;
36typedef cusp::array1d<double, cusp::host_memory> HostVectorType;
37typedef cusp::array1d<double, cusp::device_memory> DeviceVectorType;
38
40{
41public:
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
62private:
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
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;
85};
86
87} // namespace ripley
88
89#endif // __RIPLEY_SYSTEMMATRIX_H__
90
Base class for escript system matrices.
Definition AbstractSystemMatrix.h:44
int getRowBlockSize() const
returns the row block size
Definition AbstractSystemMatrix.h:114
Data represents a collection of datapoints.
Definition Data.h:64
Definition FunctionSpace.h:36
Definition SolverOptions.h:161
Definition RipleySystemMatrix.h:40
bool matrixAltered
Definition RipleySystemMatrix.h:83
virtual void saveHB(const std::string &filename) const
writes the matrix to a file using the Harwell-Boeing file format
escript::JMPI m_mpiInfo
Definition RipleySystemMatrix.h:80
virtual void saveMM(const std::string &filename) const
writes the matrix to a file using the Matrix Market file format
virtual void ypAx(escript::Data &y, escript::Data &x) const
performs y+=this*x
static void checkCUDA()
static std::vector< int > cudaDevices
GPU device IDs supporting CUDA.
Definition RipleySystemMatrix.h:78
void copyMatrixToDevice(bool verbose=false) const
copies the current matrix stored on host to device if required
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...
void runSolver(LinearOperator &A, Vector &x, Vector &b, Preconditioner &M, escript::SolverBuddy &sb) const
DeviceMatrixType dmat
Definition RipleySystemMatrix.h:82
int getBlockSize() const
Definition RipleySystemMatrix.h:60
virtual void setToSolution(escript::Data &out, escript::Data &in, boost::python::object &options) const
solves the linear system this*out=in
HostMatrixType mat
Definition RipleySystemMatrix.h:81
SystemMatrix(escript::JMPI mpiInfo, int blocksize, const escript::FunctionSpace &fs, int nRows, const IndexVector &diagonalOffsets, bool symmetric)
virtual ~SystemMatrix()
Definition RipleySystemMatrix.h:46
void add(const IndexVector &rowIndex, const std::vector< double > &array)
bool symmetric
Definition RipleySystemMatrix.h:84
virtual void resetValues(bool preserveSolverData=false)
resets the matrix entries
Definition AbstractContinuousDomain.cpp:23
boost::shared_ptr< JMPI_ > JMPI
Definition EsysMPI.h:76
Definition ripley/src/AbstractAssembler.h:26
std::vector< index_t > IndexVector
Definition Ripley.h:44
cusp::cds_matrix< int, double, cusp::device_memory > DeviceMatrixType
Definition RipleySystemMatrix.h:35
cusp::array1d< double, cusp::host_memory > HostVectorType
Definition RipleySystemMatrix.h:36
cusp::cds_matrix< int, double, cusp::host_memory > HostMatrixType
Definition RipleySystemMatrix.h:34
cusp::array1d< double, cusp::device_memory > DeviceVectorType
Definition RipleySystemMatrix.h:37