PAOFLOW.pyskeaf.dos#

Tetrahedron-method density of states (DOS) on the SKEAF supercell.

Reproduces slicedos (skeaf_v1p3p0_r149.F90 lines 3133–3291) and the top-level DOS driver loop (lines 1043–1095).

Algorithm summary#

  1. Sample the band energies on a (4·numint)³ supercell grid via 4-point Lagrange tricubic interpolation (see PAOFLOW.pyskeaf.interp).

  2. For each of the (4·numint - 1)³ microcells (8 corner points), split into 6 tetrahedra using the Fortran’s exact corner-index pattern.

  3. For each tetrahedron whose energy span brackets E_F, accumulate the Blöchl-style DOS contribution:

    e1 ≤ EF ≤ e2:  3V (EF - e1)² / [(e2 - e1)(e3 - e1)(e4 - e1)]
    e3 ≤ EF ≤ e4:  3V (e4 - EF)² / [(e4 - e1)(e4 - e2)(e4 - e3)]
    else        :  (3V / [(e3 - e1)(e4 - e1)]) · (
                       e2 - e1 + 2·EF - 2·e2
                       - (e3 - e1 + e4 - e2)(EF - e2)² / [(e3 - e2)(e4 - e2)]
                   )
    

    where V is the per-tetrahedron volume, V = unit_cell_volume / numtetrahedra and numtetrahedra = 6·(4·numint - 1)³.

  4. Also count “occupied” microcells (corner-(1,1,1) below E_F) and “empty” microcells (above) to estimate the band electron / hole volume.

Classes#

Functions#

compute_dos(bxsf, numint[, fermi_energy, progress])

Tetrahedron DOS at the Fermi energy on a 4·numint supercell.

Module Contents#

class PAOFLOW.pyskeaf.dos.DosResult[source]#

Output of compute_dos().

fermi_energy: float[source]#
unit_cell_volume: float[source]#
one_kpoint_volume: float[source]#
num_occupied_states: int[source]#
num_empty_states: int[source]#
band_electron_volume: float[source]#
band_hole_volume: float[source]#
dos_at_ef: float[source]#
band_min: float[source]#
band_max: float[source]#
fermi_fraction: float[source]#
PAOFLOW.pyskeaf.dos.compute_dos(bxsf, numint, fermi_energy=None, *, progress=False)[source]#

Tetrahedron DOS at the Fermi energy on a 4·numint supercell.

Parameters:
  • bxsf (BXSFData) – Loaded BXSF data (recip_ang is used for volumes).

  • numint (int) – Interpolated points per single-side (matches Fortran numint). The supercell has 4 * numint points along each axis.

  • fermi_energy (float, optional) – Override Fermi energy in Rydbergs. Defaults to the value stored in bxsf.fermi_energy.

  • progress (bool) – If True, print a one-line progress indicator (slice index / total).

Return type:

DosResult