From bffbd5b77e7c1581d73eb9b5251072218d53e79d Mon Sep 17 00:00:00 2001 From: "Documenter.jl" Date: Wed, 9 Oct 2024 12:30:50 +0000 Subject: [PATCH] build based on d782beb --- dev/.documenter-siteinfo.json | 2 +- dev/ADOs/index.html | 2 +- dev/LS_solvers/index.html | 2 +- dev/ODE_solvers/index.html | 2 +- dev/Parity/index.html | 2 +- dev/bath_boson/Boson_Drude_Lorentz/index.html | 2 +- dev/bath_boson/bosonic_bath_intro/index.html | 2 +- .../bosonic_bath_RWA_intro/index.html | 2 +- dev/bath_fermion/Fermion_Lorentz/index.html | 2 +- .../fermionic_bath_intro/index.html | 2 +- dev/cite/index.html | 2 +- .../SIAM/{e6299970.svg => 04b646b0.svg} | 68 ++++----- dev/examples/SIAM/index.html | 2 +- .../cavityQED/{bb34c928.svg => 00815aae.svg} | 64 ++++----- .../cavityQED/{6268aee5.svg => 2b070ecd.svg} | 132 +++++++++--------- .../cavityQED/{6d65d12c.svg => 57234cb5.svg} | 132 +++++++++--------- .../cavityQED/{de3f84ad.svg => d5feaeaa.svg} | 76 +++++----- .../cavityQED/{c848d6eb.svg => f66672ac.svg} | 64 ++++----- dev/examples/cavityQED/index.html | 10 +- .../{16e958f6.svg => 21303fe2.svg} | 54 +++---- .../{19f6ee44.svg => c4dd9677.svg} | 72 +++++----- dev/examples/dynamical_decoupling/index.html | 4 +- .../{1f62f158.svg => 52c75b56.svg} | 56 ++++---- dev/examples/electronic_current/index.html | 2 +- .../{21969060.svg => 34a058ed.svg} | 54 +++---- .../{d6078d8b.svg => 3ec7c71e.svg} | 62 ++++---- dev/examples/quick_start/index.html | 4 +- dev/extensions/CUDA/index.html | 2 +- dev/heom_matrix/HEOMLS_intro/index.html | 2 +- dev/heom_matrix/M_Boson/index.html | 2 +- dev/heom_matrix/M_Boson_Fermion/index.html | 2 +- dev/heom_matrix/M_Fermion/index.html | 2 +- dev/heom_matrix/master_eq/index.html | 2 +- dev/heom_matrix/schrodinger_eq/index.html | 2 +- dev/hierarchy_dictionary/index.html | 2 +- dev/index.html | 2 +- dev/install/index.html | 2 +- dev/libraryAPI/index.html | 24 ++-- dev/spectrum/index.html | 6 +- dev/stationary_state/index.html | 8 +- dev/time_evolution/index.html | 6 +- 41 files changed, 471 insertions(+), 471 deletions(-) rename dev/examples/SIAM/{e6299970.svg => 04b646b0.svg} (82%) rename dev/examples/cavityQED/{bb34c928.svg => 00815aae.svg} (84%) rename dev/examples/cavityQED/{6268aee5.svg => 2b070ecd.svg} (91%) rename dev/examples/cavityQED/{6d65d12c.svg => 57234cb5.svg} (91%) rename dev/examples/cavityQED/{de3f84ad.svg => d5feaeaa.svg} (87%) rename dev/examples/cavityQED/{c848d6eb.svg => f66672ac.svg} (84%) rename dev/examples/dynamical_decoupling/{16e958f6.svg => 21303fe2.svg} (93%) rename dev/examples/dynamical_decoupling/{19f6ee44.svg => c4dd9677.svg} (91%) rename dev/examples/electronic_current/{1f62f158.svg => 52c75b56.svg} (89%) rename dev/examples/quick_start/{21969060.svg => 34a058ed.svg} (89%) rename dev/examples/quick_start/{d6078d8b.svg => 3ec7c71e.svg} (91%) diff --git a/dev/.documenter-siteinfo.json b/dev/.documenter-siteinfo.json index 81ec3b00..ebad302b 100644 --- a/dev/.documenter-siteinfo.json +++ b/dev/.documenter-siteinfo.json @@ -1 +1 @@ -{"documenter":{"julia_version":"1.11.0","generation_timestamp":"2024-10-09T12:28:30","documenter_version":"1.7.0"}} \ No newline at end of file +{"documenter":{"julia_version":"1.11.0","generation_timestamp":"2024-10-09T12:30:44","documenter_version":"1.7.0"}} \ No newline at end of file diff --git a/dev/ADOs/index.html b/dev/ADOs/index.html index 62b07adb..a772fe16 100644 --- a/dev/ADOs/index.html +++ b/dev/ADOs/index.html @@ -29,4 +29,4 @@ # with a list contains many ADOs ados_list::Vector{ADOs} -Elist = expect(A, ados_list)

Here, Elist contains the expectation values corresponding to the ados_list.

+Elist = expect(A, ados_list)

Here, Elist contains the expectation values corresponding to the ados_list.

diff --git a/dev/LS_solvers/index.html b/dev/LS_solvers/index.html index 3e2b1257..fa5325c5 100644 --- a/dev/LS_solvers/index.html +++ b/dev/LS_solvers/index.html @@ -2,4 +2,4 @@ LinearSolve solvers · Documentation | HierarchicalEOM.jl

LinearSolve solvers

In this page, we list several recommended solvers provided by LinearSolve.jl for solving steadystate and spectrum in hierarchical equations of motion approach.

Remember to import LinearSolve.jl

using LinearSolve

(click here to see the full solver list provided by LinearSolve.jl)

UMFPACKFactorization (Default solver)

This solver performs better when there is more structure to the sparsity pattern (depends on the complexity of your system and baths).

UMFPACKFactorization()

KLUFactorization

This solver performs better when there is less structure to the sparsity pattern (depends on the complexity of your system and baths).

KLUFactorization()

A generic BICGSTAB implementation from Krylov

KrylovJL_BICGSTAB()

Pardiso

This solver is based on Intel openAPI Math Kernel Library (MKL) Pardiso

Note

Using this solver requires adding the package Pardiso.jl, i.e. using Pardiso

using Pardiso
 using LinearSolve
 MKLPardisoFactorize()
-MKLPardisoIterate()
+MKLPardisoIterate() diff --git a/dev/ODE_solvers/index.html b/dev/ODE_solvers/index.html index 9b5f39d7..ef0b5c94 100644 --- a/dev/ODE_solvers/index.html +++ b/dev/ODE_solvers/index.html @@ -1,2 +1,2 @@ -DifferentialEquations solvers · Documentation | HierarchicalEOM.jl

DifferentialEquations solvers

In this page, we list several recommended solvers provided by DifferentialEquations.jl for solving time evolution in hierarchical equations of motion approach.

Remember to import OrdinaryDiffEq.jl (or DifferentialEquations.jl)

using OrdinaryDiffEq ## or "using DifferentialEquations" 

(click here to see the full solver list provided by DifferentialEquations.jl)

For any extra solver options, we can add it in the function HEOMsolve with keyword arguments. These keyword arguments will be directly pass to the solvers in DifferentialEquations (click here to see the documentation for the common solver options)

DP5 (Default solver)

Dormand-Prince's 5/4 Runge-Kutta method. (free 4th order interpolant)

DP5()

RK4

The canonical Runge-Kutta Order 4 method. Uses a defect control for adaptive stepping using maximum error over the whole interval.

RK4()

Tsit5

Tsitouras 5/4 Runge-Kutta method. (free 4th order interpolant).

Tsit5()

Vern7

Verner's “Most Efficient” 7/6 Runge-Kutta method. (lazy 7th order interpolant).

Vern7()

Vern9

Verner's “Most Efficient” 9/8 Runge-Kutta method. (lazy 9th order interpolant)

Vern9()
+DifferentialEquations solvers · Documentation | HierarchicalEOM.jl

DifferentialEquations solvers

In this page, we list several recommended solvers provided by DifferentialEquations.jl for solving time evolution in hierarchical equations of motion approach.

Remember to import OrdinaryDiffEq.jl (or DifferentialEquations.jl)

using OrdinaryDiffEq ## or "using DifferentialEquations" 

(click here to see the full solver list provided by DifferentialEquations.jl)

For any extra solver options, we can add it in the function HEOMsolve with keyword arguments. These keyword arguments will be directly pass to the solvers in DifferentialEquations (click here to see the documentation for the common solver options)

DP5 (Default solver)

Dormand-Prince's 5/4 Runge-Kutta method. (free 4th order interpolant)

DP5()

RK4

The canonical Runge-Kutta Order 4 method. Uses a defect control for adaptive stepping using maximum error over the whole interval.

RK4()

Tsit5

Tsitouras 5/4 Runge-Kutta method. (free 4th order interpolant).

Tsit5()

Vern7

Verner's “Most Efficient” 7/6 Runge-Kutta method. (lazy 7th order interpolant).

Vern7()

Vern9

Verner's “Most Efficient” 9/8 Runge-Kutta method. (lazy 9th order interpolant)

Vern9()
diff --git a/dev/Parity/index.html b/dev/Parity/index.html index 9a44d0ad..8a31a95a 100644 --- a/dev/Parity/index.html +++ b/dev/Parity/index.html @@ -21,4 +21,4 @@ ODD * EVEN # gives ODD ODD * ODD # gives EVEN !EVEN # gives ODD -!ODD # gives EVEN +!ODD # gives EVEN diff --git a/dev/bath_boson/Boson_Drude_Lorentz/index.html b/dev/bath_boson/Boson_Drude_Lorentz/index.html index 89fd6212..965e3ae0 100644 --- a/dev/bath_boson/Boson_Drude_Lorentz/index.html +++ b/dev/bath_boson/Boson_Drude_Lorentz/index.html @@ -19,4 +19,4 @@ W # band-width of the environment kT # the product of the Boltzmann constant k and the absolute temperature T N # Number of exponential terms -bath = Boson_DrudeLorentz_Pade(Vs, Δ, W, kT, N - 1) +bath = Boson_DrudeLorentz_Pade(Vs, Δ, W, kT, N - 1) diff --git a/dev/bath_boson/bosonic_bath_intro/index.html b/dev/bath_boson/bosonic_bath_intro/index.html index e044402f..fc3e594b 100644 --- a/dev/bath_boson/bosonic_bath_intro/index.html +++ b/dev/bath_boson/bosonic_bath_intro/index.html @@ -9,4 +9,4 @@ Bath Exponent with types = "bRI", η = 1.0039844180003819e-6 + 0.0im, γ = 0.6479143347831898 + 0.0im. -Bath Exponent with types = "bRI", η = 3.1005439801387293e-6 + 0.0im, γ = 1.8059644711829272 + 0.0im. +Bath Exponent with types = "bRI", η = 3.1005439801387293e-6 + 0.0im, γ = 1.8059644711829272 + 0.0im. diff --git a/dev/bath_boson_RWA/bosonic_bath_RWA_intro/index.html b/dev/bath_boson_RWA/bosonic_bath_RWA_intro/index.html index 95144215..86c8b58f 100644 --- a/dev/bath_boson_RWA/bosonic_bath_RWA_intro/index.html +++ b/dev/bath_boson_RWA/bosonic_bath_RWA_intro/index.html @@ -11,4 +11,4 @@ Bath Exponent with types = "bE", η = 6.25e-6 - 3.4090909090909113e-6im, γ = 0.05 + 0.005im. -Bath Exponent with types = "bE", η = 0.0 + 3.4090909090909113e-6im, γ = 0.1732050807568877 + 0.005im. +Bath Exponent with types = "bE", η = 0.0 + 3.4090909090909113e-6im, γ = 0.1732050807568877 + 0.005im. diff --git a/dev/bath_fermion/Fermion_Lorentz/index.html b/dev/bath_fermion/Fermion_Lorentz/index.html index 333ab73d..5c33148b 100644 --- a/dev/bath_fermion/Fermion_Lorentz/index.html +++ b/dev/bath_fermion/Fermion_Lorentz/index.html @@ -23,4 +23,4 @@ W # band-width of the environment kT # the product of the Boltzmann constant k and the absolute temperature T N # Number of exponential terms for each correlation functions (C^{+} and C^{-}) -bath = Fermion_Lorentz_Pade(ds, Γ, μ, W, kT, N - 1) +bath = Fermion_Lorentz_Pade(ds, Γ, μ, W, kT, N - 1) diff --git a/dev/bath_fermion/fermionic_bath_intro/index.html b/dev/bath_fermion/fermionic_bath_intro/index.html index 9a52e341..6dab37e1 100644 --- a/dev/bath_fermion/fermionic_bath_intro/index.html +++ b/dev/bath_fermion/fermionic_bath_intro/index.html @@ -11,4 +11,4 @@ Bath Exponent with types = "fE", η = 6.25e-6 - 3.4090909090909113e-6im, γ = 0.05 + 0.005im. -Bath Exponent with types = "fE", η = 0.0 + 3.4090909090909113e-6im, γ = 0.1732050807568877 + 0.005im. +Bath Exponent with types = "fE", η = 0.0 + 3.4090909090909113e-6im, γ = 0.1732050807568877 + 0.005im. diff --git a/dev/cite/index.html b/dev/cite/index.html index de65600b..014b62ba 100644 --- a/dev/cite/index.html +++ b/dev/cite/index.html @@ -16,4 +16,4 @@ author={Huang, Yi-Te and Kuo, Po-Chen and Lambert, Neill and Cirio, Mauro and Cross, Simon and Yang, Shen-Liang and Nori, Franco and Chen, Yueh-Nan}, journal={arXiv preprint arXiv:2306.07522}, year={2023} -} +} diff --git a/dev/examples/SIAM/e6299970.svg b/dev/examples/SIAM/04b646b0.svg similarity index 82% rename from dev/examples/SIAM/e6299970.svg rename to dev/examples/SIAM/04b646b0.svg index a0788a9c..979f40c0 100644 --- a/dev/examples/SIAM/e6299970.svg +++ b/dev/examples/SIAM/04b646b0.svg @@ -1,48 +1,48 @@ - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dev/examples/SIAM/index.html b/dev/examples/SIAM/index.html index 0c43ce89..8538b905 100644 --- a/dev/examples/SIAM/index.html +++ b/dev/examples/SIAM/index.html @@ -61,4 +61,4 @@

Calculate density of states (DOS)

(see also Spectrum)

ωlist = -10:1:10
 dos = DensityOfStates(M_odd, ados_s, d_up, ωlist)
 
-Plots.plot(ωlist, dos)
Example block output

This page was generated using Literate.jl.

+Plots.plot(ωlist, dos)Example block output

This page was generated using Literate.jl.

diff --git a/dev/examples/cavityQED/bb34c928.svg b/dev/examples/cavityQED/00815aae.svg similarity index 84% rename from dev/examples/cavityQED/bb34c928.svg rename to dev/examples/cavityQED/00815aae.svg index 95bd9790..d53eb0b6 100644 --- a/dev/examples/cavityQED/bb34c928.svg +++ b/dev/examples/cavityQED/00815aae.svg @@ -1,46 +1,46 @@ - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dev/examples/cavityQED/6268aee5.svg b/dev/examples/cavityQED/2b070ecd.svg similarity index 91% rename from dev/examples/cavityQED/6268aee5.svg rename to dev/examples/cavityQED/2b070ecd.svg index fd191908..4969c877 100644 --- a/dev/examples/cavityQED/6268aee5.svg +++ b/dev/examples/cavityQED/2b070ecd.svg @@ -1,84 +1,84 @@ - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dev/examples/cavityQED/6d65d12c.svg b/dev/examples/cavityQED/57234cb5.svg similarity index 91% rename from dev/examples/cavityQED/6d65d12c.svg rename to dev/examples/cavityQED/57234cb5.svg index 133c19a5..251b06dc 100644 --- a/dev/examples/cavityQED/6d65d12c.svg +++ b/dev/examples/cavityQED/57234cb5.svg @@ -1,84 +1,84 @@ - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dev/examples/cavityQED/de3f84ad.svg b/dev/examples/cavityQED/d5feaeaa.svg similarity index 87% rename from dev/examples/cavityQED/de3f84ad.svg rename to dev/examples/cavityQED/d5feaeaa.svg index 878d75c9..851c70c7 100644 --- a/dev/examples/cavityQED/de3f84ad.svg +++ b/dev/examples/cavityQED/d5feaeaa.svg @@ -1,52 +1,52 @@ - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dev/examples/cavityQED/c848d6eb.svg b/dev/examples/cavityQED/f66672ac.svg similarity index 84% rename from dev/examples/cavityQED/c848d6eb.svg rename to dev/examples/cavityQED/f66672ac.svg index 44b51dec..34c104a4 100644 --- a/dev/examples/cavityQED/c848d6eb.svg +++ b/dev/examples/cavityQED/f66672ac.svg @@ -1,46 +1,46 @@ - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dev/examples/cavityQED/index.html b/dev/examples/cavityQED/index.html index 235a7608..2bdec41a 100644 --- a/dev/examples/cavityQED/index.html +++ b/dev/examples/cavityQED/index.html @@ -59,7 +59,7 @@ Plots.plot!(tlist_test, imag(Ct2), label = "N=1000 (imag part)", linestyle = :solid, linewidth = 3) Plots.xaxis!("t") -Plots.yaxis!("C(t)")Example block output

Construct HEOMLS matrix

(see also HEOMLS Matrix for Bosonic Baths) Here, we consider an incoherent pumping to the atom, which can be described by an Lindblad dissipator (see here for more details).

Furthermore, we set the important threshold to be 1e-6.

pump = 0.01
+Plots.yaxis!("C(t)")
Example block output

Construct HEOMLS matrix

(see also HEOMLS Matrix for Bosonic Baths) Here, we consider an incoherent pumping to the atom, which can be described by an Lindblad dissipator (see here for more details).

Furthermore, we set the important threshold to be 1e-6.

pump = 0.01
 J_pump = sqrt(pump) * σm'
 
 tier = 2
@@ -118,11 +118,11 @@
     linestyle = [:solid :dash],
 )
 Plots.plot(p1, p2, layout = [1, 1])
-Plots.xaxis!("t")
Example block output

Power spectrum

(see also Spectrum)

ω_list = 1:0.01:3
+Plots.xaxis!("t")
Example block output

Power spectrum

(see also Spectrum)

ω_list = 1:0.01:3
 psd_H = PowerSpectrum(M_Heom, steady_H, a, ω_list)
 
 Plots.plot(ω_list, psd_H, linewidth = 3)
-Plots.xaxis!(L"\omega")
Example block output

Compare with Master Eq. approach

(see also HEOMLS for Master Equations)

The Lindblad master equations which describs the cavity couples to an extra bosonic reservoir with Drude-Lorentzian spectral density is given by

# Drude_Lorentzian spectral density
+Plots.xaxis!(L"\omega")
Example block output

Compare with Master Eq. approach

(see also HEOMLS for Master Equations)

The Lindblad master equations which describs the cavity couples to an extra bosonic reservoir with Drude-Lorentzian spectral density is given by

# Drude_Lorentzian spectral density
 Drude_Lorentz(ω, Γ, W) = 4 * Γ * W * ω / ((ω)^2 + (W)^2)
 
 # Bose-Einstein distribution
@@ -165,8 +165,8 @@
     linestyle = [:solid :dash],
 )
 Plots.plot(p1, p2, layout = [1, 1])
-Plots.xaxis!("t")
Example block output

We can also calculate the power spectrum

ω_list = 1:0.01:3
+Plots.xaxis!("t")
Example block output

We can also calculate the power spectrum

ω_list = 1:0.01:3
 psd_M = PowerSpectrum(M_master, steady_M, a, ω_list)
 
 Plots.plot(ω_list, psd_M, linewidth = 3)
-Plots.xaxis!(L"\omega")
Example block output

Due to the weak coupling between the system and an extra bosonic environment, the Master equation's outcome is expected to be similar to the results obtained from the HEOM method.


This page was generated using Literate.jl.

+Plots.xaxis!(L"\omega")Example block output

Due to the weak coupling between the system and an extra bosonic environment, the Master equation's outcome is expected to be similar to the results obtained from the HEOM method.


This page was generated using Literate.jl.

diff --git a/dev/examples/dynamical_decoupling/16e958f6.svg b/dev/examples/dynamical_decoupling/21303fe2.svg similarity index 93% rename from dev/examples/dynamical_decoupling/16e958f6.svg rename to dev/examples/dynamical_decoupling/21303fe2.svg index b2978995..4f541570 100644 --- a/dev/examples/dynamical_decoupling/16e958f6.svg +++ b/dev/examples/dynamical_decoupling/21303fe2.svg @@ -1,41 +1,41 @@ - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + diff --git a/dev/examples/dynamical_decoupling/19f6ee44.svg b/dev/examples/dynamical_decoupling/c4dd9677.svg similarity index 91% rename from dev/examples/dynamical_decoupling/19f6ee44.svg rename to dev/examples/dynamical_decoupling/c4dd9677.svg index f08829c2..1ff9b0f3 100644 --- a/dev/examples/dynamical_decoupling/19f6ee44.svg +++ b/dev/examples/dynamical_decoupling/c4dd9677.svg @@ -1,50 +1,50 @@ - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dev/examples/dynamical_decoupling/index.html b/dev/examples/dynamical_decoupling/index.html index 2937299e..101425f9 100644 --- a/dev/examples/dynamical_decoupling/index.html +++ b/dev/examples/dynamical_decoupling/index.html @@ -41,7 +41,7 @@ [[pulse(amp_fast, delay, t) for t in tlist], [pulse(amp_slow, delay, t) for t in tlist]], label = ["Fast Pulse" "Slow Pulse"], linestyle = [:solid :dash], -)Example block output

Construct bath objects

We assume the bosonic reservoir to have a Drude-Lorentz Spectral Density, and we utilize the Padé decomposition. Furthermore, the spectral densities depend on the following physical parameters:

  • the coupling strength $\Gamma$ between system and reservoir
  • the band-width $W$
  • the product of the Boltzmann constant $k$ and the absolute temperature $T$ : $kT$
  • the total number of exponentials for the reservoir $(N + 1)$
Γ = 0.0005
+)
Example block output

Construct bath objects

We assume the bosonic reservoir to have a Drude-Lorentz Spectral Density, and we utilize the Padé decomposition. Furthermore, the spectral densities depend on the following physical parameters:

  • the coupling strength $\Gamma$ between system and reservoir
  • the band-width $W$
  • the product of the Boltzmann constant $k$ and the absolute temperature $T$ : $kT$
  • the total number of exponentials for the reservoir $(N + 1)$
Γ = 0.0005
 W = 0.005
 kT = 0.05
 N = 3
@@ -95,4 +95,4 @@
     xlabel = L"t",
     ylabel = L"\rho_{01}",
     grid = false,
-)
Example block output

This example is from QuTiP-BoFiN paper : Phys. Rev. Research 5, 013181 (2023).


This page was generated using Literate.jl.

+)Example block output

This example is from QuTiP-BoFiN paper : Phys. Rev. Research 5, 013181 (2023).


This page was generated using Literate.jl.

diff --git a/dev/examples/electronic_current/1f62f158.svg b/dev/examples/electronic_current/52c75b56.svg similarity index 89% rename from dev/examples/electronic_current/1f62f158.svg rename to dev/examples/electronic_current/52c75b56.svg index 51731eb7..0d1e6a2c 100644 --- a/dev/examples/electronic_current/1f62f158.svg +++ b/dev/examples/electronic_current/52c75b56.svg @@ -1,42 +1,42 @@ - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dev/examples/electronic_current/index.html b/dev/examples/electronic_current/index.html index 3b2d537c..dd51e9f0 100644 --- a/dev/examples/electronic_current/index.html +++ b/dev/examples/electronic_current/index.html @@ -105,4 +105,4 @@ xlabel = "time", ylabel = "Current", grid = false, -)Example block output

Note that this example can also be found in qutip documentation


This page was generated using Literate.jl.

+)Example block output

