@@ -10,14 +10,15 @@ void Gint::gint_kernel_rho(Gint_inout* inout) {
1010 const int ncyz = this ->ny * this ->nplane ;
1111 const double delta_r = this ->gridt ->dr_uniform ;
1212
13- #pragma omp parallel
13+ #pragma omp parallel
1414{
1515 std::vector<int > block_iw (max_size, 0 );
1616 std::vector<int > block_index (max_size+1 , 0 );
1717 std::vector<int > block_size (max_size, 0 );
18- std::vector<int > vindex (bxyz, 0 );
18+ std::vector<int > vindex (this -> bxyz , 0 );
1919#pragma omp for
20- for (int grid_index = 0 ; grid_index < this ->nbxx ; grid_index++) {
20+ for (int grid_index = 0 ; grid_index < this ->nbxx ; grid_index++)
21+ {
2122 const int na_grid = this ->gridt ->how_many_atoms [grid_index];
2223 if (na_grid == 0 ) {
2324 continue ;
@@ -41,7 +42,7 @@ void Gint::gint_kernel_rho(Gint_inout* inout) {
4142 block_size.data (),
4243 cal_flag.get_ptr_2D ());
4344
44- // evaluate psi on grids
45+ // evaluate psi on grids
4546 const int LD_pool = block_index[na_grid];
4647 ModuleBase::Array_Pool<double > psir_ylm (this ->bxyz , LD_pool);
4748 Gint_Tools::cal_psir_ylm (*this ->gridt ,
@@ -56,6 +57,11 @@ void Gint::gint_kernel_rho(Gint_inout* inout) {
5657
5758 for (int is = 0 ; is < inout->nspin_rho ; ++is)
5859 {
60+ // psir_ylm_new = psir_func(psir_ylm)
61+ // psir_func==nullptr means psir_ylm_new=psir_ylm
62+ const ModuleBase::Array_Pool<double > &psir_ylm_1 = (!this ->psir_func_1 ) ? psir_ylm : this ->psir_func_1 (psir_ylm, *this ->gridt , grid_index, is, block_iw, block_size, block_index, cal_flag);
63+ const ModuleBase::Array_Pool<double > &psir_ylm_2 = (!this ->psir_func_2 ) ? psir_ylm : this ->psir_func_2 (psir_ylm, *this ->gridt , grid_index, is, block_iw, block_size, block_index, cal_flag);
64+
5965 ModuleBase::Array_Pool<double > psir_DM (this ->bxyz , LD_pool);
6066 ModuleBase::GlobalFunc::ZEROS (psir_DM.get_ptr_1D (), this ->bxyz * LD_pool);
6167
@@ -68,13 +74,13 @@ void Gint::gint_kernel_rho(Gint_inout* inout) {
6874 block_index.data (),
6975 block_size.data (),
7076 cal_flag.get_ptr_2D (),
71- psir_ylm .get_ptr_2D (),
77+ psir_ylm_1 .get_ptr_2D (),
7278 psir_DM.get_ptr_2D (),
7379 this ->DMRGint [is],
7480 inout->if_symm );
7581
7682 // do sum_mu g_mu(r)psi_mu(r) to get electron density on grid
77- this ->cal_meshball_rho (na_grid, block_index.data (), vindex.data (), psir_ylm .get_ptr_2D (), psir_DM.get_ptr_2D (), inout->rho [is]);
83+ this ->cal_meshball_rho (na_grid, block_index.data (), vindex.data (), psir_ylm_2 .get_ptr_2D (), psir_DM.get_ptr_2D (), inout->rho [is]);
7884 }
7985 }
8086}
@@ -90,14 +96,15 @@ void Gint::gint_kernel_tau(Gint_inout* inout) {
9096 const double delta_r = this ->gridt ->dr_uniform ;
9197
9298
93- #pragma omp parallel
99+ #pragma omp parallel
94100{
95101 std::vector<int > block_iw (max_size, 0 );
96102 std::vector<int > block_index (max_size+1 , 0 );
97103 std::vector<int > block_size (max_size, 0 );
98104 std::vector<int > vindex (bxyz, 0 );
99105#pragma omp for
100- for (int grid_index = 0 ; grid_index < this ->nbxx ; grid_index++) {
106+ for (int grid_index = 0 ; grid_index < this ->nbxx ; grid_index++)
107+ {
101108 const int na_grid = this ->gridt ->how_many_atoms [grid_index];
102109 if (na_grid == 0 ) {
103110 continue ;
@@ -112,19 +119,19 @@ void Gint::gint_kernel_tau(Gint_inout* inout) {
112119 vindex.data ());
113120 // prepare block information
114121 ModuleBase::Array_Pool<bool > cal_flag (this ->bxyz ,max_size);
115- Gint_Tools::get_block_info (*this ->gridt , this ->bxyz , na_grid, grid_index,
122+ Gint_Tools::get_block_info (*this ->gridt , this ->bxyz , na_grid, grid_index,
116123 block_iw.data (), block_index.data (), block_size.data (), cal_flag.get_ptr_2D ());
117124
118- // evaluate psi and dpsi on grids
125+ // evaluate psi and dpsi on grids
119126 const int LD_pool = block_index[na_grid];
120127 ModuleBase::Array_Pool<double > psir_ylm (this ->bxyz , LD_pool);
121128 ModuleBase::Array_Pool<double > dpsir_ylm_x (this ->bxyz , LD_pool);
122129 ModuleBase::Array_Pool<double > dpsir_ylm_y (this ->bxyz , LD_pool);
123130 ModuleBase::Array_Pool<double > dpsir_ylm_z (this ->bxyz , LD_pool);
124131
125- Gint_Tools::cal_dpsir_ylm (*this ->gridt ,
132+ Gint_Tools::cal_dpsir_ylm (*this ->gridt ,
126133 this ->bxyz , na_grid, grid_index, delta_r,
127- block_index.data (), block_size.data (),
134+ block_index.data (), block_size.data (),
128135 cal_flag.get_ptr_2D (),
129136 psir_ylm.get_ptr_2D (),
130137 dpsir_ylm_x.get_ptr_2D (),
@@ -146,7 +153,7 @@ void Gint::gint_kernel_tau(Gint_inout* inout) {
146153 LD_pool,
147154 grid_index, na_grid,
148155 block_index.data (), block_size.data (),
149- cal_flag.get_ptr_2D (),
156+ cal_flag.get_ptr_2D (),
150157 dpsir_ylm_x.get_ptr_2D (),
151158 dpsix_DM.get_ptr_2D (),
152159 this ->DMRGint [is],
@@ -166,13 +173,13 @@ void Gint::gint_kernel_tau(Gint_inout* inout) {
166173 LD_pool,
167174 grid_index, na_grid,
168175 block_index.data (), block_size.data (),
169- cal_flag.get_ptr_2D (),
176+ cal_flag.get_ptr_2D (),
170177 dpsir_ylm_z.get_ptr_2D (),
171178 dpsiz_DM.get_ptr_2D (),
172179 this ->DMRGint [is],
173180 true );
174181
175- // do sum_i,mu g_i,mu(r) * d/dx_i psi_mu(r) to get kinetic energy density on grid
182+ // do sum_i,mu g_i,mu(r) * d/dx_i psi_mu(r) to get kinetic energy density on grid
176183 if (inout->job ==Gint_Tools::job_type::tau)
177184 {
178185 this ->cal_meshball_tau (
0 commit comments