@@ -49,24 +49,28 @@ TEST_F(PWTEST, recip_to_real_C2C_double)
4949 {
5050 for (int ix = 0 ; ix < nx; ++ix)
5151 {
52+ const double vx = ix - int (nx / 2 );
5253 for (int iy = 0 ; iy < ny; ++iy)
5354 {
5455 const int offset = (ix * ny + iy) * nz;
56+ const double vy = iy - int (ny / 2 );
5557 for (int iz = 0 ; iz < nz; ++iz)
5658 {
5759 tmp[offset + iz] = 0.0 ;
58- double vx = ix - int (nx / 2 );
59- double vy = iy - int (ny / 2 );
60- double vz = iz - int (nz / 2 );
60+ const double vz = iz - int (nz / 2 );
6161 ModuleBase::Vector3<double > v (vx, vy, vz);
6262 double modulus = v * (GGT * v);
6363 if (modulus <= ggecut)
6464 {
6565 tmp[offset + iz] = 1.0 / (modulus + 1 );
6666 if (vy > 0 )
67+ {
6768 tmp[offset + iz] += ModuleBase::IMAG_UNIT / (std::abs (v.x + 1 ) + 1 );
69+ }
6870 else if (vy < 0 )
71+ {
6972 tmp[offset + iz] -= ModuleBase::IMAG_UNIT / (std::abs (-v.x + 1 ) + 1 );
73+ }
7074 }
7175 }
7276 }
@@ -81,10 +85,10 @@ TEST_F(PWTEST, recip_to_real_C2C_double)
8185 double (int (nz / 2 )) / nz);
8286 for (int ixy = 0 ; ixy < nx * ny; ++ixy)
8387 {
88+ const int ix = ixy / ny;
89+ const int iy = ixy % ny;
8490 for (int iz = 0 ; iz < nz; ++iz)
8591 {
86- int ix = ixy / ny;
87- int iy = ixy % ny;
8892 ModuleBase::Vector3<double > real_r (ix, iy, iz);
8993 double phase_im = -delta_g * real_r;
9094 complex <double > phase (0 , ModuleBase::TWO_PI * phase_im);
@@ -95,9 +99,9 @@ TEST_F(PWTEST, recip_to_real_C2C_double)
9599 // const int size = nx * ny * nz;
96100 complex <double >* h_rhog = new complex <double >[npw];
97101 complex <double >* h_rhogout = new complex <double >[npw];
98- complex <double >* d_rhog;
99- complex <double >* d_rhogr;
100- complex <double >* d_rhogout;
102+ complex <double >* d_rhog = nullptr ;
103+ complex <double >* d_rhogr = nullptr ;
104+ complex <double >* d_rhogout = nullptr ;
101105 cudaMalloc ((void **)&d_rhog, npw * sizeof (complex <double >));
102106 cudaMalloc ((void **)&d_rhogr, npw * sizeof (complex <double >));
103107 cudaMalloc ((void **)&d_rhogout, npw * sizeof (complex <double >));
@@ -117,18 +121,20 @@ TEST_F(PWTEST, recip_to_real_C2C_double)
117121 cudaMemcpy (d_rhog, h_rhog, npw * sizeof (complex <double >), cudaMemcpyHostToDevice);
118122
119123 std::complex <double >* h_rhor = new std::complex <double >[nrxx];
120- std::complex <double >* d_rhor;
124+ std::complex <double >* d_rhor = nullptr ;
121125 cudaMalloc ((void **)&d_rhor, nrxx * sizeof (std::complex <double >));
122126 pwtest.recip_to_real <std::complex <double >, std::complex <double >, base_device::DEVICE_GPU>(d_rhog, d_rhor);
123127 cudaMemcpy (h_rhor, d_rhor, nrxx * sizeof (std::complex <double >), cudaMemcpyDeviceToHost);
124128
125129 int startiz = pwtest.startz_current ;
126130 for (int ixy = 0 ; ixy < nx * ny; ++ixy)
127131 {
132+ const int offset = ixy * nz + startiz;
133+ const int startz = ixy * nplane ;
128134 for (int iz = 0 ; iz < nplane; ++iz)
129135 {
130- EXPECT_NEAR (tmp[ixy * nz + startiz + iz].real (), h_rhor[ixy * nplane + iz].real (), 1e-6 );
131- EXPECT_NEAR (tmp[ixy * nz + startiz + iz].imag (), h_rhor[ixy * nplane + iz].imag (), 1e-6 );
136+ EXPECT_NEAR (tmp[offset + iz].real (), h_rhor[startz + iz].real (), 1e-6 );
137+ EXPECT_NEAR (tmp[offset + iz].imag (), h_rhor[startz + iz].imag (), 1e-6 );
132138 }
133139 }
134140
@@ -185,14 +191,14 @@ TEST_F(PWTEST, recip_to_real_C2C_float)
185191 {
186192 for (int ix = 0 ; ix < nx; ++ix)
187193 {
194+ const float vx = ix - int (nx / 2 );
188195 for (int iy = 0 ; iy < ny; ++iy)
189196 {
197+ const float vy = iy - int (ny / 2 );
190198 const int offset = (ix * ny + iy) * nz;
191199 for (int iz = 0 ; iz < nz; ++iz)
192200 {
193201 tmp[offset+ iz] = 0.0 ;
194- float vx = ix - int (nx / 2 );
195- float vy = iy - int (ny / 2 );
196202 float vz = iz - int (nz / 2 );
197203 ModuleBase::Vector3<double > v (vx, vy, vz);
198204 float modulus = v * (GGT * v);
@@ -215,10 +221,10 @@ TEST_F(PWTEST, recip_to_real_C2C_float)
215221 ModuleBase::Vector3<float > delta_g (float (int (nx / 2 )) / nx, float (int (ny / 2 )) / ny, float (int (nz / 2 )) / nz);
216222 for (int ixy = 0 ; ixy < nx * ny; ++ixy)
217223 {
224+ const int ix = ixy / ny;
225+ const int iy = ixy % ny;
218226 for (int iz = 0 ; iz < nz; ++iz)
219227 {
220- int ix = ixy / ny;
221- int iy = ixy % ny;
222228 ModuleBase::Vector3<float > real_r (ix, iy, iz);
223229 float phase_im = -delta_g * real_r;
224230 complex <float > phase (0 , ModuleBase::TWO_PI * phase_im);
@@ -229,9 +235,9 @@ TEST_F(PWTEST, recip_to_real_C2C_float)
229235 // const int size = nx * ny * nz;
230236 complex <float >* h_rhog = new complex <float >[npw];
231237 complex <float >* h_rhogout = new complex <float >[npw];
232- complex <float >* d_rhog;
233- complex <float >* d_rhogr;
234- complex <float >* d_rhogout;
238+ complex <float >* d_rhog = nullptr ;
239+ complex <float >* d_rhogr = nullptr ;
240+ complex <float >* d_rhogout = nullptr ;
235241 cudaMalloc ((void **)&d_rhog, npw * sizeof (complex <float >));
236242 cudaMalloc ((void **)&d_rhogr, npw * sizeof (complex <float >));
237243 cudaMalloc ((void **)&d_rhogout, npw * sizeof (complex <float >));
@@ -252,18 +258,20 @@ TEST_F(PWTEST, recip_to_real_C2C_float)
252258 cudaMemcpy (d_rhogout, h_rhogout, npw * sizeof (complex <float >), cudaMemcpyHostToDevice);
253259
254260 std::complex <float >* h_rhor = new std::complex <float >[nrxx];
255- std::complex <float >* d_rhor;
261+ std::complex <float >* d_rhor = nullptr ;
256262 cudaMalloc ((void **)&d_rhor, nrxx * sizeof (std::complex <float >));
257263 pwtest.recip_to_real <std::complex <float >, std::complex <float >, base_device::DEVICE_GPU>(d_rhog, d_rhor);
258264 cudaMemcpy (h_rhor, d_rhor, nrxx * sizeof (std::complex <float >), cudaMemcpyDeviceToHost);
259265
260266 int startiz = pwtest.startz_current ;
261267 for (int ixy = 0 ; ixy < nx * ny; ++ixy)
262268 {
269+ const int offset = ixy * nz + startiz;
270+ const int startz = ixy * nplane;
263271 for (int iz = 0 ; iz < nplane; ++iz)
264272 {
265- EXPECT_NEAR (tmp[ixy * nz + startiz + iz].real (), h_rhor[ixy * nplane + iz].real (), 1e-4 );
266- EXPECT_NEAR (tmp[ixy * nz + startiz + iz].imag (), h_rhor[ixy * nplane + iz].imag (), 1e-4 );
273+ EXPECT_NEAR (tmp[offset + iz].real (), h_rhor[startz + iz].real (), 1e-4 );
274+ EXPECT_NEAR (tmp[offset + iz].imag (), h_rhor[startz + iz].imag (), 1e-4 );
267275 }
268276 }
269277
0 commit comments