@@ -144,15 +144,17 @@ void LR::KernelXC::f_xc_libxc(const int& nspin, const double& omega, const doubl
144144
145145 if (1 == nspin)
146146 {
147+ using V3 = ModuleBase::Vector3<double >;
147148 // 0. drho
148- this ->grad_kernel_set_ .emplace (" drho_gs" , std::vector<ModuleBase::Vector3<double >>(nrxx));
149- for (int ir = 0 ; ir < nrxx; ++ir)this ->grad_kernel_set_ [" drho_gs" ][ir] = gradrho[0 ][ir];
149+ this ->grad_kernel_set_ .emplace (" drho_gs" , gradrho[0 ]);
150150 // 1. $2f^{\rho\sigma}*\nabla\rho$
151- this ->grad_kernel_set_ .emplace (" 2_v2rhosigma_drho" , std::vector<ModuleBase::Vector3<double >>(nrxx));
152- for (int ir = 0 ; ir < nrxx; ++ir)this ->grad_kernel_set_ [" 2_v2rhosigma_drho" ][ir] = gradrho[0 ][ir] * v2rs.at (ir) * 2 .;
151+ this ->grad_kernel_set_ .emplace (" 2_v2rhosigma_drho" , std::vector<V3>(nrxx));
152+ std::transform (gradrho[0 ].begin (), gradrho[0 ].end (), v2rs.begin (), this ->grad_kernel_set_ [" 2_v2rhosigma_drho" ].begin (),
153+ [](const V3& a, const V3& b) {return a * b * 2 .; });
153154 // 2. $4f^{\sigma\sigma}*\nabla\rho$
154- this ->grad_kernel_set_ .emplace (" 4_v2sigma2_drho" , std::vector<ModuleBase::Vector3<double >>(nrxx));
155- for (int ir = 0 ; ir < nrxx; ++ir)this ->grad_kernel_set_ [" 4_v2sigma2_drho" ][ir] = sigma.at (ir) * v2s2.at (ir) * 4 .;
155+ this ->grad_kernel_set_ .emplace (" 4_v2sigma2_drho" , std::vector<V3>(nrxx));
156+ std::transform (sigma.begin (), sigma.end (), v2s2.begin (), this ->grad_kernel_set_ [" 4_v2sigma2_drho" ].begin (),
157+ [](const V3& a, const V3& b) {return a * b * 4 .; });
156158 }
157159 // else if (2 == nspin) // wrong, to be fixed
158160 // {
0 commit comments