From 53728098ea4fd8e8c96bb55b62e36d1398acb2ff Mon Sep 17 00:00:00 2001 From: abacus_fixer Date: Wed, 17 Jun 2026 11:01:55 +0800 Subject: [PATCH 01/15] add getter function in parallel_2d.h --- source/source_base/parallel_2d.h | 37 ++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/source/source_base/parallel_2d.h b/source/source_base/parallel_2d.h index c179dd18e79..743db79eae7 100644 --- a/source/source_base/parallel_2d.h +++ b/source/source_base/parallel_2d.h @@ -74,7 +74,44 @@ class Parallel_2D return nb; }; + /// number of processes in row dimension of the MPI Cartesian grid + int get_dim0() const + { + return dim0; + }; + + /// number of processes in column dimension of the MPI Cartesian grid + int get_dim1() const + { + return dim1; + }; + + /// row coordinate in the BLACS grid + int get_coord_row() const + { + return coord[0]; + }; + + /// column coordinate in the BLACS grid + int get_coord_col() const + { + return coord[1]; + }; + + /// whether the parallelization is in serial mode + bool get_is_serial() const + { + return is_serial; + }; + #ifdef __MPI + + /// ScaLAPACK descriptor + const int* get_desc() const + { + return desc; + }; + /** * @brief Initialize a BLACS grid with the given MPI communicator * and set up the info of a block-cyclic distribution. From dea2a251fc2d50d586a3ec2046e07ccd07df5349 Mon Sep 17 00:00:00 2001 From: abacus_fixer Date: Wed, 17 Jun 2026 11:36:09 +0800 Subject: [PATCH 02/15] refactor(parallel): Add MPI_Type type mapping template to eliminate duplicate specializations - Add MPI_Type template struct to map C++ types to MPI_Datatype - Replace 30+ duplicate template specializations with 8 generic templates - Add explicit instantiations for all required types - Maintain full backward compatibility --- source/source_base/parallel_reduce.cpp | 277 +++++++------------------ source/source_base/parallel_reduce.h | 44 +++- 2 files changed, 122 insertions(+), 199 deletions(-) diff --git a/source/source_base/parallel_reduce.cpp b/source/source_base/parallel_reduce.cpp index 36095f6d033..bf72a25e2ea 100644 --- a/source/source_base/parallel_reduce.cpp +++ b/source/source_base/parallel_reduce.cpp @@ -4,141 +4,155 @@ #include -template <> -void Parallel_Reduce::reduce_all(int& object) -{ #ifdef __MPI - MPI_Allreduce(MPI_IN_PLACE, &object, 1, MPI_INT, MPI_SUM, MPI_COMM_WORLD); +const MPI_Datatype Parallel_Reduce::MPI_Type::value = MPI_INT; +const MPI_Datatype Parallel_Reduce::MPI_Type::value = MPI_DOUBLE; +const MPI_Datatype Parallel_Reduce::MPI_Type::value = MPI_FLOAT; +const MPI_Datatype Parallel_Reduce::MPI_Type>::value = MPI_DOUBLE_COMPLEX; +const MPI_Datatype Parallel_Reduce::MPI_Type>::value = MPI_C_FLOAT_COMPLEX; +const MPI_Datatype Parallel_Reduce::MPI_Type::value = MPI_LONG_LONG; #endif - return; -} -template <> -void Parallel_Reduce::reduce_all(long long& object) +template +void Parallel_Reduce::reduce_all(T& object) { #ifdef __MPI - MPI_Allreduce(MPI_IN_PLACE, &object, 1, MPI_LONG_LONG, MPI_SUM, MPI_COMM_WORLD); + MPI_Allreduce(MPI_IN_PLACE, &object, 1, MPI_Type::value, MPI_SUM, MPI_COMM_WORLD); #endif - return; } -void Parallel_Reduce::reduce_int_diag(int& object) +template +void Parallel_Reduce::reduce_all(T* object, const int n) { #ifdef __MPI - MPI_Allreduce(MPI_IN_PLACE, &object, 1, MPI_INT, MPI_SUM, DIAG_WORLD); + MPI_Allreduce(MPI_IN_PLACE, object, n, MPI_Type::value, MPI_SUM, MPI_COMM_WORLD); #endif - return; } -template <> -void Parallel_Reduce::reduce_all(double& object) +template +void Parallel_Reduce::reduce_pool(T& object) { #ifdef __MPI - MPI_Allreduce(MPI_IN_PLACE, &object, 1, MPI_DOUBLE, MPI_SUM, MPI_COMM_WORLD); + MPI_Allreduce(MPI_IN_PLACE, &object, 1, MPI_Type::value, MPI_SUM, POOL_WORLD); #endif - return; } -template <> -void Parallel_Reduce::reduce_all(float& object) +template +void Parallel_Reduce::reduce_pool(T* object, const int n) { #ifdef __MPI - MPI_Allreduce(MPI_IN_PLACE, &object, 1, MPI_FLOAT, MPI_SUM, MPI_COMM_WORLD); + MPI_Allreduce(MPI_IN_PLACE, object, n, MPI_Type::value, MPI_SUM, POOL_WORLD); #endif - return; } -template <> -void Parallel_Reduce::reduce_all(int* object, const int n) +template +void Parallel_Reduce::reduce_min(T& v) { #ifdef __MPI - MPI_Allreduce(MPI_IN_PLACE, object, n, MPI_INT, MPI_SUM, MPI_COMM_WORLD); + MPI_Allreduce(MPI_IN_PLACE, &v, 1, MPI_Type::value, MPI_MIN, MPI_COMM_WORLD); #endif - return; } -template <> -void Parallel_Reduce::reduce_all(long long* object, const int n) +template +void Parallel_Reduce::reduce_max(T& v) { #ifdef __MPI - MPI_Allreduce(MPI_IN_PLACE, object, n, MPI_LONG_LONG, MPI_SUM, MPI_COMM_WORLD); + MPI_Allreduce(MPI_IN_PLACE, &v, 1, MPI_Type::value, MPI_MAX, MPI_COMM_WORLD); #endif - return; } -void Parallel_Reduce::reduce_int_grid(int* object, const int n) +template +void Parallel_Reduce::reduce_min_pool(const int& nproc_in_pool, T& v) { + if (nproc_in_pool == 1) + { + return; + } #ifdef __MPI - MPI_Allreduce(MPI_IN_PLACE, object, n, MPI_INT, MPI_SUM, GRID_WORLD); + MPI_Allreduce(MPI_IN_PLACE, &v, 1, MPI_Type::value, MPI_MIN, POOL_WORLD); #endif - return; } -template <> -void Parallel_Reduce::reduce_all(double* object, const int n) +template +void Parallel_Reduce::reduce_max_pool(const int& nproc_in_pool, T& v) { + if (nproc_in_pool == 1) + { + return; + } #ifdef __MPI - MPI_Allreduce(MPI_IN_PLACE, object, n, MPI_DOUBLE, MPI_SUM, MPI_COMM_WORLD); + MPI_Allreduce(MPI_IN_PLACE, &v, 1, MPI_Type::value, MPI_MAX, POOL_WORLD); #endif - return; } -void Parallel_Reduce::reduce_double_grid(double* object, const int n) -{ -#ifdef __MPI - MPI_Allreduce(MPI_IN_PLACE, object, n, MPI_DOUBLE, MPI_SUM, GRID_WORLD); -#endif - return; -} +template void Parallel_Reduce::reduce_all(int&); +template void Parallel_Reduce::reduce_all(double&); +template void Parallel_Reduce::reduce_all(float&); +template void Parallel_Reduce::reduce_all>(std::complex&); +template void Parallel_Reduce::reduce_all>(std::complex&); +template void Parallel_Reduce::reduce_all(long long&); -void Parallel_Reduce::reduce_double_diag(double* object, const int n) -{ -#ifdef __MPI - MPI_Allreduce(MPI_IN_PLACE, object, n, MPI_DOUBLE, MPI_SUM, DIAG_WORLD); -#endif - return; -} +template void Parallel_Reduce::reduce_all(int*, const int); +template void Parallel_Reduce::reduce_all(double*, const int); +template void Parallel_Reduce::reduce_all(float*, const int); +template void Parallel_Reduce::reduce_all>(std::complex*, const int); +template void Parallel_Reduce::reduce_all>(std::complex*, const int); +template void Parallel_Reduce::reduce_all(long long*, const int); + +template void Parallel_Reduce::reduce_pool(float&); +template void Parallel_Reduce::reduce_pool(double&); +template void Parallel_Reduce::reduce_pool>(std::complex&); + +template void Parallel_Reduce::reduce_pool(int*, const int); +template void Parallel_Reduce::reduce_pool(double*, const int); +template void Parallel_Reduce::reduce_pool>(std::complex*, const int); +template void Parallel_Reduce::reduce_pool>(std::complex*, const int); + +template void Parallel_Reduce::reduce_min(int&); +template void Parallel_Reduce::reduce_min(float&); +template void Parallel_Reduce::reduce_min(double&); -template <> -void Parallel_Reduce::reduce_pool(float& object) +template void Parallel_Reduce::reduce_max(float&); +template void Parallel_Reduce::reduce_max(double&); + +template void Parallel_Reduce::reduce_min_pool(const int&, double&); +template void Parallel_Reduce::reduce_max_pool(const int&, double&); + +void Parallel_Reduce::reduce_int_diag(int& object) { #ifdef __MPI - MPI_Allreduce(MPI_IN_PLACE, &object, 1, MPI_FLOAT, MPI_SUM, POOL_WORLD); + MPI_Allreduce(MPI_IN_PLACE, &object, 1, MPI_INT, MPI_SUM, DIAG_WORLD); #endif return; } -template <> -void Parallel_Reduce::reduce_pool(double& object) +void Parallel_Reduce::reduce_int_grid(int* object, const int n) { #ifdef __MPI - MPI_Allreduce(MPI_IN_PLACE, &object, 1, MPI_DOUBLE, MPI_SUM, POOL_WORLD); + MPI_Allreduce(MPI_IN_PLACE, object, n, MPI_INT, MPI_SUM, GRID_WORLD); #endif return; } -template <> -void Parallel_Reduce::reduce_pool(int* object, const int n) +void Parallel_Reduce::reduce_double_grid(double* object, const int n) { #ifdef __MPI - MPI_Allreduce(MPI_IN_PLACE, object, n, MPI_INT, MPI_SUM, POOL_WORLD); + MPI_Allreduce(MPI_IN_PLACE, object, n, MPI_DOUBLE, MPI_SUM, GRID_WORLD); #endif + return; } -template <> -void Parallel_Reduce::reduce_pool(double* object, const int n) +void Parallel_Reduce::reduce_double_diag(double* object, const int n) { #ifdef __MPI - MPI_Allreduce(MPI_IN_PLACE, object, n, MPI_DOUBLE, MPI_SUM, POOL_WORLD); + MPI_Allreduce(MPI_IN_PLACE, object, n, MPI_DOUBLE, MPI_SUM, DIAG_WORLD); #endif return; } -// (1) the value is same in each pool. -// (2) we need to reduce the value from different pool. void Parallel_Reduce::reduce_double_allpool(const int& npool, const int& nproc_in_pool, double& object) { - if (npool == 1) + if (npool == 1) { return; } @@ -148,11 +162,9 @@ void Parallel_Reduce::reduce_double_allpool(const int& npool, const int& nproc_i #endif } -// (1) the value is same in each pool. -// (2) we need to reduce the value from different pool. void Parallel_Reduce::reduce_double_allpool(const int& npool, const int& nproc_in_pool, double* object, const int n) { - if (npool == 1) + if (npool == 1) { return; } @@ -166,72 +178,6 @@ void Parallel_Reduce::reduce_double_allpool(const int& npool, const int& nproc_i #endif } -template <> -void Parallel_Reduce::reduce_all>(std::complex& object) -{ -#ifdef __MPI - MPI_Allreduce(MPI_IN_PLACE, &object, 1, MPI_DOUBLE_COMPLEX, MPI_SUM, MPI_COMM_WORLD); -#endif - return; -} - -// LiuXh add 2019-07-16 -template <> -void Parallel_Reduce::reduce_all>(std::complex* object, const int n) -{ -#ifdef __MPI - MPI_Allreduce(MPI_IN_PLACE, object, n, MPI_DOUBLE_COMPLEX, MPI_SUM, MPI_COMM_WORLD); -#endif - return; -} - - -template <> -void Parallel_Reduce::reduce_all>(std::complex& object) -{ -#ifdef __MPI - MPI_Allreduce(MPI_IN_PLACE, &object, 1, MPI_C_FLOAT_COMPLEX, MPI_SUM, MPI_COMM_WORLD); -#endif - return; -} - -// LiuXh add 2019-07-16 -template <> -void Parallel_Reduce::reduce_all>(std::complex* object, const int n) -{ -#ifdef __MPI - MPI_Allreduce(MPI_IN_PLACE, object, n, MPI_C_FLOAT_COMPLEX, MPI_SUM, MPI_COMM_WORLD); -#endif - return; -} - -template <> -void Parallel_Reduce::reduce_pool>(std::complex& object) -{ -#ifdef __MPI - MPI_Allreduce(MPI_IN_PLACE, &object, 1, MPI_DOUBLE_COMPLEX, MPI_SUM, POOL_WORLD); -#endif - return; -} - -template <> -void Parallel_Reduce::reduce_pool>(std::complex* object, const int n) -{ -#ifdef __MPI - MPI_Allreduce(MPI_IN_PLACE, object, n, MPI_C_FLOAT_COMPLEX, MPI_SUM, POOL_WORLD); -#endif - return; -} - -template <> -void Parallel_Reduce::reduce_pool>(std::complex* object, const int n) -{ -#ifdef __MPI - MPI_Allreduce(MPI_IN_PLACE, object, n, MPI_DOUBLE_COMPLEX, MPI_SUM, POOL_WORLD); -#endif - return; -} - void Parallel_Reduce::gather_int_all(int& v, int* all) { #ifdef __MPI @@ -239,67 +185,4 @@ void Parallel_Reduce::gather_int_all(int& v, int* all) MPI_Allgather(&v, 1, MPI_INT, all, 1, MPI_INT, MPI_COMM_WORLD); #endif return; -} - -template <> -void Parallel_Reduce::reduce_min(int& v) -{ -#ifdef __MPI - MPI_Allreduce(MPI_IN_PLACE, &v, 1, MPI_INT, MPI_MIN, MPI_COMM_WORLD); -#endif -} - -template <> -void Parallel_Reduce::reduce_min(float& v) -{ -#ifdef __MPI - MPI_Allreduce(MPI_IN_PLACE, &v, 1, MPI_FLOAT, MPI_MIN, MPI_COMM_WORLD); -#endif -} - -template <> -void Parallel_Reduce::reduce_min(double& v) -{ -#ifdef __MPI - MPI_Allreduce(MPI_IN_PLACE, &v, 1, MPI_DOUBLE, MPI_MIN, MPI_COMM_WORLD); -#endif -} - -template <> -void Parallel_Reduce::reduce_max(float& v) -{ -#ifdef __MPI - MPI_Allreduce(MPI_IN_PLACE, &v, 1, MPI_FLOAT, MPI_MAX, MPI_COMM_WORLD); -#endif -} - -template <> -void Parallel_Reduce::reduce_max(double& v) -{ -#ifdef __MPI - MPI_Allreduce(MPI_IN_PLACE, &v, 1, MPI_DOUBLE, MPI_MAX, MPI_COMM_WORLD); -#endif -} - -template <> -void Parallel_Reduce::reduce_max_pool(const int& nproc_in_pool, double& v) -{ -#ifdef __MPI - if (nproc_in_pool == 1) - { - return; - } - MPI_Allreduce(MPI_IN_PLACE, &v, 1, MPI_DOUBLE, MPI_MAX, POOL_WORLD); -#endif -} -template <> -void Parallel_Reduce::reduce_min_pool(const int& nproc_in_pool, double& v) -{ -#ifdef __MPI - if (nproc_in_pool == 1) - { - return; - } - MPI_Allreduce(MPI_IN_PLACE, &v, 1, MPI_DOUBLE, MPI_MIN, POOL_WORLD); -#endif } \ No newline at end of file diff --git a/source/source_base/parallel_reduce.h b/source/source_base/parallel_reduce.h index a7819899516..f5e9b30987a 100644 --- a/source/source_base/parallel_reduce.h +++ b/source/source_base/parallel_reduce.h @@ -8,10 +8,50 @@ #include #include -// using std::complex; - namespace Parallel_Reduce { + +#ifdef __MPI +template +struct MPI_Type; + +template <> +struct MPI_Type +{ + static const MPI_Datatype value; +}; + +template <> +struct MPI_Type +{ + static const MPI_Datatype value; +}; + +template <> +struct MPI_Type +{ + static const MPI_Datatype value; +}; + +template <> +struct MPI_Type> +{ + static const MPI_Datatype value; +}; + +template <> +struct MPI_Type> +{ + static const MPI_Datatype value; +}; + +template <> +struct MPI_Type +{ + static const MPI_Datatype value; +}; +#endif + /// reduce in all process template void reduce_all(T& object); From 3609f0a198899c5207ec093b1b9681e52eb48689 Mon Sep 17 00:00:00 2001 From: abacus_fixer Date: Wed, 17 Jun 2026 13:11:23 +0800 Subject: [PATCH 03/15] fix is_serial --- source/source_base/parallel_2d.h | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/source/source_base/parallel_2d.h b/source/source_base/parallel_2d.h index 743db79eae7..fb6ce47c168 100644 --- a/source/source_base/parallel_2d.h +++ b/source/source_base/parallel_2d.h @@ -98,12 +98,6 @@ class Parallel_2D return coord[1]; }; - /// whether the parallelization is in serial mode - bool get_is_serial() const - { - return is_serial; - }; - #ifdef __MPI /// ScaLAPACK descriptor @@ -166,10 +160,12 @@ class Parallel_2D /// process coordinate in the BLACS grid int coord[2] = {-1, -1}; + private: /// whether to use the serial mode bool is_serial = false; protected: + /// map from global index to local index std::vector global2local_row_; std::vector global2local_col_; From 5554e776a9e4e866a7a066597b3757ff579476da Mon Sep 17 00:00:00 2001 From: abacus_fixer Date: Wed, 17 Jun 2026 13:53:05 +0800 Subject: [PATCH 04/15] fix pv->coord[0] and pv->coord[1] --- source/source_base/parallel_2d.h | 16 ++++++++++++++-- .../test_parallel/parallel_2d_test.cpp | 4 ++-- .../source_basis/module_ao/parallel_orbitals.cpp | 4 ++-- .../module_ao/test/parallel_orbitals_test.cpp | 4 ++-- source/source_hsolver/hsolver_lcao.cpp | 3 ++- source/source_io/module_wf/get_wf_lcao.cpp | 2 +- source/source_lcao/module_gint/gint_common.cpp | 2 +- source/source_lcao/module_rt/band_energy.cpp | 6 +++--- source/source_lcao/module_rt/norm_psi.cpp | 6 +++--- .../source_lcao/module_rt/propagator_taylor.cpp | 2 +- .../module_rt/test/band_energy_test.cpp | 2 +- .../source_lcao/module_rt/test/norm_psi_test.cpp | 2 +- .../module_rt/test/propagator_test1.cpp | 2 +- .../module_rt/test/propagator_test2.cpp | 2 +- .../module_rt/test/propagator_test3.cpp | 2 +- 15 files changed, 36 insertions(+), 23 deletions(-) diff --git a/source/source_base/parallel_2d.h b/source/source_base/parallel_2d.h index fb6ce47c168..81fab1128e7 100644 --- a/source/source_base/parallel_2d.h +++ b/source/source_base/parallel_2d.h @@ -98,6 +98,19 @@ class Parallel_2D return coord[1]; }; + /// check whether a given BLACS grid coordinate is this process + bool blacs_in_this_processor(const int iprow, const int ipcol) const + { + return iprow == coord[0] && ipcol == coord[1]; + }; + + /// set process coordinate in the BLACS grid (intended for testing) + void set_coord(const int row, const int col) + { + coord[0] = row; + coord[1] = col; + }; + #ifdef __MPI /// ScaLAPACK descriptor @@ -157,10 +170,9 @@ class Parallel_2D int dim0 = 0; int dim1 = 0; + private: /// process coordinate in the BLACS grid int coord[2] = {-1, -1}; - - private: /// whether to use the serial mode bool is_serial = false; diff --git a/source/source_base/test_parallel/parallel_2d_test.cpp b/source/source_base/test_parallel/parallel_2d_test.cpp index 5073571bcc3..062b02472eb 100644 --- a/source/source_base/test_parallel/parallel_2d_test.cpp +++ b/source/source_base/test_parallel/parallel_2d_test.cpp @@ -79,8 +79,8 @@ TEST_F(test_para2d, Divide2D) return nblock / np * nb + static_cast(nblock % np > pcoord) * nb // full blocks' contribution + static_cast(nblock % np == pcoord) * (gsize % nb); // the last block's contribution }; - EXPECT_EQ(lr, cal_lsize(gr, nb, p2d.dim0, p2d.coord[0])); - EXPECT_EQ(lc, cal_lsize(gc, nb, p2d.dim1, p2d.coord[1])); + EXPECT_EQ(lr, cal_lsize(gr, nb, p2d.dim0, p2d.get_coord_row())); + EXPECT_EQ(lc, cal_lsize(gc, nb, p2d.dim1, p2d.get_coord_col())); // 4. ScaLAPACK descriptor EXPECT_EQ(p2d.desc[0], 1); diff --git a/source/source_basis/module_ao/parallel_orbitals.cpp b/source/source_basis/module_ao/parallel_orbitals.cpp index 5ace1653272..7e505052be1 100644 --- a/source/source_basis/module_ao/parallel_orbitals.cpp +++ b/source/source_basis/module_ao/parallel_orbitals.cpp @@ -252,7 +252,7 @@ int Parallel_Orbitals::set_nloc_wfc_Eij( } } int col_b_bands = block / dim1; - if (coord[1] < block % dim1) + if (get_coord_col() < block % dim1) { col_b_bands++; } @@ -264,7 +264,7 @@ int Parallel_Orbitals::set_nloc_wfc_Eij( { end_id = block % dim1 - 1; } - if (coord[1] == end_id) + if (get_coord_col() == end_id) { this->ncol_bands = (col_b_bands - 1) * nb + (N_A - (block - 1) * nb); } diff --git a/source/source_basis/module_ao/test/parallel_orbitals_test.cpp b/source/source_basis/module_ao/test/parallel_orbitals_test.cpp index fe09d9fca63..8605820c36c 100644 --- a/source/source_basis/module_ao/test/parallel_orbitals_test.cpp +++ b/source/source_basis/module_ao/test/parallel_orbitals_test.cpp @@ -72,8 +72,8 @@ TEST_F(TestParaO, Divide2D) return nblock / np * nb + static_cast(nblock % np > pcoord) * nb //full blocks' contribution + static_cast(nblock % np == pcoord) * (gsize % nb); // the last block's contribution }; - EXPECT_EQ(lr, cal_lsize(gr, nb, po.dim0, po.coord[0])); - EXPECT_EQ(lc, cal_lsize(gc, nb, po.dim1, po.coord[1])); + EXPECT_EQ(lr, cal_lsize(gr, nb, po.dim0, po.get_coord_row())); + EXPECT_EQ(lc, cal_lsize(gc, nb, po.dim1, po.get_coord_col())); //4. ScaLAPACK descriptor EXPECT_EQ(po.desc[0], 1); diff --git a/source/source_hsolver/hsolver_lcao.cpp b/source/source_hsolver/hsolver_lcao.cpp index 2b4d6497ae6..a210b9fe81c 100644 --- a/source/source_hsolver/hsolver_lcao.cpp +++ b/source/source_hsolver/hsolver_lcao.cpp @@ -205,8 +205,9 @@ void HSolverLCAO::parakSolve(hamilt::Hamilt* pHamilt, k2d.set_para_env(psi.get_nk(), nrow, nb2d, GlobalV::NPROC, GlobalV::MY_RANK, PARAM.inp.nspin); /// set psi_pool const int zero = 0; + int coord_col = k2d.get_p2D_pool()->get_coord_col(); int ncol_bands_pool - = numroc_(&(nbands), &(nb2d), &(k2d.get_p2D_pool()->coord[1]), &zero, &(k2d.get_p2D_pool()->dim1)); + = numroc_(&(nbands), &(nb2d), &coord_col, &zero, &(k2d.get_p2D_pool()->dim1)); /// Loop over k points for solve Hamiltonian to charge density for (int ik = 0; ik < k2d.get_pKpoints()->get_max_nks_pool(); ++ik) { diff --git a/source/source_io/module_wf/get_wf_lcao.cpp b/source/source_io/module_wf/get_wf_lcao.cpp index cd54b4cbdd5..04e0c4d97b0 100644 --- a/source/source_io/module_wf/get_wf_lcao.cpp +++ b/source/source_io/module_wf/get_wf_lcao.cpp @@ -536,7 +536,7 @@ void Get_wf_lcao::wfc_2d_to_grid(const T* lowf_2d, { for (int ipcol = 0; ipcol < pv.dim1; ++ipcol) { - if (iprow == pv.coord[0] && ipcol == pv.coord[1]) + if (pv.blacs_in_this_processor(iprow, ipcol)) { BlasConnector::copy(pv.nloc_wfc, lowf_2d, mem_stride, lowf_block.data(), mem_stride); naroc[0] = pv.nrow; diff --git a/source/source_lcao/module_gint/gint_common.cpp b/source/source_lcao/module_gint/gint_common.cpp index 987fcbe5a0e..5520e0c0abf 100644 --- a/source/source_lcao/module_gint/gint_common.cpp +++ b/source/source_lcao/module_gint/gint_common.cpp @@ -428,7 +428,7 @@ void wfc_2d_to_gint(const T* wfc_2d, { for (int ipcol = 0; ipcol < pv.dim1; ++ipcol) { - if (iprow == pv.coord[0] && ipcol == pv.coord[1]) + if (pv.blacs_in_this_processor(iprow, ipcol)) { BlasConnector::copy(pv.nloc_wfc, wfc_2d, mem_stride, wfc_block.data(), mem_stride); naroc[0] = pv.nrow; diff --git a/source/source_lcao/module_rt/band_energy.cpp b/source/source_lcao/module_rt/band_energy.cpp index 2a03a5f7dcc..2c812a090d0 100644 --- a/source/source_lcao/module_rt/band_energy.cpp +++ b/source/source_lcao/module_rt/band_energy.cpp @@ -130,7 +130,7 @@ void compute_ekb(const Parallel_Orbitals* pv, { for (int ipcol = 0; ipcol < pv->dim1; ++ipcol) { - if (iprow == pv->coord[0] && ipcol == pv->coord[1]) + if (pv->blacs_in_this_processor(iprow, ipcol)) { naroc[0] = pv->nrow; naroc[1] = pv->ncol; @@ -370,8 +370,8 @@ void compute_ekb_tensor(const Parallel_Orbitals* pv, pv->desc_Eij[4], pv->dim0, pv->dim1, - pv->coord[0], - pv->coord[1], + pv->get_coord_row(), + pv->get_coord_col(), nband, cublas_res.stream); diff --git a/source/source_lcao/module_rt/norm_psi.cpp b/source/source_lcao/module_rt/norm_psi.cpp index 40884b02df9..b893eeea912 100644 --- a/source/source_lcao/module_rt/norm_psi.cpp +++ b/source/source_lcao/module_rt/norm_psi.cpp @@ -113,7 +113,7 @@ void norm_psi(const Parallel_Orbitals* pv, { for (int ipcol = 0; ipcol < pv->dim1; ++ipcol) { - if (iprow == pv->coord[0] && ipcol == pv->coord[1]) + if (pv->blacs_in_this_processor(iprow, ipcol)) { naroc[0] = pv->nrow; naroc[1] = pv->ncol; @@ -420,8 +420,8 @@ void norm_psi_tensor(const Parallel_Orbitals* pv, pv->desc_Eij[4], pv->dim0, pv->dim1, - pv->coord[0], - pv->coord[1], + pv->get_coord_row(), + pv->get_coord_col(), nband, cublas_res.stream); diff --git a/source/source_lcao/module_rt/propagator_taylor.cpp b/source/source_lcao/module_rt/propagator_taylor.cpp index 94db4693cdb..18d11a4c07d 100644 --- a/source/source_lcao/module_rt/propagator_taylor.cpp +++ b/source/source_lcao/module_rt/propagator_taylor.cpp @@ -79,7 +79,7 @@ void Propagator::compute_propagator_taylor(const int nlocal, { for (int ipcol = 0; ipcol < this->ParaV->dim1; ++ipcol) { - if (iprow == ParaV->coord[0] && ipcol == ParaV->coord[1]) + if (ParaV->blacs_in_this_processor(iprow, ipcol)) { naroc[0] = this->ParaV->nrow; naroc[1] = this->ParaV->ncol; 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 96171897cac..01db6f3709f 100644 --- a/source/source_lcao/module_rt/test/band_energy_test.cpp +++ b/source/source_lcao/module_rt/test/band_energy_test.cpp @@ -38,7 +38,7 @@ TEST(BandEnergyTest, testBandEnergy) pv->dim1 = 1; pv->nb = 1; pv->blacs_ctxt = 0; - pv->coord[0] = pv->coord[1] = 0; + pv->set_coord(0, 0); int dim[2]; dim[0] = nprow; 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 2e99639e789..cfc7d46c13a 100644 --- a/source/source_lcao/module_rt/test/norm_psi_test.cpp +++ b/source/source_lcao/module_rt/test/norm_psi_test.cpp @@ -44,7 +44,7 @@ TEST(NormPsiTest, testNormPsi) pv->dim1 = 1; pv->nb = 1; pv->blacs_ctxt = 0; - pv->coord[0] = pv->coord[1] = 0; + pv->set_coord(0, 0); int dim[2]; dim[0] = nprow; diff --git a/source/source_lcao/module_rt/test/propagator_test1.cpp b/source/source_lcao/module_rt/test/propagator_test1.cpp index 47829310a24..be426d6a857 100644 --- a/source/source_lcao/module_rt/test/propagator_test1.cpp +++ b/source/source_lcao/module_rt/test/propagator_test1.cpp @@ -37,7 +37,7 @@ TEST(PropagatorTest, testPropagatorCN) pv = new Parallel_Orbitals(); pv->nloc = nlocal * nlocal; pv->ncol = nlocal; - pv->coord[0] = pv->coord[1] = 0; + pv->set_coord(0, 0); PARAM.input.mdp.md_dt = 4 * ModuleBase::AU_to_FS; // Initialize input matrices diff --git a/source/source_lcao/module_rt/test/propagator_test2.cpp b/source/source_lcao/module_rt/test/propagator_test2.cpp index ac67639b590..d7da6e27422 100644 --- a/source/source_lcao/module_rt/test/propagator_test2.cpp +++ b/source/source_lcao/module_rt/test/propagator_test2.cpp @@ -37,7 +37,7 @@ TEST(PropagatorTest, testPropagatorTaylor) pv->dim1 = 1; pv->nb = 1; pv->blacs_ctxt = 0; - pv->coord[0] = pv->coord[1] = 0; + pv->set_coord(0, 0); int dim[2]; dim[0] = nprow; diff --git a/source/source_lcao/module_rt/test/propagator_test3.cpp b/source/source_lcao/module_rt/test/propagator_test3.cpp index bea699bc993..6b7f463589f 100644 --- a/source/source_lcao/module_rt/test/propagator_test3.cpp +++ b/source/source_lcao/module_rt/test/propagator_test3.cpp @@ -38,7 +38,7 @@ TEST(PropagatorTest, testPropagatorETRS) pv->dim1 = 1; pv->nb = 1; pv->blacs_ctxt = 0; - pv->coord[0] = pv->coord[1] = 0; + pv->set_coord(0, 0); int dim[2]; dim[0] = nprow; From 425608bb7978f96800e7c0aa496a4adaf0fe0032 Mon Sep 17 00:00:00 2001 From: abacus_fixer Date: Thu, 18 Jun 2026 08:55:12 +0800 Subject: [PATCH 05/15] update parallel_orbital, delete useless variable, use vector instead of new --- .../source_basis/module_ao/parallel_orbitals.cpp | 7 ------- .../source_basis/module_ao/parallel_orbitals.h | 4 +--- source/source_lcao/LCAO_nl_mu.cpp | 6 +++++- source/source_lcao/LCAO_set_st.cpp | 16 +++++++++++----- source/source_lcao/record_adj.cpp | 10 ++++------ 5 files changed, 21 insertions(+), 22 deletions(-) diff --git a/source/source_basis/module_ao/parallel_orbitals.cpp b/source/source_basis/module_ao/parallel_orbitals.cpp index 7e505052be1..ba818088755 100644 --- a/source/source_basis/module_ao/parallel_orbitals.cpp +++ b/source/source_basis/module_ao/parallel_orbitals.cpp @@ -6,10 +6,7 @@ Parallel_Orbitals::Parallel_Orbitals() { - this->loc_sizes = nullptr; // in multi-k, 2D-block-division variables for FT (R<->k) - this->nlocdim = nullptr; - this->nlocstart = nullptr; this->nnr = 1; this->ncol_bands = 0; this->nrow_bands=0; @@ -17,16 +14,12 @@ Parallel_Orbitals::Parallel_Orbitals() this->nloc_Eij=0; this->lastband_in_proc=0; this->lastband_number=0; - this->loc_size=0; this->nbands = 0; } Parallel_Orbitals::~Parallel_Orbitals() { - delete[] loc_sizes; - delete[] nlocdim; - delete[] nlocstart; } int Parallel_Orbitals::get_wfc_global_nbands() const diff --git a/source/source_basis/module_ao/parallel_orbitals.h b/source/source_basis/module_ao/parallel_orbitals.h index 2d6a6e7ad90..4e632e28615 100644 --- a/source/source_basis/module_ao/parallel_orbitals.h +++ b/source/source_basis/module_ao/parallel_orbitals.h @@ -2,6 +2,7 @@ #define _PARALLEL_ORBITALS_H_ #include "source_base/parallel_2d.h" #include +#include /// This class packs the information of 2D-block-cyclic for LCAO code: /// parallel distribution of basis, wavefunction and matrix. @@ -49,9 +50,6 @@ class Parallel_Orbitals : public Parallel_2D const int& lld); #endif - int* loc_sizes = nullptr; - int loc_size; - int get_wfc_global_nbands () const; int get_wfc_global_nbasis () const; diff --git a/source/source_lcao/LCAO_nl_mu.cpp b/source/source_lcao/LCAO_nl_mu.cpp index eafad48d7e6..635cae59288 100644 --- a/source/source_lcao/LCAO_nl_mu.cpp +++ b/source/source_lcao/LCAO_nl_mu.cpp @@ -191,7 +191,11 @@ void build_Nonlocal_mu_new(const Parallel_Orbitals& pv, GridD->Find_atom(ucell, atom1->tau[I1], T1, I1, &adjs); const int start1 = ucell.itiaiw2iwt(T1, I1, 0); // Record_adj.for_2d() may not called in some case - int nnr = pv.nlocstart ? pv.nlocstart[iat1] : 0; + int nnr = 0; + if (!pv.nlocstart.empty()) + { + nnr = pv.nlocstart[iat1]; + } tau1 = atom1->tau[I1]; // psi2 diff --git a/source/source_lcao/LCAO_set_st.cpp b/source/source_lcao/LCAO_set_st.cpp index 214148bc74e..0d388f17610 100644 --- a/source/source_lcao/LCAO_set_st.cpp +++ b/source/source_lcao/LCAO_set_st.cpp @@ -356,7 +356,11 @@ void build_ST_new(ForceStressArrays& fsr, AdjacentAtomInfo adjs; GridD->Find_atom(ucell, tau1, T1, I1, &adjs); // Record_adj.for_2d() may not called in some case - int nnr = pv.nlocstart ? pv.nlocstart[iat1] : 0; + int nnr = 0; + if (!pv.nlocstart.empty()) + { + nnr = pv.nlocstart[iat1]; + } if (cal_syns) { @@ -515,15 +519,17 @@ void build_ST_new(ForceStressArrays& fsr, for (int jj = 0; jj < atom1->nw * npol; ++jj) { const int mu = pv.global2local_row(start1 + jj); - if (mu < 0) { + if (mu < 0) + { continue; -} + } for (int kk = 0; kk < atom2->nw * npol; ++kk) { const int nu = pv.global2local_col(start2 + kk); - if (nu < 0) { + if (nu < 0) + { continue; -} + } ++total_nnr; ++nnr; } // kk diff --git a/source/source_lcao/record_adj.cpp b/source/source_lcao/record_adj.cpp index e00a5edfca5..2e8c17b2ea0 100644 --- a/source/source_lcao/record_adj.cpp +++ b/source/source_lcao/record_adj.cpp @@ -54,12 +54,10 @@ void Record_adj::for_2d(const UnitCell& ucell, if (!gamma_only) { // Record_adj should not modify members of pv, need refactor! mohan add 2025-03-10 - delete[] pv.nlocdim; - delete[] pv.nlocstart; - pv.nlocdim = new int[ucell.nat]; - pv.nlocstart = new int[ucell.nat]; - ModuleBase::GlobalFunc::ZEROS(pv.nlocdim, ucell.nat); - ModuleBase::GlobalFunc::ZEROS(pv.nlocstart, ucell.nat); + pv.nlocdim.resize(ucell.nat); + pv.nlocstart.resize(ucell.nat); + std::fill(pv.nlocdim.begin(), pv.nlocdim.end(), 0); + std::fill(pv.nlocstart.begin(), pv.nlocstart.end(), 0); pv.nnr = 0; } { From 16d6e6498acccb196ed7fb8ae947e3f2e98f3b97 Mon Sep 17 00:00:00 2001 From: abacus_fixer Date: Thu, 18 Jun 2026 09:34:09 +0800 Subject: [PATCH 06/15] update parallel_orbital.h, change get_col_size(int iat) to get_ncol_atom(int iat), same for row --- .../module_ao/parallel_orbitals.cpp | 12 +++++------ .../module_ao/parallel_orbitals.h | 20 +++++++++---------- .../module_ao/test/parallel_orbitals_test.cpp | 18 ++++++++--------- .../module_dm/density_matrix.cpp | 16 +++++++-------- .../module_dm/density_matrix_io.cpp | 4 ++-- .../module_dm/test/test_dm_R_init.cpp | 18 ++++++++--------- .../module_current/td_current_io.cpp | 8 ++++---- .../module_current/td_current_io_comm.cpp | 2 +- source/source_io/module_ml/io_npz.cpp | 8 ++++---- .../source_io/module_wannier/fR_overlap.cpp | 2 +- .../module_wannier/to_wannier90_lcao.cpp | 4 ++-- .../module_hcontainer/atom_pair.cpp | 12 +++++------ .../module_hcontainer/hcontainer.cpp | 2 +- .../module_hcontainer/read_hcontainer.cpp | 4 ++-- .../module_hcontainer/transfer.cpp | 20 +++++++++---------- .../module_lr/dm_trans/dmr_complex.cpp | 6 +++--- .../module_lr/utils/lr_util_hcontainer.h | 2 +- .../module_operator_lcao/deepks_lcao.cpp | 2 +- .../module_operator_lcao/dftu_lcao.cpp | 4 ++-- .../module_operator_lcao/dspin_lcao.cpp | 2 +- .../module_operator_lcao/ekinetic.cpp | 2 +- .../module_operator_lcao/nonlocal.cpp | 2 +- .../module_operator_lcao/op_exx_lcao.hpp | 4 ++-- .../module_operator_lcao/overlap.cpp | 2 +- .../module_operator_lcao/td_ekinetic_lcao.cpp | 2 +- .../module_operator_lcao/td_pot_hybrid.cpp | 2 +- .../module_operator_lcao/veff_lcao.cpp | 2 +- .../source_lcao/module_rdmft/rdmft_tools.cpp | 2 +- .../module_exx_symmetry/symmetry_rotation.cpp | 2 +- .../symmetry_rotation_R_hcontainer.hpp | 18 ++++++++--------- source/source_lcao/module_rt/boundary_fix.cpp | 6 +++--- source/source_lcao/module_rt/velocity_op.cpp | 4 ++-- source/source_lcao/pulay_fs_temp.hpp | 6 +++--- source/source_lcao/spar_hsr.cpp | 4 ++-- 34 files changed, 111 insertions(+), 113 deletions(-) diff --git a/source/source_basis/module_ao/parallel_orbitals.cpp b/source/source_basis/module_ao/parallel_orbitals.cpp index ba818088755..51e92b93d00 100644 --- a/source/source_basis/module_ao/parallel_orbitals.cpp +++ b/source/source_basis/module_ao/parallel_orbitals.cpp @@ -85,7 +85,7 @@ void Parallel_Orbitals::set_atomic_trace(const int* iat2iwt, const int &nat, con } // Get the number of columns of the orbital matrix of the iat-th atom -int Parallel_Orbitals::get_col_size(int iat) const +int Parallel_Orbitals::get_ncol_atom(int iat) const { int size = this->atom_begin_col[iat]; // If the iat-th atom does not have an orbital matrix, return 0 @@ -105,10 +105,10 @@ int Parallel_Orbitals::get_col_size(int iat) const iat++; } // If the orbital matrix is not found after all atoms are traversed, throw an exception - throw std::string("error in get_col_size(iat)"); + throw std::string("error in get_ncol_atom(iat)"); } // Get the number of rows of the orbital matrix of the iat-th atom -int Parallel_Orbitals::get_row_size(int iat) const +int Parallel_Orbitals::get_nrow_atom(int iat) const { int size = this->atom_begin_row[iat]; if(size == -1) @@ -126,7 +126,7 @@ int Parallel_Orbitals::get_row_size(int iat) const iat++; } // If the orbital matrix is not found after all atoms are traversed, throw an exception - throw std::string("error in get_col_size(iat)"); + throw std::string("error in get_nrow_atom(iat)"); } // Get the global indexes of the rows of the parallel orbital matrix @@ -160,7 +160,7 @@ std::vector Parallel_Orbitals::get_indexes_col() const // Get the global indexes of the rows of the orbital matrix of the iat-th atom std::vector Parallel_Orbitals::get_indexes_row(int iat) const { - int size = this->get_row_size(iat); + int size = this->get_nrow_atom(iat); if(size == 0) { return std::vector(); @@ -181,7 +181,7 @@ std::vector Parallel_Orbitals::get_indexes_row(int iat) const // Get the global indexes of the columns of the orbital matrix of the iat-th atom std::vector Parallel_Orbitals::get_indexes_col(int iat) const { - int size = this->get_col_size(iat); + int size = this->get_ncol_atom(iat); if(size == 0) { return std::vector(); diff --git a/source/source_basis/module_ao/parallel_orbitals.h b/source/source_basis/module_ao/parallel_orbitals.h index 4e632e28615..f9d08e757f5 100644 --- a/source/source_basis/module_ao/parallel_orbitals.h +++ b/source/source_basis/module_ao/parallel_orbitals.h @@ -24,15 +24,15 @@ class Parallel_Orbitals : public Parallel_2D long nloc_Eij; int lastband_in_proc; - int lastband_number; + int lastband_number; - ///--------------------------------------- + ///------------------------------------- /// number of elements(basis-pairs) in this processon /// on all adjacent atoms-pairs(2D division) - ///--------------------------------------- + ///------------------------------------- int nnr=1; - int * nlocdim = nullptr; - int * nlocstart = nullptr; + std::vector nlocdim; + std::vector nlocstart; #ifdef __MPI int desc_wfc[9]; //for wfc, nlocal*nbands @@ -68,13 +68,11 @@ class Parallel_Orbitals : public Parallel_2D * @brief dimension getters for 2D-block-cyclic division of Hamiltonian matrix * get_col_size() : total number of columns of Hamiltonian matrix in this processor * get_row_size() : total number of rows of Hamiltonian matrix in this processor - * get_col_size(iat) : number of columns of Hamiltonian matrix in atom iat - * get_row_size(iat) : number of rows of Hamiltonian matrix in atom iat + * get_ncol_atom(iat) : number of columns of Hamiltonian matrix in atom iat + * get_nrow_atom(iat) : number of rows of Hamiltonian matrix in atom iat */ - int get_col_size()const { return this->ncol; }; - int get_row_size()const { return this->nrow; }; - int get_col_size(int iat) const; - int get_row_size(int iat) const; + int get_ncol_atom(int iat) const; + int get_nrow_atom(int iat) const; int get_nbands() const; diff --git a/source/source_basis/module_ao/test/parallel_orbitals_test.cpp b/source/source_basis/module_ao/test/parallel_orbitals_test.cpp index 8605820c36c..c74ab35447c 100644 --- a/source/source_basis/module_ao/test/parallel_orbitals_test.cpp +++ b/source/source_basis/module_ao/test/parallel_orbitals_test.cpp @@ -9,8 +9,8 @@ * - set_atomic_trace * - get_col_size * - get_row_size - * - get_col_size(iat) - * - get_row_size(iat) + * - get_ncol_atom(iat) + * - get_nrow_atom(iat) * - get_indexes_row * - get_indexes_col * - get_indexes_row(iat) @@ -118,13 +118,13 @@ TEST_F(TestParaO, Divide2D) auto global_col_array = po.get_indexes_col(); int local_index_trace_row = 0; int local_index_trace_col = 0; - // check get_col_size(iat) and get_row_size(iat) + // check get_ncol_atom(iat) and get_nrow_atom(iat) for (int i = 0; i < nat0; ++i) { auto atomic_row_array = po.get_indexes_row(i); auto atomic_col_array = po.get_indexes_col(i); - EXPECT_EQ(po.get_col_size(i), atomic_col_array.size()); - EXPECT_EQ(po.get_row_size(i), atomic_row_array.size()); + EXPECT_EQ(po.get_ncol_atom(i), atomic_col_array.size()); + EXPECT_EQ(po.get_nrow_atom(i), atomic_row_array.size()); for (int j = 0; j < atomic_row_array.size(); ++j) { //check global_index == global_index @@ -184,12 +184,12 @@ TEST_F(TestParaO, Serial) po.set_atomic_trace(iat2iwt.data(), nat0, gr); EXPECT_EQ(po.get_col_size(), gr); EXPECT_EQ(po.get_row_size(), gr); - // check get_col_size(iat) and get_row_size(iat) + // check get_ncol_atom(iat) and get_nrow_atom(iat) for (int i = 0; i < nat0; ++i) { - std::cout<<__FILE__<<__LINE__<<" i = "<atom_begin_row[iat1]; const int col_ap = dm._paraV->atom_begin_col[iat2]; - const int row_size = dm._paraV->get_row_size(iat1); - const int col_size = dm._paraV->get_col_size(iat2); + const int row_size = dm._paraV->get_nrow_atom(iat1); + const int col_size = dm._paraV->get_ncol_atom(iat2); const int mat_size = row_size * col_size; const int R_size = target_ap.get_R_size(); assert(row_ap != -1 && col_ap != -1 && "Atom-pair not belong this process"); @@ -241,8 +241,8 @@ void DensityMatrix_Tools::cal_DMR_td( // get global indexes of whole matrix for each atom in this process const int row_ap = dm._paraV->atom_begin_row[iat1]; const int col_ap = dm._paraV->atom_begin_col[iat2]; - const int row_size = dm._paraV->get_row_size(iat1); - const int col_size = dm._paraV->get_col_size(iat2); + const int row_size = dm._paraV->get_nrow_atom(iat1); + const int col_size = dm._paraV->get_ncol_atom(iat2); const int mat_size = row_size * col_size; const int R_size = target_ap.get_R_size(); assert(row_ap != -1 && col_ap != -1 && "Atom-pair not belong this process"); @@ -398,8 +398,8 @@ void DensityMatrix_Tools::cal_DMR_full( // get global indexes of whole matrix for each atom in this process const int row_ap = dm._paraV->atom_begin_row[iat1]; const int col_ap = dm._paraV->atom_begin_col[iat2]; - const int row_size = dm._paraV->get_row_size(iat1); - const int col_size = dm._paraV->get_col_size(iat2); + const int row_size = dm._paraV->get_nrow_atom(iat1); + const int col_size = dm._paraV->get_ncol_atom(iat2); const int mat_size = row_size * col_size; const int R_size = target_ap.get_R_size(); assert(row_ap != -1 && col_ap != -1 && "Atom-pair not belong this process"); @@ -507,8 +507,8 @@ void DensityMatrix::cal_DMR(const int ik_in) // get global indexes of whole matrix for each atom in this process const int row_ap = this->_paraV->atom_begin_row[iat1]; const int col_ap = this->_paraV->atom_begin_col[iat2]; - const int row_size = this->_paraV->get_row_size(iat1); - const int col_size = this->_paraV->get_col_size(iat2); + const int row_size = this->_paraV->get_nrow_atom(iat1); + const int col_size = this->_paraV->get_ncol_atom(iat2); const int R_size = target_ap.get_R_size(); assert(row_ap != -1 && col_ap != -1 && "Atom-pair not belong this process"); assert(R_size == 1); diff --git a/source/source_estate/module_dm/density_matrix_io.cpp b/source/source_estate/module_dm/density_matrix_io.cpp index d3f53aa241b..b345a628533 100644 --- a/source/source_estate/module_dm/density_matrix_io.cpp +++ b/source/source_estate/module_dm/density_matrix_io.cpp @@ -38,7 +38,7 @@ void DensityMatrix::init_DMR(const Grid_Driver* GridD_in, const UnitCell const int T2 = adjs.ntype[ad]; const int I2 = adjs.natom[ad]; int iat2 = ucell->itia2iat(T2, I2); - if (this->_paraV->get_row_size(iat1) <= 0 || this->_paraV->get_col_size(iat2) <= 0) + if (this->_paraV->get_nrow_atom(iat1) <= 0 || this->_paraV->get_ncol_atom(iat2) <= 0) { continue; } @@ -90,7 +90,7 @@ void DensityMatrix::init_DMR(Record_adj& ra, const UnitCell* ucell) const int T2 = ra.info[iat1][ad][3]; const int I2 = ra.info[iat1][ad][4]; int iat2 = ucell->itia2iat(T2, I2); - if (this->_paraV->get_row_size(iat1) <= 0 || this->_paraV->get_col_size(iat2) <= 0) + if (this->_paraV->get_nrow_atom(iat1) <= 0 || this->_paraV->get_ncol_atom(iat2) <= 0) { continue; } diff --git a/source/source_estate/module_dm/test/test_dm_R_init.cpp b/source/source_estate/module_dm/test/test_dm_R_init.cpp index 13c43657afb..022d9060f4b 100644 --- a/source/source_estate/module_dm/test/test_dm_R_init.cpp +++ b/source/source_estate/module_dm/test/test_dm_R_init.cpp @@ -113,8 +113,8 @@ TEST_F(DMTest, DMInit1) EXPECT_EQ(DM.get_DMR_pointer(1)->size_atom_pairs(), test_size * test_size); EXPECT_EQ(DM.get_DMR_pointer(1)->get_atom_pair(2, 2).get_atom_i(), 2); EXPECT_EQ(DM.get_DMR_pointer(1)->get_atom_pair(2, 2).get_atom_j(), 2); - EXPECT_EQ(DM.get_DMR_pointer(1)->get_atom_pair(2, 2).get_row_size(), paraV->get_row_size(2)); - EXPECT_EQ(DM.get_DMR_pointer(1)->get_atom_pair(2, 2).get_col_size(), paraV->get_col_size(2)); + EXPECT_EQ(DM.get_DMR_pointer(1)->get_atom_pair(2, 2).get_row_size(), paraV->get_nrow_atom(2)); + EXPECT_EQ(DM.get_DMR_pointer(1)->get_atom_pair(2, 2).get_col_size(), paraV->get_ncol_atom(2)); delete kv; } @@ -167,8 +167,8 @@ TEST_F(DMTest, DMInit2) EXPECT_EQ(DM.get_DMR_pointer(1)->size_atom_pairs(), test_size * test_size); EXPECT_EQ(DM.get_DMR_pointer(1)->get_atom_pair(2, 2).get_atom_i(), 2); EXPECT_EQ(DM.get_DMR_pointer(1)->get_atom_pair(2, 2).get_atom_j(), 2); - EXPECT_EQ(DM.get_DMR_pointer(1)->get_atom_pair(2, 2).get_row_size(), paraV->get_row_size(2)); - EXPECT_EQ(DM.get_DMR_pointer(1)->get_atom_pair(2, 2).get_col_size(), paraV->get_col_size(2)); + EXPECT_EQ(DM.get_DMR_pointer(1)->get_atom_pair(2, 2).get_row_size(), paraV->get_nrow_atom(2)); + EXPECT_EQ(DM.get_DMR_pointer(1)->get_atom_pair(2, 2).get_col_size(), paraV->get_ncol_atom(2)); // release memory delete kv; for (int iat1 = 0; iat1 < ucell.nat; iat1++) @@ -206,8 +206,8 @@ TEST_F(DMTest, DMInit3) EXPECT_EQ(DM1.get_DMR_pointer(2)->size_atom_pairs(), test_size * test_size); EXPECT_EQ(DM1.get_DMR_pointer(2)->get_atom_pair(2, 2).get_atom_i(), 2); EXPECT_EQ(DM1.get_DMR_pointer(1)->get_atom_pair(2, 2).get_atom_j(), 2); - EXPECT_EQ(DM1.get_DMR_pointer(1)->get_atom_pair(2, 2).get_row_size(), paraV->get_row_size(2)); - EXPECT_EQ(DM1.get_DMR_pointer(2)->get_atom_pair(2, 2).get_col_size(), paraV->get_col_size(2)); + EXPECT_EQ(DM1.get_DMR_pointer(1)->get_atom_pair(2, 2).get_row_size(), paraV->get_nrow_atom(2)); + EXPECT_EQ(DM1.get_DMR_pointer(2)->get_atom_pair(2, 2).get_col_size(), paraV->get_ncol_atom(2)); // delete kv; } @@ -242,7 +242,7 @@ TEST_F(DMTest, DMInit4) const int T2 = adjs.ntype[ad]; const int I2 = adjs.natom[ad]; int iat2 = ucell.itia2iat(T2, I2); - if (paraV->get_row_size(iat1) <= 0 || paraV->get_col_size(iat2) <= 0) + if (paraV->get_nrow_atom(iat1) <= 0 || paraV->get_ncol_atom(iat2) <= 0) { continue; } @@ -260,8 +260,8 @@ TEST_F(DMTest, DMInit4) EXPECT_EQ(DM.get_DMR_pointer(2)->size_atom_pairs(), test_size * test_size); EXPECT_EQ(DM.get_DMR_pointer(2)->get_atom_pair(2, 2).get_atom_i(), 2); EXPECT_EQ(DM.get_DMR_pointer(1)->get_atom_pair(2, 2).get_atom_j(), 2); - EXPECT_EQ(DM.get_DMR_pointer(1)->get_atom_pair(2, 2).get_row_size(), paraV->get_row_size(2)); - EXPECT_EQ(DM.get_DMR_pointer(2)->get_atom_pair(2, 2).get_col_size(), paraV->get_col_size(2)); + EXPECT_EQ(DM.get_DMR_pointer(1)->get_atom_pair(2, 2).get_row_size(), paraV->get_nrow_atom(2)); + EXPECT_EQ(DM.get_DMR_pointer(2)->get_atom_pair(2, 2).get_col_size(), paraV->get_ncol_atom(2)); // delete kv; } diff --git a/source/source_io/module_current/td_current_io.cpp b/source/source_io/module_current/td_current_io.cpp index b8e160bb3b4..06703d97117 100644 --- a/source/source_io/module_current/td_current_io.cpp +++ b/source/source_io/module_current/td_current_io.cpp @@ -126,9 +126,9 @@ void ModuleIO::write_current(const UnitCell& ucell, int row_ap = pv->atom_begin_row[iat1]; int col_ap = pv->atom_begin_col[iat2]; // get DMR - for (int mu = 0; mu < pv->get_row_size(iat1); ++mu) + for (int mu = 0; mu < pv->get_nrow_atom(iat1); ++mu) { - for (int nu = 0; nu < pv->get_col_size(iat2); ++nu) + for (int nu = 0; nu < pv->get_ncol_atom(iat2); ++nu) { std::complex dm2d1 = tmp_matrix->get_value(mu, nu); @@ -304,9 +304,9 @@ void ModuleIO::write_current_eachk(const UnitCell& ucell, int row_ap = pv->atom_begin_row[iat1]; int col_ap = pv->atom_begin_col[iat2]; // get DMR - for (int mu = 0; mu < pv->get_row_size(iat1); ++mu) + for (int mu = 0; mu < pv->get_nrow_atom(iat1); ++mu) { - for (int nu = 0; nu < pv->get_col_size(iat2); ++nu) + for (int nu = 0; nu < pv->get_ncol_atom(iat2); ++nu) { std::complex dm2d1 = tmp_matrix->get_value(mu, nu); diff --git a/source/source_io/module_current/td_current_io_comm.cpp b/source/source_io/module_current/td_current_io_comm.cpp index 17af32af882..a6386b2bcc0 100644 --- a/source/source_io/module_current/td_current_io_comm.cpp +++ b/source/source_io/module_current/td_current_io_comm.cpp @@ -67,7 +67,7 @@ void ModuleIO::init_from_adj(const UnitCell& ucell, const int T2 = adjs.ntype[ad1]; const int I2 = adjs.natom[ad1]; const int iat2 = ucell.itia2iat(T2, I2); - if (pv->get_row_size(iat1) <= 0 || pv->get_col_size(iat2) <= 0) + if (pv->get_nrow_atom(iat1) <= 0 || pv->get_ncol_atom(iat2) <= 0) { continue; } diff --git a/source/source_io/module_ml/io_npz.cpp b/source/source_io/module_ml/io_npz.cpp index 6933fba97a7..d8a9e368736 100644 --- a/source/source_io/module_ml/io_npz.cpp +++ b/source/source_io/module_ml/io_npz.cpp @@ -431,8 +431,8 @@ void output_mat_npz(const UnitCell& ucell, std::string& zipname, const hamilt::H if(atom_i > atom_j) continue; int start_i = serialV.atom_begin_row[atom_i]; int start_j = serialV.atom_begin_col[atom_j]; - int row_size = serialV.get_row_size(atom_i); - int col_size = serialV.get_col_size(atom_j); + int row_size = serialV.get_nrow_atom(atom_i); + int col_size = serialV.get_ncol_atom(atom_j); for(int iR=0;iR::initialize_FR(const Grid_Driver* GridD, const Parallel_Orbit const int T2 = adjs.ntype[ad]; const int I2 = adjs.natom[ad]; int iat2 = ucell->itia2iat(T2, I2); - if (paraV->get_row_size(iat1) <= 0 || paraV->get_col_size(iat2) <= 0) + if (paraV->get_nrow_atom(iat1) <= 0 || paraV->get_ncol_atom(iat2) <= 0) { continue; } diff --git a/source/source_io/module_wannier/to_wannier90_lcao.cpp b/source/source_io/module_wannier/to_wannier90_lcao.cpp index a26a8ce9033..89f0cbbd3a3 100644 --- a/source/source_io/module_wannier/to_wannier90_lcao.cpp +++ b/source/source_io/module_wannier/to_wannier90_lcao.cpp @@ -385,8 +385,8 @@ void toWannier90_LCAO::unkdotkb(const UnitCell& ucell, int atom_j = tmp_FR_container->get_atom_pair(iap).get_atom_j(); int start_i = ParaV->atom_begin_row[atom_i]; int start_j = ParaV->atom_begin_col[atom_j]; - int row_size = ParaV->get_row_size(atom_i); - int col_size = ParaV->get_col_size(atom_j); + int row_size = ParaV->get_nrow_atom(atom_i); + int col_size = ParaV->get_ncol_atom(atom_j); for (int iR = 0; iR < tmp_FR_container->get_atom_pair(iap).get_R_size(); ++iR) { auto& matrix = tmp_FR_container->get_atom_pair(iap).get_HR_values(iR); diff --git a/source/source_lcao/module_hcontainer/atom_pair.cpp b/source/source_lcao/module_hcontainer/atom_pair.cpp index d776c33e3cf..e460a95fcc7 100644 --- a/source/source_lcao/module_hcontainer/atom_pair.cpp +++ b/source/source_lcao/module_hcontainer/atom_pair.cpp @@ -28,8 +28,8 @@ AtomPair::AtomPair(const int& atom_i_, const int& atom_j_, const Parallel_Orb { throw std::string("Atom-pair not belong this process"); } - this->row_size = this->paraV->get_row_size(atom_i); - this->col_size = this->paraV->get_col_size(atom_j); + this->row_size = this->paraV->get_nrow_atom(atom_i); + this->col_size = this->paraV->get_ncol_atom(atom_j); this->R_index.resize(0); this->R_index.push_back(ModuleBase::Vector3(0, 0, 0)); this->current_R = 0; @@ -62,8 +62,8 @@ AtomPair::AtomPair(const int& atom_i_, { throw std::string("Atom-pair not belong this process"); } - this->row_size = this->paraV->get_row_size(atom_i); - this->col_size = this->paraV->get_col_size(atom_j); + this->row_size = this->paraV->get_nrow_atom(atom_i); + this->col_size = this->paraV->get_ncol_atom(atom_j); this->R_index.resize(0); this->R_index.push_back(ModuleBase::Vector3(rx, ry, rz)); this->current_R = 0; @@ -94,8 +94,8 @@ AtomPair::AtomPair(const int& atom_i_, { throw std::string("Atom-pair not belong this process"); } - this->row_size = this->paraV->get_row_size(atom_i); - this->col_size = this->paraV->get_col_size(atom_j); + this->row_size = this->paraV->get_nrow_atom(atom_i); + this->col_size = this->paraV->get_ncol_atom(atom_j); this->R_index.resize(0); this->R_index.push_back(ModuleBase::Vector3(R_index)); this->current_R = 0; diff --git a/source/source_lcao/module_hcontainer/hcontainer.cpp b/source/source_lcao/module_hcontainer/hcontainer.cpp index e1d1b909912..4c40aed9bbc 100644 --- a/source/source_lcao/module_hcontainer/hcontainer.cpp +++ b/source/source_lcao/module_hcontainer/hcontainer.cpp @@ -145,7 +145,7 @@ HContainer::HContainer(const UnitCell& ucell_, const Parallel_Orbitals* paraV for (int j = 0; j < ucell_.nat; j++) { //check if atom_pair(i, j) is empty in this process - if(paraV->get_row_size(i) <= 0 || paraV->get_col_size(j) <= 0) + if(paraV->get_nrow_atom(i) <= 0 || paraV->get_ncol_atom(j) <= 0) { continue; } diff --git a/source/source_lcao/module_hcontainer/read_hcontainer.cpp b/source/source_lcao/module_hcontainer/read_hcontainer.cpp index 6706374e2c2..51d40ad9f00 100644 --- a/source/source_lcao/module_hcontainer/read_hcontainer.cpp +++ b/source/source_lcao/module_hcontainer/read_hcontainer.cpp @@ -34,8 +34,8 @@ void Read_HContainer::read() pv_serial.set_atomic_trace(this->_ucell->get_iat2iwt(), this->_ucell->nat, this->_nlocal); for (int iat = 0; iat < natom; ++iat) { - int row_size = pv_serial.get_row_size(iat); - int col_size = pv_serial.get_col_size(iat); + int row_size = pv_serial.get_nrow_atom(iat); + int col_size = pv_serial.get_ncol_atom(iat); for (int i = 0; i < row_size; ++i) { atom_index_row.push_back(iat); diff --git a/source/source_lcao/module_hcontainer/transfer.cpp b/source/source_lcao/module_hcontainer/transfer.cpp index 9735a4376aa..9fd879525e8 100644 --- a/source/source_lcao/module_hcontainer/transfer.cpp +++ b/source/source_lcao/module_hcontainer/transfer.cpp @@ -46,8 +46,8 @@ void HTransPara::cal_orb_indexes(int irank, std::vector* orb_indexes) { int atom = this->atom_i_index[irank][i]; size_orb_indexes += 3; - size_orb_indexes += this->paraV->get_row_size(atom); - size_orb_indexes += this->paraV->get_col_size(atom); + size_orb_indexes += this->paraV->get_nrow_atom(atom); + size_orb_indexes += this->paraV->get_ncol_atom(atom); } orb_indexes->resize(size_orb_indexes); int* data = orb_indexes->data(); @@ -59,7 +59,7 @@ void HTransPara::cal_orb_indexes(int irank, std::vector* orb_indexes) // atom index *data++ = atom; // size of row for this atom - *data = this->paraV->get_row_size(atom); + *data = this->paraV->get_nrow_atom(atom); if (*data++ > 0) { // indexes of row for this atom @@ -70,7 +70,7 @@ void HTransPara::cal_orb_indexes(int irank, std::vector* orb_indexes) } } // size of col for this atom - *data = this->paraV->get_col_size(atom); + *data = this->paraV->get_ncol_atom(atom); if (*data++ > 0) { // indexes of col for this atom @@ -114,12 +114,12 @@ void HTransPara::receive_ap_indexes(int irank, const int* ap_indexes_in, cons const int atom_i = *ap_data++; atom_set.insert(atom_i); const int number_atom_j = *ap_data++; - const int size_row = this->paraV->get_row_size(atom_i); + const int size_row = this->paraV->get_nrow_atom(atom_i); for (int j = 0; j < number_atom_j; ++j) { const int atom_j = *ap_data++; atom_set.insert(atom_j); - const int size_col = this->paraV->get_col_size(atom_j); + const int size_col = this->paraV->get_ncol_atom(atom_j); const int number_R = *ap_data++; if (size_row > 0 && size_col > 0) { @@ -208,11 +208,11 @@ void HTransPara::pack_data(int irank, T* values) { const int atom_i = *ap_data++; const int number_atom_j = *ap_data++; - const int size_row = this->paraV->get_row_size(atom_i); + const int size_row = this->paraV->get_nrow_atom(atom_i); for (int j = 0; j < number_atom_j; ++j) { const int atom_j = *ap_data++; - const int size_col = this->paraV->get_col_size(atom_j); + const int size_col = this->paraV->get_ncol_atom(atom_j); const int number_R = *ap_data++; for (int k = 0; k < number_R; ++k) { @@ -252,12 +252,12 @@ void HTransPara::unpack_data(int irank, const T* values) for (int i = 0; i < number_atom; ++i) { const int atom_i = *ap_data++; - const int size_row = this->paraV->get_row_size(atom_i); + const int size_row = this->paraV->get_nrow_atom(atom_i); const int size_j = *ap_data++; for (int j = 0; j < size_j; ++j) { const int atom_j = *ap_data++; - const int size_col = this->paraV->get_col_size(atom_j); + const int size_col = this->paraV->get_ncol_atom(atom_j); const int number_R = *ap_data++; for (int k = 0; k < number_R; ++k) { diff --git a/source/source_lcao/module_lr/dm_trans/dmr_complex.cpp b/source/source_lcao/module_lr/dm_trans/dmr_complex.cpp index a973155c32c..0b65bc610d8 100644 --- a/source/source_lcao/module_lr/dm_trans/dmr_complex.cpp +++ b/source/source_lcao/module_lr/dm_trans/dmr_complex.cpp @@ -57,16 +57,16 @@ namespace elecstate + col_ap * this->_paraV->nrow + row_ap; // jump DMK to fill DMR // DMR is row-major, DMK is column-major - for (int mu = 0; mu < this->_paraV->get_row_size(iat1); ++mu) + for (int mu = 0; mu < this->_paraV->get_nrow_atom(iat1); ++mu) { - BlasConnector::axpy(this->_paraV->get_col_size(iat2), + BlasConnector::axpy(this->_paraV->get_ncol_atom(iat2), kphase, tmp_DMK_pointer, this->_paraV->get_row_size(), tmp_DMR_pointer, 1); tmp_DMK_pointer += 1; - tmp_DMR_pointer += this->_paraV->get_col_size(iat2); + tmp_DMR_pointer += this->_paraV->get_ncol_atom(iat2); } } } diff --git a/source/source_lcao/module_lr/utils/lr_util_hcontainer.h b/source/source_lcao/module_lr/utils/lr_util_hcontainer.h index d6a727d608b..e02c71ec125 100644 --- a/source/source_lcao/module_lr/utils/lr_util_hcontainer.h +++ b/source/source_lcao/module_lr/utils/lr_util_hcontainer.h @@ -66,7 +66,7 @@ namespace LR_Util const int T2 = adjs.ntype[ad]; const int I2 = adjs.natom[ad]; int iat2 = ucell.itia2iat(T2, I2); - if (pmat.get_row_size(iat1) <= 0 || pmat.get_col_size(iat2) <= 0) { continue; } + if (pmat.get_nrow_atom(iat1) <= 0 || pmat.get_ncol_atom(iat2) <= 0) { continue; } const ModuleBase::Vector3& R_index = adjs.box[ad]; if (ucell.cal_dtau(iat1, iat2, R_index).norm() * ucell.lat0 >= orb_cutoff[T1] + orb_cutoff[T2]) { continue; } hamilt::AtomPair tmp(iat1, iat2, R_index.x, R_index.y, R_index.z, &pmat); diff --git a/source/source_lcao/module_operator_lcao/deepks_lcao.cpp b/source/source_lcao/module_operator_lcao/deepks_lcao.cpp index 7255645cbb5..2c7d67ce752 100644 --- a/source/source_lcao/module_operator_lcao/deepks_lcao.cpp +++ b/source/source_lcao/module_operator_lcao/deepks_lcao.cpp @@ -111,7 +111,7 @@ void hamilt::DeePKS>::initialize_HR(const Grid_Driv const int I2 = adjs.natom[ad2]; const int iat2 = ucell->itia2iat(T2, I2); ModuleBase::Vector3& R_index2 = adjs.box[ad2]; - if (paraV->get_col_size(iat2) <= 0 || paraV->get_row_size(iat1) <= 0) + if (paraV->get_ncol_atom(iat2) <= 0 || paraV->get_nrow_atom(iat1) <= 0) { continue; } diff --git a/source/source_lcao/module_operator_lcao/dftu_lcao.cpp b/source/source_lcao/module_operator_lcao/dftu_lcao.cpp index 2b8e4f3506f..d05b812896f 100644 --- a/source/source_lcao/module_operator_lcao/dftu_lcao.cpp +++ b/source/source_lcao/module_operator_lcao/dftu_lcao.cpp @@ -495,7 +495,7 @@ void hamilt::DFTU>::cal_HR_IJR( { for (int is2 = 0; is2 < npol; is2++) { - step_trace[is * npol + is2] = paraV->get_col_size(iat2) * is + is2; + step_trace[is * npol + is2] = paraV->get_ncol_atom(iat2) * is + is2; } } // calculate the local matrix @@ -558,7 +558,7 @@ void hamilt::DFTU>::cal_occ(const int& iat1, { for (int is2 = 0; is2 < npol; is2++) { - step_trace[is * npol + is2] = paraV->get_col_size(iat2) * is + is2; + step_trace[is * npol + is2] = paraV->get_ncol_atom(iat2) * is + is2; } } // calculate the local matrix diff --git a/source/source_lcao/module_operator_lcao/dspin_lcao.cpp b/source/source_lcao/module_operator_lcao/dspin_lcao.cpp index 3983d6285e0..0fc1b40e6bb 100644 --- a/source/source_lcao/module_operator_lcao/dspin_lcao.cpp +++ b/source/source_lcao/module_operator_lcao/dspin_lcao.cpp @@ -417,7 +417,7 @@ void hamilt::DeltaSpin>::cal_HR_IJR(const int& iat1 { for (int is2 = 0; is2 < npol; is2++) { - step_trace[is * npol + is2] = this->paraV->get_col_size(iat2) * is + is2; + step_trace[is * npol + is2] = this->paraV->get_ncol_atom(iat2) * is + is2; } } // calculate the local matrix diff --git a/source/source_lcao/module_operator_lcao/ekinetic.cpp b/source/source_lcao/module_operator_lcao/ekinetic.cpp index 993b7d1ea2d..1ea63652f4e 100644 --- a/source/source_lcao/module_operator_lcao/ekinetic.cpp +++ b/source/source_lcao/module_operator_lcao/ekinetic.cpp @@ -65,7 +65,7 @@ void hamilt::EKinetic>::initialize_HR(const Grid_Dr const int T2 = adjs.ntype[ad1]; const int I2 = adjs.natom[ad1]; const int iat2 = ucell->itia2iat(T2, I2); - if (paraV->get_row_size(iat1) <= 0 || paraV->get_col_size(iat2) <= 0) + if (paraV->get_nrow_atom(iat1) <= 0 || paraV->get_ncol_atom(iat2) <= 0) { continue; } diff --git a/source/source_lcao/module_operator_lcao/nonlocal.cpp b/source/source_lcao/module_operator_lcao/nonlocal.cpp index 806a45e8d69..2de234e0752 100644 --- a/source/source_lcao/module_operator_lcao/nonlocal.cpp +++ b/source/source_lcao/module_operator_lcao/nonlocal.cpp @@ -94,7 +94,7 @@ void hamilt::Nonlocal>::initialize_HR(const Grid_Dr const int I2 = adjs.natom[ad2]; const int iat2 = ucell->itia2iat(T2, I2); ModuleBase::Vector3& R_index2 = adjs.box[ad2]; - if (paraV->get_col_size(iat2) <= 0 || paraV->get_row_size(iat1) <= 0) + if (paraV->get_ncol_atom(iat2) <= 0 || paraV->get_nrow_atom(iat1) <= 0) { continue; } diff --git a/source/source_lcao/module_operator_lcao/op_exx_lcao.hpp b/source/source_lcao/module_operator_lcao/op_exx_lcao.hpp index 8f6f0f832cd..fc7b5ef59bd 100644 --- a/source/source_lcao/module_operator_lcao/op_exx_lcao.hpp +++ b/source/source_lcao/module_operator_lcao/op_exx_lcao.hpp @@ -29,7 +29,7 @@ void reallocate_hcontainer(const std::vectorget_row_size(iat0) > 0 && pv->get_col_size(iat1) > 0) + if (pv->get_nrow_atom(iat0) > 0 && pv->get_ncol_atom(iat1) > 0) { const Abfs::Vector3_Order& R = RI_Util::array3_to_Vector3( (cell_nearest ? cell_nearest->get_cell_nearest_discrete(iat0, iat1, Htmp2.first.second) @@ -66,7 +66,7 @@ void reallocate_hcontainer(const int nat, { // complete the atom pairs that has orbitals in this processor but not in hR due to the adj_list // but adj_list is not enought for EXX, which is more nonlocal than Nonlocal - if (pv->get_row_size(iat0) > 0 && pv->get_col_size(iat1) > 0) + if (pv->get_nrow_atom(iat0) > 0 && pv->get_ncol_atom(iat1) > 0) { for (auto& cell: Rs) { diff --git a/source/source_lcao/module_operator_lcao/overlap.cpp b/source/source_lcao/module_operator_lcao/overlap.cpp index 023b909fa5e..7b4e65f2048 100644 --- a/source/source_lcao/module_operator_lcao/overlap.cpp +++ b/source/source_lcao/module_operator_lcao/overlap.cpp @@ -54,7 +54,7 @@ void populate_atom_pairs(hamilt::HContainer* container, const int iat2 = ucell->itia2iat(T2, I2); // Skip if atom pair has no local orbitals in parallel distribution - if (paraV->get_row_size(iat1) <= 0 || paraV->get_col_size(iat2) <= 0) + if (paraV->get_nrow_atom(iat1) <= 0 || paraV->get_ncol_atom(iat2) <= 0) { continue; } diff --git a/source/source_lcao/module_operator_lcao/td_ekinetic_lcao.cpp b/source/source_lcao/module_operator_lcao/td_ekinetic_lcao.cpp index ed841346a37..a9f8c954313 100644 --- a/source/source_lcao/module_operator_lcao/td_ekinetic_lcao.cpp +++ b/source/source_lcao/module_operator_lcao/td_ekinetic_lcao.cpp @@ -264,7 +264,7 @@ void TDEkinetic>::initialize_HR(const Grid_Driver* GridD) const int T2 = adjs.ntype[ad1]; const int I2 = adjs.natom[ad1]; const int iat2 = ucell->itia2iat(T2, I2); - if (paraV->get_row_size(iat1) <= 0 || paraV->get_col_size(iat2) <= 0) + if (paraV->get_nrow_atom(iat1) <= 0 || paraV->get_ncol_atom(iat2) <= 0) { continue; } diff --git a/source/source_lcao/module_operator_lcao/td_pot_hybrid.cpp b/source/source_lcao/module_operator_lcao/td_pot_hybrid.cpp index 015af41fec1..98e71124345 100644 --- a/source/source_lcao/module_operator_lcao/td_pot_hybrid.cpp +++ b/source/source_lcao/module_operator_lcao/td_pot_hybrid.cpp @@ -69,7 +69,7 @@ void hamilt::TD_pot_hybrid>::initialize_HR(const Gr const int T2 = adjs.ntype[ad1]; const int I2 = adjs.natom[ad1]; const int iat2 = ucell->itia2iat(T2, I2); - if (paraV->get_row_size(iat1) <= 0 || paraV->get_col_size(iat2) <= 0) + if (paraV->get_nrow_atom(iat1) <= 0 || paraV->get_ncol_atom(iat2) <= 0) { continue; } diff --git a/source/source_lcao/module_operator_lcao/veff_lcao.cpp b/source/source_lcao/module_operator_lcao/veff_lcao.cpp index 27d2ff6c19d..15dbdc44e80 100644 --- a/source/source_lcao/module_operator_lcao/veff_lcao.cpp +++ b/source/source_lcao/module_operator_lcao/veff_lcao.cpp @@ -33,7 +33,7 @@ void Veff>::initialize_HR(const UnitCell* ucell_in, const G const int T2 = adjs.ntype[ad1]; const int I2 = adjs.natom[ad1]; const int iat2 = ucell_in->itia2iat(T2, I2); - if (paraV->get_row_size(iat1) <= 0 || paraV->get_col_size(iat2) <= 0) + if (paraV->get_nrow_atom(iat1) <= 0 || paraV->get_ncol_atom(iat2) <= 0) { continue; } diff --git a/source/source_lcao/module_rdmft/rdmft_tools.cpp b/source/source_lcao/module_rdmft/rdmft_tools.cpp index 081ca8b21ae..a09d18f0a30 100644 --- a/source/source_lcao/module_rdmft/rdmft_tools.cpp +++ b/source/source_lcao/module_rdmft/rdmft_tools.cpp @@ -212,7 +212,7 @@ void Veff_rdmft::initialize_HR(const UnitCell* ucell_in, const Grid_Driv const int T2 = adjs.ntype[ad1]; const int I2 = adjs.natom[ad1]; const int iat2 = ucell_in->itia2iat(T2, I2); - if (paraV->get_row_size(iat1) <= 0 || paraV->get_col_size(iat2) <= 0) + if (paraV->get_nrow_atom(iat1) <= 0 || paraV->get_ncol_atom(iat2) <= 0) { continue; } diff --git a/source/source_lcao/module_ri/module_exx_symmetry/symmetry_rotation.cpp b/source/source_lcao/module_ri/module_exx_symmetry/symmetry_rotation.cpp index 7d9a39e38c0..21ba1e05f04 100644 --- a/source/source_lcao/module_ri/module_exx_symmetry/symmetry_rotation.cpp +++ b/source/source_lcao/module_ri/module_exx_symmetry/symmetry_rotation.cpp @@ -454,7 +454,7 @@ namespace ModuleSymmetry const int it2 = adjs.ntype[ad]; const int ia2 = adjs.natom[ad]; int iat2 = ucell.itia2iat(it2, ia2); - if (pv.get_row_size(iat1) && pv.get_col_size(iat2)) + if (pv.get_nrow_atom(iat1) && pv.get_ncol_atom(iat2)) { const ModuleBase::Vector3& R_index = adjs.box[ad]; if (ucell.cal_dtau(iat1, iat2, R_index).norm() * ucell.lat0 diff --git a/source/source_lcao/module_ri/module_exx_symmetry/symmetry_rotation_R_hcontainer.hpp b/source/source_lcao/module_ri/module_exx_symmetry/symmetry_rotation_R_hcontainer.hpp index 609bb19899e..8c32a16a7f6 100644 --- a/source/source_lcao/module_ri/module_exx_symmetry/symmetry_rotation_R_hcontainer.hpp +++ b/source/source_lcao/module_ri/module_exx_symmetry/symmetry_rotation_R_hcontainer.hpp @@ -27,9 +27,9 @@ namespace ModuleSymmetry inline void print_atompair_local(const Parallel_Orbitals& pv, const int iat1, const int iat2, const TR* tlocal, const std::string name) { GlobalV::ofs_running << name << std::endl; - for (int i = 0;i < pv.get_row_size(iat1);++i) + for (int i = 0;i < pv.get_nrow_atom(iat1);++i) { - for (int j = 0;j < pv.get_col_size(iat2);++j) GlobalV::ofs_running << tlocal[j + i * pv.get_col_size(iat2)] << " "; + for (int j = 0;j < pv.get_ncol_atom(iat2);++j) GlobalV::ofs_running << tlocal[j + i * pv.get_ncol_atom(iat2)] << " "; GlobalV::ofs_running << "\n"; } } @@ -110,10 +110,10 @@ namespace ModuleSymmetry int abr1 = pv.atom_begin_row[iat1], abc2 = pv.atom_begin_col[iat2]; if (abr1 >= 0 && abc2 >= 0) { // "pv.local2global_row(i) - iw1start": global index in current atom pair - for (int j = 0;j < pv.get_col_size(iat2);++j) - for (int i = 0;i < pv.get_row_size(iat1);++i) + for (int j = 0;j < pv.get_ncol_atom(iat2);++j) + for (int i = 0;i < pv.get_nrow_atom(iat1);++i) A[(pv.local2global_row(i + abr1) - iw1start) * atoms[it2].nw + (pv.local2global_col(j + abc2) - iw2start)] - = Alocal_in[j + i * pv.get_col_size(iat2)]; + = Alocal_in[j + i * pv.get_ncol_atom(iat2)]; } if (output) print_global(A.data(), atoms[it1].nw, atoms[it2].nw, "A before allreduce"); Parallel_Reduce::reduce_all(A.data(), A.size()); @@ -156,9 +156,9 @@ namespace ModuleSymmetry iw2start = atoms[it2].stapos_wf + ia2 * atoms[it2].nw; if (abr1 >= 0 && abc2 >= 0) {// ap_in index for TAT but ap_out index for Alocal_out - for (int j = 0;j < pv.get_col_size(iat2);++j) - for (int i = 0;i < pv.get_row_size(iat1);++i) - Alocal_out[j + i * pv.get_col_size(iat2)] + for (int j = 0;j < pv.get_ncol_atom(iat2);++j) + for (int i = 0;i < pv.get_nrow_atom(iat1);++i) + Alocal_out[j + i * pv.get_ncol_atom(iat2)] = TAT[(pv.local2global_row(i + abr1) - iw1start) * atoms[it2].nw + (pv.local2global_col(j + abc2) - iw2start)]; } } @@ -203,7 +203,7 @@ namespace ModuleSymmetry { // out-of-range R can be added to irreducible sector to be calculated, but not in this test for lack of reference TR* irptr = irap.get_HR_values(R[0], R[1], R[2]).get_pointer(); TR* ptr = ap_full.get_HR_values(R[0], R[1], R[2]).get_pointer(); - std::copy(ptr, ptr + pv->get_row_size(iat1) * pv->get_col_size(iat2), irptr); + std::copy(ptr, ptr + pv->get_nrow_atom(iat1) * pv->get_ncol_atom(iat2), irptr); } } diff --git a/source/source_lcao/module_rt/boundary_fix.cpp b/source/source_lcao/module_rt/boundary_fix.cpp index 8e09eaeedf9..7629a7177f4 100644 --- a/source/source_lcao/module_rt/boundary_fix.cpp +++ b/source/source_lcao/module_rt/boundary_fix.cpp @@ -57,7 +57,7 @@ void boundary_shift_mat(const std::complex& 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(); - for(size_t nu = 0; nu < pv->get_col_size(iat); ++nu) + for(size_t nu = 0; nu < pv->get_ncol_atom(iat); ++nu) { BlasConnector::scal(pv->get_row_size(), @@ -67,7 +67,7 @@ void boundary_shift_mat(const std::complex& phase, p_matkc += pv->get_row_size(); } std::complex* p_matkr = matk + row0; - for(size_t mu = 0; mu < pv->get_row_size(iat); ++mu) + for(size_t mu = 0; mu < pv->get_nrow_atom(iat); ++mu) { BlasConnector::scal(pv->get_col_size(), phase_conj, @@ -86,7 +86,7 @@ void boundary_shift_c(const std::complex& phase, const std::complex phase_conj = std::conj(phase); size_t row0 = pv->atom_begin_row[iat]; std::complex* p_ck = psi_k_last + row0; - for(size_t nu = 0; nu < pv->get_row_size(iat); ++nu) + for(size_t nu = 0; nu < pv->get_nrow_atom(iat); ++nu) { BlasConnector::scal(pv->ncol_bands, phase_conj, diff --git a/source/source_lcao/module_rt/velocity_op.cpp b/source/source_lcao/module_rt/velocity_op.cpp index 157c56a2bd6..d27ffcb7099 100644 --- a/source/source_lcao/module_rt/velocity_op.cpp +++ b/source/source_lcao/module_rt/velocity_op.cpp @@ -90,7 +90,7 @@ void Velocity_op::initialize_vcomm_r(const Grid_Driver* GridD, const Paralle const int I2 = adjs.natom[ad2]; const int iat2 = ucell->itia2iat(T2, I2); ModuleBase::Vector3& R_index2 = adjs.box[ad2]; - if (paraV->get_col_size(iat2) <= 0 || paraV->get_row_size(iat1) <= 0) + if (paraV->get_ncol_atom(iat2) <= 0 || paraV->get_nrow_atom(iat1) <= 0) { continue; } @@ -139,7 +139,7 @@ void Velocity_op::initialize_grad_term(const Grid_Driver* GridD, const Paral const int T2 = adjs.ntype[ad1]; const int I2 = adjs.natom[ad1]; const int iat2 = ucell->itia2iat(T2, I2); - if (paraV->get_row_size(iat1) <= 0 || paraV->get_col_size(iat2) <= 0) + if (paraV->get_nrow_atom(iat1) <= 0 || paraV->get_ncol_atom(iat2) <= 0) { continue; } diff --git a/source/source_lcao/pulay_fs_temp.hpp b/source/source_lcao/pulay_fs_temp.hpp index 2a35e7d836f..d220d3f75a1 100644 --- a/source/source_lcao/pulay_fs_temp.hpp +++ b/source/source_lcao/pulay_fs_temp.hpp @@ -75,15 +75,15 @@ namespace PulayForceStress double Ry = ra->info[iat][cb][1]; double Rz = ra->info[iat][cb][2]; // get BaseMatrix - if (pv.get_row_size(iat1) <= 0 || pv.get_col_size(iat2) <= 0) { continue; } + if (pv.get_nrow_atom(iat1) <= 0 || pv.get_ncol_atom(iat2) <= 0) { continue; } std::vector*> tmp_matrix; for (int is = 0; is < nspin_DMR; ++is) { tmp_matrix.push_back(dm.get_DMR_pointer(is + 1)->find_matrix(iat1, iat2, Rx, Ry, Rz)); } - for (int mu = 0; mu < pv.get_row_size(iat1); ++mu) + for (int mu = 0; mu < pv.get_nrow_atom(iat1); ++mu) { - for (int nu = 0; nu < pv.get_col_size(iat2); ++nu) + for (int nu = 0; nu < pv.get_ncol_atom(iat2); ++nu) { // the DMR should not be summed over spin, do the summation here double dm2d1 = 0.0; diff --git a/source/source_lcao/spar_hsr.cpp b/source/source_lcao/spar_hsr.cpp index 64ef1ca8237..218616a5a1e 100644 --- a/source/source_lcao/spar_hsr.cpp +++ b/source/source_lcao/spar_hsr.cpp @@ -84,8 +84,8 @@ void sparse_format::cal_HContainer(const Parallel_Orbitals& pv, int atom_j = hR.get_atom_pair(iap).get_atom_j(); int start_i = pv.atom_begin_row[atom_i]; int start_j = pv.atom_begin_col[atom_j]; - int row_size = pv.get_row_size(atom_i); - int col_size = pv.get_col_size(atom_j); + int row_size = pv.get_nrow_atom(atom_i); + int col_size = pv.get_ncol_atom(atom_j); for (int iR = 0; iR < hR.get_atom_pair(iap).get_R_size(); ++iR) { auto& matrix = hR.get_atom_pair(iap).get_HR_values(iR); From 8993c2a30c487947069afc9633caca51748014a7 Mon Sep 17 00:00:00 2001 From: abacus_fixer Date: Thu, 18 Jun 2026 09:49:27 +0800 Subject: [PATCH 07/15] add a new function paraV->is_invalid_atom_pair(iat1, iat2) --- source/source_estate/module_dm/density_matrix_io.cpp | 4 ++-- source/source_estate/module_dm/test/test_dm_R_init.cpp | 2 +- source/source_io/module_current/td_current_io_comm.cpp | 2 +- source/source_io/module_wannier/fR_overlap.cpp | 2 +- source/source_lcao/module_hcontainer/hcontainer.cpp | 2 +- source/source_lcao/module_lr/utils/lr_util_hcontainer.h | 2 +- source/source_lcao/module_operator_lcao/deepks_lcao.cpp | 2 +- source/source_lcao/module_operator_lcao/ekinetic.cpp | 2 +- source/source_lcao/module_operator_lcao/nonlocal.cpp | 2 +- source/source_lcao/module_operator_lcao/overlap.cpp | 2 +- source/source_lcao/module_operator_lcao/td_ekinetic_lcao.cpp | 2 +- source/source_lcao/module_operator_lcao/td_pot_hybrid.cpp | 2 +- source/source_lcao/module_operator_lcao/veff_lcao.cpp | 2 +- source/source_lcao/module_rdmft/rdmft_tools.cpp | 2 +- source/source_lcao/module_rt/velocity_op.cpp | 4 ++-- source/source_lcao/pulay_fs_temp.hpp | 2 +- 16 files changed, 18 insertions(+), 18 deletions(-) diff --git a/source/source_estate/module_dm/density_matrix_io.cpp b/source/source_estate/module_dm/density_matrix_io.cpp index b345a628533..fde9769da4e 100644 --- a/source/source_estate/module_dm/density_matrix_io.cpp +++ b/source/source_estate/module_dm/density_matrix_io.cpp @@ -38,7 +38,7 @@ void DensityMatrix::init_DMR(const Grid_Driver* GridD_in, const UnitCell const int T2 = adjs.ntype[ad]; const int I2 = adjs.natom[ad]; int iat2 = ucell->itia2iat(T2, I2); - if (this->_paraV->get_nrow_atom(iat1) <= 0 || this->_paraV->get_ncol_atom(iat2) <= 0) + if (this->_paraV->is_invalid_atom_pair(iat1, iat2)) { continue; } @@ -90,7 +90,7 @@ void DensityMatrix::init_DMR(Record_adj& ra, const UnitCell* ucell) const int T2 = ra.info[iat1][ad][3]; const int I2 = ra.info[iat1][ad][4]; int iat2 = ucell->itia2iat(T2, I2); - if (this->_paraV->get_nrow_atom(iat1) <= 0 || this->_paraV->get_ncol_atom(iat2) <= 0) + if (this->_paraV->is_invalid_atom_pair(iat1, iat2)) { continue; } diff --git a/source/source_estate/module_dm/test/test_dm_R_init.cpp b/source/source_estate/module_dm/test/test_dm_R_init.cpp index 022d9060f4b..07218bb97c8 100644 --- a/source/source_estate/module_dm/test/test_dm_R_init.cpp +++ b/source/source_estate/module_dm/test/test_dm_R_init.cpp @@ -242,7 +242,7 @@ TEST_F(DMTest, DMInit4) const int T2 = adjs.ntype[ad]; const int I2 = adjs.natom[ad]; int iat2 = ucell.itia2iat(T2, I2); - if (paraV->get_nrow_atom(iat1) <= 0 || paraV->get_ncol_atom(iat2) <= 0) + if (paraV->is_invalid_atom_pair(iat1, iat2)) { continue; } diff --git a/source/source_io/module_current/td_current_io_comm.cpp b/source/source_io/module_current/td_current_io_comm.cpp index a6386b2bcc0..b987643d49a 100644 --- a/source/source_io/module_current/td_current_io_comm.cpp +++ b/source/source_io/module_current/td_current_io_comm.cpp @@ -67,7 +67,7 @@ void ModuleIO::init_from_adj(const UnitCell& ucell, const int T2 = adjs.ntype[ad1]; const int I2 = adjs.natom[ad1]; const int iat2 = ucell.itia2iat(T2, I2); - if (pv->get_nrow_atom(iat1) <= 0 || pv->get_ncol_atom(iat2) <= 0) + if (pv->is_invalid_atom_pair(iat1, iat2)) { continue; } diff --git a/source/source_io/module_wannier/fR_overlap.cpp b/source/source_io/module_wannier/fR_overlap.cpp index 5d6c70d4577..6d4c4252c0a 100644 --- a/source/source_io/module_wannier/fR_overlap.cpp +++ b/source/source_io/module_wannier/fR_overlap.cpp @@ -84,7 +84,7 @@ void FR_overlap::initialize_FR(const Grid_Driver* GridD, const Parallel_Orbit const int T2 = adjs.ntype[ad]; const int I2 = adjs.natom[ad]; int iat2 = ucell->itia2iat(T2, I2); - if (paraV->get_nrow_atom(iat1) <= 0 || paraV->get_ncol_atom(iat2) <= 0) + if (paraV->is_invalid_atom_pair(iat1, iat2)) { continue; } diff --git a/source/source_lcao/module_hcontainer/hcontainer.cpp b/source/source_lcao/module_hcontainer/hcontainer.cpp index 4c40aed9bbc..44430a3c418 100644 --- a/source/source_lcao/module_hcontainer/hcontainer.cpp +++ b/source/source_lcao/module_hcontainer/hcontainer.cpp @@ -145,7 +145,7 @@ HContainer::HContainer(const UnitCell& ucell_, const Parallel_Orbitals* paraV for (int j = 0; j < ucell_.nat; j++) { //check if atom_pair(i, j) is empty in this process - if(paraV->get_nrow_atom(i) <= 0 || paraV->get_ncol_atom(j) <= 0) + if(paraV->is_invalid_atom_pair(i, j)) { continue; } diff --git a/source/source_lcao/module_lr/utils/lr_util_hcontainer.h b/source/source_lcao/module_lr/utils/lr_util_hcontainer.h index e02c71ec125..6b4ee697e5d 100644 --- a/source/source_lcao/module_lr/utils/lr_util_hcontainer.h +++ b/source/source_lcao/module_lr/utils/lr_util_hcontainer.h @@ -66,7 +66,7 @@ namespace LR_Util const int T2 = adjs.ntype[ad]; const int I2 = adjs.natom[ad]; int iat2 = ucell.itia2iat(T2, I2); - if (pmat.get_nrow_atom(iat1) <= 0 || pmat.get_ncol_atom(iat2) <= 0) { continue; } + if (pmat.is_invalid_atom_pair(iat1, iat2)) { continue; } const ModuleBase::Vector3& R_index = adjs.box[ad]; if (ucell.cal_dtau(iat1, iat2, R_index).norm() * ucell.lat0 >= orb_cutoff[T1] + orb_cutoff[T2]) { continue; } hamilt::AtomPair tmp(iat1, iat2, R_index.x, R_index.y, R_index.z, &pmat); diff --git a/source/source_lcao/module_operator_lcao/deepks_lcao.cpp b/source/source_lcao/module_operator_lcao/deepks_lcao.cpp index 2c7d67ce752..425323eb67c 100644 --- a/source/source_lcao/module_operator_lcao/deepks_lcao.cpp +++ b/source/source_lcao/module_operator_lcao/deepks_lcao.cpp @@ -111,7 +111,7 @@ void hamilt::DeePKS>::initialize_HR(const Grid_Driv const int I2 = adjs.natom[ad2]; const int iat2 = ucell->itia2iat(T2, I2); ModuleBase::Vector3& R_index2 = adjs.box[ad2]; - if (paraV->get_ncol_atom(iat2) <= 0 || paraV->get_nrow_atom(iat1) <= 0) + if (paraV->is_invalid_atom_pair(iat1, iat2)) { continue; } diff --git a/source/source_lcao/module_operator_lcao/ekinetic.cpp b/source/source_lcao/module_operator_lcao/ekinetic.cpp index 1ea63652f4e..4639a38ee64 100644 --- a/source/source_lcao/module_operator_lcao/ekinetic.cpp +++ b/source/source_lcao/module_operator_lcao/ekinetic.cpp @@ -65,7 +65,7 @@ void hamilt::EKinetic>::initialize_HR(const Grid_Dr const int T2 = adjs.ntype[ad1]; const int I2 = adjs.natom[ad1]; const int iat2 = ucell->itia2iat(T2, I2); - if (paraV->get_nrow_atom(iat1) <= 0 || paraV->get_ncol_atom(iat2) <= 0) + if (paraV->is_invalid_atom_pair(iat1, iat2)) { continue; } diff --git a/source/source_lcao/module_operator_lcao/nonlocal.cpp b/source/source_lcao/module_operator_lcao/nonlocal.cpp index 2de234e0752..b2214d3d0e6 100644 --- a/source/source_lcao/module_operator_lcao/nonlocal.cpp +++ b/source/source_lcao/module_operator_lcao/nonlocal.cpp @@ -94,7 +94,7 @@ void hamilt::Nonlocal>::initialize_HR(const Grid_Dr const int I2 = adjs.natom[ad2]; const int iat2 = ucell->itia2iat(T2, I2); ModuleBase::Vector3& R_index2 = adjs.box[ad2]; - if (paraV->get_ncol_atom(iat2) <= 0 || paraV->get_nrow_atom(iat1) <= 0) + if (paraV->is_invalid_atom_pair(iat1, iat2)) { continue; } diff --git a/source/source_lcao/module_operator_lcao/overlap.cpp b/source/source_lcao/module_operator_lcao/overlap.cpp index 7b4e65f2048..ebb7a1ed44b 100644 --- a/source/source_lcao/module_operator_lcao/overlap.cpp +++ b/source/source_lcao/module_operator_lcao/overlap.cpp @@ -54,7 +54,7 @@ void populate_atom_pairs(hamilt::HContainer* container, const int iat2 = ucell->itia2iat(T2, I2); // Skip if atom pair has no local orbitals in parallel distribution - if (paraV->get_nrow_atom(iat1) <= 0 || paraV->get_ncol_atom(iat2) <= 0) + if (paraV->is_invalid_atom_pair(iat1, iat2)) { continue; } diff --git a/source/source_lcao/module_operator_lcao/td_ekinetic_lcao.cpp b/source/source_lcao/module_operator_lcao/td_ekinetic_lcao.cpp index a9f8c954313..7607b7ed9ec 100644 --- a/source/source_lcao/module_operator_lcao/td_ekinetic_lcao.cpp +++ b/source/source_lcao/module_operator_lcao/td_ekinetic_lcao.cpp @@ -264,7 +264,7 @@ void TDEkinetic>::initialize_HR(const Grid_Driver* GridD) const int T2 = adjs.ntype[ad1]; const int I2 = adjs.natom[ad1]; const int iat2 = ucell->itia2iat(T2, I2); - if (paraV->get_nrow_atom(iat1) <= 0 || paraV->get_ncol_atom(iat2) <= 0) + if (paraV->is_invalid_atom_pair(iat1, iat2)) { continue; } diff --git a/source/source_lcao/module_operator_lcao/td_pot_hybrid.cpp b/source/source_lcao/module_operator_lcao/td_pot_hybrid.cpp index 98e71124345..7037ddfbf9f 100644 --- a/source/source_lcao/module_operator_lcao/td_pot_hybrid.cpp +++ b/source/source_lcao/module_operator_lcao/td_pot_hybrid.cpp @@ -69,7 +69,7 @@ void hamilt::TD_pot_hybrid>::initialize_HR(const Gr const int T2 = adjs.ntype[ad1]; const int I2 = adjs.natom[ad1]; const int iat2 = ucell->itia2iat(T2, I2); - if (paraV->get_nrow_atom(iat1) <= 0 || paraV->get_ncol_atom(iat2) <= 0) + if (paraV->is_invalid_atom_pair(iat1, iat2)) { continue; } diff --git a/source/source_lcao/module_operator_lcao/veff_lcao.cpp b/source/source_lcao/module_operator_lcao/veff_lcao.cpp index 15dbdc44e80..197b529f8f7 100644 --- a/source/source_lcao/module_operator_lcao/veff_lcao.cpp +++ b/source/source_lcao/module_operator_lcao/veff_lcao.cpp @@ -33,7 +33,7 @@ void Veff>::initialize_HR(const UnitCell* ucell_in, const G const int T2 = adjs.ntype[ad1]; const int I2 = adjs.natom[ad1]; const int iat2 = ucell_in->itia2iat(T2, I2); - if (paraV->get_nrow_atom(iat1) <= 0 || paraV->get_ncol_atom(iat2) <= 0) + if (paraV->is_invalid_atom_pair(iat1, iat2)) { continue; } diff --git a/source/source_lcao/module_rdmft/rdmft_tools.cpp b/source/source_lcao/module_rdmft/rdmft_tools.cpp index a09d18f0a30..34d6cf55e87 100644 --- a/source/source_lcao/module_rdmft/rdmft_tools.cpp +++ b/source/source_lcao/module_rdmft/rdmft_tools.cpp @@ -212,7 +212,7 @@ void Veff_rdmft::initialize_HR(const UnitCell* ucell_in, const Grid_Driv const int T2 = adjs.ntype[ad1]; const int I2 = adjs.natom[ad1]; const int iat2 = ucell_in->itia2iat(T2, I2); - if (paraV->get_nrow_atom(iat1) <= 0 || paraV->get_ncol_atom(iat2) <= 0) + if (paraV->is_invalid_atom_pair(iat1, iat2)) { continue; } diff --git a/source/source_lcao/module_rt/velocity_op.cpp b/source/source_lcao/module_rt/velocity_op.cpp index d27ffcb7099..bb0476bcb8a 100644 --- a/source/source_lcao/module_rt/velocity_op.cpp +++ b/source/source_lcao/module_rt/velocity_op.cpp @@ -90,7 +90,7 @@ void Velocity_op::initialize_vcomm_r(const Grid_Driver* GridD, const Paralle const int I2 = adjs.natom[ad2]; const int iat2 = ucell->itia2iat(T2, I2); ModuleBase::Vector3& R_index2 = adjs.box[ad2]; - if (paraV->get_ncol_atom(iat2) <= 0 || paraV->get_nrow_atom(iat1) <= 0) + if (paraV->is_invalid_atom_pair(iat1, iat2)) { continue; } @@ -139,7 +139,7 @@ void Velocity_op::initialize_grad_term(const Grid_Driver* GridD, const Paral const int T2 = adjs.ntype[ad1]; const int I2 = adjs.natom[ad1]; const int iat2 = ucell->itia2iat(T2, I2); - if (paraV->get_nrow_atom(iat1) <= 0 || paraV->get_ncol_atom(iat2) <= 0) + if (paraV->is_invalid_atom_pair(iat1, iat2)) { continue; } diff --git a/source/source_lcao/pulay_fs_temp.hpp b/source/source_lcao/pulay_fs_temp.hpp index d220d3f75a1..7d222318f95 100644 --- a/source/source_lcao/pulay_fs_temp.hpp +++ b/source/source_lcao/pulay_fs_temp.hpp @@ -75,7 +75,7 @@ namespace PulayForceStress double Ry = ra->info[iat][cb][1]; double Rz = ra->info[iat][cb][2]; // get BaseMatrix - if (pv.get_nrow_atom(iat1) <= 0 || pv.get_ncol_atom(iat2) <= 0) { continue; } + if (pv.is_invalid_atom_pair(iat1, iat2)) { continue; } std::vector*> tmp_matrix; for (int is = 0; is < nspin_DMR; ++is) { From 4a6c74c682d35810f67ada45a0db95cceaac3654 Mon Sep 17 00:00:00 2001 From: abacus_fixer Date: Thu, 18 Jun 2026 09:52:15 +0800 Subject: [PATCH 08/15] add the function --- source/source_basis/module_ao/parallel_orbitals.cpp | 5 +++++ source/source_basis/module_ao/parallel_orbitals.h | 2 ++ 2 files changed, 7 insertions(+) diff --git a/source/source_basis/module_ao/parallel_orbitals.cpp b/source/source_basis/module_ao/parallel_orbitals.cpp index 51e92b93d00..d08df8aa4ec 100644 --- a/source/source_basis/module_ao/parallel_orbitals.cpp +++ b/source/source_basis/module_ao/parallel_orbitals.cpp @@ -129,6 +129,11 @@ int Parallel_Orbitals::get_nrow_atom(int iat) const throw std::string("error in get_nrow_atom(iat)"); } +bool Parallel_Orbitals::is_invalid_atom_pair(int iat1, int iat2) const +{ + return get_nrow_atom(iat1) <= 0 || get_ncol_atom(iat2) <= 0; +} + // Get the global indexes of the rows of the parallel orbital matrix std::vector Parallel_Orbitals::get_indexes_row() const { diff --git a/source/source_basis/module_ao/parallel_orbitals.h b/source/source_basis/module_ao/parallel_orbitals.h index f9d08e757f5..aecde685b5a 100644 --- a/source/source_basis/module_ao/parallel_orbitals.h +++ b/source/source_basis/module_ao/parallel_orbitals.h @@ -74,6 +74,8 @@ class Parallel_Orbitals : public Parallel_2D int get_ncol_atom(int iat) const; int get_nrow_atom(int iat) const; + bool is_invalid_atom_pair(int iat1, int iat2) const; + int get_nbands() const; int nbands; From 5f5d6e4019ede1b21352f56a7560c22e5f05ee5b Mon Sep 17 00:00:00 2001 From: abacus_fixer Date: Thu, 18 Jun 2026 12:57:41 +0800 Subject: [PATCH 09/15] update --- source/source_base/parallel_reduce.cpp | 16 ---- source/source_base/parallel_reduce.h | 4 - .../test_parallel/parallel_reduce_test.cpp | 93 +------------------ 3 files changed, 2 insertions(+), 111 deletions(-) diff --git a/source/source_base/parallel_reduce.cpp b/source/source_base/parallel_reduce.cpp index bf72a25e2ea..eaafd7bf6ca 100644 --- a/source/source_base/parallel_reduce.cpp +++ b/source/source_base/parallel_reduce.cpp @@ -118,22 +118,6 @@ template void Parallel_Reduce::reduce_max(double&); template void Parallel_Reduce::reduce_min_pool(const int&, double&); template void Parallel_Reduce::reduce_max_pool(const int&, double&); -void Parallel_Reduce::reduce_int_diag(int& object) -{ -#ifdef __MPI - MPI_Allreduce(MPI_IN_PLACE, &object, 1, MPI_INT, MPI_SUM, DIAG_WORLD); -#endif - return; -} - -void Parallel_Reduce::reduce_int_grid(int* object, const int n) -{ -#ifdef __MPI - MPI_Allreduce(MPI_IN_PLACE, object, n, MPI_INT, MPI_SUM, GRID_WORLD); -#endif - return; -} - void Parallel_Reduce::reduce_double_grid(double* object, const int n) { #ifdef __MPI diff --git a/source/source_base/parallel_reduce.h b/source/source_base/parallel_reduce.h index f5e9b30987a..9211f208a61 100644 --- a/source/source_base/parallel_reduce.h +++ b/source/source_base/parallel_reduce.h @@ -70,10 +70,6 @@ void reduce_min_pool(const int& nproc_in_pool, T& v); template void reduce_max_pool(const int& nproc_in_pool, T& v); -void reduce_int_diag(int& object); // mohan add 2012-01-12 - -void reduce_int_grid(int* object, const int n); // mohan add 2012-01-12 - // reduce double only in this pool // (each pool contain different k points) void reduce_double_grid(double* object, const int n); diff --git a/source/source_base/test_parallel/parallel_reduce_test.cpp b/source/source_base/test_parallel/parallel_reduce_test.cpp index ac980ba24d3..2239c523836 100644 --- a/source/source_base/test_parallel/parallel_reduce_test.cpp +++ b/source/source_base/test_parallel/parallel_reduce_test.cpp @@ -33,13 +33,9 @@ * Tests gather_int_all() and reduce_min() * 5. GatherDoubleAll: * Tests reduce_min_double() and reduce_max_double() - * 6. ReduceIntDiag: - * Tests reduce_int_diag() - * 7. ReduceDoubleDiag: + * 6. ReduceDoubleDiag: * Tests reduce_double_diag() - * 8. ReduceIntGrid: - * Tests reduce_int_grid() - * 9. ReduceDoubleGrid: + * 8. ReduceDoubleGrid: * Tests reduce_double_grid() * 10.ReduceDoublePool: * Tests two variations of reduce_pool() @@ -270,49 +266,6 @@ TEST_F(ParaReduce, GatherDoubleAll) delete[] array; } -TEST_F(ParaReduce, ReduceIntDiag) -{ - /// num_per_process = 2; - // NPROC is set to 4 in parallel_global_test.sh - if (nproc == 4) - { - Parallel_Global::split_diag_world(2, nproc, my_rank, mpiContext.drank, mpiContext.dsize, mpiContext.dcolor); - // generate a random array - int* rand_array = NULL; - rand_array = get_rand_array(num_per_process, my_rank); - - // calculate local sum - int local_sum = 0; - for (int i = 0; i < num_per_process; i++) - { - local_sum += rand_array[i]; - /// printf(" pre world_rank %d, drank %d rand_array[%d] = %d\n", - /// my_rank,mpiContext.dsize,i, rand_array[i]); - } - - // first way of calculating diag sum - int diag_sum_first = local_sum; - Parallel_Reduce::reduce_int_diag(diag_sum_first); - // second way of calculating global sum - int* swap = new int[num_per_process](); - MPI_Allreduce(rand_array, swap, num_per_process, MPI_INT, MPI_SUM, DIAG_WORLD); - int diag_sum_second = 0; - for (int i = 0; i < num_per_process; i++) - { - diag_sum_second += swap[i]; - /// printf(" post world_rank %d, drank %d swap[%d] = %d\n", - /// my_rank,mpiContext.dsize,i, swap[i]); - } - // compare two sums - /// printf("world_rank %d, drank %d sum1 = %d, sum2 = %d\n", - /// my_rank,mpiContext.dsize,diag_sum_first, diag_sum_second); - EXPECT_EQ(diag_sum_first, diag_sum_second); - delete[] rand_array; - delete[] swap; - MPI_Comm_free(&DIAG_WORLD); - } -} - TEST_F(ParaReduce, ReduceDoubleDiag) { /// num_per_process = 1; @@ -355,48 +308,6 @@ TEST_F(ParaReduce, ReduceDoubleDiag) } } -TEST_F(ParaReduce, ReduceIntGrid) -{ - /// num_per_process = 2; - // NPROC is set to 4 in parallel_global_test.sh - if (nproc == 4) - { - Parallel_Global::split_grid_world(2, nproc, my_rank, mpiContext.grank, mpiContext.gsize); - // generate a random array - int* rand_array = NULL; - rand_array = get_rand_array(num_per_process, my_rank); - - // calculate local sum - int local_sum = 0; - for (int i = 0; i < num_per_process; i++) - { - local_sum += rand_array[i]; - /// printf(" pre world_rank %d, drank %d rand_array[%d] = %d\n", - /// my_rank,mpiContext.dsize,i, rand_array[i]); - } - - // first way of calculating diag sum - int grid_sum_first = 0; - MPI_Allreduce(&local_sum, &grid_sum_first, 1, MPI_INT, MPI_SUM, GRID_WORLD); - - // second way of calculating global sum - Parallel_Reduce::reduce_int_grid(rand_array, num_per_process); - int grid_sum_second = 0; - for (int i = 0; i < num_per_process; i++) - { - grid_sum_second += rand_array[i]; - /// printf(" post world_rank %d, drank %d rand_array[%d] = %d\n", - /// my_rank,mpiContext.dsize,i, rand_array[i]); - } - // compare two sums - /// printf("world_rank %d, drank %d sum1 = %d, sum2 = %d\n", - /// my_rank,mpiContext.dsize,grid_sum_first, grid_sum_second); - EXPECT_EQ(grid_sum_first, grid_sum_second); - delete[] rand_array; - MPI_Comm_free(&GRID_WORLD); - } -} - TEST_F(ParaReduce, ReduceDoubleGrid) { /// num_per_process = 1; From 17cf652b07c7b7136b308c8be828a2ae1b7ff119 Mon Sep 17 00:00:00 2001 From: abacus_fixer Date: Thu, 18 Jun 2026 13:17:33 +0800 Subject: [PATCH 10/15] delete useless run_symmetry.cpp --- .../module_symmetry/run_symmetry.cpp | 55 ------------------- 1 file changed, 55 deletions(-) delete mode 100644 source/source_cell/module_symmetry/run_symmetry.cpp diff --git a/source/source_cell/module_symmetry/run_symmetry.cpp b/source/source_cell/module_symmetry/run_symmetry.cpp deleted file mode 100644 index b950a805a7a..00000000000 --- a/source/source_cell/module_symmetry/run_symmetry.cpp +++ /dev/null @@ -1,55 +0,0 @@ -#include -#include -#include -#include -#include "symmetry.h" -#include "source_base/global_variable.h" -#include "source_base/parallel_global.h" - -void calculate(); - -int main(int argc, char **argv) -{ - - std::cout << "Hello, this is the 'symmetry' module of ABACUS." << std::endl; - - std::cout << "The module does symmetry analysis for an input geometry." << std::endl; - Parallel_Global::read_pal_param(argc,argv); - //std::cout << "Right now, the module is still empty, soon we will have more tests." << std::endl; - - calculate(); - - return 0; -} - - -void calculate() -{ - //std::ofstream ofs("log.txt"); - std::ofstream ofs_running("log.txt"); - //std::ofstream ofs("useless.txt"); - std::ofstream ofs_warning("warning.txt"); - std::ifstream ifs("INPUT"); - UnitCell ucell; - ModuleSymmetry::Symmetry symm; - ifs >> ucell.ntype; - ucell.latName = "none"; - ifs.close(); - output out; - ucell.setup_cell( - "STRU", - ofs_running); - std::cout << "set up cell classic done." << std::endl; - symm.analy_sys(ucell.lat, ucell.st, ucell.atoms, ofs_running); - ofs_running.close(); -// ooo.set_orb_tables(); - - //ofs.close(); - - std::cout << "--------------------" << std::endl; - std::cout << " Have a great day! " << std::endl; - std::cout << "--------------------" << std::endl; - - - return; -} From 5c3ed58e2cbad72ced5808beaaaf9ac2da2bb017 Mon Sep 17 00:00:00 2001 From: abacus_fixer Date: Thu, 18 Jun 2026 13:20:35 +0800 Subject: [PATCH 11/15] delete useless functions and variables --- source/source_base/parallel_global.cpp | 17 ----------------- source/source_base/parallel_global.h | 6 ------ .../test_parallel/parallel_global_test.cpp | 19 ++----------------- 3 files changed, 2 insertions(+), 40 deletions(-) diff --git a/source/source_base/parallel_global.cpp b/source/source_base/parallel_global.cpp index 642d5982cea..f0b89710b3b 100644 --- a/source/source_base/parallel_global.cpp +++ b/source/source_base/parallel_global.cpp @@ -26,23 +26,6 @@ int mpi_number = 0; int omp_number = 0; } // namespace Parallel_Global -void Parallel_Global::myProd(std::complex* in, std::complex* inout, int* len, MPI_Datatype* dptr) -{ - for (int i = 0; i < *len; i++) - { - // (*inout).real()=(*inout).real()+(*in).real(); - // (*inout).imag()=(*inout).imag()+(*in).imag(); - - // mohan updat 2011-09-21 - (*inout) = std::complex((*inout).real() + (*in).real(), (*inout).imag() + (*in).imag()); - - in++; - inout++; - } - return; -} -#endif - void Parallel_Global::split_diag_world(const int& diag_np, const int& nproc, const int& my_rank, diff --git a/source/source_base/parallel_global.h b/source/source_base/parallel_global.h index 71e933a33e7..3529f496192 100644 --- a/source/source_base/parallel_global.h +++ b/source/source_base/parallel_global.h @@ -6,11 +6,8 @@ #ifndef PARALLEL_GLOBAL_H #define PARALLEL_GLOBAL_H -#include #include "parallel_comm.h" -// void myProd(std::complex *in,std::complex *inout,int *len,MPI_Datatype *dptr); - namespace Parallel_Global { extern int mpi_number; @@ -21,9 +18,6 @@ extern int omp_number; // changed from read_mpi_parameters in 2024-1018 void read_pal_param(int argc, char** argv, int& NPROC, int& NTHREAD_PER_PROC, int& MY_RANK); -#ifdef __MPI -void myProd(std::complex* in, std::complex* inout, int* len, MPI_Datatype* dptr); -#endif /**------------------------------------------- * call to split the "diago world" diff --git a/source/source_base/test_parallel/parallel_global_test.cpp b/source/source_base/test_parallel/parallel_global_test.cpp index 3b6bf8491fc..8630a18b7d8 100644 --- a/source/source_base/test_parallel/parallel_global_test.cpp +++ b/source/source_base/test_parallel/parallel_global_test.cpp @@ -22,9 +22,8 @@ * used in David diagonalization in pw basis * calculation. * ii. Parallel_Global::split_grid_world() - * iii. Parallel_Global::MyProd(std::complex *in,std::complex *inout,int *len,MPI_Datatype *dptr); - * iv. Parallel_Global::init_pools(); - * v. Parallel_Global::divide_pools(void); + * iii. Parallel_Global::init_pools(); + * iv. Parallel_Global::divide_pools(void); */ class MPIContext @@ -153,20 +152,6 @@ TEST_F(ParaGlobal, SplitDiag) // std::cout< in[2] = {std::complex(1.0, 2.0), std::complex(-1, -2)}; - std::complex inout[2] = {std::complex(2.0, 1.0), std::complex(-2, -1)}; - - int len = 2; - MPI_Datatype dptr = MPI_DOUBLE_COMPLEX; - Parallel_Global::myProd(in, inout, &len, &dptr); - EXPECT_EQ(inout[0], std::complex(3.0, 3.0)); - EXPECT_EQ(inout[1], std::complex(-3.0, -3.0)); -} - - - TEST_F(ParaGlobal, DivideMPIPools) { this->nproc = 12; From bacf920cda23a3accb64fde16df6bb464170ff9a Mon Sep 17 00:00:00 2001 From: abacus_fixer Date: Thu, 18 Jun 2026 13:32:11 +0800 Subject: [PATCH 12/15] update --- source/source_base/parallel_comm.h | 38 ++++++------ source/source_base/parallel_common.h | 6 +- source/source_base/parallel_global.cpp | 61 +------------------ .../module_pexsi/pexsi_solver.cpp | 1 - 4 files changed, 26 insertions(+), 80 deletions(-) diff --git a/source/source_base/parallel_comm.h b/source/source_base/parallel_comm.h index 127fcd72ca5..2243aea729f 100644 --- a/source/source_base/parallel_comm.h +++ b/source/source_base/parallel_comm.h @@ -14,32 +14,32 @@ extern MPI_Comm DIAG_WORLD; // mohan add 2012-01-13 class MPICommGroup { - public: + public: - MPICommGroup(MPI_Comm parent_comm); - ~MPICommGroup(); + MPICommGroup(MPI_Comm parent_comm); + ~MPICommGroup(); - void divide_group_comm(const int& ngroup, const bool assert_even = true); + void divide_group_comm(const int& ngroup, const bool assert_even = true); - bool is_even = false; ///< whether the group is even + bool is_even = false; ///< whether the group is even - MPI_Comm parent_comm = MPI_COMM_NULL; ///< parent communicator - int gsize = 0; ///< size of parent communicator - int grank = 0; ///< rank of parent communicator + MPI_Comm parent_comm = MPI_COMM_NULL; ///< parent communicator + int gsize = 0; ///< size of parent communicator + int grank = 0; ///< rank of parent communicator - MPI_Comm group_comm = MPI_COMM_NULL; ///< group communicator - int ngroups = 0; ///< number of groups - int nprocs_in_group = 0; ///< number of processes in the group - int my_group = 0; ///< the group index - int rank_in_group = 0; ///< the rank in the group + MPI_Comm group_comm = MPI_COMM_NULL; ///< group communicator + int ngroups = 0; ///< number of groups + int nprocs_in_group = 0; ///< number of processes in the group + int my_group = 0; ///< the group index + int rank_in_group = 0; ///< the rank in the group - MPI_Comm inter_comm = MPI_COMM_NULL; ///< inter communicator - bool has_inter_comm = false; ///< whether has inter communicator - int& nprocs_in_inter = ngroups; ///< number of processes in the inter communicator - int& my_inter = rank_in_group; ///< the rank in the inter communicator - int& rank_in_inter = my_group; ///< the inter group index + MPI_Comm inter_comm = MPI_COMM_NULL; ///< inter communicator + bool has_inter_comm = false; ///< whether has inter communicator + int& nprocs_in_inter = ngroups; ///< number of processes in the inter communicator + int& my_inter = rank_in_group; ///< the rank in the inter communicator + int& rank_in_inter = my_group; ///< the inter group index }; #endif -#endif // PARALLEL_COMM_H +#endif // PARALLEL_COMM_H \ No newline at end of file diff --git a/source/source_base/parallel_common.h b/source/source_base/parallel_common.h index 26054dbe171..e7badb5f6d5 100644 --- a/source/source_base/parallel_common.h +++ b/source/source_base/parallel_common.h @@ -1,14 +1,16 @@ -#ifndef W_ABACUS_DEVELOP_ABACUS_DEVELOP_SOURCE_MODULE_BASE_PARALLEL_COMMON_H -#define W_ABACUS_DEVELOP_ABACUS_DEVELOP_SOURCE_MODULE_BASE_PARALLEL_COMMON_H +#ifndef PARALLEL_COMMON_H +#define PARALLEL_COMMON_H #ifdef __MPI #include "mpi.h" #endif + #include #include namespace Parallel_Common { + //(1) bcast array void bcast_complex_double(std::complex* object, const int n); void bcast_string(std::string* object, const int n); diff --git a/source/source_base/parallel_global.cpp b/source/source_base/parallel_global.cpp index f0b89710b3b..78b467cfbb9 100644 --- a/source/source_base/parallel_global.cpp +++ b/source/source_base/parallel_global.cpp @@ -91,8 +91,6 @@ void Parallel_Global::read_pal_param(int argc, MPI_Init(&argc, &argv); // Peize Lin change 2018-07-12 #endif //_OPENMP - // KPAR = atoi(argv[1]); // mohan abandon 2010-06-09 - // get world size --> NPROC // get global rank --> MY_RANK MPI_Comm_size(MPI_COMM_WORLD, &NPROC); @@ -157,26 +155,10 @@ void Parallel_Global::read_pal_param(int argc, NTHREAD_PER_PROC = current_thread_num; - // for test - /* - for (int i=0; i Date: Thu, 18 Jun 2026 13:47:41 +0800 Subject: [PATCH 13/15] fix bugs --- source/source_base/parallel_global.cpp | 1 + source/source_base/parallel_reduce.h | 20 ------------------- .../module_surchem/test/cal_vel_test.cpp | 8 +++++--- source/source_hsolver/kernels/hegvd_op.cpp | 7 ++++--- 4 files changed, 10 insertions(+), 26 deletions(-) diff --git a/source/source_base/parallel_global.cpp b/source/source_base/parallel_global.cpp index 78b467cfbb9..df04461b30b 100644 --- a/source/source_base/parallel_global.cpp +++ b/source/source_base/parallel_global.cpp @@ -25,6 +25,7 @@ namespace Parallel_Global int mpi_number = 0; int omp_number = 0; } // namespace Parallel_Global +#endif void Parallel_Global::split_diag_world(const int& diag_np, const int& nproc, diff --git a/source/source_base/parallel_reduce.h b/source/source_base/parallel_reduce.h index 9211f208a61..e3210f41d9c 100644 --- a/source/source_base/parallel_reduce.h +++ b/source/source_base/parallel_reduce.h @@ -82,26 +82,6 @@ void gather_int_all(int& v, int* all); bool check_if_equal(double& v); // mohan add 2009-11-11 -template -inline void ZEROS(std::complex* u, const TI n) -{ - assert(n >= 0); - for (TI i = 0; i < n; i++) - { - u[i] = std::complex(0.0, 0.0); - } - return; -} - -template -inline void ZEROS(T* u, const TI n) -{ - assert(n >= 0); - for (TI i = 0; i < n; i++) - { - u[i] = 0; - } -} } // namespace Parallel_Reduce #endif diff --git a/source/source_hamilt/module_surchem/test/cal_vel_test.cpp b/source/source_hamilt/module_surchem/test/cal_vel_test.cpp index 818e52dbe62..9d6b120a624 100644 --- a/source/source_hamilt/module_surchem/test/cal_vel_test.cpp +++ b/source/source_hamilt/module_surchem/test/cal_vel_test.cpp @@ -1,8 +1,5 @@ #ifdef __MPI #include "../../../source_base/parallel_global.h" -#define private public -#include "source_io/module_parameter/parameter.h" -#undef private #include "mpi.h" #endif #include "../../module_xc/xc_functional.h" @@ -13,6 +10,11 @@ #include "gtest/gtest.h" #include #include + +// Include parameter.h with private access for testing +#define private public +#include "source_io/module_parameter/parameter.h" +#undef private /************************************************ * unit test of functions in cal_vel.cpp ***********************************************/ diff --git a/source/source_hsolver/kernels/hegvd_op.cpp b/source/source_hsolver/kernels/hegvd_op.cpp index e9ecb10388f..5f50e51e327 100644 --- a/source/source_hsolver/kernels/hegvd_op.cpp +++ b/source/source_hsolver/kernels/hegvd_op.cpp @@ -1,6 +1,7 @@ #include "source_hsolver/kernels/hegvd_op.h" #include "source_base/module_container/base/third_party/lapack.h" +#include #include #include @@ -28,15 +29,15 @@ struct hegvd_op int info = 0; int lwork = 2 * nstart + nstart * nstart; T* work = new T[lwork]; - Parallel_Reduce::ZEROS(work, lwork); + std::fill(work, work + lwork, T(0)); int lrwork = 1 + 5 * nstart + 2 * nstart * nstart; Real* rwork = new Real[lrwork]; - Parallel_Reduce::ZEROS(rwork, lrwork); + std::fill(rwork, rwork + lrwork, Real(0)); int liwork = 3 + 5 * nstart; int* iwork = new int[liwork]; - Parallel_Reduce::ZEROS(iwork, liwork); + std::fill(iwork, iwork + liwork, 0); //=========================== // calculate all eigenvalues From 0a661872b137d0223c7dcc681a2ac596f95aee95 Mon Sep 17 00:00:00 2001 From: abacus_fixer Date: Fri, 19 Jun 2026 21:44:45 +0800 Subject: [PATCH 14/15] update --- .../source_lcao/module_operator_lcao/td_pot_hybrid_force.hpp | 2 +- source/source_lcao/module_rt/force_rt_overlap.cpp | 4 ++-- source/source_lcao/module_rt/td_info.cpp | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/source/source_lcao/module_operator_lcao/td_pot_hybrid_force.hpp b/source/source_lcao/module_operator_lcao/td_pot_hybrid_force.hpp index 706039db80a..751dcb0e200 100644 --- a/source/source_lcao/module_operator_lcao/td_pot_hybrid_force.hpp +++ b/source/source_lcao/module_operator_lcao/td_pot_hybrid_force.hpp @@ -34,7 +34,7 @@ void TD_pot_hybrid>::cal_force_stress(const bool cal_force, const int T2 = adjs.ntype[ad1]; const int I2 = adjs.natom[ad1]; const int iat2 = ucell->itia2iat(T2, I2); - if (paraV->get_row_size(iat1) <= 0 || paraV->get_col_size(iat2) <= 0) + if (paraV->get_nrow_atom(iat1) <= 0 || paraV->get_ncol_atom(iat2) <= 0) { continue; } diff --git a/source/source_lcao/module_rt/force_rt_overlap.cpp b/source/source_lcao/module_rt/force_rt_overlap.cpp index a95ccf93ef5..a224e5d24bc 100644 --- a/source/source_lcao/module_rt/force_rt_overlap.cpp +++ b/source/source_lcao/module_rt/force_rt_overlap.cpp @@ -248,9 +248,9 @@ void cal_foverlap_rt(ModuleBase::matrix& foverlap, int col0 = pv.atom_begin_col[iat]; const int row_size = pv.get_row_size(); std::vector*> p_diag = {tmp_out[0], tmp_out[1], tmp_out[2]}; - for(int mu = 0; mu < pv.get_row_size(iat); ++mu) + for(int mu = 0; mu < pv.get_nrow_atom(iat); ++mu) { - for(int nu = 0; nu < pv.get_col_size(iat); ++nu) + for(int nu = 0; nu < pv.get_ncol_atom(iat); ++nu) { if(row_indexes[row0+mu]==col_indexes[col0+nu]) { diff --git a/source/source_lcao/module_rt/td_info.cpp b/source/source_lcao/module_rt/td_info.cpp index e39bc96cae8..916dc3b0810 100644 --- a/source/source_lcao/module_rt/td_info.cpp +++ b/source/source_lcao/module_rt/td_info.cpp @@ -303,7 +303,7 @@ void TD_info::calculate_grad_overlap(const Parallel_Orbitals& paraV, const int T2 = adjs.ntype[ad]; const int I2 = adjs.natom[ad]; int iat2 = ucell.itia2iat(T2, I2); - if (paraV.get_row_size(iat1) <= 0 || paraV.get_col_size(iat2) <= 0) + if (paraV.get_nrow_atom(iat1) <= 0 || paraV.get_ncol_atom(iat2) <= 0) { continue; } From bb980448f89b1d2965446df713757ceb6e229f13 Mon Sep 17 00:00:00 2001 From: abacus_fixer Date: Sat, 20 Jun 2026 17:46:39 +0800 Subject: [PATCH 15/15] update --- source/source_lcao/LCAO_set_st.cpp | 8 ++++---- source/source_lcao/record_adj.cpp | 6 ++---- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/source/source_lcao/LCAO_set_st.cpp b/source/source_lcao/LCAO_set_st.cpp index 0d388f17610..e468b328ab8 100644 --- a/source/source_lcao/LCAO_set_st.cpp +++ b/source/source_lcao/LCAO_set_st.cpp @@ -519,15 +519,15 @@ void build_ST_new(ForceStressArrays& fsr, for (int jj = 0; jj < atom1->nw * npol; ++jj) { const int mu = pv.global2local_row(start1 + jj); - if (mu < 0) - { + if (mu < 0) + { continue; } for (int kk = 0; kk < atom2->nw * npol; ++kk) { const int nu = pv.global2local_col(start2 + kk); - if (nu < 0) - { + if (nu < 0) + { continue; } ++total_nnr; diff --git a/source/source_lcao/record_adj.cpp b/source/source_lcao/record_adj.cpp index 2e8c17b2ea0..3c67b863977 100644 --- a/source/source_lcao/record_adj.cpp +++ b/source/source_lcao/record_adj.cpp @@ -54,10 +54,8 @@ void Record_adj::for_2d(const UnitCell& ucell, if (!gamma_only) { // Record_adj should not modify members of pv, need refactor! mohan add 2025-03-10 - pv.nlocdim.resize(ucell.nat); - pv.nlocstart.resize(ucell.nat); - std::fill(pv.nlocdim.begin(), pv.nlocdim.end(), 0); - std::fill(pv.nlocstart.begin(), pv.nlocstart.end(), 0); + pv.nlocdim.assign(ucell.nat, 0); + pv.nlocstart.assign(ucell.nat, 0); pv.nnr = 0; } {