This issue comes from a Codex global scan of deepmodeling/tbplas at commit 4d3652b.
Severity: Low
Config exposes DC_conductivity and quasi_eigenstates, and solver/analysis code reads both sections later. However, set_legal_params() and check_params() only validate generic, LDOS, dyn_pol, and dckb. Typos in the omitted sections can pass configuration checks and fail later as ignored settings or KeyError.
Code references:
|
'delta': 0.01, |
|
'recursion_depth': 2000} |
|
|
|
# DC conductivity |
|
self.DC_conductivity = {'energy_limits': (-0.5, 0.5)} |
|
|
|
# quasi-eigenstates |
|
self.quasi_eigenstates = {'energies': [-0.1, 0., 0.1]} |
|
|
|
# dynamical polarization |
|
self.dyn_pol = {'q_points': [[1., 0., 0.]], |
|
'coulomb_constant': 1.0, |
|
'background_dielectric_constant': 1.0} |
|
|
|
# dckb, Hall conductivity |
|
self.dckb = {'energies': [i * 0.01 - 0.2 for i in range(0, 41)], |
|
'n_kernel': 2048, |
|
'direction': 1, |
|
'ne_integral': 2048} |
|
|
|
# Set legal parameter names |
|
self._legal_params = dict() |
|
self._legal_params = { |
|
'generic': set(self.generic.keys()), |
|
'LDOS': set(self.LDOS.keys()), |
|
'dyn_pol': set(self.dyn_pol.keys()), |
|
'dckb': set(self.dckb.keys()) |
|
} |
|
|
|
def check_params(self) -> None: |
|
""" |
|
Check the sanity of parameters. |
|
|
|
:return: None |
|
:raises ValueError: if illegal parameters are detected. |
|
""" |
|
def _check(attr, attr_name): |
|
set_check = set(attr.keys()) |
|
set_ref = self._legal_params[attr_name] |
|
set_diff = set_check.difference(set_ref) |
|
for key in set_diff: |
|
raise ValueError(f"Undefined parameter {key} in" |
|
f" config.{attr_name}") |
|
|
|
_check(self.generic, 'generic') |
|
_check(self.LDOS, 'LDOS') |
|
_check(self.dyn_pol, 'dyn_pol') |
|
_check(self.dckb, 'dckb') |
|
|
|
def calc_corr_dc_cond(self) -> Tuple[np.ndarray, np.ndarray]: |
|
""" |
|
Calculate correlation function of electronic (DC) conductivity. |
|
|
|
:return: (corr_dos, corr_dc) |
|
corr_dos: (nr_time_steps,) complex128 array |
|
dimensionless DOS correlation function |
|
corr_dc: (2, n_energies, nr_time_steps) complex128 array |
|
DC conductivity correlation function in e^2/h_bar^2 * (eV)^2 * nm^2 |
|
""" |
|
# Get parameters |
|
tnr = self._config.generic['nr_time_steps'] |
|
en_range = self._sample.energy_range |
|
energies_dos = np.array([0.5 * i * en_range / tnr - en_range / 2. |
|
for i in range(tnr * 2)]) |
|
|
|
en_limit = self._config.DC_conductivity['energy_limits'] |
|
qe_indices = np.where((energies_dos >= en_limit[0]) & |
|
(energies_dos <= en_limit[1]))[0] |
|
|
|
self._config.quasi_eigenstates['energies'], |
|
self.rank, |
|
self._config.generic['wfn_check_steps'], |
|
self._config.generic['wfn_check_thr'] |
|
) |
|
states = self.all_average(states) |
|
if save_data: |
|
self._save_data(states, self._output['qe']) |
|
return states |
|
|
|
def calc_ldos_haydock(self) -> Tuple[np.ndarray, np.ndarray]: |
|
""" |
|
Calculate local density of states (LDOS) using Haydock recursion method. |
|
|
|
CAUTION: this method works for only one site. Although it can be adopted |
|
to deal with multiple sites, the time usage will be unaffordable. |
|
Use TBPM instead if you want to calculate LDOS for multiple sites. |
|
|
|
Ref: https://journals.jps.jp/doi/10.1143/JPSJ.80.054710 |
|
|
|
:return: (energies, ldos) |
|
energies: (2*nr_time_steps+1,) float64 array |
|
energies in eV |
|
ldos: (2*nr_time_steps+1,) float64 array |
|
LDOS value to corresponding energies in 1/eV |
|
:raises RuntimeError: if more than 1 mpi process is used |
|
""" |
Suggested fix: include every public config section in _legal_params and validate them in check_params().
This issue comes from a Codex global scan of deepmodeling/tbplas at commit 4d3652b.
Severity: Low
ConfigexposesDC_conductivityandquasi_eigenstates, and solver/analysis code reads both sections later. However,set_legal_params()andcheck_params()only validategeneric,LDOS,dyn_pol, anddckb. Typos in the omitted sections can pass configuration checks and fail later as ignored settings orKeyError.Code references:
tbplas/tbplas/tbpm/config.py
Lines 102 to 123 in 4d3652b
tbplas/tbplas/tbpm/config.py
Lines 140 to 165 in 4d3652b
tbplas/tbplas/tbpm/solver.py
Lines 392 to 412 in 4d3652b
tbplas/tbplas/tbpm/solver.py
Lines 497 to 523 in 4d3652b
Suggested fix: include every public config section in
_legal_paramsand validate them incheck_params().