pub fn build_shell_channel_tables(
channels: &ShellResolvedChannels,
material: &Material,
options: &InelasticTableOptions,
binding_provenance: &str,
) -> Result<ShellResolvedTables, InelasticTableError>Expand description
Build the energy-loss tables of every channel of channels on the grid of
options: the valence table, and for inner shell i the table of
ShellResolvedChannels::shell_model (that shell’s own optical ELF with
the valence model’s settings), wrapped with the shell’s identity, binding
energy and binding_provenance (the origin of the binding energies, for
example crate::electron::data::SubshellBindingTable::provenance).
Each table is built by build_inelastic_table, one after the other in
channel order, so the result is bit-identical at any thread count. Its
rate is the channel’s own λ⁻¹_j(E) and its rows the inverse CDF of that
channel’s DIIMFP: the channel-first construction, in which a
transport picks a channel with probability λ⁻¹_j / Σ λ⁻¹ and then draws
the loss from that channel’s table (not the conditional channel choice of
ShellResolvedChannels::sample_channel, which belongs with a loss drawn
from the total DIIMFP; the two are not mixed).
Supported model. Single-pole Penn per channel only, without the
exchange correction (rejected, as by build_inelastic_table); so the
binding energy does not enter a shell’s DIIMFP, which is zero below the
first energy of the shell’s ELF (at or above B by construction of
ShellResolvedChannels::new). Each shell row is floored at B, which
only removes the rounding of exp(ln W) at the edge. No full Penn or
Mermin valence model is wired to shell channels, and the valence ELF must
not already contain the shells (no partition rule is applied, see
super::inner_shell).
Energy axis. As for build_inelastic_table, every table (valence
and shells) is on the axis of options.axis: kinetic energies above the
model’s Fermi energy (zero by default) with
EnergyAxis::ModelFermiLevel, above the band bottom with
EnergyAxis::BandBottom, each row then the model’s at T = E - E_F
with E_F the Fermi energy of the model (the shell models share the
valence model’s settings, so its Fermi energy) (module docs, “Energy
axis”). See crate::electron::transport, “Energy reference of the
inelastic table”, for how the transport reads them.