Skip to content

Commit 5ed3d8a

Browse files
committed
fix use_k_continunity as input; obviate usage of static
1 parent 835c1ea commit 5ed3d8a

File tree

10 files changed

+35
-17
lines changed

10 files changed

+35
-17
lines changed

source/module_esolver/esolver_ks_pw.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -556,7 +556,8 @@ void ESolver_KS_PW<T, Device>::hamilt2density_single(UnitCell& ucell,
556556
hsolver::DiagoIterAssist<T, Device>::SCF_ITER,
557557
hsolver::DiagoIterAssist<T, Device>::PW_DIAG_NMAX,
558558
hsolver::DiagoIterAssist<T, Device>::PW_DIAG_THR,
559-
hsolver::DiagoIterAssist<T, Device>::need_subspace);
559+
hsolver::DiagoIterAssist<T, Device>::need_subspace,
560+
PARAM.inp.use_k_continuity);
560561

561562
hsolver_pw_obj.solve(this->p_hamilt,
562563
this->kspw_psi[0],

source/module_esolver/esolver_sdft_pw.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,8 @@ void ESolver_SDFT_PW<T, Device>::hamilt2density_single(UnitCell& ucell, int iste
175175
hsolver::DiagoIterAssist<T, Device>::SCF_ITER,
176176
hsolver::DiagoIterAssist<T, Device>::PW_DIAG_NMAX,
177177
hsolver::DiagoIterAssist<T, Device>::PW_DIAG_THR,
178-
hsolver::DiagoIterAssist<T, Device>::need_subspace);
178+
hsolver::DiagoIterAssist<T, Device>::need_subspace,
179+
PARAM.inp.use_k_continuity);
179180

180181
hsolver_pw_sdft_obj.solve(ucell,
181182
this->p_hamilt,

source/module_hamilt_lcao/module_deltaspin/cal_mw_from_lambda.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -428,7 +428,8 @@ void spinconstrain::SpinConstrain<std::complex<double>>::update_psi_charge(const
428428
hsolver::DiagoIterAssist<std::complex<double>, base_device::DEVICE_CPU>::SCF_ITER,
429429
hsolver::DiagoIterAssist<std::complex<double>, base_device::DEVICE_CPU>::PW_DIAG_NMAX,
430430
hsolver::DiagoIterAssist<std::complex<double>, base_device::DEVICE_CPU>::PW_DIAG_THR,
431-
hsolver::DiagoIterAssist<std::complex<double>, base_device::DEVICE_CPU>::need_subspace);
431+
hsolver::DiagoIterAssist<std::complex<double>, base_device::DEVICE_CPU>::need_subspace,
432+
PARAM.inp.use_k_continuity);
432433

433434
hsolver_pw_obj.solve(hamilt_t,
434435
psi_t[0],
@@ -503,7 +504,8 @@ void spinconstrain::SpinConstrain<std::complex<double>>::update_psi_charge(const
503504
hsolver::DiagoIterAssist<std::complex<double>, base_device::DEVICE_GPU>::SCF_ITER,
504505
hsolver::DiagoIterAssist<std::complex<double>, base_device::DEVICE_GPU>::PW_DIAG_NMAX,
505506
hsolver::DiagoIterAssist<std::complex<double>, base_device::DEVICE_GPU>::PW_DIAG_THR,
506-
hsolver::DiagoIterAssist<std::complex<double>, base_device::DEVICE_GPU>::need_subspace);
507+
hsolver::DiagoIterAssist<std::complex<double>, base_device::DEVICE_GPU>::need_subspace,
508+
PARAM.inp.use_k_continuity);
507509

