28#ifndef _MATRIX_LAPACK_IMPL_HPP_
29#define _MATRIX_LAPACK_IMPL_HPP_
41inline namespace matrix {
149 size_t&
g_col)
const {
210 V.resize(n_row * n_col);
215 out <<
"Matrix: local_size= " << local_size() <<
"\n";
221 for (
size_t i = 0;
i < V.size(); ++
i) V[
i] +=
rhs[
i];
228 for (
size_t i = 0;
i < V.size(); ++
i) V[
i] -=
rhs[
i];
234 for (
size_t i = 0;
i < V.size(); ++
i) V[
i] *=
rhs;
240 for (
size_t i = 0;
i < V.size(); ++
i) V[
i] /=
rhs;
245template <
typename UnaryOperation>
247 std::transform(V.begin(), V.end(), V.begin(),
op);
257 for (
size_t i = 0;
i < local_size();
i++) {
303 fout <<
"local_size= " << local_size() <<
"\n";
304 fout <<
"local_n_row= " << n_row_ <<
"\n";
305 fout <<
"local_n_col= " << n_col_ <<
"\n";
306 fout <<
"[global_row]\n";
307 for (
size_t i = 0;
i < n_row_; ++
i) {
309 if (
i % 10 == 9)
fout <<
"\n";
312 fout <<
"[global_col]\n";
313 for (
size_t i = 0;
i < n_col_; ++
i) {
315 if (
i % 10 == 9)
fout <<
"\n";
325 const std::vector<size_t>& local_position,
328 assert(local_position.size() ==
M.local_size());
330 const C*
mat =
M.head();
333 for (
size_t i = 0;
i <
M.local_size();
i++) {
342 const std::vector<size_t>& local_position,
345 assert(local_position.size() == V.size());
347 const C*
mat = V.data();
350 for (
size_t i = 0;
i < V.size();
i++) {
359 const std::vector<size_t>& local_position,
362 assert(local_position.size() ==
M.local_size());
364 const C*
mat =
M.head();
367 for (
size_t i = 0;
i <
M.local_size();
i++) {
376 const size_t n =
A.local_size();
380 for (
size_t i = 0;
i <
n; ++
i) {
392 for (
size_t i = 0;
i <
n; ++
i) {
393 val = std::max(
val, std::abs(a[
i]));
401 if (
n == 0)
return 0.0;
402 double val = std::abs(a[0]);
403 for (
size_t i = 0;
i <
n; ++
i) {
404 val = std::min(
val, std::abs(a[
i]));
void init(size_t n_row, size_t n_col)
Definition matrix_lapack_impl.hpp:206
void print_info(std::ostream &) const
Definition matrix_lapack_impl.hpp:214
void barrier() const
Definition matrix_lapack_impl.hpp:273
std::vector< C > flatten()
Definition matrix_lapack_impl.hpp:268
size_t global_col_index(size_t lindex_col) const
Definition matrix_lapack_impl.hpp:201
void prep_local_to_global() const
Do nothing.
Definition matrix_lapack_impl.hpp:290
size_t local_size() const
Definition matrix_lapack_impl.hpp:115
size_t local_col_size() const
Definition matrix_lapack_impl.hpp:181
bool local_index(size_t g_row, size_t g_col, size_t &i) const
Definition matrix_lapack_impl.hpp:155
C allreduce_sum(C value) const
Definition matrix_lapack_impl.hpp:278
int get_comm_size() const
Always returns 1.
Definition matrix_lapack_impl.hpp:127
void bcast(D *buffer, int count, int root) const
Definition matrix_lapack_impl.hpp:284
Matrix & operator+=(const Matrix &rhs)
Definition matrix_lapack_impl.hpp:219
const Matrix transpose()
Definition matrix_lapack_impl.hpp:252
const C * head() const
Definition matrix_lapack_impl.hpp:105
void local_position(size_t g_row, size_t g_col, int &comm_rank, size_t &lindex) const
Convert a global index to an index of local storage.
Definition matrix_lapack_impl.hpp:169
Matrix & map(UnaryOperation op)
Matrix & operator/=(C rhs)
Definition matrix_lapack_impl.hpp:239
int get_comm_rank() const
Always returns 0.
Definition matrix_lapack_impl.hpp:133
Matrix & operator*=(C rhs)
Definition matrix_lapack_impl.hpp:233
int n_row() const
Definition matrix_lapack_impl.hpp:138
size_t local_row_size() const
Definition matrix_lapack_impl.hpp:176
const C & operator[](size_t i) const
Definition matrix_lapack_impl.hpp:95
int n_col() const
Definition matrix_lapack_impl.hpp:143
size_t global_row_index(size_t lindex_row) const
Definition matrix_lapack_impl.hpp:196
size_t local_row_index(size_t lindex) const
Definition matrix_lapack_impl.hpp:186
int comm_type
Definition matrix_lapack.hpp:48
void global_index(size_t i, size_t &g_row, size_t &g_col) const
Definition matrix_lapack_impl.hpp:148
Matrix()
Default constructor.
Definition matrix_lapack_impl.hpp:59
size_t local_col_index(size_t lindex) const
Definition matrix_lapack_impl.hpp:191
Matrix & operator-=(const Matrix &rhs)
Definition matrix_lapack_impl.hpp:226
void save_index(const std::string &filename) const
Definition matrix_lapack_impl.hpp:301
const comm_type & get_comm() const
Always returns 0.
Definition matrix_lapack_impl.hpp:121
void prep_global_to_local() const
Do nothing.
Definition matrix_lapack_impl.hpp:296
std::string filename(const std::string &prefix, int proc_size)
Definition common.hpp:32
std::complex< double > complex
Definition complex.hpp:38
Header file for mptensor::lapack::Matrix.
C matrix_trace(const Matrix< C > &a)
Definition matrix_lapack_impl.hpp:375
double max_abs(const Matrix< C > &a)
Definition matrix_lapack_impl.hpp:389
void replace_matrix_data(const Matrix< C > &M, const std::vector< int > &dest_rank, const std::vector< size_t > &local_position, Matrix< C > &M_new)
Definition matrix_lapack_impl.hpp:324
double min_abs(const Matrix< C > &a)
Definition matrix_lapack_impl.hpp:399
void sum_matrix_data(const Matrix< C > &M, const std::vector< int > &dest_rank, const std::vector< size_t > &local_position, Matrix< C > &M_new)
Definition matrix_lapack_impl.hpp:358
Definition complex.hpp:34