Skip to content

Commit 9eca4a9

Browse files
author
abacus_fixer
committed
Refactor DFT+U base: unify DFTU_BASE namespace and slim Plus_U_Base
- Rename dftu_output.{h,cpp} -> dftu_base_io.{h,cpp}, dftu_tools_pw.{h,cpp} -> dftu_base_tools.{h,cpp}, dftu_cal_occ_pw.cpp -> dftu_base_occ.cpp (git mv) - Unify all DFTU-related free functions in module_pwdft under a single namespace DFTU_BASE (formerly dftu_io, dftu_pw, and pw::iter_init_dftu_pw) - Extract read_occup_m and local_occup_bcast from Plus_U_Base as DFTU_BASE:: free functions declared in dftu_base_io.h; dependencies (occ_mat, orbital_corr, occ_mat_ctrl) are now passed explicitly - Replace element-wise MPI_Bcast in local_occup_bcast with whole-matrix Parallel_Common::bcast_double calls (rule: no direct MPI usage) - dftu_lcao_test links one extra light source (dftu_base_io.cpp) so that the heavy PW implementation dftu_base_occ.cpp stays out of the test closure - Move JacobiRotate/CalculateEigenvalues helpers into an anonymous namespace and drop an unused local variable during migration Verification: full incremental build passes in build/ (abacus_basic_para, 100%); in build_max_para_test/ the targets dftu_lcao_test and dftu_pw_test build and link successfully (100%); grep confirms no references remain to dftu_io, dftu_pw::, dftu_output, dftu_tools_pw, dftu_cal_occ_pw, or the removed Plus_U_Base members.
1 parent 192abb3 commit 9eca4a9

16 files changed

Lines changed: 357 additions & 338 deletions

source/Makefile.Objects

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -746,9 +746,9 @@ OBJS_SRCPW=h_ewald_pw.o\
746746
setup_pwwfc.o\
747747
update_cell_pw.o\
748748
dftu_base.o\
749-
dftu_output.o\
750-
dftu_tools_pw.o\
751-
dftu_cal_occ_pw.o\
749+
dftu_base_io.o\
750+
dftu_base_occ.o\
751+
dftu_base_tools.o\
752752
setup_dftu_pw.o\
753753
deltaspin_pw.o\
754754
force_pw.o\