Note that this example can also be found in qutip documentation


This page was generated using Literate.jl.

diff --git a/dev/examples/quick_start/21969060.svg b/dev/examples/quick_start/34a058ed.svg similarity index 89% rename from dev/examples/quick_start/21969060.svg rename to dev/examples/quick_start/34a058ed.svg index e9bd19e5..de524c15 100644 --- a/dev/examples/quick_start/21969060.svg +++ b/dev/examples/quick_start/34a058ed.svg @@ -1,41 +1,41 @@ - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + diff --git a/dev/examples/quick_start/d6078d8b.svg b/dev/examples/quick_start/3ec7c71e.svg similarity index 91% rename from dev/examples/quick_start/d6078d8b.svg rename to dev/examples/quick_start/3ec7c71e.svg index 0cc30dd7..3b3127ac 100644 --- a/dev/examples/quick_start/d6078d8b.svg +++ b/dev/examples/quick_start/3ec7c71e.svg @@ -1,45 +1,45 @@ - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dev/examples/quick_start/index.html b/dev/examples/quick_start/index.html index 753e7eda..508865cc 100644 --- a/dev/examples/quick_start/index.html +++ b/dev/examples/quick_start/index.html @@ -141,7 +141,7 @@ ) xlabel!("time") -ylabel!("Population")Example block output

Multiple Baths

HierarchicalEOM.jl also supports for system to interact with multiple baths.

All you need to do is to provide a list of baths instead of a single bath

# The system Hamiltonian
+ylabel!("Population")
Example block output

Multiple Baths

HierarchicalEOM.jl also supports for system to interact with multiple baths.

All you need to do is to provide a list of baths instead of a single bath

