| fs.name |
String |
|
Name of the k-fieldserver carrying the dispersion fields |
| bands |
String |
|
Per-band field-name tuples on fs.name=. Each entry is one of: |
| {Ek Vk Fk Fpk |
|
— plain band: |
(k), transport-axis v(k), Fermi occupation f(k), and Fpk = -df/dE = f(1-f)/kT. All four are deck-painted scalar fields on the kgrid. The walker is unit-agnostic: numerical values for E, v, f, Fpk follow whatever convention the deck chose. |
| {Ek Vk Fk Fpk |
Idx Psi} |
— same plus k- |
ependent ψ for on-the-fly form-factor computation. Idx is the IntData index field on the kgrid (kaschro's <wavebase>_idx_b<j>); Psi is the spatial-FS ψ prefix where the wavefunction at k-node n is the field named '<Psi>_<idx_value>'. For multi-component spinor Hamiltonians (k.p, LK) Psi is a Tcl list of per-component prefixes — e.g. {LK1V LK2V LK3V LK4V LK5V LK6V} — and the walker sums Σ_s ⟨ψ_b,s|V|ψ_bp,s⟩ coherently before squaring. RealData vs ComplexData storage is auto-detected at solve start from the first non-pruned slot. IntData index = -1 marks the band as pruned (skip in scattering integrals). |
| spatial.fs |
String |
|
Name of the spatial FieldServer holding the per-(band, k) wavefunctions. Required iff any bands= entry uses the 4-tuple k-dependent form. Defaults to the active FieldServer. |
| grid.fs |
String |
|
Real-space FieldServer name. Must match the grid_fs each rate in rates= was registered against (defaults to "Main" if both sides agree on "Main"). The walker validates the match at solve start and errors on disagreement, so a rate painted against a cross-section grid can never be silently evaluated against a different grid. |
| kgrid.fs |
String |
|
k-space FieldServer name. Must match the kgrid_fs each rate in rates= was registered against. Defaults to fs.name=. |
| grad.cache |
Int |
1 |
Use closed-form linear-tet ∇E cached once per (band, simplex) before the assembly loop, instead of evaluating MagGrad(Ek) via alagator's FE shape functions at every root. ~3× faster, but uses the linear-within-simplex gradient model that is only self-consistent with find_root's cross_pts on tet meshes (hex elements decomposed into Kuhn tets give a slight mu shift vs the trilinear-hex gradient). Set 0 to fall back to the FE eval for cross-checking. |
| combos |
String |
|
Subset-enumeration mode. Output is a Tcl list of {rate_names_subset I_sigma I_carrier} triples (one per subset). Accepted values: |
| unset |
— sing |
e solve with all rat |
s. |
| all |
— ever |
non-empty subset of |
rates= (2^N − 1). |
| individual |
— tota |
+ each rate alone ( |
+ 1 subsets). |
| {{0} {0 1}… |
— ex |
licit Tcl list of ra |
e-index lists; each inner list specifies which rate indices are active for that subset. |
| force.symmetry |
Int |
0 |
After assembling A, replace it with (A + A^T)/2 before the solve. Detailed balance for elastic scattering implies r(α→β) = r(β→α), so A should be symmetric in the continuum limit; on a discrete kgrid the off-diagonal triplets land asymmetrically because find_root picks per-(α,β) simplices that differ between α's row and β's row. Symmetrizing forces detailed balance numerically. Set 1 to enable; default 0 (legacy assembly as-is). |
| triplet.floor |
Float |
1.000000e+00 |
Absolute floor for off-diagonal triplet emission (in 1/s). Channels with dS < floor are dropped before emplace_back, so the triplet vector never holds them — reducing setFromTriplets' peak memory. Diagonal A_diag accumulation is unaffected (out-scattering rate stays intact); only the in-scattering coefficient for that channel is lost, a physically mild approximation when dS is many decades below the bulk of A. Default 1.0 /s — well below typical phonon rates (~1e10-1e16) so the dropped channels are the long-tail Boltzmann-suppressed ones. Set 0 to disable. |
| solver |
String |
|
Sparse linear-system solver backend. Options: |
| lscg (d |
fault) â |
” Least-Squares Conj |
gate Gradient. Iterative LSQR-style method that minimises ‖Ax-b‖² without forming A^T A explicitly. Handles the ill-conditioned / near-rank-deficient LBTE matrices that production NMOS sweeps produce at high Vg, where the direct solvers (umfpack, sparselu) fail factorization. Typical ~5-7× faster per Vg than umfpack on the points where umfpack still works. |
| umfpack |
|
€” SuiteSparse UMFPA |
K direct LU, fast for moderate well-conditioned N, single-threaded. Fails on ill-conditioned matrices. |
| sparselu |
|
€” Eigen built-in di |
ect LU, no extra deps, single-threaded. |
| sparseqr |
|
€” Eigen rank-reveal |
ng sparse QR with COLAMD ordering. Solves rank-deficient systems via the minimum-norm pseudo-inverse; reports numerical rank. Heavier memory than LU but stable when A is near-singular. |
| bicgstab |
|
€” Eigen iterative B |
CGSTAB with diagonal preconditioner. Doesn't materialize L+U so memory drops 10-100× on 3D problems; slower per solve. Eigen threads the inner SpMV via OpenMP when the build has -fopenmp. |
| bicgstab_ilut |
|
€” BiCGSTAB with Inc |
mpleteLUT preconditioner. Stronger preconditioning, fewer iterations, more setup memory. |
| cg |
|
€” Conjugate Gradien |
with diagonal preconditioner. Requires A symmetric positive-definite; pair with force.symmetry=1. Cheapest iterative path for SPD systems. |
| solver.tol |
Float |
1.000000e-04 |
Convergence tolerance for iterative solvers (bicgstab, bicgstab_ilut, cg). Default 1e-4 — sensible for transport mu calculations. Eigen's library default is machine epsilon (~2e-16), which gives 100s-1000s of needless iterations. Ignored by direct solvers (umfpack, sparselu). |
| solver.max_iter |
Int |
0 |
Maximum iteration count for iterative solvers. Default 0 = use Eigen's default of 2·N (matrix size). Lower for faster fail-out when the preconditioner is too weak; raise for hard problems. |
| rates |
String |
|
Tcl list of registered rate names to apply |
| diag.rate |
String |
|
Drude-style relaxation rate 1/τ (1/s): added once to every diagonal |
| before the solv |
. Used t |
express `constant`- |
ype mechanisms that |
| have no k' stru |
ture. De |
aults to 0. |
|
| sparsity.tol |
String |
|
Relative drop threshold for off-diagonal triplets, as a fraction of |
| mean(A_diag). E |
tries wi |
h |dS| below this th |
eshold are dropped |
| before the spar |
e solve |
€” fewer non-zeros â |
’ faster UmfPackLU. Keeps |
| the diagonal in |
act, so |
he dropped scatterin |
channel is lost as |
| an in-scatter t |
rm only |
its out-scatter cont |
ibution to A_diag is |
| preserved). Def |
ults to |
e-6. Set 0 to disabl |
. |
| relevant.field |
String |
|
Optional RealData field on fs.name= marking k-points that can |
| participate in |
scatter |
ng event (non-zero = |
live). When set, the |
| walker drops si |
plices w |
ose vertices are all |
zero — skipping |
| high-|k| shells |
that lie |
far above every occu |
ied state. Speeds |
| up the assembly |
without |
hanging the result t |
within tolerance. |