source/source_esolver/esolver_ks_pw.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -202,7 +202,7 @@ void ESolver_KS_PW<T, Device>::iter_init(UnitCell& ucell, const int istep, const
202202

203203
// update local occupations for DFT+U
204204
// should before lambda loop in DeltaSpin
205-
pw::iter_init_dftu_pw(iter,
205+
DFTU_BASE::iter_init_dftu_pw(iter,
206206
istep,
207207
this->dftu,
208208
this->stp.template get_psi_t<T, Device>(),

source/source_lcao/module_dftu/test/CMakeLists.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ AddTest(
44
TARGET dftu_pw_test
55
LIBS base device parameter
66
SOURCES dftu_pw_test.cpp
7-
../../../source_pw/module_pwdft/dftu_tools_pw.cpp
7+
../../../source_pw/module_pwdft/dftu_base_tools.cpp
88
)
99

1010
AddTest(
@@ -25,6 +25,7 @@ AddTest(
2525
LIBS parameter psi base device container
2626
SOURCES dftu_lcao_test.cpp ../dftu_lcao_op.cpp ../dftu_fs.cpp
2727
../../../source_pw/module_pwdft/dftu_base.cpp
28+
../../../source_pw/module_pwdft/dftu_base_io.cpp
2829
../../../source_hamilt/module_hcontainer/func_folding.cpp
2930
../../../source_hamilt/module_hcontainer/base_matrix.cpp
3031
../../../source_hamilt/module_hcontainer/hcontainer.cpp

source/source_lcao/module_dftu/test/dftu_pw_test.cpp

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
#include "source_io/module_parameter/parameter.h"
66
#undef private
77
#include "source_base/matrix.h"
8-
#include "source_pw/module_pwdft/dftu_tools_pw.h"
8+
#include "source_pw/module_pwdft/dftu_base_tools.h"
99

1010
/***********************************************************************
1111
* Unit tests for DFT+U PW nspin=1/2/4 support (PR-2)
@@ -83,7 +83,7 @@ TEST_F(DftuPwTest, PotOnsitePotNspin1_DiagonalLocale)
8383
occ_mat_c[m * m_size + m] = 0.3; // diagonal
8484

8585
std::vector<std::complex<double>> pot_onsite(size, {0.0, 0.0});
86-
dftu_pw::compute_pot_onsite_scalar(pot_onsite.data(), occ_mat_c.data(), U_val, 0.5, 1.0, m_size);
86+
DFTU_BASE::compute_pot_onsite_scalar(pot_onsite.data(), occ_mat_c.data(), U_val, 0.5, 1.0, m_size);
8787

8888
// diagonal: U*(0.5 - 0.3) = 4.0*0.2 = 0.8
8989
for (int m = 0; m < m_size; m++)
@@ -107,8 +107,8 @@ TEST_F(DftuPwTest, PotOnsitePotNspin2_TwoSpinChannels)
107107

108108
std::vector<std::complex<double>> pot_onsite_up(size, {0.0, 0.0});
109109
std::vector<std::complex<double>> pot_onsite_dn(size, {0.0, 0.0});
110-
dftu_pw::compute_pot_onsite_scalar(pot_onsite_up.data(), occ_mat_up.data(), U_val, 0.5, 0.5, m_size);
111-
dftu_pw::compute_pot_onsite_scalar(pot_onsite_dn.data(), occ_mat_dn.data(), U_val, 0.5, 0.5, m_size);
110+
DFTU_BASE::compute_pot_onsite_scalar(pot_onsite_up.data(), occ_mat_up.data(), U_val, 0.5, 0.5, m_size);
111+
DFTU_BASE::compute_pot_onsite_scalar(pot_onsite_dn.data(), occ_mat_dn.data(), U_val, 0.5, 0.5, m_size);
112112

113113
// pot_onsite_up[0,0] = U*(0.5 - 0.4) = 0.5
114114
EXPECT_DOUBLE_EQ(pot_onsite_up[0].real(), 0.5);
@@ -133,7 +133,7 @@ TEST_F(DftuPwTest, PotOnsitePotNspin4_PauliTransform)
133133
pot_onsite[2] = {0.3, 0.0}; // sigma_y
134134
pot_onsite[3] = {0.2, 0.0}; // sigma_z
135135

136-
dftu_pw::pauli_to_spin_basis(pot_onsite, m_size);
136+
DFTU_BASE::pauli_to_spin_basis(pot_onsite, m_size);
137137

138138
EXPECT_DOUBLE_EQ(pot_onsite[0].real(), 0.6); // 0.5*(1.0+0.2)
139139
EXPECT_DOUBLE_EQ(pot_onsite[0].imag(), 0.0);
@@ -164,7 +164,7 @@ TEST_F(DftuPwTest, EnergyNspin12_DiagonalLocale)
164164

165165
// nspin=1: E = U * 1.0 * (0.5^2 + 0.3^2 + 0.2^2) = 4 * 0.38 = 1.52
166166
std::vector<std::complex<double>> pot_onsite_nspin1(size, {0.0, 0.0});
167-
double energy_u = dftu_pw::compute_pot_onsite_scalar(
167+
double energy_u = DFTU_BASE::compute_pot_onsite_scalar(
168168
pot_onsite_nspin1.data(), occ_mat_c.data(), U_val, 0.5, 1.0, m_size);
169169
EXPECT_DOUBLE_EQ(energy_u, 1.52);
170170

@@ -174,9 +174,9 @@ TEST_F(DftuPwTest, EnergyNspin12_DiagonalLocale)
174174
std::vector<std::complex<double>> pot_onsite_up(size, {0.0, 0.0});
175175
std::vector<std::complex<double>> pot_onsite_dn(size, {0.0, 0.0});
176176
energy_u = 0.0;
177-
energy_u += dftu_pw::compute_pot_onsite_scalar(
177+
energy_u += DFTU_BASE::compute_pot_onsite_scalar(
178178
pot_onsite_up.data(), occ_mat_up.data(), U_val, 0.5, 0.5, m_size);
179-
energy_u += dftu_pw::compute_pot_onsite_scalar(
179+
energy_u += DFTU_BASE::compute_pot_onsite_scalar(
180180
pot_onsite_dn.data(), occ_mat_dn.data(), U_val, 0.5, 0.5, m_size);
181181
// E = U*0.5*(0.4^2 + 0.6^2) = 4*0.5*(0.16+0.36) = 1.04
182182
EXPECT_DOUBLE_EQ(energy_u, 1.04);
@@ -200,7 +200,7 @@ TEST_F(DftuPwTest, EnergyNspin4_WithOffDiagonal)
200200
occ_mat_c[size + 2] = 0.0; occ_mat_c[size + 3] = 0.2;
201201

202202
std::vector<std::complex<double>> pot_onsite(size * 4, {0.0, 0.0});
203-
double energy_u = dftu_pw::compute_pot_onsite_spinor(
203+
double energy_u = DFTU_BASE::compute_pot_onsite_spinor(
204204
pot_onsite.data(), occ_mat_c.data(), U_val, 1.0, weight_eu, m_size);
205205

206206
// is=0: 2*0.25*(0.5*0.5 + 0.1*0.1 + 0.1*0.1 + 0.5*0.5) = 0.26
@@ -227,7 +227,7 @@ TEST_F(DftuPwTest, LocaleAccumNspin12)
227227
wg(0, 1) = 0.5;
228228

229229
std::vector<double> occ_mat_c(m_size * m_size, 0.0);
230-
dftu_pw::accumulate_occ_scalar(
230+
DFTU_BASE::accumulate_occ_scalar(
231231
occ_mat_c.data(), becp.data(), nbands, nkb,
232232
begin_ih, m_begin, m_size, wg, ik);
233233

@@ -261,7 +261,7 @@ TEST_F(DftuPwTest, LocaleAccumNspin4_PauliComponents)
261261

262262
ModuleBase::matrix wg(1, nbands);
263263
wg(0, 0) = 1.0;
264-
dftu_pw::accumulate_occ_spinor(
264+
DFTU_BASE::accumulate_occ_spinor(
265265
occ_mat_c.data(), becp.data(), nbands, npol, nkb,
266266
0, 0, m_size, wg, ik);
267267

source/source_lcao/setup_dftu_lcao.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
#include "source_lcao/module_dftu/dftu_lcao_occ.h"
44
#include "source_lcao/module_dftu/dftu_lcao_energy.h"
55
#include "source_lcao/module_dftu/dftu_yukawa.h"
6-
#include "source_pw/module_pwdft/dftu_output.h" // mohan add 2025-11-08
6+
#include "source_pw/module_pwdft/dftu_base_io.h" // mohan add 2025-11-08
77
#include "source_estate/module_dm/density_matrix.h"
88
#include "source_lcao/hamilt_lcao.h"
99

@@ -73,7 +73,7 @@ void finish_dftu_lcao(const int iter,
7373
}
7474
DFTU_LCAO::cal_energy_correction(*dftu_ptr, ucell);
7575
}
76-
dftu_io::output(*dftu_ptr, ucell, out_chg, global_out_dir, nspin, npol);
76+
DFTU_BASE::output(*dftu_ptr, ucell, out_chg, global_out_dir, nspin, npol);
7777

7878
/// use the converged occupation matrix for next MD/Relax SCF calculation
7979
if (conv_esolver)

source/source_pw/module_pwdft/CMakeLists.txt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,9 @@ list(APPEND objects
1313
op_pw_exx_ace.cpp
1414
op_pw_exx_pot.cpp
1515
dftu_base.cpp
16-
dftu_output.cpp
17-
dftu_tools_pw.cpp
18-
dftu_cal_occ_pw.cpp
16+
dftu_base_io.cpp
17+
dftu_base_occ.cpp
18+
dftu_base_tools.cpp
1919
setup_pot.cpp
2020
setup_pwrho.cpp
2121
setup_pwwfc.cpp

0 commit comments

Comments
 (0)