What's Changed
In this version, we introduce significant improvements to the geometry grid handling, enabling support for non-uniform grids. We also expand the physics capabilities with the Redl bootstrap current model, extended radiation modeling, and increased robustness in edge coupling. IMAS integration has improved with imas-core integration, and improved handling of core_profiles.
Physics features
-
Neoclassical and Bootstrap Current
- Added the Redl model for bootstrap current calculation.
- Added Shaing corrections to the Angioni-Sauter neoclassical model, including smooth transitions between collision regimes.
-
Radiation
- Refactored Mavrin radiative cooling models to support smooth interpolation between coronal and non-coronal models.
- Added extrapolation logic to better model radiative collapse scenarios (e.g., smoothly decaying to 0 below the polynomial fit range).
-
Edge Modeling (Extended Lengyel)
- Improved robustness
- Added configuration for initial guesses and the ability to use previous time-step outputs as initial guesses to improve convergence speed and stability.
- Parallelized multi-solution exploration in the Extended Lengyel forward mode solver, due to the possible existence of multiple roots. All unique roots are saved in output.
- Fixed handling of impurity concentrations to prevent negative seeded impurities in inverse solver modes.
-
Transport Models
-
Combined Transport Model: Introduced
ADDandOVERWRITEmerge modes.OVERWRITEallows specific models to lock transport coefficients in their domain, preventing subsequent models from modifying them. -
Output Masking: Added flags (
enable_chi_i,enable_D_e, etc.) to selectively disable specific transport channels within transport models. -
Rotation: Changed the definition of
toroidal_velocityfrom linear velocity (m/s) to angular velocity (rad/s). Introduced two different ExB suppression rules: a simple "Waltz rule" and a rule from van de Plassche 2020 which is more appropriate for toroidal-velocity limited cases.
-
Combined Transport Model: Introduced
-
Heating and Source Terms
- Added
dW/dtsmoothing (exponential moving average) to$P_{SOL}$ and$P_{loss}$ calculations to reduce noise in confinement time estimates.
- Added
Technical features
- Grid and Geometry
- Non-uniform Grid Support: Major refactor of
Grid1Dand finite difference operators (face_grad, diffusion terms) to support non-uniformly spaced grids defined by face centers. - Updated
CoreProfilesandGeometryto allow configuration viaface_centers.
- Non-uniform Grid Support: Major refactor of
IMAS Integration
- IMAS Core
TORAX now depends on IMAS Core as part of the imas Python v2.1.0 upgrade. - Versioning
- Upgraded support for
imasPython library to v2.1.0. - Added options to explicitly convert equilibrium IDSs to the current Data Dictionary (DD) version during validation.
- Upgraded support for
- Core Profiles
- Added explicit validators for
core_profilesIDS. CoreProfilesnow stores fullChargeStateInfo, optimizing impurity density scaling calculations.
- Added explicit validators for
UX/QoL improvements
- Outputs
- Added new post-processing outputs for non-inductive currents: total non-inductive current density, total external current, and non-inductive current fraction.
- Documentation
- Added
CONTRIBUTING.rstto the documentation. - Updated documentation for rotation physics, sawtooth crash durations, and transport model inputs.
- Added
Bugfixes
- Lengyel Model: Fixed a bug where fixed impurities were incorrectly included in seeded impurity outputs, causing NaNs.
- Transport: Fixed a bug where optional transport sub-channels (like
chi_bohm) were leaking outside their configured radial domains. - Transport: Fixed a numerical instability for the QLKNN transport model when rotation was enabled.
- Transport: Fixed tracer leak in tglf_based_transport_model
- Numerics: Fixed an issue where deterministic time-stepping (with adaptive steps done internally as substeps) could hang if a minimum time-step (
min_dt) was reached; it now exits gracefully. - Geometry: Fixed boundary gradient calculations (
face_grad) to correctly handle extrapolation on non-uniform grids.