Skip to content

Commit c2eaac9

Browse files
author
abacus_fixer
committed
reduce number of PARAM
1 parent 45d6d02 commit c2eaac9

1 file changed

Lines changed: 41 additions & 34 deletions

File tree

source/source_pw/module_ofdft/kedf_wt.cpp

Lines changed: 41 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -75,24 +75,25 @@ void KEDF_WT::set_para(double dV,
7575
*/
7676
double 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
*/
126127
double 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
*/
152154
void 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
*/
189192
void 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
*/
257261
void 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
*/
458464
void 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

Comments
 (0)