77#include " module_cell/module_neighbor/sltk_grid_driver.h"
88#include " module_elecstate/cal_dm.h"
99#include " module_elecstate/elecstate_lcao.h"
10- #include " module_elecstate/module_dm/cal_dm_psi.h"
1110#include " module_hamilt_pw/hamilt_pwdft/global.h"
1211#include " module_io/write_HS.h"
1312#include " module_hamilt_lcao/hamilt_lcaodft/stress_tools.h"
@@ -30,7 +29,7 @@ void Force_LCAO<std::complex<double>>::cal_fedm(const bool isforce,
3029 const bool isstress,
3130 ForceStressArrays& fsr,
3231 const UnitCell& ucell,
33- const elecstate::DensityMatrix<std::complex <double >, double >* dm,
32+ const elecstate::DensityMatrix<std::complex <double >, double >& dm,
3433 const psi::Psi<std::complex <double >>* psi,
3534 const Parallel_Orbitals& pv,
3635 const elecstate::ElecState* pelec,
@@ -43,51 +42,6 @@ void Force_LCAO<std::complex<double>>::cal_fedm(const bool isforce,
4342 ModuleBase::timer::tick (" Force_LCAO" , " cal_fedm" );
4443
4544 const int nspin = PARAM.inp .nspin ;
46- const int nbands = GlobalV::NBANDS;
47-
48- // construct a DensityMatrix object
49- elecstate::DensityMatrix<std::complex <double >, double > edm (kv, &pv, nspin);
50-
51- // --------------------------------------------
52- // calculate the energy density matrix here.
53- // --------------------------------------------
54-
55- ModuleBase::matrix wg_ekb;
56- wg_ekb.create (kv->get_nks (), nbands);
57- ModuleBase::Memory::record (" Force::wg_ekb" , sizeof (double ) * kv->get_nks () * nbands);
58- #ifdef _OPENMP
59- #pragma omp parallel for collapse(2) schedule(static, 1024)
60- #endif
61- for (int ik = 0 ; ik < kv->get_nks (); ik++)
62- {
63- for (int ib = 0 ; ib < nbands; ib++)
64- {
65- wg_ekb (ik, ib) = pelec->wg (ik, ib) * pelec->ekb (ik, ib);
66- }
67- }
68- std::vector<ModuleBase::ComplexMatrix> edm_k (kv->get_nks ());
69-
70- // use the original formula (Hamiltonian matrix) to calculate energy density matrix
71- if (dm->EDMK .size ())
72- {
73- #ifdef _OPENMP
74- #pragma omp parallel for schedule(static)
75- #endif
76- for (int ik = 0 ; ik < kv->get_nks (); ++ik)
77- {
78- edm.set_DMK_pointer (ik, dm->EDMK [ik].c );
79- }
80- }
81- else
82- {
83- // cal_dm_psi
84- elecstate::cal_dm_psi (edm.get_paraV_pointer (), wg_ekb, psi[0 ], edm);
85- }
86-
87- // cal_dm_2d
88- edm.init_DMR (*ra, &ucell);
89- edm.cal_DMR ();
90- edm.sum_DMR_spin ();
9145 // --------------------------------------------
9246 // summation \sum_{i,j} E(i,j)*dS(i,j)
9347 // BEGIN CALCULATION OF FORCE OF EACH ATOM
@@ -147,7 +101,7 @@ void Force_LCAO<std::complex<double>>::cal_fedm(const bool isforce,
147101 double Ry = ra->info [iat][cb][1 ];
148102 double Rz = ra->info [iat][cb][2 ];
149103 // get BaseMatrix
150- hamilt::BaseMatrix<double >* tmp_matrix = edm .get_DMR_pointer (1 )->find_matrix (iat1, iat2, Rx, Ry, Rz);
104+ hamilt::BaseMatrix<double >* tmp_matrix = dm .get_DMR_pointer (1 )->find_matrix (iat1, iat2, Rx, Ry, Rz);
151105 if (tmp_matrix == nullptr )
152106 {
153107 continue ;
0 commit comments