|
21 | 21 | #include "source_lcao/rho_tau_lcao.h" // mohan add 20251024 |
22 | 22 | #include "source_lcao/LCAO_set.h" // mohan add 20251111 |
23 | 23 |
|
| 24 | + |
| 25 | +// tmp |
| 26 | +#include "source_psi/setup_psi.h" // use Setup_Psi |
| 27 | +#include "source_io/read_wfc_nao.h" // use read_wfc_nao |
| 28 | +#include "source_estate/elecstate_tools.h" // use fixed_weights |
| 29 | + |
| 30 | + |
24 | 31 | namespace ModuleESolver |
25 | 32 | { |
26 | 33 |
|
@@ -73,13 +80,66 @@ void ESolver_KS_LCAO<TK, TR>::before_all_runners(UnitCell& ucell, const Input_pa |
73 | 80 | return; |
74 | 81 | } |
75 | 82 |
|
76 | | - LCAO_domain::set_psi_occ_dm_chg<TK>(this->kv, this->psi, this->pv, this->pelec, |
| 83 | + LCAO_domain::set_psi_occ_dm_chg<TK>(this->kv, this->psi, this->pv, this->pelec, |
77 | 84 | this->dmat, this->chr, inp); |
78 | 85 |
|
79 | | - LCAO_domain::set_pot<TK>(ucell, this->kv, this->sf, *this->pw_rho, *this->pw_rhod, |
| 86 | + LCAO_domain::set_pot<TK>(ucell, this->kv, this->sf, *this->pw_rho, *this->pw_rhod, |
80 | 87 | this->pelec, this->orb_, this->pv, this->locpp, this->dftu, |
81 | 88 | this->solvent, this->exx_nao, this->deepks, inp); |
82 | 89 |
|
| 90 | +/* |
| 91 | + // 5) init electronic wave function psi |
| 92 | + Setup_Psi<TK>::allocate_psi(this->psi, this->kv, this->pv, inp); |
| 93 | +
|
| 94 | + //! read psi from file |
| 95 | + if (inp.init_wfc == "file" && inp.esolver_type != "tddft") |
| 96 | + { |
| 97 | + if (!ModuleIO::read_wfc_nao(PARAM.globalv.global_readin_dir, |
| 98 | + this->pv, *this->psi, this->pelec->ekb, this->pelec->wg, this->kv.ik2iktot, |
| 99 | + this->kv.get_nkstot(), inp.nspin)) |
| 100 | + { |
| 101 | + ModuleBase::WARNING_QUIT("ESolver_KS_LCAO", "read electronic wave functions failed"); |
| 102 | + } |
| 103 | + } |
| 104 | +
|
| 105 | + // 7) init DMK, but DMR is constructed in before_scf() |
| 106 | + this->dmat.allocate_dm(&this->kv, &this->pv, inp.nspin); |
| 107 | +
|
| 108 | + // 8) init exact exchange calculations |
| 109 | + this->exx_nao.before_runner(ucell, this->kv, this->orb_, this->pv, inp); |
| 110 | +
|
| 111 | + // 9) initialize DFT+U |
| 112 | + if (inp.dft_plus_u) |
| 113 | + { |
| 114 | + this->dftu.init(ucell, &this->pv, this->kv.get_nks(), &orb_); |
| 115 | + } |
| 116 | +
|
| 117 | + // 10) init local pseudopotentials |
| 118 | + this->locpp.init_vloc(ucell, this->pw_rho); |
| 119 | + ModuleBase::GlobalFunc::DONE(GlobalV::ofs_running, "LOCAL POTENTIAL"); |
| 120 | +
|
| 121 | + // 11) init charge density |
| 122 | + this->chr.allocate(inp.nspin); |
| 123 | +
|
| 124 | + // 12) init potentials |
| 125 | + if (this->pelec->pot == nullptr) |
| 126 | + { |
| 127 | + this->pelec->pot = new elecstate::Potential(this->pw_rhod, this->pw_rho, |
| 128 | + &ucell, &(this->locpp.vloc), &(this->sf), &(this->solvent), |
| 129 | + &(this->pelec->f_en.etxc), &(this->pelec->f_en.vtxc)); |
| 130 | + } |
| 131 | +
|
| 132 | + // 13) init deepks |
| 133 | + this->deepks.before_runner(ucell, this->kv.get_nks(), this->orb_, this->pv, inp); |
| 134 | +
|
| 135 | + // 14) set occupations, tddft does not need to set occupations in the first scf |
| 136 | + if (inp.ocp && inp.esolver_type != "tddft") |
| 137 | + { |
| 138 | + elecstate::fixed_weights(inp.ocp_kb, inp.nbands, inp.nelec, |
| 139 | + this->pelec->klist, this->pelec->wg, this->pelec->skip_weights); |
| 140 | + } |
| 141 | +*/ |
| 142 | + |
83 | 143 | //! if kpar is not divisible by nks, print a warning |
84 | 144 | ModuleIO::print_kpar(this->kv.get_nks(), PARAM.globalv.kpar_lcao); |
85 | 145 |
|
|
0 commit comments