Releases: henry2004y/TestParticle.jl
Releases · henry2004y/TestParticle.jl
v0.23.1
TestParticle v0.23.1
Merged pull requests:
- docs: update the drift demos (#550) (@henry2004y)
- Demo improvements (#551) (@henry2004y)
- refactor: ensure reproducible ensemble simulation via seeding support (#552) (@henry2004y)
- fix: apply proper periodic BC via FastInterpolations' v0.4.11 updates (#554) (@henry2004y)
- Drop SpecialFunctions and update Random seed usage (#555) (@henry2004y)
Closed issues:
- Periodic BC interpolation error (#527)
v0.23.0
TestParticle v0.23.0
This is a summary of recent minor releases.
Breaking changes
isoutsideRefactor: Theisoutside(formerlyisoutofdomain) 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
AdaptiveBorisandMultistepBoris2/4/6are preserved, code relying on the internal structure of these types may require updates. - Dependency Requirements: This version updates the minimum requirements to
SciMLBasev3.7 andOrdinaryDiffEqv7. 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}andMultistepBoris{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_fluxesandget_particle_crossingsnow directly supportEnsembleSolutionobjects, facilitating large-scale particle statistics and detector analysis. -
Trajectory Intersection: Added
get_first_crossingfor finding the exact position and velocity where a trajectory intersects geometric surfaces such asDisk,Plane, orSphere. -
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
OrdinaryDiffEqv7 andSciMLBasev3, leveraging the latest performance improvements and the newEnsembleContextinterface.
Merged pull requests:
- docs: improve the magnetosphere demos (#546) (@henry2004y)
- fix: include ExB calculation in the polarization GC drift (#547) (@henry2004y)
- Migration to OrdinaryDiffEq v7 and SciMLBase v3 (#549) (@henry2004y)
v0.22.0
TestParticle v0.22.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:
- Feat dynamical ODE (#538) (@henry2004y)
- refactor: add maxiters control for GC RK4 (#540) (@henry2004y)
- build(deps): bump julia-actions/setup-julia from 2 to 3 (#542) (@dependabot[bot])
- refactor: combine Boris, MultistepBoris, AdaptiveBoris types (#543) (@henry2004y)
- refactor: unify Boris and AdaptiveBoris (#544) (@henry2004y)
- Feat: boris adaptive multistep (#545) (@henry2004y)
Closed issues:
- trace/GC/Native RK4 benchmark too long (#539)
v0.21.0
TestParticle v0.21.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.
isoutofdomainfor Boris solvers are deprecated; useisoutsideinstead.
Merged pull requests:
- Docs: update phase space demo (#522) (@henry2004y)
- perf: Remove view allocations in get_energy and get_velocity (#524) (@henry2004y)
- Interpolation rework (#526) (@henry2004y)
- doc: update interpolation demo (#528) (@henry2004y)
- build(deps): update Meshes requirement from 0.55, 0.56 to 0.55, 0.56, 0.57 (#529) (@dependabot[bot])
- build(deps): update SciMLBase requirement from 2.24 to 2.24, 3.1 (#530) (@dependabot[bot])
- feat: add utility method for finding trajectory intersection point with a shape (#531) (@henry2004y)
- refactor: remove the last out of domain step when isoutofdomain is used (#532) (@henry2004y)
- Cleanup Boris internals (#534) (@henry2004y)
- Refactor isoutside callback (#537) (@henry2004y)
v0.20.0
TestParticle v0.20.0
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
EnsembleSplitThreadsintegration 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
SpeciesDictfor managing multiple species in simulations.
⚡ Performance Enhancements
- FastInterpolations.jl Integration: Replaced
Interpolations.jlwithFastInterpolations.jlfor field lookups, resulting in significant speedups for both structured and rectilinear grids (PR #486). - Allocation Reduction: Major refactoring of
get_particle_fluxesand 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
RectilinearGridinitialization and improvedStructuredGridsupport in thepreparepipeline (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
Statisticsand localset_axes_equalutility (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
TestParticle v0.19.8
Merged pull requests:
- feat: add velocity flux calculation for various detector geometries (#497) (@henry2004y)
- boris: Replace list comprehensions with map (#498) (@henry2004y)
- Extend vector weights for get_particle_fluxes (#499) (@henry2004y)
- Deprecated grid density (#500) (@henry2004y)
- refactor: reduce allocations in get_particle_fluxes (#502) (@henry2004y)
- refactor particle flux calculations (#503) (@henry2004y)
- Polish fluxes (#504) (@henry2004y)
- refactor: revert to double loops (#505) (@henry2004y)
- feat: support backward adaptive Boris tracing (#506) (@henry2004y)
- Refactor spherical and cartesian conversion functions (#507) (@henry2004y)
- build(deps): bump codecov/codecov-action from 5 to 6 (#508) (@dependabot[bot])
- refactor: cleanup particle flux utility APIs (#509) (@henry2004y)
- feat: Hyper Boris Method (#511) (@henry2004y)
- Add numerical tests from Zenitani (#512) (@henry2004y)
- Refine demos (#515) (@henry2004y)
- Refactor: adaptive solvers (#516) (@henry2004y)
Closed issues:
- Adaptive timestepping scheme validation (#513)
v0.19.7
v0.19.6
TestParticle v0.19.6
Merged pull requests:
- feat: support EnsembleSplitThreads for adaptive Boris solver (#493) (@henry2004y)
- docs: reorganize tutorials (#494) (@henry2004y)
- fix: use proper batch_size for EnsembleSplitThreads (#495) (@henry2004y)
v0.19.5
TestParticle v0.19.5
Merged pull requests:
- feat: support EnsembleSplitThreads (#491) (@henry2004y)
- benchmark: add slurm multinode scaling test (#492) (@henry2004y)
v0.19.4
TestParticle v0.19.4
Merged pull requests:
- build(deps): bump julia-actions/cache from 2 to 3 (#487) (@dependabot[bot])
- refactor: Use analytical derivatives over AD if applicable (#488) (@henry2004y)
- doc: add node scaling results (#489) (@henry2004y)
- refactor: simplify norm (#490) (@henry2004y)
Closed issues:
- Add scaling test results to doc (#476)