kpenvelope 0.6.0: Bir-Pikus strain, non-parabolic k-grid filling, spin splitting, finite-barrier self-consistency
LatestCompletes the roadmap: every previously stated "not yet" item is implemented and anchored to an exact statement, and what remains out is documented as deliberate scope with reasons, not silently skipped.
Bir-Pikus strain (strain_blocks, strain= everywhere)
- The six-band Bir-Pikus strain Hamiltonian in Chuang-Chang form: λ = D1εzz + D2(εxx+εyy), θ = D3εzz + D4(εxx+εyy), K = D5(εxx−εyy+2iεxy), Ht = D6(εxz+iεyz), entering exactly the positions of the kinetic template.
- Cross-validated structurally, not by copied numbers: with D_i = c·A_i and ε = kkᵀ the strain matrix must reproduce H0 + H1·kz + H2·kz² entry for entry — asserted to 1e-14 at random k.
- Closed-form anchors: diagonal strain gives eigenvalues λ+θ (×4) and λ (×2) exactly; pure shear εxz gives 0, ±√2|D6εxz| exactly; a diagonally strained decoupled well shifts rigidly by the exact edge shift to 1e-12.
- No deformation-potential values are shipped: parameter sets without cited D1..D6 are refused with a pointer to Vurgaftman & Meyer, J. Appl. Phys. 94, 3675 (2003), rather than defaulted.
Non-parabolic subband filling (fill_subbands_kgrid)
- T = 0 filling from the full in-plane dispersion on a polar k-grid, with bisection for E_F and exact charge neutrality; refuses a k-grid the Fermi disc reaches instead of silently dropping states.
- Anchor: agrees with the closed-form parabolic filler on an exactly parabolic model (4e-3 at grid resolution, neutrality to 1e-12).
Finite-barrier self-consistency (solve_self_consistent_hetero)
- The Poisson + k·p loop on the Ben Daniel-Duke heterostructure assembly — the hard-wall restriction lifted.
- Anchor: on a uniform stack with zero offset it reproduces the hard-wall loop's energies and occupations exactly (bitwise — the assemblies are identical), asserted with == 0.0.
Spin splitting and transport groundwork (spin_splitting, splitting_vs_k, group_velocity, dos_from_dispersion)
- Kramers pairs split by zero at k = 0 under any potential and at every k in symmetric wells (< 1e-9), and split under an asymmetric potential at finite k (Rashba-type) — both asserted, not stated.
- Group velocity by second-order differences (exactly 2cAk on the parabolic set, 1e-10) and the exact 2D DOS relation ρ = k/(2π)|dk/dE| for monotone subbands ((1/|A|)/(4πc) closed form to 1%); non-monotone dispersions are refused, not interpolated.
Deliberate scope (designed out, with reasons — see README)
- No scattering-mechanism lifetimes: every published lifetime model needs material parameters this package will not invent; the DOS/velocity groundwork is provided so you can attach your own cited model.
- Single-medium Poisson; k-linear bulk-inversion-asymmetry terms not included (interface Rashba dominates in the intended geometries; stated, with the literature pointer).
42 tests, Python 3.9/3.11/3.12/3.13, no warnings. Install: pip install kpenvelope.