# The system Hamiltonian
 Hsys = Qobj([
     0.25 1.50 2.50
     1.50 0.75 3.50
@@ -179,4 +179,4 @@
 plot!(tlist, p1, linewidth = 3, linecolor = "orange", label = L"P_1")
 plot!(tlist, p2, linewidth = 3, linecolor = :green, label = L"P_2")
 xlabel!("time")
-ylabel!("Population")
Example block output

Note that this example can also be found in qutip documentation.


This page was generated using Literate.jl.

+ylabel!("Population")Example block output

Note that this example can also be found in qutip documentation.


This page was generated using Literate.jl.

diff --git a/dev/extensions/CUDA/index.html b/dev/extensions/CUDA/index.html index 2ec6420c..17c8e097 100644 --- a/dev/extensions/CUDA/index.html +++ b/dev/extensions/CUDA/index.html @@ -36,4 +36,4 @@ M_odd_gpu = cu(M_odd_cpu) # solve steady state with CPU -ados_ss = steadystate(M_even_cpu);
Note

This extension does not support for solving stationary state on GPU since it is not efficient and might get wrong solutions. If you really want to obtain the stationary state with GPU, you can repeatedly solve the time evolution until you find it.

Solving time evolution with CPU

ados_list_cpu = HEOMsolve(M_even_cpu, ρ0, tlist)

Solving time evolution with GPU

ados_list_gpu = HEOMsolve(M_even_gpu, ρ0, tlist)

Solving Spectrum with CPU

dos_cpu = DensityOfStates(M_odd_cpu, ados_ss, d_up, ωlist)

Solving Spectrum with GPU

dos_gpu = DensityOfStates(M_odd_gpu, ados_ss, d_up, ωlist; solver=KrylovJL_BICGSTAB(rtol=1f-10, atol=1f-12))
+ados_ss = steadystate(M_even_cpu);
Note

This extension does not support for solving stationary state on GPU since it is not efficient and might get wrong solutions. If you really want to obtain the stationary state with GPU, you can repeatedly solve the time evolution until you find it.

Solving time evolution with CPU

ados_list_cpu = HEOMsolve(M_even_cpu, ρ0, tlist)

Solving time evolution with GPU

ados_list_gpu = HEOMsolve(M_even_gpu, ρ0, tlist)

Solving Spectrum with CPU

dos_cpu = DensityOfStates(M_odd_cpu, ados_ss, d_up, ωlist)

Solving Spectrum with GPU

dos_gpu = DensityOfStates(M_odd_gpu, ados_ss, d_up, ωlist; solver=KrylovJL_BICGSTAB(rtol=1f-10, atol=1f-12))
diff --git a/dev/heom_matrix/HEOMLS_intro/index.html b/dev/heom_matrix/HEOMLS_intro/index.html index 5d4b9ad3..08ef58fd 100644 --- a/dev/heom_matrix/HEOMLS_intro/index.html +++ b/dev/heom_matrix/HEOMLS_intro/index.html @@ -21,4 +21,4 @@ M[10, 12] M[2:4, 2:4] M[1,:] -M[:,2] +M[:,2] diff --git a/dev/heom_matrix/M_Boson/index.html b/dev/heom_matrix/M_Boson/index.html index bdd9dbee..6b340cef 100644 --- a/dev/heom_matrix/M_Boson/index.html +++ b/dev/heom_matrix/M_Boson/index.html @@ -14,4 +14,4 @@ M.sup_dim M.parity M.bath -M.hierarchy +M.hierarchy diff --git a/dev/heom_matrix/M_Boson_Fermion/index.html b/dev/heom_matrix/M_Boson_Fermion/index.html index dfd90144..c4de42e3 100644 --- a/dev/heom_matrix/M_Boson_Fermion/index.html +++ b/dev/heom_matrix/M_Boson_Fermion/index.html @@ -18,4 +18,4 @@ M.parity M.Bbath M.Fbath -M.hierarchy +M.hierarchy diff --git a/dev/heom_matrix/M_Fermion/index.html b/dev/heom_matrix/M_Fermion/index.html index b78b8b77..b1f22738 100644 --- a/dev/heom_matrix/M_Fermion/index.html +++ b/dev/heom_matrix/M_Fermion/index.html @@ -14,4 +14,4 @@ M.sup_dim M.parity M.bath -M.hierarchy +M.hierarchy diff --git a/dev/heom_matrix/master_eq/index.html b/dev/heom_matrix/master_eq/index.html index 1ef6d877..1b20c301 100644 --- a/dev/heom_matrix/master_eq/index.html +++ b/dev/heom_matrix/master_eq/index.html @@ -7,4 +7,4 @@ J = [J1, J2, ..., Jn] # jump operators M1_even = addFermionDissipator(M0_even, J) -M1_odd = addFermionDissipator(M0_odd, J) +M1_odd = addFermionDissipator(M0_odd, J) diff --git a/dev/heom_matrix/schrodinger_eq/index.html b/dev/heom_matrix/schrodinger_eq/index.html index 653215dd..e628c437 100644 --- a/dev/heom_matrix/schrodinger_eq/index.html +++ b/dev/heom_matrix/schrodinger_eq/index.html @@ -10,4 +10,4 @@ M.dims M.N M.sup_dim -M.parity +M.parity diff --git a/dev/hierarchy_dictionary/index.html b/dev/hierarchy_dictionary/index.html index 51f2b4f6..e9256987 100644 --- a/dev/hierarchy_dictionary/index.html +++ b/dev/hierarchy_dictionary/index.html @@ -87,4 +87,4 @@ # do some calculations you want end -end +end diff --git a/dev/index.html b/dev/index.html index 8640378c..d8e578f9 100644 --- a/dev/index.html +++ b/dev/index.html @@ -1,2 +1,2 @@ -Introduction · Documentation | HierarchicalEOM.jl

HierarchicalEOM.jl: An efficient Julia framework for Hierarchical Equations of Motion (HEOM) in open quantum systems

HierarchicalEOM.jl is a numerical framework written in Julia. It provides a user-friendly and efficient tool based on hierarchical equations of motion (HEOM) approach to simulate complex open quantum systems, including non-Markovian effects due to non-perturbative interaction with one (or multiple) environment(s). It is built upon QuantumToolbox.jl.

While integrating many of the features present in other open-source HEOM packages, HierarchicalEOM.jl also includes new functionalities, such as the construction of even- and odd-parity HEOM Liouvillian superoperator (HEOMLS) matrices, the estimation of importance values for all auxiliary density operators (ADOs), and the calculation of spectra for both bosonic and fermionic systems.

By wrapping some functions from other Julia packages (DifferentialEquations.jl, LinearSolve.jl and fastExpm.jl), HierarchicalEOM.jl collects different methods and could further optimize the computation for the stationary state, and the time evolution of all ADOs. The required handling of the ADOs multi-indexes is achieved through a user-friendly interface called Hierarchy Dictionary.

HEOM Ecosystem

We believe that HierarchicalEOM.jl will be a valuable tool for researchers working in different fields such as quantum biology, quantum optics, quantum thermodynamics, quantum information, quantum transport, and condensed matter physics.

If you like HierarchicalEOM.jl and find the framework useful in your research, we would be grateful if you could cite our publication [ Commun. Phys. 6, 313 (2023) ] using the bibtex entry here.

+Introduction · Documentation | HierarchicalEOM.jl

HierarchicalEOM.jl: An efficient Julia framework for Hierarchical Equations of Motion (HEOM) in open quantum systems

HierarchicalEOM.jl is a numerical framework written in Julia. It provides a user-friendly and efficient tool based on hierarchical equations of motion (HEOM) approach to simulate complex open quantum systems, including non-Markovian effects due to non-perturbative interaction with one (or multiple) environment(s). It is built upon QuantumToolbox.jl.

While integrating many of the features present in other open-source HEOM packages, HierarchicalEOM.jl also includes new functionalities, such as the construction of even- and odd-parity HEOM Liouvillian superoperator (HEOMLS) matrices, the estimation of importance values for all auxiliary density operators (ADOs), and the calculation of spectra for both bosonic and fermionic systems.

By wrapping some functions from other Julia packages (DifferentialEquations.jl, LinearSolve.jl and fastExpm.jl), HierarchicalEOM.jl collects different methods and could further optimize the computation for the stationary state, and the time evolution of all ADOs. The required handling of the ADOs multi-indexes is achieved through a user-friendly interface called Hierarchy Dictionary.

HEOM Ecosystem

We believe that HierarchicalEOM.jl will be a valuable tool for researchers working in different fields such as quantum biology, quantum optics, quantum thermodynamics, quantum information, quantum transport, and condensed matter physics.

If you like HierarchicalEOM.jl and find the framework useful in your research, we would be grateful if you could cite our publication [ Commun. Phys. 6, 313 (2023) ] using the bibtex entry here.

diff --git a/dev/install/index.html b/dev/install/index.html index 8f132709..d8a0fa9c 100644 --- a/dev/install/index.html +++ b/dev/install/index.html @@ -1,4 +1,4 @@ Installation · Documentation | HierarchicalEOM.jl

Installation

HierarchicalEOM.jl

To install HierarchicalEOM.jl, run the following commands inside Julia's interactive session (also known as REPL):

using Pkg
 Pkg.add("HierarchicalEOM")

Alternatively, this can also be done in Julia's Pkg REPL by pressing the key ] in the REPL to use the package mode, and then type the following command:

(1.10) pkg> add HierarchicalEOM

More information about Julia's package manager can be found at Pkg.jl.

Julia 1.10

HierarchicalEOM.jl requires Julia 1.10 or higher (we dropped Julia 1.9 since ver.2.1.0)

To load the package and check the version information, use the command:

julia> using HierarchicalEOM
-julia> HierarchicalEOM.versioninfo()

QuantumToolbox.jl

HierarchicalEOM.jl is built upon QuantumToolbox.jl, which is a cutting-edge Julia package designed for quantum physics simulations, closely emulating the popular Python QuTiP package. It provides many useful functions to create arbitrary quantum states and operators which can be combined in all the expected ways. It uniquely combines the simplicity and power of Julia with advanced features like GPU acceleration and distributed computing, making simulation of quantum systems more accessible and efficient.

Note

Start from HierarchicalEOM v2.0.0+, the inputs states and operators must be in the type of QuantumObject (defined in QuantumToolbox)

Other Useful Packages

In order to get a better experience and take full advantage of HierarchicalEOM, we recommend to install the following external packages:

DifferentialEquations.jl

DifferentialEquations is needed to provide the low-level ODE solvers especially for solving time evolution. For low dependency usage, users can use OrdinaryDiffEq.jl instead.

LinearSolve.jl

LinearSolve is a unified interface for the linear solving packages of Julia. It interfaces with other packages of the Julia ecosystem to make it easier to test alternative solver packages and pass small types to control algorithm swapping. It is needed to provide the solvers especially for solving stationary state and spectra for both bosonic and fermionic systems.

JLD2.jl

JLD2 saves and loads Julia data structures in a format comprising a subset of HDF5. Because the size of matrix in HierarchicalEOM is usually super large and leads to long time calculation, we support the functionality for saving and loading the HierarchicalEOM-type objects into files by JLD2 >= 0.4.23.

PyPlot.jl

PyPlot.jl provides a Julia interface to the Matplotlib plotting library from Python, and specifically to the matplotlib.pyplot module.

+julia> HierarchicalEOM.versioninfo()

QuantumToolbox.jl

HierarchicalEOM.jl is built upon QuantumToolbox.jl, which is a cutting-edge Julia package designed for quantum physics simulations, closely emulating the popular Python QuTiP package. It provides many useful functions to create arbitrary quantum states and operators which can be combined in all the expected ways. It uniquely combines the simplicity and power of Julia with advanced features like GPU acceleration and distributed computing, making simulation of quantum systems more accessible and efficient.

Note

Start from HierarchicalEOM v2.0.0+, the inputs states and operators must be in the type of QuantumObject (defined in QuantumToolbox)

Other Useful Packages

In order to get a better experience and take full advantage of HierarchicalEOM, we recommend to install the following external packages:

DifferentialEquations.jl

DifferentialEquations is needed to provide the low-level ODE solvers especially for solving time evolution. For low dependency usage, users can use OrdinaryDiffEq.jl instead.

LinearSolve.jl

LinearSolve is a unified interface for the linear solving packages of Julia. It interfaces with other packages of the Julia ecosystem to make it easier to test alternative solver packages and pass small types to control algorithm swapping. It is needed to provide the solvers especially for solving stationary state and spectra for both bosonic and fermionic systems.

JLD2.jl

JLD2 saves and loads Julia data structures in a format comprising a subset of HDF5. Because the size of matrix in HierarchicalEOM is usually super large and leads to long time calculation, we support the functionality for saving and loading the HierarchicalEOM-type objects into files by JLD2 >= 0.4.23.

PyPlot.jl

PyPlot.jl provides a Julia interface to the Matplotlib plotting library from Python, and specifically to the matplotlib.pyplot module.

diff --git a/dev/libraryAPI/index.html b/dev/libraryAPI/index.html index 30929fac..72f7269f 100644 --- a/dev/libraryAPI/index.html +++ b/dev/libraryAPI/index.html @@ -1,49 +1,49 @@ -Library API · Documentation | HierarchicalEOM.jl

Library API

Contents

Index

Bath Module

HierarchicalEOM.Bath.CMethod
C(bath, tlist)

Calculate the correlation function $C(t)$ for a given bosonic bath and time list.

if the input bosonic bath did not apply rotating wave approximation (RWA)

\[C(t)=\sum_{u=\textrm{R},\textrm{I}}(\delta_{u, \textrm{R}} + i\delta_{u, \textrm{I}})C^{u}(t)\]

where

\[C^{u}(t)=\sum_i \eta_i^u e^{-\gamma_i^u t}\]

if the input bosonic bath applies rotating wave approximation (RWA)

\[C^{\nu=\pm}(t)=\sum_i \eta_i^\nu e^{-\gamma_i^\nu t}\]

Parameters

  • bath::BosonBath : The bath object which describes a certain bosonic bath.
  • tlist::AbstractVector: The specific time.

Returns (without RWA)

  • clist::Vector{ComplexF64} : a list of the value of correlation function according to the given time list.

Returns (with RWA)

  • cplist::Vector{ComplexF64} : a list of the value of the absorption ($\nu=+$) correlation function according to the given time list.
  • cmlist::Vector{ComplexF64} : a list of the value of the emission ($\nu=-$) correlation function according to the given time list.
source
HierarchicalEOM.Bath.CMethod
C(bath, tlist)

Calculate the correlation function $C^{\nu=+}(t)$ and $C^{\nu=-}(t)$ for a given fermionic bath and time list. Here, $\nu=+$ represents the absorption process and $\nu=-$ represents the emmision process.

\[C^{\nu=\pm}(t)=\sum_i \eta_i^\nu e^{-\gamma_i^\nu t}\]

Parameters

  • bath::FermionBath : The bath object which describes a certain fermionic bath.
  • tlist::AbstractVector: The specific time.

Returns

  • cplist::Vector{ComplexF64} : a list of the value of the absorption ($\nu=+$) correlation function according to the given time list.
  • cmlist::Vector{ComplexF64} : a list of the value of the emission ($\nu=-$) correlation function according to the given time list.
source
HierarchicalEOM.Bath.ExponentType
struct Exponent

An object which describes a single exponential-expansion term (naively, an excitation mode) within the decomposition of the bath correlation functions.

The expansion of a bath correlation function can be expressed as : $C(t) = \sum_i \eta_i \exp(-\gamma_i t)$.

Fields

  • op::QuantumObject : The system coupling operator according to system-bath interaction.
  • η::Number : the coefficient $\eta_i$ in bath correlation function.
  • γ::Number : the coefficient $\gamma_i$ in bath correlation function.
  • types::String : The type-tag of the exponent.

The different types of the Exponent:

  • "bR" : from real part of bosonic correlation function $C^{u=\textrm{R}}(t)$
  • "bI" : from imaginary part of bosonic correlation function $C^{u=\textrm{I}}(t)$
  • "bRI" : from combined (real and imaginary part) bosonic bath correlation function $C(t)$
  • "bA" : from absorption bosonic correlation function $C^{\nu=+}(t)$
  • "bE" : from emission bosonic correlation function $C^{\nu=-}(t)$
  • "fA" : from absorption fermionic correlation function $C^{\nu=+}(t)$
  • "fE" : from emission fermionic correlation function $C^{\nu=-}(t)$
source
HierarchicalEOM.Bath.BosonBathType
struct BosonBath <: AbstractBath

An object which describes the interaction between system and bosonic bath

Fields

  • bath : the different boson-bath-type objects which describes the interaction between system and bosonic bath
  • op : The system coupling operator, must be Hermitian and, for fermionic systems, even-parity to be compatible with charge conservation.
  • Nterm : the number of exponential-expansion term of correlation functions
  • δ : The approximation discrepancy which is used for adding the terminator to HEOM matrix (see function: addTerminator)

Methods

One can obtain the $k$-th exponent (exponential-expansion term) from bath::BosonBath by calling : bath[k]. HierarchicalEOM.jl also supports the following calls (methods) :

bath[1:k];   # returns a vector which contains the exponents from the `1`-st to the `k`-th term.
+Library API · Documentation | HierarchicalEOM.jl

Library API

Contents

Index

Bath Module

HierarchicalEOM.Bath.CMethod
C(bath, tlist)

Calculate the correlation function $C(t)$ for a given bosonic bath and time list.

if the input bosonic bath did not apply rotating wave approximation (RWA)

\[C(t)=\sum_{u=\textrm{R},\textrm{I}}(\delta_{u, \textrm{R}} + i\delta_{u, \textrm{I}})C^{u}(t)\]

where

\[C^{u}(t)=\sum_i \eta_i^u e^{-\gamma_i^u t}\]

if the input bosonic bath applies rotating wave approximation (RWA)

\[C^{\nu=\pm}(t)=\sum_i \eta_i^\nu e^{-\gamma_i^\nu t}\]

Parameters

  • bath::BosonBath : The bath object which describes a certain bosonic bath.
  • tlist::AbstractVector: The specific time.

Returns (without RWA)

  • clist::Vector{ComplexF64} : a list of the value of correlation function according to the given time list.

Returns (with RWA)

  • cplist::Vector{ComplexF64} : a list of the value of the absorption ($\nu=+$) correlation function according to the given time list.
  • cmlist::Vector{ComplexF64} : a list of the value of the emission ($\nu=-$) correlation function according to the given time list.
source
HierarchicalEOM.Bath.CMethod
C(bath, tlist)

Calculate the correlation function $C^{\nu=+}(t)$ and $C^{\nu=-}(t)$ for a given fermionic bath and time list. Here, $\nu=+$ represents the absorption process and $\nu=-$ represents the emmision process.

\[C^{\nu=\pm}(t)=\sum_i \eta_i^\nu e^{-\gamma_i^\nu t}\]

Parameters

  • bath::FermionBath : The bath object which describes a certain fermionic bath.
  • tlist::AbstractVector: The specific time.

Returns

  • cplist::Vector{ComplexF64} : a list of the value of the absorption ($\nu=+$) correlation function according to the given time list.
  • cmlist::Vector{ComplexF64} : a list of the value of the emission ($\nu=-$) correlation function according to the given time list.
source
HierarchicalEOM.Bath.ExponentType
struct Exponent

An object which describes a single exponential-expansion term (naively, an excitation mode) within the decomposition of the bath correlation functions.

The expansion of a bath correlation function can be expressed as : $C(t) = \sum_i \eta_i \exp(-\gamma_i t)$.

Fields

  • op::QuantumObject : The system coupling operator according to system-bath interaction.
  • η::Number : the coefficient $\eta_i$ in bath correlation function.
  • γ::Number : the coefficient $\gamma_i$ in bath correlation function.
  • types::String : The type-tag of the exponent.

The different types of the Exponent:

  • "bR" : from real part of bosonic correlation function $C^{u=\textrm{R}}(t)$
  • "bI" : from imaginary part of bosonic correlation function $C^{u=\textrm{I}}(t)$
  • "bRI" : from combined (real and imaginary part) bosonic bath correlation function $C(t)$
  • "bA" : from absorption bosonic correlation function $C^{\nu=+}(t)$
  • "bE" : from emission bosonic correlation function $C^{\nu=-}(t)$
  • "fA" : from absorption fermionic correlation function $C^{\nu=+}(t)$
  • "fE" : from emission fermionic correlation function $C^{\nu=-}(t)$
source
HierarchicalEOM.Bath.BosonBathType
struct BosonBath <: AbstractBath

An object which describes the interaction between system and bosonic bath

Fields

  • bath : the different boson-bath-type objects which describes the interaction between system and bosonic bath
  • op : The system coupling operator, must be Hermitian and, for fermionic systems, even-parity to be compatible with charge conservation.
  • Nterm : the number of exponential-expansion term of correlation functions
  • δ : The approximation discrepancy which is used for adding the terminator to HEOM matrix (see function: addTerminator)

Methods

One can obtain the $k$-th exponent (exponential-expansion term) from bath::BosonBath by calling : bath[k]. HierarchicalEOM.jl also supports the following calls (methods) :

bath[1:k];   # returns a vector which contains the exponents from the `1`-st to the `k`-th term.
 bath[1:end]; # returns a vector which contains all the exponential-expansion terms
 bath[:];     # returns a vector which contains all the exponential-expansion terms
 from b in bath
     # do something
-end
source
HierarchicalEOM.Bath.BosonBathMethod
BosonBath(op, η, γ, δ=0.0; combine=true)

Generate BosonBath object for the case where real part and imaginary part of the correlation function are combined.

\[\begin{aligned} +end

source
HierarchicalEOM.Bath.BosonBathMethod
BosonBath(op, η, γ, δ=0.0; combine=true)

Generate BosonBath object for the case where real part and imaginary part of the correlation function are combined.

\[\begin{aligned} C(\tau) &=\frac{1}{2\pi}\int_{0}^{\infty} d\omega J(\omega)\left[n(\omega)e^{i\omega \tau}+(n(\omega)+1)e^{-i\omega \tau}\right]\\ &=\sum_i \eta_i \exp(-\gamma_i \tau), -\end{aligned}\]

where $J(\omega)$ is the spectral density of the bath and $n(\omega)$ represents the Bose-Einstein distribution.

Parameters

  • op::QuantumObject : The system coupling operator, must be Hermitian and, for fermionic systems, even-parity to be compatible with charge conservation.
  • η::Vector{Ti<:Number} : the coefficients $\eta_i$ in bath correlation function $C(\tau)$.
  • γ::Vector{Tj<:Number} : the coefficients $\gamma_i$ in bath correlation function $C(\tau)$.
  • δ::Number : The approximation discrepancy (Default to 0.0) which is used for adding the terminator to HEOM matrix (see function: addTerminator)
  • combine::Bool : Whether to combine the exponential-expansion terms with the same frequency. Defaults to true.
source
HierarchicalEOM.Bath.BosonBathMethod
BosonBath(op, η_real, γ_real, η_imag, γ_imag, δ=0.0; combine=true)

Generate BosonBath object for the case where the correlation function splits into real part and imaginary part.

\[\begin{aligned} +\end{aligned}\]

where $J(\omega)$ is the spectral density of the bath and $n(\omega)$ represents the Bose-Einstein distribution.

Parameters

  • op::QuantumObject : The system coupling operator, must be Hermitian and, for fermionic systems, even-parity to be compatible with charge conservation.
  • η::Vector{Ti<:Number} : the coefficients $\eta_i$ in bath correlation function $C(\tau)$.
  • γ::Vector{Tj<:Number} : the coefficients $\gamma_i$ in bath correlation function $C(\tau)$.
  • δ::Number : The approximation discrepancy (Default to 0.0) which is used for adding the terminator to HEOM matrix (see function: addTerminator)
  • combine::Bool : Whether to combine the exponential-expansion terms with the same frequency. Defaults to true.
source
HierarchicalEOM.Bath.BosonBathMethod
BosonBath(op, η_real, γ_real, η_imag, γ_imag, δ=0.0; combine=true)

Generate BosonBath object for the case where the correlation function splits into real part and imaginary part.

\[\begin{aligned} C(\tau) &=\frac{1}{2\pi}\int_{0}^{\infty} d\omega J(\omega)\left[n(\omega)e^{i\omega \tau}+(n(\omega)+1)e^{-i\omega \tau}\right]\\ &=\sum_i \eta_i \exp(-\gamma_i \tau), -\end{aligned}\]

where $J(\omega)$ is the spectral density of the bath and $n(\omega)$ represents the Bose-Einstein distribution.

When $\gamma_i \neq \gamma_i^*$, a closed form for the HEOM can be obtained by further decomposing $C(\tau)$ into its real (R) and imaginary (I) parts as

\[C(\tau)=\sum_{u=\textrm{R},\textrm{I}}(\delta_{u, \textrm{R}} + i\delta_{u, \textrm{I}})C^{u}(\tau)\]

where $\delta$ is the Kronecker delta function and $C^{u}(\tau)=\sum_i \eta_i^u \exp(-\gamma_i^u \tau)$

Parameters

  • op::QuantumObject : The system coupling operator, must be Hermitian and, for fermionic systems, even-parity to be compatible with charge conservation.
  • η_real::Vector{Ti<:Number} : the coefficients $\eta_i$ in real part of bath correlation function $C^{u=\textrm{R}}$.
  • γ_real::Vector{Tj<:Number} : the coefficients $\gamma_i$ in real part of bath correlation function $C^{u=\textrm{R}}$.
  • η_imag::Vector{Tk<:Number} : the coefficients $\eta_i$ in imaginary part of bath correlation function $C^{u=\textrm{I}}$.
  • γ_imag::Vector{Tl<:Number} : the coefficients $\gamma_i$ in imaginary part of bath correlation function $C^{u=\textrm{I}}$.
  • δ::Number : The approximation discrepancy (Default to 0.0) which is used for adding the terminator to HEOM matrix (see function: addTerminator)
  • combine::Bool : Whether to combine the exponential-expansion terms with the same frequency. Defaults to true.
source
HierarchicalEOM.Bath.bosonRealType
struct bosonReal <: AbstractBosonBath

A bosonic bath for the real part of bath correlation function $C^{u=\textrm{R}}$

Fields

  • Comm : the super-operator (commutator) for the coupling operator.
  • dims : the dimension list of the coupling operator (should be equal to the system dims).
  • η : the coefficients $\eta_i$ in real part of bath correlation function $C^{u=\textrm{R}}$.
  • γ : the coefficients $\gamma_i$ in real part of bath correlation function $C^{u=\textrm{R}}$.
  • Nterm : the number of exponential-expansion term of correlation function
source
HierarchicalEOM.Bath.bosonRealMethod
bosonReal(op, η_real, γ_real)

Generate bosonic bath for the real part of bath correlation function $C^{u=\textrm{R}}$

Parameters

  • op::QuantumObject : The system coupling operator, must be Hermitian and, for fermionic systems, even-parity to be compatible with charge conservation.
  • η_real::Vector{Ti<:Number} : the coefficients $\eta_i$ in real part of bath correlation function $C^{u=\textrm{R}}$.
  • γ_real::Vector{Tj<:Number} : the coefficients $\gamma_i$ in real part of bath correlation function $C^{u=\textrm{R}}$.
source
HierarchicalEOM.Bath.bosonImagType
struct bosonImag <: AbstractBosonBath

A bosonic bath for the imaginary part of bath correlation function $C^{u=\textrm{I}}$

Fields

  • Comm : the super-operator (commutator) for the coupling operator.
  • anComm : the super-operator (anti-commutator) for the coupling operator.
  • dims : the dimension list of the coupling operator (should be equal to the system dims).
  • η : the coefficients $\eta_i$ in imaginary part of bath correlation function $C^{u=\textrm{I}}$.
  • γ : the coefficients $\gamma_i$ in imaginary part of bath correlation function $C^{u=\textrm{I}}$.
  • Nterm : the number of exponential-expansion term of correlation function
source
HierarchicalEOM.Bath.bosonImagMethod
bosonImag(op, η_imag, γ_imag)

Generate bosonic bath for the imaginary part of correlation function $C^{u=\textrm{I}}$

Parameters

  • op::QuantumObject : The system coupling operator, must be Hermitian and, for fermionic systems, even-parity to be compatible with charge conservation.
  • η_imag::Vector{Ti<:Number} : the coefficients $\eta_i$ in imaginary part of bath correlation functions $C^{u=\textrm{I}}$.
  • γ_imag::Vector{Tj<:Number} : the coefficients $\gamma_i$ in imaginary part of bath correlation functions $C^{u=\textrm{I}}$.
source
HierarchicalEOM.Bath.bosonRealImagType
sturct bosonRealImag <: AbstractBosonBath

A bosonic bath which the real part and imaginary part of the bath correlation function are combined

Fields

  • Comm : the super-operator (commutator) for the coupling operator.
  • anComm : the super-operator (anti-commutator) for the coupling operator.
  • dims : the dimension list of the coupling operator (should be equal to the system dims).
  • η_real : the real part of coefficients $\eta_i$ in bath correlation function $\sum_i \eta_i \exp(-\gamma_i t)$.
  • η_imag : the imaginary part of coefficients $\eta_i$ in bath correlation function $\sum_i \eta_i \exp(-\gamma_i t)$.
  • γ : the coefficients $\gamma_i$ in bath correlation function $\sum_i \eta_i \exp(-\gamma_i t)$.
  • Nterm : the number of exponential-expansion term of correlation function
source
HierarchicalEOM.Bath.bosonRealImagMethod
bosonRealImag(op, η_real, η_imag, γ)

Generate bosonic bath which the real part and imaginary part of the bath correlation function are combined

Parameters

  • op::QuantumObject : The system coupling operator, must be Hermitian and, for fermionic systems, even-parity to be compatible with charge conservation.
  • η_real::Vector{Ti<:Number} : the real part of coefficients $\eta_i$ in bath correlation function $\sum_i \eta_i \exp(-\gamma_i t)$.
  • η_imag::Vector{Tj<:Number} : the imaginary part of coefficients $\eta_i$ in bath correlation function $\sum_i \eta_i \exp(-\gamma_i t)$.
  • γ::Vector{Tk<:Number} : the coefficients $\gamma_i$ in bath correlation function $\sum_i \eta_i \exp(-\gamma_i t)$.
source
HierarchicalEOM.Bath.BosonBathRWAFunction
BosonBathRWA(op, η_absorb, γ_absorb, η_emit, γ_emit, δ=0.0)

A function for generating BosonBath object where the interaction between system and bosonic bath applies the rotating wave approximation (RWA).

\[\begin{aligned} +\end{aligned}\]

where $J(\omega)$ is the spectral density of the bath and $n(\omega)$ represents the Bose-Einstein distribution.

When $\gamma_i \neq \gamma_i^*$, a closed form for the HEOM can be obtained by further decomposing $C(\tau)$ into its real (R) and imaginary (I) parts as

\[C(\tau)=\sum_{u=\textrm{R},\textrm{I}}(\delta_{u, \textrm{R}} + i\delta_{u, \textrm{I}})C^{u}(\tau)\]

where $\delta$ is the Kronecker delta function and $C^{u}(\tau)=\sum_i \eta_i^u \exp(-\gamma_i^u \tau)$

Parameters

  • op::QuantumObject : The system coupling operator, must be Hermitian and, for fermionic systems, even-parity to be compatible with charge conservation.
  • η_real::Vector{Ti<:Number} : the coefficients $\eta_i$ in real part of bath correlation function $C^{u=\textrm{R}}$.
  • γ_real::Vector{Tj<:Number} : the coefficients $\gamma_i$ in real part of bath correlation function $C^{u=\textrm{R}}$.
  • η_imag::Vector{Tk<:Number} : the coefficients $\eta_i$ in imaginary part of bath correlation function $C^{u=\textrm{I}}$.
  • γ_imag::Vector{Tl<:Number} : the coefficients $\gamma_i$ in imaginary part of bath correlation function $C^{u=\textrm{I}}$.
  • δ::Number : The approximation discrepancy (Default to 0.0) which is used for adding the terminator to HEOM matrix (see function: addTerminator)
  • combine::Bool : Whether to combine the exponential-expansion terms with the same frequency. Defaults to true.
source
HierarchicalEOM.Bath.bosonRealType
struct bosonReal <: AbstractBosonBath

A bosonic bath for the real part of bath correlation function $C^{u=\textrm{R}}$

Fields

  • Comm : the super-operator (commutator) for the coupling operator.
  • dims : the dimension list of the coupling operator (should be equal to the system dims).
  • η : the coefficients $\eta_i$ in real part of bath correlation function $C^{u=\textrm{R}}$.
  • γ : the coefficients $\gamma_i$ in real part of bath correlation function $C^{u=\textrm{R}}$.
  • Nterm : the number of exponential-expansion term of correlation function
source
HierarchicalEOM.Bath.bosonRealMethod
bosonReal(op, η_real, γ_real)

Generate bosonic bath for the real part of bath correlation function $C^{u=\textrm{R}}$

Parameters

  • op::QuantumObject : The system coupling operator, must be Hermitian and, for fermionic systems, even-parity to be compatible with charge conservation.
  • η_real::Vector{Ti<:Number} : the coefficients $\eta_i$ in real part of bath correlation function $C^{u=\textrm{R}}$.
  • γ_real::Vector{Tj<:Number} : the coefficients $\gamma_i$ in real part of bath correlation function $C^{u=\textrm{R}}$.
source
HierarchicalEOM.Bath.bosonImagType
struct bosonImag <: AbstractBosonBath

A bosonic bath for the imaginary part of bath correlation function $C^{u=\textrm{I}}$

Fields

  • Comm : the super-operator (commutator) for the coupling operator.
  • anComm : the super-operator (anti-commutator) for the coupling operator.
  • dims : the dimension list of the coupling operator (should be equal to the system dims).
  • η : the coefficients $\eta_i$ in imaginary part of bath correlation function $C^{u=\textrm{I}}$.
  • γ : the coefficients $\gamma_i$ in imaginary part of bath correlation function $C^{u=\textrm{I}}$.
  • Nterm : the number of exponential-expansion term of correlation function
source
HierarchicalEOM.Bath.bosonImagMethod
bosonImag(op, η_imag, γ_imag)

Generate bosonic bath for the imaginary part of correlation function $C^{u=\textrm{I}}$

Parameters

  • op::QuantumObject : The system coupling operator, must be Hermitian and, for fermionic systems, even-parity to be compatible with charge conservation.
  • η_imag::Vector{Ti<:Number} : the coefficients $\eta_i$ in imaginary part of bath correlation functions $C^{u=\textrm{I}}$.
  • γ_imag::Vector{Tj<:Number} : the coefficients $\gamma_i$ in imaginary part of bath correlation functions $C^{u=\textrm{I}}$.
source
HierarchicalEOM.Bath.bosonRealImagType
sturct bosonRealImag <: AbstractBosonBath

A bosonic bath which the real part and imaginary part of the bath correlation function are combined

Fields

  • Comm : the super-operator (commutator) for the coupling operator.
  • anComm : the super-operator (anti-commutator) for the coupling operator.
  • dims : the dimension list of the coupling operator (should be equal to the system dims).
  • η_real : the real part of coefficients $\eta_i$ in bath correlation function $\sum_i \eta_i \exp(-\gamma_i t)$.
  • η_imag : the imaginary part of coefficients $\eta_i$ in bath correlation function $\sum_i \eta_i \exp(-\gamma_i t)$.
  • γ : the coefficients $\gamma_i$ in bath correlation function $\sum_i \eta_i \exp(-\gamma_i t)$.
  • Nterm : the number of exponential-expansion term of correlation function
source
HierarchicalEOM.Bath.bosonRealImagMethod
bosonRealImag(op, η_real, η_imag, γ)

Generate bosonic bath which the real part and imaginary part of the bath correlation function are combined

Parameters

  • op::QuantumObject : The system coupling operator, must be Hermitian and, for fermionic systems, even-parity to be compatible with charge conservation.
  • η_real::Vector{Ti<:Number} : the real part of coefficients $\eta_i$ in bath correlation function $\sum_i \eta_i \exp(-\gamma_i t)$.
  • η_imag::Vector{Tj<:Number} : the imaginary part of coefficients $\eta_i$ in bath correlation function $\sum_i \eta_i \exp(-\gamma_i t)$.
  • γ::Vector{Tk<:Number} : the coefficients $\gamma_i$ in bath correlation function $\sum_i \eta_i \exp(-\gamma_i t)$.
source
HierarchicalEOM.Bath.BosonBathRWAFunction
BosonBathRWA(op, η_absorb, γ_absorb, η_emit, γ_emit, δ=0.0)

A function for generating BosonBath object where the interaction between system and bosonic bath applies the rotating wave approximation (RWA).

\[\begin{aligned} C^{\nu=+}(\tau) &=\frac{1}{2\pi}\int_{0}^{\infty} d\omega J(\omega) n(\omega) e^{i\omega \tau}\\ &=\sum_i \eta_i^{\nu=+} \exp(-\gamma_i^{\nu=+} \tau),\\ C^{\nu=-}(\tau) &=\frac{1}{2\pi}\int_{0}^{\infty} d\omega J(\omega) (1+n(\omega)) e^{-i\omega \tau}\\ &=\sum_i \eta_i^{\nu=-} \exp(-\gamma_i^{\nu=-} \tau), -\end{aligned}\]

where $\nu=+$ ($\nu=-$) represents absorption (emission) process, $J(\omega)$ is the spectral density of the bath and $n(\omega)$ is the Bose-Einstein distribution.

Parameters

  • op::QuantumObject : The system annihilation operator according to the system-bosonic-bath interaction.
  • η_absorb::Vector{Ti<:Number} : the coefficients $\eta_i$ of absorption bath correlation function $C^{\nu=+}(\tau)$.
  • γ_absorb::Vector{Tj<:Number} : the coefficients $\gamma_i$ of absorption bath correlation function $C^{\nu=+}(\tau)$.
  • η_emit::Vector{Tk<:Number} : the coefficients $\eta_i$ of emission bath correlation function $C^{\nu=-}(\tau)$.
  • γ_emit::Vector{Tl<:Number} : the coefficients $\gamma_i$ of emission bath correlation function $C^{\nu=-}(\tau)$.
  • δ::Number : The approximation discrepancy (Defaults to 0.0) which is used for adding the terminator to HEOMLS matrix (see function: addTerminator)
source
HierarchicalEOM.Bath.bosonAbsorbType
struct bosonAbsorb <: AbstractBosonBath

An bath object which describes the absorption process of the bosonic system by a correlation function $C^{\nu=+}$

Fields

  • spre : the super-operator (left side operator multiplication) for the coupling operator.
  • spost : the super-operator (right side operator multiplication) for the coupling operator.
  • CommD : the super-operator (commutator) for the adjoint of the coupling operator.
  • dims : the dimension list of the coupling operator (should be equal to the system dims).
  • η : the coefficients $\eta_i$ of absorption bath correlation function $C^{\nu=+}$.
  • γ : the coefficients $\gamma_i$ of absorption bath correlation function $C^{\nu=+}$.
  • η_emit : the coefficients $\eta_i$ of emission bath correlation function $C^{\nu=-}$.
  • Nterm : the number of exponential-expansion term of correlation function
source
HierarchicalEOM.Bath.bosonAbsorbMethod
bosonAbsorb(op, η_absorb, γ_absorb, η_emit)

Generate bosonic bath which describes the absorption process of the bosonic system by a correlation function $C^{\nu=+}$

Parameters

  • op::QuantumObject : The system creation operator according to the system-fermionic-bath interaction.
  • η_absorb::Vector{Ti<:Number} : the coefficients $\eta_i$ of absorption bath correlation function $C^{\nu=+}$.
  • γ_absorb::Vector{Tj<:Number} : the coefficients $\gamma_i$ of absorption bath correlation function $C^{\nu=+}$.
  • η_emit::Vector{Tk<:Number} : the coefficients $\eta_i$ of emission bath correlation function $C^{\nu=-}$.
source
HierarchicalEOM.Bath.bosonEmitType
struct bosonEmit <: AbstractBosonBath

An bath object which describes the emission process of the bosonic system by a correlation function $C^{\nu=-}$

Fields

  • spre : the super-operator (left side operator multiplication) for the coupling operator.
  • spost : the super-operator (right side operator multiplication) for the coupling operator.
  • CommD : the super-operator (commutator) for the adjoint of the coupling operator.
  • dims : the dimension list of the coupling operator (should be equal to the system dims).
  • η : the coefficients $\eta_i$ of emission bath correlation function $C^{\nu=-}$.
  • γ : the coefficients $\gamma_i$ of emission bath correlation function $C^{\nu=-}$.
  • η_absorb : the coefficients $\eta_i$ of absorption bath correlation function $C^{\nu=+}$.
  • Nterm : the number of exponential-expansion term of correlation function
source
HierarchicalEOM.Bath.bosonEmitMethod
bosonEmit(op, η_emit, γ_emit, η_absorb)

Generate bosonic bath which describes the emission process of the bosonic system by a correlation function $C^{\nu=-}$

Parameters

  • op::QuantumObject : The system annihilation operator according to the system-bosonic-bath interaction.
  • η_emit::Vector{Ti<:Number} : the coefficients $\eta_i$ of emission bath correlation function $C^{\nu=-}$.
  • γ_emit::Vector{Ti<:Number} : the coefficients $\gamma_i$ of emission bath correlation function $C^{\nu=-}$.
  • η_absorb::Vector{Ti<:Number} : the coefficients $\eta_i$ of absorption bath correlation function $C^{\nu=+}$.
source
HierarchicalEOM.Bath.FermionBathType
struct FermionBath <: AbstractBath

An object which describes the interaction between system and fermionic bath

Fields

  • bath : the different fermion-bath-type objects which describes the interaction
  • op : The system "emission" operator according to the system-fermionic-bath interaction.
  • Nterm : the number of exponential-expansion term of correlation functions
  • δ : The approximation discrepancy which is used for adding the terminator to HEOM matrix (see function: addTerminator)

Methods

One can obtain the $k$-th exponent (exponential-expansion term) from bath::FermionBath by calling : bath[k]. HierarchicalEOM.jl also supports the following calls (methods) :

bath[1:k];   # returns a vector which contains the exponents from the `1`-st to the `k`-th term.
+\end{aligned}\]

where $\nu=+$ ($\nu=-$) represents absorption (emission) process, $J(\omega)$ is the spectral density of the bath and $n(\omega)$ is the Bose-Einstein distribution.

Parameters

  • op::QuantumObject : The system annihilation operator according to the system-bosonic-bath interaction.
  • η_absorb::Vector{Ti<:Number} : the coefficients $\eta_i$ of absorption bath correlation function $C^{\nu=+}(\tau)$.
  • γ_absorb::Vector{Tj<:Number} : the coefficients $\gamma_i$ of absorption bath correlation function $C^{\nu=+}(\tau)$.
  • η_emit::Vector{Tk<:Number} : the coefficients $\eta_i$ of emission bath correlation function $C^{\nu=-}(\tau)$.
  • γ_emit::Vector{Tl<:Number} : the coefficients $\gamma_i$ of emission bath correlation function $C^{\nu=-}(\tau)$.
  • δ::Number : The approximation discrepancy (Defaults to 0.0) which is used for adding the terminator to HEOMLS matrix (see function: addTerminator)
source
HierarchicalEOM.Bath.bosonAbsorbType
struct bosonAbsorb <: AbstractBosonBath

An bath object which describes the absorption process of the bosonic system by a correlation function $C^{\nu=+}$

Fields

  • spre : the super-operator (left side operator multiplication) for the coupling operator.
  • spost : the super-operator (right side operator multiplication) for the coupling operator.
  • CommD : the super-operator (commutator) for the adjoint of the coupling operator.
  • dims : the dimension list of the coupling operator (should be equal to the system dims).
  • η : the coefficients $\eta_i$ of absorption bath correlation function $C^{\nu=+}$.
  • γ : the coefficients $\gamma_i$ of absorption bath correlation function $C^{\nu=+}$.
  • η_emit : the coefficients $\eta_i$ of emission bath correlation function $C^{\nu=-}$.
  • Nterm : the number of exponential-expansion term of correlation function
source
HierarchicalEOM.Bath.bosonAbsorbMethod
bosonAbsorb(op, η_absorb, γ_absorb, η_emit)

Generate bosonic bath which describes the absorption process of the bosonic system by a correlation function $C^{\nu=+}$

Parameters

  • op::QuantumObject : The system creation operator according to the system-fermionic-bath interaction.
  • η_absorb::Vector{Ti<:Number} : the coefficients $\eta_i$ of absorption bath correlation function $C^{\nu=+}$.
  • γ_absorb::Vector{Tj<:Number} : the coefficients $\gamma_i$ of absorption bath correlation function $C^{\nu=+}$.
  • η_emit::Vector{Tk<:Number} : the coefficients $\eta_i$ of emission bath correlation function $C^{\nu=-}$.
source
HierarchicalEOM.Bath.bosonEmitType
struct bosonEmit <: AbstractBosonBath

An bath object which describes the emission process of the bosonic system by a correlation function $C^{\nu=-}$

Fields

  • spre : the super-operator (left side operator multiplication) for the coupling operator.
  • spost : the super-operator (right side operator multiplication) for the coupling operator.
  • CommD : the super-operator (commutator) for the adjoint of the coupling operator.
  • dims : the dimension list of the coupling operator (should be equal to the system dims).
  • η : the coefficients $\eta_i$ of emission bath correlation function $C^{\nu=-}$.
  • γ : the coefficients $\gamma_i$ of emission bath correlation function $C^{\nu=-}$.
  • η_absorb : the coefficients $\eta_i$ of absorption bath correlation function $C^{\nu=+}$.
  • Nterm : the number of exponential-expansion term of correlation function
source
HierarchicalEOM.Bath.bosonEmitMethod
bosonEmit(op, η_emit, γ_emit, η_absorb)

Generate bosonic bath which describes the emission process of the bosonic system by a correlation function $C^{\nu=-}$

Parameters

  • op::QuantumObject : The system annihilation operator according to the system-bosonic-bath interaction.
  • η_emit::Vector{Ti<:Number} : the coefficients $\eta_i$ of emission bath correlation function $C^{\nu=-}$.
  • γ_emit::Vector{Ti<:Number} : the coefficients $\gamma_i$ of emission bath correlation function $C^{\nu=-}$.
  • η_absorb::Vector{Ti<:Number} : the coefficients $\eta_i$ of absorption bath correlation function $C^{\nu=+}$.
source
HierarchicalEOM.Bath.FermionBathType
struct FermionBath <: AbstractBath

An object which describes the interaction between system and fermionic bath

Fields

  • bath : the different fermion-bath-type objects which describes the interaction
  • op : The system "emission" operator according to the system-fermionic-bath interaction.
  • Nterm : the number of exponential-expansion term of correlation functions
  • δ : The approximation discrepancy which is used for adding the terminator to HEOM matrix (see function: addTerminator)

Methods

One can obtain the $k$-th exponent (exponential-expansion term) from bath::FermionBath by calling : bath[k]. HierarchicalEOM.jl also supports the following calls (methods) :

bath[1:k];   # returns a vector which contains the exponents from the `1`-st to the `k`-th term.
 bath[1:end]; # returns a vector which contains all the exponential-expansion terms
 bath[:];     # returns a vector which contains all the exponential-expansion terms
 from b in bath
     # do something
-end
source
HierarchicalEOM.Bath.FermionBathMethod
FermionBath(op, η_absorb, γ_absorb, η_emit, γ_emit, δ=0.0)

Generate FermionBath object

\[\begin{aligned} C^{\nu=+}(\tau) &=\frac{1}{2\pi}\int_{-\infty}^{\infty} d\omega J(\omega) n(\omega) e^{i\omega \tau}\\ &=\sum_i \eta_i^{\nu=+} \exp(-\gamma_i^{\nu=+} \tau),\\ C^{\nu=-}(\tau) &=\frac{1}{2\pi}\int_{-\infty}^{\infty} d\omega J(\omega) (1-n(\omega)) e^{-i\omega \tau}\\ &=\sum_i \eta_i^{\nu=-} \exp(-\gamma_i^{\nu=-} \tau), -\end{aligned}\]

where $\nu=+$ ($\nu=-$) represents absorption (emission) process, $J(\omega)$ is the spectral density of the bath and $n(\omega)$ is the Fermi-Dirac distribution.

Parameters

  • op::QuantumObject : The system annihilation operator according to the system-fermionic-bath interaction.
  • η_absorb::Vector{Ti<:Number} : the coefficients $\eta_i$ of absorption bath correlation function $C^{\nu=+}(\tau)$.
  • γ_absorb::Vector{Tj<:Number} : the coefficients $\gamma_i$ of absorption bath correlation function $C^{\nu=+}(\tau)$.
  • η_emit::Vector{Tk<:Number} : the coefficients $\eta_i$ of emission bath correlation function $C^{\nu=-}(\tau)$.
  • γ_emit::Vector{Tl<:Number} : the coefficients $\gamma_i$ of emission bath correlation function $C^{\nu=-}(\tau)$.
  • δ::Number : The approximation discrepancy (Defaults to 0.0) which is used for adding the terminator to HEOMLS matrix (see function: addTerminator)
source
HierarchicalEOM.Bath.fermionAbsorbType
struct fermionAbsorb <: AbstractFermionBath

An bath object which describes the absorption process of the fermionic system by a correlation function $C^{\nu=+}$

Fields

  • spre : the super-operator (left side operator multiplication) for the coupling operator.
  • spost : the super-operator (right side operator multiplication) for the coupling operator.
  • spreD : the super-operator (left side operator multiplication) for the adjoint of the coupling operator.
  • spostD : the super-operator (right side operator multiplication) for the adjoint of the coupling operator.
  • dims : the dimension list of the coupling operator (should be equal to the system dims).
  • η : the coefficients $\eta_i$ of absorption bath correlation function $C^{\nu=+}$.
  • γ : the coefficients $\gamma_i$ of absorption bath correlation function $C^{\nu=+}$.
  • η_emit : the coefficients $\eta_i$ of emission bath correlation function $C^{\nu=-}$.
  • Nterm : the number of exponential-expansion term of correlation function
source
HierarchicalEOM.Bath.fermionAbsorbMethod
fermionAbsorb(op, η_absorb, γ_absorb, η_emit)

Generate fermionic bath which describes the absorption process of the fermionic system by a correlation function $C^{\nu=+}$

Parameters

  • op::QuantumObject : The system creation operator according to the system-fermionic-bath interaction.
  • η_absorb::Vector{Ti<:Number} : the coefficients $\eta_i$ of absorption bath correlation function $C^{\nu=+}$.
  • γ_absorb::Vector{Tj<:Number} : the coefficients $\gamma_i$ of absorption bath correlation function $C^{\nu=+}$.
  • η_emit::Vector{Tk<:Number} : the coefficients $\eta_i$ of emission bath correlation function $C^{\nu=-}$.
source
HierarchicalEOM.Bath.fermionEmitType
struct fermionEmit <: AbstractFermionBath

An bath object which describes the emission process of the fermionic system by a correlation function $C^{\nu=-}$

Fields

  • spre : the super-operator (left side operator multiplication) for the coupling operator.
  • spost : the super-operator (right side operator multiplication) for the coupling operator.
  • spreD : the super-operator (left side operator multiplication) for the adjoint of the coupling operator.
  • spostD : the super-operator (right side operator multiplication) for the adjoint of the coupling operator.
  • dims : the dimension list of the coupling operator (should be equal to the system dims).
  • η : the coefficients $\eta_i$ of emission bath correlation function $C^{\nu=-}$.
  • γ : the coefficients $\gamma_i$ of emission bath correlation function $C^{\nu=-}$.
  • η_absorb : the coefficients $\eta_i$ of absorption bath correlation function $C^{\nu=+}$.
  • Nterm : the number of exponential-expansion term of correlation function
source
HierarchicalEOM.Bath.fermionEmitMethod
fermionEmit(op, η_emit, γ_emit, η_absorb)

Generate fermionic bath which describes the emission process of the fermionic system by a correlation function $C^{\nu=-}$

Parameters

  • op::QuantumObject : The system annihilation operator according to the system-fermionic-bath interaction.
  • η_emit::Vector{Ti<:Number} : the coefficients $\eta_i$ of emission bath correlation function $C^{\nu=-}$.
  • γ_emit::Vector{Ti<:Number} : the coefficients $\gamma_i$ of emission bath correlation function $C^{\nu=-}$.
  • η_absorb::Vector{Ti<:Number} : the coefficients $\eta_i$ of absorption bath correlation function $C^{\nu=+}$.
source

Bath Correlation Functions

HierarchicalEOM.Bath.Boson_DrudeLorentz_MatsubaraFunction
Boson_DrudeLorentz_Matsubara(op, λ, W, kT, N)

Constructing Drude-Lorentz bosonic bath with Matsubara expansion

Parameters

  • op : The system coupling operator, must be Hermitian and, for fermionic systems, even-parity to be compatible with charge conservation.
  • λ::Real: The coupling strength between the system and the bath.
  • W::Real: The reorganization energy (band-width) of the bath.
  • kT::Real: The product of the Boltzmann constant $k$ and the absolute temperature $T$ of the bath.
  • N::Int: (N+1)-terms of exponential terms are used to approximate the bath correlation function.

Returns

  • bath::BosonBath : a bosonic bath object with describes the interaction between system and bosonic bath
source
HierarchicalEOM.Bath.Boson_DrudeLorentz_PadeFunction
Boson_DrudeLorentz_Pade(op, λ, W, kT, N)

Constructing Drude-Lorentz bosonic bath with Padé expansion

A Padé approximant is a sum-over-poles expansion (see here for more details).

The application of the Padé method to spectrum decompoisitions is described in Ref. [1].

[1] J. Chem. Phys. 134, 244106 (2011)

Parameters

  • op : The system coupling operator, must be Hermitian and, for fermionic systems, even-parity to be compatible with charge conservation.
  • λ::Real: The coupling strength between the system and the bath.
  • W::Real: The reorganization energy (band-width) of the bath.
  • kT::Real: The product of the Boltzmann constant $k$ and the absolute temperature $T$ of the bath.
  • N::Int: (N+1)-terms of exponential terms are used to approximate the bath correlation function.

Returns

  • bath::BosonBath : a bosonic bath object with describes the interaction between system and bosonic bath
source
HierarchicalEOM.Bath.Fermion_Lorentz_MatsubaraFunction
Fermion_Lorentz_Matsubara(op, λ, μ, W, kT, N)

Constructing Lorentzian fermionic bath with Matsubara expansion

Parameters

  • op : The system annihilation operator according to the system-fermionic-bath interaction.
  • λ::Real: The coupling strength between the system and the bath.
  • μ::Real: The chemical potential of the bath.
  • W::Real: The reorganization energy (band-width) of the bath.
  • kT::Real: The product of the Boltzmann constant $k$ and the absolute temperature $T$ of the bath.
  • N::Int: (N+1)-terms of exponential terms are used to approximate each correlation functions ($C^{\nu=\pm}$).

Returns

  • bath::FermionBath : a fermionic bath object with describes the interaction between system and fermionic bath
source
HierarchicalEOM.Bath.Fermion_Lorentz_PadeFunction
Fermion_Lorentz_Pade(op, λ, μ, W, kT, N)

Constructing Lorentzian fermionic bath with Padé expansion

A Padé approximant is a sum-over-poles expansion (see here for more details).

The application of the Padé method to spectrum decompoisitions is described in Ref. [1].

[1] J. Chem. Phys. 134, 244106 (2011)

Parameters

  • op : The system annihilation operator according to the system-fermionic-bath interaction.
  • λ::Real: The coupling strength between the system and the bath.
  • μ::Real: The chemical potential of the bath.
  • W::Real: The reorganization energy (band-width) of the bath.
  • kT::Real: The product of the Boltzmann constant $k$ and the absolute temperature $T$ of the bath.
  • N::Int: (N+1)-terms of exponential terms are used to approximate each correlation functions ($C^{\nu=\pm}$).

Returns

  • bath::FermionBath : a fermionic bath object with describes the interaction between system and fermionic bath
source

Parity

HEOM Liouvillian superoperator matrices

HierarchicalEOM.HeomAPI.HEOMSuperOpType
struct HEOMSuperOp

General HEOM superoperator matrix.

Fields

  • data<:AbstractSparseMatrix : the HEOM superoperator matrix
  • dims : the dimension list of the coupling operator (should be equal to the system dims).
  • N : the number of auxiliary density operators
  • parity: the parity label (EVEN or ODD).
source
HierarchicalEOM.HeomAPI.HEOMSuperOpType
HEOMSuperOp(op, opParity, refHEOMLS, mul_basis="L"; Id_cache=I(refHEOMLS.N))

Construct the HEOM superoperator matrix corresponding to the given system operator which acts on all ADOs.

During the multiplication on all the ADOs, the parity of the output ADOs might change depend on the parity of this HEOM superoperator.

Parameters

  • op : The system operator which will act on all ADOs.
  • opParity::AbstractParity : the parity label of the given operator (op), should be EVEN or ODD.
  • refHEOMLS::AbstractHEOMLSMatrix : copy the system dims and number of ADOs (N) from this reference HEOMLS matrix
  • mul_basis::AbstractString : this specifies the basis for op to multiply on all ADOs. Defaults to "L".

if mul_basis is specified as

  • "L" : the matrix op has same dimension with the system and acts on left-hand side.
  • "R" : the matrix op has same dimension with the system and acts on right-hand side.
  • "LR" : the matrix op is a superoperator of the system.
source
HierarchicalEOM.HeomAPI.HEOMSuperOpType
HEOMSuperOp(op, opParity, refADOs, mul_basis="L"; Id_cache=I(refADOs.N))

Construct the HEOMLS matrix corresponding to the given system operator which multiplies on the "L"eft-hand ("R"ight-hand) side basis of all ADOs.

During the multiplication on all the ADOs, the parity of the output ADOs might change depend on the parity of this HEOM superoperator.

Parameters

  • op : The system operator which will act on all ADOs.
  • opParity::AbstractParity : the parity label of the given operator (op), should be EVEN or ODD.
  • refADOs::ADOs : copy the system dims and number of ADOs (N) from this reference ADOs
  • mul_basis::AbstractString : this specifies the basis for op to multiply on all ADOs. Defaults to "L".

if mul_basis is specified as

  • "L" : the matrix op has same dimension with the system and acts on left-hand side.
  • "R" : the matrix op has same dimension with the system and acts on right-hand side.
  • "LR" : the matrix op is a superoperator of the system.
source
HierarchicalEOM.HeomAPI.HEOMSuperOpMethod
HEOMSuperOp(op, opParity, dims, N, mul_basis; Id_cache=I(N))

Construct the HEOM superoperator matrix corresponding to the given system operator which acts on all ADOs.

During the multiplication on all the ADOs, the parity of the output ADOs might change depend on the parity of this HEOM superoperator.

Parameters

  • op : The system operator which will act on all ADOs.
  • opParity::AbstractParity : the parity label of the given operator (op), should be EVEN or ODD.
  • dims::SVector : the dimension list of the coupling operator (should be equal to the system dims).
  • N::Int : the number of ADOs.
  • mul_basis::AbstractString : this specifies the basis for op to multiply on all ADOs.

if mul_basis is specified as

  • "L" : the matrix op has same dimension with the system and acts on left-hand side.
  • "R" : the matrix op has same dimension with the system and acts on right-hand side.
  • "LR" : the matrix op is a SuperOperator of the system.
source
HierarchicalEOM.HeomAPI.M_SType
struct M_S <: AbstractHEOMLSMatrix

HEOM Liouvillian superoperator matrix with cutoff level of the hierarchy equals to 0. This corresponds to the standard Schrodinger (Liouville-von Neumann) equation, namely

\[M[\cdot]=-i \left[H_{sys}, \cdot \right]_-,\]

where $[\cdot, \cdot]_-$ stands for commutator.

Fields

  • data<:AbstractSparseMatrix : the sparse matrix of HEOM Liouvillian superoperator
  • tier : the tier (cutoff level) for the hierarchy, which equals to 0 in this case
  • dims : the dimension list of the coupling operator (should be equal to the system dims).
  • N : the number of total ADOs, which equals to 1 (only the reduced density operator) in this case
  • sup_dim : the dimension of system superoperator
  • parity : the parity label of the operator which HEOMLS is acting on (usually EVEN, only set as ODD for calculating spectrum of fermionic system).
source
HierarchicalEOM.HeomAPI.M_SType
M_S(Hsys, parity=EVEN; verbose=true)

Generate HEOM Liouvillian superoperator matrix with cutoff level of the hierarchy equals to 0. This corresponds to the standard Schrodinger (Liouville-von Neumann) equation, namely

\[M[\cdot]=-i \left[H_{sys}, \cdot \right]_-,\]

where $[\cdot, \cdot]_-$ stands for commutator.

Parameters

  • Hsys : The time-independent system Hamiltonian
  • parity::AbstractParity : the parity label of the operator which HEOMLS is acting on (usually EVEN, only set as ODD for calculating spectrum of fermionic system).
  • verbose::Bool : To display verbose output during the process or not. Defaults to true.

Note that the parity only need to be set as ODD when the system contains fermionic systems and you need to calculate the spectrum (density of states) of it.

source
HierarchicalEOM.HeomAPI.M_BosonType
struct M_Boson <: AbstractHEOMLSMatrix

HEOM Liouvillian superoperator matrix for bosonic bath

Fields

  • data<:AbstractSparseMatrix : the sparse matrix of HEOM Liouvillian superoperator
  • tier : the tier (cutoff level) for the bosonic hierarchy
  • dims : the dimension list of the coupling operator (should be equal to the system dims).
  • N : the number of total ADOs
  • sup_dim : the dimension of system superoperator
  • parity : the parity label of the operator which HEOMLS is acting on (usually EVEN, only set as ODD for calculating spectrum of fermionic system).
  • bath::Vector{BosonBath} : the vector which stores all BosonBath objects
  • hierarchy::HierarchyDict: the object which contains all dictionaries for boson-bath-ADOs hierarchy.
source
HierarchicalEOM.HeomAPI.M_BosonType
M_Boson(Hsys, tier, Bath, parity=EVEN; threshold=0.0, verbose=true)

Generate the boson-type HEOM Liouvillian superoperator matrix

Parameters

  • Hsys : The time-independent system Hamiltonian
  • tier::Int : the tier (cutoff level) for the bosonic bath
  • Bath::Vector{BosonBath} : objects for different bosonic baths
  • parity::AbstractParity : the parity label of the operator which HEOMLS is acting on (usually EVEN, only set as ODD for calculating spectrum of fermionic system).
  • threshold::Real : The threshold of the importance value (see Ref. [1]). Defaults to 0.0.
  • verbose::Bool : To display verbose output and progress bar during the process or not. Defaults to true.

Note that the parity only need to be set as ODD when the system contains fermionic systems and you need to calculate the spectrum (density of states) of it.

[1] Phys. Rev. B 88, 235426 (2013)

source
HierarchicalEOM.HeomAPI.M_FermionType
struct M_Fermion <: AbstractHEOMLSMatrix

HEOM Liouvillian superoperator matrix for fermionic bath

Fields

  • data<:AbstractSparseMatrix : the sparse matrix of HEOM Liouvillian superoperator
  • tier : the tier (cutoff level) for the fermionic hierarchy
  • dims : the dimension list of the coupling operator (should be equal to the system dims).
  • N : the number of total ADOs
  • sup_dim : the dimension of system superoperator
  • parity : the parity label of the operator which HEOMLS is acting on (usually EVEN, only set as ODD for calculating spectrum of fermionic system).
  • bath::Vector{FermionBath} : the vector which stores all FermionBath objects
  • hierarchy::HierarchyDict: the object which contains all dictionaries for fermion-bath-ADOs hierarchy.
source
HierarchicalEOM.HeomAPI.M_FermionType
M_Fermion(Hsys, tier, Bath, parity=EVEN; threshold=0.0, verbose=true)

Generate the fermion-type HEOM Liouvillian superoperator matrix

Parameters

  • Hsys : The time-independent system Hamiltonian
  • tier::Int : the tier (cutoff level) for the fermionic bath
  • Bath::Vector{FermionBath} : objects for different fermionic baths
  • parity::AbstractParity : the parity label of the operator which HEOMLS is acting on (usually EVEN, only set as ODD for calculating spectrum of fermionic system).
  • threshold::Real : The threshold of the importance value (see Ref. [1]). Defaults to 0.0.
  • verbose::Bool : To display verbose output and progress bar during the process or not. Defaults to true.

[1] Phys. Rev. B 88, 235426 (2013)

source
HierarchicalEOM.HeomAPI.M_Boson_FermionType
struct M_Boson_Fermion <: AbstractHEOMLSMatrix

HEOM Liouvillian superoperator matrix for mixtured (bosonic and fermionic) bath

Fields

  • data<:AbstractSparseMatrix : the sparse matrix of HEOM Liouvillian superoperator
  • Btier : the tier (cutoff level) for bosonic hierarchy
  • Ftier : the tier (cutoff level) for fermionic hierarchy
  • dims : the dimension list of the coupling operator (should be equal to the system dims).
  • N : the number of total ADOs
  • sup_dim : the dimension of system superoperator
  • parity : the parity label of the operator which HEOMLS is acting on (usually EVEN, only set as ODD for calculating spectrum of fermionic system).
  • Bbath::Vector{BosonBath} : the vector which stores all BosonBath objects
  • Fbath::Vector{FermionBath} : the vector which stores all FermionBath objects
  • hierarchy::MixHierarchyDict: the object which contains all dictionaries for mixed-bath-ADOs hierarchy.
source
HierarchicalEOM.HeomAPI.M_Boson_FermionType
M_Boson_Fermion(Hsys, Btier, Ftier, Bbath, Fbath, parity=EVEN; threshold=0.0, verbose=true)

Generate the boson-fermion-type HEOM Liouvillian superoperator matrix

Parameters

  • Hsys : The time-independent system Hamiltonian
  • Btier::Int : the tier (cutoff level) for the bosonic bath
  • Ftier::Int : the tier (cutoff level) for the fermionic bath
  • Bbath::Vector{BosonBath} : objects for different bosonic baths
  • Fbath::Vector{FermionBath} : objects for different fermionic baths
  • parity::AbstractParity : the parity label of the operator which HEOMLS is acting on (usually EVEN, only set as ODD for calculating spectrum of fermionic system).
  • threshold::Real : The threshold of the importance value (see Ref. [1, 2]). Defaults to 0.0.
  • verbose::Bool : To display verbose output and progress bar during the process or not. Defaults to true.

Note that the parity only need to be set as ODD when the system contains fermion systems and you need to calculate the spectrum of it.

[1] Phys. Rev. B 88, 235426 (2013) [2] Phys. Rev. B 103, 235413 (2021)

source
Base.sizeMethod
size(M::HEOMSuperOp)

Returns the size of the HEOM superoperator matrix

source
Base.sizeMethod
size(M::HEOMSuperOp, dim::Int)

Returns the specified dimension of the HEOM superoperator matrix

source
Base.sizeMethod
size(M::AbstractHEOMLSMatrix)

Returns the size of the HEOM Liouvillian superoperator matrix

source
Base.sizeMethod
size(M::AbstractHEOMLSMatrix, dim::Int)

Returns the specified dimension of the HEOM Liouvillian superoperator matrix

source
Base.eltypeMethod
eltype(M::HEOMSuperOp)

Returns the elements' type of the HEOM superoperator matrix

source
Base.eltypeMethod
eltype(M::AbstractHEOMLSMatrix)

Returns the elements' type of the HEOM Liouvillian superoperator matrix

source
HierarchicalEOM.HeomAPI.PropagatorFunction
Propagator(M, Δt; threshold, nonzero_tol)

Use FastExpm.jl to calculate the propagator matrix from a given HEOM Liouvillian superoperator matrix $M$ with a specific time step $\Delta t$. That is, $\exp(M * \Delta t)$.

Parameters

  • M::AbstractHEOMLSMatrix : the matrix given from HEOM model
  • Δt::Real : A specific time step (time interval).
  • threshold::Real : Determines the threshold for the Taylor series. Defaults to 1.0e-6.
  • nonzero_tol::Real : Strips elements smaller than nonzero_tol at each computation step to preserve sparsity. Defaults to 1.0e-14.

For more details, please refer to FastExpm.jl

Returns

  • ::SparseMatrixCSC{ComplexF64, Int64} : the propagator matrix
source
HierarchicalEOM.HeomAPI.addBosonDissipatorFunction
addBosonDissipator(M, jumpOP)

Adding bosonic dissipator to a given HEOMLS matrix which describes how the system dissipatively interacts with an extra bosonic environment. The dissipator is defined as follows

\[D[J](\cdot) = J(\cdot) J^\dagger - \frac{1}{2}\left(J^\dagger J (\cdot) + (\cdot) J^\dagger J \right),\]

where $J\equiv \sqrt{\gamma}V$ is the jump operator, $V$ describes the dissipative part (operator) of the dynamics, $\gamma$ represents a non-negative damping rate and $[\cdot, \cdot]_+$ stands for anti-commutator.

Note that if $V$ is acting on fermionic systems, it should be even-parity to be compatible with charge conservation.

Parameters

  • M::AbstractHEOMLSMatrix : the matrix given from HEOM model
  • jumpOP::AbstractVector : The list of collapse (jump) operators $\{J_i\}_i$ to add. Defaults to empty vector [].

Return

  • M_new::AbstractHEOMLSMatrix : the new HEOM Liouvillian superoperator matrix
source
HierarchicalEOM.HeomAPI.addFermionDissipatorFunction
addFermionDissipator(M, jumpOP)

Adding fermionic dissipator to a given HEOMLS matrix which describes how the system dissipatively interacts with an extra fermionic environment. The dissipator with EVEN parity is defined as follows

\[D_{\textrm{even}}[J](\cdot) = J(\cdot) J^\dagger - \frac{1}{2}\left(J^\dagger J (\cdot) + (\cdot) J^\dagger J \right),\]

where $J\equiv \sqrt{\gamma}V$ is the jump operator, $V$ describes the dissipative part (operator) of the dynamics, $\gamma$ represents a non-negative damping rate and $[\cdot, \cdot]_+$ stands for anti-commutator.

Similary, the dissipator with ODD parity is defined as follows

\[D_{\textrm{odd}}[J](\cdot) = - J(\cdot) J^\dagger - \frac{1}{2}\left(J^\dagger J (\cdot) + (\cdot) J^\dagger J \right),\]

Note that the parity of the dissipator will be determined by the parity of the given HEOMLS matrix M.

Parameters

  • M::AbstractHEOMLSMatrix : the matrix given from HEOM model
  • jumpOP::AbstractVector : The list of collapse (jump) operators to add. Defaults to empty vector [].

Return

  • M_new::AbstractHEOMLSMatrix : the new HEOM Liouvillian superoperator matrix
source
HierarchicalEOM.HeomAPI.addTerminatorFunction
addTerminator(M, Bath)

Adding terminator to a given HEOMLS matrix.

The terminator is a Liouvillian term representing the contribution to the system-bath dynamics of all exponential-expansion terms beyond Bath.Nterm

The difference between the true correlation function and the sum of the Bath.Nterm-exponential terms is approximately 2 * δ * dirac(t). Here, δ is the approximation discrepancy and dirac(t) denotes the Dirac-delta function.

Parameters

  • M::AbstractHEOMLSMatrix : the matrix given from HEOM model
  • Bath::Union{BosonBath, FermionBath} : The bath object which contains the approximation discrepancy δ

Return

  • M_new::AbstractHEOMLSMatrix : the new HEOM Liouvillian superoperator matrix
source

Auxiliary Density Operators (ADOs)

HierarchicalEOM.HeomAPI.ADOsType
struct ADOs

The Auxiliary Density Operators for HEOM model.

Fields

  • data : the vectorized auxiliary density operators
  • dims : the dimension list of the coupling operator (should be equal to the system dims).
  • N : the number of auxiliary density operators
  • parity: the parity label (EVEN or ODD).

Methods

One can obtain the density matrix for specific index (idx) by calling : ados[idx]. HierarchicalEOM.jl also supports the following calls (methods) :

length(ados);  # returns the total number of `ADOs`
+\end{aligned}\]

where $\nu=+$ ($\nu=-$) represents absorption (emission) process, $J(\omega)$ is the spectral density of the bath and $n(\omega)$ is the Fermi-Dirac distribution.

Parameters

  • op::QuantumObject : The system annihilation operator according to the system-fermionic-bath interaction.
  • η_absorb::Vector{Ti<:Number} : the coefficients $\eta_i$ of absorption bath correlation function $C^{\nu=+}(\tau)$.
  • γ_absorb::Vector{Tj<:Number} : the coefficients $\gamma_i$ of absorption bath correlation function $C^{\nu=+}(\tau)$.
  • η_emit::Vector{Tk<:Number} : the coefficients $\eta_i$ of emission bath correlation function $C^{\nu=-}(\tau)$.
  • γ_emit::Vector{Tl<:Number} : the coefficients $\gamma_i$ of emission bath correlation function $C^{\nu=-}(\tau)$.
  • δ::Number : The approximation discrepancy (Defaults to 0.0) which is used for adding the terminator to HEOMLS matrix (see function: addTerminator)
source
HierarchicalEOM.Bath.fermionAbsorbType
struct fermionAbsorb <: AbstractFermionBath

An bath object which describes the absorption process of the fermionic system by a correlation function $C^{\nu=+}$

Fields

  • spre : the super-operator (left side operator multiplication) for the coupling operator.
  • spost : the super-operator (right side operator multiplication) for the coupling operator.
  • spreD : the super-operator (left side operator multiplication) for the adjoint of the coupling operator.
  • spostD : the super-operator (right side operator multiplication) for the adjoint of the coupling operator.
  • dims : the dimension list of the coupling operator (should be equal to the system dims).
  • η : the coefficients $\eta_i$ of absorption bath correlation function $C^{\nu=+}$.
  • γ : the coefficients $\gamma_i$ of absorption bath correlation function $C^{\nu=+}$.
  • η_emit : the coefficients $\eta_i$ of emission bath correlation function $C^{\nu=-}$.
  • Nterm : the number of exponential-expansion term of correlation function
source
HierarchicalEOM.Bath.fermionAbsorbMethod
fermionAbsorb(op, η_absorb, γ_absorb, η_emit)

Generate fermionic bath which describes the absorption process of the fermionic system by a correlation function $C^{\nu=+}$

Parameters

  • op::QuantumObject : The system creation operator according to the system-fermionic-bath interaction.
  • η_absorb::Vector{Ti<:Number} : the coefficients $\eta_i$ of absorption bath correlation function $C^{\nu=+}$.
  • γ_absorb::Vector{Tj<:Number} : the coefficients $\gamma_i$ of absorption bath correlation function $C^{\nu=+}$.
  • η_emit::Vector{Tk<:Number} : the coefficients $\eta_i$ of emission bath correlation function $C^{\nu=-}$.
source
HierarchicalEOM.Bath.fermionEmitType
struct fermionEmit <: AbstractFermionBath

An bath object which describes the emission process of the fermionic system by a correlation function $C^{\nu=-}$

Fields

  • spre : the super-operator (left side operator multiplication) for the coupling operator.
  • spost : the super-operator (right side operator multiplication) for the coupling operator.
  • spreD : the super-operator (left side operator multiplication) for the adjoint of the coupling operator.
  • spostD : the super-operator (right side operator multiplication) for the adjoint of the coupling operator.
  • dims : the dimension list of the coupling operator (should be equal to the system dims).
  • η : the coefficients $\eta_i$ of emission bath correlation function $C^{\nu=-}$.
  • γ : the coefficients $\gamma_i$ of emission bath correlation function $C^{\nu=-}$.
  • η_absorb : the coefficients $\eta_i$ of absorption bath correlation function $C^{\nu=+}$.
  • Nterm : the number of exponential-expansion term of correlation function
source
HierarchicalEOM.Bath.fermionEmitMethod
fermionEmit(op, η_emit, γ_emit, η_absorb)

Generate fermionic bath which describes the emission process of the fermionic system by a correlation function $C^{\nu=-}$

Parameters

  • op::QuantumObject : The system annihilation operator according to the system-fermionic-bath interaction.
  • η_emit::Vector{Ti<:Number} : the coefficients $\eta_i$ of emission bath correlation function $C^{\nu=-}$.
  • γ_emit::Vector{Ti<:Number} : the coefficients $\gamma_i$ of emission bath correlation function $C^{\nu=-}$.
  • η_absorb::Vector{Ti<:Number} : the coefficients $\eta_i$ of absorption bath correlation function $C^{\nu=+}$.
source

Bath Correlation Functions

HierarchicalEOM.Bath.Boson_DrudeLorentz_MatsubaraFunction
Boson_DrudeLorentz_Matsubara(op, λ, W, kT, N)

Constructing Drude-Lorentz bosonic bath with Matsubara expansion

Parameters

  • op : The system coupling operator, must be Hermitian and, for fermionic systems, even-parity to be compatible with charge conservation.
  • λ::Real: The coupling strength between the system and the bath.
  • W::Real: The reorganization energy (band-width) of the bath.
  • kT::Real: The product of the Boltzmann constant $k$ and the absolute temperature $T$ of the bath.
  • N::Int: (N+1)-terms of exponential terms are used to approximate the bath correlation function.

Returns

  • bath::BosonBath : a bosonic bath object with describes the interaction between system and bosonic bath
source
HierarchicalEOM.Bath.Boson_DrudeLorentz_PadeFunction
Boson_DrudeLorentz_Pade(op, λ, W, kT, N)

Constructing Drude-Lorentz bosonic bath with Padé expansion

A Padé approximant is a sum-over-poles expansion (see here for more details).

The application of the Padé method to spectrum decompoisitions is described in Ref. [1].

[1] J. Chem. Phys. 134, 244106 (2011)

Parameters

  • op : The system coupling operator, must be Hermitian and, for fermionic systems, even-parity to be compatible with charge conservation.
  • λ::Real: The coupling strength between the system and the bath.
  • W::Real: The reorganization energy (band-width) of the bath.
  • kT::Real: The product of the Boltzmann constant $k$ and the absolute temperature $T$ of the bath.
  • N::Int: (N+1)-terms of exponential terms are used to approximate the bath correlation function.

Returns

  • bath::BosonBath : a bosonic bath object with describes the interaction between system and bosonic bath
source
HierarchicalEOM.Bath.Fermion_Lorentz_MatsubaraFunction
Fermion_Lorentz_Matsubara(op, λ, μ, W, kT, N)

Constructing Lorentzian fermionic bath with Matsubara expansion

Parameters

  • op : The system annihilation operator according to the system-fermionic-bath interaction.
  • λ::Real: The coupling strength between the system and the bath.
  • μ::Real: The chemical potential of the bath.
  • W::Real: The reorganization energy (band-width) of the bath.
  • kT::Real: The product of the Boltzmann constant $k$ and the absolute temperature $T$ of the bath.
  • N::Int: (N+1)-terms of exponential terms are used to approximate each correlation functions ($C^{\nu=\pm}$).

Returns

  • bath::FermionBath : a fermionic bath object with describes the interaction between system and fermionic bath
source
HierarchicalEOM.Bath.Fermion_Lorentz_PadeFunction
Fermion_Lorentz_Pade(op, λ, μ, W, kT, N)

Constructing Lorentzian fermionic bath with Padé expansion

A Padé approximant is a sum-over-poles expansion (see here for more details).

The application of the Padé method to spectrum decompoisitions is described in Ref. [1].

[1] J. Chem. Phys. 134, 244106 (2011)

Parameters

  • op : The system annihilation operator according to the system-fermionic-bath interaction.
  • λ::Real: The coupling strength between the system and the bath.
  • μ::Real: The chemical potential of the bath.
  • W::Real: The reorganization energy (band-width) of the bath.
  • kT::Real: The product of the Boltzmann constant $k$ and the absolute temperature $T$ of the bath.
  • N::Int: (N+1)-terms of exponential terms are used to approximate each correlation functions ($C^{\nu=\pm}$).

Returns

  • bath::FermionBath : a fermionic bath object with describes the interaction between system and fermionic bath
source

Parity

HEOM Liouvillian superoperator matrices

HierarchicalEOM.HeomAPI.HEOMSuperOpType
struct HEOMSuperOp

General HEOM superoperator matrix.

Fields

  • data<:AbstractSparseMatrix : the HEOM superoperator matrix
  • dims : the dimension list of the coupling operator (should be equal to the system dims).
  • N : the number of auxiliary density operators
  • parity: the parity label (EVEN or ODD).
source
HierarchicalEOM.HeomAPI.HEOMSuperOpType
HEOMSuperOp(op, opParity, refHEOMLS, mul_basis="L"; Id_cache=I(refHEOMLS.N))

Construct the HEOM superoperator matrix corresponding to the given system operator which acts on all ADOs.

During the multiplication on all the ADOs, the parity of the output ADOs might change depend on the parity of this HEOM superoperator.

Parameters

  • op : The system operator which will act on all ADOs.
  • opParity::AbstractParity : the parity label of the given operator (op), should be EVEN or ODD.
  • refHEOMLS::AbstractHEOMLSMatrix : copy the system dims and number of ADOs (N) from this reference HEOMLS matrix
  • mul_basis::AbstractString : this specifies the basis for op to multiply on all ADOs. Defaults to "L".

if mul_basis is specified as

  • "L" : the matrix op has same dimension with the system and acts on left-hand side.
  • "R" : the matrix op has same dimension with the system and acts on right-hand side.
  • "LR" : the matrix op is a superoperator of the system.
source
HierarchicalEOM.HeomAPI.HEOMSuperOpType
HEOMSuperOp(op, opParity, refADOs, mul_basis="L"; Id_cache=I(refADOs.N))

Construct the HEOMLS matrix corresponding to the given system operator which multiplies on the "L"eft-hand ("R"ight-hand) side basis of all ADOs.

During the multiplication on all the ADOs, the parity of the output ADOs might change depend on the parity of this HEOM superoperator.

Parameters

  • op : The system operator which will act on all ADOs.
  • opParity::AbstractParity : the parity label of the given operator (op), should be EVEN or ODD.
  • refADOs::ADOs : copy the system dims and number of ADOs (N) from this reference ADOs
  • mul_basis::AbstractString : this specifies the basis for op to multiply on all ADOs. Defaults to "L".

if mul_basis is specified as

  • "L" : the matrix op has same dimension with the system and acts on left-hand side.
  • "R" : the matrix op has same dimension with the system and acts on right-hand side.
  • "LR" : the matrix op is a superoperator of the system.
source
HierarchicalEOM.HeomAPI.HEOMSuperOpMethod
HEOMSuperOp(op, opParity, dims, N, mul_basis; Id_cache=I(N))

Construct the HEOM superoperator matrix corresponding to the given system operator which acts on all ADOs.

During the multiplication on all the ADOs, the parity of the output ADOs might change depend on the parity of this HEOM superoperator.

Parameters

  • op : The system operator which will act on all ADOs.
  • opParity::AbstractParity : the parity label of the given operator (op), should be EVEN or ODD.
  • dims::SVector : the dimension list of the coupling operator (should be equal to the system dims).
  • N::Int : the number of ADOs.
  • mul_basis::AbstractString : this specifies the basis for op to multiply on all ADOs.

if mul_basis is specified as

  • "L" : the matrix op has same dimension with the system and acts on left-hand side.
  • "R" : the matrix op has same dimension with the system and acts on right-hand side.
  • "LR" : the matrix op is a SuperOperator of the system.
source
HierarchicalEOM.HeomAPI.M_SType
struct M_S <: AbstractHEOMLSMatrix

HEOM Liouvillian superoperator matrix with cutoff level of the hierarchy equals to 0. This corresponds to the standard Schrodinger (Liouville-von Neumann) equation, namely

\[M[\cdot]=-i \left[H_{sys}, \cdot \right]_-,\]

where $[\cdot, \cdot]_-$ stands for commutator.

Fields

  • data<:AbstractSparseMatrix : the sparse matrix of HEOM Liouvillian superoperator
  • tier : the tier (cutoff level) for the hierarchy, which equals to 0 in this case
  • dims : the dimension list of the coupling operator (should be equal to the system dims).
  • N : the number of total ADOs, which equals to 1 (only the reduced density operator) in this case
  • sup_dim : the dimension of system superoperator
  • parity : the parity label of the operator which HEOMLS is acting on (usually EVEN, only set as ODD for calculating spectrum of fermionic system).
source
HierarchicalEOM.HeomAPI.M_SType
M_S(Hsys, parity=EVEN; verbose=true)

Generate HEOM Liouvillian superoperator matrix with cutoff level of the hierarchy equals to 0. This corresponds to the standard Schrodinger (Liouville-von Neumann) equation, namely

\[M[\cdot]=-i \left[H_{sys}, \cdot \right]_-,\]

where $[\cdot, \cdot]_-$ stands for commutator.

Parameters

  • Hsys : The time-independent system Hamiltonian
  • parity::AbstractParity : the parity label of the operator which HEOMLS is acting on (usually EVEN, only set as ODD for calculating spectrum of fermionic system).
  • verbose::Bool : To display verbose output during the process or not. Defaults to true.

Note that the parity only need to be set as ODD when the system contains fermionic systems and you need to calculate the spectrum (density of states) of it.

source
HierarchicalEOM.HeomAPI.M_BosonType
struct M_Boson <: AbstractHEOMLSMatrix

HEOM Liouvillian superoperator matrix for bosonic bath

Fields

  • data<:AbstractSparseMatrix : the sparse matrix of HEOM Liouvillian superoperator
  • tier : the tier (cutoff level) for the bosonic hierarchy
  • dims : the dimension list of the coupling operator (should be equal to the system dims).
  • N : the number of total ADOs
  • sup_dim : the dimension of system superoperator
  • parity : the parity label of the operator which HEOMLS is acting on (usually EVEN, only set as ODD for calculating spectrum of fermionic system).
  • bath::Vector{BosonBath} : the vector which stores all BosonBath objects
  • hierarchy::HierarchyDict: the object which contains all dictionaries for boson-bath-ADOs hierarchy.
source
HierarchicalEOM.HeomAPI.M_BosonType
M_Boson(Hsys, tier, Bath, parity=EVEN; threshold=0.0, verbose=true)

Generate the boson-type HEOM Liouvillian superoperator matrix

Parameters

  • Hsys : The time-independent system Hamiltonian
  • tier::Int : the tier (cutoff level) for the bosonic bath
  • Bath::Vector{BosonBath} : objects for different bosonic baths
  • parity::AbstractParity : the parity label of the operator which HEOMLS is acting on (usually EVEN, only set as ODD for calculating spectrum of fermionic system).
  • threshold::Real : The threshold of the importance value (see Ref. [1]). Defaults to 0.0.
  • verbose::Bool : To display verbose output and progress bar during the process or not. Defaults to true.

Note that the parity only need to be set as ODD when the system contains fermionic systems and you need to calculate the spectrum (density of states) of it.

[1] Phys. Rev. B 88, 235426 (2013)

source
HierarchicalEOM.HeomAPI.M_FermionType
struct M_Fermion <: AbstractHEOMLSMatrix

HEOM Liouvillian superoperator matrix for fermionic bath

Fields

  • data<:AbstractSparseMatrix : the sparse matrix of HEOM Liouvillian superoperator
  • tier : the tier (cutoff level) for the fermionic hierarchy
  • dims : the dimension list of the coupling operator (should be equal to the system dims).
  • N : the number of total ADOs
  • sup_dim : the dimension of system superoperator
  • parity : the parity label of the operator which HEOMLS is acting on (usually EVEN, only set as ODD for calculating spectrum of fermionic system).
  • bath::Vector{FermionBath} : the vector which stores all FermionBath objects
  • hierarchy::HierarchyDict: the object which contains all dictionaries for fermion-bath-ADOs hierarchy.
source
HierarchicalEOM.HeomAPI.M_FermionType
M_Fermion(Hsys, tier, Bath, parity=EVEN; threshold=0.0, verbose=true)

Generate the fermion-type HEOM Liouvillian superoperator matrix

Parameters

  • Hsys : The time-independent system Hamiltonian
  • tier::Int : the tier (cutoff level) for the fermionic bath
  • Bath::Vector{FermionBath} : objects for different fermionic baths
  • parity::AbstractParity : the parity label of the operator which HEOMLS is acting on (usually EVEN, only set as ODD for calculating spectrum of fermionic system).
  • threshold::Real : The threshold of the importance value (see Ref. [1]). Defaults to 0.0.
  • verbose::Bool : To display verbose output and progress bar during the process or not. Defaults to true.

[1] Phys. Rev. B 88, 235426 (2013)

source
HierarchicalEOM.HeomAPI.M_Boson_FermionType
struct M_Boson_Fermion <: AbstractHEOMLSMatrix

HEOM Liouvillian superoperator matrix for mixtured (bosonic and fermionic) bath

Fields

  • data<:AbstractSparseMatrix : the sparse matrix of HEOM Liouvillian superoperator
  • Btier : the tier (cutoff level) for bosonic hierarchy
  • Ftier : the tier (cutoff level) for fermionic hierarchy
  • dims : the dimension list of the coupling operator (should be equal to the system dims).
  • N : the number of total ADOs
  • sup_dim : the dimension of system superoperator
  • parity : the parity label of the operator which HEOMLS is acting on (usually EVEN, only set as ODD for calculating spectrum of fermionic system).
  • Bbath::Vector{BosonBath} : the vector which stores all BosonBath objects
  • Fbath::Vector{FermionBath} : the vector which stores all FermionBath objects
  • hierarchy::MixHierarchyDict: the object which contains all dictionaries for mixed-bath-ADOs hierarchy.
source
HierarchicalEOM.HeomAPI.M_Boson_FermionType
M_Boson_Fermion(Hsys, Btier, Ftier, Bbath, Fbath, parity=EVEN; threshold=0.0, verbose=true)

Generate the boson-fermion-type HEOM Liouvillian superoperator matrix

Parameters

  • Hsys : The time-independent system Hamiltonian
  • Btier::Int : the tier (cutoff level) for the bosonic bath
  • Ftier::Int : the tier (cutoff level) for the fermionic bath
  • Bbath::Vector{BosonBath} : objects for different bosonic baths
  • Fbath::Vector{FermionBath} : objects for different fermionic baths
  • parity::AbstractParity : the parity label of the operator which HEOMLS is acting on (usually EVEN, only set as ODD for calculating spectrum of fermionic system).
  • threshold::Real : The threshold of the importance value (see Ref. [1, 2]). Defaults to 0.0.
  • verbose::Bool : To display verbose output and progress bar during the process or not. Defaults to true.

Note that the parity only need to be set as ODD when the system contains fermion systems and you need to calculate the spectrum of it.

[1] Phys. Rev. B 88, 235426 (2013) [2] Phys. Rev. B 103, 235413 (2021)

source
Base.sizeMethod
size(M::HEOMSuperOp)

Returns the size of the HEOM superoperator matrix

source
Base.sizeMethod
size(M::HEOMSuperOp, dim::Int)

Returns the specified dimension of the HEOM superoperator matrix

source
Base.sizeMethod
size(M::AbstractHEOMLSMatrix)

Returns the size of the HEOM Liouvillian superoperator matrix

source
Base.sizeMethod
size(M::AbstractHEOMLSMatrix, dim::Int)

Returns the specified dimension of the HEOM Liouvillian superoperator matrix

source
Base.eltypeMethod
eltype(M::HEOMSuperOp)

Returns the elements' type of the HEOM superoperator matrix

source
Base.eltypeMethod
eltype(M::AbstractHEOMLSMatrix)

Returns the elements' type of the HEOM Liouvillian superoperator matrix

source
HierarchicalEOM.HeomAPI.PropagatorFunction
Propagator(M, Δt; threshold, nonzero_tol)

Use FastExpm.jl to calculate the propagator matrix from a given HEOM Liouvillian superoperator matrix $M$ with a specific time step $\Delta t$. That is, $\exp(M * \Delta t)$.

Parameters

  • M::AbstractHEOMLSMatrix : the matrix given from HEOM model
  • Δt::Real : A specific time step (time interval).
  • threshold::Real : Determines the threshold for the Taylor series. Defaults to 1.0e-6.
  • nonzero_tol::Real : Strips elements smaller than nonzero_tol at each computation step to preserve sparsity. Defaults to 1.0e-14.

For more details, please refer to FastExpm.jl

Returns

  • ::SparseMatrixCSC{ComplexF64, Int64} : the propagator matrix
source
HierarchicalEOM.HeomAPI.addBosonDissipatorFunction
addBosonDissipator(M, jumpOP)

Adding bosonic dissipator to a given HEOMLS matrix which describes how the system dissipatively interacts with an extra bosonic environment. The dissipator is defined as follows

\[D[J](\cdot) = J(\cdot) J^\dagger - \frac{1}{2}\left(J^\dagger J (\cdot) + (\cdot) J^\dagger J \right),\]

where $J\equiv \sqrt{\gamma}V$ is the jump operator, $V$ describes the dissipative part (operator) of the dynamics, $\gamma$ represents a non-negative damping rate and $[\cdot, \cdot]_+$ stands for anti-commutator.

Note that if $V$ is acting on fermionic systems, it should be even-parity to be compatible with charge conservation.

Parameters

  • M::AbstractHEOMLSMatrix : the matrix given from HEOM model
  • jumpOP::AbstractVector : The list of collapse (jump) operators $\{J_i\}_i$ to add. Defaults to empty vector [].

Return

  • M_new::AbstractHEOMLSMatrix : the new HEOM Liouvillian superoperator matrix
source
HierarchicalEOM.HeomAPI.addFermionDissipatorFunction
addFermionDissipator(M, jumpOP)

Adding fermionic dissipator to a given HEOMLS matrix which describes how the system dissipatively interacts with an extra fermionic environment. The dissipator with EVEN parity is defined as follows

\[D_{\textrm{even}}[J](\cdot) = J(\cdot) J^\dagger - \frac{1}{2}\left(J^\dagger J (\cdot) + (\cdot) J^\dagger J \right),\]

where $J\equiv \sqrt{\gamma}V$ is the jump operator, $V$ describes the dissipative part (operator) of the dynamics, $\gamma$ represents a non-negative damping rate and $[\cdot, \cdot]_+$ stands for anti-commutator.

Similary, the dissipator with ODD parity is defined as follows

\[D_{\textrm{odd}}[J](\cdot) = - J(\cdot) J^\dagger - \frac{1}{2}\left(J^\dagger J (\cdot) + (\cdot) J^\dagger J \right),\]

Note that the parity of the dissipator will be determined by the parity of the given HEOMLS matrix M.

Parameters

  • M::AbstractHEOMLSMatrix : the matrix given from HEOM model
  • jumpOP::AbstractVector : The list of collapse (jump) operators to add. Defaults to empty vector [].

Return

  • M_new::AbstractHEOMLSMatrix : the new HEOM Liouvillian superoperator matrix
source
HierarchicalEOM.HeomAPI.addTerminatorFunction
addTerminator(M, Bath)

Adding terminator to a given HEOMLS matrix.

The terminator is a Liouvillian term representing the contribution to the system-bath dynamics of all exponential-expansion terms beyond Bath.Nterm

The difference between the true correlation function and the sum of the Bath.Nterm-exponential terms is approximately 2 * δ * dirac(t). Here, δ is the approximation discrepancy and dirac(t) denotes the Dirac-delta function.

Parameters

  • M::AbstractHEOMLSMatrix : the matrix given from HEOM model
  • Bath::Union{BosonBath, FermionBath} : The bath object which contains the approximation discrepancy δ

Return

  • M_new::AbstractHEOMLSMatrix : the new HEOM Liouvillian superoperator matrix
source

Auxiliary Density Operators (ADOs)

HierarchicalEOM.HeomAPI.ADOsType
struct ADOs

The Auxiliary Density Operators for HEOM model.

Fields

  • data : the vectorized auxiliary density operators
  • dims : the dimension list of the coupling operator (should be equal to the system dims).
  • N : the number of auxiliary density operators
  • parity: the parity label (EVEN or ODD).

Methods

One can obtain the density matrix for specific index (idx) by calling : ados[idx]. HierarchicalEOM.jl also supports the following calls (methods) :

length(ados);  # returns the total number of `ADOs`
 ados[1:idx];   # returns a vector which contains the `ADO` (in matrix form) from index `1` to `idx`
 ados[1:end];   # returns a vector which contains all the `ADO` (in matrix form)
 ados[:];       # returns a vector which contains all the `ADO` (in matrix form)
 for rho in ados  # iteration
     # do something
-end
source
HierarchicalEOM.HeomAPI.ADOsMethod
ADOs(V, N, parity)

Gernerate the object of auxiliary density operators for HEOM model.

Parameters

  • V::AbstractVector : the vectorized auxiliary density operators
  • N::Int : the number of auxiliary density operators.
  • parity::AbstractParity : the parity label (EVEN or ODD). Default to EVEN.
source
Base.lengthMethod
length(A::ADOs)

Returns the total number of the Auxiliary Density Operators (ADOs)

source
Base.eltypeMethod
eltype(A::ADOs)

Returns the elements' type of the Auxiliary Density Operators (ADOs)

source
HierarchicalEOM.HeomAPI.getRhoFunction
getRho(ados)

Return the density matrix of the reduced state (system) from a given auxiliary density operators

Parameters

  • ados::ADOs : the auxiliary density operators for HEOM model

Returns

  • ρ::QuantumObject : The density matrix of the reduced state
source
HierarchicalEOM.HeomAPI.getADOFunction
getADO(ados, idx)

Return the auxiliary density operator with a specific index from auxiliary density operators

This function equals to calling : ados[idx].

Parameters

  • ados::ADOs : the auxiliary density operators for HEOM model
  • idx::Int : the index of the auxiliary density operator

Returns

  • ρ_idx::QuantumObject : The auxiliary density operator
source
QuantumToolbox.expectFunction
expect(op, ados; take_real=true)

Return the expectation value of the operator op for the reduced density operator in the given ados, namely

\[\textrm{Tr}\left[ O \rho \right],\]

where $O$ is the operator and $\rho$ is the reduced density operator in the given ADOs.

Parameters

  • op : the operator $O$ to take the expectation value
  • ados::ADOs : the auxiliary density operators for HEOM model
  • take_real::Bool : whether to automatically take the real part of the trace or not. Default to true

Returns

  • exp_val : The expectation value
source
expect(op, ados_list; take_real=true)

Return a list of expectation values of the operator op corresponds to the reduced density operators in the given ados_list, namely

\[\textrm{Tr}\left[ O \rho \right],\]

where $O$ is the operator and $\rho$ is the reduced density operator in one of the ADOs from ados_list.

Parameters

  • op : the operator $O$ to take the expectation value
  • ados_list::Vector{ADOs} : the list of auxiliary density operators for HEOM model
  • take_real::Bool : whether to automatically take the real part of the trace or not. Default to true

Returns

  • exp_val : The expectation value
source

Hierarchy Dictionary

HierarchicalEOM.HeomAPI.NvecType
struct Nvec

An object which describes the repetition number of each multi-index ensembles in auxiliary density operators.

The n_vector ($\vec{n}$) denotes a set of integers:

\[\{ n_{1,1}, ..., n_{\alpha, k}, ... \}\]

associated with the $k$-th exponential-expansion term in the $\alpha$-th bath. If $n_{\alpha, k} = 3$ means that the multi-index ensemble $\{\alpha, k\}$ appears three times in the multi-index vector of ADOs (see the notations in our paper).

The hierarchy level ($L$) for an n_vector is given by $L=\sum_{\alpha, k} n_{\alpha, k}$

Fields

  • data : the n_vector
  • level : The level L for the n_vector

Methods

One can obtain the repetition number for specific index (idx) by calling : n_vector[idx]. To obtain the corresponding tuple $(\alpha, k)$ for a given index idx, see bathPtr in HierarchyDict for more details.

HierarchicalEOM.jl also supports the following calls (methods) :

length(n_vector);  # returns the length of `Nvec`
+end
source
HierarchicalEOM.HeomAPI.ADOsMethod
ADOs(V, N, parity)

Gernerate the object of auxiliary density operators for HEOM model.

Parameters

  • V::AbstractVector : the vectorized auxiliary density operators
  • N::Int : the number of auxiliary density operators.
  • parity::AbstractParity : the parity label (EVEN or ODD). Default to EVEN.
source
Base.lengthMethod
length(A::ADOs)

Returns the total number of the Auxiliary Density Operators (ADOs)

source
Base.eltypeMethod
eltype(A::ADOs)

Returns the elements' type of the Auxiliary Density Operators (ADOs)

source
HierarchicalEOM.HeomAPI.getRhoFunction
getRho(ados)

Return the density matrix of the reduced state (system) from a given auxiliary density operators

Parameters

  • ados::ADOs : the auxiliary density operators for HEOM model

Returns

  • ρ::QuantumObject : The density matrix of the reduced state
source
HierarchicalEOM.HeomAPI.getADOFunction
getADO(ados, idx)

Return the auxiliary density operator with a specific index from auxiliary density operators

This function equals to calling : ados[idx].

Parameters

  • ados::ADOs : the auxiliary density operators for HEOM model
  • idx::Int : the index of the auxiliary density operator

Returns

  • ρ_idx::QuantumObject : The auxiliary density operator
source
QuantumToolbox.expectFunction
expect(op, ados; take_real=true)

Return the expectation value of the operator op for the reduced density operator in the given ados, namely

\[\textrm{Tr}\left[ O \rho \right],\]

where $O$ is the operator and $\rho$ is the reduced density operator in the given ADOs.

Parameters

  • op : the operator $O$ to take the expectation value
  • ados::ADOs : the auxiliary density operators for HEOM model
  • take_real::Bool : whether to automatically take the real part of the trace or not. Default to true

Returns

  • exp_val : The expectation value
source
expect(op, ados_list; take_real=true)

Return a list of expectation values of the operator op corresponds to the reduced density operators in the given ados_list, namely

\[\textrm{Tr}\left[ O \rho \right],\]

where $O$ is the operator and $\rho$ is the reduced density operator in one of the ADOs from ados_list.

Parameters

  • op : the operator $O$ to take the expectation value
  • ados_list::Vector{ADOs} : the list of auxiliary density operators for HEOM model
  • take_real::Bool : whether to automatically take the real part of the trace or not. Default to true

Returns

  • exp_val : The expectation value
source

Hierarchy Dictionary

HierarchicalEOM.HeomAPI.NvecType
struct Nvec

An object which describes the repetition number of each multi-index ensembles in auxiliary density operators.

The n_vector ($\vec{n}$) denotes a set of integers:

\[\{ n_{1,1}, ..., n_{\alpha, k}, ... \}\]

associated with the $k$-th exponential-expansion term in the $\alpha$-th bath. If $n_{\alpha, k} = 3$ means that the multi-index ensemble $\{\alpha, k\}$ appears three times in the multi-index vector of ADOs (see the notations in our paper).

The hierarchy level ($L$) for an n_vector is given by $L=\sum_{\alpha, k} n_{\alpha, k}$

Fields

  • data : the n_vector
  • level : The level L for the n_vector

Methods

One can obtain the repetition number for specific index (idx) by calling : n_vector[idx]. To obtain the corresponding tuple $(\alpha, k)$ for a given index idx, see bathPtr in HierarchyDict for more details.

HierarchicalEOM.jl also supports the following calls (methods) :

length(n_vector);  # returns the length of `Nvec`
 n_vector[1:idx];   # returns a vector which contains the excitation number of `n_vector` from index `1` to `idx`
 n_vector[1:end];   # returns a vector which contains all the excitation number of `n_vector`
 n_vector[:];       # returns a vector which contains all the excitation number of `n_vector`
 from n in n_vector  # iteration
     # do something
-end
source
HierarchicalEOM.HeomAPI.HierarchyDictType
struct HierarchyDict <: AbstractHierarchyDict

An object which contains all dictionaries for pure (bosonic or fermionic) bath-ADOs hierarchy.

Fields

  • idx2nvec : Return the Nvec from a given index of ADO
  • nvec2idx : Return the index of ADO from a given Nvec
  • lvl2idx : Return the list of ADO-indices from a given hierarchy level
  • bathPtr : Records the tuple $(\alpha, k)$ for each position in Nvec, where $\alpha$ and $k$ represents the $k$-th exponential-expansion term of the $\alpha$-th bath.
source
HierarchicalEOM.HeomAPI.MixHierarchyDictType
struct MixHierarchyDict <: AbstractHierarchyDict

An object which contains all dictionaries for mixed (bosonic and fermionic) bath-ADOs hierarchy.

Fields

  • idx2nvec : Return the tuple (Nvec_b, Nvec_f) from a given index of ADO, where b represents boson and f represents fermion
  • nvec2idx : Return the index from a given tuple (Nvec_b, Nvec_f), where b represents boson and f represents fermion
  • Blvl2idx : Return the list of ADO-indices from a given bosonic-hierarchy level
  • Flvl2idx : Return the list of ADO-indices from a given fermionic-hierarchy level
  • bosonPtr : Records the tuple $(\alpha, k)$ for each position in Nvec_b, where $\alpha$ and $k$ represents the $k$-th exponential-expansion term of the $\alpha$-th bosonic bath.
  • fermionPtr : Records the tuple $(\alpha, k)$ for each position in Nvec_f, where $\alpha$ and $k$ represents the $k$-th exponential-expansion term of the $\alpha$-th fermionic bath.
source
HierarchicalEOM.HeomAPI.getIndexEnsembleFunction
getIndexEnsemble(nvec, bathPtr)

Search for all the multi-index ensemble $(\alpha, k)$ where $\alpha$ and $k$ represents the $k$-th exponential-expansion term in the $\alpha$-th bath.

Parameters

Returns

  • Vector{Tuple{Int, Int, Int}}: a vector (list) of the tuples $(\alpha, k, n)$.

Example

Here is an example to use Bath, Exponent, HierarchyDict, and getIndexEnsemble together:

L::M_Fermion;          # suppose this is a fermion type of HEOM Liouvillian superoperator matrix you create
+end
source
HierarchicalEOM.HeomAPI.HierarchyDictType
struct HierarchyDict <: AbstractHierarchyDict

An object which contains all dictionaries for pure (bosonic or fermionic) bath-ADOs hierarchy.

Fields

  • idx2nvec : Return the Nvec from a given index of ADO
  • nvec2idx : Return the index of ADO from a given Nvec
  • lvl2idx : Return the list of ADO-indices from a given hierarchy level
  • bathPtr : Records the tuple $(\alpha, k)$ for each position in Nvec, where $\alpha$ and $k$ represents the $k$-th exponential-expansion term of the $\alpha$-th bath.
source
HierarchicalEOM.HeomAPI.MixHierarchyDictType
struct MixHierarchyDict <: AbstractHierarchyDict

An object which contains all dictionaries for mixed (bosonic and fermionic) bath-ADOs hierarchy.

Fields

  • idx2nvec : Return the tuple (Nvec_b, Nvec_f) from a given index of ADO, where b represents boson and f represents fermion
  • nvec2idx : Return the index from a given tuple (Nvec_b, Nvec_f), where b represents boson and f represents fermion
  • Blvl2idx : Return the list of ADO-indices from a given bosonic-hierarchy level
  • Flvl2idx : Return the list of ADO-indices from a given fermionic-hierarchy level
  • bosonPtr : Records the tuple $(\alpha, k)$ for each position in Nvec_b, where $\alpha$ and $k$ represents the $k$-th exponential-expansion term of the $\alpha$-th bosonic bath.
  • fermionPtr : Records the tuple $(\alpha, k)$ for each position in Nvec_f, where $\alpha$ and $k$ represents the $k$-th exponential-expansion term of the $\alpha$-th fermionic bath.
source
HierarchicalEOM.HeomAPI.getIndexEnsembleFunction
getIndexEnsemble(nvec, bathPtr)

Search for all the multi-index ensemble $(\alpha, k)$ where $\alpha$ and $k$ represents the $k$-th exponential-expansion term in the $\alpha$-th bath.

Parameters

Returns

  • Vector{Tuple{Int, Int, Int}}: a vector (list) of the tuples $(\alpha, k, n)$.

Example

Here is an example to use Bath, Exponent, HierarchyDict, and getIndexEnsemble together:

L::M_Fermion;          # suppose this is a fermion type of HEOM Liouvillian superoperator matrix you create
 HDict = L.hierarchy;   # the hierarchy dictionary
 ados = SteadyState(L); # the stationary state (ADOs) for L 
 
@@ -62,7 +62,7 @@
 
         # do some calculations you want
     end
-end
source

Time Evolution

There are two function definitions of HEOMsolve, which depend on different methods to solve the time evolution:

HierarchicalEOM.HeomAPI.HEOMsolveFunction
HEOMsolve(M, ρ0, Δt, steps; e_ops, threshold, nonzero_tol, verbose, filename)

Solve the time evolution for auxiliary density operators based on propagator (generated by FastExpm.jl).

Parameters

  • M::AbstractHEOMLSMatrix : the matrix given from HEOM model
  • ρ0::Union{QuantumObject,ADOs} : system initial state (density matrix) or initial auxiliary density operators (ADOs)
  • Δt::Real : A specific time step (time interval).
  • steps::Int : The number of time steps
  • e_ops::Union{Nothing,AbstractVector}: List of operators for which to calculate expectation values.
  • threshold::Real : Determines the threshold for the Taylor series. Defaults to 1.0e-6.
  • nonzero_tol::Real : Strips elements smaller than nonzero_tol at each computation step to preserve sparsity. Defaults to 1.0e-14.
  • verbose::Bool : To display verbose output and progress bar during the process or not. Defaults to true.
  • filename::String : If filename was specified, the ADOs at each time point will be saved into the JLD2 file "filename.jld2" after the solving process.

Notes

  • The ADOs will be saved depend on the keyword argument e_ops.
  • If e_ops is specified, the solution will only save the final ADOs, otherwise, it will save all the ADOs corresponding to tlist = 0:Δt:(Δt * steps).
  • For more details of the propagator, please refer to FastExpm.jl

Returns

source
HEOMsolve(M, ρ0, tlist; e_ops, solver, H_t, params, verbose, filename, SOLVEROptions...)

Solve the time evolution for auxiliary density operators based on ordinary differential equations.

Parameters

  • M::AbstractHEOMLSMatrix : the matrix given from HEOM model
  • ρ0::Union{QuantumObject,ADOs} : system initial state (density matrix) or initial auxiliary density operators (ADOs)
  • tlist::AbstractVector : Denote the specific time points to save the solution at, during the solving process.
  • e_ops::Union{Nothing,AbstractVector}: List of operators for which to calculate expectation values.
  • solver::OrdinaryDiffEqAlgorithm : solver in package DifferentialEquations.jl. Default to DP5().
  • H_t::Union{Nothing,Function,TimeDependentOperatorSum}=nothing: The time-dependent Hamiltonian or Liouvillian. It will be called by H_t(t, params).
  • params::NamedTuple=NamedTuple(): The parameters of the time evolution.
  • verbose::Bool : To display verbose output and progress bar during the process or not. Defaults to true.
  • filename::String : If filename was specified, the ADOs at each time point will be saved into the JLD2 file "filename.jld2" after the solving process.
  • SOLVEROptions : extra options for solver

Notes

  • The ADOs will be saved depend on the keyword argument saveat in kwargs.
  • If e_ops is specified, the default value of saveat=[tlist[end]] (only save the final ADOs), otherwise, saveat=tlist (saving the ADOs corresponding to tlist). You can also specify e_ops and saveat separately.
  • The default tolerances in kwargs are given as reltol=1e-6 and abstol=1e-8.
  • For more details about solver please refer to DifferentialEquations.jl (ODE Solvers)
  • For more details about SOLVEROptions please refer to DifferentialEquations.jl (Keyword Arguments)

Returns

source
HierarchicalEOM.HeomAPI.TimeEvolutionHEOMSolType
struct TimeEvolutionHEOMSol

A structure storing the results and some information from solving time evolution of hierarchical equations of motion (HEOM).

Fields (Attributes)

  • Btier : The tier (cutoff level) for bosonic hierarchy
  • Ftier : The tier (cutoff level) for fermionic hierarchy
  • times::AbstractVector: The time list of the evolution.
  • ados::Vector{ADOs}: The list of result ADOs at each time point.
  • expect::Matrix: The expectation values corresponding to each time point in times.
  • retcode: The return code from the solver.
  • alg: The algorithm which is used during the solving process.
  • abstol::Real: The absolute tolerance which is used during the solving process.
  • reltol::Real: The relative tolerance which is used during the solving process.
source

Stationary State

There are two function definitions of steadystate, which depend on different methods to solve the stationary state:

QuantumToolbox.steadystateFunction
steadystate(M::AbstractHEOMLSMatrix; solver, verbose, SOLVEROptions...)

Solve the steady state of the auxiliary density operators based on LinearSolve.jl (i.e., solving $x$ where $A \times x = b$).

Parameters

  • M::AbstractHEOMLSMatrix : the matrix given from HEOM model, where the parity should be EVEN.
  • solver::SciMLLinearSolveAlgorithm : solver in package LinearSolve.jl. Default to UMFPACKFactorization().
  • verbose::Bool : To display verbose output and progress bar during the process or not. Defaults to true.
  • SOLVEROptions : extra options for solver

Notes

  • For more details about solver and SOLVEROptions, please refer to LinearSolve.jl

Returns

  • ::ADOs : The steady state of auxiliary density operators.
source
steadystate(M::AbstractHEOMLSMatrix, ρ0, tspan; solver, verbose, SOLVEROptions...)

Solve the steady state of the auxiliary density operators based on time evolution (OrdinaryDiffEq.jl) with initial state is given in the type of density-matrix (ρ0).

Parameters

  • M::AbstractHEOMLSMatrix : the matrix given from HEOM model, where the parity should be EVEN.
  • ρ0::Union{QuantumObject,ADOs} : system initial state (density matrix) or initial auxiliary density operators (ADOs)
  • tspan::Number : the time limit to find stationary state. Default to Inf
  • solver::OrdinaryDiffEqAlgorithm : The ODE solvers in package DifferentialEquations.jl. Default to DP5().
  • verbose::Bool : To display verbose output and progress bar during the process or not. Defaults to true.
  • SOLVEROptions : extra options for solver

Notes

Returns

  • ::ADOs : The steady state of auxiliary density operators.
source

Spectrum

HierarchicalEOM.HeomAPI.PowerSpectrumFunction
PowerSpectrum(M, ρ, Q_op, ωlist, reverse; solver, verbose, filename, SOLVEROptions...)

Calculate power spectrum for the system in frequency domain where P_op will be automatically set as the adjoint of Q_op.

This function is equivalent to: PowerSpectrum(M, ρ, Q_op', Q_op, ωlist, reverse; solver, verbose, filename, SOLVEROptions...)

source
PowerSpectrum(M, ρ, P_op, Q_op, ωlist, reverse; solver, verbose, filename, SOLVEROptions...)

Calculate power spectrum for the system in frequency domain.

\[\pi S(\omega)=\textrm{Re}\left\{\int_0^\infty dt \langle P(t) Q(0)\rangle e^{-i\omega t}\right\},\]

To calculate spectrum when input operator Q_op has EVEN-parity:

remember to set the parameters:

  • M::AbstractHEOMLSMatrix: should be EVEN parity

To calculate spectrum when input operator Q_op has ODD-parity:

remember to set the parameters:

  • M::AbstractHEOMLSMatrix: should be ODD parity

Parameters

  • M::AbstractHEOMLSMatrix : the HEOMLS matrix.
  • ρ::Union{QuantumObject,ADOs} : the system density matrix or the auxiliary density operators.
  • P_op::Union{QuantumObject,HEOMSuperOp}: the system operator (or HEOMSuperOp) $P$ acting on the system.
  • Q_op::Union{QuantumObject,HEOMSuperOp}: the system operator (or HEOMSuperOp) $Q$ acting on the system.
  • ωlist::AbstractVector : the specific frequency points to solve.
  • reverse::Bool : If true, calculate $\langle P(-t)Q(0) \rangle = \langle P(0)Q(t) \rangle = \langle P(t)Q(0) \rangle^*$ instead of $\langle P(t) Q(0) \rangle$. Default to false.
  • solver::SciMLLinearSolveAlgorithm : solver in package LinearSolve.jl. Default to UMFPACKFactorization().
  • verbose::Bool : To display verbose output and progress bar during the process or not. Defaults to true.
  • filename::String : If filename was specified, the value of spectrum for each ω will be saved into the file "filename.txt" during the solving process.
  • SOLVEROptions : extra options for solver

Notes

  • For more details about solver and SOLVEROptions, please refer to LinearSolve.jl

Returns

  • spec::AbstractVector : the spectrum list corresponds to the specified ωlist
source
HierarchicalEOM.HeomAPI.DensityOfStatesFunction
DensityOfStates(M, ρ, d_op, ωlist; solver, verbose, filename, SOLVEROptions...)

Calculate density of states for the fermionic system in frequency domain.

\[ \pi A(\omega)=\textrm{Re}\left\{\int_0^\infty dt \left[\langle d(t) d^\dagger(0)\rangle^* + \langle d^\dagger(t) d(0)\rangle \right] e^{-i\omega t}\right\},\]

Parameters

  • M::AbstractHEOMLSMatrix : the HEOMLS matrix which acts on ODD-parity operators.
  • ρ::Union{QuantumObject,ADOs} : the system density matrix or the auxiliary density operators.
  • d_op::QuantumObject : The annihilation operator ($d$ as shown above) acting on the fermionic system.
  • ωlist::AbstractVector : the specific frequency points to solve.
  • solver::SciMLLinearSolveAlgorithm : solver in package LinearSolve.jl. Default to UMFPACKFactorization().
  • verbose::Bool : To display verbose output and progress bar during the process or not. Defaults to true.
  • filename::String : If filename was specified, the value of spectrum for each ω will be saved into the file "filename.txt" during the solving process.
  • SOLVEROptions : extra options for solver

Notes

  • For more details about solver and SOLVEROptions, please refer to LinearSolve.jl

Returns

  • dos::AbstractVector : the list of density of states corresponds to the specified ωlist
source

Misc.

The outputs will be something like the following:

using HierarchicalEOM
+end
source

Time Evolution

There are two function definitions of HEOMsolve, which depend on different methods to solve the time evolution:

HierarchicalEOM.HeomAPI.HEOMsolveFunction
HEOMsolve(M, ρ0, Δt, steps; e_ops, threshold, nonzero_tol, verbose, filename)

Solve the time evolution for auxiliary density operators based on propagator (generated by FastExpm.jl).

Parameters

  • M::AbstractHEOMLSMatrix : the matrix given from HEOM model
  • ρ0::Union{QuantumObject,ADOs} : system initial state (density matrix) or initial auxiliary density operators (ADOs)
  • Δt::Real : A specific time step (time interval).
  • steps::Int : The number of time steps
  • e_ops::Union{Nothing,AbstractVector}: List of operators for which to calculate expectation values.
  • threshold::Real : Determines the threshold for the Taylor series. Defaults to 1.0e-6.
  • nonzero_tol::Real : Strips elements smaller than nonzero_tol at each computation step to preserve sparsity. Defaults to 1.0e-14.
  • verbose::Bool : To display verbose output and progress bar during the process or not. Defaults to true.
  • filename::String : If filename was specified, the ADOs at each time point will be saved into the JLD2 file "filename.jld2" after the solving process.

Notes

  • The ADOs will be saved depend on the keyword argument e_ops.
  • If e_ops is specified, the solution will only save the final ADOs, otherwise, it will save all the ADOs corresponding to tlist = 0:Δt:(Δt * steps).
  • For more details of the propagator, please refer to FastExpm.jl

Returns

source
HEOMsolve(M, ρ0, tlist; e_ops, solver, H_t, params, verbose, filename, SOLVEROptions...)

Solve the time evolution for auxiliary density operators based on ordinary differential equations.

Parameters

  • M::AbstractHEOMLSMatrix : the matrix given from HEOM model
  • ρ0::Union{QuantumObject,ADOs} : system initial state (density matrix) or initial auxiliary density operators (ADOs)
  • tlist::AbstractVector : Denote the specific time points to save the solution at, during the solving process.
  • e_ops::Union{Nothing,AbstractVector}: List of operators for which to calculate expectation values.
  • solver::OrdinaryDiffEqAlgorithm : solver in package DifferentialEquations.jl. Default to DP5().
  • H_t::Union{Nothing,Function,TimeDependentOperatorSum}=nothing: The time-dependent Hamiltonian or Liouvillian. It will be called by H_t(t, params).
  • params::NamedTuple=NamedTuple(): The parameters of the time evolution.
  • verbose::Bool : To display verbose output and progress bar during the process or not. Defaults to true.
  • filename::String : If filename was specified, the ADOs at each time point will be saved into the JLD2 file "filename.jld2" after the solving process.
  • SOLVEROptions : extra options for solver

Notes

  • The ADOs will be saved depend on the keyword argument saveat in kwargs.
  • If e_ops is specified, the default value of saveat=[tlist[end]] (only save the final ADOs), otherwise, saveat=tlist (saving the ADOs corresponding to tlist). You can also specify e_ops and saveat separately.
  • The default tolerances in kwargs are given as reltol=1e-6 and abstol=1e-8.
  • For more details about solver please refer to DifferentialEquations.jl (ODE Solvers)
  • For more details about SOLVEROptions please refer to DifferentialEquations.jl (Keyword Arguments)

Returns

source
HierarchicalEOM.HeomAPI.TimeEvolutionHEOMSolType
struct TimeEvolutionHEOMSol

A structure storing the results and some information from solving time evolution of hierarchical equations of motion (HEOM).

Fields (Attributes)

  • Btier : The tier (cutoff level) for bosonic hierarchy
  • Ftier : The tier (cutoff level) for fermionic hierarchy
  • times::AbstractVector: The time list of the evolution.
  • ados::Vector{ADOs}: The list of result ADOs at each time point.
  • expect::Matrix: The expectation values corresponding to each time point in times.
  • retcode: The return code from the solver.
  • alg: The algorithm which is used during the solving process.
  • abstol::Real: The absolute tolerance which is used during the solving process.
  • reltol::Real: The relative tolerance which is used during the solving process.
source

Stationary State

There are two function definitions of steadystate, which depend on different methods to solve the stationary state:

QuantumToolbox.steadystateFunction
steadystate(M::AbstractHEOMLSMatrix; solver, verbose, SOLVEROptions...)

Solve the steady state of the auxiliary density operators based on LinearSolve.jl (i.e., solving $x$ where $A \times x = b$).

Parameters

  • M::AbstractHEOMLSMatrix : the matrix given from HEOM model, where the parity should be EVEN.
  • solver::SciMLLinearSolveAlgorithm : solver in package LinearSolve.jl. Default to UMFPACKFactorization().
  • verbose::Bool : To display verbose output and progress bar during the process or not. Defaults to true.
  • SOLVEROptions : extra options for solver

Notes

  • For more details about solver and SOLVEROptions, please refer to LinearSolve.jl

Returns

  • ::ADOs : The steady state of auxiliary density operators.
source
steadystate(M::AbstractHEOMLSMatrix, ρ0, tspan; solver, verbose, SOLVEROptions...)

Solve the steady state of the auxiliary density operators based on time evolution (OrdinaryDiffEq.jl) with initial state is given in the type of density-matrix (ρ0).

Parameters

  • M::AbstractHEOMLSMatrix : the matrix given from HEOM model, where the parity should be EVEN.
  • ρ0::Union{QuantumObject,ADOs} : system initial state (density matrix) or initial auxiliary density operators (ADOs)
  • tspan::Number : the time limit to find stationary state. Default to Inf
  • solver::OrdinaryDiffEqAlgorithm : The ODE solvers in package DifferentialEquations.jl. Default to DP5().
  • verbose::Bool : To display verbose output and progress bar during the process or not. Defaults to true.
  • SOLVEROptions : extra options for solver

Notes

Returns

  • ::ADOs : The steady state of auxiliary density operators.
source

Spectrum

HierarchicalEOM.HeomAPI.PowerSpectrumFunction
PowerSpectrum(M, ρ, Q_op, ωlist, reverse; solver, verbose, filename, SOLVEROptions...)

Calculate power spectrum for the system in frequency domain where P_op will be automatically set as the adjoint of Q_op.

This function is equivalent to: PowerSpectrum(M, ρ, Q_op', Q_op, ωlist, reverse; solver, verbose, filename, SOLVEROptions...)

source
PowerSpectrum(M, ρ, P_op, Q_op, ωlist, reverse; solver, verbose, filename, SOLVEROptions...)

Calculate power spectrum for the system in frequency domain.

\[\pi S(\omega)=\textrm{Re}\left\{\int_0^\infty dt \langle P(t) Q(0)\rangle e^{-i\omega t}\right\},\]

To calculate spectrum when input operator Q_op has EVEN-parity:

remember to set the parameters:

  • M::AbstractHEOMLSMatrix: should be EVEN parity

To calculate spectrum when input operator Q_op has ODD-parity:

remember to set the parameters:

  • M::AbstractHEOMLSMatrix: should be ODD parity

Parameters

  • M::AbstractHEOMLSMatrix : the HEOMLS matrix.
  • ρ::Union{QuantumObject,ADOs} : the system density matrix or the auxiliary density operators.
  • P_op::Union{QuantumObject,HEOMSuperOp}: the system operator (or HEOMSuperOp) $P$ acting on the system.
  • Q_op::Union{QuantumObject,HEOMSuperOp}: the system operator (or HEOMSuperOp) $Q$ acting on the system.
  • ωlist::AbstractVector : the specific frequency points to solve.
  • reverse::Bool : If true, calculate $\langle P(-t)Q(0) \rangle = \langle P(0)Q(t) \rangle = \langle P(t)Q(0) \rangle^*$ instead of $\langle P(t) Q(0) \rangle$. Default to false.
  • solver::SciMLLinearSolveAlgorithm : solver in package LinearSolve.jl. Default to UMFPACKFactorization().
  • verbose::Bool : To display verbose output and progress bar during the process or not. Defaults to true.
  • filename::String : If filename was specified, the value of spectrum for each ω will be saved into the file "filename.txt" during the solving process.
  • SOLVEROptions : extra options for solver

Notes

  • For more details about solver and SOLVEROptions, please refer to LinearSolve.jl

Returns

  • spec::AbstractVector : the spectrum list corresponds to the specified ωlist
source
HierarchicalEOM.HeomAPI.DensityOfStatesFunction
DensityOfStates(M, ρ, d_op, ωlist; solver, verbose, filename, SOLVEROptions...)

Calculate density of states for the fermionic system in frequency domain.

\[ \pi A(\omega)=\textrm{Re}\left\{\int_0^\infty dt \left[\langle d(t) d^\dagger(0)\rangle^* + \langle d^\dagger(t) d(0)\rangle \right] e^{-i\omega t}\right\},\]

Parameters

  • M::AbstractHEOMLSMatrix : the HEOMLS matrix which acts on ODD-parity operators.
  • ρ::Union{QuantumObject,ADOs} : the system density matrix or the auxiliary density operators.
  • d_op::QuantumObject : The annihilation operator ($d$ as shown above) acting on the fermionic system.
  • ωlist::AbstractVector : the specific frequency points to solve.
  • solver::SciMLLinearSolveAlgorithm : solver in package LinearSolve.jl. Default to UMFPACKFactorization().
  • verbose::Bool : To display verbose output and progress bar during the process or not. Defaults to true.
  • filename::String : If filename was specified, the value of spectrum for each ω will be saved into the file "filename.txt" during the solving process.
  • SOLVEROptions : extra options for solver

Notes

  • For more details about solver and SOLVEROptions, please refer to LinearSolve.jl

Returns

  • dos::AbstractVector : the list of density of states corresponds to the specified ωlist
source

Misc.

The outputs will be something like the following:

using HierarchicalEOM
 HierarchicalEOM.versioninfo()

                                    __
                                   /  \
@@ -99,7 +99,7 @@
 LIBM     : libopenlibm
 LLVM     : libLLVM-16.0.6 (ORCJIT, znver3)
 BLAS     : libopenblas64_.so (ilp64)
-Threads  : 1 (on 4 virtual cores)

The output will be something like the following:

using HierarchicalEOM
+Threads  : 1 (on 4 virtual cores)

The output will be something like the following:

using HierarchicalEOM
 HierarchicalEOM.print_logo()
                                   __
                                   /  \
  __     __                     __ \__/ __
@@ -109,4 +109,4 @@
 |   ___   |  |__)  |  /  \  |    _     _   |
 |  |   |  |   ____/| (    ) |   / \   / \  |
 |  |   |  |  |____ |  \__/  |  |   | |   | |
-|__|   |__|\______) \______/|__|   |_|   |_|
+|__| |__|\______) \______/|__| |_| |_| diff --git a/dev/spectrum/index.html b/dev/spectrum/index.html index 4285ea52..377ab42c 100644 --- a/dev/spectrum/index.html +++ b/dev/spectrum/index.html @@ -19,7 +19,7 @@ &= \textrm{Re}\left\{\int_0^\infty dt \langle P e^{\hat{\mathcal{M}} t}Q\rangle e^{-i\omega t}\right\}\\ &= -\textrm{Re}\left\{\langle P (\hat{\mathcal{M}} -i\omega)^{-1} Q\rangle\right\}\\ &= -\textrm{Re}\left\{\textrm{Tr}\left[ P (\hat{\mathcal{M}} -i\omega)^{-1} Q\rho^{(m,n,+)}_{\textbf{j} \vert \textbf{q}}\right]\right\}, -\end{aligned}\]

