@@ -214,7 +214,7 @@ template <typename TK, typename TR_in, typename TR_out>
214214void DensityMatrix_Tools::cal_DMR_td (
215215 const DensityMatrix<TK , TR_in> &dm,
216216 std::vector<hamilt::HContainer<TR_out>*> &dmR_out,
217- const UnitCell& ucell ,
217+ const std::map<ModuleBase::Vector3< int >, std:: complex < double >>& phase_hybrid ,
218218 const ModuleBase::Vector3<double > At,
219219 const int ik_in)
220220{
@@ -262,19 +262,21 @@ void DensityMatrix_Tools::cal_DMR_td(
262262 }
263263 #endif
264264 target_DMR_mat_vec[iR] = target_mat->get_pointer ();
265- // cal tddft phase for hybrid gauge
266- const ModuleBase::Vector3<double > dtau = ucell.cal_dtau (iat1, iat2, R_index);
267- const double arg_td = At * dtau * ucell.lat0 ;
268265 for (int ik = 0 ; ik < dm._nk ; ++ik)
269266 {
270267 if (ik_in >= 0 && ik_in != ik) { continue ; }
271268 // cal k_phase
272269 // if TK==std::complex<double>, kphase is e^{ikR}
273270 const ModuleBase::Vector3<double > dR (R_index[0 ], R_index[1 ], R_index[2 ]);
274- const double arg = (dm._kvec_d [ik] * dR) * ModuleBase::TWO_PI + arg_td ;
271+ const double arg = (dm._kvec_d [ik] * dR) * ModuleBase::TWO_PI ;
275272 double sinp, cosp;
276273 ModuleBase::libm::sincos (arg, &sinp, &cosp);
277274 kphase_vec[ik][iR] = TK (cosp, sinp);
275+ if (PARAM .inp .td_stype ==2 )
276+ {
277+ // phase for hybrid gauge tddft
278+ kphase_vec[ik][iR] *= phase_hybrid.at (R_index);
279+ }
278280 }
279281 }
280282
@@ -353,20 +355,20 @@ void DensityMatrix_Tools::cal_DMR_td(
353355 ModuleBase::timer::end (" DensityMatrix" , " cal_DMR_td" );
354356}
355357template <>
356- void DensityMatrix<double , double >::cal_DMR_td(const UnitCell& ucell , const ModuleBase::Vector3<double > At, const int ik_in)
358+ void DensityMatrix<double , double >::cal_DMR_td(const std::map<ModuleBase::Vector3< int >, std:: complex < double >>& phase_hybrid , const ModuleBase::Vector3<double > At, const int ik_in)
357359{
358360 return ;
359361}
360362template <>
361- void DensityMatrix<std::complex <double >, double >::cal_DMR_td(const UnitCell& ucell , const ModuleBase::Vector3<double > At, const int ik_in)
363+ void DensityMatrix<std::complex <double >, double >::cal_DMR_td(const std::map<ModuleBase::Vector3< int >, std:: complex < double >>& phase_hybrid , const ModuleBase::Vector3<double > At, const int ik_in)
362364{
363- DensityMatrix_Tools::cal_DMR_td (*this , this ->_DMR , ucell , At, ik_in);
365+ DensityMatrix_Tools::cal_DMR_td (*this , this ->_DMR , phase_hybrid , At, ik_in);
364366}
365367
366368template <>
367- void DensityMatrix<std::complex <double >, std::complex <double >>::cal_DMR_td(const UnitCell& ucell , const ModuleBase::Vector3<double > At, const int ik_in)
369+ void DensityMatrix<std::complex <double >, std::complex <double >>::cal_DMR_td(const std::map<ModuleBase::Vector3< int >, std:: complex < double >>& phase_hybrid , const ModuleBase::Vector3<double > At, const int ik_in)
368370{
369- DensityMatrix_Tools::cal_DMR_td (*this , this ->_DMR , ucell , At, ik_in);
371+ DensityMatrix_Tools::cal_DMR_td (*this , this ->_DMR , phase_hybrid , At, ik_in);
370372}
371373
372374
0 commit comments