Releases: MintonGroup/swiftest
v2024.06.0
Bug Fixes
- Fixed bug that was causing some pl-tp discards to fail due to typos in the snapshot saver argument lists (pl and tp arrays were reversed in some places). #42
Internal Changes
- Updated the gfortran version to 14 for Mac builds so that the homebrew libraries match the compiled libraries. Otherwise, library delocation fails due to identical fortran library names in two different locations.
v2024.04.3
Bug Fixes
- Fixed bug that was causing discards to fail when there were more than one discard in a single step. This was due to not deallocating the
ldiscard
orldiscard_tp
/ldiscard_pl
arrays after they were used. #40
v2024.04.2
Bug Fixes
- Fixed problems that were preventing non pl-pl collision types to be stored in the
collisions.nc
file (thecollisions
Dataset). GH38 - Changed the way that mergers are handled when they would result in a merged body above the spin barrier. These are forced to always be pure hit-and-runs, rather than disruptive hit-and-run.
Internal Changes
- In preparation for a planned release that will use Coarray Fortran to parallelize RMVS runs, we have incorporated the OpenMPI library into the build process. All of the build scripts were overhauled in order to compile with the MPI wrappers.
- A slew of new tests were added to test that collisions were being recorded correctly.
Breaking Changes
- We have dropped support for MacOS-11 from the official PyPI wheels, as the addition of OpenMPI to the build process prevented the wheels from being built on the GitHub runners.
- The structure of the collisions Dataset has been altered to help improve performance in runs with large numbers of collisions and fragmentation. The
name
variable is no longer a dimension-coordinate, as this was causing the Dataset to become unreasonably large when reading in runs with a long history of fragmentation events. Instead, the names of bodies in the before and after stages of a collision are stored as regular variables that are unique to each individual collision. This will prevent thename
variable from needing to be so large, as it only needs to be as long as the maximum number of bodies made in a single collision, rather than the total number of unique bodies every made in all collisions. This means that one cannot select bodies by name using the.sel
method, but instead must use the.where
method to select bodies by name. This change was made to address GH39.
v2024.04.1
Bug Fixes
- Fixed problem that was causing the wrong dimensions to be added to certain variables when calling
swiftest.SwiftestDataset.xv2el
andswiftest.SwiftestDataset.el2xv
. GH31 - Fixed bug that was causing a failure to read in collision Datasets when
dask=True
was set. GH36 - Fixed other minor bugs that only appeared when reading in datasets using Dask.
Internal Changes
- Pinned the h5py package to v3.10.0 because v3.11.0 does not support aarch64 Linux wheels and the build fails on that platform.
v2024.04.0
Bug Fixes
- Fixed the
Simulation._combine_and_fix_dsnew
method so that thename
dimension is not added where not needed. GH33 - Fixed the
Simulation.read_encounter_file
for reading encounter variables due to change in how the encounter data is indexed. GH33 - Fixed bug in the Fortran collision module that was causing
max_rot
to always be set to 0 in Fraggle, causing Fraggle to fail more often due to not being able to satisfy the angular momentum constrain through fragment spin. GH34 - Changed the fortran standard from 2018 to gnu in order to access quad precision by means of the
c_float128
intrinsic iniso_c_binding
. - Fixed bug in Fraggle that was causing a segfault when computing the fragment SFD in Linux. The problem was due to passing a function pointer to a non-module procedure, which is a known issue in the GNU Fortran compiler. The solution was to move the function to a module procedure and pass the module procedure to the function. SO49965980 GH34
Internal Changes
- Updated headers of all build scripts and improved robustness of the
MACOX_DEPLOYMENT_TARGET
versioning determination with a dedicated script - Altered build scripts to build static libraries for all dependencies. These are now linked to the main library, which reduces the number of shared libraries to manage when installing. GH34
v2024.03.4
New Features
- Added a new
swiftest.Simulation.modify_body
method that allows users to change the properties of a body that has already been added to the simulation. This is useful for changing the mass, radius, or other properties of a body after it has been added to the simulation. GH27 - Overhauled how the
swiftest.Simulation.init_cond
Dataset is created. It now reduces the variables and dimensions relative to the originalswiftest.Simulation.data
Dataset, such that only the variables that are needed for the initial conditions are included. For instance, ifinit_cond_format
(orparam['IN_FORM']
) is set toEL
, it removes therh
andvh
variables when creatingswiftest.Simulation.init_cond
, but if it is instead set toXV
(the default), then it removes all the orbital element variables. It also reduces the dataset's variables to either thej2rp2
andj4rp4
or thec_lm
variables if non-spherical central bodies are being used, and retains only the value that is associated with the current central body. These are all still in the original data (though this will get overridden once the simulation is run), allowing you to swap central bodies prior to starting a run. GH27
Bug Fixes
- Fixed bug that was causing the
particle_type
values to be incorrect in some situations. GH28 - Fixed bad values for converting to
cm
units and other issues with unit conversions. GH26
Internal Changes
- Overhauled the build scripts used when calling cibuildwheel to make them more robust across the various platforms we build for. This includes a more robust and consistent way to obtain the paths to compilers that lets us select gfortran-13, gfortran-12, or gfortran as our compiler depending on the availability, which is useful for building in the GitHub runners. GH25
- Added a more comprehensive suite of unit tests, including tests to ensure that the new
swiftest.Simulation.modify_body
method works as expected. GH27 - Upgraded SHTOOLS library version from 4.11.10 to 4.12.2.
- Upgraded to cibuildwheel v2.17.0 to fix a bug that was causing the MacOS build to fail when building on the GitHub runners.
Documentation
- Added IPython blocks to the the user-guide/standalone-executable page to demonstrate the usage of the standalone executable in a real-world scenario.
v2024.03.3
New Features
-
Introduced new classes
swiftest.data.SwiftestDataArray
andswiftest.data.SwiftestDataset
. These are extensions of xarray.DataArray and xarray.Dataset, respectively. These are now used to define the internal data storage attributes, likeswiftest.Simulation.data
,swiftest.Simulation.init_cond
,swiftest.Simulation.collisions
, andswiftest.Simulation.encounters
, as well as methodsswiftest.SwiftestDataset.xv2el
andswiftest.SwiftestDataset.el2xv
. GH24 -
Added binding modules and started writing code to connect the Fortran
el2xv
andxv2el
to Python and removed the Python implementation of these functions. This allows the Python code to call the same Fortran functions for converting state vectors to orbital elements and back again that the core Swiftest code uses, which are nearly identical to the original implementations of these functions written by Martin Duncan in 1992. The functions themselves are accessible viaswiftest.core.el2xv
andswiftest.core.xv2el
. -
The
swiftest.Simulation.add_solar_system_body
andswiftest.Simulation.add_body
methods have been overhauled to make selecting the central body in a more consistent way. Central bodies are now chosen automatically to be the most massive body in the system, and the all other bodies' position and velocity vectors are translated to the central body's frame. We also include a new argument to these functions calledalign_to_central_body_rotation
which can be used to rotate bodies into a frame that is aligned with the central body's rotation vector. This is useful for usingswiftest.Simulation.add_solar_system_body
to set bodies other than the Sun to be the central body, as otherwise it aligns all bodies to the ecliptic. See the documentation on planetocentric initial conditions for details of how this works.
Bug Fixes
- Fixed a problem with length check when passing
ephemeris_id
andname
as scalars. - Added an explicit status variable when adding bodies to ensure that they get counted properly.
Internal Changes
- Updated initial conditions generators to catch more bad or inconsistent inputs and added more tests to cover these cases.
- Updated build script environment variables to help make the MacOS build more robust.
- Improved the efficiency of the
init_cond.solar_system_horizons
function when fetching physical parameters. It can now accept a jpl HorizonsClass object as an argument so that it can re-use a previous query to look for physical parameters, and only execute a new query on analtid
if they are not found. - Switched from using
iso_fortran_env
toiso_c_binding
for basic type definitions in order to make it easier to expose the Fortran library API to Python.
Documentation
- Added a new documentation page to demonstrate the use of the standalone executable.
- Added a new documentation page for setting planetocentric initial conditions.
v2024.03.2
Bug Fixes
- Fixed issue causing the
get_solar_system_body
method to break when using astroquery 0.4.7. Switched to using theephemerides_async
method instead of getting theraw_response
attribute. GH19
v2024.03.1
Bug Fixes
- Fixed problem that was causing the standalone swiftest console executable to not be found on the path when installing from wheel. This has been fixed by wrapping the executable in a Python wrapper called
cli.py
that is used to generate an executable script. - Fixed a bug that that was causing a file read error when reading a copied initial conditions file. This was caused by the file not being closed after being read.
Breaking Changes
- The binary executable has been refactored from
swiftest_driver
toswiftest
Internal Changes
- Addressed an issue where the latest OS X update broke dependency builds, ensuring environment compatibility.
- Streamlined code structure by refactoring
simulation_class
tosimulation
. - Refactored
_bindings
module tocore
. In a future we plan to develop a more extensive core API exposing some of the lower level integration functions from the Fortran side into the Python module. - Removed outdated JOSS paper draft rendering workflow and specific CI/CD action on push to optimize development processes.
- Skipped building the Python 3.12 wheel for linux aarch64 in cibuildwheel due to missing h5py, addressing compatibility issues.
- Modified the dependency build scripts to skip tests when building dependent libraries (namely HDF5, NetCDF-C, and NetCDF-Fortran) in order to speed up the wheel generation on github actions.
Documentation
- Updated development status and primary repository location to keep the community informed.
v2024.03.0
New Features
- Incorporation of SHTOOLS for incorporating gravitational harmonics coefficients into the central body gravity field calculations.
- Introduction of rotation matrix calculations for non-z-axis central body rotation vectors, supporting more accurate precession effects.
- Enhancement of the netCDF output capabilities, including the addition of dimension-coordinates for c_lm arrays and support for spherical harmonics parameters.
Bug Fixes
- Fixed a bug that was causing the spin poles of massive bodies to be calculated incorrectly when pulling ephemerides from JPL/Horizons using swiftest.Simulation.add_solar_system_body
- Correction of various typos and minor bugs across the documentation and codebase, improving clarity and accuracy.
- Fixing of floating underflow errors and adjustments to normalization calculations to reduce computational errors.
Documentation
- Major updates to user guides and API documentation.
Breaking changes
- Support for
python 3.8
has been dropped and the minimum versions of some dependencies were changed.
Package | Old | New |
---|---|---|
python | 3.8 | 3.9 |
numpy | 1.24.3 | 1.26.4 |
scipy | 1.10.1 | 1.12.0 |
matplotlib | 3.7.1 | 3.8.0 |
astropy | 5.2 | 6.0.0 |
dask | 2023.5 | 2024.2.1 |
distributed | 2023.5 | 2024.2.1 |
h5netcdf | 1.1 | 1.3.0 |
h5py | 3.9 | 3.10.0 |
bottleneck | 1.3.5 | 1.3.8 |
cython | 3.0.0 | 3.0.8 |
tqdm | 4.65 | 4.66.2 |