508510
hsolver_pw_obj.solve(hamilt_t,
509511
psi_t[0],

source/module_hsolver/hsolver_pw.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -303,7 +303,7 @@ void HSolverPW<T, Device>::solve(hamilt::Hamilt<T, Device>* pHamilt,
303303
psi.fix_k(ik);
304304

305305
// If using k-point continuity and not first k-point, propagate from parent
306-
if (use_k_continuity && ik > 0 && count == 0) {
306+
if (use_k_continuity && ik > 0 && psi.is_first_iter) {
307307
propagate_psi(psi, k_parent[ik], ik);
308308
}
309309

@@ -336,7 +336,7 @@ void HSolverPW<T, Device>::solve(hamilt::Hamilt<T, Device>* pHamilt,
336336
// ModuleBase::timer::tick("HsolverPW", "k_point: " + std::to_string(ik));
337337
/// calculate the contribution of Psi for charge density rho
338338
}
339-
count++;
339+
psi.is_first_iter = false;
340340
// END Loop over k points
341341

342342
// copy eigenvalues to ekb in ElecState

source/module_hsolver/hsolver_pw.h

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -35,10 +35,12 @@ class HSolverPW
3535
const int scf_iter_in,
3636
const int diag_iter_max_in,
3737
const double diag_thr_in,
38-
const bool need_subspace_in)
38+
const bool need_subspace_in,
39+
const bool use_k_continuity_in = true)
3940
: wfc_basis(wfc_basis_in), calculation_type(calculation_type_in), basis_type(basis_type_in), method(method_in),
4041
use_paw(use_paw_in), use_uspp(use_uspp_in), nspin(nspin_in), scf_iter(scf_iter_in),
41-
diag_iter_max(diag_iter_max_in), diag_thr(diag_thr_in), need_subspace(need_subspace_in){};
42+
diag_iter_max(diag_iter_max_in), diag_thr(diag_thr_in), need_subspace(need_subspace_in),
43+
use_k_continuity(use_k_continuity_in){};
4244

4345
/// @brief solve function for pw
4446
/// @param pHamilt interface to hamilt
@@ -85,6 +87,8 @@ class HSolverPW
8587

8688
const bool need_subspace; // for cg or dav_subspace
8789

90+
const bool use_k_continuity;
91+
8892
protected:
8993
Device* ctx = {};
9094

@@ -107,11 +111,6 @@ class HSolverPW
107111
#endif
108112

109113
// K-point continuity related members
110-
/**
111-
* @brief Indicates whether to use K-point continuity.
112-
*/
113-
bool use_k_continuity = true;
114-
115114
/**
116115
* @brief Order of K-points.
117116
*/

source/module_hsolver/hsolver_pw_sdft.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,8 @@ class HSolverPW_SDFT : public HSolverPW<T, Device>
2626
const int scf_iter_in,
2727
const int diag_iter_max_in,
2828
const double diag_thr_in,
29-
const bool need_subspace_in)
29+
const bool need_subspace_in,
30+
const bool use_k_continuity_in = false)
3031
: HSolverPW<T, Device>(wfc_basis_in,
3132
calculation_type_in,
3233
basis_type_in,
@@ -37,7 +38,8 @@ class HSolverPW_SDFT : public HSolverPW<T, Device>
3738
scf_iter_in,
3839
diag_iter_max_in,
3940
diag_thr_in,
40-
need_subspace_in)
41+
need_subspace_in,
42+
use_k_continuity_in)
4143
{
4244
stoiter.init(pkv, wfc_basis_in, stowf, stoche, p_hamilt_sto);
4345
}

source/module_hsolver/test/test_hsolver_pw.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,8 @@ class TestHSolverPW : public ::testing::Test {
4646
hsolver::DiagoIterAssist<std::complex<double>, base_device::DEVICE_CPU>::SCF_ITER,
4747
hsolver::DiagoIterAssist<std::complex<double>, base_device::DEVICE_CPU>::PW_DIAG_NMAX,
4848
hsolver::DiagoIterAssist<std::complex<double>, base_device::DEVICE_CPU>::PW_DIAG_THR,
49-
hsolver::DiagoIterAssist<std::complex<double>, base_device::DEVICE_CPU>::need_subspace);
49+
hsolver::DiagoIterAssist<std::complex<double>, base_device::DEVICE_CPU>::need_subspace,
50+
false);
5051
hsolver::HSolverPW<std::complex<double>, base_device::DEVICE_CPU> hs_d
5152
= hsolver::HSolverPW<std::complex<double>, base_device::DEVICE_CPU>(&pwbk,
5253
"scf",
@@ -58,7 +59,8 @@ class TestHSolverPW : public ::testing::Test {
5859
hsolver::DiagoIterAssist<std::complex<double>, base_device::DEVICE_CPU>::SCF_ITER,
5960
hsolver::DiagoIterAssist<std::complex<double>, base_device::DEVICE_CPU>::PW_DIAG_NMAX,
6061
hsolver::DiagoIterAssist<std::complex<double>, base_device::DEVICE_CPU>::PW_DIAG_THR,
61-
hsolver::DiagoIterAssist<std::complex<double>, base_device::DEVICE_CPU>::need_subspace);
62+
hsolver::DiagoIterAssist<std::complex<double>, base_device::DEVICE_CPU>::need_subspace,
63+
false);
6264

6365
hamilt::Hamilt<std::complex<double>> hamilt_test_d;
6466
hamilt::Hamilt<std::complex<float>> hamilt_test_f;

source/module_io/read_input_item_elec_stru.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -818,5 +818,11 @@ void ReadInput::item_elec_stru()
818818
read_sync_double(input.bessel_nao_sigma);
819819
this->add_item(item);
820820
}
821+
{
822+
Input_Item item("use_k_continuity");
823+
item.annotation = "whether to use K-point continuity for wave function propagation";
824+
read_sync_bool(input.use_k_continuity);
825+
this->add_item(item);
826+
}
821827
}
822828
} // namespace ModuleIO

source/module_parameter/input_parameter.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -430,6 +430,8 @@ struct Input_para
430430
double block_up = 0.55; ///< high bound of the block
431431
double block_height = 0.1; ///< height of the block
432432

433+
bool use_k_continuity = true; ///< whether to use K-point continuity for wave function propagation
434+
433435
// implicit solvation model Menglin Sun added on 2022-04-04
434436
bool imp_sol = false; ///< true: implicit solvation correction; false:
435437
///< vacuum calculation(default)

source/module_psi/psi.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,9 @@ class Psi
138138
std::tuple<const T*, int> to_range(const Range& range) const;
139139
int npol = 1;
140140

141+
// Whether this is the first iteration for k-point propagation
142+
bool is_first_iter = true;
143+
141144
private:
142145
T* psi = nullptr; // avoid using C++ STL
143146

0 commit comments

Comments
 (0)