where a half-Fourier transform has been introduced in the third line. We note that only the reduced density operator ($m=n=0$) is considered when taking the final trace operation.

This function solves the linear problem $\textbf{A x}=\textbf{b}$ at a fixed frequency $\omega$ where

  • $\textbf{A}=\hat{\mathcal{M}}-i\omega$
  • $\textbf{b}=Q\rho^{(m,n,+)}_{\textbf{j} \vert \textbf{q}}$

using the package LinearSolve.jl.

Finially, one can obtain the value of the power spectrum for specific $\omega$, namely

\[\pi S(\omega) = -\textrm{Re}\left\{\textrm{Tr}\left[ P \textbf{x}\right]\right\}.\]

Odd-Parity for Power Spectrum

When $Q$ is an operator acting on fermionic systems and has ODD-parity, the HEOMLS matrix $\hat{\mathcal{M}}$ is acting on the ODD-parity space because $\textbf{b}=Q\rho^{(m,n,+)}_{\textbf{j} \vert \textbf{q}}$. Therefore, remember to construct $\hat{\mathcal{M}}$ with ODD parity in this kind of cases.

See also the docstring :

HierarchicalEOM.HeomAPI.PowerSpectrumFunction
PowerSpectrum(M, ρ, P_op, Q_op, ωlist, reverse; solver, verbose, filename, SOLVEROptions...)

