@@ -1339,6 +1339,8 @@ void NEP_Charge::find_k_and_G(const bool is_small_box, const double* box, const
13391339 nep_data.ky .resize (charge_para.num_kpoints_max );
13401340 nep_data.kz .resize (charge_para.num_kpoints_max );
13411341 nep_data.G .resize (charge_para.num_kpoints_max );
1342+ nep_data.S_real .resize (charge_para.num_kpoints_max );
1343+ nep_data.S_imag .resize (charge_para.num_kpoints_max );
13421344 }
13431345
13441346 nep_data.kx .copy_from_host (cpu_kx.data (), num_kpoints);
@@ -1432,10 +1434,16 @@ static __global__ void find_force_charge_reciprocal_space(
14321434 temp_force_sum[1 ] += ky * imag_term;
14331435 temp_force_sum[2 ] += kz * imag_term;
14341436 }
1435- g_pe[n] += K_C_SP * temp_energy_sum / (N2 - N1);
1436- for (int d = 0 ; d < 6 ; ++d) {
1437- g_virial[n + N * d] += K_C_SP * temp_virial_sum[d] / (N2 - N1);
1438- }
1437+ g_pe[n] += K_C_SP * temp_energy_sum / N;
1438+ g_virial[n + 0 * N] += K_C_SP * temp_virial_sum[0 ] / N;
1439+ g_virial[n + 1 * N] += K_C_SP * temp_virial_sum[1 ] / N;
1440+ g_virial[n + 2 * N] += K_C_SP * temp_virial_sum[2 ] / N;
1441+ g_virial[n + 3 * N] += K_C_SP * temp_virial_sum[3 ] / N;
1442+ g_virial[n + 4 * N] += K_C_SP * temp_virial_sum[5 ] / N;
1443+ g_virial[n + 5 * N] += K_C_SP * temp_virial_sum[4 ] / N;
1444+ g_virial[n + 6 * N] += K_C_SP * temp_virial_sum[3 ] / N;
1445+ g_virial[n + 7 * N] += K_C_SP * temp_virial_sum[5 ] / N;
1446+ g_virial[n + 8 * N] += K_C_SP * temp_virial_sum[4 ] / N;
14391447 g_D_real[n] = 2 .0f * K_C_SP * temp_D_real_sum;
14401448 const float charge_factor = K_C_SP * 2 .0f * g_charge[n];
14411449 g_fx[n] += charge_factor * temp_force_sum[0 ];
0 commit comments