From e878e4028a02104beedc63fd9e8b04bcf4192aa2 Mon Sep 17 00:00:00 2001 From: lyb9812 Date: Wed, 27 May 2026 16:53:33 +0800 Subject: [PATCH 1/7] Remove debug output in renormalize_psi Co-Authored-By: Claude Opus 4.7 --- source/source_pw/module_ofdft/evolve_ofdft.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/source_pw/module_ofdft/evolve_ofdft.cpp b/source/source_pw/module_ofdft/evolve_ofdft.cpp index 06d54d13a24..1cca7b078e8 100644 --- a/source/source_pw/module_ofdft/evolve_ofdft.cpp +++ b/source/source_pw/module_ofdft/evolve_ofdft.cpp @@ -62,7 +62,7 @@ void Evolve_OFDFT::renormalize_psi(Charge& chr, ModulePW::PW_Basis* pw_rho, std: const int nspin = PARAM.inp.nspin; const int nrxx = pw_rho->nrxx; - std::cout<<"sr="<** rLapPhi = new std::complex*[nspin]; -#ifdef _OPENMP -#pragma omp parallel for -#endif - for (int is = 0; is < nspin; ++is) { - rLapPhi[is] = new std::complex[nrxx]; + std::vector>> rLapPhi(nspin, std::vector>(nrxx)); + std::vector>> recipPhi(nspin, std::vector>(npw)); + + for (int is = 0; is < nspin; ++is) + { for (int ir = 0; ir < nrxx; ++ir) { - rLapPhi[is][ir]=pphi[is * nrxx + ir]; + rLapPhi[is][ir] = pphi[is * nrxx + ir]; } } - std::complex** recipPhi = new std::complex*[nspin]; #ifdef _OPENMP #pragma omp parallel for -#endif +#endif for (int is = 0; is < nspin; ++is) { - recipPhi[is] = new std::complex[npw]; - - pw_rho->real2recip(rLapPhi[is], recipPhi[is]); + pw_rho->real2recip(rLapPhi[is].data(), recipPhi[is].data()); for (int ik = 0; ik < npw; ++ik) { recipPhi[is][ik] *= gg[ik] * tpiba2; } - pw_rho->recip2real(recipPhi[is], rLapPhi[is]); + pw_rho->recip2real(recipPhi[is].data(), rLapPhi[is].data()); for (int ir = 0; ir < nrxx; ++ir) { Hpsi[is * nrxx + ir] += rLapPhi[is][ir]; } } - -#ifdef _OPENMP -#pragma omp parallel for -#endif - for (int is = 0; is < nspin; ++is) - { - delete[] recipPhi[is]; - delete[] rLapPhi[is]; - } - delete[] recipPhi; - delete[] rLapPhi; } void Evolve_OFDFT::cal_CD_potential(std::vector>& psi_, From 215f36ff95647b766502b79c33d70f593ea5111f Mon Sep 17 00:00:00 2001 From: lyb9812 Date: Wed, 27 May 2026 16:56:45 +0800 Subject: [PATCH 4/7] Refactor: Replace raw new/delete with std::vector in cal_CD_potential for automatic memory management Co-Authored-By: Claude Opus 4.7 --- .../source_pw/module_ofdft/evolve_ofdft.cpp | 28 +++++-------------- 1 file changed, 7 insertions(+), 21 deletions(-) diff --git a/source/source_pw/module_ofdft/evolve_ofdft.cpp b/source/source_pw/module_ofdft/evolve_ofdft.cpp index 5d857e2373e..6db7a75cf42 100644 --- a/source/source_pw/module_ofdft/evolve_ofdft.cpp +++ b/source/source_pw/module_ofdft/evolve_ofdft.cpp @@ -166,16 +166,14 @@ void Evolve_OFDFT::cal_CD_potential(std::vector>& psi_, if (nspin <= 0) { ModuleBase::WARNING_QUIT("Evolve_OFDFT","nspin must be positive"); } - std::complex** recipPhi = new std::complex*[nspin]; - std::complex** rPhi = new std::complex*[nspin]; -#ifdef _OPENMP -#pragma omp parallel for -#endif - for (int is = 0; is < nspin; ++is) { - rPhi[is] = new std::complex[nrxx]; + std::vector>> recipPhi(nspin, std::vector>(npw)); + std::vector>> rPhi(nspin, std::vector>(nrxx)); + + for (int is = 0; is < nspin; ++is) + { for (int ir = 0; ir < nrxx; ++ir) { - rPhi[is][ir]=psi_[is * nrxx + ir]; + rPhi[is][ir] = psi_[is * nrxx + ir]; } } @@ -193,14 +191,13 @@ void Evolve_OFDFT::cal_CD_potential(std::vector>& psi_, std::vector> rCurrent_z(nrxx); std::vector> kF_r(nrxx); std::vector> rCDPotential(nrxx); - recipPhi[is] = new std::complex[npw]; for (int ir = 0; ir < nrxx; ++ir) { kF_r[ir]=std::pow(3*std::pow(ModuleBase::PI*std::abs(rPhi[is][ir]),2),1.0/3.0); } - pw_rho->real2recip(rPhi[is], recipPhi[is]); + pw_rho->real2recip(rPhi[is].data(), recipPhi[is].data()); for (int ik = 0; ik < npw; ++ik) { recipCurrent_x[ik]=imag*gcar[ik].x*recipPhi[is][ik]*tpiba; @@ -243,17 +240,6 @@ void Evolve_OFDFT::cal_CD_potential(std::vector>& psi_, } } } - -#ifdef _OPENMP -#pragma omp parallel for -#endif - for (int is = 0; is < nspin; ++is) - { - delete[] recipPhi[is]; - delete[] rPhi[is]; - } - delete[] recipPhi; - delete[] rPhi; } void Evolve_OFDFT::propagate_psi_RK4(elecstate::ElecState* pelec, From 216f9de6bc320eadaac569d5ccc581041d0e0cee Mon Sep 17 00:00:00 2001 From: lyb9812 Date: Wed, 27 May 2026 16:57:25 +0800 Subject: [PATCH 5/7] Refactor: Replace abs(x)*abs(x) with std::norm for clarity and consistency with RK2 Co-Authored-By: Claude Opus 4.7 --- source/source_pw/module_ofdft/evolve_ofdft.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/source/source_pw/module_ofdft/evolve_ofdft.cpp b/source/source_pw/module_ofdft/evolve_ofdft.cpp index 6db7a75cf42..01fee6e5296 100644 --- a/source/source_pw/module_ofdft/evolve_ofdft.cpp +++ b/source/source_pw/module_ofdft/evolve_ofdft.cpp @@ -1,6 +1,7 @@ #include "evolve_ofdft.h" #include "source_io/module_parameter/parameter.h" +#include #include #include "source_base/parallel_reduce.h" @@ -29,7 +30,7 @@ void Evolve_OFDFT::cal_Hpsi(elecstate::ElecState* pelec, { for (int ir = 0; ir < nrxx; ++ir) { - chr.rho[is][ir] = abs(psi_[is * nrxx + ir])*abs(psi_[is * nrxx + ir]); + chr.rho[is][ir] = std::norm(psi_[is * nrxx + ir]); } } this->renormalize_psi(chr, pw_rho, psi_); From 6b4c88365183cbe4e044da0ee1388256e0e2e087 Mon Sep 17 00:00:00 2001 From: lyb9812 Date: Wed, 27 May 2026 16:57:34 +0800 Subject: [PATCH 6/7] Refactor: Remove unused include Co-Authored-By: Claude Opus 4.7 --- source/source_pw/module_ofdft/evolve_ofdft.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/source/source_pw/module_ofdft/evolve_ofdft.cpp b/source/source_pw/module_ofdft/evolve_ofdft.cpp index 01fee6e5296..f4f8c714915 100644 --- a/source/source_pw/module_ofdft/evolve_ofdft.cpp +++ b/source/source_pw/module_ofdft/evolve_ofdft.cpp @@ -2,7 +2,6 @@ #include "source_io/module_parameter/parameter.h" #include -#include #include "source_base/parallel_reduce.h" From d23ba1f63dcc30649f89e45973c648f2f49fc377 Mon Sep 17 00:00:00 2001 From: lyb9812 Date: Wed, 27 May 2026 16:58:10 +0800 Subject: [PATCH 7/7] Refactor: Remove dead nspin <= 0 checks that can never trigger Co-Authored-By: Claude Opus 4.7 --- source/source_pw/module_ofdft/evolve_ofdft.cpp | 6 ------ 1 file changed, 6 deletions(-) diff --git a/source/source_pw/module_ofdft/evolve_ofdft.cpp b/source/source_pw/module_ofdft/evolve_ofdft.cpp index f4f8c714915..4157dc6516a 100644 --- a/source/source_pw/module_ofdft/evolve_ofdft.cpp +++ b/source/source_pw/module_ofdft/evolve_ofdft.cpp @@ -118,9 +118,6 @@ void Evolve_OFDFT::cal_vw_potential_phi(std::vector>& pphi, const double* gg = pw_rho->gg; const double tpiba2 = pw_rho->tpiba2; - if (nspin <= 0) { - ModuleBase::WARNING_QUIT("Evolve_OFDFT","nspin must be positive"); - } std::vector>> rLapPhi(nspin, std::vector>(nrxx)); std::vector>> recipPhi(nspin, std::vector>(npw)); @@ -163,9 +160,6 @@ void Evolve_OFDFT::cal_CD_potential(std::vector>& psi_, const double* gg = pw_rho->gg; const ModuleBase::Vector3* gcar = pw_rho->gcar; - if (nspin <= 0) { - ModuleBase::WARNING_QUIT("Evolve_OFDFT","nspin must be positive"); - } std::vector>> recipPhi(nspin, std::vector>(npw)); std::vector>> rPhi(nspin, std::vector>(nrxx));