Skip to content

Commit d7d52c5

Browse files
committed
add bcast for energy
1 parent 7a29e2f commit d7d52c5

File tree

4 files changed

+11
-3
lines changed

4 files changed

+11
-3
lines changed

source/module_esolver/esolver_ks_pw.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -441,6 +441,7 @@ void ESolver_KS_PW<T, Device>::update_pot(const int istep, const int iter)
441441
}
442442
this->pelec->pot->update_from_charge(this->pelec->charge, &GlobalC::ucell);
443443
this->pelec->f_en.descf = this->pelec->cal_delta_escf();
444+
MPI_Bcast(&(this->pelec->f_en.descf), 1, MPI_DOUBLE, 0, PARAPW_WORLD);
444445
}
445446
else
446447
{

source/module_esolver/esolver_sdft_pw.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -221,6 +221,7 @@ void ESolver_SDFT_PW::hamilt2density(int istep, int iter, double ethr)
221221
srho.begin(is, *(this->pelec->charge), pw_rho, GlobalC::ucell.symm);
222222
}
223223
this->pelec->f_en.deband = this->pelec->cal_delta_eband();
224+
MPI_Bcast(&(this->pelec->f_en.deband), 1, MPI_DOUBLE, 0, PARAPW_WORLD);
224225
}
225226
else
226227
{

source/module_hamilt_pw/hamilt_stodft/sto_iter.cpp

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -414,7 +414,6 @@ void Stochastic_Iter::calHsqrtchi(Stochastic_WF& stowf)
414414
p_che->calcoef_real(nroot_fd);
415415
for (int ik = 0; ik < this->pkv->get_nks(); ++ik)
416416
{
417-
p_hamilt_sto->updateHk(ik);
418417
this->calTnchi_ik(ik, stowf);
419418
}
420419
}
@@ -481,7 +480,7 @@ void Stochastic_Iter::sum_stoband(Stochastic_WF& stowf,
481480
const int nchip_ik = nchip[ik];
482481
if (this->pkv->get_nks() > 1)
483482
{
484-
pHamilt->updateHk(ik);
483+
pHamilt->updateHk(ik); //can be merged with calTnchi_ik, but it does not nearly cost time.
485484
stowf.shchi->fix_k(ik);
486485
}
487486
const int npw = this->pkv->ngk[ik];
@@ -632,6 +631,10 @@ void Stochastic_Iter::calTnchi_ik(const int& ik, Stochastic_WF& stowf)
632631
}
633632
else
634633
{
634+
if (this->pkv->get_nks() > 1)
635+
{
636+
p_hamilt_sto->updateHk(ik); //necessary, because itermu should be called before this function
637+
}
635638
auto hchi_norm = std::bind(&hamilt::HamiltSdftPW<std::complex<double>>::hPsi_norm,
636639
p_hamilt_sto,
637640
std::placeholders::_1,

source/module_hsolver/hsolver_pw_sdft.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,12 +68,15 @@ void HSolverPW_SDFT::solve(hamilt::Hamilt<std::complex<double>>* pHamilt,
6868
// init k
6969
if (nks > 1)
7070
{
71-
pHamilt->updateHk(ik);
71+
pHamilt->updateHk(ik); // necessary , because emax and emin should be decided first
7272
}
7373
stoiter.calPn(ik, stowf);
7474
}
7575

76+
// iterate to get mu
7677
stoiter.itermu(iter, pes);
78+
79+
// prepare sqrt{f(\hat{H})}|\chi> to calculate density, force and stress
7780
stoiter.calHsqrtchi(stowf);
7881
if (skip_charge)
7982
{

0 commit comments

Comments
 (0)