24#ifndef ScaLAPACKMatrix_h
25#define ScaLAPACKMatrix_h
34 namespace linearAlgebra
41 template <
typename NumberType>
56 const std::shared_ptr<const ProcessGrid> &process_grid,
72 const std::shared_ptr<const ProcessGrid> &process_grid,
94 const std::shared_ptr<const ProcessGrid> &process_grid,
110 const std::shared_ptr<const ProcessGrid> &process_grid,
165 const NumberType a = 0.,
166 const NumberType b = 1.,
167 const bool transpose_B =
false);
184 const NumberType a = 0.,
185 const NumberType b = 1.,
186 const bool conjugate_transpose_B =
false);
234 mult(
const NumberType b,
238 const bool transpose_A =
false,
239 const bool transpose_B =
false)
const;
263 zmult(
const NumberType b,
267 const bool conjugate_transpose_A =
false,
268 const bool conjugate_transpose_B =
false)
const;
291 const bool adding =
false)
const;
314 const bool adding =
false)
const;
337 const bool adding =
false)
const;
361 const bool adding =
false)
const;
384 const bool adding =
false)
const;
407 const bool adding =
false)
const;
431 const bool adding =
false)
const;
456 const bool adding =
false)
const;
499 local_el(
const unsigned int loc_row,
const unsigned int loc_column)
const;
505 local_el(
const unsigned int loc_row,
const unsigned int loc_column);
556 scale_rows(
const std::vector<NumberType> &factors);
596 const std::pair<unsigned int, unsigned int> &index_limits,
597 const bool compute_eigenvectors,
618 const std::pair<unsigned int, unsigned int> &index_limits,
619 const bool compute_eigenvectors,
635 const bool compute_eigenvectors,
637 const std::pair<unsigned int, unsigned int> &index_limits =
638 std::make_pair(std::numeric_limits<unsigned int>::max(),
639 std::numeric_limits<unsigned int>::max()),
640 const std::pair<double, double> &value_limits =
641 std::make_pair(std::numeric_limits<double>::quiet_NaN(),
642 std::numeric_limits<double>::quiet_NaN()));
666 const bool compute_eigenvectors,
668 const std::pair<unsigned int, unsigned int> &index_limits =
669 std::make_pair(std::numeric_limits<unsigned int>::max(),
670 std::numeric_limits<unsigned int>::max()),
671 const std::pair<double, double> &value_limits =
672 std::make_pair(std::numeric_limits<double>::quiet_NaN(),
673 std::numeric_limits<double>::quiet_NaN()));
698 std::shared_ptr<const ProcessGrid>
grid;
738 mutable std::vector<NumberType>
work;
784 template <
typename NumberType>
787 const unsigned int loc_column)
const
789 return values[loc_column * n_local_rows + loc_row];
795 template <
typename NumberType>
798 const unsigned int loc_column)
800 return values[loc_column * n_local_rows + loc_row];
805 template <
typename NumberType>
814 template <
typename NumberType>
823 template <
typename NumberType>
832 template <
typename NumberType>
836 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:710
ScalapackError compute_cholesky_factorization()
Definition: ScalapackWrapper.t.cpp:979
unsigned int global_column(const unsigned int loc_column) const
Definition: ScalapackWrapper.t.cpp:205
LAPACKSupport::State get_state() const
Definition: ScalapackWrapper.t.cpp:178
const char uplo
Definition: ScalapackWrapper.h:755
void zCmCmult(ScaLAPACKMatrix< NumberType > &C, const ScaLAPACKMatrix< NumberType > &B, const bool adding=false) const
Definition: ScalapackWrapper.t.cpp:967
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:1594
void mTmult(ScaLAPACKMatrix< NumberType > &C, const ScaLAPACKMatrix< NumberType > &B, const bool adding=false) const
Definition: ScalapackWrapper.t.cpp:898
void zadd(const ScaLAPACKMatrix< NumberType > &B, const NumberType a=0., const NumberType b=1., const bool conjugate_transpose_B=false)
Definition: ScalapackWrapper.t.cpp:470
~ScaLAPACKMatrix()=default
void TmTmult(ScaLAPACKMatrix< NumberType > &C, const ScaLAPACKMatrix< NumberType > &B, const bool adding=false) const
Definition: ScalapackWrapper.t.cpp:912
LAPACKSupport::Property get_property() const
Definition: ScalapackWrapper.t.cpp:170
int n_local_rows
Definition: ScalapackWrapper.h:723
size_type m() const
Definition: ScalapackWrapper.h:807
void copy_conjugate_transposed(const ScaLAPACKMatrix< NumberType > &B)
Definition: ScalapackWrapper.t.cpp:550
int n_columns
Definition: ScalapackWrapper.h:708
const int submatrix_row
Definition: ScalapackWrapper.h:773
void reinit(const size_type n_rows, const size_type n_columns, const std::shared_ptr< const ProcessGrid > &process_grid, const size_type row_block_size=32, const size_type column_block_size=32, const LAPACKSupport::Property property=LAPACKSupport::Property::general)
Definition: ScalapackWrapper.t.cpp:71
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:1238
void scale_rows_realfactors(const std::vector< double > &factors)
Definition: ScalapackWrapper.t.cpp:1884
LAPACKSupport::State state
Definition: ScalapackWrapper.h:685
const int first_process_column
Definition: ScalapackWrapper.h:767
std::shared_ptr< const ProcessGrid > grid
Definition: ScalapackWrapper.h:698
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:558
void conjugate()
Definition: ScalapackWrapper.t.cpp:224
void scale_rows(const std::vector< NumberType > &factors)
Definition: ScalapackWrapper.t.cpp:1845
void scale_columns(const std::vector< NumberType > &factors)
Definition: ScalapackWrapper.t.cpp:1825
int column_block_size
Definition: ScalapackWrapper.h:718
int n_local_columns
Definition: ScalapackWrapper.h:728
unsigned int local_n() const
Definition: ScalapackWrapper.h:834
NumberType local_el(const unsigned int loc_row, const unsigned int loc_column) const
Definition: ScalapackWrapper.h:786
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:1569
std::vector< NumberType > values
Definition: ScalapackWrapper.h:679
int row_block_size
Definition: ScalapackWrapper.h:713
void copy_transposed(const ScaLAPACKMatrix< NumberType > &B)
Definition: ScalapackWrapper.t.cpp:542
void scale_columns_realfactors(const std::vector< double > &factors)
Definition: ScalapackWrapper.t.cpp:1864
void copy_to(ScaLAPACKMatrix< NumberType > &dest) const
Definition: ScalapackWrapper.t.cpp:247
const int first_process_row
Definition: ScalapackWrapper.h:761
int descriptor[9]
Definition: ScalapackWrapper.h:733
ScalapackError invert()
Definition: ScalapackWrapper.t.cpp:1069
void add(const ScaLAPACKMatrix< NumberType > &B, const NumberType a=0., const NumberType b=1., const bool transpose_B=false)
Definition: ScalapackWrapper.t.cpp:402
void set_property(const LAPACKSupport::Property property)
Definition: ScalapackWrapper.t.cpp:160
int n_rows
Definition: ScalapackWrapper.h:703
LAPACKSupport::Property property
Definition: ScalapackWrapper.h:691
void Tmmult(ScaLAPACKMatrix< NumberType > &C, const ScaLAPACKMatrix< NumberType > &B, const bool adding=false) const
Definition: ScalapackWrapper.t.cpp:884
unsigned int local_m() const
Definition: ScalapackWrapper.h:825
const int submatrix_column
Definition: ScalapackWrapper.h:779
size_type n() const
Definition: ScalapackWrapper.h:816
std::vector< int > ipiv
Definition: ScalapackWrapper.h:749
void zmmult(ScaLAPACKMatrix< NumberType > &C, const ScaLAPACKMatrix< NumberType > &B, const bool adding=false) const
Definition: ScalapackWrapper.t.cpp:925
void zmCmult(ScaLAPACKMatrix< NumberType > &C, const ScaLAPACKMatrix< NumberType > &B, const bool adding=false) const
Definition: ScalapackWrapper.t.cpp:953
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:939
void mmult(ScaLAPACKMatrix< NumberType > &C, const ScaLAPACKMatrix< NumberType > &B, const bool adding=false) const
Definition: ScalapackWrapper.t.cpp:870
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:1215
ScalapackError compute_lu_factorization()
Definition: ScalapackWrapper.t.cpp:1020
std::vector< NumberType > work
Definition: ScalapackWrapper.h:738
std::vector< int > iwork
Definition: ScalapackWrapper.h:743
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
unsigned int size_type
Definition: TypeConfig.h:8
Definition: LinearAlgebraTypes.h:133