24#ifndef ScaLAPACKMatrix_h
25#define ScaLAPACKMatrix_h
34 namespace linearAlgebra
41 template <
typename NumberType>
60 const std::shared_ptr<const ProcessGrid> &process_grid,
76 const std::shared_ptr<const ProcessGrid> &process_grid,
98 const std::shared_ptr<const ProcessGrid> &process_grid,
114 const std::shared_ptr<const ProcessGrid> &process_grid,
169 const NumberType a = 0.,
170 const NumberType b = 1.,
171 const bool transpose_B =
false);
188 const NumberType a = 0.,
189 const NumberType b = 1.,
190 const bool conjugate_transpose_B =
false);
238 mult(
const NumberType b,
242 const bool transpose_A =
false,
243 const bool transpose_B =
false)
const;
267 zmult(
const NumberType b,
271 const bool conjugate_transpose_A =
false,
272 const bool conjugate_transpose_B =
false)
const;
295 const bool adding =
false)
const;
318 const bool adding =
false)
const;
341 const bool adding =
false)
const;
365 const bool adding =
false)
const;
388 const bool adding =
false)
const;
411 const bool adding =
false)
const;
435 const bool adding =
false)
const;
460 const bool adding =
false)
const;
503 local_el(
const unsigned int loc_row,
const unsigned int loc_column)
const;
509 local_el(
const unsigned int loc_row,
const unsigned int loc_column);
560 scale_rows(
const std::vector<NumberType> &factors);
600 const std::pair<unsigned int, unsigned int> &index_limits,
601 const bool compute_eigenvectors,
622 const std::pair<unsigned int, unsigned int> &index_limits,
623 const bool compute_eigenvectors,
639 const bool compute_eigenvectors,
641 const std::pair<unsigned int, unsigned int> &index_limits =
642 std::make_pair(std::numeric_limits<unsigned int>::max(),
643 std::numeric_limits<unsigned int>::max()),
644 const std::pair<double, double> &value_limits =
645 std::make_pair(std::numeric_limits<double>::quiet_NaN(),
646 std::numeric_limits<double>::quiet_NaN()));
670 const bool compute_eigenvectors,
672 const std::pair<unsigned int, unsigned int> &index_limits =
673 std::make_pair(std::numeric_limits<unsigned int>::max(),
674 std::numeric_limits<unsigned int>::max()),
675 const std::pair<double, double> &value_limits =
676 std::make_pair(std::numeric_limits<double>::quiet_NaN(),
677 std::numeric_limits<double>::quiet_NaN()));
702 std::shared_ptr<const ProcessGrid>
grid;
742 mutable std::vector<NumberType>
work;
788 template <
typename NumberType>
791 const unsigned int loc_column)
const
793 return values[loc_column * n_local_rows + loc_row];
799 template <
typename NumberType>
802 const unsigned int loc_column)
804 return values[loc_column * n_local_rows + loc_row];
809 template <
typename NumberType>
818 template <
typename NumberType>
827 template <
typename NumberType>
836 template <
typename NumberType>
840 return n_local_columns;
Scalapack wrapper adapted from dealii library and extended implementation to complex datatype.
Definition: ScalapackWrapper.h:43
void zmult(const NumberType b, const ScaLAPACKMatrix< NumberType > &B, const NumberType c, ScaLAPACKMatrix< NumberType > &C, const bool conjugate_transpose_A=false, const bool conjugate_transpose_B=false) const
Definition: ScalapackWrapper.t.cpp:738
ScalapackError compute_cholesky_factorization()
Definition: ScalapackWrapper.t.cpp:1019
unsigned int global_column(const unsigned int loc_column) const
Definition: ScalapackWrapper.t.cpp:206
LAPACKSupport::State get_state() const
Definition: ScalapackWrapper.t.cpp:178
const char uplo
Definition: ScalapackWrapper.h:759
void zCmCmult(ScaLAPACKMatrix< NumberType > &C, const ScaLAPACKMatrix< NumberType > &B, const bool adding=false) const
Definition: ScalapackWrapper.t.cpp:1007
std::vector< double > eigenpairs_hermitian_MRRR(const bool compute_eigenvectors, ScalapackError &scalapackError, const std::pair< unsigned int, unsigned int > &index_limits=std::make_pair(std::numeric_limits< unsigned int >::max(), std::numeric_limits< unsigned int >::max()), const std::pair< double, double > &value_limits=std::make_pair(std::numeric_limits< double >::quiet_NaN(), std::numeric_limits< double >::quiet_NaN()))
Definition: ScalapackWrapper.t.cpp:1634
void mTmult(ScaLAPACKMatrix< NumberType > &C, const ScaLAPACKMatrix< NumberType > &B, const bool adding=false) const
Definition: ScalapackWrapper.t.cpp:938
void zadd(const ScaLAPACKMatrix< NumberType > &B, const NumberType a=0., const NumberType b=1., const bool conjugate_transpose_B=false)
Definition: ScalapackWrapper.t.cpp:480
~ScaLAPACKMatrix()=default
void TmTmult(ScaLAPACKMatrix< NumberType > &C, const ScaLAPACKMatrix< NumberType > &B, const bool adding=false) const
Definition: ScalapackWrapper.t.cpp:952
LAPACKSupport::Property get_property() const
Definition: ScalapackWrapper.t.cpp:170
int n_local_rows
Definition: ScalapackWrapper.h:727
size_type_scalapack m() const
Definition: ScalapackWrapper.h:811
void copy_conjugate_transposed(const ScaLAPACKMatrix< NumberType > &B)
Definition: ScalapackWrapper.t.cpp:566
int n_columns
Definition: ScalapackWrapper.h:712
const int submatrix_row
Definition: ScalapackWrapper.h:777
std::vector< double > eigenpairs_hermitian(const bool compute_eigenvectors, ScalapackError &scalapackError, const std::pair< unsigned int, unsigned int > &index_limits=std::make_pair(std::numeric_limits< unsigned int >::max(), std::numeric_limits< unsigned int >::max()), const std::pair< double, double > &value_limits=std::make_pair(std::numeric_limits< double >::quiet_NaN(), std::numeric_limits< double >::quiet_NaN()))
Definition: ScalapackWrapper.t.cpp:1278
void scale_rows_realfactors(const std::vector< double > &factors)
Definition: ScalapackWrapper.t.cpp:1927
LAPACKSupport::State state
Definition: ScalapackWrapper.h:689
const int first_process_column
Definition: ScalapackWrapper.h:771
std::shared_ptr< const ProcessGrid > grid
Definition: ScalapackWrapper.h:702
void mult(const NumberType b, const ScaLAPACKMatrix< NumberType > &B, const NumberType c, ScaLAPACKMatrix< NumberType > &C, const bool transpose_A=false, const bool transpose_B=false) const
Definition: ScalapackWrapper.t.cpp:574
void conjugate()
Definition: ScalapackWrapper.t.cpp:226
void scale_rows(const std::vector< NumberType > &factors)
Definition: ScalapackWrapper.t.cpp:1886
void scale_columns(const std::vector< NumberType > &factors)
Definition: ScalapackWrapper.t.cpp:1865
int column_block_size
Definition: ScalapackWrapper.h:722
int n_local_columns
Definition: ScalapackWrapper.h:732
unsigned int local_n() const
Definition: ScalapackWrapper.h:838
NumberType local_el(const unsigned int loc_row, const unsigned int loc_column) const
Definition: ScalapackWrapper.h:790
std::vector< double > eigenpairs_hermitian_by_index_MRRR(const std::pair< unsigned int, unsigned int > &index_limits, const bool compute_eigenvectors, ScalapackError &scalapackError)
Definition: ScalapackWrapper.t.cpp:1609
std::vector< NumberType > values
Definition: ScalapackWrapper.h:683
int row_block_size
Definition: ScalapackWrapper.h:717
void copy_transposed(const ScaLAPACKMatrix< NumberType > &B)
Definition: ScalapackWrapper.t.cpp:558
void reinit(const size_type_scalapack n_rows, const size_type_scalapack n_columns, const std::shared_ptr< const ProcessGrid > &process_grid, const size_type_scalapack row_block_size=32, const size_type_scalapack column_block_size=32, const LAPACKSupport::Property property=LAPACKSupport::Property::general)
Definition: ScalapackWrapper.t.cpp:71
void scale_columns_realfactors(const std::vector< double > &factors)
Definition: ScalapackWrapper.t.cpp:1906
void copy_to(ScaLAPACKMatrix< NumberType > &dest) const
Definition: ScalapackWrapper.t.cpp:249
const int first_process_row
Definition: ScalapackWrapper.h:765
int descriptor[9]
Definition: ScalapackWrapper.h:737
ScalapackError invert()
Definition: ScalapackWrapper.t.cpp:1109
unsigned int size_type_scalapack
Definition: ScalapackWrapper.h:48
void add(const ScaLAPACKMatrix< NumberType > &B, const NumberType a=0., const NumberType b=1., const bool transpose_B=false)
Definition: ScalapackWrapper.t.cpp:406
void set_property(const LAPACKSupport::Property property)
Definition: ScalapackWrapper.t.cpp:160
int n_rows
Definition: ScalapackWrapper.h:707
LAPACKSupport::Property property
Definition: ScalapackWrapper.h:695
void Tmmult(ScaLAPACKMatrix< NumberType > &C, const ScaLAPACKMatrix< NumberType > &B, const bool adding=false) const
Definition: ScalapackWrapper.t.cpp:924
unsigned int local_m() const
Definition: ScalapackWrapper.h:829
const int submatrix_column
Definition: ScalapackWrapper.h:783
size_type_scalapack n() const
Definition: ScalapackWrapper.h:820
std::vector< int > ipiv
Definition: ScalapackWrapper.h:753
void zmmult(ScaLAPACKMatrix< NumberType > &C, const ScaLAPACKMatrix< NumberType > &B, const bool adding=false) const
Definition: ScalapackWrapper.t.cpp:965
void zmCmult(ScaLAPACKMatrix< NumberType > &C, const ScaLAPACKMatrix< NumberType > &B, const bool adding=false) const
Definition: ScalapackWrapper.t.cpp:993
unsigned int global_row(const unsigned int loc_row) const
Definition: ScalapackWrapper.t.cpp:186
void zCmmult(ScaLAPACKMatrix< NumberType > &C, const ScaLAPACKMatrix< NumberType > &B, const bool adding=false) const
Definition: ScalapackWrapper.t.cpp:979
void mmult(ScaLAPACKMatrix< NumberType > &C, const ScaLAPACKMatrix< NumberType > &B, const bool adding=false) const
Definition: ScalapackWrapper.t.cpp:910
std::vector< double > eigenpairs_hermitian_by_index(const std::pair< unsigned int, unsigned int > &index_limits, const bool compute_eigenvectors, ScalapackError &scalapackError)
Definition: ScalapackWrapper.t.cpp:1255
ScalapackError compute_lu_factorization()
Definition: ScalapackWrapper.t.cpp:1060
std::vector< NumberType > work
Definition: ScalapackWrapper.h:742
std::vector< int > iwork
Definition: ScalapackWrapper.h:747
Property
Definition: LapackSupport.h:92
@ general
No special properties.
Definition: LapackSupport.h:94
@ hermitian
Matrix is symmetric.
Definition: LapackSupport.h:96
State
Definition: LapackSupport.h:39
dealii includes
Definition: AtomFieldDataSpherical.cpp:31
Definition: LinearAlgebraTypes.h:133