25 const int* desca = mat_l.
desc;
30 if (myid == root_proc)
32 mat_g.
p.reset(
new T[nrows * ncols]);
36 mat_g.
p.reset(
new T[nrows * ncols]);
40 mat_g.
desc.reset(
new int[9]{1, ctxt, nrows, ncols, nrows, ncols, 0, 0, nrows});
45 Cpxgemr2d(nrows, ncols, mat_l.
p, 1, 1,
const_cast<int*
>(desca), mat_g.
p.get(), 1, 1, mat_g.
desc.get(), ctxt);
51 const int* desc_local = mat_l.
desc;
52 int ctxt = desc_local[1];
53 int nrows = desc_local[2];
54 int ncols = desc_local[3];
57 if (mat_g.
row !=
static_cast<size_t>(nrows) || mat_g.
col !=
static_cast<size_t>(ncols))
59 throw std::invalid_argument(
"module_rt::distributeMatrix: Global matrix size mismatch.");
63 Cpxgemr2d(nrows, ncols, mat_g.
p.get(), 1, 1, mat_g.
desc.get(), mat_l.
p, 1, 1,
const_cast<int*
>(desc_local), ctxt);
73 const int* desc_psi = para_orb.
desc_wfc;
74 int ctxt = desc_psi[1];
75 int nrows = desc_psi[2];
76 int ncols = desc_psi[3];
78 if (myid == root_proc)
80 psi_g.
p.reset(
new T[nrows * ncols]);
84 psi_g.
p.reset(
new T[nrows * ncols]);
88 psi_g.
desc.reset(
new int[9]{1, ctxt, nrows, ncols, nrows, ncols, 0, 0, nrows});
93 Cpxgemr2d(nrows, ncols, psi_l, 1, 1,
const_cast<int*
>(desc_psi), psi_g.
p.get(), 1, 1, psi_g.
desc.get(), ctxt);
99 const int* desc_psi = para_orb.
desc_wfc;
100 int ctxt = desc_psi[1];
101 int nrows = desc_psi[2];
102 int ncols = desc_psi[3];
105 Cpxgemr2d(nrows, ncols, psi_g.
p.get(), 1, 1, psi_g.
desc.get(), psi_l, 1, 1,
const_cast<int*
>(desc_psi), ctxt);
Definition parallel_orbitals.h:9
int desc_wfc[9]
Definition parallel_orbitals.h:37
#define T
Definition exp.cpp:237
Definition band_energy.cpp:11
void distributePsi(const Parallel_Orbitals ¶_orb, T *psi_l, const module_rt::Matrix_g< T > &psi_g)
Definition gather_mat.h:97
void gatherPsi(const int myid, const int root_proc, T *psi_l, const Parallel_Orbitals ¶_orb, module_rt::Matrix_g< T > &psi_g)
Definition gather_mat.h:67
void distributeMatrix(hamilt::MatrixBlock< T > &mat_l, const module_rt::Matrix_g< T > &mat_g)
Definition gather_mat.h:49
void gatherMatrix(const int myid, const int root_proc, const hamilt::MatrixBlock< T > &mat_l, Matrix_g< T > &mat_g)
Definition gather_mat.h:23
std::enable_if< block2d_data_type< T >::value, void >::type Cpxgemr2d(int M, int N, T *A, int IA, int JA, int *DESCA, T *B, int IB, int JB, int *DESCB, int ICTXT)
Definition scalapack_connector.h:186
Definition matrixblock.h:9
T * p
Definition matrixblock.h:12
const int * desc
Definition matrixblock.h:15
Definition gather_mat.h:13
size_t col
Definition gather_mat.h:16
size_t row
Definition gather_mat.h:15
std::shared_ptr< T > p
Definition gather_mat.h:14
std::shared_ptr< int > desc
Definition gather_mat.h:17