1313
1414#include " module_hamilt_lcao/hamilt_lcaodft/LCAO_matrix.h"
1515#include " module_elecstate/module_dm/cal_dm_psi.h"
16+ #include " module_cell/module_symmetry/symmetry.h"
1617
1718#include < iostream>
1819#include < cmath>
@@ -79,10 +80,12 @@ void RDMFT<TK, TR>::init(Gint_Gamma& GG_in, Gint_k& GK_in, Parallel_Orbitals& Pa
7980 ucell = &ucell_in;
8081 kv = &kv_in;
8182 charge = &charge_in;
82- nk_total = kv->nkstot_full ;
8383 XC_func_rdmft = XC_func_rdmft_in;
8484 alpha_power = alpha_power_in;
8585
86+ if (ModuleSymmetry::Symmetry::symm_flag == -1 ) nk_total = kv->nkstot_full ;
87+ else nk_total = kv->nks ;
88+
8689 // XC_func_rdmft = "power"; // just for test
8790
8891 // create desc[] and something about MPI to Eij(nbands*nbands)
@@ -175,11 +178,15 @@ void RDMFT<TK, TR>::update_elec(const ModuleBase::matrix& occ_number_in, const p
175178 }
176179 }
177180
181+ std::cout << " \n rdmft_solver: " << " 0.1" << std::endl;
182+
178183 // update wfc
179184 TK* pwfc_in = &wfc_in (0 , 0 , 0 );
180185 TK* pwfc = &wfc (0 , 0 , 0 );
181186 for (int i=0 ; i<wfc.size (); ++i) pwfc[i] = pwfc_in[i];
182187
188+ std::cout << " \n rdmft_solver: " << " 0.2" << std::endl;
189+
183190 // update charge
184191 if ( GlobalV::GAMMA_ONLY_LOCAL )
185192 {
@@ -206,22 +213,35 @@ void RDMFT<TK, TR>::update_elec(const ModuleBase::matrix& occ_number_in, const p
206213 {
207214 // calculate DMK and DMR
208215 elecstate::DensityMatrix<TK, double > DM (kv, ParaV, GlobalV::NSPIN);
216+ std::cout << " \n rdmft_solver: " << " 0.21" << std::endl;
217+ std::cout << " \n wfc.get_nk(): " << wfc.get_nk () << std::endl;
218+ std::cout << " \n kv->nks: " << kv->nks << std::endl;
219+ std::cout << " \n wg.nr: " << wg.nr << std::endl;
209220 elecstate::cal_dm_psi (ParaV, wg, wfc, DM);
221+ std::cout << " \n rdmft_solver: " << " 0.22" << std::endl;
210222 DM.init_DMR (&GlobalC::GridD, &GlobalC::ucell);
223+ std::cout << " \n rdmft_solver: " << " 0.23" << std::endl;
211224 DM.cal_DMR ();
212225
226+ std::cout << " \n rdmft_solver: " << " 0.3" << std::endl;
227+
213228 // this code is copying from function ElecStateLCAO<TK>::psiToRho(), in elecstate_lcao.cpp
214229 for (int is = 0 ; is < GlobalV::NSPIN; is++)
215230 {
216231 ModuleBase::GlobalFunc::ZEROS (charge->rho [is], charge->nrxx );
217232 }
218233
234+ std::cout << " \n rdmft_solver: " << " 0.4" << std::endl;
235+
219236 GK->transfer_DM2DtoGrid (DM.get_DMR_vector ());
237+ std::cout << " \n rdmft_solver: " << " 0.5" << std::endl;
220238 // double** invaild_ptr = nullptr; // use invaild_ptr replace loc.DM_R in the future
221239 Gint_inout inout (loc->DM_R , charge->rho , Gint_Tools::job_type::rho); // what is Local_Orbital_Charge& loc_in? ///////////////
240+ std::cout << " \n rdmft_solver: " << " 0.6" << std::endl;
222241 GK->cal_gint (&inout);
223-
242+ std::cout << " \n rdmft_solver: " << " 0.7 " << std::endl;
224243 charge->renormalize_rho ();
244+ std::cout << " \n rdmft_solver: " << " 0.8" << std::endl;
225245 }
226246}
227247
@@ -465,7 +485,8 @@ double RDMFT<TK, TR>::cal_rdmft()
465485 add_occNum (occ_number, wfcHwfc_TV, wfcHwfc_hartree, wfcHwfc_XC, occNum_wfcHamiltWfc, XC_func_rdmft, alpha_power);
466486
467487 // get the total energy
468- add_wfcHwfc (kv->wk , occ_number, wfcHwfc_TV, wfcHwfc_hartree, wfcHwfc_XC, Etotal_n_k, XC_func_rdmft, alpha_power);
488+ // add_wfcHwfc(kv->wk, occ_number, wfcHwfc_TV, wfcHwfc_hartree, wfcHwfc_XC, Etotal_n_k, XC_func_rdmft, alpha_power);
489+ add_wfcHwfc (wg, wk_fun_occNum, wfcHwfc_TV, wfcHwfc_hartree, wfcHwfc_XC, Etotal_n_k, XC_func_rdmft, alpha_power);
469490
470491 E_RDMFT[3 ] = getEnergy (Etotal_n_k);
471492 Parallel_Reduce::reduce_all (E_RDMFT[3 ]);
@@ -511,19 +532,29 @@ void RDMFT<TK, TR>::cal_Energy()
511532
512533
513534template <typename TK, typename TR>
514- double RDMFT<TK, TR>::Run(ModuleBase::matrix& E_gradient_wg , psi::Psi<TK>& E_gradient_wfc)
535+ double RDMFT<TK, TR>::Run(ModuleBase::matrix& E_gradient_occNum , psi::Psi<TK>& E_gradient_wfc)
515536{
516537 this ->get_V_hartree ();
517538 this ->get_V_XC ();
518539 this ->cal_rdmft ();
519540 this ->cal_Energy ();
520541
521- E_gradient_wg = (occNum_wfcHamiltWfc);
542+ E_gradient_occNum = (occNum_wfcHamiltWfc);
522543
523544 TK* pwfc = &occNum_HamiltWfc (0 , 0 , 0 );
524545 TK* pwfc_out = &E_gradient_wfc (0 , 0 , 0 );
525546 for (int i=0 ; i<wfc.size (); ++i) pwfc_out[i] = pwfc[i];
526547
548+ // test
549+ rdmft::printMatrix_pointer (E_gradient_occNum.nr , E_gradient_occNum.nc , &E_gradient_occNum (0 , 0 ), " E_gradient_occNum" );
550+ rdmft::printMatrix_pointer (occ_number.nr , occ_number.nc , &occ_number (0 , 0 ), " occ_number" );
551+ rdmft::printMatrix_pointer (wfcHwfc_TV.nr , wfcHwfc_TV.nc , &wfcHwfc_TV (0 , 0 ), " wfcHwfc_TV" );
552+ rdmft::printMatrix_pointer (wfcHwfc_hartree.nr , wfcHwfc_hartree.nc , &wfcHwfc_hartree (0 , 0 ), " wfcHwfc_hartree" );
553+ rdmft::printMatrix_pointer (wfcHwfc_XC.nr , wfcHwfc_XC.nc , &wfcHwfc_XC (0 , 0 ), " wfcHwfc_XC" );
554+ rdmft::printMatrix_pointer (E_gradient_wfc.get_nbands (), E_gradient_wfc.get_nbasis (), &E_gradient_wfc (0 , 0 , 0 ), " E_gradient_wfc(ik=0)" );
555+ rdmft::printMatrix_pointer (E_gradient_wfc.get_nbands (), E_gradient_wfc.get_nbasis (), &E_gradient_wfc (2 , 0 , 0 ), " E_gradient_wfc(ik=2)" );
556+ // test
557+
527558 return E_RDMFT[3 ];
528559}
529560
0 commit comments