2Bound
Interface dispatcher for dimers.
FLOOXS » TclLib » Device
145 documented proc(s) in TclLib/Device/.
2Bound · 2BoundSide · 2Defect · 311Eqn · 3DTensorListToFlooxsTensor · 3DTensorListToFlooxsTensorAdd · 3DTensorTo2D · __alpha · __alphaInv · __approxFirstToSecondOrderRotation · __BuildHFromGeneric · __CompareBands · __Det2x2 · __DetNxN · __DirectStatistics · __DOS1D · __DOS2D · __EllipsoidalMassTensor · __EnsureParams · __FirstKandaHallTensor · __IndirectStatistics · __interpolate_linear_vec · __Inv2x2 · __Inv3x3 · __InvNxN · __Make2x2 · __MapExpr · __MillerToRotation · __mult_sweep · __MultAx · __MultNxN · __ParseMillerDigits · __postdd · __RotateTensor · __RotateTensorDiag · __RotateVector3 · __rotTen_F_Mat · __SolutionExpandRecursive · __Stats1D · __Stats2D · __Transpose · __ubnew_get · __xyzalpha · AddSolution · AddStressVector6 · AlGaN::BandGap · AlGaN::PolarizationCharge · BandGap · BandGapGamma · BandGapL · BandGapX · BandOverlapLoop · BuildH · BuildH110 · BuildHRot · C311Init · ClusterEqn · ComputeModes · ComputeModesFull · ConductionTensorHook · CplxMult · Cubic::CubicSpline · Cubic::SolveTridiag · DefectBound · DefectBoundSide · DefectBulk · DefectInit · DGEquation · DimMap · DirectTunnelEnergy · dopant_has · dopant_has2 · DopantBulk · DopantConstant · DopantDefectPair · DopantDefectReact · DopantFermi · DopantPair · DopantReact · ElecMobility · EllipsoidalMassTensor · Eqns · EqnsSimple · EqnsVerySimple · GaN::EqnsSimple · GaN::ThermalConductivity · Germanium::ElecMobility · Get3DHoleDPTensor · Get3DHoleDPTensor · GetAnisoCarrierTensor · GetConductivityTensor · GetdU · getHmobs · getHmobs0 · GetMobilityTensor · Init · InitDopant · InterpBowing · InterpLinear · IntNumIntegral · KandaEqns · KKDiscretize · Klaassen · KlaassenNAs · LatticeStrain · logN · LoopBulkDall · LoopBulkNall · LoopEng · Ltun · MapTerm · Masetti · Masetti · Nc · NcGamma · NcL · NcX · PoissonSchrodinger · Schenk · Schrodinger100Solve · SchrodingerDirectCurrent · SchrodingerDirectCurrentKPMeff · SchrodingerIndirectUnscaledTransmission · SchrodingerSolveEllipsoidal · SchrodingerSolveLVal · SchrodingerSolveXVal · Segregation · SetSiliconStrainParams · SetSiliconStrainParams100 · SetStrainParamsList · SGEqns · SiGe::__declare · SiGe::ElecMobility · SmicEqn · Solve · SoRBulk · SortLowHigh · SRH · Transpose · Trapezoidal · UniformStress · VacNumIntegral · ValenceStrainHook · VanDeWalle · VoxelVolumeTest
Interface dispatcher for dimers.
Per-side interface equation for dimers (I2 / V2 at Oxide/Silicon).
Di-defect (I2 / V2) self-equation + cross-coupling into Base, RecombDefect, BiMolecular partners.
311Eqn manages D311 AND C311 self equations, plus cross-coupling into Int and I2. Registered on C311 (per master Params/Silicon/C311); $Sol = C311.
Input: 3x3 Tensor/ Matrix list (3 dimensional list where the first two dimensions are the 2D matrix and the 3rd dimension are other matricies) All matricies are multiplied together by component Returns: Flooxs tensor alagator expression
Input: 3x3 Tensor/ Matrix list (3 dimensional list where the first two dimensions are the 2D matrix and the 3rd dimension are other matricies) All matricies are added together by component Returns: Flooxs tensor alagator expression
Convert a 3D tensor to 2D by chopping off the z component
Build rotation matrix from XYZ Euler angles (degrees)
Inverse of XYZ rotation (negate angles, reverse order)
Build 6x6 Bond matrix from a 3x3 rotation matrix. Converts first-order (vector) rotation to second-order (Voigt tensor) rotation.
Build discretized Hamiltonian equations from the generic symbolic matrix. R: rotation matrix (empty string for unrotated).
Deduplicate equivalent bands
returns the determinate of a 2x2 matrix
puts [__Inv2x2 {{1 1} {1 -1}}]
laplace formula for determinate
returns the determinate of an NxN matrix
A is a matrix and N is the length of the sides
Statistics used in direct band to band tunneling quantum calculations Takes an energy, quasi fermis, and temperature
Returns the 1D Density of states value for a given temperature and effective mass
Returns the 2D Density of states value for a given temperature and effective mass
Legacy alias — older decks (and the auto-loaded tclIndex) reference the underscored name.
Initialize from Silicon if SetParams hasn't been called
pi_mat is the calculated pi coefficeint matrix X_Vect is the stress vector(xx,yy,zz,yz,xz,xy), and uB is mobility times magnetic field vector (x,y,z)
Statistics used in indirect band to band tunneling quantum calculations Takes an energy, quasi fermis, temperature, and phonon energy
Vectorized linear interpolation for a sorted list of query points. Single pass O(n+m) where n = len(x), m = len(xv). Values outside the data range are clamped to the nearest endpoint.
returns the inverse of a 2x2 matrix
puts [MultNxN {{1 2} {3 4}} {{1 2} {4 3}} 2]
Returns the inverse of a 3x3 matrix
Generic NxN inverse via Gauss-Jordan elimination with partial pivoting.
Takes 4 scalars and returns a 2x2 matrix [a b] [c d]
Discretize a full expression (sum of terms) using MapTerm.
Build a 3x3 rotation matrix from Miller indices. Syntax: (hkl)<uvw> — default: () → column 2 (z), <> → column 0 (x) (axis:hkl)<axis:uvw> — explicit axis assignment Examples: (001)<100> — (001) surface, [100] channel. Normal→z, channel→x (x:001)<y:100> — (001) surface normal along x, [100] along y (x:110)<z:1-10> — (110) normal along x (1D quantum), [-110] along z The third direction is always the cross product of the other two, placed in whichever column remains. The rotation matrix rows are crystal [100],[010],[001] directions. The columns are device x,y,z directions.
Multiplicative (geometric) sweep — same interface as __linear_sweep but steps by multiplication instead of addition. step is a factor (e.g. 1.2).
Matrix A times vector x multiplication Returns a vector
multiplies two NxN matricies
Parse a signed Miller index string (e.g., "001", "-110", "1-10") into a list of 3 integers.
Silicon::__postdd — post-DD overrides invoked by device_init (and
inline by Silicon::Eqns) after DriftDiffusionPackage emits its
per-valley / per-band populations and the default Ava.
1. Per-band Nv pinned to (Silicon::Nv * strain-dependent RelNv).
Per-valley Nc is handled in-dispatcher via NcDistribute=even
(declared at Silicon's namespace level).
2. Multi-valley effective bandgap (EgEff) and Schenk B2B. These
reference DD-emitted DeltaE100/010/001 and DeltaELH/HH/SO, so
must be stamped post-DD. G overrides to add Schenk on top of
the dispatcher-emitted Ava.
Takes a 3x3 Tensor list and crystal rotation vector returns a rotated tensor
Same procedure but only outputs Diag
Takes a 3 length list and crystal rotation vector
Rotate a 4th order tensor (stored as 6x6 Voigt matrix) by angle psi around Z. Full contraction: T'_ijkl = a_im a_jn a_ko a_lp T_mnop
Recursively expand solution variable references in an expression string. Replaces solution names with their stored expressions until no more remain. mater: material name for material-specific solution lookup name: the solution variable to expand
Returns the 1D Density of states with integral function for a given temperature, effective mass and potential
Returns the 2D Density of states with integral function for a given temperature, effective mass and potential
Returns the transpose of matrix A
__ubnew_get { carrier coeff } — short helper to keep proc bodies tidy.
Build 3x3 rotation matrix: Rz(Z) * Ry(Y) * Rx(X)
Input: {X Y Z} angles in degrees
Returns 6x6 Bond matrix for Voigt tensor rotation
to do pod we need a set of solutions this procedure adds a solution as a function of bias
Add vectors
Composition-dependent BandGap / Nc / Nv shims. All call AlGaN::__resync so the per-x state is current before MatBandGap / MatNcTotal / MatNvTotal walks the namespace.
Polarization sheet charge at a III-N heterointerface (e.g. AlGaN/GaN 2DEG). Unchanged from the pre-port implementation.
Effective (minimum) bandgap — for ni calculations At x<~0.85 the X-valley is lowest; above that, L takes over. We return a smooth minimum via Alagator ternary.
Gamma-valley (direct gap) — matters for optical transitions and direct tunneling
L-valley — dominant conduction band for Ge-rich alloys
X-valley (Delta minimum) — dominant conduction band for Si-rich alloys
Loop over energies from the bottom of the conduction band to the top of the valance band. Only produces values if the bands overlap fxn is a function that is called at every point in the loop with that energy dU is the energy step size mat is the material used
Build the LK 6-band k.p Hamiltonian, returning a list of 6 expression strings for aschro / kaschro. k_units: "m" (default) — broadcast k-parameters expected in 1/m. "cm" — broadcast k-parameters in 1/cm (matches the BEATS-3 KGrid convention; lifts free-k factors by ×1e2 per free k inside KKDiscretize).
Legacy (110) rotation — calls generic BuildHRot Rotates yz plane: ky→(ky-kz)/√2, kz→(ky+kz)/√2, kx unchanged Surface normal (0-11) along z, channel [100] along x
Build rotated LK Hamiltonian for arbitrary crystal orientation. miller: Miller index string, e.g., (001)<100>, (001)<1-10>, (x:001)<z:100> The Hamiltonian is built in the crystal frame then rotated to the device frame. k_units: see BuildH for unit-convention details.
Clear C311 and D311 accumulator slots — InitProc-style entry point. Same caveat as DefectInit: rarely fires on master because Solver::InitProcedures runs before CreateSolutions, but kept as a safety net.
ClusterEqn manages Smic's bulk equation AND back-propagates to 6 partner species (Int, I2, Vac, V2, D311, C311). Pre-resolves DiffLimit via subst (Alagator does not evaluate `[Tcl]` substitutions in eqn= values).
only take a subset of modes with this proc for ramping purposes
Next we need to compute the POD modes, fit the data and build the alagator equations for each solution pde
Silicon::ConductionTensorHook — lifts the Hall/piezo current tensor block from the pre-refactor Silicon::EqnsLegacy (lines 250-331). Combines per-valley ± pairs (DD emits ElecX100/ElecXm100 from the 6 declared X-valleys) into the legacy-named Elec100/Elec010/Elec001 combined populations that Silicon::Get3DElecDPTensor / Silicon::Get3DElecDPTensorPiezoHall expect. Emits Jnx, Jny, Jnz, and the six Lorentz cross terms; emits the Qfn PDE in either the strain-tensor form (default) or the BgDOSOnly bypass form. Honors `$::__Hall` and `$::BgDOSOnly` exactly as the legacy code did.
Multiply complex numbers that are stored as two separate values
#+########################################################################## CubicSpline - returns the x,y coordinates of the cubic spline using xy control points. xy => {{x0 y0} {x1 y1} .... {xn yn}} XY points MUST BE SORTED by increasing x
#+##########################################################################
SolveTriDiag -- solves the linear system for tridiagoal NxN matrix A
using Gaussian elimination (no pivoting). Since A is sparse, we pass
in three diagonals:
sub(i) => a(i,i-1) diag(i) => a(i,i) sup(i) => a(i,i+1)
Result is returned in b[1:n]
Interface bulk-side dispatcher. Walks both sides and calls DefectBoundSide for each side where DiffModel is "Numeric" (matched via matparam_sub). If the side has no DiffModel set, that side is skipped (which is the typical case — only the bulk side with the diffusing species gets a boundary condition).
Per-side interface equation. Writes to the C++ EqnComplex via a separate code path than the bulk Equation accumulator — uses the existing `solution Mat /Other name=Sol side=Side value="…"` shape directly rather than going through pde_*. The trapping term that touches Vac's BULK equation does go through pde_append, because that IS a cross-coupling into the bulk accumulator.
Build the bulk rate equation for $Sol (Int or Vac) in $Mat (Silicon): ddt(Sol) - D0 · grad(ScaleSol) + IVRecomb plus the scratch terms EqSol, ScaleSol, IVRecomb, PressureSol used by it.
Clear the (Mat, Sol) Equation accumulator slot. Used as the "Init" hook — fires once at solver construction on master (and never again, due to the Solver framework calling InitProcedures before CreateSolutions); the multi-pass idempotency in pde_set_self handles the re-construction case so this proc is effectively a no-op safety net.
# Full Density Gradient Correction:
Legacy DimMap — compatibility wrapper for ellipsoidal.tcl
Computes the direct tunneling energy using the effective mass approximation Takes an conduction band sub band energy Eci Conduction band effective mass Takes an valance band sub band energy Evi Valance band effective mass
Helper: check if a per-(Mat, Sol, Key) parameter is set (returns "" if not).
Same but for the nested Mat/Sol/Def/Key form. Delegates to matparam_sub3 so the inherit chain is honored: a child material picks up its parent's per-(dopant, defect) params without redeclaring them.
DopantBulk: top-level dispatcher. Reads DiffModel / ActiveModel / Charge switches and routes to the right sub-builder; finally folds the active species into the global Charge term.
Simple constant-diffusivity model: ddt(Sol) - D * grad(SolActive).
Per-(dopant, defect) flux contribution for the Pair model. Builds the DiffDef diffusivity and the FluxSolDef term; subtracts the flux from the dopant's residual, adds a dopant-defect binding term to the defect's residual.
Per-(dopant, defect) reaction for the React model.
Fermi-level dependent diffusivity. Reads D0, optional Dn/Dnn/Dp/Dpp coefficients for the Fermi-expansion in Noni and Poni. For charged species the diffusivity gets a 1/(Poni) or 1/(Noni) factor and the grad argument picks up a (Poni) or (Noni) factor — same shape as master.
Pair model — substitutional via 1/(1 + Σ Bind*Defect), then per-(Sol,Def) flux contribution.
React model — substitutional is dopant total minus sum of (dopant, defect) species; per-(Sol, Def) reactions wire flux + binding.
Silicon::ElecMobility / HoleMobility — composite Klaassen NP/PB + Canali velocity saturation. Called by DD step 3 (per-material proc override path). Equivalent to the inline __SiliconMobility block in the pre-refactor Silicon::EqnsLegacy.
Build the 3x3 inverse mass tensor for an ellipsoidal valley
with longitudinal mass ml along direction {dx dy dz} and
transverse mass mt perpendicular.
Silicon::Eqns — main entry point. Stamps the SiGe-style x-independent setup (strain k.p constants, strain/magnetic field defaults, mobility composition via the per-material proc DD calls in step 3, recombination defaults via pre-stamp before DD step 11), then routes through DriftDiffusionPackage. ValenceStrainHook + ConductionTensorHook take over for the Si-specific Hall/piezo and strain k.p layering.
Silicon::EqnsSimple — single-valley DD with explicit Hall mobility tensor inside the Qfn PDE. Used by the PiezoHall factor.tcl test as the "simple" reference against Silicon::Eqns's full multi-valley path.
Silicon::EqnsVerySimple — minimal DD with zero R/G and no Hall. Used by the interface-traps regression tests as the reference solver setup stripped of generation / recombination so trap occupancy dominates.
Single-Γ-valley convenience deck. Drops the satellite by re-declaring ConductionValleys to just Gamma before calling the dispatcher. Useful for low-field DC analysis where NDR isn't relevant.
Temperature-dependent thermal properties (used by self-heating extensions, not by the DD dispatcher itself).
Mobility shims: the existing Germanium::Masetti returns {Emob Hmob}
as a list; the dispatcher expects scalar ElecMobility / HoleMobility
procs.
set kp [GetKP $StressVector6 $StressRotation $CrystalRotation ]
set kp [GetKP $StressVector6 $StressRotation $CrystalRotation ]
takes a carrier vector returns a tensor 3x3 list
takes a mobility vector, carrier type returns a tensor 3x3 list
Get dU from the number of integration points that you want
This really doesn't work...
This really doesn't work...
takes a mobility vector returns a tensor 3x3 list
lastly we can make guesses using the POD equations for each solution
Initialize dopant-defect product solutions. For React model, these are real solve variables (XInt, XVac for dopant X). For other models they are const placeholders.
Quadratic interpolation with bowing parameter for alloy properties. Returns an Alagator expression: (1-x)*valA + x*valB - bow*x*(1-x) x can be a numeric constant or an Alagator field name.
Linear interpolation returning an Alagator expression. x can be a numeric constant or an Alagator field name.
Trapezoidal integration over loop sizes for interstitial-flavored loops.
Silicon::KandaEqns — drift-diffusion with Kanda piezo-conductivity tensor transport. Distinct physics from Silicon::Eqns (which uses the multi-valley DP tensor via ConductionTensorHook): KandaEqns drives the first-order Kanda E/H tensors directly with the user-supplied stress. Used by the piezo-resistance test suite to validate against the Kanda pi-coefficients.
Discretize ka*kb*s directly by index. a,b: 0=x, 1=y, 2=z. dim: number of discretized spatial dimensions. hasI: 1 if the original term had an i* prefix on the k-product. k_units: "m" (default, legacy) or "cm". "m": free (broadcast) k-parameters are expected in 1/m, matching the eV·m² C constants in Peqn/Qeqn/Reqn/Seqn directly. Confined directions get the existing 1e4 / 1e2 factors that lift the cm-meshed Grad/Vel back into m-units. "cm": broadcast k-parameters are in 1/cm (matches KGrid). Each free k contributes one extra ×1e2 so the C·k product still lands in eV.
Silicon::Klaassen dopant=As|P|B carrier=elec|hole T=... [Accept=] [Donor=] [Elec=] [Hole=] [expand] Returns the Klaassen mobility alagator expression for the named (dopant, carrier) combination. Klaassen 1992 model (the "Philips Unified" mobility). Carrier-dependent swaps: - lattice θ: theta_e (elec) / theta_h (hole) - carrier mass: me (elec) / mh (hole) - PBH scattering: 1/Elec (elec) / 1/Hole (hole) - Nsc (total scattering): + Hole (elec) / + Elec (hole) - Z compensation factor: cA (elec) / cD (hole) - Nsceff sceening structure: elec: Donor + G·Accept + Hole/F (majority=Donor, minority=Accept) hole: Accept + G·Donor + Elec/F (majority=Accept, minority=Donor) - G mass: me (elec) / mh (hole) - F mass ratio: me/mh (elec) / mh/me (hole)
Backward-compatible shims — one-liners delegating to the generic.
linear interpolation of strain using the starting lattice constant and linearly interpolaring the change from the mole fraction
Log-normal size distribution kernel. Alagator doesn't parse `^` so the squaring is expanded to `(diff)*(diff)`.
Loop average size Dall. Alagator-`^` is expanded to `*`.
Loop density Nall — accumulates the local self equation incrementally (because of nested foreach control flow) and flushes via pde_set_self at the end. Cross-coupling is appended inline through pde_append.
Loop elastic energy factor at radius $AvgRad. Read the elastic moduli (mu, b, ohm, kerg, nu) preferentially from the per-defect namespace (::Mat::Sol::Key) but fall back to material-level (::Mat::Key) — this mirrors master's pdb chain walk that auto-falls-back when the per-(mat, sol) slot is missing. In practice LoopEng is called with $Sol = Nall (the loop density species) inside IntNumIntegral; Nall doesn't carry its own elastic moduli, so the fall-back to material-level is load-bearing.
Compute the tunneling length in 1D all parameters are optional units are nm or um Econd_o is an offset value for the conduction band Eval is the name of the valance band Econd is the name of the conduction band
Discretize a single Hamiltonian term, optionally applying rotation R. Parses coeff*[i*]ki*kj*s patterns; strain/constant terms pass through. Returns a list of discretized terms (one for unrotated, up to 9 for rotated).
Masetti Mobility Model from Sentaurus, P at end of parameter is Phospherous, B at end of parameter is Boron See paper titled Electrical TCAD Simulations of a Germanium pMOSFET Technology
Silicon::Masetti — back-compat shim. Existing decks expect a
`{Emob_expr Hmob_expr}` two-element list; build it by calling the
generic MasettiMobility dispatcher for each carrier. T is forwarded
to the dispatcher so legacy callers passing a numeric temperature
(e.g. T=300) get the same fully-substituted Alagator string as before.
Aggregate electron DOS for ohmic contact calculations. Returns X-valley Nc, which is the dominant valley in Si-rich compositions and provides the correct contact boundary condition.
Gamma-valley electron DOS (1-fold degeneracy) Si: mGamma ≈ 0.036 (very light, high in the band structure) Ge: mGamma ≈ 0.041
L-valley electron DOS (4-fold degeneracy) Ge: ml=1.59, mt=0.0815 Si: L-valley masses ml=1.42, mt=0.13 Computed inline (same method as Germanium::Nc) to match endpoint exactly.
X-valley electron DOS (6-fold degeneracy) Si: ml=0.9161, mt=0.1905 → md = 6^(2/3)*(ml*mt^2)^(1/3) ≈ 1.084 Ge: X-valley masses ml=1.35, mt=0.29 → md = 6^(2/3)*(ml*mt^2)^(1/3) ≈ 1.42
Silicon Electron and Hole Poisson-Schrodinger loop with predictor corrector T is temperature, er is the oxide relative permittivity
The driving force, SRH, band gap, and thermal voltage are arguments This expression modifies an SRH like expression
Solve the sub bands along the [100] direction
Computes direct tunnel current using the Bigelow method Ec is the gamma electron sub band energies EVc is the gamma electron eigen vector base names mc is the gamma electron effective mass Evlh is the light hole sub band energies EVvlh is the light hole eigen vector base names mvlh is the light hole effective mass Evhh is the heavy hole sub band energies EVvhh is the heavy hole eigen vector base names mvhh is the heavy hole effective mass Eg is the direct band gap T is the temperature
Computes direct tunnel current using the Bigelow method assuming kp Ec is the gamma electron sub band energies EVc is the gamma electron eigen vector base names mc is the gamma electron effective mass Ev is the hole sub band energies EV is the hole eigen vector base names mv is the hole effective mass Eg is the direct band gap T is the temperature
Computes indirect tunneling transmission for a given conduction and valance band Ev is list of eigenvalues for the valance band EVv is the valance band eigenvector base name Ec is list of eigenvalues for the conduction band EVc is the conduction band eigenvector base name hw is the phonon energy Mat is the material name T is the temperature value or field N is the Number of integration points Returns units of inverse cm
Solve the Schrodinger equation for a set of ellipsoidal valleys.
Arguments:
Econd - band edge potential name (Alagator field)
ml - longitudinal effective mass (m0 units)
mt - transverse effective mass (m0 units)
directions - list of valley direction vectors, e.g., {{1 0 0} {0 1 0} {0 0 1}}
dotransport - compute transport mass if true
nev - number of eigenvalues
prefix - solution variable prefix (e.g., "EVX" or "EVL")
alpha - 3x3 crystal-to-device rotation matrix
L-valley solver: 4 valleys along <111> directions
X-valley solver: 6 valleys along <100> directions
Interface segregation — uses the slash form for side-qualified Sol references (see src/BasePDE/lexical.cc for the lexer patch).
SetSiliconStrainParams — empty back-compat shim. The k.p + piezoresistance + PiezoHall constants it used to stamp are now top-level data declarations at the bottom of this file, so the data is in place by the time any consumer (Silicon::Eqns, SGEqns, the orientation variants below, test decks) reads it. Decks that call this proc explicitly still work — the call is a no-op since the data is already stamped, and re-stamping would just be redundant.
Orientation-specific variants — call SetSiliconStrainParams then override the k.p values for (100) / (110) wafer surfaces.
SetStrainParamsList — explicit positional list override. Kept verbatim for decks that use it; the list maps to specific keys in order.
Silicon::SGEqns — Scharfetter-Gummel device equations: direct Elec/Hole continuity PDEs (not quasi-Fermi). Consumed by SGDevicePackage in src/FLOOXS.models; used by the SG-Resistor / PN-Diode-SG / Block-Precond / MOSFET-Process Coverage tests. Distinct physics from Silicon::Eqns (which solves Qfn / Qfp drift-diffusion).
SiGe::__declare { x } — stamp every per-x value into the SiGe namespace
and re-declare each valley / hole_band with x-substituted parameters.
Called by SiGe::Eqns so the schema state always reflects the current x.
Idempotent — re-calling overwrites.
SiGe::ElecMobility / HoleMobility — composite Masetti bulk + surface phonon + roughness via Mathiessen, wrapped with Canali velocity saturation. Matches the legacy SiGe::Eqns mobility composition.
Small interstitial cluster (Smic) — formation from Int + I2; recombination with V2 → base.
Run a Galerkin POD-projected Newton solve using the per-variable bases stored in this namespace. Returns the iteration count. The caller is expected to have already set up an initial guess (e.g. via POD::Init) so the warm start lives in the column space of V.
Super-saturation ratio bulk equation. Sets SoR's self equation directly.
Sort a tcl list of numbers low to high
SRH recombination
Transpose a tcl list that is holding numeric matrix data
Simple trapezoidal integration formula U is a list of evenly spaced values dU is the separation of the values
Goal is to use this function
Trapezoidal integration over loop sizes for vacancy-flavored loops.
Silicon::ValenceStrainHook — lifts the strain-dependent hole k.p polynomial block from the pre-refactor Silicon::EqnsLegacy (lines 333-388). Emits the strain-dependent EvalShiftLH/HH/SO, LH/HH/SOMx/y/z, RelNvLH/HH/SO solutions with the polynomial strings byte-identical to the legacy code; the Phase 6 backfill tests (cov_silicon_strain_polynomials.tcl, cov_silicon_hall_currents.tcl) gate against drift here. Replaces DD's default unstrained LightHole/HeavyHole/SOHole emissions with the strain-coupled forms.
Backward-compatible shims — one-liners delegating to SetStrainParams.
VoxelVolumeTest — volume-integration regression check for voxel decks. Loops over the FieldServer's currently-meshed bulk materials, integrates each material's volume (`integrate eqn=Material($mat)`), and compares against a stored gold-value dict. Drift > `bound` percent on any single material fails the test. Platform-independent metric — replaces the old structure-to-structure CompareStruct gating in voxel test decks. Requires the deck to have called `meshvoxel` first (integrate operates on the tet mesh, not the voxel brick).