Skip to content

Releases: MesoscienceLab/mesohops

MesoHOPS v 1.7.0

Choose a tag to compare

@digbennett digbennett released this 11 May 16:19
4883ee9

This commit upgrades MesoHOPS to support million-state-class adaptive simulations, expands nonlinear spectroscopy to full third-order rephasing/non-rephasing pathways, and includes stability and quality improvements across checkpointing, storage, and core numerical routines.

Key improvements and features:

  1. Million-state-class scalability: Adaptive-basis construction, operator-assembly, and noise-memory bookkeeping were redesigned to remain size-invariant on million-state-class systems. The new HopsNoiseMemory class manages z-memory indexing with O(1) updates as the adaptive basis grows; modes that have left the basis but not yet decayed below precision persist in z_mem until they do, with separate index lists tracking the full set vs. the active subset. Reduced/masked sparse paths were strengthened to avoid full-system constructions in critical routines.

  2. HOPS Nonlinear Spectroscopy (NLS): DyadicSpectra now supports full third-order rephasing and non-rephasing pathways (GSB / SE / ESA) in a unified workflow.

  3. Dyadic checkpoint robustness: Strengthened save/load validation and restore behavior for DyadicTrajectory checkpoints. Selective permanent-state / adaptive interactions added and validated for stable spectroscopy-focused adaptive runs.

  4. Checkpoint storage-time fix: HopsStorage.storage_time is now correctly reloaded from checkpoint data; previously it reset on restore.

  5. Storage default refinement: list_aux_norm is no longer saved by default in HopsStorage; users who depend on it must opt in via storage_dic={'list_aux_norm': True}. Reduces default RAM cost. When z_mem is saved (adaptive checkpoints), list_zmemmodeidx_abs is now auto-enabled so the mode-index mapping survives checkpoint round-trips.

  6. General Brownian-oscillator BCF: bcf_convert_dl_ud_to_exp is removed. Use bcf_convert_bo_to_exp(lambda_bo, gamma_bo, omega_bo, temp, k_matsubara=0) instead. The new function uses an exact contour integration over the upper half-plane and handles both underdamped (γ < Ω) and overdamped (γ > Ω) regimes in one workflow, with optional Matsubara corrections. Critical damping (γ = Ω) raises ValueError; near-critical damping warns. Numerical results for simulations that previously used bcf_convert_dl_ud_to_exp will differ from 1.6.x; re-run convergence checks against the new implementation.

  7. Numerical robustness guards: Divide-by-zero protection added to system and hierarchy timescale calculations.

  8. Vestigial code removal: The unused NoiseTrajectory class was removed.

These enhancements collectively improve the scalability, spectroscopic capability, and numerical robustness of MesoHOPS for current and future applications.

# MesoHOPS 1.6.1

Choose a tag to compare

@digbennett digbennett released this 29 Oct 19:30
a1d1820

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:

  1. 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.
  2. 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.
  3. 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!
  4. Efficient Zero Noise: When noise model “ZERO” is used, HopsNoise RAM usage no longer scales with system size or simulation time.
  5. 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.
  6. Pytest.Raises Standardization: Unit tests checking for correct error messages no longer use try/except clauses and are now tested using pytest.raises
  7. 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.
  8. Version Hash Metadata: Current git commit hash can now be accessed and saved from HopsStorage, allowing users to store the commit hash at runtime.
  9. 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

Choose a tag to compare

@CaptainExasperated CaptainExasperated released this 18 Jun 20:44
5e44fd9

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:

  1. 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.
  2. Adaptive Noise Construction: Noise generation now occurs dynamically as L-operators are introduced into the basis, significantly reducing memory usage for very large systems.
  3. Optimized System Initialization: Enhanced initialization routines in HopsSystem substantially reduce setup time, particularly benefiting large-scale adaptive calculations.
  4. Real-valued Noise Implementation: Added Noise2, a real-valued noise generator suitable for representing time-dependent Hamiltonian dynamics, fully supported by unit tests.
  5. Wavefunction Property Saving: Introduced save_slices() method in HopsTrajectory, enabling users to store arbitrary wavefunction properties at each timestep or at user-defined intervals.
  6. Enhanced Flux Filters: Improved flux filters to seamlessly integrate with adaptive basis generation.
  7. Expanded Storage Functions: Added functionality to HopsStorage for tracking noise memory drift and monitoring the norm of auxiliary wavefunctions.
  8. Benchmarking and Performance Tests: Integrated comprehensive timing tests to benchmark algorithm performance against standard simulation protocols.
  9. Naming Convention Update: Renamed parameter delta_h to delta_a; users should update scripts accordingly to avoid deprecation.
  10. Deprecation of Linear Absorption EOM: Removed linear absorption equation-of-motion (EOM); users should now utilize DyadicSpectra for absorption simulations.
    These enhancements collectively improve the computational efficiency, maintainability, and scalability of MesoHOPS for current and future applications.