Calculate power spectrum for the system in frequency domain.

\[\pi S(\omega)=\textrm{Re}\left\{\int_0^\infty dt \langle P(t) Q(0)\rangle e^{-i\omega t}\right\},\]

To calculate spectrum when input operator Q_op has EVEN-parity:

remember to set the parameters:

  • M::AbstractHEOMLSMatrix: should be EVEN parity

To calculate spectrum when input operator Q_op has ODD-parity:

remember to set the parameters:

  • M::AbstractHEOMLSMatrix: should be ODD parity

Parameters

  • M::AbstractHEOMLSMatrix : the HEOMLS matrix.
  • ρ::Union{QuantumObject,ADOs} : the system density matrix or the auxiliary density operators.
  • P_op::Union{QuantumObject,HEOMSuperOp}: the system operator (or HEOMSuperOp) $P$ acting on the system.
  • Q_op::Union{QuantumObject,HEOMSuperOp}: the system operator (or HEOMSuperOp) $Q$ acting on the system.
  • ωlist::AbstractVector : the specific frequency points to solve.
  • reverse::Bool : If true, calculate $\langle P(-t)Q(0) \rangle = \langle P(0)Q(t) \rangle = \langle P(t)Q(0) \rangle^*$ instead of $\langle P(t) Q(0) \rangle$. Default to false.
  • solver::SciMLLinearSolveAlgorithm : solver in package LinearSolve.jl. Default to UMFPACKFactorization().
  • verbose::Bool : To display verbose output and progress bar during the process or not. Defaults to true.
  • filename::String : If filename was specified, the value of spectrum for each ω will be saved into the file "filename.txt" during the solving process.
  • SOLVEROptions : extra options for solver

