@@ -273,7 +273,7 @@ void OperatorEXXPW<T, Device>::act_op(const int nbands,
273273 setmem_complex_op ()(psi_mq_real, 0 , wfcpw->nrxx );
274274
275275 } // end of iq
276- auto h_psi_nk = tmhpsi + n_iband * nbasis;
276+ T* h_psi_nk = tmhpsi + n_iband * nbasis;
277277 Real hybrid_alpha = GlobalC::exx_info.info_global .hybrid_alpha ;
278278 wfcpw->real_to_recip (ctx, h_psi_real, h_psi_nk, this ->ik , true , hybrid_alpha);
279279 setmem_complex_op ()(h_psi_real, 0 , rhopw->nrxx );
@@ -297,7 +297,7 @@ void OperatorEXXPW<T, Device>::act_op_ace(const int nbands,
297297
298298// std::cout << "act_op_ace" << std::endl;
299299 // hpsi += -Xi^\dagger * Xi * psi
300- auto Xi_ace = Xi_ace_k[this ->ik ];
300+ T* Xi_ace = Xi_ace_k[this ->ik ];
301301 int nbands_tot = psi.get_nbands ();
302302 int nbasis_max = psi.get_nbasis ();
303303// T* hpsi = nullptr;
@@ -545,7 +545,8 @@ void OperatorEXXPW<T, Device>::multiply_potential(T *density_recip, int ik, int
545545 #endif
546546 for (int ig = 0 ; ig < npw; ig++)
547547 {
548- density_recip[ig] *= pot[ik * nks * npw + iq * npw + ig];
548+ int ig_kq = ik * nks * npw + iq * npw + ig;
549+ density_recip[ig] *= pot[ig_kq];
549550
550551 }
551552
@@ -557,7 +558,7 @@ const T *OperatorEXXPW<T, Device>::get_pw(const int m, const int iq) const
557558{
558559 // return pws[iq].get() + m * wfcpw->npwk[iq];
559560 psi.fix_kb (iq, m);
560- auto psi_mq = psi.get_pointer ();
561+ T* psi_mq = psi.get_pointer ();
561562 return psi_mq;
562563}
563564
@@ -586,7 +587,9 @@ OperatorEXXPW<T, Device>::OperatorEXXPW(const OperatorEXXPW<T_in, Device_in> *op
586587template <typename T, typename Device>
587588void OperatorEXXPW<T, Device>::get_potential() const
588589{
589- Real nqs_half1 = 0.5 * kv->nmp [0 ], nqs_half2 = 0.5 * kv->nmp [1 ], nqs_half3 = 0.5 * kv->nmp [2 ];
590+ Real nqs_half1 = 0.5 * kv->nmp [0 ];
591+ Real nqs_half2 = 0.5 * kv->nmp [1 ];
592+ Real nqs_half3 = 0.5 * kv->nmp [2 ];
590593
591594 int nks = wfcpw->nks , npw = rhopw->npw ;
592595 double tpiba2 = tpiba * tpiba;
@@ -595,24 +598,26 @@ void OperatorEXXPW<T, Device>::get_potential() const
595598 {
596599 for (int iq = 0 ; iq < nks; iq++)
597600 {
598- auto k_c = wfcpw->kvec_c [ik];
599- auto k_d = wfcpw->kvec_d [ik];
600- auto q_c = wfcpw->kvec_c [iq];
601- auto q_d = wfcpw->kvec_d [iq];
601+ const ModuleBase::Vector3< double > k_c = wfcpw->kvec_c [ik];
602+ const ModuleBase::Vector3< double > k_d = wfcpw->kvec_d [ik];
603+ const ModuleBase::Vector3< double > q_c = wfcpw->kvec_c [iq];
604+ const ModuleBase::Vector3< double > q_d = wfcpw->kvec_d [iq];
602605
603606 #ifdef _OPENMP
604607 #pragma omp parallel for schedule(static)
605608 #endif
606609 for (int ig = 0 ; ig < rhopw->npw ; ig++)
607610 {
608- auto g_d = rhopw->gdirect [ig];
609- auto kqg_d = k_d - q_d + g_d;
611+ const ModuleBase::Vector3< double > g_d = rhopw->gdirect [ig];
612+ const ModuleBase::Vector3< double > kqg_d = k_d - q_d + g_d;
610613 Real grid_factor = 1 ;
611614 if (gamma_extrapolation)
612615 {
613616 // if isint(kqg_d[0] * nqs_half1) && isint(kqg_d[1] * nqs_half2) && isint(kqg_d[2] * nqs_half3)
614617 auto isint = [](double x) { return std::abs (x - std::round (x)) < 1e-6 ; };
615- if (isint (kqg_d[0 ] * nqs_half1) && isint (kqg_d[1 ] * nqs_half2) && isint (kqg_d[2 ] * nqs_half3))
618+ if (isint (kqg_d[0 ] * nqs_half1) &&
619+ isint (kqg_d[1 ] * nqs_half2) &&
620+ isint (kqg_d[2 ] * nqs_half3))
616621 {
617622 grid_factor = 0 ;
618623 }
@@ -622,6 +627,8 @@ void OperatorEXXPW<T, Device>::get_potential() const
622627 }
623628 }
624629
630+ const int ig_kq = ik * nks * npw + iq * npw + ig;
631+
625632 Real gg = (k_c - q_c + rhopw->gcar [ig]).norm2 () * tpiba2;
626633 Real hse_omega2 = GlobalC::exx_info.info_global .hse_omega * GlobalC::exx_info.info_global .hse_omega ;
627634 // if (kqgcar2 > 1e-12) // vasp uses 1/40 of the smallest (k spacing)**2
@@ -631,28 +638,29 @@ void OperatorEXXPW<T, Device>::get_potential() const
631638 // if (PARAM.inp.dft_functional == "hse")
632639 if (GlobalC::exx_info.info_global .ccp_type == Conv_Coulomb_Pot_K::Ccp_Type::Erfc)
633640 {
634- pot[ik * nks * npw + iq * npw + ig ] = fac * (1.0 - std::exp (-gg / 4.0 / hse_omega2)) * grid_factor;
641+ pot[ig_kq ] = fac * (1.0 - std::exp (-gg / 4.0 / hse_omega2)) * grid_factor;
635642 }
636643 else if (GlobalC::exx_info.info_global .ccp_type == Conv_Coulomb_Pot_K::Ccp_Type::Erf)
637644 {
638- pot[ik * nks * npw + iq * npw + ig ] = fac * (std::exp (-gg / 4.0 / hse_omega2)) * grid_factor;
645+ pot[ig_kq ] = fac * (std::exp (-gg / 4.0 / hse_omega2)) * grid_factor;
639646 }
640647 else
641648 {
642- pot[ik * nks * npw + iq * npw + ig ] = fac * grid_factor;
649+ pot[ig_kq ] = fac * grid_factor;
643650 }
644651 }
645652 // }
646653 else
647654 {
648655 // if (PARAM.inp.dft_functional == "hse")
649- if (GlobalC::exx_info.info_global .ccp_type == Conv_Coulomb_Pot_K::Ccp_Type::Erfc && !gamma_extrapolation)
656+ if (GlobalC::exx_info.info_global .ccp_type == Conv_Coulomb_Pot_K::Ccp_Type::Erfc &&
657+ !gamma_extrapolation)
650658 {
651- pot[ik * nks * npw + iq * npw + ig ] = exx_div - ModuleBase::PI * ModuleBase::e2 / hse_omega2;
659+ pot[ig_kq ] = exx_div - ModuleBase::PI * ModuleBase::e2 / hse_omega2;
652660 }
653661 else
654662 {
655- pot[ik * nks * npw + iq * npw + ig ] = exx_div;
663+ pot[ig_kq ] = exx_div;
656664 }
657665 }
658666 // assert(is_finite(density_recip[ig]));
@@ -669,7 +677,9 @@ void OperatorEXXPW<T, Device>::exx_divergence()
669677 return ;
670678 }
671679
672- Real nqs_half1 = 0.5 * kv->nmp [0 ], nqs_half2 = 0.5 * kv->nmp [1 ], nqs_half3 = 0.5 * kv->nmp [2 ];
680+ Real nqs_half1 = 0.5 * kv->nmp [0 ];
681+ Real nqs_half2 = 0.5 * kv->nmp [1 ];
682+ Real nqs_half3 = 0.5 * kv->nmp [2 ];
673683
674684 // here we follow the exx_divergence subroutine in q-e (PW/src/exx_base.f90)
675685 double alpha = 10.0 / wfcpw->gk_ecut ;
@@ -680,21 +690,23 @@ void OperatorEXXPW<T, Device>::exx_divergence()
680690 // temporarily for all k points, should be replaced to q points later
681691 for (int ik = 0 ; ik < wfcpw->nks ; ik++)
682692 {
683- auto k_c = wfcpw->kvec_c [ik];
684- auto k_d = wfcpw->kvec_d [ik];
693+ const ModuleBase::Vector3< double > k_c = wfcpw->kvec_c [ik];
694+ const ModuleBase::Vector3< double > k_d = wfcpw->kvec_d [ik];
685695#ifdef _OPENMP
686696#pragma omp parallel for reduction(+:div)
687697#endif
688698 for (int ig = 0 ; ig < rhopw->npw ; ig++)
689699 {
690- auto q_c = k_c + rhopw->gcar [ig];
691- auto q_d = k_d + rhopw->gdirect [ig];
700+ const ModuleBase::Vector3< double > q_c = k_c + rhopw->gcar [ig];
701+ const ModuleBase::Vector3< double > q_d = k_d + rhopw->gdirect [ig];
692702 double qq = q_c.norm2 ();
693703 Real grid_factor = 1 ;
694704 if (gamma_extrapolation)
695705 {
696706 auto isint = [](double x) { return std::abs (x - std::round (x)) < 1e-6 ; };
697- if (isint (q_d[0 ] * nqs_half1) && isint (q_d[1 ] * nqs_half2) && isint (q_d[2 ] * nqs_half3))
707+ if (isint (q_d[0 ] * nqs_half1) &&
708+ isint (q_d[1 ] * nqs_half2) &&
709+ isint (q_d[2 ] * nqs_half3))
698710 {
699711 grid_factor = 0 ;
700712 }
@@ -797,14 +809,14 @@ double OperatorEXXPW<T, Device>::cal_exx_energy_ace(psi::Psi<T, Device> *ppsi_)
797809 setmem_complex_op ()(h_psi_ace, 0 , psi_.get_nbands () * psi_.get_nbasis ());
798810 *ik_ = i;
799811 psi_.fix_kb (i, 0 );
800- auto psi_i = psi_.get_pointer ();
812+ T* psi_i = psi_.get_pointer ();
801813 act_op_ace (psi_.get_nbands (), psi_.get_nbasis (), 1 , psi_i, h_psi_ace, 0 , true );
802814
803815 for (int nband = 0 ; nband < psi_.get_nbands (); nband++)
804816 {
805817 psi_.fix_kb (i, nband);
806- auto psi_i_n = psi_.get_pointer ();
807- auto hpsi_i_n = h_psi_ace + nband * psi_.get_nbasis ();
818+ T* psi_i_n = psi_.get_pointer ();
819+ T* hpsi_i_n = h_psi_ace + nband * psi_.get_nbasis ();
808820 double wg_i_n = (*wg)(i, nband);
809821 // Eexx += dot(psi_i_n, h_psi_i_n)
810822 Eexx += dot_op ()(psi_.get_nbasis (), psi_i_n, hpsi_i_n, false ) * wg_i_n * 2 ;
0 commit comments