MesoHOPS v1.5.0

Choose a tag to compare

@CaptainExasperated CaptainExasperated released this 20 Mar 20:56

This commit presents a major upgrade from the previous version of MesoHOPS, with improvements including:

  1. Added a HopsDyadic class that inherits from HopsTrajectory and manages spectroscopic simulations in doubled system Hilbert space.
  2. 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.
  3. Added spectroscopy analysis tools in utils/spectroscopy_analysis.py
  4. 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.
  5. Added optional time-windowing to HopsNoise, reducing cache time when accessing large noise arrays.

MesoHOPS v1.4

Choose a tag to compare

@digbennett digbennett released this 26 Jan 21:22

This commit presents a major upgrade from the previous version of MesoHops, with improvements including:

  1. Correction of a bug in the calculation of boundary error bounds.
  2. Reduced memory and CPU time when calculating the adaptive basis via Numba implementation and array optimization.
  3. A small flux boundary filter that further improves performance when the basis is large.
  4. Reduced memory and CPU time when calculating the time-derivative operator.
  5. Reduced memory during noise generation.
  6. A low-temperature correction to capture the effects of ultrafast correlation function modes.
  7. An effective integration of the noise to allow accurate calculations with larger time steps.
  8. Improved internal consistency, documentation, and testing.

As a result of these improvements:

  1. MesoHops now depends on Numba.
  2. Maximum hierarchy depth is 255.

MesoHOPS v1.3.0

Choose a tag to compare

@digbennett digbennett released this 29 Jan 18:31

This commit is a major update over the previous version of MesoHOPS including:

  1. 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!
  2. A substantial speed improvement (3-8x faster for large systems)
  3. A modest further improvement in memory when managing a large number of auxiliary wave functions
  4. Some behind the scenes simplifications in the code design that will allow enable future generalizations
  5. 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

Choose a tag to compare

@digbennett digbennett released this 04 Jan 20:56
  1. Corrected a bug in flux filters used for stable hierarchy and stable state errors
  2. Corrected a bug in error_flux_down
  3. Update filters to provide a stiffer error bound by providing an exact calculation of the boundary auxiliary error
  4. Introduced a HopsFluxFilter class to provide easier access to flux filters.
  5. Introduce HopsMode class and updated HopsSystem and HopsHierarchy to provide easier indexing
  6. Introduce a new method to compare auxiliaries with a string hash that provides a speed-up to managing connections between auxiliaries
  7. Improved implementation of eom_hops_ksuper for faster execution

v1.2.0

Choose a tag to compare

@digbennett digbennett released this 28 Jul 17:34

This is large update to the MesoHOPS code that includes a variety of cosmetic updates as well as:

  1. More efficient memory management, particularly for large systems
  2. Faster execution, particularly when there are a large number of auxiliaries
  3. An adaptive linear absorption equation-of-motion
  4. An improved algorithm for constructing hierarchies when using both a large hierarchy depth and aggressive static filters
  5. Improved efficiency of Markovian filtration during adaptive basis updates
  6. 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
  7. A larger variety of options for inputing noise trajectories
  8. Improved random number seeding for noise trajectories of large aggregates
  9. A generalized class for saving data during a trajectory
  10. A helper function for defining Matsubara modes of Drude-Lorentz spectral density
  11. Generalized auxiliary indexing to manage arbitrary size of absolute hierarchy

This update also includes the following bug fixes:

  1. _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
  2. _error_sflux_state: removed a bug that resulted in overestimating error terms
  3. _error_flux_down: removed a bug that could result in underestimated error terms

Version 1.1.0

Choose a tag to compare

@digbennett digbennett released this 10 Mar 00:28

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.