Releases: Goobley/Lightweaver
Bugfixes & Newer Python Support
Closing a few outstanding issues and adding full build support for 3.11 and 3.12 🚀
SIMD Exp Fixes
Added proper bounds checking to SIMD wide-exp function, as it was blowing up in the exp(-hnu/kT) term for continua at very short wavelengths (< 1 nm). This is very unlikely to have affected results, as it produces NaNs as soon as it explodes. The new value correctly gets truncated to 0.
Editable Build Fixes
Due to setuptools now defaulting to a PEP660 build system, the previous develop/editable build process no longer works, breaking the docs workflow/a develop build by default. This redesigned setup.py
should fix editable installs.
Domain Decomposition Support + NumPy Version Updates
Adds support for ZPlaneDecomposition for 1D and 2D atmospheres, to be used in conjunction with this MPI layer, via mpi4py.
Removed the block on numpy versions due to numba 0.55.
Minor loop indexing bugfix in configure_hprd_coeffs
which may trigger an assert on some cpp stdlibs.
Performance Focused Improvements
The v0.8
release of Lightweaver focuses significantly on performance enhancements in the backend, with some improved frontend flexibility regarding the printing of results. If you've been using a v0.8.0rc*
version then you will already have most/all of these features.
Notable features:
-
Manual SIMD (x86_64) vectorisation throughout the opacity/emissivity gathering process and calculation of the radiative Gamma matrix. This can be a >50% performance uplift on iterative schemes depending on available instruction sets. (SSE2 seems fully supported on Apple M1, thanks J. Jenkins for testing)
-
Reduced multithreading overhead.
-
Assured data over-alignment where possible.
-
Optimised interpolation schemes and parallelisation of PRD/hPRD scattering integral calculations.
-
Ability to override the iteration scheme with dynamic libraries, similar to the formal solver, these all take an ExtraParams dict (containing basic types including arrays with the option to write-back) from Python.
-
Added
IterationUpdate
class, returning a lot more information about the updates going on in the backend. (This also ties in with the ability to override the iteration scheme -- consider how a GS method works 👀) -
Finally added default function to iterate context to statistical equilibrium convergence. See
lw.iterate_ctx_se
-
Added a benchmark and config file system to select the optimal SIMD implementation for the current machine. Home folder config can be overriden with a
lightweaverrc
in the folder where a script is run. -
Minor documentation improvements.
Hopefully final v0.8.0 pre-release
Adding ExtraParams to most of the core functions finalises the intended API changes for v0.8.0, holding off full release in case of breakage.
Collection of Small Bug Fixes
Very happy with the performance of v0.8.0, a small number of outstanding niggles have been dealt with here. The final roadblock before this release is incorporating extraParams
into formal-solver-ish functions.
Compile Fixes
- Fixed macOS compile of ExtraParams
- Added return value to
iterate_ctx_se
as suggested by Jack. - Tidying compile warnings and hopefully ensuring correct headers available on all CI platforms.
Minor Bug Fixes & Features
- C++ ExtraParams struct implemented, but not added to all functions yet
- Basic iteration of J20 and continuum scattering polarisation in the polarised solver (all into Q as per convention).
- Bug fix filling DepthData
- Bug fix for rho not being created in some branches of the 1D atmosphere constructor. Thanks Jack!
New Optimised Backend
Multiple bugs also fixed, more detail will be provided in final release.