20#ifndef ScaLAPACKMatrix_H_
21#define ScaLAPACKMatrix_H_
35 template <
typename NumberType>
56 const std::shared_ptr<const dftfe::ProcessGrid> &process_grid,
73 const std::shared_ptr<const dftfe::ProcessGrid> &process_grid,
91 const std::shared_ptr<const dftfe::ProcessGrid> &process_grid,
107 const std::shared_ptr<const dftfe::ProcessGrid> &process_grid,
162 const NumberType a = 0.,
163 const NumberType b = 1.,
164 const bool transpose_B =
false);
181 const NumberType a = 0.,
182 const NumberType b = 1.,
183 const bool conjugate_transpose_B =
false);
235 const bool transpose_A =
false,
236 const bool transpose_B =
false)
const;
264 const bool conjugate_transpose_A =
false,
265 const bool conjugate_transpose_B =
false)
const;
288 const bool adding =
false)
const;
310 const bool adding =
false)
const;
332 const bool adding =
false)
const;
356 const bool adding =
false)
const;
379 const bool adding =
false)
const;
401 const bool adding =
false)
const;
424 const bool adding =
false)
const;
449 const bool adding =
false)
const;
492 local_el(
const unsigned int loc_row,
const unsigned int loc_column)
const;
498 local_el(
const unsigned int loc_row,
const unsigned int loc_column);
589 const std::pair<unsigned int, unsigned int> &index_limits,
590 const bool compute_eigenvectors);
610 const std::pair<unsigned int, unsigned int> &index_limits,
611 const bool compute_eigenvectors);
626 const bool compute_eigenvectors,
627 const std::pair<unsigned int, unsigned int> &index_limits =
628 std::make_pair(dealii::numbers::invalid_unsigned_int,
629 dealii::numbers::invalid_unsigned_int),
630 const std::pair<double, double> &value_limits =
631 std::make_pair(std::numeric_limits<double>::quiet_NaN(),
632 std::numeric_limits<double>::quiet_NaN()));
655 const bool compute_eigenvectors,
656 const std::pair<unsigned int, unsigned int> &index_limits =
657 std::make_pair(dealii::numbers::invalid_unsigned_int,
658 dealii::numbers::invalid_unsigned_int),
659 const std::pair<double, double> &value_limits =
660 std::make_pair(std::numeric_limits<double>::quiet_NaN(),
661 std::numeric_limits<double>::quiet_NaN()));
686 std::shared_ptr<const dftfe::ProcessGrid>
grid;
726 mutable std::vector<NumberType>
work;
772 mutable dealii::Threads::Mutex
mutex;
779 template <
typename NumberType>
782 const unsigned int loc_column)
const
790 template <
typename NumberType>
793 const unsigned int loc_column)
800 template <
typename NumberType>
809 template <
typename NumberType>
818 template <
typename NumberType>
827 template <
typename NumberType>
void copy_conjugate_transposed(const ScaLAPACKMatrix< NumberType > &B)
std::vector< NumberType > work
Definition scalapackWrapper.h:726
NumberType local_el(const unsigned int loc_row, const unsigned int loc_column) const
Definition scalapackWrapper.h:781
dftfe::LAPACKSupport::Property property
Definition scalapackWrapper.h:679
unsigned int local_n() const
Definition scalapackWrapper.h:829
void reinit(const size_type size, const std::shared_ptr< const dftfe::ProcessGrid > &process_grid, const size_type block_size=32, const dftfe::LAPACKSupport::Property property=dftfe::LAPACKSupport::Property::hermitian)
unsigned int global_column(const unsigned int loc_column) const
std::vector< NumberType > values
Definition scalapackWrapper.h:667
void reinit(const size_type n_rows, const size_type n_columns, const std::shared_ptr< const dftfe::ProcessGrid > &process_grid, const size_type row_block_size=32, const size_type column_block_size=32, const dftfe::LAPACKSupport::Property property=dftfe::LAPACKSupport::Property::general)
dftfe::LAPACKSupport::State get_state() const
std::vector< int > ipiv
Definition scalapackWrapper.h:737
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
std::shared_ptr< const dftfe::ProcessGrid > grid
Definition scalapackWrapper.h:686
void copy_to(ScaLAPACKMatrix< NumberType > &dest) const
void zmmult(ScaLAPACKMatrix< NumberType > &C, const ScaLAPACKMatrix< NumberType > &B, const bool adding=false) const
unsigned int local_m() const
Definition scalapackWrapper.h:820
size_type n() const
Definition scalapackWrapper.h:811
void add(const ScaLAPACKMatrix< NumberType > &B, const NumberType a=0., const NumberType b=1., const bool transpose_B=false)
int n_rows
Definition scalapackWrapper.h:691
unsigned int size_type
Definition scalapackWrapper.h:42
std::vector< double > eigenpairs_hermitian_by_index_MRRR(const std::pair< unsigned int, unsigned int > &index_limits, const bool compute_eigenvectors)
size_type m() const
Definition scalapackWrapper.h:802
void set_property(const dftfe::LAPACKSupport::Property property)
ScaLAPACKMatrix(const size_type size, const std::shared_ptr< const dftfe::ProcessGrid > &process_grid, const size_type block_size=32, const dftfe::LAPACKSupport::Property property=dftfe::LAPACKSupport::Property::hermitian)
dftfe::LAPACKSupport::Property get_property() const
void zCmmult(ScaLAPACKMatrix< NumberType > &C, const ScaLAPACKMatrix< NumberType > &B, const bool adding=false) const
int n_columns
Definition scalapackWrapper.h:696
dealii::Threads::Mutex mutex
Definition scalapackWrapper.h:772
void zadd(const ScaLAPACKMatrix< NumberType > &B, const NumberType a=0., const NumberType b=1., const bool conjugate_transpose_B=false)
int n_local_columns
Definition scalapackWrapper.h:716
void compute_cholesky_factorization()
void Tmmult(ScaLAPACKMatrix< NumberType > &C, const ScaLAPACKMatrix< NumberType > &B, const bool adding=false) const
void mTmult(ScaLAPACKMatrix< NumberType > &C, const ScaLAPACKMatrix< NumberType > &B, const bool adding=false) const
std::vector< int > iwork
Definition scalapackWrapper.h:731
void zmCmult(ScaLAPACKMatrix< NumberType > &C, const ScaLAPACKMatrix< NumberType > &B, const bool adding=false) const
ScaLAPACKMatrix(const size_type n_rows, const size_type n_columns, const std::shared_ptr< const dftfe::ProcessGrid > &process_grid, const size_type row_block_size=32, const size_type column_block_size=32, const dftfe::LAPACKSupport::Property property=dftfe::LAPACKSupport::Property::general)
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
void scale_columns_realfactors(const std::vector< double > &factors)
void compute_lu_factorization()
const int submatrix_row
Definition scalapackWrapper.h:761
void scale_rows_realfactors(const std::vector< double > &factors)
dftfe::LAPACKSupport::State state
Definition scalapackWrapper.h:673
std::vector< double > eigenpairs_hermitian_by_index(const std::pair< unsigned int, unsigned int > &index_limits, const bool compute_eigenvectors)
void scale_columns(const std::vector< NumberType > &factors)
void TmTmult(ScaLAPACKMatrix< NumberType > &C, const ScaLAPACKMatrix< NumberType > &B, const bool adding=false) const
const int submatrix_column
Definition scalapackWrapper.h:767
int column_block_size
Definition scalapackWrapper.h:706
unsigned int global_row(const unsigned int loc_row) const
std::vector< double > eigenpairs_hermitian_MRRR(const bool compute_eigenvectors, const std::pair< unsigned int, unsigned int > &index_limits=std::make_pair(dealii::numbers::invalid_unsigned_int, dealii::numbers::invalid_unsigned_int), const std::pair< double, double > &value_limits=std::make_pair(std::numeric_limits< double >::quiet_NaN(), std::numeric_limits< double >::quiet_NaN()))
void copy_transposed(const ScaLAPACKMatrix< NumberType > &B)
void mmult(ScaLAPACKMatrix< NumberType > &C, const ScaLAPACKMatrix< NumberType > &B, const bool adding=false) const
int n_local_rows
Definition scalapackWrapper.h:711
const int first_process_column
Definition scalapackWrapper.h:755
int row_block_size
Definition scalapackWrapper.h:701
int descriptor[9]
Definition scalapackWrapper.h:721
const char uplo
Definition scalapackWrapper.h:743
void zCmCmult(ScaLAPACKMatrix< NumberType > &C, const ScaLAPACKMatrix< NumberType > &B, const bool adding=false) const
const int first_process_row
Definition scalapackWrapper.h:749
void scale_rows(const std::vector< NumberType > &factors)
std::vector< double > eigenpairs_hermitian(const bool compute_eigenvectors, const std::pair< unsigned int, unsigned int > &index_limits=std::make_pair(dealii::numbers::invalid_unsigned_int, dealii::numbers::invalid_unsigned_int), const std::pair< double, double > &value_limits=std::make_pair(std::numeric_limits< double >::quiet_NaN(), std::numeric_limits< double >::quiet_NaN()))
State
Definition lapack_support.h:54
Property
Definition lapack_support.h:107
@ general
No special properties.
Definition lapack_support.h:109
@ hermitian
Matrix is symmetric.
Definition lapack_support.h:111
Definition pseudoPotentialToDftfeConverter.cc:34