Loading...
Searching...
No Matches
band_classification_thresholds.hpp
Go to the documentation of this file.
1#pragma once
2
3/**
4 * BandClassificationThresholds — the projectability thresholds and the frozen energy
5 * window BandClassifier sorts bands by; the rule itself is documented there.
6 */
7
10
11namespace q3 {
12
13struct [[nodiscard]] BandClassificationThresholds {
14 /// p >= this freezes a band regardless of its energy.
15 Real projectability_maximum = 0.95;
16 /// p < this discards a band, whatever its energy: the singular-gauge rule.
17 Real projectability_minimum = 0.01;
18 /**
19 * Energy above the Fermi level, in RYDBERG, below which a band freezes
20 * regardless of its projectability (short of the rule above). Read only
21 * when `automatic_frozen_window` is false.
22 */
23 Real frozen_window_above_fermi_rydberg = 0.0;
24 /// Apply the published window, AUTOMATIC_WINDOW_RYDBERG, instead of the value above.
25 bool automatic_frozen_window = false;
26
27 /// The published window for atomic projectors, 2 eV above the Fermi level, in rydberg.
28 static constexpr Real AUTOMATIC_WINDOW_RYDBERG = 2.0 / constants::RY_TO_EV;
29 /**
30 * A band counts as crossing the Fermi level when it reaches this far past
31 * it on both sides, in rydberg. The margin keeps an insulator whose Fermi
32 * level IS its highest occupied eigenvalue from being read as a metal by
33 * rounding.
34 */
35 static constexpr Real CROSSING_MARGIN_RYDBERG = 1.0e-4;
36};
37
38} // namespace q3
double Real