diff --git a/source/module_hsolver/diago_cusolver.h b/source/module_hsolver/diago_cusolver.h index 0b0d1f5fba..69ab21b949 100644 --- a/source/module_hsolver/diago_cusolver.h +++ b/source/module_hsolver/diago_cusolver.h @@ -9,9 +9,9 @@ namespace hsolver { -// DiagoCusolver class, derived from DiagH, for diagonalization using CUSOLVER +// DiagoCusolver class for diagonalization using CUSOLVER template -class DiagoCusolver : public DiagH +class DiagoCusolver { private: // Real is the real part of the complex type T @@ -24,7 +24,7 @@ class DiagoCusolver : public DiagH ~DiagoCusolver(); // Override the diag function for CUSOLVER diagonalization - void diag(hamilt::Hamilt* phm_in, psi::Psi& psi, Real* eigenvalue_in) override; + void diag(hamilt::Hamilt* phm_in, psi::Psi& psi, Real* eigenvalue_in); // Static variable to keep track of the decomposition state static int DecomposedState; diff --git a/source/module_hsolver/diago_cusolvermp.h b/source/module_hsolver/diago_cusolvermp.h index 971be3f3e0..a8d1a38002 100644 --- a/source/module_hsolver/diago_cusolvermp.h +++ b/source/module_hsolver/diago_cusolvermp.h @@ -10,7 +10,7 @@ namespace hsolver { // DiagoCusolverMP class, derived from DiagH, for diagonalization using CUSOLVERMP template -class DiagoCusolverMP : public DiagH +class DiagoCusolverMP { private: using Real = typename GetTypeReal::type; @@ -19,8 +19,8 @@ class DiagoCusolverMP : public DiagH DiagoCusolverMP() { } - // Override the diag function for CUSOLVERMP diagonalization - void diag(hamilt::Hamilt* phm_in, psi::Psi& psi, Real* eigenvalue_in) override; + // the diag function for CUSOLVERMP diagonalization + void diag(hamilt::Hamilt* phm_in, psi::Psi& psi, Real* eigenvalue_in); }; } // namespace hsolver #endif // __CUSOLVERMP diff --git a/source/module_hsolver/diago_elpa.h b/source/module_hsolver/diago_elpa.h index 49006d012b..7e226d73e9 100644 --- a/source/module_hsolver/diago_elpa.h +++ b/source/module_hsolver/diago_elpa.h @@ -8,16 +8,16 @@ namespace hsolver { template -class DiagoElpa : public DiagH +class DiagoElpa { private: using Real = typename GetTypeReal::type; public: - void diag(hamilt::Hamilt* phm_in, psi::Psi& psi, Real* eigenvalue_in) override; + void diag(hamilt::Hamilt* phm_in, psi::Psi& psi, Real* eigenvalue_in); #ifdef __MPI // diagnolization used in parallel-k case - void diag_pool(hamilt::MatrixBlock& h_mat, hamilt::MatrixBlock& s_mat, psi::Psi& psi, Real* eigenvalue_in, MPI_Comm& comm) override; + void diag_pool(hamilt::MatrixBlock& h_mat, hamilt::MatrixBlock& s_mat, psi::Psi& psi, Real* eigenvalue_in, MPI_Comm& comm); MPI_Comm setmpicomm(); // set mpi comm; static int elpa_num_thread; // need to set mpi_comm or not,-1 not,else the number of mpi needed #endif diff --git a/source/module_hsolver/diago_elpa_native.h b/source/module_hsolver/diago_elpa_native.h index adbb052023..af9612df1f 100644 --- a/source/module_hsolver/diago_elpa_native.h +++ b/source/module_hsolver/diago_elpa_native.h @@ -8,16 +8,16 @@ namespace hsolver { template -class DiagoElpaNative : public DiagH +class DiagoElpaNative { private: using Real = typename GetTypeReal::type; public: - void diag(hamilt::Hamilt* phm_in, psi::Psi& psi, Real* eigenvalue_in) override; + void diag(hamilt::Hamilt* phm_in, psi::Psi& psi, Real* eigenvalue_in); #ifdef __MPI // diagnolization used in parallel-k case - void diag_pool(hamilt::MatrixBlock& h_mat, hamilt::MatrixBlock& s_mat, psi::Psi& psi, Real* eigenvalue_in, MPI_Comm& comm) override; + void diag_pool(hamilt::MatrixBlock& h_mat, hamilt::MatrixBlock& s_mat, psi::Psi& psi, Real* eigenvalue_in, MPI_Comm& comm); MPI_Comm setmpicomm(); // set mpi comm; static int elpa_num_thread; // need to set mpi_comm or not,-1 not,else the number of mpi needed static int lastmpinum; // last using mpi; diff --git a/source/module_hsolver/diago_lapack.h b/source/module_hsolver/diago_lapack.h index 7e87b84ea5..0bf93dfe2b 100644 --- a/source/module_hsolver/diago_lapack.h +++ b/source/module_hsolver/diago_lapack.h @@ -20,13 +20,13 @@ namespace hsolver { template -class DiagoLapack : public DiagH +class DiagoLapack { private: using Real = typename GetTypeReal::type; public: - void diag(hamilt::Hamilt* phm_in, psi::Psi& psi, Real* eigenvalue_in) override; + void diag(hamilt::Hamilt* phm_in, psi::Psi& psi, Real* eigenvalue_in); void dsygvx_diag(const int ncol, const int nrow, diff --git a/source/module_hsolver/diago_scalapack.h b/source/module_hsolver/diago_scalapack.h index 192fae841e..a2fac453b7 100644 --- a/source/module_hsolver/diago_scalapack.h +++ b/source/module_hsolver/diago_scalapack.h @@ -20,15 +20,15 @@ namespace hsolver { template - class DiagoScalapack : public DiagH + class DiagoScalapack { private: using Real = typename GetTypeReal::type; public: - void diag(hamilt::Hamilt* phm_in, psi::Psi& psi, Real* eigenvalue_in) override; + void diag(hamilt::Hamilt* phm_in, psi::Psi& psi, Real* eigenvalue_in); #ifdef __MPI // diagnolization used in parallel-k case - void diag_pool(hamilt::MatrixBlock& h_mat, hamilt::MatrixBlock& s_mat, psi::Psi& psi, Real* eigenvalue_in, MPI_Comm& comm) override; + void diag_pool(hamilt::MatrixBlock& h_mat, hamilt::MatrixBlock& s_mat, psi::Psi& psi, Real* eigenvalue_in, MPI_Comm& comm); #endif private: diff --git a/source/module_hsolver/hsolver_lcao.cpp b/source/module_hsolver/hsolver_lcao.cpp index e312e3be96..ce7e1508b4 100644 --- a/source/module_hsolver/hsolver_lcao.cpp +++ b/source/module_hsolver/hsolver_lcao.cpp @@ -169,7 +169,7 @@ void HSolverLCAO::hamiltSolvePsiK(hamilt::Hamilt* hm, psi::Psi& DiagoLapack la; la.diag(hm, psi, eigenvalue); #else - ModuleBase::WARNING_QUIT("HSolverLCAO::solve", "This method of DiagH is not supported!"); + ModuleBase::WARNING_QUIT("HSolverLCAO::solve", "This type of eigensolver is not supported!"); #endif } else @@ -379,7 +379,7 @@ void HSolverLCAO::parakSolve(hamilt::Hamilt* pHamilt, else { ModuleBase::WARNING_QUIT("HSolverLCAO::solve", - "This method of DiagH for k-parallelism diagnolization is not supported!"); + "This type of eigensolver for k-parallelism diagnolization is not supported!"); } } MPI_Barrier(MPI_COMM_WORLD); diff --git a/source/module_hsolver/hsolver_pw_sdft.cpp b/source/module_hsolver/hsolver_pw_sdft.cpp index 0318d6c5fb..7e8da8d090 100644 --- a/source/module_hsolver/hsolver_pw_sdft.cpp +++ b/source/module_hsolver/hsolver_pw_sdft.cpp @@ -33,7 +33,7 @@ void HSolverPW_SDFT::solve(hamilt::Hamilt>* pHamilt, const std::initializer_list _methods = {"cg", "dav", "dav_subspace", "bpcg"}; if (std::find(std::begin(_methods), std::end(_methods), this->method) == std::end(_methods)) { - ModuleBase::WARNING_QUIT("HSolverPW::solve", "This method of DiagH is not supported!"); + ModuleBase::WARNING_QUIT("HSolverPW::solve", "This type of eigensolver is not supported!"); } // part of KSDFT to get KS orbitals diff --git a/source/module_hsolver/test/diago_lapack_test.cpp b/source/module_hsolver/test/diago_lapack_test.cpp index 5b1430ce8d..28ada7140a 100644 --- a/source/module_hsolver/test/diago_lapack_test.cpp +++ b/source/module_hsolver/test/diago_lapack_test.cpp @@ -119,7 +119,7 @@ class DiagoLapackPrepare : nlocal(nlocal), nbands(nbands), nb2d(nb2d), sparsity(sparsity), hfname(hfname), sfname(sfname), solutionfname(solutionfname) { - dh = new hsolver::DiagoLapack; + // dh = new hsolver::DiagoLapack; } int nlocal, nbands, nb2d, sparsity; @@ -127,7 +127,7 @@ class DiagoLapackPrepare std::vector h; std::vector s; HamiltTEST hmtest; - hsolver::DiagH* dh = nullptr; + // hsolver::DiagH* dh = nullptr; psi::Psi psi; std::vector e_solver; std::vector e_lapack; @@ -200,9 +200,11 @@ class DiagoLapackPrepare for (int i = 0; i < REPEATRUN; i++) { - dh->diag(&hmtest, psi, e_solver.data()); + hsolver::DiagoLapack dh; + dh.diag(&hmtest, psi, e_solver.data()); + // dh->diag(&hmtest, psi, e_solver.data()); } - delete dh; + // delete dh; } void read_SOLUTION() diff --git a/source/module_hsolver/test/diago_lcao_cusolver_test.cpp b/source/module_hsolver/test/diago_lcao_cusolver_test.cpp index d88a4aecc9..40e62c6ecd 100644 --- a/source/module_hsolver/test/diago_lcao_cusolver_test.cpp +++ b/source/module_hsolver/test/diago_lcao_cusolver_test.cpp @@ -74,10 +74,10 @@ class DiagoPrepare MPI_Comm_rank(MPI_COMM_WORLD, &myrank); if (ks_solver == "scalapack_gvx") - dh = new hsolver::DiagoScalapack; + ;//dh = new hsolver::DiagoScalapack; #ifdef __CUDA else if (ks_solver == "cusolver") - dh = new hsolver::DiagoCusolver; + ;//dh = new hsolver::DiagoCusolver; #endif else { @@ -96,7 +96,7 @@ class DiagoPrepare std::vector s; std::vector h_local; std::vector s_local; - hsolver::DiagH* dh = 0; + // hsolver::DiagH* dh = 0; psi::Psi psi; std::vector e_solver; std::vector e_lapack; @@ -222,11 +222,23 @@ class DiagoPrepare { hmtest.h_local = this->h_local; hmtest.s_local = this->s_local; - dh->diag(&hmtest, psi, e_solver.data()); + if (ks_solver == "scalapack_gvx") + { + hsolver::DiagoScalapack dh; + dh.diag(&hmtest, psi, e_solver.data()); + } + #ifdef __CUDA + else if (ks_solver == "cusolver") + { + hsolver::DiagoCusolver dh; + dh.diag(&hmtest, psi, e_solver.data()); + } + #endif + // dh->diag(&hmtest, psi, e_solver.data()); } endtime = MPI_Wtime(); hsolver_time = (endtime - starttime) / REPEATRUN; - delete dh; + // delete dh; } void diago_lapack() diff --git a/source/module_hsolver/test/diago_lcao_test.cpp b/source/module_hsolver/test/diago_lcao_test.cpp index 7c24dd39e5..77e392ad5a 100644 --- a/source/module_hsolver/test/diago_lcao_test.cpp +++ b/source/module_hsolver/test/diago_lcao_test.cpp @@ -71,10 +71,12 @@ class DiagoPrepare MPI_Comm_rank(MPI_COMM_WORLD, &myrank); if (ks_solver == "scalapack_gvx") - dh = new hsolver::DiagoScalapack; + ; +// dh = new hsolver::DiagoScalapack; #ifdef __ELPA else if (ks_solver == "genelpa") - dh = new hsolver::DiagoElpa; + ; +// dh = new hsolver::DiagoElpa; #endif else { @@ -93,7 +95,7 @@ class DiagoPrepare std::vector s; std::vector h_local; std::vector s_local; - hsolver::DiagH* dh = 0; + // hsolver::DiagH* dh = 0; psi::Psi psi; std::vector e_solver; std::vector e_lapack; @@ -219,11 +221,23 @@ class DiagoPrepare { hmtest.h_local = this->h_local; hmtest.s_local = this->s_local; - dh->diag(&hmtest, psi, e_solver.data()); + if (ks_solver == "scalapack_gvx") + { + hsolver::DiagoScalapack dh; + dh.diag(&hmtest, psi, e_solver.data()); + } + #ifdef __ELPA + else if (ks_solver == "genelpa") + { + hsolver::DiagoElpa dh; + dh.diag(&hmtest, psi, e_solver.data()); + } + #endif + // dh.diag(&hmtest, psi, e_solver.data()); } endtime = MPI_Wtime(); hsolver_time = (endtime - starttime) / REPEATRUN; - delete dh; + // delete dh; } void diago_lapack()