PAOFLOW.spectrum.do_dos#

Attributes#

Functions#

do_dos(data_controller, emin, emax, ne, delta)

Compute the total electronic density of states with fixed Gaussian smearing.

do_dos_adaptive(data_controller, emin, emax, ne)

Compute the total density of states with adaptive smearing.

Module Contents#

PAOFLOW.spectrum.do_dos.comm[source]#
PAOFLOW.spectrum.do_dos.rank[source]#
PAOFLOW.spectrum.do_dos.do_dos(data_controller, emin, emax, ne, delta)[source]#

Compute the total electronic density of states with fixed Gaussian smearing.

Parameters:
  • data_controller (DataController) – Object providing data_arrays and data_attributes. Required arrays: E_k (shape (nkpnts, nawf, nspin)). Required attributes: bnd, nkpnts, nspin, shift, verbose.

  • emin (float) – Lower energy bound of the DOS grid (eV).

  • emax (float) – Upper energy bound; clipped to min(shift, emax) (eV).

  • ne (int) – Number of energy grid points.

  • delta (float) – Gaussian smearing width (eV).

Returns:

Adds or updates the following entries in data_controller.data_arrays:

  • dos : np.ndarray, shape (ne,) — the DOS on the energy grid (broadcast to all ranks).

Writes dos_{ispin}.dat via DataController.write_file_row_col().

Return type:

None

Notes

The DOS is computed as

\[g(E) = \frac{N_{\rm bnd}}{N_{\rm tot} \sqrt{\pi}\,\delta} \sum_{\mathbf{k},n} \exp\!\left( -\left(\frac{E - \varepsilon_{n\mathbf{k}}}{\delta}\right)^2\right)\]

where \(N_{\rm tot} = N_k \times N_{\rm bnd}\). MPI reduction is used to sum partial contributions from each rank.

PAOFLOW.spectrum.do_dos.do_dos_adaptive(data_controller, emin, emax, ne)[source]#

Compute the total density of states with adaptive smearing.

Parameters:
  • data_controller (DataController) – Object providing data_arrays and data_attributes. Required arrays: E_k (shape (nkpnts, nawf, nspin)), deltakp (per-k adaptive smearing widths). Required attributes: bnd, nkpnts, nspin, smearing ('gauss' or 'm-p'), verbose.

  • emin (float) – Lower energy bound (eV).

  • emax (float) – Upper energy bound (eV).

  • ne (int) – Number of energy grid points.

Returns:

Adds or updates the following entries in data_controller.data_arrays:

  • dosdk : np.ndarray, shape (ne,) — the adaptive DOS (broadcast to all ranks).

Writes dosdk_{ispin}.dat via DataController.write_file_row_col().

Return type:

None

Notes

At each energy point the per-k adaptive smearing width from deltakp is passed to either smearing.gaussian() (Gaussian broadening) or smearing.metpax() (Methfessel-Paxton broadening). This approach follows Yates et al., Phys. Rev. B 75, 195121 (2007).