Notes

  • For more details about solver and SOLVEROptions, please refer to LinearSolve.jl

Returns

  • spec::AbstractVector : the spectrum list corresponds to the specified ωlist
source
M::AbstractHEOMLSMatrix
+\end{aligned}\]

where a half-Fourier transform has been introduced in the third line. We note that only the reduced density operator ($m=n=0$) is considered when taking the final trace operation.

This function solves the linear problem $\textbf{A x}=\textbf{b}$ at a fixed frequency $\omega$ where

  • $\textbf{A}=\hat{\mathcal{M}}-i\omega$
  • $\textbf{b}=Q\rho^{(m,n,+)}_{\textbf{j} \vert \textbf{q}}$

using the package LinearSolve.jl.

Finially, one can obtain the value of the power spectrum for specific $\omega$, namely

\[\pi S(\omega) = -\textrm{Re}\left\{\textrm{Tr}\left[ P \textbf{x}\right]\right\}.\]

Odd-Parity for Power Spectrum

When $Q$ is an operator acting on fermionic systems and has ODD-parity, the HEOMLS matrix $\hat{\mathcal{M}}$ is acting on the ODD-parity space because $\textbf{b}=Q\rho^{(m,n,+)}_{\textbf{j} \vert \textbf{q}}$. Therefore, remember to construct $\hat{\mathcal{M}}$ with ODD parity in this kind of cases.

