66#include " source_estate/module_dm/density_matrix.h"
77#include " source_psi/psi.h"
88#include " source_lcao/module_rt/velocity_op.h"
9+ #include " source_lcao/setup_exx.h"
10+ #ifdef __EXX
11+ #include < RI/global/Tensor.h>
12+ #endif
913
1014namespace ModuleIO
1115{
@@ -33,7 +37,22 @@ void write_current(const UnitCell& ucell,
3337 const LCAO_Orbitals& orb,
3438 const Velocity_op<TR>* cal_current,
3539 Record_adj& ra);
36-
40+ // / @brief func to output current calculated using i[r,H] directly
41+ template <typename TR>
42+ void write_current (
43+ const UnitCell& ucell,
44+ const Grid_Driver& GridD,
45+ const int istep,
46+ const psi::Psi<std::complex <double >>* psi,
47+ const elecstate::ElecState* pelec,
48+ const K_Vectors& kv,
49+ const Parallel_Orbitals* pv,
50+ const LCAO_Orbitals& orb,
51+ cal_r_overlap_R& r_calculator,
52+ const hamilt::HContainer<TR>* sR ,
53+ const hamilt::HContainer<TR>* hR,
54+ const Exx_NAO<std::complex <double >>& exx_nao
55+ );
3756// / @brief calculate sum_n[𝜌_(𝑛𝑘,𝜇𝜈)] for current calculation
3857void cal_tmp_DM_k (const UnitCell& ucell,
3958 elecstate::DensityMatrix<std::complex <double >, double >& DM_real,
@@ -47,7 +66,61 @@ void cal_tmp_DM(const UnitCell& ucell,
4766 elecstate::DensityMatrix<std::complex <double >, double >& DM_real,
4867 elecstate::DensityMatrix<std::complex <double >, double >& DM_imag,
4968 const int nspin);
69+ void set_rR_from_hR (const UnitCell& ucell,
70+ const Grid_Driver& GridD,
71+ const LCAO_Orbitals& orb,
72+ const Parallel_Orbitals* pv,
73+ cal_r_overlap_R& r_calculator,
74+ const hamilt::HContainer<std::complex <double >>* hR,
75+ ModuleBase::Vector3<hamilt::HContainer<double >*>& rR);
76+ template <typename TR>
77+ void sum_HR (
78+ const UnitCell& ucell,
79+ const Parallel_Orbitals& pv,
80+ const K_Vectors& kv,
81+ const hamilt::HContainer<TR>* hR,
82+ hamilt::HContainer<std::complex <double >>* full_hR,
83+ const Exx_NAO<std::complex <double >>& exx_nao
84+ );
85+
86+ template <typename Tadd, typename Tfull>
87+ void add_HR (const hamilt::HContainer<Tadd>* hR, hamilt::HContainer<Tfull>* full_hR);
88+
89+ void init_from_adj (const UnitCell& ucell,
90+ const Grid_Driver& GridD,
91+ const LCAO_Orbitals& orb,
92+ const Parallel_Orbitals* pv,
93+ std::vector<AdjacentAtomInfo>& adjs_all,
94+ ModuleBase::Vector3<hamilt::HContainer<double >*>& rR);
95+ template <typename TR, typename TA>
96+ void init_from_hR (const hamilt::HContainer<TR>* hR, hamilt::HContainer<TA>* aimR);
97+ template <typename TR>
98+ void cal_velocity_basis_k (const UnitCell& ucell,
99+ const LCAO_Orbitals& orb,
100+ const Parallel_Orbitals* pv,
101+ const K_Vectors& kv,
102+ const ModuleBase::Vector3<hamilt::HContainer<double >*>& rR,
103+ const hamilt::HContainer<TR>& sR ,
104+ const hamilt::HContainer<std::complex <double >>& hR,
105+ std::vector<ModuleBase::Vector3<std::complex <double >*>>& velocity_basis_k);
50106
107+ void cal_velocity_matrix (const psi::Psi<std::complex <double >>* psi,
108+ const Parallel_Orbitals* pv,
109+ const K_Vectors& kv,
110+ const std::vector<ModuleBase::Vector3<std::complex <double >*>>& velocity_basis_k,
111+ std::vector<std::array<ModuleBase::ComplexMatrix, 3 >>& velocity_k);
112+ template <typename TR>
113+ void cal_current_comm_k (const UnitCell& ucell,
114+ const Grid_Driver& GridD,
115+ const LCAO_Orbitals& orb,
116+ const Parallel_Orbitals* pv,
117+ const K_Vectors& kv,
118+ cal_r_overlap_R& r_calculator,
119+ const hamilt::HContainer<TR>& sR ,
120+ const hamilt::HContainer<std::complex <double >>& hR,
121+ const psi::Psi<std::complex <double >>* psi,
122+ const elecstate::ElecState* pelec,
123+ std::vector<ModuleBase::Vector3<double >>& current_k);
51124#endif // __LCAO
52125} // namespace ModuleIO
53126#endif
0 commit comments