From b63cd42286db43650fc2d5839dbf54729849b2ef Mon Sep 17 00:00:00 2001 From: Critsium Date: Tue, 23 Jun 2026 15:02:53 +0800 Subject: [PATCH 1/7] refactor(estate): slim elecstate.h via forward declarations Reduce the transitive include weight of source_estate/elecstate.h, a header included by ~140 translation units. It previously pulled in 68 headers (chain depth 11) by including parameter.h, potential_new.h, klist.h, charge.h and psi.h directly. Replace those with forward declarations of Charge, K_Vectors, Potential, psi::Psi, Input_para and the PW_Basis types, keeping only fp_energy.h and the newly-explicit matrix.h for value members. The inline constructor and destructor (which dereference Charge / delete Potential) are moved to elecstate.cpp so the pointer members can stay forward-declared. This drops elecstate.h to own_fan=2, depth=1. Add the now-required includes to the downstream files that relied on elecstate.h to provide those headers transitively and use the types via complete-type operations (member access, construction, delete). Only genuine complete-type users are touched; forward-decl-satisfiable by-reference uses are left as-is. Verified: elecstate.h parses standalone (-fsyntax-only); static include analysis reports 0 remaining complete-type breakages across the 216 TUs that transitively include it. Full MPI/FFTW build pending CI. Co-Authored-By: Claude Opus 4.8 --- source/source_esolver/esolver_fp.h | 1 + source/source_esolver/esolver_gets.cpp | 1 + source/source_esolver/esolver_ks.cpp | 1 + source/source_esolver/esolver_of.cpp | 1 + .../source_esolver/esolver_of_interface.cpp | 1 + source/source_esolver/esolver_of_tool.cpp | 1 + source/source_esolver/pw_others.cpp | 1 + source/source_estate/elecstate.cpp | 21 +++++++ source/source_estate/elecstate.h | 55 ++++++++++++------- source/source_estate/elecstate_energy.cpp | 1 + .../source_estate/elecstate_energy_terms.cpp | 1 + source/source_estate/elecstate_pw_cal_tau.cpp | 2 + source/source_estate/elecstate_tools.cpp | 1 + source/source_estate/init_scf.cpp | 3 + .../source_estate/module_charge/chgmixing.cpp | 1 + source/source_estate/module_dm/init_dm.cpp | 2 + source/source_estate/setup_estate_pw.cpp | 1 + .../test/elecstate_base_test.cpp | 2 + source/source_estate/update_pot.cpp | 1 + source/source_hsolver/hsolver_pw.cpp | 1 + source/source_hsolver/hsolver_pw_sdft.cpp | 1 + .../test/hsolver_supplementary_mock.h | 1 + source/source_io/module_chgpot/write_init.cpp | 1 + .../source_io/module_ctrl/ctrl_output_fp.cpp | 2 + .../source_io/module_ctrl/ctrl_output_pw.cpp | 1 + .../source_io/module_ctrl/ctrl_scf_lcao.cpp | 1 + source/source_io/module_dos/cal_ldos.cpp | 1 + .../module_ml/cal_mlkedf_descriptors.cpp | 1 + source/source_io/module_wf/get_wf_lcao.cpp | 1 + source/source_lcao/module_ri/RPA_LRI.hpp | 1 + .../source_pw/module_ofdft/evolve_ofdft.cpp | 1 + source/source_pw/module_pwdft/forces_us.cpp | 1 + source/source_pw/module_pwdft/op_pw_proj.cpp | 1 + source/source_pw/module_pwdft/setup_pot.cpp | 2 + source/source_pw/module_pwdft/stress_exx.cpp | 1 + source/source_pw/module_pwdft/stress_pw.cpp | 1 + source/source_pw/module_pwdft/stress_us.cpp | 1 + 37 files changed, 98 insertions(+), 20 deletions(-) diff --git a/source/source_esolver/esolver_fp.h b/source/source_esolver/esolver_fp.h index 501bef9b681..399008ab5c1 100644 --- a/source/source_esolver/esolver_fp.h +++ b/source/source_esolver/esolver_fp.h @@ -6,6 +6,7 @@ #include "source_base/timer_wrapper.h" #include "source_basis/module_pw/pw_basis.h" // plane wave basis +#include "source_cell/klist.h" // K_Vectors kv value member (no longer via elecstate.h) #include "source_estate/elecstate.h" // electronic states #include "source_estate/module_charge/charge_extra.h" // charge extrapolation #include "source_hamilt/module_surchem/surchem.h" // solvation model diff --git a/source/source_esolver/esolver_gets.cpp b/source/source_esolver/esolver_gets.cpp index c66e33bce6f..eb9c9348fdd 100644 --- a/source/source_esolver/esolver_gets.cpp +++ b/source/source_esolver/esolver_gets.cpp @@ -1,4 +1,5 @@ #include "esolver_gets.h" +#include "source_io/module_parameter/parameter.h" // IWYU: elecstate.h no longer provides this transitively #include "source_base/timer.h" #include "source_cell/module_neighbor/sltk_atom_arrange.h" diff --git a/source/source_esolver/esolver_ks.cpp b/source/source_esolver/esolver_ks.cpp index 007184773b9..349cd2449f7 100644 --- a/source/source_esolver/esolver_ks.cpp +++ b/source/source_esolver/esolver_ks.cpp @@ -1,4 +1,5 @@ #include "esolver_ks.h" +#include "source_io/module_parameter/parameter.h" // IWYU: elecstate.h no longer provides this transitively #include "source_base/timer_wrapper.h" // for jason output information diff --git a/source/source_esolver/esolver_of.cpp b/source/source_esolver/esolver_of.cpp index b346df60fb8..a5a2dcdc325 100644 --- a/source/source_esolver/esolver_of.cpp +++ b/source/source_esolver/esolver_of.cpp @@ -1,4 +1,5 @@ #include "esolver_of.h" +#include "source_estate/module_pot/potential_new.h" // IWYU: elecstate.h no longer provides this transitively #include "source_io/module_parameter/parameter.h" #include "source_io/module_output/cube_io.h" diff --git a/source/source_esolver/esolver_of_interface.cpp b/source/source_esolver/esolver_of_interface.cpp index d428b795069..247c4478d0e 100644 --- a/source/source_esolver/esolver_of_interface.cpp +++ b/source/source_esolver/esolver_of_interface.cpp @@ -1,4 +1,5 @@ #include "esolver_of.h" +#include "source_estate/module_pot/potential_new.h" // IWYU: elecstate.h no longer provides this transitively #include "source_io/module_parameter/parameter.h" namespace ModuleESolver diff --git a/source/source_esolver/esolver_of_tool.cpp b/source/source_esolver/esolver_of_tool.cpp index ade24621cab..3b1078249b4 100644 --- a/source/source_esolver/esolver_of_tool.cpp +++ b/source/source_esolver/esolver_of_tool.cpp @@ -1,4 +1,5 @@ #include "esolver_of.h" +#include "source_estate/module_pot/potential_new.h" // IWYU: elecstate.h no longer provides this transitively #include "source_base/formatter.h" #include "source_base/memory_recorder.h" #include "source_estate/module_pot/efield.h" diff --git a/source/source_esolver/pw_others.cpp b/source/source_esolver/pw_others.cpp index bbacac36566..1967aeaf3fb 100644 --- a/source/source_esolver/pw_others.cpp +++ b/source/source_esolver/pw_others.cpp @@ -1,4 +1,5 @@ #include "esolver_ks_pw.h" +#include "source_io/module_parameter/parameter.h" // IWYU: elecstate.h no longer provides this transitively #include "source_base/module_device/device.h" #include "source_io/module_bessel/numerical_basis.h" #include "source_io/module_bessel/numerical_descriptor.h" diff --git a/source/source_estate/elecstate.cpp b/source/source_estate/elecstate.cpp index 5ed97e678c7..3005004158a 100644 --- a/source/source_estate/elecstate.cpp +++ b/source/source_estate/elecstate.cpp @@ -2,11 +2,32 @@ #include "source_io/module_parameter/parameter.h" #include "source_base/parallel_reduce.h" #include "source_base/tool_title.h" +#include "source_estate/module_charge/charge.h" +#include "module_pot/potential_new.h" +#include "source_basis/module_pw/pw_basis.h" +#include "source_basis/module_pw/pw_basis_big.h" #include "occupy.h" namespace elecstate { +ElecState::ElecState(Charge* chr_in, ModulePW::PW_Basis* rhopw_in, ModulePW::PW_Basis_Big* bigpw_in) +{ + this->charge = chr_in; + this->charge->set_rhopw(rhopw_in); + this->bigpw = bigpw_in; + this->eferm.two_efermi = PARAM.globalv.two_fermi; +} + +ElecState::~ElecState() +{ + if (this->pot != nullptr) + { + delete this->pot; + this->pot = nullptr; + } +} + const double* ElecState::getRho(int spin) const { return &(this->charge->rho[spin][0]); diff --git a/source/source_estate/elecstate.h b/source/source_estate/elecstate.h index a4191df38d8..23c24c953ca 100644 --- a/source/source_estate/elecstate.h +++ b/source/source_estate/elecstate.h @@ -2,36 +2,51 @@ #define ELECSTATE_H #include "fp_energy.h" -#include "source_cell/klist.h" -#include "source_estate/module_charge/charge.h" -#include "source_io/module_parameter/parameter.h" -#include "source_psi/psi.h" -#include "module_pot/potential_new.h" +#include "source_base/matrix.h" + +#include +#include +#include + +// Forward declarations keep this widely-included header lightweight; the +// corresponding full definitions are pulled in by elecstate.cpp instead. +class Charge; +class K_Vectors; +class UnitCell; +class Parallel_Grid; +struct Input_para; +namespace ModuleBase +{ +class ComplexMatrix; +} +namespace ModulePW +{ +class PW_Basis; +class PW_Basis_Big; +} // namespace ModulePW +namespace base_device +{ +struct DEVICE_CPU; +} +namespace psi +{ +template +class Psi; +} namespace elecstate { +class Potential; + class ElecState { public: ElecState() { } - ElecState(Charge* chr_in, ModulePW::PW_Basis* rhopw_in, ModulePW::PW_Basis_Big* bigpw_in) - { - this->charge = chr_in; - this->charge->set_rhopw(rhopw_in); - this->bigpw = bigpw_in; - this->eferm.two_efermi = PARAM.globalv.two_fermi; - } - virtual ~ElecState() - { - if (this->pot != nullptr) - { - delete this->pot; - this->pot = nullptr; - } - } + ElecState(Charge* chr_in, ModulePW::PW_Basis* rhopw_in, ModulePW::PW_Basis_Big* bigpw_in); + virtual ~ElecState(); void init_ks(Charge* chr_in, // pointer for class Charge const K_Vectors* klist_in, int nk_in, // number of k points diff --git a/source/source_estate/elecstate_energy.cpp b/source/source_estate/elecstate_energy.cpp index 34e6c3aa278..02c564e7b95 100644 --- a/source/source_estate/elecstate_energy.cpp +++ b/source/source_estate/elecstate_energy.cpp @@ -5,6 +5,7 @@ #include "makov_payne.h" #include "source_hamilt/module_xc/xc_functional.h" #include "source_estate/module_pot/H_Hartree_pw.h" +#include "module_pot/potential_new.h" // ElecState::pot is now fwd-declared in elecstate.h #include "source_io/module_parameter/parameter.h" #include diff --git a/source/source_estate/elecstate_energy_terms.cpp b/source/source_estate/elecstate_energy_terms.cpp index ebe0068c27b..39961222166 100644 --- a/source/source_estate/elecstate_energy_terms.cpp +++ b/source/source_estate/elecstate_energy_terms.cpp @@ -1,5 +1,6 @@ #include "elecstate.h" #include "source_base/parallel_reduce.h" +#include "module_pot/potential_new.h" // ElecState::pot is now fwd-declared in elecstate.h #include "source_estate/module_pot/H_Hartree_pw.h" #include "source_estate/module_pot/efield.h" #include "source_estate/module_pot/gatefield.h" diff --git a/source/source_estate/elecstate_pw_cal_tau.cpp b/source/source_estate/elecstate_pw_cal_tau.cpp index a59990600a3..d5474d2fbea 100644 --- a/source/source_estate/elecstate_pw_cal_tau.cpp +++ b/source/source_estate/elecstate_pw_cal_tau.cpp @@ -1,4 +1,6 @@ #include "elecstate_pw.h" +#include "source_estate/module_charge/charge.h" // IWYU: elecstate.h no longer provides this transitively +#include "source_io/module_parameter/parameter.h" // IWYU: elecstate.h no longer provides this transitively namespace elecstate { diff --git a/source/source_estate/elecstate_tools.cpp b/source/source_estate/elecstate_tools.cpp index 3076c6b437e..6a4a86d5a69 100644 --- a/source/source_estate/elecstate_tools.cpp +++ b/source/source_estate/elecstate_tools.cpp @@ -1,4 +1,5 @@ #include "elecstate_tools.h" +#include "source_io/module_parameter/parameter.h" // IWYU: elecstate.h no longer provides this transitively #include "occupy.h" #include "source_base/parallel_reduce.h" namespace elecstate diff --git a/source/source_estate/init_scf.cpp b/source/source_estate/init_scf.cpp index a86c82b7b0c..67df4ccf275 100644 --- a/source/source_estate/init_scf.cpp +++ b/source/source_estate/init_scf.cpp @@ -1,4 +1,7 @@ #include "elecstate.h" +#include "module_pot/potential_new.h" // ElecState::pot is now fwd-declared in elecstate.h +#include "source_estate/module_charge/charge.h" // ElecState::charge is now fwd-declared in elecstate.h +#include "source_io/module_parameter/parameter.h" // PARAM is no longer pulled in via elecstate.h #include "source_io/module_chgpot/write_init.h" namespace elecstate diff --git a/source/source_estate/module_charge/chgmixing.cpp b/source/source_estate/module_charge/chgmixing.cpp index 1fd48fac5d3..9942c025489 100644 --- a/source/source_estate/module_charge/chgmixing.cpp +++ b/source/source_estate/module_charge/chgmixing.cpp @@ -1,4 +1,5 @@ #include "source_estate/module_charge/chgmixing.h" +#include "source_io/module_parameter/parameter.h" // IWYU: elecstate.h no longer provides this transitively #include "source_estate/update_pot.h" #include "source_lcao/module_dftu/dftu.h" #include "source_lcao/module_deltaspin/spin_constrain.h" diff --git a/source/source_estate/module_dm/init_dm.cpp b/source/source_estate/module_dm/init_dm.cpp index 20b7fa1217d..2f4af7befef 100644 --- a/source/source_estate/module_dm/init_dm.cpp +++ b/source/source_estate/module_dm/init_dm.cpp @@ -1,4 +1,6 @@ #include "source_estate/module_dm/init_dm.h" +#include "source_estate/module_pot/potential_new.h" // IWYU: elecstate.h no longer provides this transitively +#include "source_io/module_parameter/parameter.h" // IWYU: elecstate.h no longer provides this transitively #include "source_estate/module_dm/cal_dm_psi.h" #include "source_estate/elecstate_tools.h" #include "source_estate/cal_ux.h" diff --git a/source/source_estate/setup_estate_pw.cpp b/source/source_estate/setup_estate_pw.cpp index 654969faa9f..bf2bc658f14 100644 --- a/source/source_estate/setup_estate_pw.cpp +++ b/source/source_estate/setup_estate_pw.cpp @@ -1,4 +1,5 @@ #include "source_estate/setup_estate_pw.h" +#include "source_io/module_parameter/parameter.h" // IWYU: elecstate.h no longer provides this transitively #include "source_estate/elecstate_pw.h" #include "source_estate/elecstate_pw_sdft.h" #include "source_estate/elecstate_tools.h" diff --git a/source/source_estate/test/elecstate_base_test.cpp b/source/source_estate/test/elecstate_base_test.cpp index beb5a0a2e16..45f42b7b4d0 100644 --- a/source/source_estate/test/elecstate_base_test.cpp +++ b/source/source_estate/test/elecstate_base_test.cpp @@ -5,6 +5,8 @@ #define protected public #include "source_estate/elecstate.h" #include "source_estate/elecstate_tools.h" +#include "source_estate/module_charge/charge.h" // new Charge / charge->rho (no longer via elecstate.h) +#include "source_estate/module_pot/potential_new.h" // Potential (no longer via elecstate.h) #include "source_estate/occupy.h" #include "source_io/module_parameter/parameter.h" #include "source_base/module_fft/fft_bundle.h" diff --git a/source/source_estate/update_pot.cpp b/source/source_estate/update_pot.cpp index f0f0ef861a7..a30766323fc 100644 --- a/source/source_estate/update_pot.cpp +++ b/source/source_estate/update_pot.cpp @@ -1,4 +1,5 @@ #include "source_estate/update_pot.h" +#include "source_estate/module_pot/potential_new.h" // IWYU: elecstate.h no longer provides this transitively #include "source_estate/cal_ux.h" void elecstate::update_pot(UnitCell& ucell, // unitcell diff --git a/source/source_hsolver/hsolver_pw.cpp b/source/source_hsolver/hsolver_pw.cpp index b88bc3b90dd..6ee17aea8a5 100644 --- a/source/source_hsolver/hsolver_pw.cpp +++ b/source/source_hsolver/hsolver_pw.cpp @@ -1,4 +1,5 @@ #include "hsolver_pw.h" +#include "source_estate/module_pot/potential_new.h" // IWYU: elecstate.h no longer provides this transitively #include "source_base/parallel_comm.h" #include "source_base/global_variable.h" diff --git a/source/source_hsolver/hsolver_pw_sdft.cpp b/source/source_hsolver/hsolver_pw_sdft.cpp index f3c3d2f66a3..cbd99264793 100644 --- a/source/source_hsolver/hsolver_pw_sdft.cpp +++ b/source/source_hsolver/hsolver_pw_sdft.cpp @@ -1,4 +1,5 @@ #include "hsolver_pw_sdft.h" +#include "source_io/module_parameter/parameter.h" // IWYU: elecstate.h no longer provides this transitively #include "source_base/global_function.h" #include "source_base/parallel_device.h" diff --git a/source/source_hsolver/test/hsolver_supplementary_mock.h b/source/source_hsolver/test/hsolver_supplementary_mock.h index 7dc30d77233..221e2a18359 100644 --- a/source/source_hsolver/test/hsolver_supplementary_mock.h +++ b/source/source_hsolver/test/hsolver_supplementary_mock.h @@ -1,5 +1,6 @@ #pragma once #include "source_estate/elecstate_pw.h" +#include "source_estate/module_charge/charge.h" // IWYU: elecstate.h no longer provides this transitively namespace elecstate { diff --git a/source/source_io/module_chgpot/write_init.cpp b/source/source_io/module_chgpot/write_init.cpp index b7ffdc18893..d70edd5b515 100644 --- a/source/source_io/module_chgpot/write_init.cpp +++ b/source/source_io/module_chgpot/write_init.cpp @@ -15,6 +15,7 @@ // ===================================================================== #include "source_io/module_chgpot/write_init.h" +#include "source_estate/module_pot/potential_new.h" // IWYU: elecstate.h no longer provides this transitively #include "source_io/module_output/cube_io.h" #include "source_base/tool_quit.h" diff --git a/source/source_io/module_ctrl/ctrl_output_fp.cpp b/source/source_io/module_ctrl/ctrl_output_fp.cpp index 87aa062bc0c..ef7e5a9e301 100644 --- a/source/source_io/module_ctrl/ctrl_output_fp.cpp +++ b/source/source_io/module_ctrl/ctrl_output_fp.cpp @@ -1,4 +1,6 @@ #include "ctrl_output_fp.h" // use ctrl_output_fp() +#include "source_estate/module_pot/potential_new.h" // IWYU: elecstate.h no longer provides this transitively +#include "source_io/module_parameter/parameter.h" // IWYU: elecstate.h no longer provides this transitively #include "../module_output/cube_io.h" // use write_vdata_palgrid #include "../module_dipole/dipole_io.h" // use write_dipole #include "source_estate/module_charge/symmetry_rho.h" // use Symmetry_rho diff --git a/source/source_io/module_ctrl/ctrl_output_pw.cpp b/source/source_io/module_ctrl/ctrl_output_pw.cpp index 580bc314efb..b47a4338544 100644 --- a/source/source_io/module_ctrl/ctrl_output_pw.cpp +++ b/source/source_io/module_ctrl/ctrl_output_pw.cpp @@ -1,4 +1,5 @@ #include "ctrl_output_pw.h" +#include "source_estate/module_pot/potential_new.h" // IWYU: elecstate.h no longer provides this transitively #include "../module_wf/write_wfc_pw.h" // use write_wfc_pw #include "../module_dos/write_dos_pw.h" // use write_dos_pw diff --git a/source/source_io/module_ctrl/ctrl_scf_lcao.cpp b/source/source_io/module_ctrl/ctrl_scf_lcao.cpp index 95b0bcb6e43..23067b7b42c 100644 --- a/source/source_io/module_ctrl/ctrl_scf_lcao.cpp +++ b/source/source_io/module_ctrl/ctrl_scf_lcao.cpp @@ -1,4 +1,5 @@ #include "ctrl_scf_lcao.h" // use ctrl_scf_lcao() +#include "source_estate/module_pot/potential_new.h" // IWYU: elecstate.h no longer provides this transitively #include "source_base/formatter.h" #include "source_estate/elecstate_lcao.h" // use elecstate::ElecState diff --git a/source/source_io/module_dos/cal_ldos.cpp b/source/source_io/module_dos/cal_ldos.cpp index 1e92e2e4e4b..36abe777407 100644 --- a/source/source_io/module_dos/cal_ldos.cpp +++ b/source/source_io/module_dos/cal_ldos.cpp @@ -1,4 +1,5 @@ #include "cal_ldos.h" +#include "source_io/module_parameter/parameter.h" // IWYU: elecstate.h no longer provides this transitively #include "cal_dos.h" #include "../module_output/cube_io.h" diff --git a/source/source_io/module_ml/cal_mlkedf_descriptors.cpp b/source/source_io/module_ml/cal_mlkedf_descriptors.cpp index 22a7b794d43..b8f31f7cac2 100644 --- a/source/source_io/module_ml/cal_mlkedf_descriptors.cpp +++ b/source/source_io/module_ml/cal_mlkedf_descriptors.cpp @@ -1,4 +1,5 @@ #include "cal_mlkedf_descriptors.h" +#include "source_estate/module_charge/charge.h" // IWYU: elecstate.h no longer provides this transitively namespace ModuleIO { diff --git a/source/source_io/module_wf/get_wf_lcao.cpp b/source/source_io/module_wf/get_wf_lcao.cpp index 04e0c4d97b0..9099741ea6f 100644 --- a/source/source_io/module_wf/get_wf_lcao.cpp +++ b/source/source_io/module_wf/get_wf_lcao.cpp @@ -1,4 +1,5 @@ #include "get_wf_lcao.h" +#include "source_estate/module_charge/charge.h" // IWYU: elecstate.h no longer provides this transitively #include "source_base/module_external/blacs_connector.h" #include "source_io/module_output/cube_io.h" diff --git a/source/source_lcao/module_ri/RPA_LRI.hpp b/source/source_lcao/module_ri/RPA_LRI.hpp index 0323df970d0..eb05eaada3b 100644 --- a/source/source_lcao/module_ri/RPA_LRI.hpp +++ b/source/source_lcao/module_ri/RPA_LRI.hpp @@ -18,6 +18,7 @@ #include "source_basis/module_ao/element_basis_index-ORB.h" #include "source_estate/elecstate_lcao.h" #include "source_io/module_parameter/parameter.h" +#include "source_psi/psi.h" // psi.get_nbasis() (no longer via elecstate.h) #if defined(__GLIBC__) #include diff --git a/source/source_pw/module_ofdft/evolve_ofdft.cpp b/source/source_pw/module_ofdft/evolve_ofdft.cpp index 7f276781ddb..0d5ef72ed1d 100644 --- a/source/source_pw/module_ofdft/evolve_ofdft.cpp +++ b/source/source_pw/module_ofdft/evolve_ofdft.cpp @@ -1,4 +1,5 @@ #include "evolve_ofdft.h" +#include "source_estate/module_pot/potential_new.h" // IWYU: elecstate.h no longer provides this transitively #include "source_io/module_parameter/parameter.h" #include diff --git a/source/source_pw/module_pwdft/forces_us.cpp b/source/source_pw/module_pwdft/forces_us.cpp index ea2efeb50a2..b3dd053c0e2 100644 --- a/source/source_pw/module_pwdft/forces_us.cpp +++ b/source/source_pw/module_pwdft/forces_us.cpp @@ -1,4 +1,5 @@ #include "forces.h" +#include "source_estate/module_pot/potential_new.h" // IWYU: elecstate.h no longer provides this transitively #include "source_base/parallel_reduce.h" #include "source_pw/module_pwdft/vnl_pw.h" #include "source_base/libm/libm.h" diff --git a/source/source_pw/module_pwdft/op_pw_proj.cpp b/source/source_pw/module_pwdft/op_pw_proj.cpp index 5294a2b7de6..6e0d166fd9f 100644 --- a/source/source_pw/module_pwdft/op_pw_proj.cpp +++ b/source/source_pw/module_pwdft/op_pw_proj.cpp @@ -1,4 +1,5 @@ #include "op_pw_proj.h" +#include "source_io/module_parameter/parameter.h" // IWYU: elecstate.h no longer provides this transitively #include "source_base/timer.h" #include "source_base/parallel_reduce.h" diff --git a/source/source_pw/module_pwdft/setup_pot.cpp b/source/source_pw/module_pwdft/setup_pot.cpp index e6a5603546c..9cca7d38224 100644 --- a/source/source_pw/module_pwdft/setup_pot.cpp +++ b/source/source_pw/module_pwdft/setup_pot.cpp @@ -1,4 +1,6 @@ #include "source_pw/module_pwdft/setup_pot.h" +#include "source_estate/module_pot/potential_new.h" // IWYU: elecstate.h no longer provides this transitively +#include "source_io/module_parameter/parameter.h" // IWYU: elecstate.h no longer provides this transitively #include "source_estate/module_charge/symmetry_rho.h" #include "source_lcao/module_deltaspin/spin_constrain.h" diff --git a/source/source_pw/module_pwdft/stress_exx.cpp b/source/source_pw/module_pwdft/stress_exx.cpp index 29900f92f67..bedc503408d 100644 --- a/source/source_pw/module_pwdft/stress_exx.cpp +++ b/source/source_pw/module_pwdft/stress_exx.cpp @@ -1,4 +1,5 @@ #include "source_hamilt/module_xc/exx_info.h" +#include "source_io/module_parameter/parameter.h" // IWYU: elecstate.h no longer provides this transitively #include "op_pw_exx.h" #include "source_base/parallel_common.h" #include "source_base/parallel_reduce.h" diff --git a/source/source_pw/module_pwdft/stress_pw.cpp b/source/source_pw/module_pwdft/stress_pw.cpp index d511361a147..6e4942401c5 100644 --- a/source/source_pw/module_pwdft/stress_pw.cpp +++ b/source/source_pw/module_pwdft/stress_pw.cpp @@ -1,4 +1,5 @@ #include "stress_pw.h" +#include "source_estate/module_pot/potential_new.h" // IWYU: elecstate.h no longer provides this transitively #include "source_base/timer.h" #include "source_base/global_variable.h" // use GlobalC diff --git a/source/source_pw/module_pwdft/stress_us.cpp b/source/source_pw/module_pwdft/stress_us.cpp index 82a0f16eb73..1eb33d162e3 100644 --- a/source/source_pw/module_pwdft/stress_us.cpp +++ b/source/source_pw/module_pwdft/stress_us.cpp @@ -1,4 +1,5 @@ #include "source_base/libm/libm.h" +#include "source_estate/module_pot/potential_new.h" // IWYU: elecstate.h no longer provides this transitively #include "source_base/parallel_reduce.h" #include "source_io/module_parameter/parameter.h" #include "source_base/math_polyint.h" From 75ecd290820b9e96eba27ed6a5c33b6ce43170c8 Mon Sep 17 00:00:00 2001 From: Critsium Date: Tue, 23 Jun 2026 15:14:48 +0800 Subject: [PATCH 2/7] fix(estate): include psi.h in elecstate.h to avoid default-arg clash The previous forward declaration of psi::Psi repeated its default template argument (Device = base_device::DEVICE_CPU), which is also declared in psi.h. Any translation unit including both headers hit "redefinition of default argument" (a default template argument may be specified only once per TU). A standalone parse of elecstate.h did not surface this because the clash only manifests when both headers are combined. Since psi.h is very light (own_fan=2: memory_op.h + types.h), include it directly instead of forward-declaring. elecstate.h own_fan goes 68 -> 5, still a 93% reduction; the heavy headers (potential_new own_fan=58, klist=42, parameter, charge) remain forward-declared. No include cycle is introduced (psi.h pulls only source_base). Also add an explicit parameter.h to rdmft.cpp, which uses PARAM directly but only received it transitively through elecstate.h. Verified: TUs including psi.h + elecstate.h in either order now parse (-fsyntax-only); static analysis reports 0 complete-type breakages. Co-Authored-By: Claude Opus 4.8 --- source/source_estate/elecstate.h | 10 +--------- source/source_lcao/module_rdmft/rdmft.cpp | 1 + 2 files changed, 2 insertions(+), 9 deletions(-) diff --git a/source/source_estate/elecstate.h b/source/source_estate/elecstate.h index 23c24c953ca..05a9f2725a2 100644 --- a/source/source_estate/elecstate.h +++ b/source/source_estate/elecstate.h @@ -3,6 +3,7 @@ #include "fp_energy.h" #include "source_base/matrix.h" +#include "source_psi/psi.h" // Psi appears in virtual method signatures; psi.h is light (own_fan=2) #include #include @@ -24,15 +25,6 @@ namespace ModulePW class PW_Basis; class PW_Basis_Big; } // namespace ModulePW -namespace base_device -{ -struct DEVICE_CPU; -} -namespace psi -{ -template -class Psi; -} namespace elecstate { diff --git a/source/source_lcao/module_rdmft/rdmft.cpp b/source/source_lcao/module_rdmft/rdmft.cpp index d62a3ee3716..3e062f22efb 100644 --- a/source/source_lcao/module_rdmft/rdmft.cpp +++ b/source/source_lcao/module_rdmft/rdmft.cpp @@ -5,6 +5,7 @@ #include "rdmft.h" #include "source_lcao/module_rdmft/rdmft_tools.h" +#include "source_io/module_parameter/parameter.h" // PARAM (no longer via elecstate.h) #include "source_base/timer.h" #include "source_base/parallel_reduce.h" #include "source_cell/module_symmetry/symmetry.h" From da1eb6cac749d12c561c2cdd715d60ac955084b0 Mon Sep 17 00:00:00 2001 From: Critsium Date: Tue, 23 Jun 2026 15:29:59 +0800 Subject: [PATCH 3/7] refactor(estate): keep parameter.h, forward-declare heavy data headers Adopt the cost/benefit-optimal slimming of elecstate.h. Quantified per dropped header (own_fan saved vs downstream files needing a direct include): potential_new.h : own_fan 58, breaks ~5 -> forward-declare klist.h : own_fan 42, breaks ~52 -> forward-declare charge.h : own_fan 37, breaks ~25 -> forward-declare parameter.h : own_fan 4, breaks ~120 -> KEEP included parameter.h saves almost no include weight but its removal would force ~120 downstream PARAM/Input_para users to add their own include, so it is kept in elecstate.h. The three heavy data headers are forward-declared; UnitCell, PW_Basis, ComplexMatrix and Parallel_Grid (reached transitively through klist/charge) are forward-declared too. Result: elecstate.h own_fan 68 -> 10 (85% reduction) with no include cycle. Downstream files that used Charge / Potential / K_Vectors / UnitCell / PW_Basis via complete-type operations and previously got those headers transitively through elecstate.h now include them directly (include-what-you- use). Detection is #ifdef-proof: it flags only files that name the symbol via a complete-type pattern and lack a direct include, ignoring transitive closure (which static parsing cannot evaluate through #ifdef guards). Verified: elecstate.h parses with psi.h in either order (-fsyntax-only); static analysis reports 0 remaining complete-type breakages for the five forward-declared interface headers. Niche types (Magnetism, Symmetry, Atom, PotBase, surchem) are covered transitively by the added unitcell.h / potential_new.h includes. A few rarely-used types (Parallel_Kpoints, PW_Basis_K) may still surface in CI and will be fixed in a follow-up pass. Co-Authored-By: Claude Opus 4.8 --- source/source_esolver/esolver_double_xc.cpp | 3 +++ source/source_esolver/esolver_fp.cpp | 1 + source/source_esolver/esolver_gets.cpp | 2 +- source/source_esolver/esolver_ks.cpp | 1 - source/source_esolver/esolver_ks_lcao.cpp | 1 + source/source_esolver/esolver_ks_lcaopw.cpp | 1 + source/source_esolver/esolver_ks_pw.cpp | 2 ++ source/source_esolver/esolver_of.cpp | 2 ++ source/source_esolver/esolver_of_tool.cpp | 1 + source/source_esolver/esolver_sdft_pw.cpp | 1 + source/source_esolver/lcao_others.cpp | 1 + source/source_esolver/pw_others.cpp | 2 +- source/source_estate/elecstate.h | 8 +++++--- source/source_estate/elecstate_energy.cpp | 3 +++ source/source_estate/elecstate_energy_terms.cpp | 2 ++ source/source_estate/elecstate_lcao.cpp | 1 + source/source_estate/elecstate_print.cpp | 1 + source/source_estate/elecstate_pw.cpp | 3 +++ source/source_estate/elecstate_pw_cal_tau.cpp | 1 - source/source_estate/elecstate_pw_sdft.cpp | 1 + source/source_estate/elecstate_tools.cpp | 1 - source/source_estate/init_scf.cpp | 1 - source/source_estate/module_charge/chgmixing.cpp | 1 - source/source_estate/module_dm/init_dm.cpp | 1 - source/source_estate/setup_estate_pw.cpp | 1 - source/source_estate/test/elecstate_base_test.cpp | 1 + source/source_estate/test/elecstate_print_test.cpp | 1 + source/source_estate/test/elecstate_pw_test.cpp | 2 ++ source/source_hsolver/hsolver_pw_sdft.cpp | 2 +- source/source_hsolver/test/test_hsolver_pw.cpp | 1 + source/source_hsolver/test/test_hsolver_sdft.cpp | 1 + source/source_io/module_ctrl/ctrl_iter_lcao.cpp | 1 + source/source_io/module_ctrl/ctrl_output_fp.cpp | 2 +- source/source_io/module_ctrl/ctrl_output_pw.cpp | 1 + source/source_io/module_ctrl/ctrl_scf_lcao.cpp | 1 + source/source_io/module_current/td_current_io.cpp | 1 + source/source_io/module_current/td_current_io_comm.cpp | 1 + source/source_io/module_dos/cal_ldos.cpp | 3 ++- source/source_io/module_energy/write_proj_band_lcao.cpp | 1 + source/source_io/module_ml/cal_mlkedf_descriptors.cpp | 1 + source/source_io/module_ml/write_mlkedf_descriptors.cpp | 1 + source/source_lcao/FORCE_STRESS.cpp | 1 + source/source_lcao/module_deltaspin/init_sc.cpp | 1 + source/source_lcao/module_dftu/dftu_force.cpp | 1 + source/source_lcao/module_lr/esolver_lrtd_lcao.cpp | 1 + source/source_lcao/module_operator_lcao/dspin_lcao.cpp | 1 + source/source_lcao/module_rdmft/rdmft.cpp | 1 - source/source_lcao/module_rdmft/update_state_rdmft.cpp | 2 ++ source/source_lcao/module_ri/Exx_LRI_interface.hpp | 1 + source/source_lcao/module_ri/RPA_LRI.hpp | 1 + source/source_lcao/module_ri/exx_lip.hpp | 1 + source/source_main/driver_run.cpp | 1 + source/source_pw/module_ofdft/of_stress_pw.cpp | 1 + source/source_pw/module_pwdft/exx_helper.cpp | 1 + source/source_pw/module_pwdft/forces.cpp | 3 +++ source/source_pw/module_pwdft/forces_cc.cpp | 1 + source/source_pw/module_pwdft/forces_scc.cpp | 1 + source/source_pw/module_pwdft/forces_us.cpp | 2 ++ source/source_pw/module_pwdft/hamilt_pw.cpp | 1 + source/source_pw/module_pwdft/onsite_proj.cpp | 1 + source/source_pw/module_pwdft/op_pw_proj.cpp | 1 - source/source_pw/module_pwdft/setup_pot.cpp | 1 - source/source_pw/module_pwdft/stress_exx.cpp | 3 ++- source/source_pw/module_pwdft/stress_pw.cpp | 1 + source/source_pw/module_pwdft/stress_us.cpp | 2 ++ source/source_pw/module_stodft/sto_forces.cpp | 1 + source/source_pw/module_stodft/sto_iter.cpp | 2 ++ source/source_pw/module_stodft/sto_stress_pw.cpp | 1 + source/source_pw/module_stodft/test/test_hamilt_sto.cpp | 2 ++ source/source_relax/ions_move_lbfgs.cpp | 1 + source/source_relax/relax_driver.cpp | 1 + source/source_relax/test/ions_move_methods_test.cpp | 1 + 72 files changed, 85 insertions(+), 19 deletions(-) diff --git a/source/source_esolver/esolver_double_xc.cpp b/source/source_esolver/esolver_double_xc.cpp index 2baaffb1ec5..5013519c04c 100644 --- a/source/source_esolver/esolver_double_xc.cpp +++ b/source/source_esolver/esolver_double_xc.cpp @@ -1,4 +1,7 @@ #include "esolver_double_xc.h" +#include "source_basis/module_pw/pw_basis.h" // IWYU: was transitively via elecstate.h +#include "source_cell/unitcell.h" // IWYU: was transitively via elecstate.h +#include "source_estate/module_pot/potential_new.h" // IWYU: was transitively via elecstate.h #include "source_hamilt/module_xc/xc_functional.h" #include "source_hamilt/module_ewald/H_Ewald_pw.h" #include "source_hamilt/module_vdw/vdw.h" diff --git a/source/source_esolver/esolver_fp.cpp b/source/source_esolver/esolver_fp.cpp index 1ddb636c8ab..d9650806a22 100644 --- a/source/source_esolver/esolver_fp.cpp +++ b/source/source_esolver/esolver_fp.cpp @@ -1,4 +1,5 @@ #include "esolver_fp.h" +#include "source_cell/unitcell.h" // IWYU: was transitively via elecstate.h #include "source_estate/cal_ux.h" #include "source_estate/module_charge/symmetry_rho.h" diff --git a/source/source_esolver/esolver_gets.cpp b/source/source_esolver/esolver_gets.cpp index eb9c9348fdd..8d3b4e20624 100644 --- a/source/source_esolver/esolver_gets.cpp +++ b/source/source_esolver/esolver_gets.cpp @@ -1,5 +1,5 @@ #include "esolver_gets.h" -#include "source_io/module_parameter/parameter.h" // IWYU: elecstate.h no longer provides this transitively +#include "source_cell/unitcell.h" // IWYU: was transitively via elecstate.h #include "source_base/timer.h" #include "source_cell/module_neighbor/sltk_atom_arrange.h" diff --git a/source/source_esolver/esolver_ks.cpp b/source/source_esolver/esolver_ks.cpp index 349cd2449f7..007184773b9 100644 --- a/source/source_esolver/esolver_ks.cpp +++ b/source/source_esolver/esolver_ks.cpp @@ -1,5 +1,4 @@ #include "esolver_ks.h" -#include "source_io/module_parameter/parameter.h" // IWYU: elecstate.h no longer provides this transitively #include "source_base/timer_wrapper.h" // for jason output information diff --git a/source/source_esolver/esolver_ks_lcao.cpp b/source/source_esolver/esolver_ks_lcao.cpp index 232f75ab543..5e286d94361 100644 --- a/source/source_esolver/esolver_ks_lcao.cpp +++ b/source/source_esolver/esolver_ks_lcao.cpp @@ -1,4 +1,5 @@ #include "esolver_ks_lcao.h" +#include "source_cell/unitcell.h" // IWYU: was transitively via elecstate.h #include "source_base/module_external/blacs_connector.h" #include "source_cell/module_neighbor/sltk_atom_arrange.h" #include "source_estate/elecstate_tools.h" diff --git a/source/source_esolver/esolver_ks_lcaopw.cpp b/source/source_esolver/esolver_ks_lcaopw.cpp index 6c5cb703bfa..959974d5cee 100644 --- a/source/source_esolver/esolver_ks_lcaopw.cpp +++ b/source/source_esolver/esolver_ks_lcaopw.cpp @@ -1,4 +1,5 @@ #include "esolver_ks_lcaopw.h" +#include "source_cell/unitcell.h" // IWYU: was transitively via elecstate.h #include "source_pw/module_pwdft/elecond.h" #include "source_io/module_parameter/input_conv.h" diff --git a/source/source_esolver/esolver_ks_pw.cpp b/source/source_esolver/esolver_ks_pw.cpp index 79448f713ad..057054deeba 100644 --- a/source/source_esolver/esolver_ks_pw.cpp +++ b/source/source_esolver/esolver_ks_pw.cpp @@ -1,4 +1,6 @@ #include "esolver_ks_pw.h" +#include "source_cell/unitcell.h" // IWYU: was transitively via elecstate.h +#include "source_estate/module_pot/potential_new.h" // IWYU: was transitively via elecstate.h #include "source_estate/cal_ux.h" #include "source_estate/elecstate_pw.h" diff --git a/source/source_esolver/esolver_of.cpp b/source/source_esolver/esolver_of.cpp index a5a2dcdc325..c1ae652e734 100644 --- a/source/source_esolver/esolver_of.cpp +++ b/source/source_esolver/esolver_of.cpp @@ -1,4 +1,6 @@ #include "esolver_of.h" +#include "source_cell/unitcell.h" // IWYU: was transitively via elecstate.h +#include "source_estate/module_charge/charge.h" // IWYU: was transitively via elecstate.h #include "source_estate/module_pot/potential_new.h" // IWYU: elecstate.h no longer provides this transitively #include "source_io/module_parameter/parameter.h" diff --git a/source/source_esolver/esolver_of_tool.cpp b/source/source_esolver/esolver_of_tool.cpp index 3b1078249b4..9d881d38d6e 100644 --- a/source/source_esolver/esolver_of_tool.cpp +++ b/source/source_esolver/esolver_of_tool.cpp @@ -1,4 +1,5 @@ #include "esolver_of.h" +#include "source_estate/module_charge/charge.h" // IWYU: was transitively via elecstate.h #include "source_estate/module_pot/potential_new.h" // IWYU: elecstate.h no longer provides this transitively #include "source_base/formatter.h" #include "source_base/memory_recorder.h" diff --git a/source/source_esolver/esolver_sdft_pw.cpp b/source/source_esolver/esolver_sdft_pw.cpp index 654f45a19cf..a5693cce249 100644 --- a/source/source_esolver/esolver_sdft_pw.cpp +++ b/source/source_esolver/esolver_sdft_pw.cpp @@ -1,4 +1,5 @@ #include "esolver_sdft_pw.h" +#include "source_cell/unitcell.h" // IWYU: was transitively via elecstate.h #include "source_base/global_variable.h" #include "source_base/memory_recorder.h" diff --git a/source/source_esolver/lcao_others.cpp b/source/source_esolver/lcao_others.cpp index c8e38f2111f..1f816741bb8 100644 --- a/source/source_esolver/lcao_others.cpp +++ b/source/source_esolver/lcao_others.cpp @@ -1,4 +1,5 @@ #include "source_esolver/esolver_ks_lcao.h" +#include "source_cell/unitcell.h" // IWYU: was transitively via elecstate.h #include "source_estate/cal_ux.h" #include "source_estate/module_charge/symmetry_rho.h" #include "source_lcao/hamilt_lcao.h" diff --git a/source/source_esolver/pw_others.cpp b/source/source_esolver/pw_others.cpp index 1967aeaf3fb..821d4fe0e2b 100644 --- a/source/source_esolver/pw_others.cpp +++ b/source/source_esolver/pw_others.cpp @@ -1,5 +1,5 @@ #include "esolver_ks_pw.h" -#include "source_io/module_parameter/parameter.h" // IWYU: elecstate.h no longer provides this transitively +#include "source_cell/unitcell.h" // IWYU: was transitively via elecstate.h #include "source_base/module_device/device.h" #include "source_io/module_bessel/numerical_basis.h" #include "source_io/module_bessel/numerical_descriptor.h" diff --git a/source/source_estate/elecstate.h b/source/source_estate/elecstate.h index 05a9f2725a2..4dc8de4fe49 100644 --- a/source/source_estate/elecstate.h +++ b/source/source_estate/elecstate.h @@ -4,18 +4,20 @@ #include "fp_energy.h" #include "source_base/matrix.h" #include "source_psi/psi.h" // Psi appears in virtual method signatures; psi.h is light (own_fan=2) +#include "source_io/module_parameter/parameter.h" // PARAM/Input_para; kept (own_fan=4, cheap) to avoid churning ~120 downstream PARAM users #include #include #include -// Forward declarations keep this widely-included header lightweight; the -// corresponding full definitions are pulled in by elecstate.cpp instead. +// The heavy data headers (potential_new own_fan=58, klist=42, charge=37) are +// forward-declared instead of included; their full definitions are pulled in by +// elecstate.cpp. parameter.h is kept above because dropping it saves only 4 fan +// but would force ~120 downstream files to add their own include. class Charge; class K_Vectors; class UnitCell; class Parallel_Grid; -struct Input_para; namespace ModuleBase { class ComplexMatrix; diff --git a/source/source_estate/elecstate_energy.cpp b/source/source_estate/elecstate_energy.cpp index 02c564e7b95..d4f6b3e26ed 100644 --- a/source/source_estate/elecstate_energy.cpp +++ b/source/source_estate/elecstate_energy.cpp @@ -1,4 +1,7 @@ #include "elecstate.h" +#include "source_basis/module_pw/pw_basis.h" // IWYU: was transitively via elecstate.h +#include "source_cell/unitcell.h" // IWYU: was transitively via elecstate.h +#include "source_estate/module_charge/charge.h" // IWYU: was transitively via elecstate.h #include "source_base/global_variable.h" #include "source_base/parallel_comm.h" #include "source_base/parallel_reduce.h" diff --git a/source/source_estate/elecstate_energy_terms.cpp b/source/source_estate/elecstate_energy_terms.cpp index 39961222166..079f44a544b 100644 --- a/source/source_estate/elecstate_energy_terms.cpp +++ b/source/source_estate/elecstate_energy_terms.cpp @@ -1,4 +1,6 @@ #include "elecstate.h" +#include "source_basis/module_pw/pw_basis.h" // IWYU: was transitively via elecstate.h +#include "source_estate/module_charge/charge.h" // IWYU: was transitively via elecstate.h #include "source_base/parallel_reduce.h" #include "module_pot/potential_new.h" // ElecState::pot is now fwd-declared in elecstate.h #include "source_estate/module_pot/H_Hartree_pw.h" diff --git a/source/source_estate/elecstate_lcao.cpp b/source/source_estate/elecstate_lcao.cpp index 2040ee769e1..d70ab98a7ba 100644 --- a/source/source_estate/elecstate_lcao.cpp +++ b/source/source_estate/elecstate_lcao.cpp @@ -1,4 +1,5 @@ #include "source_estate/elecstate_lcao.h" +#include "source_estate/module_charge/charge.h" // IWYU: was transitively via elecstate.h #include "source_estate/cal_dm.h" #include "source_base/timer.h" #include "source_estate/module_dm/cal_dm_psi.h" diff --git a/source/source_estate/elecstate_print.cpp b/source/source_estate/elecstate_print.cpp index 5c61755d6ff..ec5e51568c5 100644 --- a/source/source_estate/elecstate_print.cpp +++ b/source/source_estate/elecstate_print.cpp @@ -1,4 +1,5 @@ #include "elecstate.h" +#include "source_estate/module_charge/charge.h" // IWYU: was transitively via elecstate.h #include "source_base/formatter.h" #include "source_base/global_variable.h" #include "source_base/parallel_common.h" diff --git a/source/source_estate/elecstate_pw.cpp b/source/source_estate/elecstate_pw.cpp index de05d441b58..1010997d823 100644 --- a/source/source_estate/elecstate_pw.cpp +++ b/source/source_estate/elecstate_pw.cpp @@ -1,4 +1,7 @@ #include "elecstate_pw.h" +#include "source_basis/module_pw/pw_basis.h" // IWYU: was transitively via elecstate.h +#include "source_cell/unitcell.h" // IWYU: was transitively via elecstate.h +#include "source_estate/module_charge/charge.h" // IWYU: was transitively via elecstate.h #include "source_base/constants.h" #include "source_base/libm/libm.h" diff --git a/source/source_estate/elecstate_pw_cal_tau.cpp b/source/source_estate/elecstate_pw_cal_tau.cpp index d5474d2fbea..13fe925a8dc 100644 --- a/source/source_estate/elecstate_pw_cal_tau.cpp +++ b/source/source_estate/elecstate_pw_cal_tau.cpp @@ -1,6 +1,5 @@ #include "elecstate_pw.h" #include "source_estate/module_charge/charge.h" // IWYU: elecstate.h no longer provides this transitively -#include "source_io/module_parameter/parameter.h" // IWYU: elecstate.h no longer provides this transitively namespace elecstate { diff --git a/source/source_estate/elecstate_pw_sdft.cpp b/source/source_estate/elecstate_pw_sdft.cpp index f4061f733a5..a7f793a3300 100644 --- a/source/source_estate/elecstate_pw_sdft.cpp +++ b/source/source_estate/elecstate_pw_sdft.cpp @@ -1,4 +1,5 @@ #include "./elecstate_pw_sdft.h" +#include "source_estate/module_charge/charge.h" // IWYU: was transitively via elecstate.h #include "source_base/global_function.h" #include "source_base/global_variable.h" diff --git a/source/source_estate/elecstate_tools.cpp b/source/source_estate/elecstate_tools.cpp index 6a4a86d5a69..3076c6b437e 100644 --- a/source/source_estate/elecstate_tools.cpp +++ b/source/source_estate/elecstate_tools.cpp @@ -1,5 +1,4 @@ #include "elecstate_tools.h" -#include "source_io/module_parameter/parameter.h" // IWYU: elecstate.h no longer provides this transitively #include "occupy.h" #include "source_base/parallel_reduce.h" namespace elecstate diff --git a/source/source_estate/init_scf.cpp b/source/source_estate/init_scf.cpp index 67df4ccf275..2765f7815d5 100644 --- a/source/source_estate/init_scf.cpp +++ b/source/source_estate/init_scf.cpp @@ -1,7 +1,6 @@ #include "elecstate.h" #include "module_pot/potential_new.h" // ElecState::pot is now fwd-declared in elecstate.h #include "source_estate/module_charge/charge.h" // ElecState::charge is now fwd-declared in elecstate.h -#include "source_io/module_parameter/parameter.h" // PARAM is no longer pulled in via elecstate.h #include "source_io/module_chgpot/write_init.h" namespace elecstate diff --git a/source/source_estate/module_charge/chgmixing.cpp b/source/source_estate/module_charge/chgmixing.cpp index 9942c025489..1fd48fac5d3 100644 --- a/source/source_estate/module_charge/chgmixing.cpp +++ b/source/source_estate/module_charge/chgmixing.cpp @@ -1,5 +1,4 @@ #include "source_estate/module_charge/chgmixing.h" -#include "source_io/module_parameter/parameter.h" // IWYU: elecstate.h no longer provides this transitively #include "source_estate/update_pot.h" #include "source_lcao/module_dftu/dftu.h" #include "source_lcao/module_deltaspin/spin_constrain.h" diff --git a/source/source_estate/module_dm/init_dm.cpp b/source/source_estate/module_dm/init_dm.cpp index 2f4af7befef..301a51e426f 100644 --- a/source/source_estate/module_dm/init_dm.cpp +++ b/source/source_estate/module_dm/init_dm.cpp @@ -1,6 +1,5 @@ #include "source_estate/module_dm/init_dm.h" #include "source_estate/module_pot/potential_new.h" // IWYU: elecstate.h no longer provides this transitively -#include "source_io/module_parameter/parameter.h" // IWYU: elecstate.h no longer provides this transitively #include "source_estate/module_dm/cal_dm_psi.h" #include "source_estate/elecstate_tools.h" #include "source_estate/cal_ux.h" diff --git a/source/source_estate/setup_estate_pw.cpp b/source/source_estate/setup_estate_pw.cpp index bf2bc658f14..654969faa9f 100644 --- a/source/source_estate/setup_estate_pw.cpp +++ b/source/source_estate/setup_estate_pw.cpp @@ -1,5 +1,4 @@ #include "source_estate/setup_estate_pw.h" -#include "source_io/module_parameter/parameter.h" // IWYU: elecstate.h no longer provides this transitively #include "source_estate/elecstate_pw.h" #include "source_estate/elecstate_pw_sdft.h" #include "source_estate/elecstate_tools.h" diff --git a/source/source_estate/test/elecstate_base_test.cpp b/source/source_estate/test/elecstate_base_test.cpp index 45f42b7b4d0..0510586d059 100644 --- a/source/source_estate/test/elecstate_base_test.cpp +++ b/source/source_estate/test/elecstate_base_test.cpp @@ -1,4 +1,5 @@ #include "gmock/gmock.h" +#include "source_cell/unitcell.h" // IWYU: was transitively via elecstate.h #include "gtest/gtest.h" #include #define private public diff --git a/source/source_estate/test/elecstate_print_test.cpp b/source/source_estate/test/elecstate_print_test.cpp index 55fb18dd605..239c18ff5c0 100644 --- a/source/source_estate/test/elecstate_print_test.cpp +++ b/source/source_estate/test/elecstate_print_test.cpp @@ -1,6 +1,7 @@ #include #include "gmock/gmock.h" +#include "source_cell/unitcell.h" // IWYU: was transitively via elecstate.h #include "gtest/gtest.h" #define private public #include "source_cell/klist.h" diff --git a/source/source_estate/test/elecstate_pw_test.cpp b/source/source_estate/test/elecstate_pw_test.cpp index c4e57298409..48d9f81d5a6 100644 --- a/source/source_estate/test/elecstate_pw_test.cpp +++ b/source/source_estate/test/elecstate_pw_test.cpp @@ -1,6 +1,8 @@ #include #include "gmock/gmock.h" +#include "source_cell/unitcell.h" // IWYU: was transitively via elecstate.h +#include "source_estate/module_charge/charge.h" // IWYU: was transitively via elecstate.h #include "gtest/gtest.h" #define private public #define protected public diff --git a/source/source_hsolver/hsolver_pw_sdft.cpp b/source/source_hsolver/hsolver_pw_sdft.cpp index cbd99264793..983294fb0d8 100644 --- a/source/source_hsolver/hsolver_pw_sdft.cpp +++ b/source/source_hsolver/hsolver_pw_sdft.cpp @@ -1,5 +1,5 @@ #include "hsolver_pw_sdft.h" -#include "source_io/module_parameter/parameter.h" // IWYU: elecstate.h no longer provides this transitively +#include "source_estate/module_pot/potential_new.h" // IWYU: was transitively via elecstate.h #include "source_base/global_function.h" #include "source_base/parallel_device.h" diff --git a/source/source_hsolver/test/test_hsolver_pw.cpp b/source/source_hsolver/test/test_hsolver_pw.cpp index cc7f72fb041..e88317ba2d1 100644 --- a/source/source_hsolver/test/test_hsolver_pw.cpp +++ b/source/source_hsolver/test/test_hsolver_pw.cpp @@ -5,6 +5,7 @@ #define private public #define protected public #include "source_io/module_parameter/parameter.h" +#include "source_cell/klist.h" // IWYU: was transitively via elecstate.h #include "source_hsolver/hsolver_pw.h" #include "source_hsolver/hsolver_lcaopw.h" #include "hsolver_supplementary_mock.h" diff --git a/source/source_hsolver/test/test_hsolver_sdft.cpp b/source/source_hsolver/test/test_hsolver_sdft.cpp index f2d36efd439..205ec46c54c 100644 --- a/source/source_hsolver/test/test_hsolver_sdft.cpp +++ b/source/source_hsolver/test/test_hsolver_sdft.cpp @@ -2,6 +2,7 @@ #include #define private public #include "source_io/module_parameter/parameter.h" +#include "source_cell/klist.h" // IWYU: was transitively via elecstate.h #undef private #include diff --git a/source/source_io/module_ctrl/ctrl_iter_lcao.cpp b/source/source_io/module_ctrl/ctrl_iter_lcao.cpp index a4de81385f2..ee454cce36e 100644 --- a/source/source_io/module_ctrl/ctrl_iter_lcao.cpp +++ b/source/source_io/module_ctrl/ctrl_iter_lcao.cpp @@ -1,4 +1,5 @@ #include "ctrl_iter_lcao.h" // use ctrl_iter_lcao() +#include "source_cell/unitcell.h" // IWYU: was transitively via elecstate.h #include "source_base/global_variable.h" // use GlobalC #ifdef __MLALGO diff --git a/source/source_io/module_ctrl/ctrl_output_fp.cpp b/source/source_io/module_ctrl/ctrl_output_fp.cpp index ef7e5a9e301..bc35e1e2d1c 100644 --- a/source/source_io/module_ctrl/ctrl_output_fp.cpp +++ b/source/source_io/module_ctrl/ctrl_output_fp.cpp @@ -1,6 +1,6 @@ #include "ctrl_output_fp.h" // use ctrl_output_fp() +#include "source_cell/unitcell.h" // IWYU: was transitively via elecstate.h #include "source_estate/module_pot/potential_new.h" // IWYU: elecstate.h no longer provides this transitively -#include "source_io/module_parameter/parameter.h" // IWYU: elecstate.h no longer provides this transitively #include "../module_output/cube_io.h" // use write_vdata_palgrid #include "../module_dipole/dipole_io.h" // use write_dipole #include "source_estate/module_charge/symmetry_rho.h" // use Symmetry_rho diff --git a/source/source_io/module_ctrl/ctrl_output_pw.cpp b/source/source_io/module_ctrl/ctrl_output_pw.cpp index b47a4338544..30d6354706d 100644 --- a/source/source_io/module_ctrl/ctrl_output_pw.cpp +++ b/source/source_io/module_ctrl/ctrl_output_pw.cpp @@ -1,4 +1,5 @@ #include "ctrl_output_pw.h" +#include "source_cell/unitcell.h" // IWYU: was transitively via elecstate.h #include "source_estate/module_pot/potential_new.h" // IWYU: elecstate.h no longer provides this transitively #include "../module_wf/write_wfc_pw.h" // use write_wfc_pw diff --git a/source/source_io/module_ctrl/ctrl_scf_lcao.cpp b/source/source_io/module_ctrl/ctrl_scf_lcao.cpp index 23067b7b42c..fd3e5459969 100644 --- a/source/source_io/module_ctrl/ctrl_scf_lcao.cpp +++ b/source/source_io/module_ctrl/ctrl_scf_lcao.cpp @@ -1,4 +1,5 @@ #include "ctrl_scf_lcao.h" // use ctrl_scf_lcao() +#include "source_cell/unitcell.h" // IWYU: was transitively via elecstate.h #include "source_estate/module_pot/potential_new.h" // IWYU: elecstate.h no longer provides this transitively #include "source_base/formatter.h" diff --git a/source/source_io/module_current/td_current_io.cpp b/source/source_io/module_current/td_current_io.cpp index 06703d97117..b02a7e3f08a 100644 --- a/source/source_io/module_current/td_current_io.cpp +++ b/source/source_io/module_current/td_current_io.cpp @@ -1,4 +1,5 @@ #include "td_current_io.h" +#include "source_cell/unitcell.h" // IWYU: was transitively via elecstate.h #include "source_base/global_function.h" #include "source_base/global_variable.h" 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 b987643d49a..8f581fb98c0 100644 --- a/source/source_io/module_current/td_current_io_comm.cpp +++ b/source/source_io/module_current/td_current_io_comm.cpp @@ -1,4 +1,5 @@ #include "source_base/global_function.h" +#include "source_cell/unitcell.h" // IWYU: was transitively via elecstate.h #include "source_base/global_variable.h" #include "source_base/libm/libm.h" #include "source_base/module_external/lapack_connector.h" diff --git a/source/source_io/module_dos/cal_ldos.cpp b/source/source_io/module_dos/cal_ldos.cpp index 36abe777407..23b52357d3c 100644 --- a/source/source_io/module_dos/cal_ldos.cpp +++ b/source/source_io/module_dos/cal_ldos.cpp @@ -1,5 +1,6 @@ #include "cal_ldos.h" -#include "source_io/module_parameter/parameter.h" // IWYU: elecstate.h no longer provides this transitively +#include "source_cell/unitcell.h" // IWYU: was transitively via elecstate.h +#include "source_estate/module_charge/charge.h" // IWYU: was transitively via elecstate.h #include "cal_dos.h" #include "../module_output/cube_io.h" diff --git a/source/source_io/module_energy/write_proj_band_lcao.cpp b/source/source_io/module_energy/write_proj_band_lcao.cpp index ecf83e6a4d0..b550dac271c 100644 --- a/source/source_io/module_energy/write_proj_band_lcao.cpp +++ b/source/source_io/module_energy/write_proj_band_lcao.cpp @@ -1,4 +1,5 @@ #include "write_proj_band_lcao.h" +#include "source_cell/unitcell.h" // IWYU: was transitively via elecstate.h #include "source_io/module_parameter/parameter.h" #include "source_base/global_function.h" diff --git a/source/source_io/module_ml/cal_mlkedf_descriptors.cpp b/source/source_io/module_ml/cal_mlkedf_descriptors.cpp index b8f31f7cac2..9fe6047e3ea 100644 --- a/source/source_io/module_ml/cal_mlkedf_descriptors.cpp +++ b/source/source_io/module_ml/cal_mlkedf_descriptors.cpp @@ -1,4 +1,5 @@ #include "cal_mlkedf_descriptors.h" +#include "source_cell/unitcell.h" // IWYU: was transitively via elecstate.h #include "source_estate/module_charge/charge.h" // IWYU: elecstate.h no longer provides this transitively namespace ModuleIO diff --git a/source/source_io/module_ml/write_mlkedf_descriptors.cpp b/source/source_io/module_ml/write_mlkedf_descriptors.cpp index 59ee758bd70..cfee9ad8d71 100644 --- a/source/source_io/module_ml/write_mlkedf_descriptors.cpp +++ b/source/source_io/module_ml/write_mlkedf_descriptors.cpp @@ -1,6 +1,7 @@ #ifdef __MLALGO #include "write_mlkedf_descriptors.h" +#include "source_estate/module_charge/charge.h" // IWYU: was transitively via elecstate.h #include "npy.hpp" #include "source_estate/module_charge/symmetry_rho.h" diff --git a/source/source_lcao/FORCE_STRESS.cpp b/source/source_lcao/FORCE_STRESS.cpp index c5a0ca6e6b2..79c94641fd7 100644 --- a/source/source_lcao/FORCE_STRESS.cpp +++ b/source/source_lcao/FORCE_STRESS.cpp @@ -1,4 +1,5 @@ #include "FORCE_STRESS.h" +#include "source_cell/unitcell.h" // IWYU: was transitively via elecstate.h #include "source_base/parallel_reduce.h" #include "source_lcao/module_dftu/dftu.h" //Quxin add for DFT+U on 20201029 diff --git a/source/source_lcao/module_deltaspin/init_sc.cpp b/source/source_lcao/module_deltaspin/init_sc.cpp index 73da9388ec2..6b00b115b09 100644 --- a/source/source_lcao/module_deltaspin/init_sc.cpp +++ b/source/source_lcao/module_deltaspin/init_sc.cpp @@ -1,4 +1,5 @@ #include "spin_constrain.h" +#include "source_cell/unitcell.h" // IWYU: was transitively via elecstate.h /** * @file init_sc.cpp diff --git a/source/source_lcao/module_dftu/dftu_force.cpp b/source/source_lcao/module_dftu/dftu_force.cpp index a2b6ffca4bf..a3ac7155aed 100644 --- a/source/source_lcao/module_dftu/dftu_force.cpp +++ b/source/source_lcao/module_dftu/dftu_force.cpp @@ -1,4 +1,5 @@ #include "source_io/module_parameter/parameter.h" +#include "source_cell/unitcell.h" // IWYU: was transitively via elecstate.h #ifdef __LCAO #include "dftu.h" diff --git a/source/source_lcao/module_lr/esolver_lrtd_lcao.cpp b/source/source_lcao/module_lr/esolver_lrtd_lcao.cpp index 64b7f19a4f2..d11602d4da9 100644 --- a/source/source_lcao/module_lr/esolver_lrtd_lcao.cpp +++ b/source/source_lcao/module_lr/esolver_lrtd_lcao.cpp @@ -1,4 +1,5 @@ #include "esolver_lrtd_lcao.h" +#include "source_cell/unitcell.h" // IWYU: was transitively via elecstate.h #include "utils/lr_util.h" #include "hamilt_casida.h" #include "hamilt_ulr.hpp" diff --git a/source/source_lcao/module_operator_lcao/dspin_lcao.cpp b/source/source_lcao/module_operator_lcao/dspin_lcao.cpp index a9428ea69f6..5c12a3a33fe 100644 --- a/source/source_lcao/module_operator_lcao/dspin_lcao.cpp +++ b/source/source_lcao/module_operator_lcao/dspin_lcao.cpp @@ -1,4 +1,5 @@ #include "dspin_lcao.h" +#include "source_cell/unitcell.h" // IWYU: was transitively via elecstate.h #include "source_lcao/module_deltaspin/spin_constrain.h" #include "source_base/timer.h" #include "source_base/memory_recorder.h" diff --git a/source/source_lcao/module_rdmft/rdmft.cpp b/source/source_lcao/module_rdmft/rdmft.cpp index 3e062f22efb..d62a3ee3716 100644 --- a/source/source_lcao/module_rdmft/rdmft.cpp +++ b/source/source_lcao/module_rdmft/rdmft.cpp @@ -5,7 +5,6 @@ #include "rdmft.h" #include "source_lcao/module_rdmft/rdmft_tools.h" -#include "source_io/module_parameter/parameter.h" // PARAM (no longer via elecstate.h) #include "source_base/timer.h" #include "source_base/parallel_reduce.h" #include "source_cell/module_symmetry/symmetry.h" diff --git a/source/source_lcao/module_rdmft/update_state_rdmft.cpp b/source/source_lcao/module_rdmft/update_state_rdmft.cpp index 4f22791cf9a..3d0d8098906 100644 --- a/source/source_lcao/module_rdmft/update_state_rdmft.cpp +++ b/source/source_lcao/module_rdmft/update_state_rdmft.cpp @@ -4,6 +4,8 @@ //========================================================== #include "rdmft.h" +#include "source_estate/module_charge/charge.h" // IWYU: was transitively via elecstate.h +#include "source_estate/module_pot/potential_new.h" // IWYU: was transitively via elecstate.h #include "source_lcao/module_rdmft/rdmft_tools.h" #include "source_estate/module_dm/cal_dm_psi.h" #include "source_estate/module_dm/density_matrix.h" diff --git a/source/source_lcao/module_ri/Exx_LRI_interface.hpp b/source/source_lcao/module_ri/Exx_LRI_interface.hpp index 6a0c74aa091..e54fb1bf40f 100644 --- a/source/source_lcao/module_ri/Exx_LRI_interface.hpp +++ b/source/source_lcao/module_ri/Exx_LRI_interface.hpp @@ -1,6 +1,7 @@ #ifndef EXX_LRI_INTERFACE_HPP #define EXX_LRI_INTERFACE_HPP #include "source_io/module_parameter/parameter.h" +#include "source_cell/unitcell.h" // IWYU: was transitively via elecstate.h #include "Exx_LRI_interface.h" #include "source_lcao/module_ri/exx_abfs-jle.h" diff --git a/source/source_lcao/module_ri/RPA_LRI.hpp b/source/source_lcao/module_ri/RPA_LRI.hpp index eb05eaada3b..14bc7480bf9 100644 --- a/source/source_lcao/module_ri/RPA_LRI.hpp +++ b/source/source_lcao/module_ri/RPA_LRI.hpp @@ -13,6 +13,7 @@ #include #include #include "source_lcao/module_ri/module_exx_symmetry/symmetry_rotation.h" +#include "source_cell/unitcell.h" // IWYU: was transitively via elecstate.h #include "RPA_LRI.h" #include "source_basis/module_ao/element_basis_index-ORB.h" diff --git a/source/source_lcao/module_ri/exx_lip.hpp b/source/source_lcao/module_ri/exx_lip.hpp index 2dfd54f96af..904887e2412 100644 --- a/source/source_lcao/module_ri/exx_lip.hpp +++ b/source/source_lcao/module_ri/exx_lip.hpp @@ -8,6 +8,7 @@ #define EXX_LIP_HPP #include "exx_lip.h" +#include "source_basis/module_pw/pw_basis.h" // IWYU: was transitively via elecstate.h #include "source_base/vector3.h" #include "source_base/global_function.h" #include "source_base/vector3.h" diff --git a/source/source_main/driver_run.cpp b/source/source_main/driver_run.cpp index 4911b133de0..2c4c33a74a8 100644 --- a/source/source_main/driver_run.cpp +++ b/source/source_main/driver_run.cpp @@ -1,4 +1,5 @@ #include "source_main/driver.h" +#include "source_cell/unitcell.h" // IWYU: was transitively via elecstate.h #include "source_cell/check_atomic_stru.h" #include "source_cell/module_neighbor/sltk_atom_arrange.h" #include "source_relax/relax_driver.h" diff --git a/source/source_pw/module_ofdft/of_stress_pw.cpp b/source/source_pw/module_ofdft/of_stress_pw.cpp index a481057507b..edb51602d7d 100644 --- a/source/source_pw/module_ofdft/of_stress_pw.cpp +++ b/source/source_pw/module_ofdft/of_stress_pw.cpp @@ -1,4 +1,5 @@ #include "of_stress_pw.h" +#include "source_cell/unitcell.h" // IWYU: was transitively via elecstate.h #include "source_base/timer.h" #include "source_hamilt/module_vdw/vdw.h" diff --git a/source/source_pw/module_pwdft/exx_helper.cpp b/source/source_pw/module_pwdft/exx_helper.cpp index fa80a7ff102..a014ac0ee75 100644 --- a/source/source_pw/module_pwdft/exx_helper.cpp +++ b/source/source_pw/module_pwdft/exx_helper.cpp @@ -1,4 +1,5 @@ #include "exx_helper.h" +#include "source_cell/unitcell.h" // IWYU: was transitively via elecstate.h #include "source_io/module_parameter/parameter.h" // use PARAM #include "source_hamilt/module_xc/exx_info.h" // use GlobalC::exx_info #include "source_hamilt/module_xc/xc_functional.h" // use XC_Functional diff --git a/source/source_pw/module_pwdft/forces.cpp b/source/source_pw/module_pwdft/forces.cpp index 2f2e1ea3a86..2903363c6e9 100644 --- a/source/source_pw/module_pwdft/forces.cpp +++ b/source/source_pw/module_pwdft/forces.cpp @@ -1,4 +1,7 @@ #include "forces.h" +#include "source_basis/module_pw/pw_basis.h" // IWYU: was transitively via elecstate.h +#include "source_cell/unitcell.h" // IWYU: was transitively via elecstate.h +#include "source_estate/module_charge/charge.h" // IWYU: was transitively via elecstate.h #include "source_base/global_variable.h" #include "source_base/parallel_reduce.h" diff --git a/source/source_pw/module_pwdft/forces_cc.cpp b/source/source_pw/module_pwdft/forces_cc.cpp index 41322e62e55..117fab667c2 100644 --- a/source/source_pw/module_pwdft/forces_cc.cpp +++ b/source/source_pw/module_pwdft/forces_cc.cpp @@ -1,4 +1,5 @@ #include "forces.h" +#include "source_basis/module_pw/pw_basis.h" // IWYU: was transitively via elecstate.h #include "stress_func.h" #include "source_base/parallel_reduce.h" #include "source_io/module_parameter/parameter.h" diff --git a/source/source_pw/module_pwdft/forces_scc.cpp b/source/source_pw/module_pwdft/forces_scc.cpp index 3d454cf9a09..aa50c1803b4 100644 --- a/source/source_pw/module_pwdft/forces_scc.cpp +++ b/source/source_pw/module_pwdft/forces_scc.cpp @@ -1,4 +1,5 @@ #include "forces.h" +#include "source_basis/module_pw/pw_basis.h" // IWYU: was transitively via elecstate.h #include "source_base/parallel_reduce.h" #include "source_io/module_output/output_log.h" #include "stress_func.h" diff --git a/source/source_pw/module_pwdft/forces_us.cpp b/source/source_pw/module_pwdft/forces_us.cpp index b3dd053c0e2..4fe6056b9d2 100644 --- a/source/source_pw/module_pwdft/forces_us.cpp +++ b/source/source_pw/module_pwdft/forces_us.cpp @@ -1,4 +1,6 @@ #include "forces.h" +#include "source_basis/module_pw/pw_basis.h" // IWYU: was transitively via elecstate.h +#include "source_cell/unitcell.h" // IWYU: was transitively via elecstate.h #include "source_estate/module_pot/potential_new.h" // IWYU: elecstate.h no longer provides this transitively #include "source_base/parallel_reduce.h" #include "source_pw/module_pwdft/vnl_pw.h" diff --git a/source/source_pw/module_pwdft/hamilt_pw.cpp b/source/source_pw/module_pwdft/hamilt_pw.cpp index 47fae9bcb96..3591b4b3b33 100644 --- a/source/source_pw/module_pwdft/hamilt_pw.cpp +++ b/source/source_pw/module_pwdft/hamilt_pw.cpp @@ -1,4 +1,5 @@ #include "hamilt_pw.h" +#include "source_cell/unitcell.h" // IWYU: was transitively via elecstate.h #include "op_pw_ekin.h" #include "op_pw_exx.h" diff --git a/source/source_pw/module_pwdft/onsite_proj.cpp b/source/source_pw/module_pwdft/onsite_proj.cpp index d4af4a7c2ff..a2bbae452a3 100644 --- a/source/source_pw/module_pwdft/onsite_proj.cpp +++ b/source/source_pw/module_pwdft/onsite_proj.cpp @@ -5,6 +5,7 @@ #include #include #include "source_pw/module_pwdft/onsite_proj.h" +#include "source_cell/unitcell.h" // IWYU: was transitively via elecstate.h #include "source_pw/module_pwdft/onsite_proj_print.h" #include "source_lcao/module_dftu/dftu.h" #include "source_lcao/module_deltaspin/spin_constrain.h" diff --git a/source/source_pw/module_pwdft/op_pw_proj.cpp b/source/source_pw/module_pwdft/op_pw_proj.cpp index 6e0d166fd9f..5294a2b7de6 100644 --- a/source/source_pw/module_pwdft/op_pw_proj.cpp +++ b/source/source_pw/module_pwdft/op_pw_proj.cpp @@ -1,5 +1,4 @@ #include "op_pw_proj.h" -#include "source_io/module_parameter/parameter.h" // IWYU: elecstate.h no longer provides this transitively #include "source_base/timer.h" #include "source_base/parallel_reduce.h" diff --git a/source/source_pw/module_pwdft/setup_pot.cpp b/source/source_pw/module_pwdft/setup_pot.cpp index 9cca7d38224..28aa5ed7fd3 100644 --- a/source/source_pw/module_pwdft/setup_pot.cpp +++ b/source/source_pw/module_pwdft/setup_pot.cpp @@ -1,6 +1,5 @@ #include "source_pw/module_pwdft/setup_pot.h" #include "source_estate/module_pot/potential_new.h" // IWYU: elecstate.h no longer provides this transitively -#include "source_io/module_parameter/parameter.h" // IWYU: elecstate.h no longer provides this transitively #include "source_estate/module_charge/symmetry_rho.h" #include "source_lcao/module_deltaspin/spin_constrain.h" diff --git a/source/source_pw/module_pwdft/stress_exx.cpp b/source/source_pw/module_pwdft/stress_exx.cpp index bedc503408d..6b00dd9e6e1 100644 --- a/source/source_pw/module_pwdft/stress_exx.cpp +++ b/source/source_pw/module_pwdft/stress_exx.cpp @@ -1,5 +1,6 @@ #include "source_hamilt/module_xc/exx_info.h" -#include "source_io/module_parameter/parameter.h" // IWYU: elecstate.h no longer provides this transitively +#include "source_basis/module_pw/pw_basis.h" // IWYU: was transitively via elecstate.h +#include "source_cell/unitcell.h" // IWYU: was transitively via elecstate.h #include "op_pw_exx.h" #include "source_base/parallel_common.h" #include "source_base/parallel_reduce.h" diff --git a/source/source_pw/module_pwdft/stress_pw.cpp b/source/source_pw/module_pwdft/stress_pw.cpp index 6e4942401c5..46545804b71 100644 --- a/source/source_pw/module_pwdft/stress_pw.cpp +++ b/source/source_pw/module_pwdft/stress_pw.cpp @@ -1,4 +1,5 @@ #include "stress_pw.h" +#include "source_cell/unitcell.h" // IWYU: was transitively via elecstate.h #include "source_estate/module_pot/potential_new.h" // IWYU: elecstate.h no longer provides this transitively #include "source_base/timer.h" diff --git a/source/source_pw/module_pwdft/stress_us.cpp b/source/source_pw/module_pwdft/stress_us.cpp index 1eb33d162e3..b195f9785cd 100644 --- a/source/source_pw/module_pwdft/stress_us.cpp +++ b/source/source_pw/module_pwdft/stress_us.cpp @@ -1,4 +1,6 @@ #include "source_base/libm/libm.h" +#include "source_basis/module_pw/pw_basis.h" // IWYU: was transitively via elecstate.h +#include "source_cell/unitcell.h" // IWYU: was transitively via elecstate.h #include "source_estate/module_pot/potential_new.h" // IWYU: elecstate.h no longer provides this transitively #include "source_base/parallel_reduce.h" #include "source_io/module_parameter/parameter.h" diff --git a/source/source_pw/module_stodft/sto_forces.cpp b/source/source_pw/module_stodft/sto_forces.cpp index e092b8f9327..d79542c6a4f 100644 --- a/source/source_pw/module_stodft/sto_forces.cpp +++ b/source/source_pw/module_stodft/sto_forces.cpp @@ -1,4 +1,5 @@ #include "sto_forces.h" +#include "source_cell/unitcell.h" // IWYU: was transitively via elecstate.h #include "source_base/mathzone.h" #include "source_cell/module_symmetry/symmetry.h" diff --git a/source/source_pw/module_stodft/sto_iter.cpp b/source/source_pw/module_stodft/sto_iter.cpp index a46de4cc153..05914f05ce1 100644 --- a/source/source_pw/module_stodft/sto_iter.cpp +++ b/source/source_pw/module_stodft/sto_iter.cpp @@ -1,4 +1,6 @@ #include "sto_iter.h" +#include "source_cell/unitcell.h" // IWYU: was transitively via elecstate.h +#include "source_estate/module_charge/charge.h" // IWYU: was transitively via elecstate.h #include "source_base/kernels/math_kernel_op.h" #include "source_base/para_gemm.h" diff --git a/source/source_pw/module_stodft/sto_stress_pw.cpp b/source/source_pw/module_stodft/sto_stress_pw.cpp index de0dd9279de..1ac805acc8a 100644 --- a/source/source_pw/module_stodft/sto_stress_pw.cpp +++ b/source/source_pw/module_stodft/sto_stress_pw.cpp @@ -1,4 +1,5 @@ #include "sto_stress_pw.h" +#include "source_cell/unitcell.h" // IWYU: was transitively via elecstate.h #include "source_base/parallel_reduce.h" #include "source_base/timer.h" diff --git a/source/source_pw/module_stodft/test/test_hamilt_sto.cpp b/source/source_pw/module_stodft/test/test_hamilt_sto.cpp index a1937caf056..1cca0a96f05 100644 --- a/source/source_pw/module_stodft/test/test_hamilt_sto.cpp +++ b/source/source_pw/module_stodft/test/test_hamilt_sto.cpp @@ -1,4 +1,6 @@ #include "../hamilt_sdft_pw.h" +#include "source_cell/klist.h" // IWYU: was transitively via elecstate.h +#include "source_estate/module_pot/potential_new.h" // IWYU: was transitively via elecstate.h #include "source_hamilt/operator.h" #include "gtest/gtest.h" diff --git a/source/source_relax/ions_move_lbfgs.cpp b/source/source_relax/ions_move_lbfgs.cpp index 339fad9baf2..89748ac73c3 100644 --- a/source/source_relax/ions_move_lbfgs.cpp +++ b/source/source_relax/ions_move_lbfgs.cpp @@ -1,4 +1,5 @@ #include "ions_move_lbfgs.h" +#include "source_cell/unitcell.h" // IWYU: was transitively via elecstate.h #include "matrix_methods.h" #include "source_io/module_parameter/parameter.h" #include "ions_move_basic.h" diff --git a/source/source_relax/relax_driver.cpp b/source/source_relax/relax_driver.cpp index 26128bf0408..4b522a47f51 100644 --- a/source/source_relax/relax_driver.cpp +++ b/source/source_relax/relax_driver.cpp @@ -1,4 +1,5 @@ #include "relax_driver.h" +#include "source_cell/unitcell.h" // IWYU: was transitively via elecstate.h #include "source_base/global_file.h" #include "source_io/module_output/cif_io.h" #include "source_io/module_json/output_info.h" diff --git a/source/source_relax/test/ions_move_methods_test.cpp b/source/source_relax/test/ions_move_methods_test.cpp index 514a2cb8008..bf9aabcca1b 100644 --- a/source/source_relax/test/ions_move_methods_test.cpp +++ b/source/source_relax/test/ions_move_methods_test.cpp @@ -1,4 +1,5 @@ #include "for_test.h" +#include "source_cell/unitcell.h" // IWYU: was transitively via elecstate.h #include "gmock/gmock.h" #include "gtest/gtest.h" #define private public From 0fa25aebaae61723b558e86ee535aedc902599eb Mon Sep 17 00:00:00 2001 From: Critsium Date: Tue, 23 Jun 2026 15:38:18 +0800 Subject: [PATCH 4/7] fix(estate): add includes for pointer-member access of fwd-declared types The previous IWYU pass only matched by-value declarations and construction of the forward-declared types, missing the most common complete-type use: member access through a pointer (klist->get_nks(), ucell->atoms, chg->...). elecstate_energy.cpp hit "invalid use of incomplete type K_Vectors" on this->klist->get_nks(). Re-scan with comprehensive complete-type patterns (klist->/kv->, ucell->, charge->/chg->, pot->, plus value/construction) and add the direct include wherever the symbol is used that way without one. 47 files updated, mostly klist.h for the widely-used ElecState::klist pointer. Verified: static analysis now reports 0 remaining complete-type breakages for klist/unitcell/charge/potential_new under the comprehensive patterns. Co-Authored-By: Claude Opus 4.8 --- source/source_esolver/esolver_double_xc.cpp | 1 + source/source_esolver/esolver_double_xc.h | 1 + source/source_esolver/esolver_fp.cpp | 1 + source/source_esolver/esolver_fp.h | 1 + source/source_esolver/esolver_gets.cpp | 1 + source/source_esolver/esolver_ks_lcao.cpp | 1 + source/source_esolver/esolver_ks_lcaopw.cpp | 1 + source/source_esolver/esolver_ks_pw.cpp | 1 + source/source_esolver/esolver_sdft_pw.cpp | 1 + source/source_esolver/pw_others.cpp | 1 + source/source_estate/elecstate_energy.cpp | 1 + source/source_estate/elecstate_pw.cpp | 1 + source/source_estate/elecstate_pw_cal_tau.cpp | 2 ++ source/source_estate/elecstate_tools.cpp | 1 + source/source_estate/module_pot/pot_ml_exx.h | 1 + source/source_estate/setup_estate_pw.cpp | 1 + source/source_hsolver/hsolver_pw.cpp | 1 + source/source_io/module_ctrl/ctrl_iter_lcao.cpp | 1 + source/source_io/module_ctrl/ctrl_scf_lcao.cpp | 1 + source/source_io/module_current/td_current_io.cpp | 1 + source/source_io/module_current/td_current_io_comm.cpp | 1 + source/source_io/module_dos/cal_ldos.cpp | 1 + source/source_io/module_energy/write_proj_band_lcao.cpp | 1 + source/source_io/module_ml/write_mlkedf_descriptors.cpp | 1 + source/source_io/module_wf/get_wf_lcao.cpp | 1 + source/source_lcao/FORCE_STRESS.cpp | 1 + source/source_lcao/FORCE_gamma.cpp | 1 + source/source_lcao/FORCE_k.cpp | 1 + source/source_lcao/LCAO_set.cpp | 1 + source/source_lcao/edm.cpp | 1 + source/source_lcao/hamilt_lcao.cpp | 1 + source/source_lcao/module_deltaspin/spin_constrain.cpp | 1 + source/source_lcao/module_dftu/dftu_force.cpp | 1 + source/source_lcao/module_lr/esolver_lrtd_lcao.cpp | 2 ++ source/source_lcao/module_rdmft/rdmft.cpp | 2 ++ source/source_lcao/module_rdmft/rdmft_pot.cpp | 1 + source/source_lcao/module_rdmft/update_state_rdmft.cpp | 2 ++ source/source_lcao/module_ri/Exx_LRI_interface.hpp | 1 + source/source_lcao/module_ri/RPA_LRI.hpp | 1 + source/source_lcao/setup_dm.cpp | 1 + source/source_pw/module_pwdft/elecond.cpp | 1 + source/source_pw/module_pwdft/forces_cc.cpp | 1 + source/source_pw/module_pwdft/forces_scc.cpp | 1 + source/source_pw/module_pwdft/onsite_proj.cpp | 1 + source/source_pw/module_pwdft/op_pw_proj.cpp | 1 + source/source_pw/module_pwdft/setup_pot.cpp | 2 ++ source/source_relax/relax_nsync.cpp | 1 + 47 files changed, 52 insertions(+) diff --git a/source/source_esolver/esolver_double_xc.cpp b/source/source_esolver/esolver_double_xc.cpp index 5013519c04c..57ea638f377 100644 --- a/source/source_esolver/esolver_double_xc.cpp +++ b/source/source_esolver/esolver_double_xc.cpp @@ -1,4 +1,5 @@ #include "esolver_double_xc.h" +#include "source_cell/klist.h" // IWYU: was transitively via elecstate.h #include "source_basis/module_pw/pw_basis.h" // IWYU: was transitively via elecstate.h #include "source_cell/unitcell.h" // IWYU: was transitively via elecstate.h #include "source_estate/module_pot/potential_new.h" // IWYU: was transitively via elecstate.h diff --git a/source/source_esolver/esolver_double_xc.h b/source/source_esolver/esolver_double_xc.h index bff9e28bc70..10afa100f90 100644 --- a/source/source_esolver/esolver_double_xc.h +++ b/source/source_esolver/esolver_double_xc.h @@ -2,6 +2,7 @@ #define ESOLVER_DOUBLE_XC_H #include "source_esolver/esolver_ks_lcao.h" +#include "source_estate/module_charge/charge.h" // IWYU: was transitively via elecstate.h namespace ModuleESolver { diff --git a/source/source_esolver/esolver_fp.cpp b/source/source_esolver/esolver_fp.cpp index d9650806a22..480239ee038 100644 --- a/source/source_esolver/esolver_fp.cpp +++ b/source/source_esolver/esolver_fp.cpp @@ -1,4 +1,5 @@ #include "esolver_fp.h" +#include "source_cell/klist.h" // IWYU: was transitively via elecstate.h #include "source_cell/unitcell.h" // IWYU: was transitively via elecstate.h #include "source_estate/cal_ux.h" diff --git a/source/source_esolver/esolver_fp.h b/source/source_esolver/esolver_fp.h index 399008ab5c1..d36d6574eb3 100644 --- a/source/source_esolver/esolver_fp.h +++ b/source/source_esolver/esolver_fp.h @@ -2,6 +2,7 @@ #define ESOLVER_FP_H #include "esolver.h" +#include "source_estate/module_charge/charge.h" // IWYU: was transitively via elecstate.h #include "source_base/timer_wrapper.h" diff --git a/source/source_esolver/esolver_gets.cpp b/source/source_esolver/esolver_gets.cpp index 8d3b4e20624..f0dc8f36900 100644 --- a/source/source_esolver/esolver_gets.cpp +++ b/source/source_esolver/esolver_gets.cpp @@ -1,4 +1,5 @@ #include "esolver_gets.h" +#include "source_cell/klist.h" // IWYU: was transitively via elecstate.h #include "source_cell/unitcell.h" // IWYU: was transitively via elecstate.h #include "source_base/timer.h" diff --git a/source/source_esolver/esolver_ks_lcao.cpp b/source/source_esolver/esolver_ks_lcao.cpp index 5e286d94361..866053a9b9b 100644 --- a/source/source_esolver/esolver_ks_lcao.cpp +++ b/source/source_esolver/esolver_ks_lcao.cpp @@ -1,4 +1,5 @@ #include "esolver_ks_lcao.h" +#include "source_cell/klist.h" // IWYU: was transitively via elecstate.h #include "source_cell/unitcell.h" // IWYU: was transitively via elecstate.h #include "source_base/module_external/blacs_connector.h" #include "source_cell/module_neighbor/sltk_atom_arrange.h" diff --git a/source/source_esolver/esolver_ks_lcaopw.cpp b/source/source_esolver/esolver_ks_lcaopw.cpp index 959974d5cee..3b409c150c2 100644 --- a/source/source_esolver/esolver_ks_lcaopw.cpp +++ b/source/source_esolver/esolver_ks_lcaopw.cpp @@ -1,4 +1,5 @@ #include "esolver_ks_lcaopw.h" +#include "source_cell/klist.h" // IWYU: was transitively via elecstate.h #include "source_cell/unitcell.h" // IWYU: was transitively via elecstate.h #include "source_pw/module_pwdft/elecond.h" diff --git a/source/source_esolver/esolver_ks_pw.cpp b/source/source_esolver/esolver_ks_pw.cpp index 057054deeba..01c53e20df0 100644 --- a/source/source_esolver/esolver_ks_pw.cpp +++ b/source/source_esolver/esolver_ks_pw.cpp @@ -1,4 +1,5 @@ #include "esolver_ks_pw.h" +#include "source_cell/klist.h" // IWYU: was transitively via elecstate.h #include "source_cell/unitcell.h" // IWYU: was transitively via elecstate.h #include "source_estate/module_pot/potential_new.h" // IWYU: was transitively via elecstate.h diff --git a/source/source_esolver/esolver_sdft_pw.cpp b/source/source_esolver/esolver_sdft_pw.cpp index a5693cce249..cf3b0bb8d87 100644 --- a/source/source_esolver/esolver_sdft_pw.cpp +++ b/source/source_esolver/esolver_sdft_pw.cpp @@ -1,4 +1,5 @@ #include "esolver_sdft_pw.h" +#include "source_cell/klist.h" // IWYU: was transitively via elecstate.h #include "source_cell/unitcell.h" // IWYU: was transitively via elecstate.h #include "source_base/global_variable.h" diff --git a/source/source_esolver/pw_others.cpp b/source/source_esolver/pw_others.cpp index 821d4fe0e2b..ed3aba816a2 100644 --- a/source/source_esolver/pw_others.cpp +++ b/source/source_esolver/pw_others.cpp @@ -1,4 +1,5 @@ #include "esolver_ks_pw.h" +#include "source_cell/klist.h" // IWYU: was transitively via elecstate.h #include "source_cell/unitcell.h" // IWYU: was transitively via elecstate.h #include "source_base/module_device/device.h" #include "source_io/module_bessel/numerical_basis.h" diff --git a/source/source_estate/elecstate_energy.cpp b/source/source_estate/elecstate_energy.cpp index d4f6b3e26ed..a2873164deb 100644 --- a/source/source_estate/elecstate_energy.cpp +++ b/source/source_estate/elecstate_energy.cpp @@ -1,4 +1,5 @@ #include "elecstate.h" +#include "source_cell/klist.h" // IWYU: was transitively via elecstate.h #include "source_basis/module_pw/pw_basis.h" // IWYU: was transitively via elecstate.h #include "source_cell/unitcell.h" // IWYU: was transitively via elecstate.h #include "source_estate/module_charge/charge.h" // IWYU: was transitively via elecstate.h diff --git a/source/source_estate/elecstate_pw.cpp b/source/source_estate/elecstate_pw.cpp index 1010997d823..aab4d2d3d1a 100644 --- a/source/source_estate/elecstate_pw.cpp +++ b/source/source_estate/elecstate_pw.cpp @@ -1,4 +1,5 @@ #include "elecstate_pw.h" +#include "source_cell/klist.h" // IWYU: was transitively via elecstate.h #include "source_basis/module_pw/pw_basis.h" // IWYU: was transitively via elecstate.h #include "source_cell/unitcell.h" // IWYU: was transitively via elecstate.h #include "source_estate/module_charge/charge.h" // IWYU: was transitively via elecstate.h diff --git a/source/source_estate/elecstate_pw_cal_tau.cpp b/source/source_estate/elecstate_pw_cal_tau.cpp index 13fe925a8dc..d3ba3ef4f19 100644 --- a/source/source_estate/elecstate_pw_cal_tau.cpp +++ b/source/source_estate/elecstate_pw_cal_tau.cpp @@ -1,4 +1,6 @@ #include "elecstate_pw.h" +#include "source_cell/klist.h" // IWYU: was transitively via elecstate.h +#include "source_cell/unitcell.h" // IWYU: was transitively via elecstate.h #include "source_estate/module_charge/charge.h" // IWYU: elecstate.h no longer provides this transitively namespace elecstate { diff --git a/source/source_estate/elecstate_tools.cpp b/source/source_estate/elecstate_tools.cpp index 3076c6b437e..60ca93b851d 100644 --- a/source/source_estate/elecstate_tools.cpp +++ b/source/source_estate/elecstate_tools.cpp @@ -1,4 +1,5 @@ #include "elecstate_tools.h" +#include "source_cell/klist.h" // IWYU: was transitively via elecstate.h #include "occupy.h" #include "source_base/parallel_reduce.h" namespace elecstate diff --git a/source/source_estate/module_pot/pot_ml_exx.h b/source/source_estate/module_pot/pot_ml_exx.h index b3e9d82b941..0047b0d6f88 100644 --- a/source/source_estate/module_pot/pot_ml_exx.h +++ b/source/source_estate/module_pot/pot_ml_exx.h @@ -4,6 +4,7 @@ #ifdef __MLALGO #include "pot_base.h" +#include "source_estate/module_charge/charge.h" // IWYU: was transitively via elecstate.h #include "source_io/module_ml/cal_mlkedf_descriptors.h" #include "source_pw/module_ofdft/ml_base.h" diff --git a/source/source_estate/setup_estate_pw.cpp b/source/source_estate/setup_estate_pw.cpp index 654969faa9f..97192d24413 100644 --- a/source/source_estate/setup_estate_pw.cpp +++ b/source/source_estate/setup_estate_pw.cpp @@ -1,4 +1,5 @@ #include "source_estate/setup_estate_pw.h" +#include "source_cell/unitcell.h" // IWYU: was transitively via elecstate.h #include "source_estate/elecstate_pw.h" #include "source_estate/elecstate_pw_sdft.h" #include "source_estate/elecstate_tools.h" diff --git a/source/source_hsolver/hsolver_pw.cpp b/source/source_hsolver/hsolver_pw.cpp index 6ee17aea8a5..cc15145c6f6 100644 --- a/source/source_hsolver/hsolver_pw.cpp +++ b/source/source_hsolver/hsolver_pw.cpp @@ -1,4 +1,5 @@ #include "hsolver_pw.h" +#include "source_cell/klist.h" // IWYU: was transitively via elecstate.h #include "source_estate/module_pot/potential_new.h" // IWYU: elecstate.h no longer provides this transitively #include "source_base/parallel_comm.h" diff --git a/source/source_io/module_ctrl/ctrl_iter_lcao.cpp b/source/source_io/module_ctrl/ctrl_iter_lcao.cpp index ee454cce36e..6a49034228d 100644 --- a/source/source_io/module_ctrl/ctrl_iter_lcao.cpp +++ b/source/source_io/module_ctrl/ctrl_iter_lcao.cpp @@ -1,4 +1,5 @@ #include "ctrl_iter_lcao.h" // use ctrl_iter_lcao() +#include "source_cell/klist.h" // IWYU: was transitively via elecstate.h #include "source_cell/unitcell.h" // IWYU: was transitively via elecstate.h #include "source_base/global_variable.h" // use GlobalC diff --git a/source/source_io/module_ctrl/ctrl_scf_lcao.cpp b/source/source_io/module_ctrl/ctrl_scf_lcao.cpp index fd3e5459969..eb7d07996ae 100644 --- a/source/source_io/module_ctrl/ctrl_scf_lcao.cpp +++ b/source/source_io/module_ctrl/ctrl_scf_lcao.cpp @@ -1,4 +1,5 @@ #include "ctrl_scf_lcao.h" // use ctrl_scf_lcao() +#include "source_cell/klist.h" // IWYU: was transitively via elecstate.h #include "source_cell/unitcell.h" // IWYU: was transitively via elecstate.h #include "source_estate/module_pot/potential_new.h" // IWYU: elecstate.h no longer provides this transitively diff --git a/source/source_io/module_current/td_current_io.cpp b/source/source_io/module_current/td_current_io.cpp index b02a7e3f08a..646bf77a378 100644 --- a/source/source_io/module_current/td_current_io.cpp +++ b/source/source_io/module_current/td_current_io.cpp @@ -1,4 +1,5 @@ #include "td_current_io.h" +#include "source_cell/klist.h" // IWYU: was transitively via elecstate.h #include "source_cell/unitcell.h" // IWYU: was transitively via elecstate.h #include "source_base/global_function.h" 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 8f581fb98c0..7d859e92b3e 100644 --- a/source/source_io/module_current/td_current_io_comm.cpp +++ b/source/source_io/module_current/td_current_io_comm.cpp @@ -1,4 +1,5 @@ #include "source_base/global_function.h" +#include "source_cell/klist.h" // IWYU: was transitively via elecstate.h #include "source_cell/unitcell.h" // IWYU: was transitively via elecstate.h #include "source_base/global_variable.h" #include "source_base/libm/libm.h" diff --git a/source/source_io/module_dos/cal_ldos.cpp b/source/source_io/module_dos/cal_ldos.cpp index 23b52357d3c..e418b7f6663 100644 --- a/source/source_io/module_dos/cal_ldos.cpp +++ b/source/source_io/module_dos/cal_ldos.cpp @@ -1,4 +1,5 @@ #include "cal_ldos.h" +#include "source_cell/klist.h" // IWYU: was transitively via elecstate.h #include "source_cell/unitcell.h" // IWYU: was transitively via elecstate.h #include "source_estate/module_charge/charge.h" // IWYU: was transitively via elecstate.h diff --git a/source/source_io/module_energy/write_proj_band_lcao.cpp b/source/source_io/module_energy/write_proj_band_lcao.cpp index b550dac271c..d152196f2aa 100644 --- a/source/source_io/module_energy/write_proj_band_lcao.cpp +++ b/source/source_io/module_energy/write_proj_band_lcao.cpp @@ -1,4 +1,5 @@ #include "write_proj_band_lcao.h" +#include "source_cell/klist.h" // IWYU: was transitively via elecstate.h #include "source_cell/unitcell.h" // IWYU: was transitively via elecstate.h #include "source_io/module_parameter/parameter.h" diff --git a/source/source_io/module_ml/write_mlkedf_descriptors.cpp b/source/source_io/module_ml/write_mlkedf_descriptors.cpp index cfee9ad8d71..803504b3860 100644 --- a/source/source_io/module_ml/write_mlkedf_descriptors.cpp +++ b/source/source_io/module_ml/write_mlkedf_descriptors.cpp @@ -1,6 +1,7 @@ #ifdef __MLALGO #include "write_mlkedf_descriptors.h" +#include "source_cell/unitcell.h" // IWYU: was transitively via elecstate.h #include "source_estate/module_charge/charge.h" // IWYU: was transitively via elecstate.h #include "npy.hpp" diff --git a/source/source_io/module_wf/get_wf_lcao.cpp b/source/source_io/module_wf/get_wf_lcao.cpp index 9099741ea6f..c1068f83aca 100644 --- a/source/source_io/module_wf/get_wf_lcao.cpp +++ b/source/source_io/module_wf/get_wf_lcao.cpp @@ -1,4 +1,5 @@ #include "get_wf_lcao.h" +#include "source_cell/klist.h" // IWYU: was transitively via elecstate.h #include "source_estate/module_charge/charge.h" // IWYU: elecstate.h no longer provides this transitively #include "source_base/module_external/blacs_connector.h" diff --git a/source/source_lcao/FORCE_STRESS.cpp b/source/source_lcao/FORCE_STRESS.cpp index 79c94641fd7..d49ac084a0f 100644 --- a/source/source_lcao/FORCE_STRESS.cpp +++ b/source/source_lcao/FORCE_STRESS.cpp @@ -1,4 +1,5 @@ #include "FORCE_STRESS.h" +#include "source_cell/klist.h" // IWYU: was transitively via elecstate.h #include "source_cell/unitcell.h" // IWYU: was transitively via elecstate.h #include "source_base/parallel_reduce.h" diff --git a/source/source_lcao/FORCE_gamma.cpp b/source/source_lcao/FORCE_gamma.cpp index 379ceb29459..45e9b225ca2 100644 --- a/source/source_lcao/FORCE_gamma.cpp +++ b/source/source_lcao/FORCE_gamma.cpp @@ -1,4 +1,5 @@ #include "FORCE.h" +#include "source_cell/klist.h" // IWYU: was transitively via elecstate.h #include "source_base/memory_recorder.h" #include "source_base/parallel_reduce.h" #include "source_base/timer.h" diff --git a/source/source_lcao/FORCE_k.cpp b/source/source_lcao/FORCE_k.cpp index 475d8368884..56110f4d6f6 100644 --- a/source/source_lcao/FORCE_k.cpp +++ b/source/source_lcao/FORCE_k.cpp @@ -1,4 +1,5 @@ #include "FORCE.h" +#include "source_cell/klist.h" // IWYU: was transitively via elecstate.h #include "source_base/memory_recorder.h" #include "source_base/parallel_reduce.h" #include "source_base/timer.h" diff --git a/source/source_lcao/LCAO_set.cpp b/source/source_lcao/LCAO_set.cpp index 9f76ac2ba98..8749f9579cf 100644 --- a/source/source_lcao/LCAO_set.cpp +++ b/source/source_lcao/LCAO_set.cpp @@ -1,4 +1,5 @@ #include "source_lcao/LCAO_set.h" +#include "source_cell/klist.h" // IWYU: was transitively via elecstate.h #include "source_io/module_parameter/parameter.h" #include "source_psi/setup_psi.h" // use Setup_Psi #include "source_io/module_wf/read_wfc_nao.h" // use read_wfc_nao diff --git a/source/source_lcao/edm.cpp b/source/source_lcao/edm.cpp index eb48c0b9769..4c141a3117a 100644 --- a/source/source_lcao/edm.cpp +++ b/source/source_lcao/edm.cpp @@ -1,4 +1,5 @@ #include "FORCE.h" +#include "source_cell/klist.h" // IWYU: was transitively via elecstate.h #include "source_estate/module_dm/cal_dm_psi.h" #include "source_estate/elecstate_lcao.h" #include "source_base/memory_recorder.h" diff --git a/source/source_lcao/hamilt_lcao.cpp b/source/source_lcao/hamilt_lcao.cpp index f783155c0ca..5e14524c3cd 100644 --- a/source/source_lcao/hamilt_lcao.cpp +++ b/source/source_lcao/hamilt_lcao.cpp @@ -1,4 +1,5 @@ #include "source_lcao/hamilt_lcao.h" +#include "source_cell/klist.h" // IWYU: was transitively via elecstate.h #include "source_base/global_variable.h" #include "source_base/memory_recorder.h" diff --git a/source/source_lcao/module_deltaspin/spin_constrain.cpp b/source/source_lcao/module_deltaspin/spin_constrain.cpp index a8c3c262445..7de03ea9479 100644 --- a/source/source_lcao/module_deltaspin/spin_constrain.cpp +++ b/source/source_lcao/module_deltaspin/spin_constrain.cpp @@ -1,4 +1,5 @@ #include "spin_constrain.h" +#include "source_cell/klist.h" // IWYU: was transitively via elecstate.h #include "source_base/formatter.h" #include "source_lcao/module_operator_lcao/dspin_lcao.h" diff --git a/source/source_lcao/module_dftu/dftu_force.cpp b/source/source_lcao/module_dftu/dftu_force.cpp index a3ac7155aed..0f98a809b33 100644 --- a/source/source_lcao/module_dftu/dftu_force.cpp +++ b/source/source_lcao/module_dftu/dftu_force.cpp @@ -1,4 +1,5 @@ #include "source_io/module_parameter/parameter.h" +#include "source_cell/klist.h" // IWYU: was transitively via elecstate.h #include "source_cell/unitcell.h" // IWYU: was transitively via elecstate.h #ifdef __LCAO diff --git a/source/source_lcao/module_lr/esolver_lrtd_lcao.cpp b/source/source_lcao/module_lr/esolver_lrtd_lcao.cpp index d11602d4da9..3aa16d9f2db 100644 --- a/source/source_lcao/module_lr/esolver_lrtd_lcao.cpp +++ b/source/source_lcao/module_lr/esolver_lrtd_lcao.cpp @@ -1,4 +1,6 @@ #include "esolver_lrtd_lcao.h" +#include "source_cell/klist.h" // IWYU: was transitively via elecstate.h +#include "source_estate/module_charge/charge.h" // IWYU: was transitively via elecstate.h #include "source_cell/unitcell.h" // IWYU: was transitively via elecstate.h #include "utils/lr_util.h" #include "hamilt_casida.h" diff --git a/source/source_lcao/module_rdmft/rdmft.cpp b/source/source_lcao/module_rdmft/rdmft.cpp index d62a3ee3716..c375fb27c57 100644 --- a/source/source_lcao/module_rdmft/rdmft.cpp +++ b/source/source_lcao/module_rdmft/rdmft.cpp @@ -4,6 +4,8 @@ //========================================================== #include "rdmft.h" +#include "source_cell/klist.h" // IWYU: was transitively via elecstate.h +#include "source_cell/unitcell.h" // IWYU: was transitively via elecstate.h #include "source_lcao/module_rdmft/rdmft_tools.h" #include "source_base/timer.h" #include "source_base/parallel_reduce.h" diff --git a/source/source_lcao/module_rdmft/rdmft_pot.cpp b/source/source_lcao/module_rdmft/rdmft_pot.cpp index 9c3d708fa16..c8ac2362e1f 100644 --- a/source/source_lcao/module_rdmft/rdmft_pot.cpp +++ b/source/source_lcao/module_rdmft/rdmft_pot.cpp @@ -4,6 +4,7 @@ //========================================================== #include "rdmft.h" +#include "source_cell/klist.h" // IWYU: was transitively via elecstate.h #include "source_lcao/module_rdmft/rdmft_tools.h" #include "source_psi/psi.h" #include "source_estate/module_dm/cal_dm_psi.h" diff --git a/source/source_lcao/module_rdmft/update_state_rdmft.cpp b/source/source_lcao/module_rdmft/update_state_rdmft.cpp index 3d0d8098906..3241e6e1836 100644 --- a/source/source_lcao/module_rdmft/update_state_rdmft.cpp +++ b/source/source_lcao/module_rdmft/update_state_rdmft.cpp @@ -4,6 +4,8 @@ //========================================================== #include "rdmft.h" +#include "source_cell/klist.h" // IWYU: was transitively via elecstate.h +#include "source_cell/unitcell.h" // IWYU: was transitively via elecstate.h #include "source_estate/module_charge/charge.h" // IWYU: was transitively via elecstate.h #include "source_estate/module_pot/potential_new.h" // IWYU: was transitively via elecstate.h #include "source_lcao/module_rdmft/rdmft_tools.h" diff --git a/source/source_lcao/module_ri/Exx_LRI_interface.hpp b/source/source_lcao/module_ri/Exx_LRI_interface.hpp index e54fb1bf40f..d2d408e2335 100644 --- a/source/source_lcao/module_ri/Exx_LRI_interface.hpp +++ b/source/source_lcao/module_ri/Exx_LRI_interface.hpp @@ -1,6 +1,7 @@ #ifndef EXX_LRI_INTERFACE_HPP #define EXX_LRI_INTERFACE_HPP #include "source_io/module_parameter/parameter.h" +#include "source_cell/klist.h" // IWYU: was transitively via elecstate.h #include "source_cell/unitcell.h" // IWYU: was transitively via elecstate.h #include "Exx_LRI_interface.h" diff --git a/source/source_lcao/module_ri/RPA_LRI.hpp b/source/source_lcao/module_ri/RPA_LRI.hpp index 14bc7480bf9..d27dea43194 100644 --- a/source/source_lcao/module_ri/RPA_LRI.hpp +++ b/source/source_lcao/module_ri/RPA_LRI.hpp @@ -13,6 +13,7 @@ #include #include #include "source_lcao/module_ri/module_exx_symmetry/symmetry_rotation.h" +#include "source_cell/klist.h" // IWYU: was transitively via elecstate.h #include "source_cell/unitcell.h" // IWYU: was transitively via elecstate.h #include "RPA_LRI.h" diff --git a/source/source_lcao/setup_dm.cpp b/source/source_lcao/setup_dm.cpp index edb774ea58a..de4fb252029 100644 --- a/source/source_lcao/setup_dm.cpp +++ b/source/source_lcao/setup_dm.cpp @@ -1,4 +1,5 @@ #include "source_lcao/setup_dm.h" +#include "source_cell/klist.h" // IWYU: was transitively via elecstate.h #include "source_estate/cal_dm.h" #include "source_base/timer.h" #include "source_estate/module_dm/cal_dm_psi.h" diff --git a/source/source_pw/module_pwdft/elecond.cpp b/source/source_pw/module_pwdft/elecond.cpp index a362a3088a9..38d0374b63c 100644 --- a/source/source_pw/module_pwdft/elecond.cpp +++ b/source/source_pw/module_pwdft/elecond.cpp @@ -1,4 +1,5 @@ #include "elecond.h" +#include "source_cell/unitcell.h" // IWYU: was transitively via elecstate.h #include "source_base/global_function.h" #include "source_base/global_variable.h" diff --git a/source/source_pw/module_pwdft/forces_cc.cpp b/source/source_pw/module_pwdft/forces_cc.cpp index 117fab667c2..ce6e41f8323 100644 --- a/source/source_pw/module_pwdft/forces_cc.cpp +++ b/source/source_pw/module_pwdft/forces_cc.cpp @@ -1,4 +1,5 @@ #include "forces.h" +#include "source_cell/unitcell.h" // IWYU: was transitively via elecstate.h #include "source_basis/module_pw/pw_basis.h" // IWYU: was transitively via elecstate.h #include "stress_func.h" #include "source_base/parallel_reduce.h" diff --git a/source/source_pw/module_pwdft/forces_scc.cpp b/source/source_pw/module_pwdft/forces_scc.cpp index aa50c1803b4..961cb608d11 100644 --- a/source/source_pw/module_pwdft/forces_scc.cpp +++ b/source/source_pw/module_pwdft/forces_scc.cpp @@ -1,4 +1,5 @@ #include "forces.h" +#include "source_cell/unitcell.h" // IWYU: was transitively via elecstate.h #include "source_basis/module_pw/pw_basis.h" // IWYU: was transitively via elecstate.h #include "source_base/parallel_reduce.h" #include "source_io/module_output/output_log.h" diff --git a/source/source_pw/module_pwdft/onsite_proj.cpp b/source/source_pw/module_pwdft/onsite_proj.cpp index a2bbae452a3..fea6c3f3936 100644 --- a/source/source_pw/module_pwdft/onsite_proj.cpp +++ b/source/source_pw/module_pwdft/onsite_proj.cpp @@ -5,6 +5,7 @@ #include #include #include "source_pw/module_pwdft/onsite_proj.h" +#include "source_cell/klist.h" // IWYU: was transitively via elecstate.h #include "source_cell/unitcell.h" // IWYU: was transitively via elecstate.h #include "source_pw/module_pwdft/onsite_proj_print.h" #include "source_lcao/module_dftu/dftu.h" diff --git a/source/source_pw/module_pwdft/op_pw_proj.cpp b/source/source_pw/module_pwdft/op_pw_proj.cpp index 5294a2b7de6..4b622405752 100644 --- a/source/source_pw/module_pwdft/op_pw_proj.cpp +++ b/source/source_pw/module_pwdft/op_pw_proj.cpp @@ -1,4 +1,5 @@ #include "op_pw_proj.h" +#include "source_cell/unitcell.h" // IWYU: was transitively via elecstate.h #include "source_base/timer.h" #include "source_base/parallel_reduce.h" diff --git a/source/source_pw/module_pwdft/setup_pot.cpp b/source/source_pw/module_pwdft/setup_pot.cpp index 28aa5ed7fd3..fd3c0db9af8 100644 --- a/source/source_pw/module_pwdft/setup_pot.cpp +++ b/source/source_pw/module_pwdft/setup_pot.cpp @@ -1,4 +1,6 @@ #include "source_pw/module_pwdft/setup_pot.h" +#include "source_cell/klist.h" // IWYU: was transitively via elecstate.h +#include "source_cell/unitcell.h" // IWYU: was transitively via elecstate.h #include "source_estate/module_pot/potential_new.h" // IWYU: elecstate.h no longer provides this transitively #include "source_estate/module_charge/symmetry_rho.h" diff --git a/source/source_relax/relax_nsync.cpp b/source/source_relax/relax_nsync.cpp index 7134cb6567a..9b838386e57 100644 --- a/source/source_relax/relax_nsync.cpp +++ b/source/source_relax/relax_nsync.cpp @@ -1,4 +1,5 @@ #include "relax_nsync.h" +#include "source_cell/unitcell.h" // IWYU: was transitively via elecstate.h #include "source_base/global_function.h" #include "source_base/global_variable.h" #include "source_io/module_parameter/parameter.h" From 96f25bf8acc157d4b219c071f4cf7e6202e6a861 Mon Sep 17 00:00:00 2001 From: Critsium Date: Tue, 23 Jun 2026 15:49:41 +0800 Subject: [PATCH 5/7] fix(estate): keep base-layer leaf utilities in elecstate.h elecstate_exx.cpp failed with "TITLE is not a member of ModuleBase": ModuleBase::TITLE (tool_title.h) was reaching ~67 files only transitively through the heavy headers that are now forward-declared. The same applies to WARNING_QUIT, timer, GlobalFunc and Memory (~100 files total). These are source_base leaf utilities with own_fan~0, so by the same cost/benefit rule used for parameter.h, include them in elecstate.h rather than churning ~100 downstream files: global_function.h (which also pulls tool_title.h and tool_quit.h), timer.h and memory_recorder.h. Being base-layer, this adds no architectural coupling. elecstate.h own_fan 68 -> 20 (71% reduction); no include cycle. Static analysis: 0 remaining breakages for TITLE/WARNING_QUIT/timer/GlobalFunc/ Memory, and none for constants.h / complexmatrix.h either. Co-Authored-By: Claude Opus 4.8 --- source/source_estate/elecstate.h | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/source/source_estate/elecstate.h b/source/source_estate/elecstate.h index 4dc8de4fe49..08012dbfafb 100644 --- a/source/source_estate/elecstate.h +++ b/source/source_estate/elecstate.h @@ -6,6 +6,14 @@ #include "source_psi/psi.h" // Psi appears in virtual method signatures; psi.h is light (own_fan=2) #include "source_io/module_parameter/parameter.h" // PARAM/Input_para; kept (own_fan=4, cheap) to avoid churning ~120 downstream PARAM users +// Base-layer leaf utilities (own_fan~0) that the old heavy includes used to +// pull in transitively. Kept here so the ~100 downstream files using TITLE / +// WARNING_QUIT / timer / GlobalFunc / Memory do not each need a new include; +// global_function.h also transitively provides tool_title.h and tool_quit.h. +#include "source_base/global_function.h" +#include "source_base/timer.h" +#include "source_base/memory_recorder.h" + #include #include #include From 81e3a8310124cb16445ebdca73c2bc6ed6b525b7 Mon Sep 17 00:00:00 2001 From: Critsium Date: Tue, 23 Jun 2026 15:58:46 +0800 Subject: [PATCH 6/7] fix(estate): forward-declare PW_Basis_K where used as a pointer only spin_constrain.h failed with "ModulePW::PW_Basis_K has not been declared": the type was reaching these headers only transitively through elecstate.h's now-forward-declared heavy includes. All three headers (and init_sc.cpp via spin_constrain.h) use PW_Basis_K solely as a pointer member/param, so a forward declaration is the correct fix -- pw_basis_k.h has own_fan=24 and should not be pulled into widely-included headers just for a pointer. Follows the existing convention (exx_lip.h already forward-declares it). Static scan confirms 0 remaining PW_Basis_K or Parallel_Kpoints breakages. Co-Authored-By: Claude Opus 4.8 --- source/source_hsolver/hsolver_lcaopw.h | 5 +++++ source/source_io/module_wf/get_wf_lcao.h | 4 ++++ source/source_lcao/module_deltaspin/spin_constrain.h | 5 +++++ 3 files changed, 14 insertions(+) diff --git a/source/source_hsolver/hsolver_lcaopw.h b/source/source_hsolver/hsolver_lcaopw.h index b13669ca754..81e82b99415 100644 --- a/source/source_hsolver/hsolver_lcaopw.h +++ b/source/source_hsolver/hsolver_lcaopw.h @@ -4,6 +4,11 @@ #include "source_estate/elecstate.h" #include "source_hamilt/hamilt.h" #include "source_base/macros.h" + +// Used only as a pointer member/param; forward-declared instead of including +// pw_basis_k.h. Was previously reachable transitively through elecstate.h. +namespace ModulePW { class PW_Basis_K; } + namespace hsolver { diff --git a/source/source_io/module_wf/get_wf_lcao.h b/source/source_io/module_wf/get_wf_lcao.h index 6d01e006fb4..af95d88bfb6 100644 --- a/source/source_io/module_wf/get_wf_lcao.h +++ b/source/source_io/module_wf/get_wf_lcao.h @@ -4,6 +4,10 @@ #include "source_estate/elecstate.h" #include "source_basis/module_ao/parallel_orbitals.h" +// Used only as a pointer param; forward-declared instead of including +// pw_basis_k.h. Was previously reachable transitively through elecstate.h. +namespace ModulePW { class PW_Basis_K; } + class Get_wf_lcao { public: diff --git a/source/source_lcao/module_deltaspin/spin_constrain.h b/source/source_lcao/module_deltaspin/spin_constrain.h index 320371e2ef8..1254c34d874 100644 --- a/source/source_lcao/module_deltaspin/spin_constrain.h +++ b/source/source_lcao/module_deltaspin/spin_constrain.h @@ -56,6 +56,11 @@ #include "source_estate/module_dm/density_matrix.h" // mohan add 2025-11-02 #endif +// Used only as a pointer member/param below; forward-declared instead of +// including pw_basis_k.h (own_fan=24). Was previously reachable transitively +// through elecstate.h's heavy includes. +namespace ModulePW { class PW_Basis_K; } + namespace spinconstrain { From 95f89d683d13b0198501c6768aec33de0eec4b32 Mon Sep 17 00:00:00 2001 From: Critsium Date: Tue, 23 Jun 2026 16:06:04 +0800 Subject: [PATCH 7/7] fix(estate): handle surchem and namespace-qualified Potential construction Two more transitive-provision losses from the elecstate.h slimming: - 'surchem has not been declared' in setup_estate_pw.{h,cpp} and the ctrl_output / forces headers. surchem is used only as a reference/pointer param, so forward-declare 'class surchem;' (own_fan of surchem.h is not worth pulling into these headers for a reference). - 'invalid use of incomplete type elecstate::Potential' in setup_estate_pw.cpp et al. The construction is 'new elecstate::Potential(...)', namespace- qualified, which the previous complete-type scan (new\s+Potential) missed. Add potential_new.h to the 3 files that construct it that way. The detection pattern is broadened to new\s+(?:\w+::)?Type to catch namespace-qualified construction generally. Comprehensive re-scan across Charge/K_Vectors/UnitCell/Potential/PW_Basis_K/surchem now reports 0 real breakages (the lone flag is init_sc.cpp, covered by spin_constrain.h's forward declaration). Co-Authored-By: Claude Opus 4.8 --- source/source_estate/setup_estate_pw.cpp | 1 + source/source_estate/setup_estate_pw.h | 1 + source/source_hsolver/test/test_hsolver_pw.cpp | 1 + source/source_io/module_ctrl/ctrl_output_fp.h | 2 ++ source/source_io/module_ctrl/ctrl_output_pw.h | 2 ++ source/source_io/module_ctrl/ctrl_runner_lcao.h | 2 ++ source/source_lcao/LCAO_set.cpp | 1 + source/source_pw/module_pwdft/forces.h | 1 + 8 files changed, 11 insertions(+) diff --git a/source/source_estate/setup_estate_pw.cpp b/source/source_estate/setup_estate_pw.cpp index 97192d24413..e9552bf8aa2 100644 --- a/source/source_estate/setup_estate_pw.cpp +++ b/source/source_estate/setup_estate_pw.cpp @@ -1,4 +1,5 @@ #include "source_estate/setup_estate_pw.h" +#include "source_estate/module_pot/potential_new.h" // new elecstate::Potential (was transitively via elecstate.h) #include "source_cell/unitcell.h" // IWYU: was transitively via elecstate.h #include "source_estate/elecstate_pw.h" #include "source_estate/elecstate_pw_sdft.h" diff --git a/source/source_estate/setup_estate_pw.h b/source/source_estate/setup_estate_pw.h index 03e994369ae..d133af256a3 100644 --- a/source/source_estate/setup_estate_pw.h +++ b/source/source_estate/setup_estate_pw.h @@ -9,6 +9,7 @@ #include "source_pw/module_pwdft/vsep_pw.h" class pseudopot_cell_vnl; +class surchem; // used only as a reference param below (was transitively via elecstate.h) namespace elecstate { diff --git a/source/source_hsolver/test/test_hsolver_pw.cpp b/source/source_hsolver/test/test_hsolver_pw.cpp index e88317ba2d1..e102f40c773 100644 --- a/source/source_hsolver/test/test_hsolver_pw.cpp +++ b/source/source_hsolver/test/test_hsolver_pw.cpp @@ -5,6 +5,7 @@ #define private public #define protected public #include "source_io/module_parameter/parameter.h" +#include "source_estate/module_pot/potential_new.h" // new elecstate::Potential (was transitively via elecstate.h) #include "source_cell/klist.h" // IWYU: was transitively via elecstate.h #include "source_hsolver/hsolver_pw.h" #include "source_hsolver/hsolver_lcaopw.h" diff --git a/source/source_io/module_ctrl/ctrl_output_fp.h b/source/source_io/module_ctrl/ctrl_output_fp.h index ec9f4e20e78..7e553703e6f 100644 --- a/source/source_io/module_ctrl/ctrl_output_fp.h +++ b/source/source_io/module_ctrl/ctrl_output_fp.h @@ -3,6 +3,8 @@ #include "source_estate/elecstate_lcao.h" +class surchem; // used only as a reference param below (was transitively via elecstate.h) + namespace ModuleIO { diff --git a/source/source_io/module_ctrl/ctrl_output_pw.h b/source/source_io/module_ctrl/ctrl_output_pw.h index 00b7509990c..0008bcb657e 100644 --- a/source/source_io/module_ctrl/ctrl_output_pw.h +++ b/source/source_io/module_ctrl/ctrl_output_pw.h @@ -6,6 +6,8 @@ #include "source_estate/elecstate_lcao.h" // use pelec #include "source_psi/setup_psi_pw.h" // use Setup_Psi class +class surchem; // used only as a reference param below (was transitively via elecstate.h) + namespace ModuleIO { diff --git a/source/source_io/module_ctrl/ctrl_runner_lcao.h b/source/source_io/module_ctrl/ctrl_runner_lcao.h index 95c4fe4658a..3fa37081bc4 100644 --- a/source/source_io/module_ctrl/ctrl_runner_lcao.h +++ b/source/source_io/module_ctrl/ctrl_runner_lcao.h @@ -10,6 +10,8 @@ #include "source_lcao/setup_exx.h" // for exx, mohan add 20251018 #include "source_lcao/setup_dm.h" // for density matrix, mohan add 20251103 +class surchem; // used only as a reference param below (was transitively via elecstate.h) + namespace ModuleIO { diff --git a/source/source_lcao/LCAO_set.cpp b/source/source_lcao/LCAO_set.cpp index 8749f9579cf..5af628aa229 100644 --- a/source/source_lcao/LCAO_set.cpp +++ b/source/source_lcao/LCAO_set.cpp @@ -1,4 +1,5 @@ #include "source_lcao/LCAO_set.h" +#include "source_estate/module_pot/potential_new.h" // new elecstate::Potential (was transitively via elecstate.h) #include "source_cell/klist.h" // IWYU: was transitively via elecstate.h #include "source_io/module_parameter/parameter.h" #include "source_psi/setup_psi.h" // use Setup_Psi diff --git a/source/source_pw/module_pwdft/forces.h b/source/source_pw/module_pwdft/forces.h index b71e9c6a385..378cf59de27 100644 --- a/source/source_pw/module_pwdft/forces.h +++ b/source/source_pw/module_pwdft/forces.h @@ -15,6 +15,7 @@ #include "source_lcao/module_dftu/dftu.h" // mohan add 2025-11-06 class pseudopot_cell_vnl; +class surchem; // used only as a reference param below (was transitively via elecstate.h) template class Forces