See also the docstring :

HierarchicalEOM.HeomAPI.PowerSpectrumFunction
PowerSpectrum(M, ρ, P_op, Q_op, ωlist, reverse; solver, verbose, filename, SOLVEROptions...)

Calculate power spectrum for the system in frequency domain.

\[\pi S(\omega)=\textrm{Re}\left\{\int_0^\infty dt \langle P(t) Q(0)\rangle e^{-i\omega t}\right\},\]

To calculate spectrum when input operator Q_op has EVEN-parity:

remember to set the parameters:

  • M::AbstractHEOMLSMatrix: should be EVEN parity

To calculate spectrum when input operator Q_op has ODD-parity:

remember to set the parameters:

  • M::AbstractHEOMLSMatrix: should be ODD parity

Parameters

  • M::AbstractHEOMLSMatrix : the HEOMLS matrix.
  • ρ::Union{QuantumObject,ADOs} : the system density matrix or the auxiliary density operators.
  • P_op::Union{QuantumObject,HEOMSuperOp}: the system operator (or HEOMSuperOp) $P$ acting on the system.
  • Q_op::Union{QuantumObject,HEOMSuperOp}: the system operator (or HEOMSuperOp) $Q$ acting on the system.
  • ωlist::AbstractVector : the specific frequency points to solve.
  • reverse::Bool : If true, calculate $\langle P(-t)Q(0) \rangle = \langle P(0)Q(t) \rangle = \langle P(t)Q(0) \rangle^*$ instead of $\langle P(t) Q(0) \rangle$. Default to false.
  • solver::SciMLLinearSolveAlgorithm : solver in package LinearSolve.jl. Default to UMFPACKFactorization().
  • verbose::Bool : To display verbose output and progress bar during the process or not. Defaults to true.
  • filename::String : If filename was specified, the value of spectrum for each ω will be saved into the file "filename.txt" during the solving process.
  • SOLVEROptions : extra options for solver

Notes

  • For more details about solver and SOLVEROptions, please refer to LinearSolve.jl

Returns

  • spec::AbstractVector : the spectrum list corresponds to the specified ωlist
source
M::AbstractHEOMLSMatrix
 
 # the input state can be in either type (but usually ADOs):
 ρ::QuantumObject # the reduced density operator
@@ -38,7 +38,7 @@
 &= \textrm{Re}\left\{\int_0^\infty dt \langle d e^{\hat{\mathcal{M}} t}d^\dagger\rangle e^{i\omega t}\right\}+\textrm{Re}\left\{\int_0^\infty dt \langle d^\dagger e^{\hat{\mathcal{M}} t}d\rangle e^{-i\omega t}\right\}\\
 &= -\textrm{Re}\left\{\langle d (\hat{\mathcal{M}} +i\omega)^{-1} d^\dagger\rangle + \langle d^\dagger (\hat{\mathcal{M}} -i\omega)^{-1} d\rangle\right\}\\
 &= -\textrm{Re}\left\{\textrm{Tr}\left[ d (\hat{\mathcal{M}} +i\omega)^{-1} d^\dagger\rho^{(m,n,+)}_{\textbf{j} \vert \textbf{q}}\right] + \textrm{Tr}\left[ d^\dagger (\hat{\mathcal{M}} -i\omega)^{-1} d\rho^{(m,n,+)}_{\textbf{j} \vert \textbf{q}}\right]\right\},
-\end{aligned}\]

where a half-Fourier transform has been introduced in the third line. We note that only the reduced density operator ($m=n=0$) is considered when taking the final trace operation.

This functionsolves two linear problems $\textbf{A}_+ \textbf{x}_+=\textbf{b}_+$ and $\textbf{A}_- \textbf{x}_-=\textbf{b}_-$ at a fixed frequency $\omega$ where

  • $\textbf{A}_+=\hat{\mathcal{M}}+i\omega$
  • $\textbf{b}_+=d^\dagger\rho^{(m,n,+)}_{\textbf{j} \vert \textbf{q}}$
  • $\textbf{A}_-=\hat{\mathcal{M}}-i\omega$
  • $\textbf{b}_-=d\rho^{(m,n,+)}_{\textbf{j} \vert \textbf{q}}$

using the package LinearSolve.jl.

Finially, one can obtain the density of states for specific $\omega$, namely

\[\pi A(\omega) = -\textrm{Re}\left\{\textrm{Tr}\left[ d \textbf{x}_+\right]+\textrm{Tr}\left[ d^\dagger \textbf{x}_-\right]\right\}.\]

Odd-Parity for Density of States

As shown above, the HEOMLS matrix $\hat{\mathcal{M}}$ acts on the ODD-parity space, compatibly with the parity of both the operators $\textbf{b}_-=d\rho^{(m,n,+)}_{\textbf{j} \vert \textbf{q}}$ and $\textbf{b}_+=d^\dagger\rho^{(m,n,+)}_{\textbf{j} \vert \textbf{q}}$. Therefore, remember to construct $\hat{\mathcal{M}}$ with ODD parity for solving spectrum of fermionic systems.

See also the docstring :

HierarchicalEOM.HeomAPI.DensityOfStatesMethod
DensityOfStates(M, ρ, d_op, ωlist; solver, verbose, filename, SOLVEROptions...)

Calculate density of states for the fermionic system in frequency domain.

\[ \pi A(\omega)=\textrm{Re}\left\{\int_0^\infty dt \left[\langle d(t) d^\dagger(0)\rangle^* + \langle d^\dagger(t) d(0)\rangle \right] e^{-i\omega t}\right\},\]

Parameters

  • M::AbstractHEOMLSMatrix : the HEOMLS matrix which acts on ODD-parity operators.
  • ρ::Union{QuantumObject,ADOs} : the system density matrix or the auxiliary density operators.
  • d_op::QuantumObject : The annihilation operator ($d$ as shown above) acting on the fermionic system.
  • ωlist::AbstractVector : the specific frequency points to solve.
  • solver::SciMLLinearSolveAlgorithm : solver in package LinearSolve.jl. Default to UMFPACKFactorization().
  • verbose::Bool : To display verbose output and progress bar during the process or not. Defaults to true.
  • filename::String : If filename was specified, the value of spectrum for each ω will be saved into the file "filename.txt" during the solving process.
  • SOLVEROptions : extra options for solver

Notes

  • For more details about solver and SOLVEROptions, please refer to LinearSolve.jl

Returns

  • dos::AbstractVector : the list of density of states corresponds to the specified ωlist
source
Hs::QuantumObject  # system Hamiltonian
+\end{aligned}\]

where a half-Fourier transform has been introduced in the third line. We note that only the reduced density operator ($m=n=0$) is considered when taking the final trace operation.

This functionsolves two linear problems $\textbf{A}_+ \textbf{x}_+=\textbf{b}_+$ and $\textbf{A}_- \textbf{x}_-=\textbf{b}_-$ at a fixed frequency $\omega$ where

  • $\textbf{A}_+=\hat{\mathcal{M}}+i\omega$
  • $\textbf{b}_+=d^\dagger\rho^{(m,n,+)}_{\textbf{j} \vert \textbf{q}}$
  • $\textbf{A}_-=\hat{\mathcal{M}}-i\omega$
  • $\textbf{b}_-=d\rho^{(m,n,+)}_{\textbf{j} \vert \textbf{q}}$

using the package LinearSolve.jl.

Finially, one can obtain the density of states for specific $\omega$, namely

\[\pi A(\omega) = -\textrm{Re}\left\{\textrm{Tr}\left[ d \textbf{x}_+\right]+\textrm{Tr}\left[ d^\dagger \textbf{x}_-\right]\right\}.\]

Odd-Parity for Density of States

As shown above, the HEOMLS matrix $\hat{\mathcal{M}}$ acts on the ODD-parity space, compatibly with the parity of both the operators $\textbf{b}_-=d\rho^{(m,n,+)}_{\textbf{j} \vert \textbf{q}}$ and $\textbf{b}_+=d^\dagger\rho^{(m,n,+)}_{\textbf{j} \vert \textbf{q}}$. Therefore, remember to construct $\hat{\mathcal{M}}$ with ODD parity for solving spectrum of fermionic systems.

