@@ -75,24 +75,25 @@ void KEDF_WT::set_para(double dV,
7575 */
7676double KEDF_WT::get_energy (const double * const * prho, ModulePW::PW_Basis* pw_rho)
7777{
78- double ** kernelRhoBeta = new double *[PARAM .inp .nspin ];
79- for (int is = 0 ; is < PARAM .inp .nspin ; ++is) {
78+ const int nspin = PARAM .inp .nspin ;
79+ double ** kernelRhoBeta = new double *[nspin];
80+ for (int is = 0 ; is < nspin; ++is) {
8081 kernelRhoBeta[is] = new double [pw_rho->nrxx ];
8182}
8283 this ->multi_kernel (prho, kernelRhoBeta, this ->beta_ , pw_rho);
8384
8485 double energy = 0 .; // in Ry
85- if (PARAM . inp . nspin == 1 )
86+ if (nspin == 1 )
8687 {
8788 for (int ir = 0 ; ir < pw_rho->nrxx ; ++ir)
8889 {
8990 energy += std::pow (prho[0 ][ir], this ->alpha_ ) * kernelRhoBeta[0 ][ir];
9091 }
9192 energy *= this ->dV_ * this ->c_tf_ ;
9293 }
93- else if (PARAM . inp . nspin == 2 )
94+ else if (nspin == 2 )
9495 {
95- // for (int is = 0; is < PARAM.inp. nspin; ++is)
96+ // for (int is = 0; is < nspin; ++is)
9697 // {
9798 // for (int ir = 0; ir < pw_rho->nrxx; ++ir)
9899 // {
@@ -104,7 +105,7 @@ double KEDF_WT::get_energy(const double* const* prho, ModulePW::PW_Basis* pw_rho
104105 this ->wt_energy = energy;
105106 Parallel_Reduce::reduce_all (this ->wt_energy );
106107
107- for (int is = 0 ; is < PARAM . inp . nspin ; ++is)
108+ for (int is = 0 ; is < nspin; ++is)
108109 {
109110 delete[] kernelRhoBeta[is];
110111 }
@@ -125,15 +126,16 @@ double KEDF_WT::get_energy(const double* const* prho, ModulePW::PW_Basis* pw_rho
125126 */
126127double KEDF_WT::get_energy_density (const double * const * prho, int is, int ir, ModulePW::PW_Basis* pw_rho)
127128{
128- double ** kernelRhoBeta = new double *[PARAM .inp .nspin ];
129- for (int is = 0 ; is < PARAM .inp .nspin ; ++is) {
129+ const int nspin = PARAM .inp .nspin ;
130+ double ** kernelRhoBeta = new double *[nspin];
131+ for (int is = 0 ; is < nspin; ++is) {
130132 kernelRhoBeta[is] = new double [pw_rho->nrxx ];
131133}
132134 this ->multi_kernel (prho, kernelRhoBeta, this ->beta_ , pw_rho);
133135
134136 double result = this ->c_tf_ * std::pow (prho[is][ir], this ->alpha_ ) * kernelRhoBeta[is][ir];
135137
136- for (int is = 0 ; is < PARAM . inp . nspin ; ++is)
138+ for (int is = 0 ; is < nspin; ++is)
137139 {
138140 delete[] kernelRhoBeta[is];
139141 }
@@ -151,25 +153,26 @@ double KEDF_WT::get_energy_density(const double* const* prho, int is, int ir, Mo
151153 */
152154void KEDF_WT::tau_wt (const double * const * prho, ModulePW::PW_Basis* pw_rho, double * rtau_wt)
153155{
154- double ** kernelRhoBeta = new double *[PARAM .inp .nspin ];
155- for (int is = 0 ; is < PARAM .inp .nspin ; ++is) {
156+ const int nspin = PARAM .inp .nspin ;
157+ double ** kernelRhoBeta = new double *[nspin];
158+ for (int is = 0 ; is < nspin; ++is) {
156159 kernelRhoBeta[is] = new double [pw_rho->nrxx ];
157160}
158161 this ->multi_kernel (prho, kernelRhoBeta, this ->beta_ , pw_rho);
159162
160- if (PARAM . inp . nspin == 1 )
163+ if (nspin == 1 )
161164 {
162165 for (int ir = 0 ; ir < pw_rho->nrxx ; ++ir)
163166 {
164167 rtau_wt[ir] += std::pow (prho[0 ][ir], this ->alpha_ ) * kernelRhoBeta[0 ][ir] * this ->c_tf_ ;
165168 }
166169 }
167- else if (PARAM . inp . nspin == 2 )
170+ else if (nspin == 2 )
168171 {
169172 // Waiting for update
170173 }
171174
172- for (int is = 0 ; is < PARAM . inp . nspin ; ++is)
175+ for (int is = 0 ; is < nspin; ++is)
173176 {
174177 delete[] kernelRhoBeta[is];
175178 }
@@ -188,22 +191,23 @@ void KEDF_WT::tau_wt(const double* const* prho, ModulePW::PW_Basis* pw_rho, doub
188191 */
189192void KEDF_WT::wt_potential (const double * const * prho, ModulePW::PW_Basis* pw_rho, ModuleBase::matrix& rpotential)
190193{
194+ const int nspin = PARAM .inp .nspin ;
191195 ModuleBase::TITLE (" KEDF_WT" , " wt_potential" );
192196 ModuleBase::timer::start (" KEDF_WT" , " wt_potential" );
193197
194- double ** kernelRhoBeta = new double *[PARAM . inp . nspin ];
195- for (int is = 0 ; is < PARAM . inp . nspin ; ++is) {
198+ double ** kernelRhoBeta = new double *[nspin];
199+ for (int is = 0 ; is < nspin; ++is) {
196200 kernelRhoBeta[is] = new double [pw_rho->nrxx ];
197201}
198202 this ->multi_kernel (prho, kernelRhoBeta, this ->beta_ , pw_rho);
199203
200- double ** kernelRhoAlpha = new double *[PARAM . inp . nspin ];
201- for (int is = 0 ; is < PARAM . inp . nspin ; ++is) {
204+ double ** kernelRhoAlpha = new double *[nspin];
205+ for (int is = 0 ; is < nspin; ++is) {
202206 kernelRhoAlpha[is] = new double [pw_rho->nrxx ];
203207}
204208 this ->multi_kernel (prho, kernelRhoAlpha, this ->alpha_ , pw_rho);
205209
206- for (int is = 0 ; is < PARAM . inp . nspin ; ++is)
210+ for (int is = 0 ; is < nspin; ++is)
207211 {
208212 for (int ir = 0 ; ir < pw_rho->nrxx ; ++ir)
209213 {
@@ -215,17 +219,17 @@ void KEDF_WT::wt_potential(const double* const* prho, ModulePW::PW_Basis* pw_rho
215219
216220 // calculate energy
217221 double energy = 0 .; // in Ry
218- if (PARAM . inp . nspin == 1 )
222+ if (nspin == 1 )
219223 {
220224 for (int ir = 0 ; ir < pw_rho->nrxx ; ++ir)
221225 {
222226 energy += std::pow (prho[0 ][ir], this ->alpha_ ) * kernelRhoBeta[0 ][ir];
223227 }
224228 energy *= this ->dV_ * this ->c_tf_ ;
225229 }
226- else if (PARAM . inp . nspin == 2 )
230+ else if (nspin == 2 )
227231 {
228- // for (int is = 0; is < PARAM.inp. nspin; ++is)
232+ // for (int is = 0; is < nspin; ++is)
229233 // {
230234 // for (int ir = 0; ir < pw_rho->nrxx; ++ir)
231235 // {
@@ -237,7 +241,7 @@ void KEDF_WT::wt_potential(const double* const* prho, ModulePW::PW_Basis* pw_rho
237241 this ->wt_energy = energy;
238242 Parallel_Reduce::reduce_all (this ->wt_energy );
239243
240- for (int is = 0 ; is < PARAM . inp . nspin ; ++is)
244+ for (int is = 0 ; is < nspin; ++is)
241245 {
242246 delete[] kernelRhoBeta[is];
243247 delete[] kernelRhoAlpha[is];
@@ -256,6 +260,8 @@ void KEDF_WT::wt_potential(const double* const* prho, ModulePW::PW_Basis* pw_rho
256260 */
257261void KEDF_WT::get_stress (const double * const * prho, ModulePW::PW_Basis* pw_rho, double vw_weight)
258262{
263+ const int nspin = PARAM .inp .nspin ;
264+ const bool gamma_only = PARAM .globalv .gamma_only_pw ;
259265 double coef = 0 .;
260266 double mult = 0 .;
261267 if (this ->hold_rho0_ )
@@ -269,10 +275,10 @@ void KEDF_WT::get_stress(const double* const* prho, ModulePW::PW_Basis* pw_rho,
269275 mult = 2 . / 3 .;
270276 }
271277
272- std::complex <double >** recipRhoAlpha = new std::complex <double >*[PARAM . inp . nspin ];
273- std::complex <double >** recipRhoBeta = new std::complex <double >*[PARAM . inp . nspin ];
278+ std::complex <double >** recipRhoAlpha = new std::complex <double >*[nspin];
279+ std::complex <double >** recipRhoBeta = new std::complex <double >*[nspin];
274280 double * tempRho = new double [pw_rho->nrxx ];
275- for (int is = 0 ; is < PARAM . inp . nspin ; ++is)
281+ for (int is = 0 ; is < nspin; ++is)
276282 {
277283 recipRhoAlpha[is] = new std::complex <double >[pw_rho->npw ];
278284 recipRhoBeta[is] = new std::complex <double >[pw_rho->npw ];
@@ -294,7 +300,7 @@ void KEDF_WT::get_stress(const double* const* prho, ModulePW::PW_Basis* pw_rho,
294300 double diff = 0 .;
295301 this ->stress .zero_out ();
296302 const int ig0 = pw_rho->ig_gge0 ;
297- for (int is = 0 ; is < PARAM . inp . nspin ; ++is)
303+ for (int is = 0 ; is < nspin; ++is)
298304 {
299305 for (int ip = 0 ; ip < pw_rho->npw ; ++ip)
300306 {
@@ -310,7 +316,7 @@ void KEDF_WT::get_stress(const double* const* prho, ModulePW::PW_Basis* pw_rho,
310316 for (int b = a; b < 3 ; ++b)
311317 {
312318 this ->stress (a, b) += -diff * pw_rho->gcar [ip][a] * pw_rho->gcar [ip][b] / pw_rho->gg [ip];
313- if (a == b)
319+ if (a == b)
314320 {
315321 this ->stress (a, b) += diff * coef;
316322 }
@@ -326,7 +332,7 @@ void KEDF_WT::get_stress(const double* const* prho, ModulePW::PW_Basis* pw_rho,
326332 {
327333 Parallel_Reduce::reduce_all (this ->stress (a, b));
328334
329- if (PARAM . globalv . gamma_only_pw )
335+ if (gamma_only )
330336 {
331337 this ->stress (a, b) *= -std::pow (ModuleBase::PI , 2 )
332338 / (this ->alpha_ * this ->beta_ * this ->kf_
@@ -352,7 +358,7 @@ void KEDF_WT::get_stress(const double* const* prho, ModulePW::PW_Basis* pw_rho,
352358 }
353359 }
354360
355- for (int is = 0 ; is < PARAM . inp . nspin ; ++is)
361+ for (int is = 0 ; is < nspin; ++is)
356362 {
357363 delete[] recipRhoAlpha[is];
358364 delete[] recipRhoBeta[is];
@@ -457,15 +463,16 @@ double KEDF_WT::diff_linhard(double eta, double vw_weight)
457463 */
458464void KEDF_WT::multi_kernel (const double * const * prho, double ** rkernel_rho, double exponent, ModulePW::PW_Basis* pw_rho)
459465{
466+ const int nspin = PARAM .inp .nspin ;
460467#ifdef __CUDA
461468 if (pw_rho->get_device () == " gpu" ) {
462- this ->multi_kernel_gpu (prho, rkernel_rho, PARAM . inp . nspin , exponent, pw_rho);
469+ this ->multi_kernel_gpu (prho, rkernel_rho, nspin, exponent, pw_rho);
463470 return ;
464471 }
465472#endif
466473
467- std::complex <double >** recipkernelRho = new std::complex <double >*[PARAM . inp . nspin ];
468- for (int is = 0 ; is < PARAM . inp . nspin ; ++is)
474+ std::complex <double >** recipkernelRho = new std::complex <double >*[nspin];
475+ for (int is = 0 ; is < nspin; ++is)
469476 {
470477 recipkernelRho[is] = new std::complex <double >[pw_rho->npw ];
471478 for (int ir = 0 ; ir < pw_rho->nrxx ; ++ir)
@@ -480,7 +487,7 @@ void KEDF_WT::multi_kernel(const double* const* prho, double** rkernel_rho, doub
480487 pw_rho->recip2real (recipkernelRho[is], rkernel_rho[is]);
481488 }
482489
483- for (int is = 0 ; is < PARAM . inp . nspin ; ++is)
490+ for (int is = 0 ; is < nspin; ++is)
484491 {
485492 delete[] recipkernelRho[is];
486493 }
0 commit comments