diff --git a/source/source_esolver/esolver_fp.cpp b/source/source_esolver/esolver_fp.cpp index 4d4b522bfe..97680ba8d0 100644 --- a/source/source_esolver/esolver_fp.cpp +++ b/source/source_esolver/esolver_fp.cpp @@ -47,18 +47,18 @@ ESolver_FP::~ESolver_FP() void ESolver_FP::before_all_runners(UnitCell& ucell, const Input_para& inp) { ModuleBase::TITLE("ESolver_FP", "before_all_runners"); - std::string fft_device = PARAM.inp.device; - std::string fft_precison = PARAM.inp.precision; + std::string fft_device = inp.device; + std::string fft_precison = inp.precision; // LCAO basis doesn't support GPU acceleration on FFT currently - if(PARAM.inp.basis_type == "lcao") + if(inp.basis_type == "lcao") { fft_device = "cpu"; } - if ((PARAM.inp.precision=="single") || (PARAM.inp.precision=="mixing")) + if ((inp.precision=="single") || (inp.precision=="mixing")) { fft_precison = "mixing"; } - else if (PARAM.inp.precision=="double") + else if (inp.precision=="double") { fft_precison = "double"; } @@ -79,8 +79,8 @@ void ESolver_FP::before_all_runners(UnitCell& ucell, const Input_para& inp) pw_rhod = pw_rho; } pw_big = static_cast(pw_rhod); - pw_big->setbxyz(PARAM.inp.bx, PARAM.inp.by, PARAM.inp.bz); - sf.set(pw_rhod, PARAM.inp.nbspline); + pw_big->setbxyz(inp.bx, inp.by, inp.bz); + sf.set(pw_rhod, inp.nbspline); //! 1) read pseudopotentials elecstate::read_pseudo(GlobalV::ofs_running, ucell); @@ -89,7 +89,7 @@ void ESolver_FP::before_all_runners(UnitCell& ucell, const Input_para& inp) #ifdef __MPI this->pw_rho->initmpi(GlobalV::NPROC_IN_POOL, GlobalV::RANK_IN_POOL, POOL_WORLD); #endif - if (this->classname == "ESolver_OF" || PARAM.inp.of_ml_gene_data == 1) + if (this->classname == "ESolver_OF" || inp.of_ml_gene_data == 1) { this->pw_rho->setfullpw(inp.of_full_pw, inp.of_full_pw_dim); } @@ -143,7 +143,7 @@ void ESolver_FP::before_all_runners(UnitCell& ucell, const Input_para& inp) ModuleIO::print_rhofft(this->pw_rhod, this->pw_rho, this->pw_big, GlobalV::ofs_running); //! 5) initialize the charge extrapolation method if necessary - this->CE.Init_CE(PARAM.inp.nspin, ucell.nat, this->pw_rhod->nrxx, inp.chg_extrap); + this->CE.Init_CE(inp.nspin, ucell.nat, this->pw_rhod->nrxx, inp.chg_extrap); return; } diff --git a/source/source_esolver/esolver_ks.cpp b/source/source_esolver/esolver_ks.cpp index 0750fd382e..12452cfd68 100644 --- a/source/source_esolver/esolver_ks.cpp +++ b/source/source_esolver/esolver_ks.cpp @@ -57,23 +57,23 @@ void ESolver_KS::before_all_runners(UnitCell& ucell, const Input_para classname = "ESolver_KS"; basisname = ""; - scf_thr = PARAM.inp.scf_thr; - scf_ene_thr = PARAM.inp.scf_ene_thr; - maxniter = PARAM.inp.scf_nmax; + scf_thr = inp.scf_thr; + scf_ene_thr = inp.scf_ene_thr; + maxniter = inp.scf_nmax; niter = maxniter; drho = 0.0; - std::string fft_device = PARAM.inp.device; + std::string fft_device = inp.device; // Fast Fourier Transform // LCAO basis doesn't support GPU acceleration on FFT currently - if(PARAM.inp.basis_type == "lcao") + if(inp.basis_type == "lcao") { fft_device = "cpu"; } - std::string fft_precision = PARAM.inp.precision; + std::string fft_precision = inp.precision; #ifdef __ENABLE_FLOAT_FFTW - if (PARAM.inp.cal_cond && PARAM.inp.esolver_type == "sdft") + if (inp.cal_cond && inp.esolver_type == "sdft") { fft_precision = "mixing"; } @@ -83,7 +83,7 @@ void ESolver_KS::before_all_runners(UnitCell& ucell, const Input_para ModulePW::PW_Basis_K_Big* tmp = static_cast(pw_wfc); // should not use INPUT here, mohan 2024-05-12 - tmp->setbxyz(PARAM.inp.bx, PARAM.inp.by, PARAM.inp.bz); + tmp->setbxyz(inp.bx, inp.by, inp.bz); ///---------------------------------------------------------- /// charge mixing @@ -92,7 +92,7 @@ void ESolver_KS::before_all_runners(UnitCell& ucell, const Input_para p_chgmix->set_rhopw(this->pw_rho, this->pw_rhod); // cell_factor - this->ppcell.cell_factor = PARAM.inp.cell_factor; + this->ppcell.cell_factor = inp.cell_factor; //! 3) it has been established that @@ -103,16 +103,16 @@ void ESolver_KS::before_all_runners(UnitCell& ucell, const Input_para ModuleBase::GlobalFunc::DONE(GlobalV::ofs_running, "SETUP UNITCELL"); //! 4) setup the charge mixing parameters - p_chgmix->set_mixing(PARAM.inp.mixing_mode, - PARAM.inp.mixing_beta, - PARAM.inp.mixing_ndim, - PARAM.inp.mixing_gg0, - PARAM.inp.mixing_tau, - PARAM.inp.mixing_beta_mag, - PARAM.inp.mixing_gg0_mag, - PARAM.inp.mixing_gg0_min, - PARAM.inp.mixing_angle, - PARAM.inp.mixing_dmr, + p_chgmix->set_mixing(inp.mixing_mode, + inp.mixing_beta, + inp.mixing_ndim, + inp.mixing_gg0, + inp.mixing_tau, + inp.mixing_beta_mag, + inp.mixing_gg0_mag, + inp.mixing_gg0_min, + inp.mixing_angle, + inp.mixing_dmr, ucell.omega, ucell.tpiba); @@ -127,7 +127,7 @@ void ESolver_KS::before_all_runners(UnitCell& ucell, const Input_para } //! 6) Setup the k points according to symmetry. - this->kv.set(ucell,ucell.symm, PARAM.inp.kpoint_file, PARAM.inp.nspin, ucell.G, ucell.latvec, GlobalV::ofs_running); + this->kv.set(ucell,ucell.symm, inp.kpoint_file, inp.nspin, ucell.G, ucell.latvec, GlobalV::ofs_running); ModuleBase::GlobalFunc::DONE(GlobalV::ofs_running, "INIT K-POINTS"); //! 7) print information diff --git a/source/source_esolver/esolver_ks_lcao.cpp b/source/source_esolver/esolver_ks_lcao.cpp index 814ef8ebbb..cff799a8eb 100644 --- a/source/source_esolver/esolver_ks_lcao.cpp +++ b/source/source_esolver/esolver_ks_lcao.cpp @@ -139,11 +139,11 @@ void ESolver_KS_LCAO::before_all_runners(UnitCell& ucell, const Input_pa int ncol = 0; if (PARAM.globalv.gamma_only_local) { - nsk = PARAM.inp.nspin; + nsk = inp.nspin; ncol = this->pv.ncol_bands; - if (PARAM.inp.ks_solver == "genelpa" || PARAM.inp.ks_solver == "elpa" || PARAM.inp.ks_solver == "lapack" - || PARAM.inp.ks_solver == "pexsi" || PARAM.inp.ks_solver == "cusolver" - || PARAM.inp.ks_solver == "cusolvermp") + if (inp.ks_solver == "genelpa" || inp.ks_solver == "elpa" || inp.ks_solver == "lapack" + || inp.ks_solver == "pexsi" || inp.ks_solver == "cusolver" + || inp.ks_solver == "cusolvermp") { ncol = this->pv.ncol; } @@ -154,14 +154,14 @@ void ESolver_KS_LCAO::before_all_runners(UnitCell& ucell, const Input_pa #ifdef __MPI ncol = this->pv.ncol_bands; #else - ncol = PARAM.inp.nbands; + ncol = inp.nbands; #endif } this->psi = new psi::Psi(nsk, ncol, this->pv.nrow, this->kv.ngk, true); } // 5) read psi from file - if (PARAM.inp.init_wfc == "file"&& PARAM.inp.esolver_type != "tddft") + if (inp.init_wfc == "file" && inp.esolver_type != "tddft") { if (!ModuleIO::read_wfc_nao(PARAM.globalv.global_readin_dir, this->pv, @@ -169,7 +169,7 @@ void ESolver_KS_LCAO::before_all_runners(UnitCell& ucell, const Input_pa this->pelec, this->pelec->klist->ik2iktot, this->pelec->klist->get_nkstot(), - PARAM.inp.nspin)) + inp.nspin)) { ModuleBase::WARNING_QUIT("ESolver_KS_LCAO", "read electronic wave functions failed"); } @@ -178,16 +178,16 @@ void ESolver_KS_LCAO::before_all_runners(UnitCell& ucell, const Input_pa // 6) initialize the density matrix // DensityMatrix is allocated here, DMK is also initialized here // DMR is not initialized here, it will be constructed in each before_scf - dynamic_cast*>(this->pelec)->init_DM(&this->kv, &(this->pv), PARAM.inp.nspin); + dynamic_cast*>(this->pelec)->init_DM(&this->kv, &(this->pv), inp.nspin); // 7) initialize exact exchange calculations #ifdef __EXX - if (PARAM.inp.calculation == "scf" || PARAM.inp.calculation == "relax" || PARAM.inp.calculation == "cell-relax" - || PARAM.inp.calculation == "md") + if (inp.calculation == "scf" || inp.calculation == "relax" || inp.calculation == "cell-relax" + || inp.calculation == "md") { if (GlobalC::exx_info.info_global.cal_exx) { - if (PARAM.inp.init_wfc != "file") + if (inp.init_wfc != "file") { // if init_wfc==file, directly enter the EXX loop XC_Functional::set_xc_first_loop(ucell); } @@ -208,7 +208,7 @@ void ESolver_KS_LCAO::before_all_runners(UnitCell& ucell, const Input_pa #endif // 8) initialize DFT+U - if (PARAM.inp.dft_plus_u) + if (inp.dft_plus_u) { auto* dftu = ModuleDFTU::DFTU::get_instance(); dftu->init(ucell, &this->pv, this->kv.get_nks(), &orb_); @@ -219,7 +219,7 @@ void ESolver_KS_LCAO::before_all_runners(UnitCell& ucell, const Input_pa ModuleBase::GlobalFunc::DONE(GlobalV::ofs_running, "LOCAL POTENTIAL"); // 10) inititlize the charge density - this->chr.allocate(PARAM.inp.nspin); + this->chr.allocate(inp.nspin); this->pelec->omega = ucell.omega; // 11) initialize the potential @@ -238,13 +238,13 @@ void ESolver_KS_LCAO::before_all_runners(UnitCell& ucell, const Input_pa // 12) initialize deepks #ifdef __MLALGO LCAO_domain::DeePKS_init(ucell, pv, this->kv.get_nks(), orb_, this->ld, GlobalV::ofs_running); - if (PARAM.inp.deepks_scf) + if (inp.deepks_scf) { // load the DeePKS model from deep neural network - DeePKS_domain::load_model(PARAM.inp.deepks_model, ld.model_deepks); + DeePKS_domain::load_model(inp.deepks_model, ld.model_deepks); // read pdm from file for NSCF or SCF-restart, do it only once in whole calculation - DeePKS_domain::read_pdm((PARAM.inp.init_chg == "file"), - PARAM.inp.deepks_equiv, + DeePKS_domain::read_pdm((inp.init_chg == "file"), + inp.deepks_equiv, ld.init_pdm, ucell.nat, orb_.Alpha[0].getTotal_nchi() * ucell.nat, @@ -257,11 +257,11 @@ void ESolver_KS_LCAO::before_all_runners(UnitCell& ucell, const Input_pa // 13) set occupations // tddft does not need to set occupations in the first scf - if (PARAM.inp.ocp && inp.esolver_type != "tddft") + if (inp.ocp && inp.esolver_type != "tddft") { - elecstate::fixed_weights(PARAM.inp.ocp_kb, - PARAM.inp.nbands, - PARAM.inp.nelec, + elecstate::fixed_weights(inp.ocp_kb, + inp.nbands, + inp.nelec, this->pelec->klist, this->pelec->wg, this->pelec->skip_weights); @@ -289,7 +289,7 @@ void ESolver_KS_LCAO::before_all_runners(UnitCell& ucell, const Input_pa } // 15) initialize rdmft, added by jghan - if (PARAM.inp.rdmft == true) + if (inp.rdmft == true) { rdmft_solver.init(this->GG, this->GK, @@ -300,8 +300,8 @@ void ESolver_KS_LCAO::before_all_runners(UnitCell& ucell, const Input_pa *(this->pelec), this->orb_, two_center_bundle_, - PARAM.inp.dft_functional, - PARAM.inp.rdmft_power_alpha); + inp.dft_functional, + inp.rdmft_power_alpha); } ModuleBase::timer::tick("ESolver_KS_LCAO", "before_all_runners"); diff --git a/source/source_esolver/esolver_ks_lcaopw.cpp b/source/source_esolver/esolver_ks_lcaopw.cpp index 4f1690d2f2..0de6f10a2b 100644 --- a/source/source_esolver/esolver_ks_lcaopw.cpp +++ b/source/source_esolver/esolver_ks_lcaopw.cpp @@ -93,9 +93,9 @@ namespace ModuleESolver this->kv.ngk, true); #ifdef __EXX - if (PARAM.inp.calculation == "scf" || PARAM.inp.calculation == "relax" - || PARAM.inp.calculation == "cell-relax" - || PARAM.inp.calculation == "md") { + if (inp.calculation == "scf" || inp.calculation == "relax" + || inp.calculation == "cell-relax" + || inp.calculation == "md") { if (GlobalC::exx_info.info_global.cal_exx) { XC_Functional::set_xc_first_loop(ucell); diff --git a/source/source_esolver/esolver_ks_pw.cpp b/source/source_esolver/esolver_ks_pw.cpp index 760a597d1c..acc752d0cf 100644 --- a/source/source_esolver/esolver_ks_pw.cpp +++ b/source/source_esolver/esolver_ks_pw.cpp @@ -169,7 +169,7 @@ void ESolver_KS_PW::before_all_runners(UnitCell& ucell, const Input_p this->pelec->omega = ucell.omega; //! 3) inititlize the charge density. - this->chr.allocate(PARAM.inp.nspin); + this->chr.allocate(inp.nspin); //! 4) initialize the potential. if (this->pelec->pot == nullptr) @@ -194,9 +194,9 @@ void ESolver_KS_PW::before_all_runners(UnitCell& ucell, const Input_p ModuleBase::GlobalFunc::DONE(GlobalV::ofs_running, "NON-LOCAL POTENTIAL"); //! 7) Allocate and initialize psi - this->p_psi_init = new psi::PSIInit(PARAM.inp.init_wfc, - PARAM.inp.ks_solver, - PARAM.inp.basis_type, + this->p_psi_init = new psi::PSIInit(inp.init_wfc, + inp.ks_solver, + inp.basis_type, GlobalV::MY_RANK, ucell, this->sf, @@ -206,28 +206,28 @@ void ESolver_KS_PW::before_all_runners(UnitCell& ucell, const Input_p allocate_psi(this->psi, this->kv.get_nks(), this->kv.ngk, PARAM.globalv.nbands_l, this->pw_wfc->npwk_max); - this->p_psi_init->prepare_init(PARAM.inp.pw_seed); + this->p_psi_init->prepare_init(inp.pw_seed); - this->kspw_psi = PARAM.inp.device == "gpu" || PARAM.inp.precision == "single" + this->kspw_psi = inp.device == "gpu" || inp.precision == "single" ? new psi::Psi(this->psi[0]) : reinterpret_cast*>(this->psi); ModuleBase::GlobalFunc::DONE(GlobalV::ofs_running, "INIT BASIS"); //! 8) setup occupations - if (PARAM.inp.ocp) + if (inp.ocp) { - elecstate::fixed_weights(PARAM.inp.ocp_kb, - PARAM.inp.nbands, - PARAM.inp.nelec, + elecstate::fixed_weights(inp.ocp_kb, + inp.nbands, + inp.nelec, this->pelec->klist, this->pelec->wg, this->pelec->skip_weights); } // 9) initialize exx pw - if (PARAM.inp.calculation == "scf" || PARAM.inp.calculation == "relax" || PARAM.inp.calculation == "cell-relax" - || PARAM.inp.calculation == "md") + if (inp.calculation == "scf" || inp.calculation == "relax" || inp.calculation == "cell-relax" + || inp.calculation == "md") { if (GlobalC::exx_info.info_global.cal_exx && GlobalC::exx_info.info_global.separate_loop == true) { diff --git a/source/source_esolver/esolver_of.cpp b/source/source_esolver/esolver_of.cpp index cc0ed32e0b..1ece91eb62 100644 --- a/source/source_esolver/esolver_of.cpp +++ b/source/source_esolver/esolver_of.cpp @@ -87,7 +87,7 @@ void ESolver_OF::before_all_runners(UnitCell& ucell, const Input_para& inp) } // Setup the k points according to symmetry. - kv.set(ucell,ucell.symm, PARAM.inp.kpoint_file, PARAM.inp.nspin, ucell.G, ucell.latvec, GlobalV::ofs_running); + kv.set(ucell,ucell.symm, inp.kpoint_file, inp.nspin, ucell.G, ucell.latvec, GlobalV::ofs_running); ModuleBase::GlobalFunc::DONE(GlobalV::ofs_running, "INIT K-POINTS"); // print information @@ -127,12 +127,12 @@ void ESolver_OF::before_all_runners(UnitCell& ucell, const Input_para& inp) // Initialize KEDF // Calculate electron numbers, which will be used to initialize WT KEDF - this->nelec_ = new double[PARAM.inp.nspin]; - if (PARAM.inp.nspin == 1) + this->nelec_ = new double[inp.nspin]; + if (inp.nspin == 1) { - this->nelec_[0] = PARAM.inp.nelec; + this->nelec_[0] = inp.nelec; } - else if (PARAM.inp.nspin == 2) + else if (inp.nspin == 2) { // in fact, nelec_spin will not be used anymore this->pelec->init_nelec_spin(); diff --git a/source/source_esolver/esolver_sdft_pw.cpp b/source/source_esolver/esolver_sdft_pw.cpp index fdfaf1700e..42fde3ebe5 100644 --- a/source/source_esolver/esolver_sdft_pw.cpp +++ b/source/source_esolver/esolver_sdft_pw.cpp @@ -72,7 +72,7 @@ void ESolver_SDFT_PW::before_all_runners(UnitCell& ucell, const Input true); ModuleBase::Memory::record("SDFT::shchi", size * sizeof(T)); - if (PARAM.inp.nbands > 0) + if (inp.nbands > 0) { this->stowf.chiortho = new psi::Psi(this->kv.get_nks(),