Loading...
Searching...
No Matches
q3::InterpolatedDensityOfStatesCalculator Class Reference

#include <init.hpp>

Public Member Functions

 InterpolatedDensityOfStatesCalculator (const QuantumStateInterpolator &interpolator)
 
InterpolatedDensityOfStates compute (int mesh_x, int mesh_y, int mesh_z, Real broadening_rydberg, int energy_step_count=1000, Real energy_margin_rydberg=0.05) const
 

Detailed Description

Definition at line 40 of file init.hpp.

Constructor & Destructor Documentation

◆ InterpolatedDensityOfStatesCalculator()

q3::InterpolatedDensityOfStatesCalculator::InterpolatedDensityOfStatesCalculator ( const QuantumStateInterpolator &  interpolator)
inlineexplicit

Definition at line 42 of file init.hpp.

Member Function Documentation

◆ compute()

InterpolatedDensityOfStates q3::InterpolatedDensityOfStatesCalculator::compute ( int  mesh_x,
int  mesh_y,
int  mesh_z,
Real  broadening_rydberg,
int  energy_step_count = 1000,
Real  energy_margin_rydberg = 0.05 
) const
inline

DOS on a uniform Gamma-centred mesh_x x mesh_y x mesh_z mesh, broadened by broadening_rydberg onto energy_step_count points.

The energy window spans the eigenvalue range plus a margin on each side. The margin is at least energy_margin_rydberg and at least the Gaussian's own cutoff of 8 sigma: a fixed margin smaller than the broadening clips the tails of the band-edge states, and the integral below stops returning the band count – which it must, since the normalisation is one state per band per k-point divided by the k-point count. Nothing here doubles for spin; a caller wanting states per cell for an unpolarised system multiplies by two, the convention q3.workflows.dos follows.

Unit-area Gaussian per state. Contributions beyond the 8 sigma cutoff are below 1e-14 of the peak and skipped: with 10^5 k-points times a few bands times 10^3 energy points, evaluating every pair would dominate the runtime for no numerical gain.

Definition at line 59 of file init.hpp.

References q3::InterpolatedDensityOfStates::density_of_states, q3::QuantumStateInterpolator::eigenvalues_at(), q3::InterpolatedDensityOfStates::energies_rydberg, and q3::constants::two_pi.


The documentation for this class was generated from the following file: