ParGeMSLR
parallel_csr_matrix.hpp
Go to the documentation of this file.
1 #ifndef PARGEMSLR_PARALLEL_CSR_MATRIX_H
2 #define PARGEMSLR_PARALLEL_CSR_MATRIX_H
3 
8 #include <iostream>
9 
10 #include "../utils/utils.hpp"
11 #include "../utils/structs.hpp"
12 #include "matrix.hpp"
13 #include "csr_matrix.hpp"
14 
15 #ifdef PARGEMSLR_CUDA
16 #include "cusparse.h"
17 #endif
18 
19 namespace pargemslr
20 {
21 
27  {
28  private:
29 
34  int _location_send;
35 
40  int _location_recv;
41 
46  int _buff_unit_size;
47 
52  std::vector<void*> _send_buff_v2;
53 
58  std::vector<void*> _recv_buff_v2;
59 
60 #ifdef PARGEMSLR_CUDA
61 
66  int _buff_d_unit_size;
67 
72  std::vector<void*> _send_buff_v2_d;
73 
78  std::vector<void*> _recv_buff_v2_d;
79 
80 #endif
81 
82  public:
83 
88  int _n_in;
89 
94  int _n_out;
95 
101 
107 
112  std::vector<vector_int > _send_idx_v2;
113 
119  std::vector<vector_int > _recv_idx_v2;
120 
125  std::vector<vector_int > _idx_helper_v2;
126 
131  vector<MPI_Request> _requests_v;
132 
137  bool _is_ready;
138 
144 
150 
156 
163 
170 
178 
186 
192 
198  int Clear();
199 
206  int CreateHostBuffer(int unitsize);
207 
208 #ifdef PARGEMSLR_CUDA
209 
216  int CreateDeviceBuffer(int unitsize);
217 
218 #endif
219 
225  int MoveData(int location);
226 
232  int MoveSendData(int location);
233 
239  int MoveRecvData(int location);
240 
250  template <typename T>
251  int DataTransfer(const VectorVirtualClass<T> &vec_in, VectorVirtualClass<T> &vec_out, int loc_in, int loc_out);
252 
261  template <typename T>
262  int DataTransferStart(const VectorVirtualClass<T> &vec_in, int loc_in);
263 
271  template <typename T>
272  int DataTransferOver(VectorVirtualClass<T> &vec_out, int loc_out);
273 
283  template <typename T, class VectorType>
284  int DataTransfer(const std::vector<VectorType> &vec_in, std::vector<VectorType> &vec_out, int loc_in, int loc_out);
285 
294  template <typename T, class VectorType>
295  int DataTransferStart(const std::vector<VectorType> &vec_in, int loc_in);
296 
304  template <typename T, class VectorType>
305  int DataTransferOver(std::vector<VectorType> &vec_out, int loc_out);
306 
316  template <typename T>
317  int DataTransferReverse(const VectorVirtualClass<T> &vec_in, VectorVirtualClass<T> &vec_out, int loc_in, int loc_out);
318 
327  template <typename T>
328  int DataTransferStartReverse(const VectorVirtualClass<T> &vec_in, int loc_in);
329 
337  template <typename T>
338  int DataTransferOverReverse(VectorVirtualClass<T> &vec_out, int loc_out);
339 
340  };
341 
346  template <typename T>
347  class ParallelCsrMatrixClass: public MatrixClass<T>
348  {
349  private:
350 
351  /* variables */
352 
357  long int _nrow_global;
358 
363  long int _ncol_global;
364 
369  long int _nrow_start;
370 
375  long int _ncol_start;
376 
381  int _nrow_local;
382 
387  int _ncol_local;
388 
394  bool _is_offd_map_sorted;
395 
400  CsrMatrixClass<T> _diag_mat;
401 
407  CsrMatrixClass<T> _offd_mat;
408 
413  vector_long _offd_map_v;
414 
419  SequentialVectorClass<T> _matvec_working_vec;
420 
425  SequentialVectorClass<T> _trans_matvec_working_vec;
426 
431  int _separator_ndom;
432 
437  vector_int _separator_domi;
438 
439  public:
440 
446  typename std::conditional<PargemslrIsDoublePrecision<T>::value,
447  double,
448  float>::type _diagonal_shift;
449 
455 
462 
468 
475 
482 
490 
498 
503  virtual ~ParallelCsrMatrixClass();
504 
514  int Setup(int nrow_local, int ncol_local, parallel_log &parlog);
515 
529  int Setup(int nrow_local, long int nrow_start, long int nrow_global, int ncol_local, long int ncol_start, long int ncol_global, parallel_log &parlog);
530 
536  virtual int Clear();
537 
543  virtual int GetDataLocation() const;
544 
550  virtual int GetNumRowsLocal() const;
551 
557  virtual int GetNumColsLocal() const;
558 
564  long int GetNumRowsGlobal() const;
565 
571  long int GetNumColsGlobal() const;
572 
578  long int GetRowStartGlobal() const;
579 
585  long int GetColStartGlobal() const;
586 
592  virtual long int GetNumNonzeros() const;
593 
602  int GetGraphArrays( vector_long &vtxdist, vector_long &xadj, vector_long &adjncy);
603 
610 
617 
624 
630  bool& IsOffdMapSorted();
631 
637  int SetOffdMatSorted(bool is_offd_map_sorted);
638 
644  int SortOffdMap();
645 
653 
659  virtual int Eye();
660 
667  virtual int Fill(const T &v);
668 
675  virtual int MoveData( const int &location);
676 
683  virtual int Scale(const T &alpha);
684 
691  int GetDiagScale(T &scale);
692 
698  int Transpose();
699 
700 
708 
714  int SetupMatvec();
715 
722  int SetupMatvecStart();
723 
729  int SetupMatvecOver();
730 
742  virtual int MatVec( char trans, const T &alpha, const VectorClass<T> &x, const T &beta, VectorClass<T> &y);
743 
756  virtual int MatVec( char trans, const T &alpha, const VectorClass<T> &x, const T &beta, const VectorClass<T> &y, VectorClass<T> &z);
757 
768  int MatVecOffd( char trans, const T &alpha, const VectorClass<T> &x, const T &beta, VectorClass<T> &y);
769 
783  int MatMat( const T &alpha, const ParallelCsrMatrixClass<T> &A, char transa, const ParallelCsrMatrixClass<T> &B, char transb, const T &beta);
784 
795  int SubMatrix(vector_long &rows, vector_long &cols, int location, ParallelCsrMatrixClass<T> &parcsrmat_out);
796 
815  int Laplacian(int nx, int ny, int nz, int dx, int dy, int dz, T alphax, T alphay, T alphaz, T shift, parallel_log &parlog, bool rand_perturb = false);
816 
828  int Helmholtz(int n, int dx, int dy, int dz, T w, parallel_log &parlog);
829 
852  int LaplacianWithPartition(int nx, int ny, int nz, int dx, int dy, int dz, int d2x, int d2y, int d2z, T alphax, T alphay, T alphaz, T shift, parallel_log &parlog, bool rand_perturb = false);
853 
868  int HelmholtzWithPartition(int n, int dx, int dy, int dz, int d2x, int d2y, int d2z, T w, parallel_log &parlog);
869 
879  int ReadFromSingleMMFile(const char *matfile, int idxin, parallel_log &parlog);
880 
887  int PlotPatternGnuPlot( const char *datafilename, int pttype = 0);
888 
895  template <typename T1>
896  int SetComplexShift(T1 diagonal_shift)
897  {
898  this->_diag_mat.SetComplexShift(diagonal_shift);
899  return PARGEMSLR_SUCCESS;
900  }
901 
908  template <typename T1>
909  int GetComplexShift(T1 &diagonal_shift)
910  {
911  this->_diag_mat.GetComplexShift(diagonal_shift);
912  return PARGEMSLR_SUCCESS;
913  }
914 
921  {
922  return this->_separator_ndom;
923  }
924 
931  {
932  return this->_separator_domi;
933  }
934 
935  };
936 
937  typedef ParallelCsrMatrixClass<float> matrix_csr_par_float;
938  typedef ParallelCsrMatrixClass<double> matrix_csr_par_double;
939  typedef ParallelCsrMatrixClass<complexs> matrix_csr_par_complexs;
940  typedef ParallelCsrMatrixClass<complexd> matrix_csr_par_complexd;
941  template<> struct PargemslrIsComplex<ParallelCsrMatrixClass<complexs> > : public std::true_type {};
942  template<> struct PargemslrIsComplex<ParallelCsrMatrixClass<complexd> > : public std::true_type {};
943  template<> struct PargemslrIsParallel<ParallelCsrMatrixClass<complexs> > : public std::true_type {};
944  template<> struct PargemslrIsParallel<ParallelCsrMatrixClass<complexd> > : public std::true_type {};
945 
946 }
947 
948 #endif
pargemslr::ParallelCsrMatrixClass::SetComplexShift
int SetComplexShift(T1 diagonal_shift)
Set the diagonal complex shift for some preconditioner options.
Definition: parallel_csr_matrix.hpp:896
pargemslr::ParallelCsrMatrixClass::SetOffdMatSorted
int SetOffdMatSorted(bool is_offd_map_sorted)
Set the off-diagonal map vector to sorted/unsorted.
Definition: parallel_csr_matrix.cpp:1529
pargemslr::ParallelCsrMatrixClass::GetDiagScale
int GetDiagScale(T &scale)
Get the value leads to max diagonal no.
Definition: parallel_csr_matrix.cpp:1710
pargemslr::ParallelCsrMatrixClass::ParallelCsrMatrixClass
ParallelCsrMatrixClass()
The constructor of ParallelCsrMatrixClass.
Definition: parallel_csr_matrix.cpp:1115
pargemslr::ParallelCsrMatrixClass::GetNumNonzeros
virtual long int GetNumNonzeros() const
Get the number of nonzeros in this matrix.
Definition: parallel_csr_matrix.cpp:1416
pargemslr::CommunicationHelperClass::_is_waiting
bool _is_waiting
Is true when there is communication on going.
Definition: parallel_csr_matrix.hpp:143
pargemslr::ParallelCsrMatrixClass::Helmholtz
int Helmholtz(int n, int dx, int dy, int dz, T w, parallel_log &parlog)
Generate 3D Helmholtz matrix with 7-pt on [0,1]^3. -\Delta u - w^2 u = f.
Definition: parallel_csr_matrix.cpp:3735
pargemslr::CsrMatrixClass::GetComplexShift
int GetComplexShift(T1 &diagonal_shift)
Get the diagonal complex shift for some preconditioner options.
Definition: csr_matrix.cpp:1723
pargemslr::ParallelCsrMatrixClass::SetupMatvec
int SetupMatvec()
Setup the matvec_helper for parallel matvec.
Definition: parallel_csr_matrix.cpp:1731
pargemslr::ParallelCsrMatrixClass::Scale
virtual int Scale(const T &alpha)
Scale the current csr matrix.
Definition: parallel_csr_matrix.cpp:1696
pargemslr::ParallelCsrMatrixClass::MatVec
virtual int MatVec(char trans, const T &alpha, const VectorClass< T > &x, const T &beta, VectorClass< T > &y)
In place parallel csr Matrix-Vector product ==> y := alpha*A*x + beta*y, or y := alpha*A'*x + beta*y.
Definition: parallel_csr_matrix.cpp:2105
pargemslr::CommunicationHelperClass::DataTransferStart
int DataTransferStart(const VectorVirtualClass< T > &vec_in, int loc_in)
Start communication using the buffer inside this comm helper.
Definition: parallel_csr_matrix.cpp:447
pargemslr::ParallelCsrMatrixClass::Setup
int Setup(int nrow_local, int ncol_local, parallel_log &parlog)
Free the current parallel matrix, and set up new paralle matrix.
Definition: parallel_csr_matrix.cpp:1295
pargemslr::ParallelCsrMatrixClass::LaplacianWithPartition
int LaplacianWithPartition(int nx, int ny, int nz, int dx, int dy, int dz, int d2x, int d2y, int d2z, T alphax, T alphay, T alphaz, T shift, parallel_log &parlog, bool rand_perturb=false)
Generate Laplacian matrix on the host memory, 5-pt for 2D problem and 7-pt for 3D problem.
Definition: parallel_csr_matrix.cpp:3068
csr_matrix.hpp
CSR matrix data structure.
pargemslr::CommunicationHelperClass::MoveData
int MoveData(int location)
Move the index data to other location in the memory.
Definition: parallel_csr_matrix.cpp:254
pargemslr::PargemslrIsParallel
Tell if a value is a parallel data structure.
Definition: utils.hpp:444
pargemslr::CommunicationHelperClass::MoveRecvData
int MoveRecvData(int location)
Move the recv data to other location in the memory.
Definition: parallel_csr_matrix.cpp:284
pargemslr::CommunicationHelperClass::_requests_v
vector< MPI_Request > _requests_v
Vector of MPI_Request for communication.
Definition: parallel_csr_matrix.hpp:131
pargemslr::ParallelCsrMatrixClass::GetComplexShift
int GetComplexShift(T1 &diagonal_shift)
Get the diagonal complex shift for some preconditioner options.
Definition: parallel_csr_matrix.hpp:909
pargemslr::ParallelCsrMatrixClass::GetNumColsLocal
virtual int GetNumColsLocal() const
Get the local number of columns of the matrix.
Definition: parallel_csr_matrix.cpp:1366
pargemslr::CsrMatrixClass::SetComplexShift
int SetComplexShift(T1 diagonal_shift)
Set the diagonal complex shift for some preconditioner options.
Definition: csr_matrix.hpp:666
pargemslr::ParallelCsrMatrixClass::GetColStartGlobal
long int GetColStartGlobal() const
Get the global number of the first column of the matrix.
Definition: parallel_csr_matrix.cpp:1406
pargemslr::CommunicationHelperClass::_recv_from_v
vector_int _recv_from_v
The vector stores the MPI ranks that myid needs to recv external vector from.
Definition: parallel_csr_matrix.hpp:106
pargemslr::ParallelCsrMatrixClass::GetOffdMap
vector_long & GetOffdMap()
Get the off-diagonal column map vector.
Definition: parallel_csr_matrix.cpp:1509
pargemslr::ParallelCsrMatrixClass::GetOffdMat
CsrMatrixClass< T > & GetOffdMat()
Get the off-diagonal matrix.
Definition: parallel_csr_matrix.cpp:1499
pargemslr::ParallelCsrMatrixClass::MatMat
int MatMat(const T &alpha, const ParallelCsrMatrixClass< T > &A, char transa, const ParallelCsrMatrixClass< T > &B, char transb, const T &beta)
Dense Matrix-Matrix multiplication, C = alpha*transa(A)*transb(B)+beta*C where C is this matrix.
Definition: parallel_csr_matrix.cpp:2233
pargemslr::VectorClass
The virtual class of real/complex vector class.
Definition: vector.hpp:126
pargemslr::ParallelCsrMatrixClass::operator=
ParallelCsrMatrixClass< T > & operator=(const ParallelCsrMatrixClass< T > &mat)
The = operator of ParallelCsrMatrixClass.
Definition: parallel_csr_matrix.cpp:1190
pargemslr::ParallelVectorClass
The class of parallel real/complex vector.
Definition: structs.hpp:14
pargemslr::ParallelCsrMatrixClass::~ParallelCsrMatrixClass
virtual ~ParallelCsrMatrixClass()
The destructor of ParallelCsrMatrixClass.
Definition: parallel_csr_matrix.cpp:1254
pargemslr::CommunicationHelperClass::operator=
CommunicationHelperClass & operator=(const CommunicationHelperClass &comm_helper)
The = operator of CommunicationHelperClass.
Definition: parallel_csr_matrix.cpp:104
pargemslr::SequentialVectorClass
The class of sequential real/complex vector.
Definition: structs.hpp:12
pargemslr::CommunicationHelperClass::_is_nbhd_built
bool _is_nbhd_built
If the neiborhood information (send_to and recv_from) is set in advance.
Definition: parallel_csr_matrix.hpp:149
pargemslr::ParallelCsrMatrixClass::GetNumColsGlobal
long int GetNumColsGlobal() const
Get the global number of columns of the matrix.
Definition: parallel_csr_matrix.cpp:1386
pargemslr::CommunicationHelperClass
The data structure for parallel matvec helper, store communication inforamtion for parallel matvec,...
Definition: parallel_csr_matrix.hpp:27
pargemslr::ParallelCsrMatrixClass::SetupMatvecOver
int SetupMatvecOver()
Finishing up the setup phase of matvec_helper for parallel matvec.
Definition: parallel_csr_matrix.cpp:2060
pargemslr::CommunicationHelperClass::DataTransferStartReverse
int DataTransferStartReverse(const VectorVirtualClass< T > &vec_in, int loc_in)
Start communication using the buffer inside this comm helper in the opposite direction.
Definition: parallel_csr_matrix.cpp:853
pargemslr::ParallelCsrMatrixClass::GetGraphArrays
int GetGraphArrays(vector_long &vtxdist, vector_long &xadj, vector_long &adjncy)
Get the vector arrays for the graph, used as inputs for ParMETIS. Diagonal entry is removed.
Definition: parallel_csr_matrix.cpp:1435
pargemslr::ParallelCsrMatrixClass
Class of parallel CSR matrices.
Definition: structs.hpp:18
matrix.hpp
The virtual matrix classes.
pargemslr::ParallelCsrMatrixClass::GetNumRowsLocal
virtual int GetNumRowsLocal() const
Get the local number of rows of the matrix.
Definition: parallel_csr_matrix.cpp:1356
pargemslr::CommunicationHelperClass::_send_to_v
vector_int _send_to_v
The vector stores the MPI ranks that myid needs to send local vector to.
Definition: parallel_csr_matrix.hpp:100
pargemslr::ParallelCsrMatrixClass::GetNumRowsGlobal
long int GetNumRowsGlobal() const
Get the global number of rows of the matrix.
Definition: parallel_csr_matrix.cpp:1376
pargemslr::ParallelCsrMatrixClass::Laplacian
int Laplacian(int nx, int ny, int nz, int dx, int dy, int dz, T alphax, T alphay, T alphaz, T shift, parallel_log &parlog, bool rand_perturb=false)
Generate Laplacian matrix on the host memory, 5-pt for 2D problem and 7-pt for 3D problem.
Definition: parallel_csr_matrix.cpp:2519
pargemslr::ComplexValueClass
The template class complex.
Definition: complex.hpp:24
pargemslr::IntVectorClass< int >
pargemslr::ParallelCsrMatrixClass::SubMatrix
int SubMatrix(vector_long &rows, vector_long &cols, int location, ParallelCsrMatrixClass< T > &parcsrmat_out)
Extract parallel submatrix from parallel CSR matrix.
Definition: parallel_csr_matrix.cpp:2244
pargemslr::ParallelCsrMatrixClass::_comm_helper
CommunicationHelperClass _comm_helper
The data struxture for the parallel matvec. Stores communication inforamtion, and working buffers.
Definition: parallel_csr_matrix.hpp:454
pargemslr::ParallelCsrMatrixClass::GetSeparatorNumSubdomains
int & GetSeparatorNumSubdomains()
Get number of subdomains on the top level if setted in advange.
Definition: parallel_csr_matrix.hpp:920
pargemslr::ParallelCsrMatrixClass::GetRowStartGlobal
long int GetRowStartGlobal() const
Get the global number of the first row of the matrix.
Definition: parallel_csr_matrix.cpp:1396
pargemslr::ParallelCsrMatrixClass::HelmholtzWithPartition
int HelmholtzWithPartition(int n, int dx, int dy, int dz, int d2x, int d2y, int d2z, T w, parallel_log &parlog)
Generate 3D Helmholtz matrix with 7-pt on [0,1]^3. -\Delta u - w^2 u = f.
Definition: parallel_csr_matrix.cpp:4335
pargemslr::ParallelCsrMatrixClass::PlotPatternGnuPlot
int PlotPatternGnuPlot(const char *datafilename, int pttype=0)
Plot the pattern of the parallel csr matrix using gnuplot. Similar to spy in the MATLAB....
Definition: parallel_csr_matrix.cpp:5384
pargemslr::ParallelCsrMatrixClass::Eye
virtual int Eye()
Create an indentity matrix.
Definition: parallel_csr_matrix.cpp:1638
pargemslr::MatrixClass
The virtual class of all matrix classes.
Definition: matrix.hpp:23
pargemslr::CommunicationHelperClass::_n_in
int _n_in
The size of the input vector.
Definition: parallel_csr_matrix.hpp:88
pargemslr::parallel_log
class pargemslr::ParallelLogClass parallel_log
The data structure for parallel computing, including data structures for MPI and CUDA.
pargemslr::ParallelCsrMatrixClass::Fill
virtual int Fill(const T &v)
Fill the matrix with constant value.
Definition: parallel_csr_matrix.cpp:1683
pargemslr::CommunicationHelperClass::_is_ready
bool _is_ready
Is true when the comm_helper ready to use.
Definition: parallel_csr_matrix.hpp:137
pargemslr::ParallelCsrMatrixClass::Transpose
int Transpose()
Transpost the current matrix.
Definition: parallel_csr_matrix.cpp:2479
pargemslr::ParallelCsrMatrixClass::_trans_comm_helper
CommunicationHelperClass _trans_comm_helper
The data struxture for the parallel matvec of A transpose. Stores communication inforamtion,...
Definition: parallel_csr_matrix.hpp:461
pargemslr::CommunicationHelperClass::DataTransferOverReverse
int DataTransferOverReverse(VectorVirtualClass< T > &vec_out, int loc_out)
Finish communication using the buffer inside this comm helper in the opposite direction.
Definition: parallel_csr_matrix.cpp:997
pargemslr::CommunicationHelperClass::_send_idx_v2
std::vector< vector_int > _send_idx_v2
2D vector, send_idx_v2[i] is the index in local vector that need to be sent to proc....
Definition: parallel_csr_matrix.hpp:112
pargemslr::CommunicationHelperClass::_idx_helper_v2
std::vector< vector_int > _idx_helper_v2
Helper array for building the comm helper.
Definition: parallel_csr_matrix.hpp:125
pargemslr::ParallelCsrMatrixClass::SetupMatvecStart
int SetupMatvecStart()
Setup the matvec_helper for parallel matvec.
Definition: parallel_csr_matrix.cpp:1746
pargemslr::ParallelCsrMatrixClass::MoveData
virtual int MoveData(const int &location)
Move the data to another memory location.
Definition: parallel_csr_matrix.cpp:1658
pargemslr::ParallelCsrMatrixClass::_diagonal_shift
std::conditional< PargemslrIsDoublePrecision< T >::value, double, float >::type _diagonal_shift
The diagonal complex shift in some preconditioners. The preconditioner would be built on A+_diagonal_...
Definition: parallel_csr_matrix.hpp:448
pargemslr::ParallelCsrMatrixClass::GetDiagMat
CsrMatrixClass< T > & GetDiagMat()
Get the diagonal matrix.
Definition: parallel_csr_matrix.cpp:1489
pargemslr::ParallelCsrMatrixClass::SortOffdMap
int SortOffdMap()
Sort the off-diagonal map vector.
Definition: parallel_csr_matrix.cpp:1540
pargemslr::ParallelCsrMatrixClass::GetDataLocation
virtual int GetDataLocation() const
Get the data location of the matrix.
Definition: parallel_csr_matrix.cpp:1345
pargemslr::ParallelCsrMatrixClass::SetupVectorPtrStr
int SetupVectorPtrStr(ParallelVectorClass< T > &vec)
Update the structure of a parallel vector to have same distribution as the row distribution of this m...
Definition: parallel_csr_matrix.cpp:1628
pargemslr::CommunicationHelperClass::DataTransfer
int DataTransfer(const VectorVirtualClass< T > &vec_in, VectorVirtualClass< T > &vec_out, int loc_in, int loc_out)
Apply communication using the buffer inside this comm helper.
Definition: parallel_csr_matrix.cpp:433
pargemslr::CommunicationHelperClass::_n_out
int _n_out
The size of the output vector.
Definition: parallel_csr_matrix.hpp:94
pargemslr::VectorVirtualClass
The virtual class of all vector classes.
Definition: vector.hpp:22
pargemslr::PargemslrIsComplex
Tell if a value is a complex value.
Definition: complex.hpp:684
pargemslr::ParallelCsrMatrixClass::MatVecOffd
int MatVecOffd(char trans, const T &alpha, const VectorClass< T > &x, const T &beta, VectorClass< T > &y)
In place parallel csr Matrix-Vector product with offdiagonal block only ==> y := alpha*A*x + beta*y,...
Definition: parallel_csr_matrix.cpp:2195
pargemslr::CommunicationHelperClass::MoveSendData
int MoveSendData(int location)
Move the send data to other location in the memory.
Definition: parallel_csr_matrix.cpp:264
pargemslr::CommunicationHelperClass::CommunicationHelperClass
CommunicationHelperClass()
The constructor of CommunicationHelperClass.
Definition: parallel_csr_matrix.cpp:25
pargemslr::CommunicationHelperClass::CreateHostBuffer
int CreateHostBuffer(int unitsize)
Create buffer.
Definition: parallel_csr_matrix.cpp:304
pargemslr::CommunicationHelperClass::Clear
int Clear()
Free the current matvec helper, set everything to 0.
Definition: parallel_csr_matrix.cpp:176
pargemslr::CommunicationHelperClass::~CommunicationHelperClass
~CommunicationHelperClass()
The destructor of CommunicationHelperClass.
Definition: parallel_csr_matrix.cpp:171
pargemslr::CommunicationHelperClass::DataTransferReverse
int DataTransferReverse(const VectorVirtualClass< T > &vec_in, VectorVirtualClass< T > &vec_out, int loc_in, int loc_out)
Apply communication using the buffer inside this comm helper in the opposite direction.
Definition: parallel_csr_matrix.cpp:839
pargemslr::CsrMatrixClass
Class of CSR/CSC matrices.
Definition: structs.hpp:16
pargemslr::CommunicationHelperClass::_recv_idx_v2
std::vector< vector_int > _recv_idx_v2
2D vector, recv_idx_v2[i] is the index in external vector that need to be received from proc....
Definition: parallel_csr_matrix.hpp:119
pargemslr::ParallelCsrMatrixClass::IsOffdMapSorted
bool & IsOffdMapSorted()
Tell if the off-diagonal map vector is sorted.
Definition: parallel_csr_matrix.cpp:1519
pargemslr::ParallelCsrMatrixClass::GetSeparatorDomi
vector_int & GetSeparatorDomi()
Number of subdomain for each node, -1 is the separator.
Definition: parallel_csr_matrix.hpp:930
pargemslr::ParallelCsrMatrixClass::Clear
virtual int Clear()
Free the current matrix.
Definition: parallel_csr_matrix.cpp:1264
pargemslr::CommunicationHelperClass::DataTransferOver
int DataTransferOver(VectorVirtualClass< T > &vec_out, int loc_out)
Finish communication using the buffer inside this comm helper.
Definition: parallel_csr_matrix.cpp:591
pargemslr::ParallelCsrMatrixClass::ReadFromSingleMMFile
int ReadFromSingleMMFile(const char *matfile, int idxin, parallel_log &parlog)
Read matrix on the host memory, matrix market format.
Definition: parallel_csr_matrix.cpp:5135