See also the docstring :

HierarchicalEOM.HeomAPI.DensityOfStatesMethod
DensityOfStates(M, ρ, d_op, ωlist; solver, verbose, filename, SOLVEROptions...)

Calculate density of states for the fermionic system in frequency domain.

\[ \pi A(\omega)=\textrm{Re}\left\{\int_0^\infty dt \left[\langle d(t) d^\dagger(0)\rangle^* + \langle d^\dagger(t) d(0)\rangle \right] e^{-i\omega t}\right\},\]

Parameters

  • M::AbstractHEOMLSMatrix : the HEOMLS matrix which acts on ODD-parity operators.
  • ρ::Union{QuantumObject,ADOs} : the system density matrix or the auxiliary density operators.
  • d_op::QuantumObject : The annihilation operator ($d$ as shown above) acting on the fermionic system.
  • ωlist::AbstractVector : the specific frequency points to solve.
  • solver::SciMLLinearSolveAlgorithm : solver in package LinearSolve.jl. Default to UMFPACKFactorization().
  • verbose::Bool : To display verbose output and progress bar during the process or not. Defaults to true.
  • filename::String : If filename was specified, the value of spectrum for each ω will be saved into the file "filename.txt" during the solving process.
  • SOLVEROptions : extra options for solver

Notes

  • For more details about solver and SOLVEROptions, please refer to LinearSolve.jl

Returns

  • dos::AbstractVector : the list of density of states corresponds to the specified ωlist
source
Hs::QuantumObject  # system Hamiltonian
 bath::FermionBath  # fermionic bath object
 tier::Int          # fermionic truncation level 
 
@@ -55,4 +55,4 @@
 # the spectrum value for the specific frequency ω which need to be solved
 ω_list = 0:0.5:2 # [0.0, 0.5, 1.0, 1.5, 2.0]
 
-πAω = DensityOfStates(M_odd, ados, d, ω_list)
+πAω = DensityOfStates(M_odd, ados, d, ω_list)
diff --git a/dev/stationary_state/index.html b/dev/stationary_state/index.html index 887ece69..0a42f445 100644 --- a/dev/stationary_state/index.html +++ b/dev/stationary_state/index.html @@ -1,16 +1,16 @@ -Stationary State · Documentation | HierarchicalEOM.jl

Stationary State

HierarchicalEOM.jl implements two different ways to calculate stationary states of all Auxiliary Density Operators (ADOs).

To solve the stationary state of the reduced state and also all the ADOs, you only need to call steadystate. Different methods are implemented with different input parameters of the function which makes it easy to switch between different methods. The output of the function steadystate for each methods will always be in the type of the auxiliary density operators ADOs.

Solve with LinearSolve.jl

The first method is implemented by solving the linear problem

\[0=\hat{\mathcal{M}}\rho^{(m,n,p)}_{\textbf{j} \vert \textbf{q}}(t)\]

HierarchicalEOM.jl wraps some of the functions in LinearSolve.jl, which is a very rich numerical library for solving the linear problems and provides many solvers. It offers quite a few options for the user to tailor the solver to their specific needs. The default solver (and its corresponding settings) are chosen to suit commonly encountered problems and should work fine for most of the cases. If you require more specialized methods, such as the choice of algorithm, please refer to LinearSolve solvers and also the documentation of LinearSolve.jl.

See the docstring of this method:

QuantumToolbox.steadystateMethod
steadystate(M::AbstractHEOMLSMatrix; solver, verbose, SOLVEROptions...)

Solve the steady state of the auxiliary density operators based on LinearSolve.jl (i.e., solving $x$ where $A \times x = b$).

Parameters

  • M::AbstractHEOMLSMatrix : the matrix given from HEOM model, where the parity should be EVEN.
  • solver::SciMLLinearSolveAlgorithm : solver in package LinearSolve.jl. Default to UMFPACKFactorization().
  • verbose::Bool : To display verbose output and progress bar during the process or not. Defaults to true.
  • SOLVEROptions : extra options for solver

Notes

  • For more details about solver and SOLVEROptions, please refer to LinearSolve.jl

Returns

  • ::ADOs : The steady state of auxiliary density operators.
source
# the HEOMLS matrix
+Stationary State · Documentation | HierarchicalEOM.jl

Stationary State

HierarchicalEOM.jl implements two different ways to calculate stationary states of all Auxiliary Density Operators (ADOs).

To solve the stationary state of the reduced state and also all the ADOs, you only need to call steadystate. Different methods are implemented with different input parameters of the function which makes it easy to switch between different methods. The output of the function steadystate for each methods will always be in the type of the auxiliary density operators ADOs.

Solve with LinearSolve.jl

The first method is implemented by solving the linear problem

\[0=\hat{\mathcal{M}}\rho^{(m,n,p)}_{\textbf{j} \vert \textbf{q}}(t)\]

HierarchicalEOM.jl wraps some of the functions in LinearSolve.jl, which is a very rich numerical library for solving the linear problems and provides many solvers. It offers quite a few options for the user to tailor the solver to their specific needs. The default solver (and its corresponding settings) are chosen to suit commonly encountered problems and should work fine for most of the cases. If you require more specialized methods, such as the choice of algorithm, please refer to LinearSolve solvers and also the documentation of LinearSolve.jl.

See the docstring of this method:

QuantumToolbox.steadystateMethod
steadystate(M::AbstractHEOMLSMatrix; solver, verbose, SOLVEROptions...)

Solve the steady state of the auxiliary density operators based on LinearSolve.jl (i.e., solving $x$ where $A \times x = b$).

Parameters

  • M::AbstractHEOMLSMatrix : the matrix given from HEOM model, where the parity should be EVEN.
  • solver::SciMLLinearSolveAlgorithm : solver in package LinearSolve.jl. Default to UMFPACKFactorization().
  • verbose::Bool : To display verbose output and progress bar during the process or not. Defaults to true.
  • SOLVEROptions : extra options for solver

Notes

  • For more details about solver and SOLVEROptions, please refer to LinearSolve.jl

Returns

  • ::ADOs : The steady state of auxiliary density operators.
source
# the HEOMLS matrix
 M::AbstractHEOMLSMatrix  
-ados_steady = steadystate(M)
Unphysical solution

This method does not require an initial condition $\rho^{(m,n,p)}_{\textbf{j} \vert \textbf{q}}(0)$. Although this method works for most of the cases, it does not guarantee that one can obtain a physical (or unique) solution. If there is any problem within the solution, please try the second method which solves with an initial condition, as shown below.

Solve with DifferentialEquations.jl

The second method is implemented by solving the ordinary differential equation (ODE) method :

\[\partial_{t}\rho^{(m,n,p)}_{\textbf{j} \vert \textbf{q}}(t)=\hat{\mathcal{M}}\rho^{(m,n,p)}_{\textbf{j} \vert \textbf{q}}(t)\]

until finding a stationary solution.

HierarchicalEOM.jl wraps some of the functions in DifferentialEquations.jl, which is a very rich numerical library for solving the differential equations and provides many ODE solvers. It offers quite a few options for the user to tailor the solver to their specific needs. The default solver (and its corresponding settings) are chosen to suit commonly encountered problems and should work fine for most of the cases. If you require more specialized methods, such as the choice of algorithm, please refer to the documentation of DifferentialEquations.jl.

Given the initial state as Density Operator (QuantumObject type)

See the docstring of this method:

QuantumToolbox.steadystateFunction
steadystate(M::AbstractHEOMLSMatrix, ρ0, tspan; solver, verbose, SOLVEROptions...)

Solve the steady state of the auxiliary density operators based on time evolution (OrdinaryDiffEq.jl) with initial state is given in the type of density-matrix (ρ0).

Parameters

  • M::AbstractHEOMLSMatrix : the matrix given from HEOM model, where the parity should be EVEN.
  • ρ0::Union{QuantumObject,ADOs} : system initial state (density matrix) or initial auxiliary density operators (ADOs)
  • tspan::Number : the time limit to find stationary state. Default to Inf
  • solver::OrdinaryDiffEqAlgorithm : The ODE solvers in package DifferentialEquations.jl. Default to DP5().
  • verbose::Bool : To display verbose output and progress bar during the process or not. Defaults to true.
  • SOLVEROptions : extra options for solver

Notes

Returns

  • ::ADOs : The steady state of auxiliary density operators.
source
# the HEOMLS matrix
+ados_steady = steadystate(M)
Unphysical solution

This method does not require an initial condition $\rho^{(m,n,p)}_{\textbf{j} \vert \textbf{q}}(0)$. Although this method works for most of the cases, it does not guarantee that one can obtain a physical (or unique) solution. If there is any problem within the solution, please try the second method which solves with an initial condition, as shown below.

Solve with DifferentialEquations.jl

The second method is implemented by solving the ordinary differential equation (ODE) method :

\[\partial_{t}\rho^{(m,n,p)}_{\textbf{j} \vert \textbf{q}}(t)=\hat{\mathcal{M}}\rho^{(m,n,p)}_{\textbf{j} \vert \textbf{q}}(t)\]

until finding a stationary solution.

HierarchicalEOM.jl wraps some of the functions in DifferentialEquations.jl, which is a very rich numerical library for solving the differential equations and provides many ODE solvers. It offers quite a few options for the user to tailor the solver to their specific needs. The default solver (and its corresponding settings) are chosen to suit commonly encountered problems and should work fine for most of the cases. If you require more specialized methods, such as the choice of algorithm, please refer to the documentation of DifferentialEquations.jl.

Given the initial state as Density Operator (QuantumObject type)

See the docstring of this method:

QuantumToolbox.steadystateFunction
steadystate(M::AbstractHEOMLSMatrix, ρ0, tspan; solver, verbose, SOLVEROptions...)

Solve the steady state of the auxiliary density operators based on time evolution (OrdinaryDiffEq.jl) with initial state is given in the type of density-matrix (ρ0).

Parameters

  • M::AbstractHEOMLSMatrix : the matrix given from HEOM model, where the parity should be EVEN.
  • ρ0::Union{QuantumObject,ADOs} : system initial state (density matrix) or initial auxiliary density operators (ADOs)
  • tspan::Number : the time limit to find stationary state. Default to Inf
  • solver::OrdinaryDiffEqAlgorithm : The ODE solvers in package DifferentialEquations.jl. Default to DP5().
  • verbose::Bool : To display verbose output and progress bar during the process or not. Defaults to true.
  • SOLVEROptions : extra options for solver

Notes

Returns

  • ::ADOs : The steady state of auxiliary density operators.
source
# the HEOMLS matrix
 M::AbstractHEOMLSMatrix  
 
 # the initial state of the system density operator
 ρ0::QuantumObject
 
-ados_steady = steadystate(M, ρ0)

Given the initial state as Auxiliary Density Operators

See the docstring of this method:

QuantumToolbox.steadystateFunction
steadystate(M::AbstractHEOMLSMatrix, ρ0, tspan; solver, verbose, SOLVEROptions...)

Solve the steady state of the auxiliary density operators based on time evolution (OrdinaryDiffEq.jl) with initial state is given in the type of density-matrix (ρ0).

Parameters

  • M::AbstractHEOMLSMatrix : the matrix given from HEOM model, where the parity should be EVEN.
  • ρ0::Union{QuantumObject,ADOs} : system initial state (density matrix) or initial auxiliary density operators (ADOs)
  • tspan::Number : the time limit to find stationary state. Default to Inf
  • solver::OrdinaryDiffEqAlgorithm : The ODE solvers in package DifferentialEquations.jl. Default to DP5().
  • verbose::Bool : To display verbose output and progress bar during the process or not. Defaults to true.
  • SOLVEROptions : extra options for solver

Notes

Returns

  • ::ADOs : The steady state of auxiliary density operators.
source
# the HEOMLS matrix
+ados_steady = steadystate(M, ρ0)

Given the initial state as Auxiliary Density Operators

See the docstring of this method:

QuantumToolbox.steadystateFunction
steadystate(M::AbstractHEOMLSMatrix, ρ0, tspan; solver, verbose, SOLVEROptions...)

Solve the steady state of the auxiliary density operators based on time evolution (OrdinaryDiffEq.jl) with initial state is given in the type of density-matrix (ρ0).

Parameters

  • M::AbstractHEOMLSMatrix : the matrix given from HEOM model, where the parity should be EVEN.
  • ρ0::Union{QuantumObject,ADOs} : system initial state (density matrix) or initial auxiliary density operators (ADOs)
  • tspan::Number : the time limit to find stationary state. Default to Inf
  • solver::OrdinaryDiffEqAlgorithm : The ODE solvers in package DifferentialEquations.jl. Default to DP5().
  • verbose::Bool : To display verbose output and progress bar during the process or not. Defaults to true.
  • SOLVEROptions : extra options for solver

Notes

Returns

  • ::ADOs : The steady state of auxiliary density operators.
source
# the HEOMLS matrix
 M::AbstractHEOMLSMatrix  
 
 # the initial state of the ADOs
 ados::ADOs
 
-ados_steady = steadystate(M, ados)
+ados_steady = steadystate(M, ados)
diff --git a/dev/time_evolution/index.html b/dev/time_evolution/index.html index 474de049..e276b29f 100644 --- a/dev/time_evolution/index.html +++ b/dev/time_evolution/index.html @@ -25,7 +25,7 @@ filename = "test.jld2" jldopen(filename, "r") do file ados_list = file["ados"] -end

Ordinary Differential Equation (ODE) Method

The first method is implemented by solving the ordinary differential equation (ODE). HierarchicalEOM.jl wraps some of the functions in DifferentialEquations.jl, which is a very rich numerical library for solving the differential equations and provides many ODE solvers. It offers quite a few options for the user to tailor the solver to their specific needs. The default solver (and its corresponding settings) are chosen to suit commonly encountered problems and should work fine for most of the cases. If you require more specialized methods, such as the choice of algorithm, please refer to DifferentialEquations solvers and also the documentation of DifferentialEquations.jl.

Extension for CUDA.jl

HierarchicalEOM.jl provides an extension to support GPU (CUDA.jl) acceleration for solving the time evolution (only for ODE method with time-independent system Hamiltonian). See here for more details.

See the docstring of this method:

HierarchicalEOM.HeomAPI.HEOMsolveMethod
HEOMsolve(M, ρ0, tlist; e_ops, solver, H_t, params, verbose, filename, SOLVEROptions...)

Solve the time evolution for auxiliary density operators based on ordinary differential equations.

Parameters

  • M::AbstractHEOMLSMatrix : the matrix given from HEOM model
  • ρ0::Union{QuantumObject,ADOs} : system initial state (density matrix) or initial auxiliary density operators (ADOs)
  • tlist::AbstractVector : Denote the specific time points to save the solution at, during the solving process.
  • e_ops::Union{Nothing,AbstractVector}: List of operators for which to calculate expectation values.
  • solver::OrdinaryDiffEqAlgorithm : solver in package DifferentialEquations.jl. Default to DP5().
  • H_t::Union{Nothing,Function,TimeDependentOperatorSum}=nothing: The time-dependent Hamiltonian or Liouvillian. It will be called by H_t(t, params).
  • params::NamedTuple=NamedTuple(): The parameters of the time evolution.
  • verbose::Bool : To display verbose output and progress bar during the process or not. Defaults to true.
  • filename::String : If filename was specified, the ADOs at each time point will be saved into the JLD2 file "filename.jld2" after the solving process.
  • SOLVEROptions : extra options for solver

Notes

  • The ADOs will be saved depend on the keyword argument saveat in kwargs.
  • If e_ops is specified, the default value of saveat=[tlist[end]] (only save the final ADOs), otherwise, saveat=tlist (saving the ADOs corresponding to tlist). You can also specify e_ops and saveat separately.
  • The default tolerances in kwargs are given as reltol=1e-6 and abstol=1e-8.
  • For more details about solver please refer to DifferentialEquations.jl (ODE Solvers)
  • For more details about SOLVEROptions please refer to DifferentialEquations.jl (Keyword Arguments)

Returns

source
# the time-independent HEOMLS matrix
+end

Ordinary Differential Equation (ODE) Method

The first method is implemented by solving the ordinary differential equation (ODE). HierarchicalEOM.jl wraps some of the functions in DifferentialEquations.jl, which is a very rich numerical library for solving the differential equations and provides many ODE solvers. It offers quite a few options for the user to tailor the solver to their specific needs. The default solver (and its corresponding settings) are chosen to suit commonly encountered problems and should work fine for most of the cases. If you require more specialized methods, such as the choice of algorithm, please refer to DifferentialEquations solvers and also the documentation of DifferentialEquations.jl.

Extension for CUDA.jl

HierarchicalEOM.jl provides an extension to support GPU (CUDA.jl) acceleration for solving the time evolution (only for ODE method with time-independent system Hamiltonian). See here for more details.

See the docstring of this method:

HierarchicalEOM.HeomAPI.HEOMsolveMethod
HEOMsolve(M, ρ0, tlist; e_ops, solver, H_t, params, verbose, filename, SOLVEROptions...)

Solve the time evolution for auxiliary density operators based on ordinary differential equations.

Parameters

  • M::AbstractHEOMLSMatrix : the matrix given from HEOM model
  • ρ0::Union{QuantumObject,ADOs} : system initial state (density matrix) or initial auxiliary density operators (ADOs)
  • tlist::AbstractVector : Denote the specific time points to save the solution at, during the solving process.
  • e_ops::Union{Nothing,AbstractVector}: List of operators for which to calculate expectation values.
  • solver::OrdinaryDiffEqAlgorithm : solver in package DifferentialEquations.jl. Default to DP5().
  • H_t::Union{Nothing,Function,TimeDependentOperatorSum}=nothing: The time-dependent Hamiltonian or Liouvillian. It will be called by H_t(t, params).
  • params::NamedTuple=NamedTuple(): The parameters of the time evolution.
  • verbose::Bool : To display verbose output and progress bar during the process or not. Defaults to true.
  • filename::String : If filename was specified, the ADOs at each time point will be saved into the JLD2 file "filename.jld2" after the solving process.
  • SOLVEROptions : extra options for solver

Notes

  • The ADOs will be saved depend on the keyword argument saveat in kwargs.
  • If e_ops is specified, the default value of saveat=[tlist[end]] (only save the final ADOs), otherwise, saveat=tlist (saving the ADOs corresponding to tlist). You can also specify e_ops and saveat separately.
  • The default tolerances in kwargs are given as reltol=1e-6 and abstol=1e-8.
  • For more details about solver please refer to DifferentialEquations.jl (ODE Solvers)
  • For more details about SOLVEROptions please refer to DifferentialEquations.jl (Keyword Arguments)

Returns

source
# the time-independent HEOMLS matrix
 M::AbstractHEOMLSMatrix  
 
 # the initial state can be either the system density operator or ADOs
@@ -56,7 +56,7 @@
 ρ0::QuantumObject
 tlist = 0:0.1:10
 
-sol = HEOMsolve(M, ρ0, tlist; H_t = H_1)
Note

The default value for params in HEOMsolve is an empty NamedTuple().

Propagator Method

The second method is implemented by directly construct the propagator of a given HEOMLS matrix $\hat{\mathcal{M}}$. Because $\hat{\mathcal{M}}$ is time-independent, the equation above can be solved analytically as

\[\rho^{(m,n,p)}_{\textbf{j} \vert \textbf{q}}(t)=\hat{\mathcal{G}}(t)\rho^{(m,n,p)}_{\textbf{j} \vert \textbf{q}}(0),\]

where $\hat{\mathcal{G}}(t)\equiv \exp(\hat{\mathcal{M}}t)$ is the propagator for all ADOs corresponding to $\hat{\mathcal{M}}$.

To construct the propagator, we wrap the function in the package fastExpm.jl, which is optimized for the exponentiation of either large-dense or sparse matrices.

See the docstring of this method:

HierarchicalEOM.HeomAPI.HEOMsolveMethod
HEOMsolve(M, ρ0, Δt, steps; e_ops, threshold, nonzero_tol, verbose, filename)

Solve the time evolution for auxiliary density operators based on propagator (generated by FastExpm.jl).

Parameters

  • M::AbstractHEOMLSMatrix : the matrix given from HEOM model
  • ρ0::Union{QuantumObject,ADOs} : system initial state (density matrix) or initial auxiliary density operators (ADOs)
  • Δt::Real : A specific time step (time interval).
  • steps::Int : The number of time steps
  • e_ops::Union{Nothing,AbstractVector}: List of operators for which to calculate expectation values.
  • threshold::Real : Determines the threshold for the Taylor series. Defaults to 1.0e-6.
  • nonzero_tol::Real : Strips elements smaller than nonzero_tol at each computation step to preserve sparsity. Defaults to 1.0e-14.
  • verbose::Bool : To display verbose output and progress bar during the process or not. Defaults to true.
  • filename::String : If filename was specified, the ADOs at each time point will be saved into the JLD2 file "filename.jld2" after the solving process.

Notes

  • The ADOs will be saved depend on the keyword argument e_ops.
  • If e_ops is specified, the solution will only save the final ADOs, otherwise, it will save all the ADOs corresponding to tlist = 0:Δt:(Δt * steps).
  • For more details of the propagator, please refer to FastExpm.jl

Returns

source
# the time-independent HEOMLS matrix
+sol = HEOMsolve(M, ρ0, tlist; H_t = H_1)
Note

The default value for params in HEOMsolve is an empty NamedTuple().

Propagator Method

The second method is implemented by directly construct the propagator of a given HEOMLS matrix $\hat{\mathcal{M}}$. Because $\hat{\mathcal{M}}$ is time-independent, the equation above can be solved analytically as

\[\rho^{(m,n,p)}_{\textbf{j} \vert \textbf{q}}(t)=\hat{\mathcal{G}}(t)\rho^{(m,n,p)}_{\textbf{j} \vert \textbf{q}}(0),\]

where $\hat{\mathcal{G}}(t)\equiv \exp(\hat{\mathcal{M}}t)$ is the propagator for all ADOs corresponding to $\hat{\mathcal{M}}$.

To construct the propagator, we wrap the function in the package fastExpm.jl, which is optimized for the exponentiation of either large-dense or sparse matrices.

See the docstring of this method:

HierarchicalEOM.HeomAPI.HEOMsolveMethod
HEOMsolve(M, ρ0, Δt, steps; e_ops, threshold, nonzero_tol, verbose, filename)

Solve the time evolution for auxiliary density operators based on propagator (generated by FastExpm.jl).

Parameters

  • M::AbstractHEOMLSMatrix : the matrix given from HEOM model
  • ρ0::Union{QuantumObject,ADOs} : system initial state (density matrix) or initial auxiliary density operators (ADOs)
  • Δt::Real : A specific time step (time interval).
  • steps::Int : The number of time steps
  • e_ops::Union{Nothing,AbstractVector}: List of operators for which to calculate expectation values.
  • threshold::Real : Determines the threshold for the Taylor series. Defaults to 1.0e-6.
  • nonzero_tol::Real : Strips elements smaller than nonzero_tol at each computation step to preserve sparsity. Defaults to 1.0e-14.
  • verbose::Bool : To display verbose output and progress bar during the process or not. Defaults to true.
  • filename::String : If filename was specified, the ADOs at each time point will be saved into the JLD2 file "filename.jld2" after the solving process.

Notes

  • The ADOs will be saved depend on the keyword argument e_ops.
  • If e_ops is specified, the solution will only save the final ADOs, otherwise, it will save all the ADOs corresponding to tlist = 0:Δt:(Δt * steps).
  • For more details of the propagator, please refer to FastExpm.jl

Returns

source
# the time-independent HEOMLS matrix
 M::AbstractHEOMLSMatrix  
 
 # the initial state can be either the system density operator or ADOs
@@ -70,4 +70,4 @@
 steps = 4
 
 # equivalent to tlist = 0 : Δt : (Δt * steps)
-sol = HEOMsolve(M, ρ0, Δt, steps) 
+sol = HEOMsolve(M, ρ0, Δt, steps)