|
1 | 1 |
|
2 | 2 | ## Changelog for the `groan_rs` library
|
3 | 3 |
|
| 4 | +### Version 0.10.0 |
| 5 | + |
| 6 | +#### New XTC Parser |
| 7 | +- Now using [`molly`](https://crates.io/crates/molly) for faster reading of XTC files. Requires the `molly` feature to be active, otherwise the standard `xdrfile` library is used. With `molly` iterating through XTC files is ~50% faster compared to `xdrfile`. |
| 8 | +- Implemented an efficient "partial-frame" XTC reader using `molly`. It attempts to only read atoms of a specified group while ignoring the rest of the atoms. See `GroupXtcReader` and `System::group_xtc_iter` for more information. |
| 9 | +- `GroupXtcReader` implements a new trait `TrajGroupReadOpen`. |
| 10 | + |
| 11 | +#### Integration with the `chemfiles` Library |
| 12 | +- All trajectory file formats supported by `chemfiles` can be now read using `System::traj_iter<ChemfilesReader>`. However, only XTC, TRR, TNG, DCD, Amber NetCDF, and LAMMPSTRJ are independently tested by `groan_rs`. Be careful when working with other file formats since these may not work properly. |
| 13 | +- To enable integration with `chemfiles`, you have to enable the `chemfiles` feature. If you do this, you need to have `cmake` version LOWER than 4.0. |
| 14 | + |
| 15 | +#### More Precise Center of Geometry/Mass Calculations |
| 16 | +- **IMPORTANT Breaking changes:** |
| 17 | + - Implemented the Refined Bai-Breen algorithm similar to the pseudo-center of mass recentering algorithm described in https://arxiv.org/abs/2501.14578. |
| 18 | + - Methods `AtomIteratorWithBox::get_center` and `AtomIteratorWithBox::get_com` using the original Bai-Breen algorithm have been RENAMED to `AtomIteratorWithBox::estimate_center` and `AtomIteratorWithBox::estimate_com`, respectively. |
| 19 | + - Similarly, `System::group_get_center` and `System::group_get_com` have been renamed to `System::group_estimate_center` and `System::group_estimate_com`. |
| 20 | + - New functions called `AtomIteratorWithBox::get_center`, `AtomIteratorWithBox::get_com`, `System::group_get_center`, `System::group_get_com` use the **Refined Bai-Breen algorithm** which consists of 1) calculating the pseudo-center of geometry of the selected atoms, 2) making the group whole in the simulation box, 3) naive calculation of center of geometry or mass in the simulation box. |
| 21 | + - The refined Bai-Breen algorithm is much more precise than the original Bai-Breen algorithm but only works for groups that are smaller than half the simulation box. It is also ~50% slower than the original Bai-Breen algorithm. |
| 22 | + - All internal `groan_rs` methods now use the Refined Bai-Breen algorithm, with the exception of `System::atoms_center` and `System::atoms_center_mass` which continue to use the original Bai-Breen algorithm but are recommended to only be used for visual centering. |
| 23 | + |
| 24 | +#### CellGrid |
| 25 | +- Implemented a `CellGrid` (also known as cell lists) structure for efficient pairwise distance calculations within a cutoff. |
| 26 | +- New atom iterator, `UnorderedAtomIterator`, has been implemented. |
| 27 | +- `System::guess_bonds` has been reimplemented using a `CellGrid` making it **much** more efficient, especially for large systems. |
| 28 | +- **Breaking change:** `System::guess_bonds_parallel` has been removed. (But the new `System::guess_bonds` is now much faster than `System::guess_bonds_parallel` has been.) |
| 29 | + |
| 30 | +#### Hydrogen Bond Analysis |
| 31 | +- Implemented a way to identify hydrogen bonds (`HBondAnalysis`) in a trajectory. The analysis can be performed with any trajectory reader (`HBondTrajRead::hbonds_analyze`). |
| 32 | + |
| 33 | +#### Changes to Trajectory Iteration |
| 34 | +- **Breaking change:** `TrajReadOpen` trait has been renamed to `TrajFullReadOpen`. The original `TrajReadOpen` trait now requires implementing the `initialize` method which can be used to construct either `TrajFullReadOpen` structure |
| 35 | + |
| 36 | +#### Changes to `System::traj_iter_map_reduce` (as is tradition) |
| 37 | +- **Breaking changes:** |
| 38 | + - The `Data` structure in `System::traj_iter_map_reduce` no longer needs to implement `Add`. Instead, it needs to implement `ParallelTrajData` which requires the user to specify how the data structures should be reduced (merged). `ParallelTrajData` also allows the user to provide a custom `initialize` function which accepts thread ID and is automatically called after spawning a thread. This allows the user to implement thread-specific behavior or to properly sort the final results. |
| 39 | + - `System::traj_iter_map_reduce` can be now provided a group name in case a "partial-frame" iteration should be performed. In such case, the provided `Reader` structure must be `GroupXtcReader`. |
| 40 | + - The `Reader` structure in `System::traj_iter_map_reduce` still needs to implement `TrajReadOpen` but it's the new trait (see 'Changes to Trajectory Iteration`). |
| 41 | + - Made error propagation better. If a single thread encounters an error, all other threads will abort within 10 trajectory frames. |
| 42 | + |
| 43 | +#### Expansion of Utilities for Ignoring PBC |
| 44 | +- Introduced `NaiveShape` trait for geometry filtering ignoring PBC and implemented this trait for `Sphere`, `Rectangular`, and `Cylinder`. |
| 45 | +- Implemented `ImmutableAtomIterable::filter_geometry_naive` and `MutableAtomIterable::filter_geometry_naive` for geometry filtering of atoms from iterators ignoring PBC and box dimensions. |
| 46 | + |
| 47 | +#### Other Changes |
| 48 | +- Introduced `Atom::reset_bonded` and `System::clear_bonds` for simpler removal of bonding information. |
| 49 | +- Sodium atoms should be less often misclassified as sulfur when guessing elements. |
| 50 | +- Reworked how groups are stored inside a system. Introduced a new `Groups` structure for storing groups. |
| 51 | +- **Bug fix:** Fixed undefined behavior in xdrfile jumping which lead to TRR files being read incorrectly when using clang. |
| 52 | +- **Bug fix:** Fixed incorrect parsing of some TPR files generated with Gromacs 2025. |
| 53 | + |
| 54 | +*** |
| 55 | + |
4 | 56 | ### Version 0.9.0
|
5 | 57 |
|
6 | 58 | #### Atom Index
|
|
0 commit comments