Releases: detrin/OpenQuantumSystems.jl
Releases · detrin/OpenQuantumSystems.jl
v0.6.0
What's new in v0.6.0
New features
Förster theory (#78)
absorption_spectrumandemission_spectrum— vibronic lineshapes from Franck-Condon factors with Gaussian broadening, temperature-weightedspectral_overlap— overlap integral between donor emission and acceptor absorptionforster_rate(J, donor, acceptor)— Förster EET rate scaling as J²forster_rate_matrix(aggCore)— pairwise rate matrix for all molecules in an aggregate
Modified Redfield theory (#79)
exciton_basis— transform site-basis Hamiltonian to exciton basismodified_redfield_rates— population transfer rates using full non-perturbative lineshape treatmentmodified_redfield_dynamics— time evolution of populations under modified Redfield
Spectral density (#79)
SpectralDensity,spectral_density— bath spectral density from discrete LHO modesreorganization_energy— λ from J(ω)lineshape_function,lineshape_derivative,lineshape_second_derivative— g(t) and derivatives
Transition dipole moments (#80)
TransitionDipole— store 3D position (Å) and dipole vector (Debye)dipole_dipole_coupling— point-dipole J from geometry and orientationcoupling_from_dipoles— full coupling matrix for an aggregateAggregateCore(molecules, dipoles)constructor convenience overload
Corrected memory kernel (#88, #89, #90)
analytic_correlation_nn,analytic_correlation_nn_high_T— closed-form bath correlation functionszeroth_order_memory_kernel_cf,zeroth_order_memory_kernel_high_T— M⁰ from correlation functionsfirst_order_memory_kernel_cf,first_order_memory_kernel_high_T— M¹ with non-equilibrium bath correctioncorrected_rates_cf,corrected_qme_rdm— iterative RDM solver with corrected kernelsite_to_exciton_kernel— transform memory kernel to exciton basis
Bug fixes
- #86 — Fix missing ρ factor in default iterative QME bath correction (
W_abcd_1_bath_core). Thead(rho_t2, W_bath_t2, ...)result was erroneously overwritten with bareW_bath_t2, dropping the ρ_{cd}(t₂) weighting. - #87 — Fix docstring labels M_2, M_3, M_4 in
memory_kernel.jl(all previously said M_1); remove unused type parameters U, V fromQME_sS_exact.
Internal
src/reorganized into subdirectories:base/,aggregate/,evolution/,spectroscopy/,utils/- 5 new test files covering all new features (443 new tests)
- Tutorials: simulation method comparison notebook added
Resolved issues
v0.5.0
What's Changed
New Features
- #68 Add
SimulationResulttype withpopulationsaccessor — consistent return value across all solvers - #71 Add unified
solve()entry point dispatching to all solvers - #75 Add convenience constructors for common systems:
setup_dimer,setup_trimer,setup_linear_chain - #69 Add molecule-only coupling matrix constructor for
AggregateCore— no more +1 ground state offset confusion - #72 Add physical validation functions for density matrix states
Refactoring
- #76 Replace symbol
if/elseifdispatch chains with type dispatch forvib_basis - #66 Standardize all exported function names to snake_case with backward-compatible deprecated aliases
Documentation
- #67 Rewrite dimer tutorial to use current API
- #70 Add naming conventions glossary
- #74 Add solver selection guide
- #73 Fix unit conversion: use Julia
pi, consolidatetspan_cm_to_fs
Developer Experience
- Add
commit-msghook to block Co-Authored-By AI attribution (.githooks/) - Add setup instructions to
CONTRIBUTING.md
Full Changelog: v0.4.0...v0.5.0
v0.4.0
What's Changed
Bug Fixes
- #52 Fix risky divisions in
master_iterative.jl— replace exact==0checks with tolerance-based guards using_safe_div/_safe_invhelpers - #60 Fix unsafe divisions in
trace.jlandrate_constant.jl— same safe division pattern applied throughout - #65 Remove hardcoded
OpenQuantumSystems.module self-references inaggregateTools.jlandtrace.jl
Refactoring
- #61 Extract shared integration setup boilerplate into
_setup_integrationhelper — eliminates ~150 duplicated lines across 4 solver files - #62 Refactor deeply nested
getAggHamInteractioninaggregateOperators.jl— reduced from 5 levels of nesting - #63 Remove
Union{T, Nothing}fields fromAggregatestruct — fields are now non-nullable - #64 Replace hardcoded 2-level system magic numbers with named constants in
molecules.jlandaggregateOperators.jl
Other
- Added
ISSUES.mdwith full code quality audit, UX analysis, and Julia pattern recommendations - Added project-level Claude Code settings (disables co-author attribution)
Full Changelog: v0.3.0...v0.4.0
v0.3.0
What's changed
Code quality & Julia 1.12 compatibility (#50–#58)
- #50 — Refactored
master_ansatz.jl: eliminated 8-way duplication inQME_sI_ansatz_*functions; unified into a singleQME_sI_ansatzwithansatz::Symboldispatch and backward-compatible wrappers - #51 — Refactored
master_iterative.jl: consolidated duplicated solvers intoQME_sI_iterativewithmethod::Symboldispatch; removed all_oldversions - #52 — Fixed risky division in
master_iterative.jlthat could silently produceInf; replaced with safe element-wise inverse - #53 — Replaced
typeof(rho) <: Operatortype-checking anti-pattern with proper Julia dispatch via_to_matrixhelper - #54 — Replaced bare positional parameter tuples in ODE callbacks with
NamedTuplefor clarity and safety - #55 — Added input validation for magic symbol strings (
vib_basis,picture, mode flags) with descriptiveArgumentError - #56 — Fixed potential
nothingreturn intrace.jlwhenvib_basisdoesn't match any branch - #57 — Improved type annotations throughout: replaced bare
::Arraywith::AbstractMatrix/::AbstractVector - #58 — Cleaned up technical debt: removed dead
make.bat, resolved duplicate_to_matrixdefinition
GitHub Actions modernization
- Updated all CI workflows to Julia 1.12
- Updated all action versions (
checkout@v4,setup-julia@v2,julia-actions/cache@v2,codecov@v4) - Fixed
compat-helper.ymlwhich was written in GitLab CI syntax and never ran - Fixed
docs.yml: added missing setup-julia and cache steps, updatedDocumentercompat to v1
Full changelog: v0.2.0...v0.3.0
v0.2.0
OpenQuantumSystems v0.2.0
v0.1.7
OpenQuantumSystems v0.1.7
v0.1.6
v0.1.5
v0.1.4
OpenQuantumSystems v0.1.4
Merged pull requests: