Skip to content

Releases: henry2004y/TestParticle.jl

v0.23.1

21 May 15:36

Choose a tag to compare

TestParticle v0.23.1

Diff since v0.23.0

Merged pull requests:

Closed issues:

  • Periodic BC interpolation error (#527)

v0.23.0

01 May 14:14
554fefe

Choose a tag to compare

TestParticle v0.23.0

Diff since v0.22.0

This is a summary of recent minor releases.

Breaking changes

  • isoutside Refactor: The isoutside (formerly isoutofdomain) callback behavior has been refined. Simulations now terminate exactly at the boundary, and the last point saved is guaranteed to be within the domain.
  • Type System Consolidation: Internal solver types have been consolidated. While common aliases like AdaptiveBoris and MultistepBoris2/4/6 are preserved, code relying on the internal structure of these types may require updates.
  • Dependency Requirements: This version updates the minimum requirements to SciMLBase v3.7 and OrdinaryDiffEq v7. Users may need to update their environment to use these new features.
  • Boris API Rename: The keyword argument for boundary checks in Boris solvers has been unified to isoutside.

New features

  • Unified Boris Solvers: The Boris, Multistep Boris, and Adaptive Boris solvers have been unified into a more flexible type system (Boris{Adaptive} and MultistepBoris{N, Adaptive}).
  • Adaptive High-Order Boris: Support for adaptive time stepping is now available for all Boris-type solvers, including high-order Hyper-Boris methods (orders 4 and 6), via AdaptiveMultistepBoris{N}.
  • Enhanced Ensemble Support: Utility methods like get_particle_fluxes and get_particle_crossings now directly support EnsembleSolution objects, facilitating large-scale particle statistics and detector analysis.
  • Trajectory Intersection: Added get_first_crossing for finding the exact position and velocity where a trajectory intersects geometric surfaces such as Disk, Plane, or Sphere.
  • Polarization Drift Correction: Guided Center (GC) tracing now correctly includes the $E \times B$ velocity term in the polarization drift calculation for improved physical accuracy.
  • Dynamical ODE Support: Added support for dynamical ODE problems, allowing for more complex tracing scenarios.
  • SciML Modernization: Migrated to OrdinaryDiffEq v7 and SciMLBase v3, leveraging the latest performance improvements and the new EnsembleContext interface.

Merged pull requests:

v0.22.0

20 Apr 20:17

Choose a tag to compare

TestParticle v0.22.0

Diff since v0.21.0

Breaking

  • Refactored Boris solvers with similar API interface in OrdinaryDiffEq style
  • Unified internal types for fixed and adaptive timestepping methods

Feature

  • Add a new AdaptiveMultistepBoris solver

Merged pull requests:

Closed issues:

  • trace/GC/Native RK4 benchmark too long (#539)

v0.21.0

13 Apr 20:10

Choose a tag to compare

TestParticle v0.21.0

Diff since v0.20.0

Breaking

  • Interpolator bc type no longer accepts integers; it now relies on the extrapolation options from FastInterpolations.jl. In future versions, we will rework on this with proper treatment of boundary conditions under development.
  • isoutofdomain for Boris solvers are deprecated; use isoutside instead.

Merged pull requests:

v0.20.0

03 Apr 18:46

Choose a tag to compare

TestParticle v0.20.0

Diff since v0.19.8

TestParticle v0.20 Release Notes

TestParticle v0.20 is a major update focused on performance optimization, distributed computing support, and API refinement. Key highlights include optimizations after the migration to FastInterpolations.jl, the addition of the "Hyper Boris" method, and comprehensive support for distributed and multithreaded solvers.


🚀 New Features & Solvers

  • Distributed & Multithreaded Solvers: Full support for distributed Boris solvers and EnsembleSplitThreads integration for adaptive Boris solvers. This enables efficient scaling for large-scale particle simulations across multiple nodes/cores (PR #475, #491, #493).
  • Hyper Boris Method: Introduced a new high-order Boris-like integrator for improved accuracy in complex field geometries (PR #511).
  • Backward Tracing: Added support for backward adaptive Boris tracing, essential for Liouville-based reconstruction (PR #506).
  • Species Generation: New utilities for generating particle distributions, including shifted-energy Maxwellians and sphere generation for boundary conditions (PR #496).
  • SpeciesDict: Added a convenient SpeciesDict for managing multiple species in simulations.

⚡ Performance Enhancements

  • FastInterpolations.jl Integration: Replaced Interpolations.jl with FastInterpolations.jl for field lookups, resulting in significant speedups for both structured and rectilinear grids (PR #486).
  • Allocation Reduction: Major refactoring of get_particle_fluxes and related crossing utilities to minimize allocations, improving performance in ensemble processing (PR #502, #503).
  • Bounds Check Suppression: Suppressed unnecessary bounds checks in hot loops for field interpolators (PR #484).
  • Analytical Derivatives: Shifted to analytical derivatives over Automatic Differentiation (AD) where applicable to reduce computational overhead (PR #488).
  • GC Solver Optimization: Optimized the Guiding Center (GC) solver with internal pre-allocations (PR #471).

🔧 API Changes & Refactoring

  • Consolidated Particle Flux API: Streamlined the API for calculating particle crossings and fluxes, now supporting various detector geometries including spherical and planar detectors (PR #497, #503, #509).
  • Coordinate Conversion Refactoring: Improved and standardized spherical-to-cartesian and cartesian-to-spherical conversion functions (PR #507).
  • Grid Initialization: Optimized RectilinearGrid initialization and improved StructuredGrid support in the prepare pipeline (PR #480, #482).
  • Boris Solver Consolidation: Extracted and unified duplicated setup logic across different Boris solver variants (PR #468).

🛡️ Bug Fixes & Security

  • Memory Safety: Fixed an unbounded memory allocation vulnerability in Boris solvers that could occur under certain field conditions (PR #472).
  • Type Consistency: Ensured type consistency for high-order interpolation types to prevent method dispatch errors (PR #517).
  • Dependency Cleanup: Removed unused dependencies including Statistics and local set_axes_equal utility (PR #470).

📖 Documentation & Benchmarking

  • Scaling Benchmarks: Added a comprehensive suite of benchmarking scripts, including SLURM multinode scaling tests and serial performance trackers (PR #474, #489, #492).
  • Updated Tutorials: Reorganized and refined tutorials and demos to reflect the latest API changes and solver capabilities (PR #494, #515, #519).
  • README Enhancements: Added detailed documentation for the various Boris solvers now available in the package.

This release represents 50+ PRs of improvements since v0.19.0.

Merged pull requests:

  • fix: validate high order interpolation type consistency (#517) (@henry2004y)
  • doc: update numerical check demos (#519) (@henry2004y)
  • refactor: update the design of adaptive Boris solver (#520) (@henry2004y)
  • build(deps): update RecursiveArrayTools requirement from 3 to 3, 4.0 (#521) (@dependabot[bot])

Closed issues:

  • Improving the adaptive Boris solver (#501)

v0.19.8

02 Apr 19:03

Choose a tag to compare

TestParticle v0.19.8

Diff since v0.19.7

Merged pull requests:

Closed issues:

  • Adaptive timestepping scheme validation (#513)

v0.19.7

20 Mar 16:56

Choose a tag to compare

TestParticle v0.19.7

Diff since v0.19.6

Merged pull requests:

v0.19.6

20 Mar 03:55

Choose a tag to compare

TestParticle v0.19.6

Diff since v0.19.5

Merged pull requests:

v0.19.5

18 Mar 19:01

Choose a tag to compare

TestParticle v0.19.5

Diff since v0.19.4

Merged pull requests:

v0.19.4

16 Mar 14:52

Choose a tag to compare

TestParticle v0.19.4

Diff since v0.19.3

Merged pull requests:

Closed issues:

  • Add scaling test results to doc (#476)