Release notes
EXP 7.7.99 (2025-03-12)
New features
The pyEXP CoefStruct::setCoefs() now takes a coefficient array as an argument. This is the recommended method for setting coefficients.
VTK file writing is now standalone. EXP no longer needs VTK-package libraries.
New DiskBulge target density for Cylindrical bases.
Added support for pseudo-force generation for expansions with non-inertial expansion centers.
Added full support for two-dimensional disk bases and two-dimensional disk IC generation. Added a general abstract PolarBasis class to support the two-dimensional disk bases.
Added two-dimensional exponential and Mestel disks with optional inner and outer tapers. These include the three-dimensional gravitational field for halo coupling.
Added point field evaluation to FieldGenerator.
Added velocity field methods, VelocityField, to EXP and pyEXP. Added OutVel class to EXP for writing velocity field coefficients.
General changes
Signs of mSSA PCs have a definite sign convention to ensure repeatability.
Updates for CUDA version >= 12.0 and compliance for latest versions of Clang and Clang++.
Improve data semantics for setMatrix() and createFromArray in pyEXP.
Require a cachename for SL and EOF basis generation.
Implement compatibility with old (buggy) HighFive Eigen wrappers.
Full implementation of the Cube basis in EXP and pyEXP.
Improvements to TableData API in pyEXP.
Make target directory for EXP output files consist between various Output methods.
Remove old, unused, and unsupported bases from EXP.
Bug fixes
std::sqrt is not a constexpr in all cases for Clang++ consistency and consistency with the C++17 standard.
Fix HighFive type mismatches in mSSA cache.
Github action bug fixes and improvements. Improvements to CTest implementation.
Improvements and fixes to coefficient norm consistency.
General improvements to pyEXP exception handling. Try to prevent crashes in favor of standard runtime exception handling.
Fixes to Eigen::Tensor() wrappers in pyEXP.
EXP 7.7.26 (2023-10-02)
General changes
Added code to enforce a sign convention on SL eigenfunctions (SphericalSL) and EOF eigenvectors (Cylindrical). The eigenfunctions from numerical methods can have either sign and still be good eigenvectors. This change ensures a consistent sign even if the basis needs to be remade or slightly tweaked (e.g. remade with larger nmax). Note, however, that older bases will still have arbitrary signs.
You have two options to deal with this:
You can make a new basis and remake your coefficients to take advantage of the new sign convention
Retain and reuse your old bases (see note for SphericalSL below)
Check the orthgonality of adaptive bases on creation and throw exception if they are not sufficiently biorthogonal
Throw exceptions for SL solutions that fall below a reasonable error threshold
Implemented both OpenMP and MPI parallel FieldGenerator evaluation for improved throughput
Improve logged output readability for user with additional formatting
Fixed an error in expMSSA for OpenMP threading on Macs
Cylindrical basis
The density flag is now inactive and deprecated. The density field for cylindrical bases is always computed.
Fixed missing factor of 1/(4*pi) in density field; correct return matrix so the diagonal is 1 for both m=0 and m>0. This was a true bug that would not have affected coefficient computation but would give density fields too large by 4*pi
Spherical Basis
Rename rs to rmapping in pyEXP and EXP
Note the difference between scale and rmapping:
The rmapping parameter is a radial scale is used to map large or infinite ranges to the unit segment for tables.
The scale parameter is linear rescaling of the radius to the original basis. This would be used for tidal truncation, for example.
You can convert an existing basis file, say SLGridSph.cache.tmp to the new attributes with the following Python code:
#!/usr/bin/env python
import h5py
# This will add a new attribute 'rmapping" with the same value as
# 'rs' and update the file.
f = h5py.File('SLGridSph.cache.tmp', 'r+')
f.attrs['rmapping'] = f.attrs['rs']
f.close()
EXP 7.6.0 (2023-02-02)
The stable main branch is merged from the 7.7.18 development branch
This branch will only be updated for bug fixes moving forward
EXP 7.7.18 (2023-01-29)
‘sphereSL’ in pyEXP.basis updated to use rmin from the input table by default
Devel branch and Main now reflect the new versioning policy
New features
Implemented the proposed versioning policy
Bug fixes
pyEXP basis factory for a spherical basis will now use the model table minimum as the default
rmin
value
EXP 7.7.17 (2022-12-05)
New features
Project is now hosted by github
Bug fixes
Many minor pyEXP bug fixes
Documentation
Sphinx/ReadTheDocs writing in progress