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