Releases: MesoscienceLab/mesohops
# MesoHOPS 1.6.1
MesoHOPS 1.6.1
This commit upgrades MesoHOPS, adding a new trajectory checkpointing system, options for increased HopsStorage efficiency, overhauled initialization of Noise 2, quality-of-life improvements, and various fixes.
Key improvements and features:
- Trajectory Checkpointing: Checkpointing allows the user to save and load a trajectory as a .npz file with options to alter the noise going forward, greatly simplifying advanced sampling techniques. In a similar vein, the HopsSystem object may now be saved and loaded to hasten initialization.
- HopsStorage Step: HopsStorage may now be set to save data from only selected time points, reducing the RAM costs of storing data. This is distinct from the save_slices method of HopsTrajectory, which conveniently saves the data of HopsStorage to disk and has options for slicing and compressing data to reduce hard disk costs.
- Noise2 Input Management: Noise 2 (typically used for thermal noise and the time-dependent portion of the Hamiltonian) is now initialized with its own parameter dictionary and the user may choose whether to make it purely real. Noise 2 is no longer automatically multiplied by two and converted to its real portion by the equation-of-motion: scripts that used noise 2 in the past must be updated to account for this!
- Efficient Zero Noise: When noise model “ZERO” is used, HopsNoise RAM usage no longer scales with system size or simulation time.
- DyadicSpectra Static Filter Input Structure: Updated static filter input structure in DyadicSpectra to properly feed into HopsHierarchy. Checks were added in HopsHierarchy to ensure filters are properly defined for all modes.
- Pytest.Raises Standardization: Unit tests checking for correct error messages no longer use try/except clauses and are now tested using pytest.raises
- Spectral Density Streamlining: bcf_convert_sdl_to_exp has been deprecated, and bcf_convert_dl_to_exp_with_Matsubara has been renamed to bcf_convert_dl_to_exp. For treatment of underdamped modes, we recommend using bcf_convert_dl_ud_to_exp.
- Version Hash Metadata: Current git commit hash can now be accessed and saved from HopsStorage, allowing users to store the commit hash at runtime.
- HopsDyadic Complex Handling: Fixed an issue where the _M2_dyad_conversion method was restricting the matrix elements to be real in the case where the provided matrix is a dense array.
These enhancements collectively improve the computational efficiency, maintainability, and convenience of MesoHOPS for current and future applications.
MesoHOPS v1.6.0
MesoHOPS 1.6.0
This commit provides a significant upgrade of MesoHOPS, ensuring compatibility with Python >=3.12 and adopting a standardized project structure (src/mesohops/) with clearly organized submodules.
Key improvements and features:
- Generalized Adaptive Algorithm: Adaptivity is now generalized to support any set of Hermitian L-operators. This approach remains size-invariant for large aggregates. Refer to the supplemental information in "Characterizing the Role of Peierls Vibrations in Singlet Fission with the Adaptive Hierarchy of Pure States" for further details.
- Adaptive Noise Construction: Noise generation now occurs dynamically as L-operators are introduced into the basis, significantly reducing memory usage for very large systems.
- Optimized System Initialization: Enhanced initialization routines in
HopsSystemsubstantially reduce setup time, particularly benefiting large-scale adaptive calculations. - Real-valued Noise Implementation: Added
Noise2, a real-valued noise generator suitable for representing time-dependent Hamiltonian dynamics, fully supported by unit tests. - Wavefunction Property Saving: Introduced
save_slices()method inHopsTrajectory, enabling users to store arbitrary wavefunction properties at each timestep or at user-defined intervals. - Enhanced Flux Filters: Improved flux filters to seamlessly integrate with adaptive basis generation.
- Expanded Storage Functions: Added functionality to
HopsStoragefor tracking noise memory drift and monitoring the norm of auxiliary wavefunctions. - Benchmarking and Performance Tests: Integrated comprehensive timing tests to benchmark algorithm performance against standard simulation protocols.
- Naming Convention Update: Renamed parameter
delta_htodelta_a; users should update scripts accordingly to avoid deprecation. - Deprecation of Linear Absorption EOM: Removed linear absorption equation-of-motion (EOM); users should now utilize
DyadicSpectrafor absorption simulations.
These enhancements collectively improve the computational efficiency, maintainability, and scalability of MesoHOPS for current and future applications.
MesoHOPS v1.5.0
This commit presents a major upgrade from the previous version of MesoHOPS, with improvements including:
- Added a HopsDyadic class that inherits from HopsTrajectory and manages spectroscopic simulations in doubled system Hilbert space.
- Added a DyadicSpectra class as a user-friendly interface for calculating absorption and fluorescence spectra with HopsDyadic. Note that fluorescence is calculated in the impulsive limit (i.e., the incoming field is a short temporal pulse approximated by a delta function) and assuming the population time is longer than the optical dephasing time.
- Added spectroscopy analysis tools in utils/spectroscopy_analysis.py
- Updated HopsTrajectory._operator to manage the adaptive basis by including all newly-populated states in the basis and re-activating early-time inchworm integration upon use.
- Added optional time-windowing to HopsNoise, reducing cache time when accessing large noise arrays.
MesoHOPS v1.4
This commit presents a major upgrade from the previous version of MesoHops, with improvements including:
- Correction of a bug in the calculation of boundary error bounds.
- Reduced memory and CPU time when calculating the adaptive basis via Numba implementation and array optimization.
- A small flux boundary filter that further improves performance when the basis is large.
- Reduced memory and CPU time when calculating the time-derivative operator.
- Reduced memory during noise generation.
- A low-temperature correction to capture the effects of ultrafast correlation function modes.
- An effective integration of the noise to allow accurate calculations with larger time steps.
- Improved internal consistency, documentation, and testing.
As a result of these improvements:
- MesoHops now depends on Numba.
- Maximum hierarchy depth is 255.
MesoHOPS v1.3.0
This commit is a major update over the previous version of MesoHOPS including:
- The implementation of an adaptive algorithm that works for arbitrary diagonal L-operators. In practice, this means the adHOPS can now be used for multi-particle dynamics!
- A substantial speed improvement (3-8x faster for large systems)
- A modest further improvement in memory when managing a large number of auxiliary wave functions
- Some behind the scenes simplifications in the code design that will allow enable future generalizations
- The noise class has been condensed and now has some additional options for how the uncorrelated noise is initially generated
Starting with this commit, we are implementing levels of testing. For most purposes, pytest -level 1 is sufficient to ensure the code is behaving as expected. pytest -level 2 invokes a much slower set of tests that ensures the random number generators are performing within expected tolerances.
V1.2.1
- Corrected a bug in flux filters used for stable hierarchy and stable state errors
- Corrected a bug in error_flux_down
- Update filters to provide a stiffer error bound by providing an exact calculation of the boundary auxiliary error
- Introduced a HopsFluxFilter class to provide easier access to flux filters.
- Introduce HopsMode class and updated HopsSystem and HopsHierarchy to provide easier indexing
- Introduce a new method to compare auxiliaries with a string hash that provides a speed-up to managing connections between auxiliaries
- Improved implementation of eom_hops_ksuper for faster execution
v1.2.0
This is large update to the MesoHOPS code that includes a variety of cosmetic updates as well as:
- More efficient memory management, particularly for large systems
- Faster execution, particularly when there are a large number of auxiliaries
- An adaptive linear absorption equation-of-motion
- An improved algorithm for constructing hierarchies when using both a large hierarchy depth and aggressive static filters
- Improved efficiency of Markovian filtration during adaptive basis updates
- A noise indexing scheme that ensures two trajectories of different lengths with the same seed will have the same raw noise in the time region where they overlap
- A larger variety of options for inputing noise trajectories
- Improved random number seeding for noise trajectories of large aggregates
- A generalized class for saving data during a trajectory
- A helper function for defining Matsubara modes of Drude-Lorentz spectral density
- Generalized auxiliary indexing to manage arbitrary size of absolute hierarchy
This update also includes the following bug fixes:
- _determine_error_thresh: removed an error for the edge case when, if all error was below error threshold, all basis elements were included in basis
- _error_sflux_state: removed a bug that resulted in overestimating error terms
- _error_flux_down: removed a bug that could result in underestimated error terms
Version 1.1.0
This version includes an update to the adaptive algorithm which improves numerical performance for large aggregates. The bug that caused negative elements in the Hamiltonian to be incorrectly treated when constructing the adaptive basis has been squashed.