@@ -117,35 +117,42 @@ double KEDF_vW::get_energy_density(double** pphi, int is, int ir, ModulePW::PW_B
117
117
118
118
/* *
119
119
* @brief Get the positive definite energy density of vW KEDF
120
- * \f[ \tau_{vW} = |\nabla \rho |^2 / (8 \rho) \f]
120
+ * \f[ \tau_{vW} = |\nabla \phi |^2 / 2 \f]
121
121
*
122
- * @param prho charge density
122
+ * @param pphi sqrt(rho)
123
123
* @param pw_rho pw basis
124
124
* @param rtau_vw rtau_vw => rtau_vw + tau_vw
125
125
*/
126
- void KEDF_vW::tau_vw (const double * const * prho , ModulePW::PW_Basis* pw_rho, double * rtau_vw)
126
+ void KEDF_vW::tau_vw (const double * const * pphi , ModulePW::PW_Basis* pw_rho, double * rtau_vw)
127
127
{
128
+ std::vector<double > abs_phi = std::vector<double >(pw_rho->nrxx , 0 .);
129
+
128
130
for (int is = 0 ; is < PARAM.inp .nspin ; ++is)
129
131
{
130
- std::vector<std::vector<double >> nabla_rho (3 , std::vector<double >(pw_rho->nrxx , 0 .));
132
+ for (int ir = 0 ; ir < pw_rho->nrxx ; ++ir)
133
+ {
134
+ abs_phi[ir] = std::abs (pphi[is][ir]);
135
+ }
136
+
137
+ std::vector<std::vector<double >> nabla_phi (3 , std::vector<double >(pw_rho->nrxx , 0 .));
138
+ std::vector<std::complex<double >> recip_phi (pw_rho->npw , 0 .);
139
+ std::vector<std::complex<double >> recip_nabla_phi (pw_rho->npw , 0 .);
131
140
132
- std::vector<std::complex<double >> recip_rho (pw_rho->npw , 0 .);
133
- std::vector<std::complex<double >> recip_nabla_rho (pw_rho->npw , 0 .);
134
- pw_rho->real2recip (prho[is], recip_rho.data ());
141
+ pw_rho->real2recip (abs_phi.data (), recip_phi.data ());
135
142
136
143
std::complex<double > img (0.0 , 1.0 );
137
144
for (int j = 0 ; j < 3 ; ++j)
138
145
{
139
146
for (int ip = 0 ; ip < pw_rho->npw ; ++ip)
140
147
{
141
- recip_nabla_rho [ip] = img * pw_rho->gcar [ip][j] * recip_rho [ip] * pw_rho->tpiba ;
148
+ recip_nabla_phi [ip] = img * pw_rho->gcar [ip][j] * recip_phi [ip] * pw_rho->tpiba ;
142
149
}
143
150
144
- pw_rho->recip2real (recip_nabla_rho .data (), nabla_rho [j].data ());
151
+ pw_rho->recip2real (recip_nabla_phi .data (), nabla_phi [j].data ());
145
152
146
153
for (int ir = 0 ; ir < pw_rho->nrxx ; ++ir)
147
154
{
148
- rtau_vw[ir] += nabla_rho [j][ir] * nabla_rho [j][ir] / ( 8 . * prho[is][ir]) * 2.0 ; // convert Ha to Ry.
155
+ rtau_vw[ir] += nabla_phi [j][ir] * nabla_phi [j][ir] / 2 . * this -> vw_weight_ * 2.0 ; // convert Ha to Ry.
149
156
}
150
157
}
151
158
}
0 commit comments