Skip to content

Commit 54ab2bd

Browse files
committed
Refactor: add SpinConstrain getters for basis_type/ks_solver/nbands
Replace PARAM.inp access with sc_.get_basis_type()/get_ks_solver()/get_nbands() in diagonalization_engine.cpp (FullSpaceDiagonalizer, SubspaceDiagonalizer). These classes already hold a sc_ reference to SpinConstrain. Follows ABACUS governance pattern: modules access config through constructor/member, not through global PARAM.
1 parent d012013 commit 54ab2bd

2 files changed

Lines changed: 14 additions & 11 deletions

File tree

source/source_lcao/module_deltaspin/diagonalization_engine.cpp

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ DiagonalizationResult FullSpaceDiagonalizer::solve(int i_step)
134134
DiagonalizationResult result{};
135135

136136
#ifdef __LCAO
137-
if (PARAM.inp.basis_type != "lcao")
137+
if (sc_.get_basis_type() != "lcao")
138138
{
139139
// FullSpaceDiagonalizer is LCAO-only; signal failure
140140
result.success = false;
@@ -162,7 +162,7 @@ DiagonalizationResult FullSpaceDiagonalizer::solve(int i_step)
162162
}
163163

164164
// Full diagonalization without charge update (last param = true)
165-
hsolver::HSolverLCAO<std::complex<double>> hsolver_t(sc_.ParaV, PARAM.inp.ks_solver);
165+
hsolver::HSolverLCAO<std::complex<double>> hsolver_t(sc_.ParaV, sc_.get_ks_solver());
166166
hsolver_t.solve(hamilt_t, *psi_t, sc_.pelec, *sc_.dm_, *sc_.pelec->charge,
167167
sc_.get_nspin(), true);
168168

@@ -177,7 +177,7 @@ DiagonalizationResult FullSpaceDiagonalizer::solve(int i_step)
177177

178178
result.success = true;
179179
result.used_subspace_approximation = false;
180-
result.nbands = PARAM.inp.nbands;
180+
result.nbands = sc_.get_nbands();
181181
result.nk = psi_t->get_nk();
182182
#else
183183
result.success = false;
@@ -221,7 +221,7 @@ DiagonalizationResult SubspaceDiagonalizer::solve(int i_step)
221221
DiagonalizationResult result{};
222222

223223
#ifdef __LCAO
224-
if (PARAM.inp.basis_type != "lcao")
224+
if (sc_.get_basis_type() != "lcao")
225225
{
226226
result.success = false;
227227
ModuleBase::timer::end("SubspaceDiagonalizer", "solve");
@@ -335,10 +335,10 @@ bool SubspaceDiagonalizer::build_subspace(
335335
const std::vector<ModuleBase::Vector3<double>>& lambda_ref)
336336
{
337337
#ifdef __LCAO
338-
if (PARAM.inp.basis_type != "lcao") return false;
338+
if (sc_.get_basis_type() != "lcao") return false;
339339

340340
const int nk = sc_.pelec->klist->get_nks();
341-
const int nbands = PARAM.inp.nbands;
341+
const int nbands = sc_.get_nbands();
342342
const int nat = sc_.get_nat();
343343
const int nlocal = sc_.ParaV->nrow;
344344
const int nn = nbands * nbands;
@@ -366,7 +366,7 @@ bool SubspaceDiagonalizer::build_subspace(
366366
sc_.p_operator)->update_lambda();
367367
}
368368

369-
hsolver::HSolverLCAO<std::complex<double>> hsolver_t(sc_.ParaV, PARAM.inp.ks_solver);
369+
hsolver::HSolverLCAO<std::complex<double>> hsolver_t(sc_.ParaV, sc_.get_ks_solver());
370370
hsolver_t.solve(hamilt_t, *psi_t, sc_.pelec, *sc_.dm_, *sc_.pelec->charge,
371371
sc_.get_nspin(), true);
372372

@@ -479,7 +479,7 @@ DiagonalizationResult FirstOrderResponseEngine::solve(int i_step)
479479
DiagonalizationResult result{};
480480

481481
#ifdef __LCAO
482-
if (PARAM.inp.basis_type != "lcao")
482+
if (sc_.get_basis_type() != "lcao")
483483
{
484484
result.success = false;
485485
ModuleBase::timer::end("FirstOrderResponseEngine", "solve");
@@ -569,10 +569,10 @@ bool FirstOrderResponseEngine::build_subspace(
569569
const std::vector<ModuleBase::Vector3<double>>& lambda_ref)
570570
{
571571
#ifdef __LCAO
572-
if (PARAM.inp.basis_type != "lcao") return false;
572+
if (sc_.get_basis_type() != "lcao") return false;
573573

574574
const int nk = sc_.pelec->klist->get_nks();
575-
const int nbands = PARAM.inp.nbands;
575+
const int nbands = sc_.get_nbands();
576576
const int nat = sc_.get_nat();
577577
const int nlocal = sc_.ParaV->nrow;
578578
const int nn = nbands * nbands;
@@ -596,7 +596,7 @@ bool FirstOrderResponseEngine::build_subspace(
596596

597597
hamilt::Hamilt<std::complex<double>>* hamilt_t
598598
= static_cast<hamilt::Hamilt<std::complex<double>>*>(sc_.p_hamilt);
599-
hsolver::HSolverLCAO<std::complex<double>> hsolver_t(sc_.ParaV, PARAM.inp.ks_solver);
599+
hsolver::HSolverLCAO<std::complex<double>> hsolver_t(sc_.ParaV, sc_.get_ks_solver());
600600
hsolver_t.solve(hamilt_t, *psi_t, sc_.pelec, *sc_.dm_, *sc_.pelec->charge,
601601
sc_.get_nspin(), true);
602602

source/source_lcao/module_deltaspin/spin_constrain.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -840,6 +840,9 @@ class SpinConstrain
840840
double get_sccut() const;
841841
/// get sc_drop_thr
842842
double get_sc_drop_thr() const;
843+
const std::string& get_basis_type() const { return basis_type_; }
844+
const std::string& get_ks_solver() const { return ks_solver_; }
845+
int get_nbands() const { return nbands_; }
843846
/// @brief set orbital parallel info
844847
void set_ParaV(Parallel_Orbitals* ParaV_in);
845848
/// @brief set parameters for solver

0 commit comments

Comments
 (0)