Published March 4, 2026
| Version v0.8.0
Software
Open
ismatorresgarcia/acherus: Acherus v0.8.0
Description
Acherus v0.8.0
🚀 New Features
- 🧩 Configuration
- Replaced the
optionsconfiguration module with a newconfigclass that unifies all user-related options. Input options are now provided through a dictionary at the__main__entry. - Added a new
gpuboolean variable as an entry in theconfigdictionary, in preparation for future GPU-acceleration. - Removed the
method_ramanstring variable from theconfigdictionary, since only a single trapezoidal integration method is now used. - Added a package-oriented CLI/config flow with TOML loading in
__main__, optional--outputoverride, and standardized output-path handling through configuration and path helpers.
- Replaced the
- 🧩 Plotting
- Simplified and renamed some variables and classes for simplicity.
Plot1Dnow plots beam radius using a newcompute_radius()function and beam fluence loadedfluence_rzdata.Plot2Dnow supports log-scale plotting for radial vs time images using thecontourffunction.Plot2Dnow supports new colormap options via the third party librarycmasher,
which provides better color gradients and considers color vision deficiencies.- The
monitoringmodule now imports input and output data paths from thepathssubmodule indata. - The
monitoringandplottingmodules now have clearer defaults/options, stricter validation, and cleaner plotting controls.
- 🧩 Mesh
- Modified the radial grid index to go from 0 to N (instead of from 0 to N + 1) to matching boundary conditions.
- 🧩 Solvers
- Refactored core propagation internals: unified
FCNandSSCNvariants, improved linear-step performance with tridiagonal LAPACK workflows, and added optional radial PML support. - Renamed the
basesubmodule tosharedto match the solver structure. - Added a new Adams-Bashforth two-step (AB2) integrator for nonlinear terms. All solvers now use AB2 to preserve Crank-Nicolson accuracy; the first propagation step is computed using the Forward Euler method.
sharedmodule now initializes all arrays to zero to prevent use of uninitialized memory or empty values.- Refactored Crank-Nicolson matrix creation into a single
compute_matrices()routine. FCNsolver now precomputes and stores the matrices in parallel usingThreadPoolExecutor()for faster execution.FCNsolver now usesThreadPoolExecutor()for parallel computation across frequency slides incompute_envelope().- Every single z-independent coefficient which depends on frequency, such as constants optical shock operators, is now precomputed and stored as a 1D array and passed to
compute_nonlinear()functions for faster computation and reduced floating-point errors.
- Refactored core propagation internals: unified
- 🧩 Physics
- Added a new
keldyshmodule replacing previousionizationapproaches. It computes ionization rates over a desired intensity interval and provides an interpolating object to convert intensity arrays into ionization rates. Supports gaseous and condensed media, including the multiphoton limit and the full generalized Keldysh theory. - Added a new
mediummodule storing medium properties fromconfigand dispersive properties fromsellmeier. - Refactored
laserandgridmodules to use input options from theconfigclass. - Added molecular correction and electron momentum dependence for ionization rates of gases based on Mishima et al. in the
keldyshmodule.
- Added a new
- 🧩 Constants
- Added a new
constants.pymodule to centralize physical and mathematical constants across the package.
- Added a new
- 🧩 Functions
- Removed the
mathematicsfolder; replaced with afunctionsfolder containing all previous modules. - Moved
compute_radius()toplottingmodule to increase execution speed by avoiding unnecessary computation inside the propagation loop and storage in diagnostics files. - Refactored
fourierimports to use thegpuboolean fromcomputing_backendoption inconfig. CuPy's backendcufftis now used only whengpu=trueand the library is available; otherwise SciPyfft()andifft()is used. compute_raman()now uses a second-order trapezoidal integration method for the Raman integral. Removed unused SciPysolve_ivp()routines.compute_nonlinear()now uses z-independent frequency tables for faster broadcasting computations.- Optimized
compute_density()andcompute_nonlinear()with in-place operations using temporary buffer arrays_nlin_tmp_t,_nlin_tmp_w, anddens_tmp_bufto improve speed. - Replaced
RegularGridInterpolatorfor intensity/ionization 2D arrays with SciPy's linearmake_interp_splineinterpolation along the time axis only. - Replaced
interp1dinkeldyshwith SciPy's cubicPchipInterpolatorfor monotonic, shape-preserving interpolation. - Added
keldysh_ratesandkeldysh_sumfunctions for truncated series computation of Keldysh ionization rates. - Added
sellmeierfunctions providing complete Sellmeier formulas for air, water, and silica.
- Removed the
- 🧩 Data
validate_stepindiagnosticsnow saves propagation results in case of failure.Output_manageris initialized in__main__and accessible fromsharedto save results when density or envelope values overflow.- Removed profiling capabilities from
diagnostics, as they are no longer needed.
🏷️ Other Features
- 🔁 Tests
- Added a
testsfolder for development and quality control through GitHub Actions workflows.
- Added a
- 📚 Documentation and Examples
- Added a
docsfolder for Read The Docs powered by Sphinx, hosting the official up-to-date documentation. - Acherus is now an official PyPI package. Install it from PyPI.
- Added an
examplesfolder with four configuration examples:001_air_IR_ps.toml,002_air_IR_fs.toml,003_water_IR_fs.toml, and004_water_UV_fs.toml. - Moved
README.mdto the repository root and updated badges.
- Added a
- 🐍 Build and Compatibility
- Added repository automation under the
.githubfolder for nightly tests, Codecov, and manual badge generation. - Added release-notes guidance in
.github/agent/release_notes_agent.md. - Renamed
mainentry as__main__to comply with Python CLI standards. - Removed
olddirectory in favor of Git version control. - Updated release-readiness metadata (PyPI URL normalization and README badge/link cleanup, including Codecov, LoC, and LoD).
- Added repository automation under the
- 🎨 Code Style
- Improved various helper module descriptions.
- Configuration options now accept uppercase and lowercase strings.
- Applied consistency/readability cleanups across touched plotting/function modules.
- 🛡️ Security
- Added
SECURITY.mdfile to the repository root.
- Added
🐛 Bug-fixes
- Fixed
compute_envelope()infcnmodule:mats_rightwas incorrectly used insolve_banded()instead ofmats_left. - Fixed
fourierimport error when CuPy was unavailable; previously, global backendcufftwas used alongside SciPyworkersoption. - Fixed axis node conversion from float to integer in
init_grid_nodeswithin theplottingmodule. - Fixed
--radial-limitparser argument value not being converted to float. - Fixed duplicated axis data in
init_sliced_arraysandflip_radial_datawhen plotting radially symmetric figures. - Fixed overflow in
snapshot_z_index; data type changed fromint16touint16. - Fixed elementwise unit conversion, small-z snapshot formatting, flat-ended rt log colorbars, and corrected beam-radius extraction.
- Fixed plotting CLI argument parsing consistency:
--radial-symmetryTrue/False boolean conversion, and numeric range parsing/validation. - Fixed SSCN propagation duplicate ion-rate handling and boundary alignment issues.
📝 Full changelog
| N commits | 📚 Docs | 🔁 Tests | 🐛 Fixes | 🎨 Style | 🚀 Features | Other |
|----------------|----------|----------|----------|----------|-------------|--------|
| % of Commits | 11% | 4% | 25% | 10% | 44% | 6% |
Full changelog: https://github.com/ismatorresgarcia/acherus/compare/v0.7.0...v0.8.0
Files
ismatorresgarcia/acherus-v0.8.0.zip
Files
(182.2 kB)
| Name | Size | Download all |
|---|---|---|
|
md5:406d6a002f61728391b5bb6611bdaec8
|
182.2 kB | Preview Download |
Additional details
Related works
- Is supplement to
- Software: https://github.com/ismatorresgarcia/acherus/tree/v0.8.0 (URL)
Software
- Repository URL
- https://github.com/ismatorresgarcia/acherus