Releases: ImpedanCEI/wakis
Wakis v0.6.1
Wakis v0.6.1
This release introduces major improvements to performance and usability: running single-precision simulations allowing x100 speedup on mid-range GPUs, MKL backend integration for multithreaded time-stepping (sparse-matrix times vector operations), adaptive mesh refinement (first steps, WIP), STEP geometry unit extraction and scaling and more robust parsing, added IDDEFIX wrapper for streamlined simulation extrapolation, and updated interactive 3D visualization tools of imported solids with widgets. It also enhances multi-GPU compatibility, and testing workflows.
🚀 New Features
-
🧱 SolverFIT3D
- Performed data-type tracking to enable running single-precision simulations on both CPU and GPU simply by passing
dtype=np.float32to solver constructor. - Added MKL backend for optimized CPU computations, with automatic fallback if unavailable.
- Introduced environment variable to control MKL threads and improved sparse matrix–vector operations.
- Added callback function argument (
fun(solver, t)) executed after each timestep for flexible simulation monitoring. - Implemented absorbing boundary conditions (ABC) for EM simulations with updated testing routine.
- Added single-precision support for solver initialization and data type tracking.
- Performed data-type tracking to enable running single-precision simulations on both CPU and GPU simply by passing
-
⚙️ Mesh Refinement
- Introduced adaptive mesh refinement based on OpenFOAM's snappy hexmesh with automatic CFL-stable grid recalculation - Work in progress
- Added example
notebook_006showcasing refined mesh simulation.
-
🪶 Geometry & CAD Tools
- Added unit extraction from STEP files and automatic STL scaling to meters.
geometry.load_stp()now supports file paths and lowercased material names for consistency.- Added tests for geometry unit handling and material case normalization.
-
🎛️ Visualization
- Added interactive
inspect3Dvisualization supporting both PyVista and Matplotlib backends. - Introduced new
plot_stl_mask()tool with interactive 3D sliders to visualize solid occupancy in the computational domain. - Added offscreen plotting support for headless servers (export to HTML).
- Added interactive
-
🌊 WakeSolver
- Added on-the-fly wake potential computation and IDDEFIX wrapper for wake extrapolation.
- Improved extrapolated wake consistency with CST/Wakis conventions.
- Implemented
wakelengthattribute loading when usingload_results().
-
🧩 Miscellaneous
- Enhanced GPU/CPU integration — unified timestepping (
one_step) and backend detection. - Enabled multi-GPU test cases and performance optimizations.
- Enhanced GPU/CPU integration — unified timestepping (
💗 Other Tag Highlights
-
🔁 Tests
- Added GitHub Action to trigger tests automatically on PR open or sync.
- Added MKL vs SciPy backend tests and hardware info retrieval (threads, sockets, affinity).
- Added test coverage for geometry scaling, lowercase material import, and ABC boundary handling.
-
📚 Documentation
- Updated multi-GPU and MKL installation guides.
- Added CSG geometry and PyVista snippets to the User’s Guide.
- Refined Physics Guide, improved clarity on SI base units.
- Added SWAN badge, DOI, and tutorial repo to README.
- Simplified issue and feature request templates for contributors.
-
⚙️ Build & Compatibility
- Ensured NumPy 2.0+ compatibility.
- Upgraded PyVista dependency to enable
|(union) operator for CSG modeling.
🐛 Bugfixes
- Fixed crash in GPU memory pinning and added
to_gpu()routine for reliable field transfer. - Fixed axis allocation in grid and tensors
inspect(). - Fixed robustness of
load_results()to ensure trailing slash consistency and automatic loading of simulated wakelength. - Corrected transverse impedance save to logfile.
- Fixed synchronization in MKL backend initialization when GPU is disabled.
- Fixed minor doc typos and link issues (e.g. WSL installation link).
- Fixed nightly test failures caused by lowercase material names.
👋👩💻 New Contributors
- @elleanor-lamb made their first contribution in #17
- @Antoniahuber made their first contribution in #20
- @Antoniahuber — Implemented geometry unit extraction, STL scaling, material normalization, and related tests.
- @Elleanor-Lamb — Added Frequency domain monitors and possibility of having 2 counter-rotating beams. Updated documentation for HTCondor and GPU installation.
📝 Full changelog
Full Changelog: v0.6.0...v0.6.1
| 83 commits | 📚 Docs | 🧪 Tests | 🐛 Fixes | 🎨 Style | ✨ Features | Other |
|---|---|---|---|---|---|---|
| % of Commits | 26.5% | 10.8% | 9.6% | 8.4% | 35.0% | 9.7% |
- 2025-11-04 test: added action to trigger tests on PR open or sync (elenafuengar)
- 2025-11-04 Allow lists as color inputs --> merge #28 from Antoniahuber/main (Elena de la Fuente García)
- 2025-11-03 Allow lists as color inputs (Antonia Huber)
- 2025-10-31 feature: extract units from STEP file and scale the generated STL geometry to be in meters --> Merge pull request #27 from Antoniahuber/main (Elena de la Fuente García)
- 2025-10-31 Added possibility to give a filepath to stl-files (Antonia Huber)
- 2025-10-31 Merge pull request #1 from Antoniahuber/Documentation-Change-geometry Scale units function (Antoniahuber)
- 2025-10-31 units Test (Antoniahuber)
- 2025-10-31 Update test_006_geometry_utils.py (Antoniahuber)
- 2025-10-30 Test for units function (Antoniahuber)
- 2025-10-30 Merge branch 'ImpedanCEI:main' into Documentation-Change-geometry (Antoniahuber)
- 2025-10-30 bugfix: fixing nightly test failing after lowercase fix --> merge #26 from Antoniahuber/main (Elena de la Fuente García)
- 2025-10-30 lowercaseInRightFunction.py (Antoniahuber)
- 2025-10-30 Merge branch 'ImpedanCEI:main' into main (Antoniahuber)
- 2025-10-30 Test function for lowercase materials (Antoniahuber)
- 2025-10-28 bugfix: ensure material in lower case + docs: minor fixes #20 (Elena de la Fuente García)
- 2025-10-28 Update geometry.py (Antoniahuber)
- 2025-10-21 Recognize unit in .stp file, completed docstring, converts materialnames to lowercase (Antoniahuber)
- 2025-10-20 Import materials from .stp in lowercase (Antoniahuber)
- 2025-10-20 Added commas in usersguide (Antoniahuber)
- 2025-10-17 style: simplify feature request template (elenafuengar)
- 2025-10-17 style: simplify issue template (elenafuengar)
- 2025-09-26 style: added call to
inspect3D, allowing to visualize interactively in 3d the material tensors or electromagnetic fields (elenafuengar) - 2025-09-26 feature: enhance inspect3D method to support interactive visualization with PyVista and Matplotlib backends (elenafuengar)
- 2025-09-26 feature: fix slider rendering to save the slider bounds after every callback (elenafuengar)
- 2025-09-25 style: add new plot_stl_mask method to the notebook (elenafuengar)
- 2025-09-25 feature:
plot_stl_maskto show the cells occupied by a certain solid in the computational domain. The plot is interactive with 3 sliders in x, y, z (elenafuengar) - 2025-09-22 WIP: gradient based extraction of solid boundaries for SIBC (elenafuengar)
- 2025-08-20 feature: load wakelength attr when using load_results -needed for extrapolation (elenafuengar)
- 2025-08-20 docs: update multi-gpu from notebooks guide (elenafuengar)
- 2025-08-20 fix: add flag not on GPU for the MKL backend (elenafuengar)
- 2025-08-20 style: include results in notebook 005, run on multi-gpu (elenafuengar)
- 2025-08-14 style: revision of notebook 005, added lines for multi-GPU, use iddefix wrappers for extrapolation (elenafuengar)
- 2025-08-14 docs: add MKL installation and customization instructions (elenafuengar)
- 2025-08-13 tests: retrieve num sockets and cores from lscpu for omp num threads + mem. pinning via KMP affinity (elenafuengar)
- 2025-08-13 tests: add MKL vs scipy test (elenafuengar)
- 2025-08-13 docs: add SWAN badge and tutorial repo to readme (elenafuengar)
- 2025-08-12 refact: one_step routine to private, GPU/CPU share same routine (elenafuengar)
- 2025-08-12 feature: adding MKL backend, refact:one_step routine assignment handled inside init (elenafuengar)
- 2025-08-12 feature: WIP on-the-fly wake potential calculation (elenafuengar)
- 2025-08-12 build: compatibility with numpy2.0+ (elenafuengar)
- 2025-08-12 refactor: one_step func assignment is handled inside solverFIT3D (elenafuengar)
- 2025-08-12 fix: bug in
to_gpu()routine, bug ininspect()when allocating the axes, enforcing memory pinning infromarray()(elenafuengar) - 2025-08-08 feature: speedup by avoiding sparse diag operations during timestepping (elenafuengar)
- 2025-08-08 feature: Add number of threads env variable for MKL backend (elenafuengar)
- 2025-08-08 feature: MKL backend working and added to routines -will be used if it can be imported (elenafuengar)
- 2025-08-08 feature: WIP, explore multithreaded sparsemat-vec operation using MKL backend for scipy (elenafuengar)
- 2025-08-08 feature: add option for grid plotting offscreen for headless-servers. It exports the scene to html file instead (elenafuengar)
- 2025-08-05 test: implementing the 2-timestep ABC BCs and testing with against a planewave (WIP) (elenafuengar)
- 2025-08-05 fix: allow to pass custom transverse slices to WavePacket (elenafuengar)
- 2025-08-05 feature: add
callbackarg that allows to pass a custom function in the form fun(solver, t) right after the timestep update (elenafuengar) - 2025-08-04 feature: ABC boundaries implemented in the
emsolveroutine...
Wakis v0.6.0
Wakis v0.6.0
🚀 New Features
-
🖼️ Plotting
- Unified plotting tools for both MPI and non-MPI simulations.
plot1Dnow supports field visualization independently of MPI use.Plot2Dsupports parallel execution.- Error handling added for
plot3Dandplot3DonSTLwhenuse_mpi = True. - Support for
dpiandreturn_handlesin plot utilities to further customize plots. - Enhanced examples and notebook suite visualization cells.
-
🧱 GridFIT3D
- Added
mpi_initialize()to handle domain decomposition (Z-slicing). - New method
mpi_gather_asGrid()to retrieve the full global grid from distributed subdomains. - Full support for multi-GPU domain decomposition through
cupy(CUDA-aware, Linux only). - Improved communication layer for subdomain synchronization via ghost cells.
- Added
-
⚡ SolverFIT3D
- MPI-compatible time-stepping routine
mpi_one_step()using a leapfrog scheme. mpi_communicate()to send/receive boundary field values between subdomains.mpi_gather()to retrieve field data as a NumPy array andmpi_gather_asField()to reconstruct aFieldobject.- MPI-safe support integrated into
update()and field getter logic. - Introduced
save_state()method for checkpointing during MPI runs together withload_state(). Added support for MPI save state too. - Feature in progress: multiGPU support (
use_GPU=Truewhenuse_MPI=True) for distributed simulations (Linux only!). - Added missing docstrings (Numpy-style)
- MPI-compatible time-stepping routine
-
📥 Sources
- Beam:
- Added
plot(t)to visualize beam current evolution. - Generalized
update()to work with or without MPI. - Enhanced support for time-aligned injection with beta and MPI shifts.
- New example for MPI+GPU simulation (topic in progress).
- Added
- Beam:
-
🌊 WakeSolver
- Refactored to internally store the full longitudinal domain.
skip_cellsnow acts only at analysis level, preserving resolution.add_spaceanduse_edtretained for compatibility, butadd_spaceis deprecated for new parameterskip_cells, more adequate to its utility (i.e. skip cells in the integration path).
- Future-ready structure for distributed wake solving with MPI-aware GPU.
- Improved numerical robustness by preventing indexing errors in
WakePotentialintegration -> solves issue #12 - Enhanced extrapolation method with
iddefix. - New example
004for wakefield simulation with MPI+GPU configuration.
-
🛡️ Security & Documentation
- Added
SECURITY.mdto describe supported versions and vulnerability reporting. - Improved installation guide with Miniforge (supports both Windows/Linux) and MPI setup instructions.
- Added new issue templates for Bug Report and Feature Request with markdown formatting and emojis for readability.
- Addition of the Physics Guide, with detailed physics models and numerical methods explanations.
- User's guide updated to include Wake extrapolation with
iddefix, Wake function calculation withneffint, and power loss calculation withBIHC. - Added a Table of Contents (ToC) to the documentation for easier navigation.
- Expanded installation guide with multiGPU configuration and MPI-aware domain partitioning.
- Added
💗 Other Tag highlights
-
🔁 Nightly tests with GitHub Actions:
- Enabled infrastructure for MPI-based test cases (
test_003,test_005). - Improved test coverage for MPI and GPU simulations.
- MultiGPU end-to-end tests for distributed domain synchronization.
- Enabled infrastructure for MPI-based test cases (
-
📁 Examples:
- notebook
003→ MPI wakefield simulation usingmpi4py. - notebook
005→ Full MPI simulation inside Jupyter usingipyparallel+mpi4py. - New example
003with MPI + GPU configuration for large-scale simulations.
- notebook
-
📁 Notebooks:
005→ Full MPI simulation inside Jupyter usingipyparallel+mpi4py.- New Jupyter notebook showcasing multiGPU configuration.
🐛 Bugfixes
- Fixed crash in
plot3Dandplot3DonSTLwhenuse_mpi=True. - Fixed default
use_mpi=Trueto now default toFalsefor general usage. - Fixed a typo in beam injection routine
solver.z.min(). - Fixed potential rounding error in wake potential integration with negligible performance impact (~0.1ns) -> solves issue #12
- Corrected default beam injection time to align with CST Wakefield Solver reference in beta<1 cases.
- Fixed minor typos in the documentation.
- Fixed synchronization issues with MPI runs when saving states.
- Resolved encoding issues when installing in Windows editable mode.
- Corrected result folder naming in GPU example
002.
👋👩💻 New Contributors
📝 Full changelog
| 78 commits | 📚 Docs | 🧪 Tests | 🐛 Fixes | 🎨 Style | ✨ Features | Other |
|---|---|---|---|---|---|---|
| % of Commits | 30.3% | 10.5% | 9.2% | 10.5% | 22.4% | 17.1 |
Full Changelog: v0.5.1...v0.6.0
Wakis v0.5.1
Wakis v0.5.1
Minor fixes and updates
🚀 New Features
- Plotting
- Allow passing camera position to solver's 3D plots
plot3Dandplor3DnSTL
- Allow passing camera position to solver's 3D plots
💗 Other Tag highlights
- 🔁 Nightly tests with GitHub actions:
- 003 -> coverage for grid
inspectandplot_solid
- 003 -> coverage for grid
- 📁 Examples:
- 003 -> MPI wakefield simulation with
mpi4py
- 003 -> MPI wakefield simulation with
- 📁 Notebooks:
- 005 -> MPI example in jupyter notebooks with
ipyparallel+mpi4py
- 005 -> MPI example in jupyter notebooks with
🐛 Bugfixes
__version__now matches PyPI release and taggridFIT3D.plot_solids()fix typo in the opacity assignmentexample/001fixed stl_solids parameter in grid.inspect() call
📝Full changelog
- 2025-03-12 fix: typo in ocpacity, variable overwritten (elenafuengar)
- 2025-03-12 test: add coverage for grid.inspect and grid.plot_solids (elenafuengar)
- 2025-03-12 fix: add_stl use keys not stl file path, add default parameters and uncomment (elenafuengar)
- 2025-03-11 feature: allow passing camera position as argument on 3D plotting routines (elenafuengar)
- 2025-03-11 test: study different pml_func profiles and compare smoothness and derivatives (elenafuengar)
- 2025-03-10 docs: update release.md for next version (elenafuengar)
- 2025-03-07 docs: update supported python versions 3.8+ <3.12 (elenafuengar)
- 2025-03-07 docs: update version (elenafuengar)
- 2025-03-07 docs: update CITATION.cff with v0.5.0 doi (Elena de la Fuente García)
- 2025-03-07 docs: add zenodo badge to readme.md (Elena de la Fuente García)
Wakis v0.5.0
Wakis v0.5.0
🚀 New Features
-
🧱 Geometry import:
- Functions to read
.STPfiles, exporting each solid into an.STLfile indicating the name and material:wakis.geometry.generate_stl_solids_from_stp(stp_file) - Functions to extract from
.STPfilessolidnames,colors, andmaterials:wakis.geometry.extract_XXX(stp_file)to easily build the input dictionaries needed forGridFIT3D
- Functions to read
-
⚡Solver:
- New maximal timestep calculation for high-conductive regions based on CFL + relaxation time criterion
- New methods:
save_state(),load_state()to export and import the fields at a particular simulation timestep (HDF5 format). Methodreset_fields()to clear fields before restarting a simulation. - Perfect Matching Layers (PML) boundary conditions: First version out!
-
🖼️ Plotting:
solver.plot3DonSTLField on STL solid usingpyvista.sampleinterpolation algorithm- Interactive plane clipping on
plot3DonSTL - Field shown on clipping plane
- Interactive plane clipping on
grid.plot_solids()3D plot with the imported solids and the position in the simulation bounding box whenbounding_box=True
-
📥Sources:
- Add
plot(t)method to plot the source over the simulation timet - Custom amplitude as an attribute
self.amplitude - Custom phase as an attribute
self.phase - Custom injection time
self.tinj - For
PlaneWaveallow for truncation at specific number ofself.nodesinjected
- Add
-
🌱 Ecosytem:
-
Wake extrapolation of partially decayed wakes coupling with [
IDDEFIX]: https://github.com/ImpedanCEI/IDDEFIX:- IDDEFIX is a physics-informed machine learning framework that fits a resonator-based model (parameterized by R, f, Q) to wakefield simulation data using Evolutionary Algorithms. It leverages Differential Evolution to optimize these parameters, enabling efficient classification and extrapolation of electromagnetic wakefield behavior. This allows for reduced simulation time while maintaining long-term accuracy, akin to time-series forecasting in machine learning
-
Impedance to wake function conversion using non-equidistant Fourier transform with: [`neffint]: https://github.com/ImpedanCEI/neffint
- Neffint is an acronym for Non-equidistant Filon Fourier integration. This is a python package for computing Fourier integrals using a method based on Filon's rule with non-equidistant grid spacing.
-
Beam-induced power loss calculations for different beam shapes and filling schemes using ['BIHC`]: https://github.com/ImpedanCEI/BIHC
- Beam Induced Heating Computation (BIHC) tool is a package that allows the estimation of the dissipated power due to the passage of a particle beam inside an accelerator component. The dissipated power value depends on the characteristics of the particle beam (beam spectrum and intensity) and on the characteristics of the considered accelerator component (beam-coupling impedance).
-
💗 Other Tag highlights
- 🔁 Nightly tests with GitHub actions: 000 - 005
- 📁 notebooks: containing interactive examples
- 📁 examples: major cleanup, examples on CPU and GPU
🐛 Bugfixes
- Patch representation when a list is passed in
Plot2D ipympladded as a dependency towakis['notebook']installation- Injection time to account for relativistic beta in sources
👋👩💻New Contributors
- @MaltheRaschke made their first contribution in #4
Full Changelog: v0.4.0...v0.5.0