# SEP 12 — TDSE-driven nonlinear response for gas-filled capillaries | | | |---|---| | **SEP** | 12 | | **Title** | TDSE-driven nonlinear response for gas-filled capillaries | | **Author** | John Travers | | **Drafting agent** | GPT-6 Astra; GPT-6 (2026-10-04 revision) | | **Status** | Final | | **Review status** | Reviewed | | **Reviewers** | John Travers (human); GPT-6 (AI); Opus 5.5 (AI) | | **Type** | Feature | | **Created** | 2026-10-03 | | **Resolution** | Accepted by John Travers, 2026-10-04, in the implementation-plan discussion | | **Requires** | [SEP 3](sep-0003-optmat-materials.md); [SEP 13](sep-0013-expensive-response-steppers.md) | | **Supersedes** | — | | **Superseded-by** | — | | **Implementation** | GPT-6 Astra (coordinating agent), with bounded implementation and independent review agents; `feature/sep-0012-calibration`, `feature/sep-0012-integration`, `feature/sep-0012-gpu` | | **Manual pages** | [TDSE response](../../../guide/media/tdse.md); [configuration](../../../guide/media/tdse.md); [CPU example](../../../guide/media/tdse.md); GPU report (recorded in the development archive); [installation](../../../guide/media/tdse.md) | ## Part I — Proposal ### 1. Abstract Add solprop-tdse as an optional, batched atomic-response engine for scalar, carrier-resolved propagation in helium-filled capillaries. Keep optmat's linear dispersion and initially its electronic cubic polarisation, and replace the rate-based plasma closure with a TDSE current from which the same discrete calculation's first and third orders have been removed. Compare the optmat cubic with a calibrated TDSE third-order dipole. Retain an optional comparison with unscaled native TDSE nonlinearity using the implemented first-order-only shadow; this is a different source model, not an equivalent calibrated Kerr shortcut. Use the fundamental mode on a resolved radial quadrature, with about 16 points as a cost-reduction candidate. NumPy propagation uses SEP 13's delivered variable-order Adams PEC method, `Multistep()`, at the maintainer-approved `rtol=1e-2`; the atoms can independently run on a CPU or GPU. Stepper selection is settled: this SEP contains no RK propagation comparison, new stepper or multirate investigation. Select compact current output when no dipole is needed. Prioritise calibration of the linear and cubic responses and the effective ionisation electron count, TDSE integration, and a short GPU test propagation. The whole SEP has a fixed rented-GPU budget of US$100, about 26 device-hours at the quoted $3.80/h for one MI325X (§6.7). Calibration and integration run on CPU only. The GPU work verifies the device path and then propagates a short segment of the canonical case from a saved field. The full-length TDSE run is not part of this SEP. Start helium ionisation calibration from the hypothesis $N_{\mathrm{eff}}=2$, keeping it distinct from the linear/cubic calibration and checking its transfer to the current remainder. Reduced atomic accuracy is permitted for an explicitly labelled demonstration; retain the calibrated source accounting and report the remaining error. Spend expensive calls on selected saved waveforms and targeted checks, not broad method or parameter sweeps. Scientific claims require evidence for the particular observables, including weak UV emission. Numba and Kokkos propagation and broad multimode/optimisation studies are not completion requirements. ### 2. Motivation and scope An extremely self-compressed pulse can contain substantial energy across an octave or more, have a strongly asymmetric subcycle waveform and drive ionisation with spectral components far from the input carrier. A rate parameterised by a carrier frequency and instantaneous field cannot in general retain the coherent history, excitation and interference of that waveform. This is a reason to test a TDSE closure, not a claim that every broad pulse invalidates every PPT-like rate. The comparisons must identify the conditions and observables for which the additional calculation matters. The intended application is soliton self-compression and deep-UV generation in a **constant-radius helium capillary with a longitudinal pressure gradient**. The first target band extends from the IR to approximately 200 nm. The motivating capillary physics is described by Travers et al. [3]. The initial model is scalar, linearly polarised, a single pulse in initially neutral gas, with the ordinary diagonal capillary linear operator and its existing wall loss. **Canonical use case supplied by the maintainer.** Use this existing rate-based propagation configuration as the comparison input, with the subsequently agreed 120 nm grid edge and Adams selection: ```python import solprop from solprop.driver import prop_capillary from solprop.gasflow import steady_fill from solprop.stepper.multistep import Multistep fill = steady_fill("He", [0.0, 4.2 / 2, 4.2], [0.0, 0.2, 0.0], radius=256e-6) run = prop_capillary( 256e-6, # Core radius, m. 4.2, # Length, m. "He", fill, lambda0=800e-9, fwhm=6e-15, energy=1e-3, modes=1, trange=60e-15, wavelength_limits=(120e-9, 1.6e-6), rtol=1e-2, noise=None, n_save=50, backend="numpy_ref", integrator=Multistep(), ) ``` Pressure arguments are in bar at this existing user interface; the fill peaks at $2\times10^4$ Pa at its central port. Preserve `steady_fill`'s choked-end treatment and port breakpoint, rather than substitute a smooth density curve or literal zero-density endpoints. The initial TDSE grid spans 120 nm–1.6 µm; the approximately 200 nm scientific target does not qualify the entire numerical band. The maintainer expects little generated field at the short edge. Check that truncation's effect on the retained source and observables in bounded windows; it is an expectation to verify, not an error bound. Physical extension below 120 nm is deferred, with no mandatory 90 nm production run. Phase 1 states the admitted material/spectral domain, including any limits between 120 and 200 nm. Use the supplied `rtol=1e-2`: the maintainer accepts this accuracy/cost choice with Adams. A tighter Adams run is only a targeted short-window diagnostic when a specific error question warrants its cost; there is no mandatory tolerance sweep or RK comparator. This tolerance is not a guarantee of 1% global or weak-band accuracy. The snippet uses the existing rate-based response with explicit NumPy/Adams, not a TDSE adapter. Freeze the remaining resolved defaults when recording the reference. The maintainer explicitly selected no noise and 50 save planes, also matching SEP 13's comparison settings. The rate-based run is cheap on CPU and supplies the saved fields for every TDSE check. A full-length TDSE version is outside this SEP (§7.3) and is listed on the [roadmap](../../roadmap.md#numerics); tests, timings and the GPU test propagation use short segments of this physical case, started from those saved fields. The fundamental is `HE_11` in solprop's naming. Its source is evaluated over the actual radial profile and projected back onto the mode, even when it is the only retained mode. This is the existing capillary quadrature route with one mode, not the separate mode-averaged effective-area route. The test propagation is explicitly a one-mode model. Broader `HE_1m` convergence is later work: a converged transverse integral alone does not establish negligible modal feedback. Included are the hybrid response, current-source assembly, atomic execution lifecycle, pressure gradients, targeted atomic and radial checks, provenance, diagnostics and qualification of the CPU/GPU atomic path actually used. SEP 13 is `Final`: this SEP consumes its implementation and tests the coupling's history, budgets and response identities. Its deferred multirate study moves to the [roadmap](../../roadmap.md#numerics); it does not delay integration or the test propagation. Not included are envelope grids, vector polarisation, tapers, coherent-wall coupled linear flows, general modal guides, free-space propagation, gas mixtures, excited or preionised initial states, inter-pulse memory, collisions, multiple ionisation, or production argon. Propagation into resonant VUV/XUV bands and complete high-harmonic propagation need additional material and approximation checks. The TDSE will still generate microscopic high-frequency content, which must be handled correctly when sampling the response (§4.8). **Execution is deliberately split.** NumPy propagates the optical field; solprop-tdse performs the expensive atomic solves, including on a GPU. There is no need to send the optical propagation through solprop-kokkos to use a GPU for the atoms. Native integration with solprop-kokkos is a possible later optimisation with a separate runtime and qualification cost. ### 3. Context #### 3.1 Current solprop The inspected solprop revision is `7de4049`. The governing documents are [architecture](../../architecture.md), [conventions](../../conventions.md), [the kernel contract](../../kernel-contract.md), [the stepper](../../stepper.md), [nonlinear responses](../../../guide/media/nonlinear.md) and [power and intensity](../../../guide/results/power-and-intensity.md). | Existing component | Consequence for this proposal | |---|---| | `modes/quadrature.py` and `translate/modal.py` | Real modal synthesis and weighted projection already support one or several capillary modes and embedded radial rules | | `nonlinear/responses.py` and `translate/responses.py` | Responses are currently compiled into named coefficient groups; an external atomic response is not an existing arbitrary callback facility | | `backends/numpy_ref/passes.py` and `backend.py` | The field-grid plasma path integrates current to polarisation before the common spectral polarisation prefactor; this proposal adds a direct current stream | | `backends/numba_cpu/backend.py` | Existing FSAL execution supplies a cost comparator; a compiled TDSE coupling is deferred | | `translate/stage.py` | Density and frequency-dependent prefactor weights are evaluated at each stage position; an atomic response must use the same stage density | | `driver/simulation.py` and `backends/registry.py` | `auto` selects NumPy when `integrator=Multistep(...)` is given; otherwise the existing preference is installed Kokkos, then Numba | | `stepper/multistep.py` and `backends/numpy_ref/multistep.py` | Delivered variable-order PEC, source-call ledger, budget stop, dense observation and fresh-start resume; no atomic binding yet | | `output/schema.py` and `translate/problem.py` | Saved-output schema is 9, including `StepperRecord.method`; the kernel schema is independently 16 | Paths in this table are relative to solprop's `src/solprop/`. The kernel-contract page's introductory versions still say kernel 15 / output 7, while its version history and executable schemas say 16 / 9; executable versions are authoritative. An implementation must use the then-current versions and reconcile the affected design documentation rather than reserve version numbers in this Draft. The default Runge–Kutta integrators remain IP-DOPRI5 and IP-Tsit5, both fifth-order embedded pairs. Numba normally uses six fresh nonlinear evaluations per accepted step after startup through first-same-as-last (FSAL) reuse. The NumPy reference evaluates all seven stages. Save-plane resets, rejection and state-changing events affect the actual count; six times the accepted-step count is not a complete cost ledger. [SEP 13](sep-0013-expensive-response-steppers.md), ADR-036 and ADR-037 deliver the NumPy-only `Multistep()` method: a one-call PEC with a predictor of order one to five and a corrector one order higher. PECE, plain AB and matched pairs remain benchmark comparators, not public production choices. Its manual, [low-call stepping](../../../guide/numerics/adams.md), defines the current contract; §6.4 below records what this coupling inherits and still has to add. The six-call Numba figure remains a comparator, not a reason to require a compiled TDSE coupling phase. [SEP 6](sep-0006-dispersive-nonlinearity.md) proposes a frequency-dependent electronic cubic response and is relevant to comparison with TDSE, but is not a prerequisite: the baseline here is the existing optmat carrier-evaluated cubic. [SEP 9](../sep-0009-propagation-statistics.md) distinguishes quadrature resolution and modal-span diagnostics; it does not yet define a general current source diagnostic. Neither draft is treated as implemented functionality. #### 3.2 Upstream snapshot and evidence status The inspected solprop-tdse documentation revision is `3e99e319`; the original optmat snapshot is `b2f418d`, with the ionisation calibration references rechecked at `717b0bc` during the human-review revision. The review reconciles the completed stepper with the atomic execution, strong-field, first-order-shadow and compact-response studies. References [9–12] identify companion **public documentation**, which carries the API, measured results and their limits. The proposal does not depend on private work orders, development paths or another implementation's source. | Upstream work | Delivered evidence and its scope | Consequence for SEP 12 | |---|---|---| | Response execution and projector optimisation | Fused full/shadow RK stages, persistent plans, explicit deterministic or vendor-BLAS projection, CPU and H200/MI325X complete-call measurements at 1/8/30 rows; engineering integration `0603607`, qualified source `de43a8b` | Reuse the public host API and actual row-batch execution; older production-basis timings are not strong-field timings | | Strong-field convergence | `strong_field` preset and corrected, observable-specific angular/cut/step studies; original runs used `d070208`, analysis `83243a0`, integrated with the execution work | Useful starting configurations; physical-box, broadband and compressed-waveform qualification remain open (§3.3) | | First-order-only shadow | `shadow_order=1`, with `orders == (1,)`, is implemented; CPU integration/gate `323b7f0`; measured order-3-to-1 CPU savings depend on basis, rows and projection mode | Native retention no longer needs a provider extension; either cubic replacement still needs order 3 | | Compact response and storage | `ResponsePlan(outputs="total_current")`, typed `TotalCurrentResponse`, shared owned field tables and a fixed device shadow-observation tree; CPU implementation `4b634fe`, merge `36f17c9`, device alignment correction and full CPU gate `beb163e` | Select output by required observables (§5.2); this removes native work and storage, not merely Python columns | | Latest device follow-up | Corrected H200 and MI325X builds each pass 187 focused Python and 20 GPU cases; native results 141/141 and 124/141 respectively [12] | Order-one/compact numerical paths have actual device evidence; 17 known HIP runtime host-allocation assertions still fail, so no strict allocation-free HIP claim | | Helium linear and cubic calibration | Public dipole-form calibration and spectral-cut artifact study on the higher-cut basis [9]: $\kappa_1=1.764$ and $\kappa_3=1.537\pm0.002$, each flat to 0.1% or better over 400 nm–2 µm | Keep optmat cubic as the initial baseline and calibrated dipole as the required comparison; native current is a different physical closure. The linear mismatch of §4.4 is already measured in-range; phase 1 reproduces it on the selected basis and extends it below 400 nm | | Helium static ionisation ratio | Static Stark widths of the SAE ground state against Parker's two-electron rates [14]: $\Gamma_{\mathrm{ref}}/\Gamma_{\mathrm{SAE}}=1.758$ and $1.650$ at 0.10 and 0.15 au ($3.5\times10^{18}$ and $7.9\times10^{18}$ W/m²); Scrinzi's reference gives 1.722 and 1.627 [9] | Existing like-for-like rate evidence for Q1, below the starting value 2 and falling with field (§4.5); not a laser-field, few-cycle or current comparison | | Same-potential one-electron yields | Curated tRecX yields of one electron in the same Tong–Lin helium potential, velocity gauge, 800 nm, 6 fs, $2.4\times10^{18}$–$2.1\times10^{19}$ W/m² [10] | An independent same-model check of the SAE engine's ionisation, separating code error from SAE model error before any electron-count comparison; yields there subtract bound populations up to $n=10$, which `outside` does not (§4.2) | The latest device chapter [12] supersedes the older shadow/backend-guide statements that order one or the fixed tree lack any device execution. It does **not** qualify a one-femtosecond compressed pulse, establish warmed full-window timing distributions or provide portable device wheels. The GPU scratch-alignment fix must be present in the admitted build. Historical timings retain their actual source identities, including the MI325X timing before that fix and its separate post-fix numerical checks. CPU and GPU full/compact common outputs agree under the provider's documented arithmetic contract. The fixed device tree may change shadow observations in their last bits relative to the old ordered sum; vendor projection has its own derived rounding allowance. Neither is a cross-device bitwise guarantee. Qualify the **subtracted** source in absolute units as well as its operands. Refresh the capability/build/evidence matrix in each implementation report. #### 3.3 What the strong-field study does and does not qualify The reference pulses were 6 fs at 800 nm and 3 fs at 200 nm, not the intended broadband, approximately 1 fs compressed field. The following differences are reported at a common physical box, relative to the study's finer angular/cut/ step reference [9]. Intensities here are converted to SI W/m². | Reference case | Finding | Starting point for phase 1, not an accuracy guarantee | |---|---|---| | 800 nm, $5\times10^{18}$ W/m² | `production` has about 6–7% angular error in total current and 22% in total acceleration; increasing only the cut leaves the angular defect | At least $l_{\max}=49$ with the higher cut; the recorded worst fixed-box difference there is $1.6\times10^{-3}$ | | 800 nm, $10^{19}$ W/m² | `strong_field`, $l_{\max}=79$, has a worst fixed-box difference $8.4\times10^{-3}$; completed-current difference is $2.8\times10^{-4}$ | Start from `strong_field`; $l_{\max}=99$ is only a starting point for a $10^{-3}$ target, with further angular refinement required | | 200 nm, up to $2\times10^{18}$ W/m² | Angular extent is already converged at $l_{\max}=19$ in the measured cases; cut/step effects dominate | Do not infer the IR-driven broadband requirement from this isolated UV pulse | The preset's resolved identity is 80 angular channels and 266 radial nodes, with $R_0\simeq4.233\times10^{-9}$ m, spectral cut $E_{\rm cut}\simeq1.744\times10^{-15}$ J and maximum step $h_t\simeq1.260\times10^{-19}$ s. These rounded SI equivalents correspond to the provider's 80-bohr, 400-Hartree, 1/192-atomic-time-unit settings, converted with its public unit scales; implementation must retain the exact resolved configuration, not reconstruct it from these rounded values. The preset's $8.4\times10^{-3}$ figure **excludes physical-box error**. Changing $R_0$ from approximately 4.23 to 7.41 nm changes the strong 800 nm total current by about 0.9–1%, and total acceleration by 2.4–6.7%. At the lower strong-field case, successive acceleration differences do not decrease. The neglected- outer-force current bound does not bound all such discretisation differences, acceleration or harmonic spectra. A larger box must be studied together with angular, radial and absorber resolution before assigning a source error. The first/third shadows are unchanged under the reported angular refinement but still depend on the cut. Their total-current step studies do not establish fourth order for every observable: the third-order dipole gives an order near 1.46 on one triple, then a nonmonotone difference. Lost norm can instead show the fifth-order accumulated RK4 damping floor. Qualification must address each **consumed** current/dipole and the cancellation-sensitive remainder; neither a norm monitor nor a preset's single error number suffices. Phase 1 uses this evidence to choose targeted screens and state the reduced-accuracy test propagation's limits; it need not repeat every upstream ladder. The published ladders have incomplete radius coverage and are not an independently converged all-electron reference. ### 4. Theory #### 4.1 Coordinates, units and approximation Use $r$ for the macroscopic capillary radius coordinate, $z$ for propagation, $t$ for retarded time, and $\boldsymbol{x}$ for the electron coordinate inside one atom. The atom sees the local real field in V/m, with its polarisation axis identified with the atomic solver's single driving axis. Atomic position and capillary radius are independent discretisations. For an electron of charge $-e$, a local SAE potential and a spatially uniform atomic driving field give the velocity-gauge Hamiltonian $$ i\hbar\partial_t\psi= \left[\frac{(\boldsymbol{p}+e\boldsymbol{A}(t))^2}{2m_e} +V_{\mathrm{SAE}}(|\boldsymbol{x}|)\right]\psi, \qquad E(t)=-\partial_t A(t). $$ This is the electric-dipole, nonrelativistic, fixed-nucleus model. A solver may remove the spatially uniform $A^2$ term by a time-dependent global phase; the observable and gauge conventions must still match [9]. Helium uses the named Tong–Lin SAE model [4], obtained from the public provider with its complete identity. Solprop does not duplicate the potential coefficients or atomic unit constants. Each spatial point begins in the same prepared stationary ground state before the pulse. There is no wavefunction transported along $z$: each plane contains different atoms. Resetting between calls is therefore physical for this model. Within a call, the full waveform drives one coherent temporal evolution. An Adams source evaluation uses its trial optical field for a complete atomic solve. Pressure and temperature determine the initial number density $n_0(z)$ in m$^{-3}$ through the existing equation of state. The same fill determines the linear gas index. At constant bore radius, the scalar capillary profiles can remain fixed while dispersion, loss, amplitude power weights and response density vary along $z$. The existing cumulative linear operator, including its normalisation term, remains authoritative. #### 4.2 Which microscopic current is usable The in-box dipole derivative is not the current of all electrons after the absorber removes outgoing probability. Let $N_0$ be the measured initial norm, $N_{\mathrm{in}}(t)$ the norm inside atomic radius $R_0$, and $F_{\mathrm{in}}=\langle-\hat{\boldsymbol{\epsilon}}\cdot\nabla V\rangle_{|\boldsymbol{x}|