From 77163dd5f26a7705989d5ae5eb0a043348deba6d Mon Sep 17 00:00:00 2001 From: kirk0830 Date: Wed, 28 Oct 2026 06:34:57 +0800 Subject: [PATCH 1/2] C1: add para_2d() accessor and get_blacs_ctxt() to Parallel_Orbitals Purely additive: no call site changes, inheritance still in place. para_2d() (const + non-const) returns *this while Parallel_Orbitals derives from Parallel_2D, giving the two escape hatches a const getter cannot serve (LR_Util::setup_2d_division mutation, test-side descriptor writes). get_blacs_ctxt() completes the inherited getter family, which covers the other seven public data members. --- .../source_basis/module_ao/parallel_orbitals.h | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/source/source_basis/module_ao/parallel_orbitals.h b/source/source_basis/module_ao/parallel_orbitals.h index 048c2cd9df5..dd5db6c1b29 100644 --- a/source/source_basis/module_ao/parallel_orbitals.h +++ b/source/source_basis/module_ao/parallel_orbitals.h @@ -12,6 +12,22 @@ class Parallel_Orbitals : public Parallel_2D Parallel_Orbitals(); ~Parallel_Orbitals(); + /// Access to the block-cyclic distribution information. The non-const + /// overload exists only for the two cases a const getter cannot serve: + /// non-const mutation by setup_2d_division, and test-side descriptor writes. + // DEPRECATED-ALIAS: para_2d() -> get_block_cyclic_distribution() + // DELETION-COMMIT: PR#TBD/3 commits after merge; trigger: git grep -w para_2d == 0 + Parallel_2D& para_2d() { return *this; } + + const Parallel_2D& para_2d() const { return *this; } + +#ifdef __MPI + /// BLACS context of the 2D process grid, completing the getter family + /// (get_row_size / get_col_size / get_local_size / get_block_size / + /// get_dim0 / get_dim1 / get_desc) inherited from Parallel_2D. + int get_blacs_ctxt() const { return blacs_ctxt; } +#endif + /// local size of bands, used for 2d wavefunction /// must divided on dim1 because of elpa interface int ncol_bands; From c1dc33fae882d4720ff50521be2e272ed13870f6 Mon Sep 17 00:00:00 2001 From: kirk0830 Date: Wed, 28 Oct 2026 09:35:06 +0800 Subject: [PATCH 2/2] D2(module_rt): drop Parallel_2D inheritance in Parallel_Orbitals, migrate module_rt call sites --- source/source_lcao/module_rt/band_energy.cpp | 26 ++-- source/source_lcao/module_rt/boundary_fix.cpp | 12 +- source/source_lcao/module_rt/evolve_elec.cpp | 8 +- source/source_lcao/module_rt/evolve_psi.cpp | 24 ++-- .../module_rt/force_rt_overlap.cpp | 40 +++--- .../source_lcao/module_rt/middle_hamilt.cpp | 22 ++-- source/source_lcao/module_rt/norm_psi.cpp | 42 +++--- .../source_lcao/module_rt/propagator_cn2.cpp | 86 ++++++------ .../source_lcao/module_rt/propagator_etrs.cpp | 10 +- .../module_rt/propagator_taylor.cpp | 124 +++++++++--------- .../module_rt/solve_propagation.cpp | 38 +++--- .../module_rt/test/band_energy_test.cpp | 2 +- .../module_rt/test/middle_hamilt_test.cpp | 8 +- .../module_rt/test/norm_psi_test.cpp | 30 ++--- .../module_rt/test/propagator_test1.cpp | 8 +- .../module_rt/test/propagator_test2.cpp | 18 +-- .../module_rt/test/propagator_test3.cpp | 18 +-- .../test/snap_psb_half_tddft_test.cpp | 4 +- .../module_rt/test/test_evolve_psi.cpp | 12 +- .../source_lcao/module_rt/test/upsi_test1.cpp | 6 +- .../source_lcao/module_rt/test/upsi_test2.cpp | 6 +- .../source_lcao/module_rt/test/upsi_test3.cpp | 6 +- source/source_lcao/module_rt/upsi.cpp | 10 +- 23 files changed, 280 insertions(+), 280 deletions(-) diff --git a/source/source_lcao/module_rt/band_energy.cpp b/source/source_lcao/module_rt/band_energy.cpp index 65c6ca94c9a..1aee1398110 100644 --- a/source/source_lcao/module_rt/band_energy.cpp +++ b/source/source_lcao/module_rt/band_energy.cpp @@ -25,7 +25,7 @@ void gather_eij(const Parallel_Orbitals& pv, const EijOutputInfo& output_info, std::ofstream& ofs) { - const bool is_root = pv.blacs_in_this_processor(0, 0); + const bool is_root = pv.para_2d().blacs_in_this_processor(0, 0); const size_t buffer_size = is_root ? static_cast(nband) * nband : 1; std::vector> gathered(buffer_size); int source_desc[9]; @@ -57,16 +57,16 @@ void compute_ekb(const Parallel_Orbitals* pv, std::ofstream& ofs_running, const EijOutputInfo& output_info) { - assert(pv->nloc_wfc > 0 && pv->nloc > 0); + assert(pv->nloc_wfc > 0 && pv->para_2d().get_local_size() > 0); std::complex* tmp1 = new std::complex[pv->nloc_wfc]; ModuleBase::GlobalFunc::ZEROS(tmp1, pv->nloc_wfc); - std::complex* eij = new std::complex[pv->nloc]; - ModuleBase::GlobalFunc::ZEROS(eij, pv->nloc); + std::complex* eij = new std::complex[pv->para_2d().get_local_size()]; + ModuleBase::GlobalFunc::ZEROS(eij, pv->para_2d().get_local_size()); ScalapackConnector:: - gemm('N', 'N', nlocal, nband, nlocal, 1.0, Htmp, 1, 1, pv->desc, psi_k, 1, 1, pv->desc_wfc, 0.0, tmp1, 1, 1, pv->desc_wfc); + gemm('N', 'N', nlocal, nband, nlocal, 1.0, Htmp, 1, 1, pv->para_2d().get_desc(), psi_k, 1, 1, pv->desc_wfc, 0.0, tmp1, 1, 1, pv->desc_wfc); ScalapackConnector:: gemm('C', 'N', nband, nband, nlocal, 1.0, psi_k, 1, 1, pv->desc_wfc, tmp1, 1, 1, pv->desc_wfc, 0.0, eij, 1, 1, pv->desc_Eij); @@ -83,24 +83,24 @@ void compute_ekb(const Parallel_Orbitals* pv, double* eii = new double[nband]; ModuleBase::GlobalFunc::ZEROS(eii, nband); - for (int iprow = 0; iprow < pv->dim0; ++iprow) + for (int iprow = 0; iprow < pv->para_2d().get_dim0(); ++iprow) { - for (int ipcol = 0; ipcol < pv->dim1; ++ipcol) + for (int ipcol = 0; ipcol < pv->para_2d().get_dim1(); ++ipcol) { - if (pv->blacs_in_this_processor(iprow, ipcol)) + if (pv->para_2d().blacs_in_this_processor(iprow, ipcol)) { - naroc[0] = pv->nrow; - naroc[1] = pv->ncol; + naroc[0] = pv->para_2d().get_row_size(); + naroc[1] = pv->para_2d().get_col_size(); for (int j = 0; j < naroc[1]; ++j) { - int igcol = globalIndex(j, pv->nb, pv->dim1, ipcol); + int igcol = globalIndex(j, pv->para_2d().get_block_size(), pv->para_2d().get_dim1(), ipcol); if (igcol >= nband) { continue; } for (int i = 0; i < naroc[0]; ++i) { - int igrow = globalIndex(i, pv->nb, pv->dim0, iprow); + int igrow = globalIndex(i, pv->para_2d().get_block_size(), pv->para_2d().get_dim0(), iprow); if (igrow >= nband) { continue; @@ -114,7 +114,7 @@ void compute_ekb(const Parallel_Orbitals* pv, } } // loop ipcol } // loop iprow - info = MPI_Allreduce(eii, ekb, nband, MPI_DOUBLE, MPI_SUM, pv->comm()); + info = MPI_Allreduce(eii, ekb, nband, MPI_DOUBLE, MPI_SUM, pv->para_2d().comm()); delete[] tmp1; delete[] eij; diff --git a/source/source_lcao/module_rt/boundary_fix.cpp b/source/source_lcao/module_rt/boundary_fix.cpp index 7629a7177f4..9571e0fed48 100644 --- a/source/source_lcao/module_rt/boundary_fix.cpp +++ b/source/source_lcao/module_rt/boundary_fix.cpp @@ -56,23 +56,23 @@ void boundary_shift_mat(const std::complex& phase, const std::complex phase_conj = std::conj(phase); size_t row0 = pv->atom_begin_row[iat]; size_t col0 = pv->atom_begin_col[iat]; - std::complex* p_matkc = matk + col0 * pv->get_row_size(); + std::complex* p_matkc = matk + col0 * pv->para_2d().get_row_size(); for(size_t nu = 0; nu < pv->get_ncol_atom(iat); ++nu) { - BlasConnector::scal(pv->get_row_size(), + BlasConnector::scal(pv->para_2d().get_row_size(), phase, p_matkc, 1); - p_matkc += pv->get_row_size(); + p_matkc += pv->para_2d().get_row_size(); } std::complex* p_matkr = matk + row0; for(size_t mu = 0; mu < pv->get_nrow_atom(iat); ++mu) { - BlasConnector::scal(pv->get_col_size(), + BlasConnector::scal(pv->para_2d().get_col_size(), phase_conj, p_matkr, - pv->get_row_size()); + pv->para_2d().get_row_size()); p_matkr += 1; } return; @@ -91,7 +91,7 @@ void boundary_shift_c(const std::complex& phase, BlasConnector::scal(pv->ncol_bands, phase_conj, p_ck, - pv->get_row_size()); + pv->para_2d().get_row_size()); p_ck+=1; } return; diff --git a/source/source_lcao/module_rt/evolve_elec.cpp b/source/source_lcao/module_rt/evolve_elec.cpp index 1fcaab236b6..7db045bfc19 100644 --- a/source/source_lcao/module_rt/evolve_elec.cpp +++ b/source/source_lcao/module_rt/evolve_elec.cpp @@ -59,13 +59,13 @@ void Evolve_elec::solve_psi(const std::vector& eij_output if (!use_tensor) { // Construct the local P_k matrix for moving spatial gauge, CPU only for now - std::vector> P_k_local(para_orb.nloc, {0.0, 0.0}); + std::vector> P_k_local(para_orb.para_2d().get_local_size(), {0.0, 0.0}); if (use_td_moving_gauge && td_mg != nullptr) { - td_mg->get_P_k(ucell, kvec_d[ik], P_k_local.data(), para_orb.nloc, para_orb.ncol); + td_mg->get_P_k(ucell, kvec_d[ik], P_k_local.data(), para_orb.para_2d().get_local_size(), para_orb.para_2d().get_col_size()); } - const int len_HS_laststep = use_lapack ? nlocal * nlocal : para_orb.nloc; + const int len_HS_laststep = use_lapack ? nlocal * nlocal : para_orb.para_2d().get_local_size(); evolve_psi(nband, nlocal, &(para_orb), @@ -90,7 +90,7 @@ void Evolve_elec::solve_psi(const std::vector& eij_output const int len_psi_k_1 = use_lapack ? nband : psi->get_nbands(); const int len_psi_k_2 = use_lapack ? nlocal : psi->get_nbasis(); - const int len_HS_laststep = use_lapack ? nlocal * nlocal : para_orb.nloc; + const int len_HS_laststep = use_lapack ? nlocal * nlocal : para_orb.para_2d().get_local_size(); // Create Tensor for psi_k, psi_k_laststep, H_laststep, S_laststep, ekb ct::Tensor psi_k_tensor(ct::DataType::DT_COMPLEX_DOUBLE, ct_device_type, ct::TensorShape({len_psi_k_1, len_psi_k_2})); diff --git a/source/source_lcao/module_rt/evolve_psi.cpp b/source/source_lcao/module_rt/evolve_psi.cpp index 70ad4722e46..7a894556dc1 100644 --- a/source/source_lcao/module_rt/evolve_psi.cpp +++ b/source/source_lcao/module_rt/evolve_psi.cpp @@ -44,20 +44,20 @@ void evolve_psi(const int nband, hamilt::MatrixBlock> s_mat; p_hamilt->matrix(h_mat, s_mat); - std::complex* Stmp = new std::complex[pv->nloc]; - ModuleBase::GlobalFunc::ZEROS(Stmp, pv->nloc); - BlasConnector::copy(pv->nloc, s_mat.p, 1, Stmp, 1); + std::complex* Stmp = new std::complex[pv->para_2d().get_local_size()]; + ModuleBase::GlobalFunc::ZEROS(Stmp, pv->para_2d().get_local_size()); + BlasConnector::copy(pv->para_2d().get_local_size(), s_mat.p, 1, Stmp, 1); - std::complex* Htmp = new std::complex[pv->nloc]; - ModuleBase::GlobalFunc::ZEROS(Htmp, pv->nloc); - BlasConnector::copy(pv->nloc, h_mat.p, 1, Htmp, 1); + std::complex* Htmp = new std::complex[pv->para_2d().get_local_size()]; + ModuleBase::GlobalFunc::ZEROS(Htmp, pv->para_2d().get_local_size()); + BlasConnector::copy(pv->para_2d().get_local_size(), h_mat.p, 1, Htmp, 1); - std::complex* Hold = new std::complex[pv->nloc]; - ModuleBase::GlobalFunc::ZEROS(Hold, pv->nloc); - BlasConnector::copy(pv->nloc, h_mat.p, 1, Hold, 1); + std::complex* Hold = new std::complex[pv->para_2d().get_local_size()]; + ModuleBase::GlobalFunc::ZEROS(Hold, pv->para_2d().get_local_size()); + BlasConnector::copy(pv->para_2d().get_local_size(), h_mat.p, 1, Hold, 1); - std::complex* U_operator = new std::complex[pv->nloc]; - ModuleBase::GlobalFunc::ZEROS(U_operator, pv->nloc); + std::complex* U_operator = new std::complex[pv->para_2d().get_local_size()]; + ModuleBase::GlobalFunc::ZEROS(U_operator, pv->para_2d().get_local_size()); // (1)->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> @@ -204,7 +204,7 @@ void evolve_psi_tensor(const int nband, s_src = s_mat.p; } - const int len_HS = use_lapack ? nlocal * nlocal : pv->nloc; + const int len_HS = use_lapack ? nlocal * nlocal : pv->para_2d().get_local_size(); ct::Tensor Stmp(ct::DataType::DT_COMPLEX_DOUBLE, ct_device_type, ct::TensorShape({len_HS})); diff --git a/source/source_lcao/module_rt/force_rt_overlap.cpp b/source/source_lcao/module_rt/force_rt_overlap.cpp index 4bb1918da03..f9bc9d39d8a 100644 --- a/source/source_lcao/module_rt/force_rt_overlap.cpp +++ b/source/source_lcao/module_rt/force_rt_overlap.cpp @@ -23,8 +23,8 @@ void cal_foverlap_rt(ModuleBase::matrix& foverlap, // get dS/dR_{x,y,z} std::vector*> dsxr = td_info->get_grad_overlap(); // allocate matrix - const long nloc = pv.nloc; - const int nrow = pv.nrow; + const long nloc = pv.para_2d().get_local_size(); + const int nrow = pv.para_2d().get_row_size(); std::vector> Htmp(nloc); std::vector> Sinv(nloc); std::vector> dsxk(nloc); @@ -63,7 +63,7 @@ void cal_foverlap_rt(ModuleBase::matrix& foverlap, const std::complex mone_complex = {-1.0, 0.0}; const std::complex zero_complex = {0.0, 0.0}; - ScalapackConnector::getrf(nlocal, nlocal, Sinv.data(), one_int, one_int, pv.desc, ipiv.data(), &info); + ScalapackConnector::getrf(nlocal, nlocal, Sinv.data(), one_int, one_int, pv.para_2d().get_desc(), ipiv.data(), &info); int lwork = -1; int liwork = -1; @@ -78,7 +78,7 @@ void cal_foverlap_rt(ModuleBase::matrix& foverlap, Sinv.data(), one_int, one_int, - pv.desc, + pv.para_2d().get_desc(), ipiv.data(), work.data(), &lwork, @@ -95,7 +95,7 @@ void cal_foverlap_rt(ModuleBase::matrix& foverlap, Sinv.data(), one_int, one_int, - pv.desc, + pv.para_2d().get_desc(), ipiv.data(), work.data(), &lwork, @@ -116,16 +116,16 @@ void cal_foverlap_rt(ModuleBase::matrix& foverlap, tmp_dmk, one_int, one_int, - pv.desc, + pv.para_2d().get_desc(), Htmp.data(), one_int, one_int, - pv.desc, + pv.para_2d().get_desc(), zero_complex, tmp1.data(), one_int, one_int, - pv.desc); + pv.para_2d().get_desc()); ScalapackConnector::gemm(N_char, N_char, @@ -136,16 +136,16 @@ void cal_foverlap_rt(ModuleBase::matrix& foverlap, tmp1.data(), one_int, one_int, - pv.desc, + pv.para_2d().get_desc(), Sinv.data(), one_int, one_int, - pv.desc, + pv.para_2d().get_desc(), zero_complex, tmp2.data(), one_int, one_int, - pv.desc); + pv.para_2d().get_desc()); for (int dir = 0; dir < 3; dir++) { ModuleBase::GlobalFunc::ZEROS(dsxk.data(), nloc); @@ -171,16 +171,16 @@ void cal_foverlap_rt(ModuleBase::matrix& foverlap, tmp2.data(), one_int, one_int, - pv.desc, + pv.para_2d().get_desc(), dsxk.data(), one_int, one_int, - pv.desc, + pv.para_2d().get_desc(), one_complex, tmp_out[dir].data(), one_int, one_int, - pv.desc); + pv.para_2d().get_desc()); ScalapackConnector::gemm(T_char, N_char, @@ -191,16 +191,16 @@ void cal_foverlap_rt(ModuleBase::matrix& foverlap, tmp_dmk, one_int, one_int, - pv.desc, + pv.para_2d().get_desc(), pdsxk.data(), one_int, one_int, - pv.desc, + pv.para_2d().get_desc(), one_complex, tmp3.data(), one_int, one_int, - pv.desc); + pv.para_2d().get_desc()); ScalapackConnector::geadd(N_char, nlocal, @@ -209,12 +209,12 @@ void cal_foverlap_rt(ModuleBase::matrix& foverlap, tmp3.data(), one_int, one_int, - pv.desc, + pv.para_2d().get_desc(), one_complex, tmp_out[dir].data(), one_int, one_int, - pv.desc); + pv.para_2d().get_desc()); } } // std::string filename = "process_debug_" + std::to_string(GlobalV::MY_RANK) + ".txt"; @@ -245,7 +245,7 @@ void cal_foverlap_rt(ModuleBase::matrix& foverlap, double* force_tmp1 = &foverlap(iat, 0); int row0 = pv.atom_begin_row[iat]; int col0 = pv.atom_begin_col[iat]; - const int row_size = pv.get_row_size(); + const int row_size = pv.para_2d().get_row_size(); std::vector*> p_diag = {tmp_out[0].data(), tmp_out[1].data(), tmp_out[2].data()}; for (int mu = 0; mu < pv.get_nrow_atom(iat); ++mu) { diff --git a/source/source_lcao/module_rt/middle_hamilt.cpp b/source/source_lcao/module_rt/middle_hamilt.cpp index a7b875a2702..258e958aca7 100644 --- a/source/source_lcao/module_rt/middle_hamilt.cpp +++ b/source/source_lcao/module_rt/middle_hamilt.cpp @@ -29,10 +29,10 @@ void half_Hmatrix(const Parallel_Orbitals* pv, ofs_running << std::setprecision(10); ofs_running << std::endl; ofs_running << " H(t+dt) :" << std::endl; - for (int i = 0; i < pv->nrow; i++) + for (int i = 0; i < pv->para_2d().get_row_size(); i++) { - const int in = i * pv->ncol; - for (int j = 0; j < pv->ncol; j++) + const int in = i * pv->para_2d().get_col_size(); + for (int j = 0; j < pv->para_2d().get_col_size(); j++) { ofs_running << Htmp[in + j].real() << "+" << Htmp[in + j].imag() << "i "; } @@ -41,10 +41,10 @@ void half_Hmatrix(const Parallel_Orbitals* pv, ofs_running << std::endl; ofs_running << std::endl; ofs_running << " H(t):" << std::endl; - for (int i = 0; i < pv->nrow; i++) + for (int i = 0; i < pv->para_2d().get_row_size(); i++) { - const int in = i * pv->ncol; - for (int j = 0; j < pv->ncol; j++) + const int in = i * pv->para_2d().get_col_size(); + for (int j = 0; j < pv->para_2d().get_col_size(); j++) { ofs_running << H_laststep[in + j].real() << "+" << H_laststep[in + j].imag() << "i "; } @@ -55,17 +55,17 @@ void half_Hmatrix(const Parallel_Orbitals* pv, std::complex alpha = {0.5, 0.0}; std::complex beta = {0.5, 0.0}; - ScalapackConnector::geadd('N', nlocal, nlocal, alpha, H_laststep, 1, 1, pv->desc, beta, Htmp, 1, 1, pv->desc); - ScalapackConnector::geadd('N', nlocal, nlocal, alpha, S_laststep, 1, 1, pv->desc, beta, Stmp, 1, 1, pv->desc); + ScalapackConnector::geadd('N', nlocal, nlocal, alpha, H_laststep, 1, 1, pv->para_2d().get_desc(), beta, Htmp, 1, 1, pv->para_2d().get_desc()); + ScalapackConnector::geadd('N', nlocal, nlocal, alpha, S_laststep, 1, 1, pv->para_2d().get_desc(), beta, Stmp, 1, 1, pv->para_2d().get_desc()); if (print_matrix) { ofs_running << std::endl; ofs_running << " H (t+dt/2) :" << std::endl; - for (int i = 0; i < pv->nrow; i++) + for (int i = 0; i < pv->para_2d().get_row_size(); i++) { - const int in = i * pv->ncol; - for (int j = 0; j < pv->ncol; j++) + const int in = i * pv->para_2d().get_col_size(); + for (int j = 0; j < pv->para_2d().get_col_size(); j++) { ofs_running << Htmp[in + j].real() << "+" << Htmp[in + j].imag() << "i "; } diff --git a/source/source_lcao/module_rt/norm_psi.cpp b/source/source_lcao/module_rt/norm_psi.cpp index b893eeea912..1eff4703df2 100644 --- a/source/source_lcao/module_rt/norm_psi.cpp +++ b/source/source_lcao/module_rt/norm_psi.cpp @@ -34,13 +34,13 @@ void norm_psi(const Parallel_Orbitals* pv, std::ofstream& ofs_running, const int print_matrix) { - assert(pv->nloc_wfc > 0 && pv->nloc > 0); + assert(pv->nloc_wfc > 0 && pv->para_2d().get_local_size() > 0); std::complex* tmp1 = new std::complex[pv->nloc_wfc]; ModuleBase::GlobalFunc::ZEROS(tmp1, pv->nloc_wfc); - std::complex* Cij = new std::complex[pv->nloc]; - ModuleBase::GlobalFunc::ZEROS(Cij, pv->nloc); + std::complex* Cij = new std::complex[pv->para_2d().get_local_size()]; + ModuleBase::GlobalFunc::ZEROS(Cij, pv->para_2d().get_local_size()); ScalapackConnector::gemm('N', 'N', @@ -51,7 +51,7 @@ void norm_psi(const Parallel_Orbitals* pv, Stmp, 1, 1, - pv->desc, + pv->para_2d().get_desc(), psi_k, 1, 1, @@ -85,10 +85,10 @@ void norm_psi(const Parallel_Orbitals* pv, if (print_matrix) { ofs_running << "original Cij :" << std::endl; - for (int i = 0; i < pv->ncol; i++) + for (int i = 0; i < pv->para_2d().get_col_size(); i++) { - const int in = i * pv->ncol; - for (int j = 0; j < pv->nrow; j++) + const int in = i * pv->para_2d().get_col_size(); + for (int j = 0; j < pv->para_2d().get_row_size(); j++) { double aa = Cij[in + j].real(); double bb = Cij[in + j].imag(); @@ -109,24 +109,24 @@ void norm_psi(const Parallel_Orbitals* pv, int naroc[2] = {0, 0}; // maximum number of row or column - for (int iprow = 0; iprow < pv->dim0; ++iprow) + for (int iprow = 0; iprow < pv->para_2d().get_dim0(); ++iprow) { - for (int ipcol = 0; ipcol < pv->dim1; ++ipcol) + for (int ipcol = 0; ipcol < pv->para_2d().get_dim1(); ++ipcol) { - if (pv->blacs_in_this_processor(iprow, ipcol)) + if (pv->para_2d().blacs_in_this_processor(iprow, ipcol)) { - naroc[0] = pv->nrow; - naroc[1] = pv->ncol; + naroc[0] = pv->para_2d().get_row_size(); + naroc[1] = pv->para_2d().get_col_size(); for (int j = 0; j < naroc[1]; ++j) { - int igcol = globalIndex(j, pv->nb, pv->dim1, ipcol); + int igcol = globalIndex(j, pv->para_2d().get_block_size(), pv->para_2d().get_dim1(), ipcol); if (igcol >= nband) { continue; } for (int i = 0; i < naroc[0]; ++i) { - int igrow = globalIndex(i, pv->nb, pv->dim0, iprow); + int igrow = globalIndex(i, pv->para_2d().get_block_size(), pv->para_2d().get_dim0(), iprow); if (igrow >= nband) { continue; @@ -170,10 +170,10 @@ void norm_psi(const Parallel_Orbitals* pv, if (print_matrix) { ofs_running << " Cij:" << std::endl; - for (int i = 0; i < pv->ncol; i++) + for (int i = 0; i < pv->para_2d().get_col_size(); i++) { - const int in = i * pv->ncol; - for (int j = 0; j < pv->nrow; j++) + const int in = i * pv->para_2d().get_col_size(); + for (int j = 0; j < pv->para_2d().get_row_size(); j++) { ofs_running << Cij[in + j].real() << "+" << Cij[in + j].imag() << "i "; } @@ -184,8 +184,8 @@ void norm_psi(const Parallel_Orbitals* pv, ofs_running << " psi_k:" << std::endl; for (int i = 0; i < pv->ncol_bands; i++) { - const int in = i * pv->ncol; - for (int j = 0; j < pv->ncol; j++) + const int in = i * pv->para_2d().get_col_size(); + for (int j = 0; j < pv->para_2d().get_col_size(); j++) { double aa = psi_k[in + j].real(); double bb = psi_k[in + j].imag(); @@ -205,8 +205,8 @@ void norm_psi(const Parallel_Orbitals* pv, ofs_running << " psi_k before normalization:" << std::endl; for (int i = 0; i < pv->ncol_bands; i++) { - const int in = i * pv->ncol; - for (int j = 0; j < pv->ncol; j++) + const int in = i * pv->para_2d().get_col_size(); + for (int j = 0; j < pv->para_2d().get_col_size(); j++) { double aa = tmp1[in + j].real(); double bb = tmp1[in + j].imag(); diff --git a/source/source_lcao/module_rt/propagator_cn2.cpp b/source/source_lcao/module_rt/propagator_cn2.cpp index 8563dee8e32..7aaa015d590 100644 --- a/source/source_lcao/module_rt/propagator_cn2.cpp +++ b/source/source_lcao/module_rt/propagator_cn2.cpp @@ -23,25 +23,25 @@ void Propagator::compute_propagator_cn2(const int nlocal, std::ofstream& ofs_running, const int print_matrix) const { - assert(this->ParaV->nloc > 0); + assert(this->ParaV->para_2d().get_local_size() > 0); // (1) copy Htmp to Numerator & Denominator - std::complex* Numerator = new std::complex[this->ParaV->nloc]; - ModuleBase::GlobalFunc::ZEROS(Numerator, this->ParaV->nloc); - BlasConnector::copy(this->ParaV->nloc, Htmp, 1, Numerator, 1); + std::complex* Numerator = new std::complex[this->ParaV->para_2d().get_local_size()]; + ModuleBase::GlobalFunc::ZEROS(Numerator, this->ParaV->para_2d().get_local_size()); + BlasConnector::copy(this->ParaV->para_2d().get_local_size(), Htmp, 1, Numerator, 1); - std::complex* Denominator = new std::complex[this->ParaV->nloc]; - ModuleBase::GlobalFunc::ZEROS(Denominator, this->ParaV->nloc); - BlasConnector::copy(this->ParaV->nloc, Htmp, 1, Denominator, 1); + std::complex* Denominator = new std::complex[this->ParaV->para_2d().get_local_size()]; + ModuleBase::GlobalFunc::ZEROS(Denominator, this->ParaV->para_2d().get_local_size()); + BlasConnector::copy(this->ParaV->para_2d().get_local_size(), Htmp, 1, Denominator, 1); if (print_matrix) { ofs_running << std::endl; ofs_running << " S matrix :" << std::endl; - for (int i = 0; i < this->ParaV->nrow; i++) + for (int i = 0; i < this->ParaV->para_2d().get_row_size(); i++) { - const int in = i * this->ParaV->ncol; - for (int j = 0; j < this->ParaV->ncol; j++) + const int in = i * this->ParaV->para_2d().get_col_size(); + for (int j = 0; j < this->ParaV->para_2d().get_col_size(); j++) { ofs_running << Stmp[in + j].real() << "+" << Stmp[in + j].imag() << "i "; } @@ -50,10 +50,10 @@ void Propagator::compute_propagator_cn2(const int nlocal, ofs_running << std::endl; ofs_running << std::endl; ofs_running << " H matrix :" << std::endl; - for (int i = 0; i < this->ParaV->nrow; i++) + for (int i = 0; i < this->ParaV->para_2d().get_row_size(); i++) { - const int in = i * this->ParaV->ncol; - for (int j = 0; j < this->ParaV->ncol; j++) + const int in = i * this->ParaV->para_2d().get_col_size(); + for (int j = 0; j < this->ParaV->para_2d().get_col_size(); j++) { ofs_running << Numerator[in + j].real() << "+" << Numerator[in + j].imag() << "i "; } @@ -77,12 +77,12 @@ void Propagator::compute_propagator_cn2(const int nlocal, Stmp, 1, 1, - this->ParaV->desc, + this->ParaV->para_2d().get_desc(), beta1, Numerator, 1, 1, - this->ParaV->desc); + this->ParaV->para_2d().get_desc()); ScalapackConnector::geadd('N', nlocal, nlocal, @@ -90,21 +90,21 @@ void Propagator::compute_propagator_cn2(const int nlocal, Stmp, 1, 1, - this->ParaV->desc, + this->ParaV->para_2d().get_desc(), beta2, Denominator, 1, 1, - this->ParaV->desc); + this->ParaV->para_2d().get_desc()); if (print_matrix) { ofs_running << " beta=" << beta1 << std::endl; ofs_running << " fenmu:" << std::endl; - for (int i = 0; i < this->ParaV->nrow; i++) + for (int i = 0; i < this->ParaV->para_2d().get_row_size(); i++) { - const int in = i * this->ParaV->ncol; - for (int j = 0; j < this->ParaV->ncol; j++) + const int in = i * this->ParaV->para_2d().get_col_size(); + for (int j = 0; j < this->ParaV->para_2d().get_col_size(); j++) { ofs_running << Denominator[in + j].real() << "+" << Denominator[in + j].imag() << "i "; } @@ -117,23 +117,23 @@ void Propagator::compute_propagator_cn2(const int nlocal, // (3) Next, invert Denominator // What is the size of ipiv exactly? Need to check ScaLAPACK documentation! // But anyway, not this->ParaV->nloc - int* ipiv = new int[this->ParaV->nrow + this->ParaV->nb]; - ModuleBase::GlobalFunc::ZEROS(ipiv, this->ParaV->nrow + this->ParaV->nb); + int* ipiv = new int[this->ParaV->para_2d().get_row_size() + this->ParaV->para_2d().get_block_size()]; + ModuleBase::GlobalFunc::ZEROS(ipiv, this->ParaV->para_2d().get_row_size() + this->ParaV->para_2d().get_block_size()); int info = 0; // (3.1) compute ipiv - ScalapackConnector::getrf(nlocal, nlocal, Denominator, 1, 1, this->ParaV->desc, ipiv, &info); + ScalapackConnector::getrf(nlocal, nlocal, Denominator, 1, 1, this->ParaV->para_2d().get_desc(), ipiv, &info); // Print ipiv if (print_matrix) { - ofs_running << " this->ParaV->nloc = " << this->ParaV->nloc << std::endl; - ofs_running << " this->ParaV->nrow = " << this->ParaV->nrow << std::endl; - ofs_running << " this->ParaV->ncol = " << this->ParaV->ncol << std::endl; - ofs_running << " this->ParaV->nb = " << this->ParaV->nb << std::endl; - ofs_running << " this->ParaV->get_block_size() = " << this->ParaV->get_block_size() << std::endl; + ofs_running << " this->ParaV->nloc = " << this->ParaV->para_2d().get_local_size() << std::endl; + ofs_running << " this->ParaV->nrow = " << this->ParaV->para_2d().get_row_size() << std::endl; + ofs_running << " this->ParaV->ncol = " << this->ParaV->para_2d().get_col_size() << std::endl; + ofs_running << " this->ParaV->nb = " << this->ParaV->para_2d().get_block_size() << std::endl; + ofs_running << " this->ParaV->get_block_size() = " << this->ParaV->para_2d().get_block_size() << std::endl; ofs_running << " nlocal = " << nlocal << std::endl; ofs_running << " ipiv:" << std::endl; - for (int i = 0; i < this->ParaV->nloc; i++) + for (int i = 0; i < this->ParaV->para_2d().get_local_size(); i++) { ofs_running << ipiv[i] << " "; } @@ -149,7 +149,7 @@ void Propagator::compute_propagator_cn2(const int nlocal, Denominator, 1, 1, - this->ParaV->desc, + this->ParaV->para_2d().get_desc(), ipiv, work.data(), &lwork, @@ -165,7 +165,7 @@ void Propagator::compute_propagator_cn2(const int nlocal, Denominator, 1, 1, - this->ParaV->desc, + this->ParaV->para_2d().get_desc(), ipiv, work.data(), &lwork, @@ -186,24 +186,24 @@ void Propagator::compute_propagator_cn2(const int nlocal, Denominator, 1, 1, - this->ParaV->desc, + this->ParaV->para_2d().get_desc(), Numerator, 1, 1, - this->ParaV->desc, + this->ParaV->para_2d().get_desc(), 0.0, U_operator, 1, 1, - this->ParaV->desc); + this->ParaV->para_2d().get_desc()); if (print_matrix) { ofs_running << " fenmu^-1:" << std::endl; - for (int i = 0; i < this->ParaV->nrow; i++) + for (int i = 0; i < this->ParaV->para_2d().get_row_size(); i++) { - const int in = i * this->ParaV->ncol; - for (int j = 0; j < this->ParaV->ncol; j++) + const int in = i * this->ParaV->para_2d().get_col_size(); + for (int j = 0; j < this->ParaV->para_2d().get_col_size(); j++) { ofs_running << Denominator[in + j].real() << "+" << Denominator[in + j].imag() << "i "; } @@ -211,10 +211,10 @@ void Propagator::compute_propagator_cn2(const int nlocal, } ofs_running << std::endl; ofs_running << " fenzi:" << std::endl; - for (int i = 0; i < this->ParaV->nrow; i++) + for (int i = 0; i < this->ParaV->para_2d().get_row_size(); i++) { - const int in = i * this->ParaV->ncol; - for (int j = 0; j < this->ParaV->ncol; j++) + const int in = i * this->ParaV->para_2d().get_col_size(); + for (int j = 0; j < this->ParaV->para_2d().get_col_size(); j++) { ofs_running << Numerator[in + j].real() << "+" << Numerator[in + j].imag() << "i "; } @@ -222,10 +222,10 @@ void Propagator::compute_propagator_cn2(const int nlocal, } ofs_running << std::endl; ofs_running << " U operator:" << std::endl; - for (int i = 0; i < this->ParaV->nrow; i++) + for (int i = 0; i < this->ParaV->para_2d().get_row_size(); i++) { - const int in = i * this->ParaV->ncol; - for (int j = 0; j < this->ParaV->ncol; j++) + const int in = i * this->ParaV->para_2d().get_col_size(); + for (int j = 0; j < this->ParaV->para_2d().get_col_size(); j++) { double aa = U_operator[in + j].real(); double bb = U_operator[in + j].imag(); diff --git a/source/source_lcao/module_rt/propagator_etrs.cpp b/source/source_lcao/module_rt/propagator_etrs.cpp index ef057465b6e..c55c1f14763 100644 --- a/source/source_lcao/module_rt/propagator_etrs.cpp +++ b/source/source_lcao/module_rt/propagator_etrs.cpp @@ -20,8 +20,8 @@ void Propagator::compute_propagator_etrs(const int nlocal, std::ofstream& ofs_running, const int print_matrix) const { - std::vector> U1(this->ParaV->nloc); - std::vector> U2(this->ParaV->nloc); + std::vector> U1(this->ParaV->para_2d().get_local_size()); + std::vector> U2(this->ParaV->para_2d().get_local_size()); int tag = 2; compute_propagator_taylor(nlocal, Stmp, Htmp, U1.data(), ofs_running, print_matrix, tag); compute_propagator_taylor(nlocal, Stmp, H_laststep, U2.data(), ofs_running, print_matrix, tag); @@ -34,16 +34,16 @@ void Propagator::compute_propagator_etrs(const int nlocal, U1.data(), 1, 1, - this->ParaV->desc, + this->ParaV->para_2d().get_desc(), U2.data(), 1, 1, - this->ParaV->desc, + this->ParaV->para_2d().get_desc(), 0.0, U_operator, 1, 1, - this->ParaV->desc); + this->ParaV->para_2d().get_desc()); } #endif // __MPI } // namespace module_rt diff --git a/source/source_lcao/module_rt/propagator_taylor.cpp b/source/source_lcao/module_rt/propagator_taylor.cpp index 18d11a4c07d..4a2a631e643 100644 --- a/source/source_lcao/module_rt/propagator_taylor.cpp +++ b/source/source_lcao/module_rt/propagator_taylor.cpp @@ -22,35 +22,35 @@ void Propagator::compute_propagator_taylor(const int nlocal, const int print_matrix, const int tag) const { - assert(this->ParaV->nloc > 0); + assert(this->ParaV->para_2d().get_local_size() > 0); - ModuleBase::GlobalFunc::ZEROS(U_operator, this->ParaV->nloc); - std::complex* A_matrix = new std::complex[this->ParaV->nloc]; - ModuleBase::GlobalFunc::ZEROS(A_matrix, this->ParaV->nloc); - std::complex* rank0 = new std::complex[this->ParaV->nloc]; - ModuleBase::GlobalFunc::ZEROS(rank0, this->ParaV->nloc); - std::complex* rank2 = new std::complex[this->ParaV->nloc]; - ModuleBase::GlobalFunc::ZEROS(rank2, this->ParaV->nloc); - std::complex* rank3 = new std::complex[this->ParaV->nloc]; - ModuleBase::GlobalFunc::ZEROS(rank3, this->ParaV->nloc); - std::complex* rank4 = new std::complex[this->ParaV->nloc]; - ModuleBase::GlobalFunc::ZEROS(rank4, this->ParaV->nloc); - std::complex* tmp1 = new std::complex[this->ParaV->nloc]; - ModuleBase::GlobalFunc::ZEROS(tmp1, this->ParaV->nloc); - std::complex* tmp2 = new std::complex[this->ParaV->nloc]; - ModuleBase::GlobalFunc::ZEROS(tmp2, this->ParaV->nloc); - std::complex* Sinv = new std::complex[this->ParaV->nloc]; - ModuleBase::GlobalFunc::ZEROS(Sinv, this->ParaV->nloc); - BlasConnector::copy(this->ParaV->nloc, Stmp, 1, Sinv, 1); + ModuleBase::GlobalFunc::ZEROS(U_operator, this->ParaV->para_2d().get_local_size()); + std::complex* A_matrix = new std::complex[this->ParaV->para_2d().get_local_size()]; + ModuleBase::GlobalFunc::ZEROS(A_matrix, this->ParaV->para_2d().get_local_size()); + std::complex* rank0 = new std::complex[this->ParaV->para_2d().get_local_size()]; + ModuleBase::GlobalFunc::ZEROS(rank0, this->ParaV->para_2d().get_local_size()); + std::complex* rank2 = new std::complex[this->ParaV->para_2d().get_local_size()]; + ModuleBase::GlobalFunc::ZEROS(rank2, this->ParaV->para_2d().get_local_size()); + std::complex* rank3 = new std::complex[this->ParaV->para_2d().get_local_size()]; + ModuleBase::GlobalFunc::ZEROS(rank3, this->ParaV->para_2d().get_local_size()); + std::complex* rank4 = new std::complex[this->ParaV->para_2d().get_local_size()]; + ModuleBase::GlobalFunc::ZEROS(rank4, this->ParaV->para_2d().get_local_size()); + std::complex* tmp1 = new std::complex[this->ParaV->para_2d().get_local_size()]; + ModuleBase::GlobalFunc::ZEROS(tmp1, this->ParaV->para_2d().get_local_size()); + std::complex* tmp2 = new std::complex[this->ParaV->para_2d().get_local_size()]; + ModuleBase::GlobalFunc::ZEROS(tmp2, this->ParaV->para_2d().get_local_size()); + std::complex* Sinv = new std::complex[this->ParaV->para_2d().get_local_size()]; + ModuleBase::GlobalFunc::ZEROS(Sinv, this->ParaV->para_2d().get_local_size()); + BlasConnector::copy(this->ParaV->para_2d().get_local_size(), Stmp, 1, Sinv, 1); if (print_matrix) { ofs_running << std::endl; ofs_running << " S matrix :" << std::endl; - for (int i = 0; i < this->ParaV->nrow; i++) + for (int i = 0; i < this->ParaV->para_2d().get_row_size(); i++) { - const int in = i * this->ParaV->ncol; - for (int j = 0; j < this->ParaV->ncol; j++) + const int in = i * this->ParaV->para_2d().get_col_size(); + for (int j = 0; j < this->ParaV->para_2d().get_col_size(); j++) { ofs_running << Stmp[in + j].real() << "+" << Stmp[in + j].imag() << "i "; } @@ -59,10 +59,10 @@ void Propagator::compute_propagator_taylor(const int nlocal, ofs_running << std::endl; ofs_running << std::endl; ofs_running << " H matrix :" << std::endl; - for (int i = 0; i < this->ParaV->nrow; i++) + for (int i = 0; i < this->ParaV->para_2d().get_row_size(); i++) { - const int in = i * this->ParaV->ncol; - for (int j = 0; j < this->ParaV->ncol; j++) + const int in = i * this->ParaV->para_2d().get_col_size(); + for (int j = 0; j < this->ParaV->para_2d().get_col_size(); j++) { ofs_running << Htmp[in + j].real() << "+" << Htmp[in + j].imag() << "i "; } @@ -75,24 +75,24 @@ void Propagator::compute_propagator_taylor(const int nlocal, int info = 0; int naroc[2] = {0, 0}; // maximum number of row or column - for (int iprow = 0; iprow < this->ParaV->dim0; ++iprow) + for (int iprow = 0; iprow < this->ParaV->para_2d().get_dim0(); ++iprow) { - for (int ipcol = 0; ipcol < this->ParaV->dim1; ++ipcol) + for (int ipcol = 0; ipcol < this->ParaV->para_2d().get_dim1(); ++ipcol) { - if (ParaV->blacs_in_this_processor(iprow, ipcol)) + if (ParaV->para_2d().blacs_in_this_processor(iprow, ipcol)) { - naroc[0] = this->ParaV->nrow; - naroc[1] = this->ParaV->ncol; + naroc[0] = this->ParaV->para_2d().get_row_size(); + naroc[1] = this->ParaV->para_2d().get_col_size(); for (int j = 0; j < naroc[1]; ++j) { - int igcol = globalIndex(j, this->ParaV->nb, this->ParaV->dim1, ipcol); + int igcol = globalIndex(j, this->ParaV->para_2d().get_block_size(), this->ParaV->para_2d().get_dim1(), ipcol); if (igcol >= nlocal) { continue; } for (int i = 0; i < naroc[0]; ++i) { - int igrow = globalIndex(i, this->ParaV->nb, this->ParaV->dim0, iprow); + int igrow = globalIndex(i, this->ParaV->para_2d().get_block_size(), this->ParaV->para_2d().get_dim0(), iprow); if (igrow >= nlocal) { continue; @@ -115,9 +115,9 @@ void Propagator::compute_propagator_taylor(const int nlocal, //->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> // invert Stmp - int* ipiv = new int[this->ParaV->nloc]; + int* ipiv = new int[this->ParaV->para_2d().get_local_size()]; // (3.1) compute ipiv - ScalapackConnector::getrf(nlocal, nlocal, Sinv, 1, 1, this->ParaV->desc, ipiv, &info); + ScalapackConnector::getrf(nlocal, nlocal, Sinv, 1, 1, this->ParaV->para_2d().get_desc(), ipiv, &info); int lwork = -1; int liwotk = -1; std::vector> work(1, 0); @@ -127,7 +127,7 @@ void Propagator::compute_propagator_taylor(const int nlocal, Sinv, 1, 1, - this->ParaV->desc, + this->ParaV->para_2d().get_desc(), ipiv, work.data(), &lwork, @@ -142,7 +142,7 @@ void Propagator::compute_propagator_taylor(const int nlocal, Sinv, 1, 1, - this->ParaV->desc, + this->ParaV->para_2d().get_desc(), ipiv, work.data(), &lwork, @@ -161,16 +161,16 @@ void Propagator::compute_propagator_taylor(const int nlocal, Sinv, 1, 1, - this->ParaV->desc, + this->ParaV->para_2d().get_desc(), Htmp, 1, 1, - this->ParaV->desc, + this->ParaV->para_2d().get_desc(), 0.0, U_operator, 1, 1, - this->ParaV->desc); + this->ParaV->para_2d().get_desc()); // rank2 = A^2 ; ScalapackConnector::gemm('N', @@ -182,16 +182,16 @@ void Propagator::compute_propagator_taylor(const int nlocal, U_operator, 1, 1, - this->ParaV->desc, + this->ParaV->para_2d().get_desc(), U_operator, 1, 1, - this->ParaV->desc, + this->ParaV->para_2d().get_desc(), 0.0, rank2, 1, 1, - this->ParaV->desc); + this->ParaV->para_2d().get_desc()); // rank3 = A^3 ; ScalapackConnector::gemm('N', @@ -203,16 +203,16 @@ void Propagator::compute_propagator_taylor(const int nlocal, U_operator, 1, 1, - this->ParaV->desc, + this->ParaV->para_2d().get_desc(), rank2, 1, 1, - this->ParaV->desc, + this->ParaV->para_2d().get_desc(), 0.0, rank3, 1, 1, - this->ParaV->desc); + this->ParaV->para_2d().get_desc()); // rank4 = A^4 ; ScalapackConnector::gemm('N', @@ -224,16 +224,16 @@ void Propagator::compute_propagator_taylor(const int nlocal, U_operator, 1, 1, - this->ParaV->desc, + this->ParaV->para_2d().get_desc(), rank3, 1, 1, - this->ParaV->desc, + this->ParaV->para_2d().get_desc(), 0.0, rank4, 1, 1, - this->ParaV->desc); + this->ParaV->para_2d().get_desc()); std::complex p1 = {1.0, 0.0}; std::complex p2 = {1.0 / 2.0, 0.0}; @@ -247,12 +247,12 @@ void Propagator::compute_propagator_taylor(const int nlocal, rank0, 1, 1, - this->ParaV->desc, + this->ParaV->para_2d().get_desc(), p1, U_operator, 1, 1, - this->ParaV->desc); + this->ParaV->para_2d().get_desc()); ScalapackConnector::geadd('N', nlocal, @@ -261,12 +261,12 @@ void Propagator::compute_propagator_taylor(const int nlocal, rank2, 1, 1, - this->ParaV->desc, + this->ParaV->para_2d().get_desc(), p1, U_operator, 1, 1, - this->ParaV->desc); + this->ParaV->para_2d().get_desc()); ScalapackConnector::geadd('N', nlocal, @@ -275,12 +275,12 @@ void Propagator::compute_propagator_taylor(const int nlocal, rank3, 1, 1, - this->ParaV->desc, + this->ParaV->para_2d().get_desc(), p1, U_operator, 1, 1, - this->ParaV->desc); + this->ParaV->para_2d().get_desc()); ScalapackConnector::geadd('N', nlocal, @@ -289,20 +289,20 @@ void Propagator::compute_propagator_taylor(const int nlocal, rank4, 1, 1, - this->ParaV->desc, + this->ParaV->para_2d().get_desc(), p1, U_operator, 1, 1, - this->ParaV->desc); + this->ParaV->para_2d().get_desc()); if (print_matrix) { ofs_running << " A_matrix:" << std::endl; - for (int i = 0; i < this->ParaV->nrow; i++) + for (int i = 0; i < this->ParaV->para_2d().get_row_size(); i++) { - const int in = i * this->ParaV->ncol; - for (int j = 0; j < this->ParaV->ncol; j++) + const int in = i * this->ParaV->para_2d().get_col_size(); + for (int j = 0; j < this->ParaV->para_2d().get_col_size(); j++) { ofs_running << A_matrix[in + j].real() << "+" << A_matrix[in + j].imag() << "i "; } @@ -310,10 +310,10 @@ void Propagator::compute_propagator_taylor(const int nlocal, } ofs_running << std::endl; ofs_running << " U operator:" << std::endl; - for (int i = 0; i < this->ParaV->nrow; i++) + for (int i = 0; i < this->ParaV->para_2d().get_row_size(); i++) { - const int in = i * this->ParaV->ncol; - for (int j = 0; j < this->ParaV->ncol; j++) + const int in = i * this->ParaV->para_2d().get_col_size(); + for (int j = 0; j < this->ParaV->para_2d().get_col_size(); j++) { double aa = U_operator[in + j].real(); double bb = U_operator[in + j].imag(); diff --git a/source/source_lcao/module_rt/solve_propagation.cpp b/source/source_lcao/module_rt/solve_propagation.cpp index ed29f36490c..3623b540ce6 100644 --- a/source/source_lcao/module_rt/solve_propagation.cpp +++ b/source/source_lcao/module_rt/solve_propagation.cpp @@ -20,13 +20,13 @@ void solve_propagation(const Parallel_Orbitals* pv, std::complex* psi_k) { // (1) init A,B and copy Htmp to A & B - std::complex* operator_A = new std::complex[pv->nloc]; - ModuleBase::GlobalFunc::ZEROS(operator_A, pv->nloc); - BlasConnector::copy(pv->nloc, Htmp, 1, operator_A, 1); + std::complex* operator_A = new std::complex[pv->para_2d().get_local_size()]; + ModuleBase::GlobalFunc::ZEROS(operator_A, pv->para_2d().get_local_size()); + BlasConnector::copy(pv->para_2d().get_local_size(), Htmp, 1, operator_A, 1); - std::complex* operator_B = new std::complex[pv->nloc]; - ModuleBase::GlobalFunc::ZEROS(operator_B, pv->nloc); - BlasConnector::copy(pv->nloc, Htmp, 1, operator_B, 1); + std::complex* operator_B = new std::complex[pv->para_2d().get_local_size()]; + ModuleBase::GlobalFunc::ZEROS(operator_B, pv->para_2d().get_local_size()); + BlasConnector::copy(pv->para_2d().get_local_size(), Htmp, 1, operator_B, 1); const double dt_au = dt / ModuleBase::AU_to_FS; @@ -38,8 +38,8 @@ void solve_propagation(const Parallel_Orbitals* pv, std::complex beta1 = {0.0, -0.25 * dt_au}; std::complex beta2 = {0.0, 0.25 * dt_au}; - ScalapackConnector::geadd('N', nlocal, nlocal, alpha, Stmp, 1, 1, pv->desc, beta2, operator_A, 1, 1, pv->desc); - ScalapackConnector::geadd('N', nlocal, nlocal, alpha, Stmp, 1, 1, pv->desc, beta1, operator_B, 1, 1, pv->desc); + ScalapackConnector::geadd('N', nlocal, nlocal, alpha, Stmp, 1, 1, pv->para_2d().get_desc(), beta2, operator_A, 1, 1, pv->para_2d().get_desc()); + ScalapackConnector::geadd('N', nlocal, nlocal, alpha, Stmp, 1, 1, pv->para_2d().get_desc(), beta1, operator_B, 1, 1, pv->para_2d().get_desc()); // ->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> // (3) b = operator_B @ psi_k_laststep std::complex* tmp_b = new std::complex[pv->nloc_wfc]; @@ -52,7 +52,7 @@ void solve_propagation(const Parallel_Orbitals* pv, operator_B, 1, 1, - pv->desc, + pv->para_2d().get_desc(), psi_k_laststep, 1, 1, @@ -63,10 +63,10 @@ void solve_propagation(const Parallel_Orbitals* pv, 1, pv->desc_wfc); //get ipiv - int* ipiv = new int[pv->nloc]; + int* ipiv = new int[pv->para_2d().get_local_size()]; int info = 0; // (4) solve Ac=b - ScalapackConnector::gesv(nlocal, nband, operator_A, 1, 1, pv->desc, ipiv, tmp_b, 1, 1, pv->desc_wfc, &info); + ScalapackConnector::gesv(nlocal, nband, operator_A, 1, 1, pv->para_2d().get_desc(), ipiv, tmp_b, 1, 1, pv->desc_wfc, &info); // copy solution to psi_k BlasConnector::copy(pv->nloc_wfc, tmp_b, 1, psi_k, 1); @@ -90,11 +90,11 @@ void solve_propagation(const Parallel_Orbitals* pv, // Print message for debugging, should be removed later std::cout << "Entering solve_propagation with moving gauge P_k..." << std::endl; // (1) init A, B and compute HPtmp = Htmp + P_k - std::complex* operator_A = new std::complex[pv->nloc]; - std::complex* operator_B = new std::complex[pv->nloc]; + std::complex* operator_A = new std::complex[pv->para_2d().get_local_size()]; + std::complex* operator_B = new std::complex[pv->para_2d().get_local_size()]; // Add up Htmp and P_k to get the effective Hamiltonian matrix for moving spatial gauge - for (int i = 0; i < pv->nloc; ++i) + for (int i = 0; i < pv->para_2d().get_local_size(); ++i) { operator_A[i] = Htmp[i] + P_k[i]; operator_B[i] = Htmp[i] + P_k[i]; @@ -110,8 +110,8 @@ void solve_propagation(const Parallel_Orbitals* pv, std::complex beta1 = {0.0, -0.25 * dt_au}; std::complex beta2 = {0.0, 0.25 * dt_au}; - ScalapackConnector::geadd('N', nlocal, nlocal, alpha, Stmp, 1, 1, pv->desc, beta2, operator_A, 1, 1, pv->desc); - ScalapackConnector::geadd('N', nlocal, nlocal, alpha, Stmp, 1, 1, pv->desc, beta1, operator_B, 1, 1, pv->desc); + ScalapackConnector::geadd('N', nlocal, nlocal, alpha, Stmp, 1, 1, pv->para_2d().get_desc(), beta2, operator_A, 1, 1, pv->para_2d().get_desc()); + ScalapackConnector::geadd('N', nlocal, nlocal, alpha, Stmp, 1, 1, pv->para_2d().get_desc(), beta1, operator_B, 1, 1, pv->para_2d().get_desc()); // ->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> // (3) b = operator_B @ psi_k_laststep @@ -125,7 +125,7 @@ void solve_propagation(const Parallel_Orbitals* pv, operator_B, 1, 1, - pv->desc, + pv->para_2d().get_desc(), psi_k_laststep, 1, 1, @@ -137,11 +137,11 @@ void solve_propagation(const Parallel_Orbitals* pv, pv->desc_wfc); // get ipiv - int* ipiv = new int[pv->nloc]; + int* ipiv = new int[pv->para_2d().get_local_size()]; int info = 0; // (4) solve Ac=b - ScalapackConnector::gesv(nlocal, nband, operator_A, 1, 1, pv->desc, ipiv, tmp_b, 1, 1, pv->desc_wfc, &info); + ScalapackConnector::gesv(nlocal, nband, operator_A, 1, 1, pv->para_2d().get_desc(), ipiv, tmp_b, 1, 1, pv->desc_wfc, &info); //copy solution to psi_k BlasConnector::copy(pv->nloc_wfc, tmp_b, 1, psi_k, 1); diff --git a/source/source_lcao/module_rt/test/band_energy_test.cpp b/source/source_lcao/module_rt/test/band_energy_test.cpp index 722e1d5c34c..99d891e1b5b 100644 --- a/source/source_lcao/module_rt/test/band_energy_test.cpp +++ b/source/source_lcao/module_rt/test/band_energy_test.cpp @@ -27,7 +27,7 @@ class BandEnergyTest : public testing::Test // Reuse the existing test executable's 1x1 BLACS grid. ASSERT_EQ(nprow, 1); ASSERT_EQ(npcol, 1); - ASSERT_EQ(pv.set(nlocal, nlocal, 1, ictxt), 0); + ASSERT_EQ(pv.para_2d().set(nlocal, nlocal, 1, ictxt), 0); pv.ncol_bands = nband; pv.nrow_bands = nband; pv.nloc_wfc = nlocal * nband; diff --git a/source/source_lcao/module_rt/test/middle_hamilt_test.cpp b/source/source_lcao/module_rt/test/middle_hamilt_test.cpp index fcfcfbc3ab9..e7f240c6adf 100644 --- a/source/source_lcao/module_rt/test/middle_hamilt_test.cpp +++ b/source/source_lcao/module_rt/test/middle_hamilt_test.cpp @@ -37,15 +37,15 @@ TEST(MiddleHamiltTest, testMiddleHamilt) bool print_matrix = false; Parallel_Orbitals* pv; pv = new Parallel_Orbitals(); - pv->nloc = nlocal * nlocal; - pv->ncol = nlocal; - pv->nrow = nlocal; + pv->para_2d().nloc = nlocal * nlocal; + pv->para_2d().ncol = nlocal; + pv->para_2d().nrow = nlocal; // Initialize input matrices int info; int mb = 1, nb = 1, lda = nlocal, ldc = nlocal; int irsrc = 0, icsrc = 0, lld = numroc_(&nlocal, &mb, &myprow, &irsrc, &nprow); - descinit_(pv->desc, &nlocal, &nlocal, &mb, &nb, &irsrc, &icsrc, &ictxt, &lld, &info); + descinit_(pv->para_2d().desc, &nlocal, &nlocal, &mb, &nb, &irsrc, &icsrc, &ictxt, &lld, &info); // Initialize data Htmp = new std::complex[nlocal * nlocal]; diff --git a/source/source_lcao/module_rt/test/norm_psi_test.cpp b/source/source_lcao/module_rt/test/norm_psi_test.cpp index 10c8701dc5c..5af72e04cb4 100644 --- a/source/source_lcao/module_rt/test/norm_psi_test.cpp +++ b/source/source_lcao/module_rt/test/norm_psi_test.cpp @@ -35,16 +35,16 @@ TEST(NormPsiTest, testNormPsi) bool print_matrix = false; Parallel_Orbitals* pv; pv = new Parallel_Orbitals(); - pv->nloc = nlocal * nlocal; + pv->para_2d().nloc = nlocal * nlocal; pv->nloc_wfc = nlocal * nband; - pv->ncol = nlocal; - pv->nrow = nlocal; + pv->para_2d().ncol = nlocal; + pv->para_2d().nrow = nlocal; pv->ncol_bands = nband; - pv->dim0 = 1; - pv->dim1 = 1; - pv->nb = 1; - pv->blacs_ctxt = 0; - pv->set_coord(0, 0); + pv->para_2d().dim0 = 1; + pv->para_2d().dim1 = 1; + pv->para_2d().nb = 1; + pv->para_2d().blacs_ctxt = 0; + pv->para_2d().set_coord(0, 0); int dim[2]; dim[0] = nprow; @@ -55,7 +55,7 @@ TEST(NormPsiTest, testNormPsi) int mb = 1, nb = 1, lda = nband, ldc = nlocal; int irsrc = 0, icsrc = 0, lld = numroc_(&nlocal, &mb, &myprow, &irsrc, &nprow), lld1 = numroc_(&nband, &mb, &myprow, &irsrc, &nprow); - descinit_(pv->desc, &nlocal, &nlocal, &mb, &nb, &irsrc, &icsrc, &ictxt, &lld, &info); + descinit_(pv->para_2d().desc, &nlocal, &nlocal, &mb, &nb, &irsrc, &icsrc, &ictxt, &lld, &info); descinit_(pv->desc_wfc, &nlocal, &nband, &mb, &nb, &irsrc, &icsrc, &ictxt, &lld, &info); descinit_(pv->desc_Eij, &nband, &nband, &mb, &nb, &irsrc, &icsrc, &ictxt, &lld, &info); @@ -131,16 +131,16 @@ TEST(NormPsiTest, EndpointMetricDiffersFromPropagationMetric) const int nband = 1; const int block = 1; const int zero = 0; - pv.nloc = 4; + pv.para_2d().nloc = 4; pv.nloc_wfc = 2; - pv.nrow = pv.ncol = 2; + pv.para_2d().nrow = pv.para_2d().ncol = 2; pv.ncol_bands = 1; - pv.dim0 = pv.dim1 = pv.nb = 1; - pv.blacs_ctxt = ictxt; - pv.set_coord(0, 0); + pv.para_2d().dim0 = pv.para_2d().dim1 = pv.para_2d().nb = 1; + pv.para_2d().blacs_ctxt = ictxt; + pv.para_2d().set_coord(0, 0); int info = 0; int lld = 2; - descinit_(pv.desc, &nlocal, &nlocal, &block, &block, &zero, &zero, &ictxt, &lld, &info); + descinit_(pv.para_2d().desc, &nlocal, &nlocal, &block, &block, &zero, &zero, &ictxt, &lld, &info); ASSERT_EQ(info, 0); descinit_(pv.desc_wfc, &nlocal, &nband, &block, &block, &zero, &zero, &ictxt, &lld, &info); ASSERT_EQ(info, 0); diff --git a/source/source_lcao/module_rt/test/propagator_test1.cpp b/source/source_lcao/module_rt/test/propagator_test1.cpp index 0908535ceb2..ea9d3b37039 100644 --- a/source/source_lcao/module_rt/test/propagator_test1.cpp +++ b/source/source_lcao/module_rt/test/propagator_test1.cpp @@ -33,16 +33,16 @@ TEST(PropagatorTest, testPropagatorCN) bool print_matrix = false; Parallel_Orbitals* pv; pv = new Parallel_Orbitals(); - pv->nloc = nlocal * nlocal; - pv->ncol = nlocal; - pv->set_coord(0, 0); + pv->para_2d().nloc = nlocal * nlocal; + pv->para_2d().ncol = nlocal; + pv->para_2d().set_coord(0, 0); const double md_dt = 4 * ModuleBase::AU_to_FS; // Initialize input matrices int info; int mb = 1, nb = 1, lda = nlocal, ldc = nlocal; int irsrc = 0, icsrc = 0, lld = numroc_(&nlocal, &mb, &myprow, &irsrc, &nprow); - descinit_(pv->desc, &nlocal, &nlocal, &mb, &nb, &irsrc, &icsrc, &ictxt, &lld, &info); + descinit_(pv->para_2d().desc, &nlocal, &nlocal, &mb, &nb, &irsrc, &icsrc, &ictxt, &lld, &info); // Initialize data U_operator = new std::complex[nlocal * nlocal]; diff --git a/source/source_lcao/module_rt/test/propagator_test2.cpp b/source/source_lcao/module_rt/test/propagator_test2.cpp index 283ac9035a9..78035faba1a 100644 --- a/source/source_lcao/module_rt/test/propagator_test2.cpp +++ b/source/source_lcao/module_rt/test/propagator_test2.cpp @@ -28,14 +28,14 @@ TEST(PropagatorTest, testPropagatorTaylor) bool print_matrix = false; Parallel_Orbitals* pv; pv = new Parallel_Orbitals(); - pv->nloc = nlocal * nlocal; - pv->ncol = nlocal; - pv->nrow = nlocal; - pv->dim0 = 1; - pv->dim1 = 1; - pv->nb = 1; - pv->blacs_ctxt = 0; - pv->set_coord(0, 0); + pv->para_2d().nloc = nlocal * nlocal; + pv->para_2d().ncol = nlocal; + pv->para_2d().nrow = nlocal; + pv->para_2d().dim0 = 1; + pv->para_2d().dim1 = 1; + pv->para_2d().nb = 1; + pv->para_2d().blacs_ctxt = 0; + pv->para_2d().set_coord(0, 0); int dim[2]; dim[0] = nprow; @@ -47,7 +47,7 @@ TEST(PropagatorTest, testPropagatorTaylor) int info; int mb = 1, nb = 1, lda = nlocal, ldc = nlocal; int irsrc = 0, icsrc = 0, lld = numroc_(&nlocal, &mb, &myprow, &irsrc, &nprow); - descinit_(pv->desc, &nlocal, &nlocal, &mb, &nb, &irsrc, &icsrc, &ictxt, &lld, &info); + descinit_(pv->para_2d().desc, &nlocal, &nlocal, &mb, &nb, &irsrc, &icsrc, &ictxt, &lld, &info); // Initialize data U_operator = new std::complex[nlocal * nlocal]; diff --git a/source/source_lcao/module_rt/test/propagator_test3.cpp b/source/source_lcao/module_rt/test/propagator_test3.cpp index c96569e762e..1bb00cdd197 100644 --- a/source/source_lcao/module_rt/test/propagator_test3.cpp +++ b/source/source_lcao/module_rt/test/propagator_test3.cpp @@ -29,14 +29,14 @@ TEST(PropagatorTest, testPropagatorETRS) bool print_matrix = false; Parallel_Orbitals* pv; pv = new Parallel_Orbitals(); - pv->nloc = nlocal * nlocal; - pv->ncol = nlocal; - pv->nrow = nlocal; - pv->dim0 = 1; - pv->dim1 = 1; - pv->nb = 1; - pv->blacs_ctxt = 0; - pv->set_coord(0, 0); + pv->para_2d().nloc = nlocal * nlocal; + pv->para_2d().ncol = nlocal; + pv->para_2d().nrow = nlocal; + pv->para_2d().dim0 = 1; + pv->para_2d().dim1 = 1; + pv->para_2d().nb = 1; + pv->para_2d().blacs_ctxt = 0; + pv->para_2d().set_coord(0, 0); int dim[2]; dim[0] = nprow; @@ -48,7 +48,7 @@ TEST(PropagatorTest, testPropagatorETRS) int info; int mb = 1, nb = 1, lda = nlocal, ldc = nlocal; int irsrc = 0, icsrc = 0, lld = numroc_(&nlocal, &mb, &myprow, &irsrc, &nprow); - descinit_(pv->desc, &nlocal, &nlocal, &mb, &nb, &irsrc, &icsrc, &ictxt, &lld, &info); + descinit_(pv->para_2d().desc, &nlocal, &nlocal, &mb, &nb, &irsrc, &icsrc, &ictxt, &lld, &info); // Initialize data U_operator = new std::complex[nlocal * nlocal]; diff --git a/source/source_lcao/module_rt/test/snap_psb_half_tddft_test.cpp b/source/source_lcao/module_rt/test/snap_psb_half_tddft_test.cpp index 7e1ba6edd29..9254eba1316 100644 --- a/source/source_lcao/module_rt/test/snap_psb_half_tddft_test.cpp +++ b/source/source_lcao/module_rt/test/snap_psb_half_tddft_test.cpp @@ -314,7 +314,7 @@ class SnapPsibetaHalfTddftTest : public ::testing::Test atom.set_index(); ucell.itia2iat(0, 0) = 0; ucell.set_iat2iwt(1); - pv.set_serial(atom.nw, atom.nw); + pv.para_2d().set_serial(atom.nw, atom.nw); pv.set_atomic_trace(ucell.get_iat2iwt(), ucell.nat, atom.nw); Pseudopot_upf pseudo_reader; @@ -405,7 +405,7 @@ class SnapPsibetaNonuniformHalfTddftTest : public ::testing::Test atom.set_index(); ucell.itia2iat(0, 0) = 0; ucell.set_iat2iwt(1); - pv.set_serial(atom.nw, atom.nw); + pv.para_2d().set_serial(atom.nw, atom.nw); pv.set_atomic_trace(ucell.get_iat2iwt(), ucell.nat, atom.nw); Pseudopot_upf pseudo_reader; diff --git a/source/source_lcao/module_rt/test/test_evolve_psi.cpp b/source/source_lcao/module_rt/test/test_evolve_psi.cpp index 41afa734cb4..85b2f8f12f8 100644 --- a/source/source_lcao/module_rt/test/test_evolve_psi.cpp +++ b/source/source_lcao/module_rt/test/test_evolve_psi.cpp @@ -46,14 +46,14 @@ class EvolvePsiTest : public testing::Test const int zero = 0; const int lld = 2; int info = 0; - pv.nloc = 4; + pv.para_2d().nloc = 4; pv.nloc_wfc = 2; - pv.nrow = pv.ncol = 2; + pv.para_2d().nrow = pv.para_2d().ncol = 2; pv.nrow_bands = pv.ncol_bands = 1; - pv.dim0 = pv.dim1 = pv.nb = 1; - pv.blacs_ctxt = ictxt; - pv.set_coord(0, 0); - descinit_(pv.desc, &nlocal, &nlocal, &block, &block, &zero, &zero, &ictxt, &lld, &info); + pv.para_2d().dim0 = pv.para_2d().dim1 = pv.para_2d().nb = 1; + pv.para_2d().blacs_ctxt = ictxt; + pv.para_2d().set_coord(0, 0); + descinit_(pv.para_2d().desc, &nlocal, &nlocal, &block, &block, &zero, &zero, &ictxt, &lld, &info); ASSERT_EQ(info, 0); descinit_(pv.desc_wfc, &nlocal, &nband, &block, &block, &zero, &zero, &ictxt, &lld, &info); ASSERT_EQ(info, 0); diff --git a/source/source_lcao/module_rt/test/upsi_test1.cpp b/source/source_lcao/module_rt/test/upsi_test1.cpp index 444196d8b61..a1e42720d0f 100644 --- a/source/source_lcao/module_rt/test/upsi_test1.cpp +++ b/source/source_lcao/module_rt/test/upsi_test1.cpp @@ -35,15 +35,15 @@ TEST(UpsiTest, testUpsi1) bool print_matrix = false; Parallel_Orbitals* pv; pv = new Parallel_Orbitals(); - pv->nloc = nlocal * nband; - pv->ncol = nlocal; + pv->para_2d().nloc = nlocal * nband; + pv->para_2d().ncol = nlocal; pv->ncol_bands = nband; // Initialize input matrices int info; int mb = 1, nb = 1, lda = nband, ldc = nlocal; int irsrc = 0, icsrc = 0, lld = numroc_(&nlocal, &mb, &myprow, &irsrc, &nprow); - descinit_(pv->desc, &nlocal, &nlocal, &mb, &nb, &irsrc, &icsrc, &ictxt, &lld, &info); + descinit_(pv->para_2d().desc, &nlocal, &nlocal, &mb, &nb, &irsrc, &icsrc, &ictxt, &lld, &info); descinit_(pv->desc_wfc, &nlocal, &nband, &mb, &nb, &irsrc, &icsrc, &ictxt, &lld, &info); // Initialize data diff --git a/source/source_lcao/module_rt/test/upsi_test2.cpp b/source/source_lcao/module_rt/test/upsi_test2.cpp index 716e7aa7712..6aba9678858 100644 --- a/source/source_lcao/module_rt/test/upsi_test2.cpp +++ b/source/source_lcao/module_rt/test/upsi_test2.cpp @@ -29,15 +29,15 @@ TEST(UpsiTest, testUpsi2) bool print_matrix = false; Parallel_Orbitals* pv; pv = new Parallel_Orbitals(); - pv->nloc = nlocal * nband; - pv->ncol = nlocal; + pv->para_2d().nloc = nlocal * nband; + pv->para_2d().ncol = nlocal; pv->ncol_bands = nband; // Initialize input matrices int info; int mb = 1, nb = 1, lda = nband, ldc = nlocal; int irsrc = 0, icsrc = 0, lld = numroc_(&nlocal, &mb, &myprow, &irsrc, &nprow); - descinit_(pv->desc, &nlocal, &nlocal, &mb, &nb, &irsrc, &icsrc, &ictxt, &lld, &info); + descinit_(pv->para_2d().desc, &nlocal, &nlocal, &mb, &nb, &irsrc, &icsrc, &ictxt, &lld, &info); descinit_(pv->desc_wfc, &nlocal, &nband, &mb, &nb, &irsrc, &icsrc, &ictxt, &lld, &info); // Initialize data diff --git a/source/source_lcao/module_rt/test/upsi_test3.cpp b/source/source_lcao/module_rt/test/upsi_test3.cpp index 9a2621a0db1..ce6d14c3842 100644 --- a/source/source_lcao/module_rt/test/upsi_test3.cpp +++ b/source/source_lcao/module_rt/test/upsi_test3.cpp @@ -29,15 +29,15 @@ TEST(UpsiTest, testUpsi3) bool print_matrix = false; Parallel_Orbitals* pv; pv = new Parallel_Orbitals(); - pv->nloc = nlocal * nband; - pv->ncol = nlocal; + pv->para_2d().nloc = nlocal * nband; + pv->para_2d().ncol = nlocal; pv->ncol_bands = nband; // Initialize input matrices int info; int mb = 1, nb = 1, lda = nband, ldc = nlocal; int irsrc = 0, icsrc = 0, lld = numroc_(&nlocal, &mb, &myprow, &irsrc, &nprow); - descinit_(pv->desc, &nlocal, &nlocal, &mb, &nb, &irsrc, &icsrc, &ictxt, &lld, &info); + descinit_(pv->para_2d().desc, &nlocal, &nlocal, &mb, &nb, &irsrc, &icsrc, &ictxt, &lld, &info); descinit_(pv->desc_wfc, &nlocal, &nband, &mb, &nb, &irsrc, &icsrc, &ictxt, &lld, &info); // Initialize data diff --git a/source/source_lcao/module_rt/upsi.cpp b/source/source_lcao/module_rt/upsi.cpp index e0f1b38d75f..050d2286576 100644 --- a/source/source_lcao/module_rt/upsi.cpp +++ b/source/source_lcao/module_rt/upsi.cpp @@ -29,7 +29,7 @@ void upsi(const Parallel_Orbitals* pv, U_operator, 1, 1, - pv->desc, + pv->para_2d().get_desc(), psi_k_laststep, 1, 1, @@ -46,8 +46,8 @@ void upsi(const Parallel_Orbitals* pv, ofs_running << " psi_k:" << std::endl; for (int i = 0; i < pv->ncol_bands; i++) { - const int in = i * pv->ncol; - for (int j = 0; j < pv->ncol; j++) + const int in = i * pv->para_2d().get_col_size(); + for (int j = 0; j < pv->para_2d().get_col_size(); j++) { double aa = psi_k[in + j].real(); double bb = psi_k[in + j].imag(); @@ -67,8 +67,8 @@ void upsi(const Parallel_Orbitals* pv, ofs_running << " psi_k_laststep:" << std::endl; for (int i = 0; i < pv->ncol_bands; i++) { - const int in = i * pv->ncol; - for (int j = 0; j < pv->ncol; j++) + const int in = i * pv->para_2d().get_col_size(); + for (int j = 0; j < pv->para_2d().get_col_size(); j++) { double aa = psi_k_laststep[in + j].real(); double bb = psi_k_laststep[in + j].imag();