From 8545686585ce452b718c5f5b040535e5cb35eb23 Mon Sep 17 00:00:00 2001 From: "Documenter.jl" Date: Tue, 7 Nov 2023 07:22:29 +0000 Subject: [PATCH] build based on 4928ed3 --- dev/.documenter-siteinfo.json | 2 +- dev/ADOs/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/{d0908c6d.svg => 98f3a75f.svg} | 68 +++--- dev/examples/SIAM/index.html | 2 +- dev/examples/benchmark_LS_solvers/index.html | 204 +++++++++--------- dev/examples/benchmark_ODE_solvers/index.html | 49 ++--- .../cavityQED/{1258a018.svg => 36a16c9a.svg} | 64 +++--- .../cavityQED/{a0583d56.svg => 7a8e5f02.svg} | 132 ++++++------ .../cavityQED/{53d52d24.svg => a83b5e28.svg} | 132 ++++++------ .../cavityQED/{92e60546.svg => f2f22598.svg} | 64 +++--- .../cavityQED/{56f5ca5f.svg => fef39f73.svg} | 76 +++---- dev/examples/cavityQED/index.html | 14 +- .../{f2ffa20d.svg => 83d1feb4.svg} | 54 ++--- .../{698d544b.svg => a094d40c.svg} | 72 +++---- dev/examples/dynamical_decoupling/index.html | 10 +- .../{a7a97313.svg => 8657dc55.svg} | 56 ++--- dev/examples/electronic_current/index.html | 4 +- .../{f77b97d5.svg => 3a24c6c3.svg} | 54 ++--- .../{6090b7c3.svg => 723cf18e.svg} | 62 +++--- dev/examples/quick_start/index.html | 8 +- dev/extensions/CUDA/index.html | 2 +- dev/extensions/QuantumOptics/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 | 28 +-- dev/spectrum/index.html | 2 +- dev/stationary_state/index.html | 2 +- dev/time_evolution/index.html | 2 +- 41 files changed, 595 insertions(+), 602 deletions(-) rename dev/examples/SIAM/{d0908c6d.svg => 98f3a75f.svg} (82%) rename dev/examples/cavityQED/{1258a018.svg => 36a16c9a.svg} (84%) rename dev/examples/cavityQED/{a0583d56.svg => 7a8e5f02.svg} (91%) rename dev/examples/cavityQED/{53d52d24.svg => a83b5e28.svg} (91%) rename dev/examples/cavityQED/{92e60546.svg => f2f22598.svg} (84%) rename dev/examples/cavityQED/{56f5ca5f.svg => fef39f73.svg} (86%) rename dev/examples/dynamical_decoupling/{f2ffa20d.svg => 83d1feb4.svg} (93%) rename dev/examples/dynamical_decoupling/{698d544b.svg => a094d40c.svg} (91%) rename dev/examples/electronic_current/{a7a97313.svg => 8657dc55.svg} (89%) rename dev/examples/quick_start/{f77b97d5.svg => 3a24c6c3.svg} (89%) rename dev/examples/quick_start/{6090b7c3.svg => 723cf18e.svg} (91%) diff --git a/dev/.documenter-siteinfo.json b/dev/.documenter-siteinfo.json index 8482e64a..96c80e0b 100644 --- a/dev/.documenter-siteinfo.json +++ b/dev/.documenter-siteinfo.json @@ -1 +1 @@ -{"documenter":{"julia_version":"1.9.3","generation_timestamp":"2023-11-07T01:59:08","documenter_version":"1.1.2"}} \ No newline at end of file +{"documenter":{"julia_version":"1.9.3","generation_timestamp":"2023-11-07T07:22:22","documenter_version":"1.1.2"}} \ No newline at end of file diff --git a/dev/ADOs/index.html b/dev/ADOs/index.html index 3b23a8bc..375a6e74 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/bath_boson/Boson_Drude_Lorentz/index.html b/dev/bath_boson/Boson_Drude_Lorentz/index.html index 5be3d8c3..e0cd974e 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 6e624313..03b49a8f 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", operator size = (2, 2), η = 1.0039844180003819e-6 + 0.0im, γ = 0.6479143347831898 + 0.0im. -Bath Exponent with types = "bRI", operator size = (2, 2), η = 3.1005439801387293e-6 + 0.0im, γ = 1.8059644711829272 + 0.0im. +Bath Exponent with types = "bRI", operator size = (2, 2), η = 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 d575b358..62f7d2b8 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", operator size = (2, 2), η = 6.25e-6 - 3.4090909090909113e-6im, γ = 0.05 + 0.005im. -Bath Exponent with types = "bE", operator size = (2, 2), η = 0.0 + 3.4090909090909113e-6im, γ = 0.1732050807568877 + 0.005im. +Bath Exponent with types = "bE", operator size = (2, 2), η = 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 f4b59c26..f43fa83a 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 9cc10a38..616e41d3 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", operator size = (2, 2), η = 6.25e-6 - 3.4090909090909113e-6im, γ = 0.05 + 0.005im. -Bath Exponent with types = "fE", operator size = (2, 2), η = 0.0 + 3.4090909090909113e-6im, γ = 0.1732050807568877 + 0.005im. +Bath Exponent with types = "fE", operator size = (2, 2), η = 0.0 + 3.4090909090909113e-6im, γ = 0.1732050807568877 + 0.005im. diff --git a/dev/cite/index.html b/dev/cite/index.html index ab48a2fd..4798430c 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/d0908c6d.svg b/dev/examples/SIAM/98f3a75f.svg similarity index 82% rename from dev/examples/SIAM/d0908c6d.svg rename to dev/examples/SIAM/98f3a75f.svg index 6392b40e..bbaf8892 100644 --- a/dev/examples/SIAM/d0908c6d.svg +++ b/dev/examples/SIAM/98f3a75f.svg @@ -1,48 +1,48 @@ - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dev/examples/SIAM/index.html b/dev/examples/SIAM/index.html index 3f1c6d16..25432a25 100644 --- a/dev/examples/SIAM/index.html +++ b/dev/examples/SIAM/index.html @@ -59,4 +59,4 @@

Calculate density of states (DOS)

(see also Spectrum)

ωlist = -10:1:10
 dos = spectrum(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/benchmark_LS_solvers/index.html b/dev/examples/benchmark_LS_solvers/index.html index 274cc966..88a917b2 100644 --- a/dev/examples/benchmark_LS_solvers/index.html +++ b/dev/examples/benchmark_LS_solvers/index.html @@ -34,11 +34,11 @@ ==================================== Julia Version: 1.9.3 OS : Linux (x86_64-linux-gnu) -CPU : 2 × Intel(R) Xeon(R) Platinum 8370C CPU @ 2.80GHz +CPU : 2 × Intel(R) Xeon(R) CPU E5-2673 v3 @ 2.40GHz Memory : 6.76 GB WORD_SIZE: 64 LIBM : libopenlibm -LLVM : libLLVM-14.0.6 (ORCJIT, icelake-server) +LLVM : libLLVM-14.0.6 (ORCJIT, haswell) BLAS : libmkl_rt.so (ilp64)

Here, we use the example of the single-impurity Anderson model:

ϵ  = -5
 U  = 10
 Γ  = 2
@@ -68,112 +68,112 @@
 Solving steady state for auxiliary density operators...[DONE]

LinearSolve Solver List

(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();

Julia's built-in LU factorization

LUFactorization();

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();

Solving Stationary State

Since we are using BenchmarkTools (@benchmark) in the following, we set verbose = false to disable the output message.

UMFPACKFactorization (Default solver)

@benchmark SteadyState(M_even; verbose = false)
BenchmarkTools.Trial: 508 samples with 1 evaluation.
- Range (minmax):  9.413 ms 11.028 ms   GC (min … max): 0.00% … 9.13%
- Time  (median):     9.658 ms                GC (median):    0.00%
- Time  (mean ± σ):   9.837 ms ± 463.207 μs   GC (mean ± σ):  1.67% ± 3.40%
-
-    ▁ ▆▆▅▅▇▆▅                                                 
-  ▄▅█▆███████▇▆▅▄▃▄▂▁▁▂▁▁▂▁▁▁▁▂▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▃▁▃▃▄▆▆▅▄▅▄▄ ▄
-  9.41 ms         Histogram: frequency by time          11 ms <
-
- Memory estimate: 9.53 MiB, allocs estimate: 149.

KLUFactorization

@benchmark SteadyState(M_even; solver = KLUFactorization(), verbose = false)
BenchmarkTools.Trial: 872 samples with 1 evaluation.
- Range (minmax):  5.512 ms  6.987 ms   GC (min … max): 0.00% … 15.69%
- Time  (median):     5.598 ms                GC (median):    0.00%
- Time  (mean ± σ):   5.728 ms ± 394.615 μs   GC (mean ± σ):  1.95% ±  4.83%
-
-    █▇                                                        
-  ▂▆██▅▃▂▂▂▁▁▁▁▁▁▁▁▁▁▁▁▂▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▂▂▂▄▃▃ ▂
-  5.51 ms         Histogram: frequency by time        6.94 ms <
-
- Memory estimate: 5.85 MiB, allocs estimate: 205.

Julia's built-in generic LU factorization

@benchmark SteadyState(M_even; solver = LUFactorization(), verbose = false)
BenchmarkTools.Trial: 518 samples with 1 evaluation.
- Range (minmax):  9.236 ms 11.080 ms   GC (min … max): 0.00% … 9.89%
- Time  (median):     9.448 ms                GC (median):    0.00%
- Time  (mean ± σ):   9.641 ms ± 488.663 μs   GC (mean ± σ):  1.83% ± 3.74%
-
-    ▂▁▂▃▃█                                              
-  ▄▅████████▇▄▃▄▁▂▁▁▂▂▁▂▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▂▁▁▂▃▃▄▄▅▅▄▄▄▂ ▃
-  9.24 ms         Histogram: frequency by time        10.9 ms <
-
- Memory estimate: 9.40 MiB, allocs estimate: 166.

KrylovJL_BICGSTAB

@benchmark SteadyState(M_even; solver = KrylovJL_BICGSTAB(rtol=1e-10, atol=1e-12), verbose = false)
BenchmarkTools.Trial: 3299 samples with 1 evaluation.
- Range (minmax):  1.408 ms  4.882 ms   GC (min … max): 0.00% … 0.00%
- Time  (median):     1.467 ms                GC (median):    0.00%
- Time  (mean ± σ):   1.512 ms ± 231.889 μs   GC (mean ± σ):  2.53% ± 7.68%
-
-  ▂▇█                                                    ▁ ▁
-  ███▇▆▄▅▄▄▅▄▃▃▁▁▁▁▁▁▃▁▃▁▁▃▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▆██ █
-  1.41 ms      Histogram: log(frequency) by time      2.74 ms <
-
- Memory estimate: 1.85 MiB, allocs estimate: 87.

MKLPardisoFactorize

@benchmark SteadyState(M_even; solver = MKLPardisoFactorize(), verbose = false)
BenchmarkTools.Trial: 222 samples with 1 evaluation.
- Range (minmax):  20.398 ms29.265 ms   GC (min … max): 0.00% … 0.00%
- Time  (median):     23.038 ms               GC (median):    0.00%
- Time  (mean ± σ):   22.562 ms ±  1.530 ms   GC (mean ± σ):  0.25% ± 1.14%
-
-     ▄█▁                ▇█                                 
-  ▆▆█████▆▃▃▃▁▃▃▃▃▃▁▁▃▃▇█████▆▆▅▁▃▃▄▃▁▃▃▃▃▃▃▁▃▃▃▃▁▁▃▁▁▁▁▁▁▃ ▃
-  20.4 ms         Histogram: frequency by time        26.9 ms <
-
- Memory estimate: 2.72 MiB, allocs estimate: 104.

MKLPardisoIterate

@benchmark SteadyState(M_even; solver = MKLPardisoIterate(), verbose = false)
BenchmarkTools.Trial: 220 samples with 1 evaluation.
- Range (minmax):  20.360 ms33.063 ms   GC (min … max): 0.00% … 0.00%
- Time  (median):     23.135 ms               GC (median):    0.00%
- Time  (mean ± σ):   22.764 ms ±  1.827 ms   GC (mean ± σ):  0.33% ± 1.44%
-
-    ▄█▁             ▅▂                                       
-  ▄████▅▅▃▁▃▁▃▁▁▃▃▃███▅▅▅▄▄▃▆▃▄▃▄▃▃▃▁▃▁▃▁▁▁▃▁▁▁▃▁▁▁▁▁▃▁▁▁▃ ▃
-  20.4 ms         Histogram: frequency by time        28.8 ms <
-
- Memory estimate: 2.72 MiB, allocs estimate: 104.

Calculate Spectrum

UMFPACKFactorization (Default solver)

@benchmark spectrum(M_odd, ados_s, d_up, ωlist; verbose = false)
BenchmarkTools.Trial: 16 samples with 1 evaluation.
- Range (minmax):  316.096 ms327.408 ms   GC (min … max): 1.56% … 1.84%
- Time  (median):     320.828 ms                GC (median):    1.89%
- Time  (mean ± σ):   321.304 ms ±   3.487 ms   GC (mean ± σ):  1.77% ± 0.20%
-
-  ▁    ▁    ▁  ▁█       ▁      ▁     ▁     ▁         ▁  ▁  ▁  
-  █▁▁▁▁█▁▁▁▁█▁▁██▁▁▁▁▁▁▁█▁▁▁█▁▁▁█▁▁▁▁▁█▁▁▁▁▁█▁▁▁▁▁▁▁▁▁█▁▁█▁▁█ ▁
-  316 ms           Histogram: frequency by time          327 ms <
-
- Memory estimate: 269.72 MiB, allocs estimate: 3093.

KLUFactorization

@benchmark spectrum(M_odd, ados_s, d_up, ωlist; solver = KLUFactorization(), verbose = false)
BenchmarkTools.Trial: 44 samples with 1 evaluation.
- Range (minmax):  113.883 ms116.051 ms   GC (min … max): 1.08% … 2.16%
- Time  (median):     115.285 ms                GC (median):    2.10%
- Time  (mean ± σ):   114.959 ms ± 743.153 μs   GC (mean ± σ):  1.65% ± 0.52%
-
-  ▃ ▃▃  ▃ ▃    ▃                         ▃ ▃    █ ▃▃▃           
-  █▁██▁▇█▁█▇▇▇▇█▁▇▁▇▁▁▁▁▁▇▁▁▁▁▁▁▁▁▁▁▇▁▁▁█▁█▇▁▁▇█▁███▇▁▇▇▇▁▁▇▇ ▁
-  114 ms           Histogram: frequency by time          116 ms <
-
- Memory estimate: 89.31 MiB, allocs estimate: 2799.

Julia's built-in LU factorization

@benchmark spectrum(M_odd, ados_s, d_up, ωlist; solver = LUFactorization(), verbose = false)
BenchmarkTools.Trial: 13 samples with 1 evaluation.
- Range (minmax):  387.207 ms396.392 ms   GC (min … max): 1.91% … 1.84%
- Time  (median):     389.223 ms                GC (median):    1.90%
- Time  (mean ± σ):   390.190 ms ±   2.897 ms   GC (mean ± σ):  1.89% ± 0.03%
-
-  ▁    ▁ █ ▁  ▁ ▁▁    ▁       ▁                            ▁ ▁  
-  █▁▁▁▁█▁█▁█▁▁█▁██▁▁▁█▁▁▁▁▁▁▁█▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█▁█ ▁
-  387 ms           Histogram: frequency by time          396 ms <
+MKLPardisoIterate();

Solving Stationary State

Since we are using BenchmarkTools (@benchmark) in the following, we set verbose = false to disable the output message.

UMFPACKFactorization (Default solver)

@benchmark SteadyState(M_even; verbose = false)
BenchmarkTools.Trial: 425 samples with 1 evaluation.
+ Range (minmax):  10.506 ms16.390 ms   GC (min … max): 0.00% … 0.00%
+ Time  (median):     11.310 ms               GC (median):    0.00%
+ Time  (mean ± σ):   11.749 ms ±  1.125 ms   GC (mean ± σ):  2.67% ± 5.22%
+
+    ▁▄▂▄█▁▅▁▁ ▁                                               
+  ▄▇█████████▇█▆▇▄▂▄▆▄▃▃▃▂▁▂▃▃▃▄▂▄▄▅▅▄▅▃▃▄▃▃▄▃▂▃▁▂▁▁▁▃▂▃▃▂▂ ▄
+  10.5 ms         Histogram: frequency by time          15 ms <
+
+ Memory estimate: 9.53 MiB, allocs estimate: 149.

KLUFactorization

@benchmark SteadyState(M_even; solver = KLUFactorization(), verbose = false)
BenchmarkTools.Trial: 729 samples with 1 evaluation.
+ Range (minmax):  6.040 ms 14.148 ms   GC (min … max): 0.00% … 0.00%
+ Time  (median):     6.478 ms                GC (median):    0.00%
+ Time  (mean ± σ):   6.853 ms ± 987.432 μs   GC (mean ± σ):  3.14% ± 7.23%
+
+    ▅▅██                                                      
+  ▃██████▇▅▅▃▄▃▃▃▃▃▂▂▂▂▂▁▁▂▂▂▂▂▃▃▃▃▄▄▃▂▃▂▂▁▂▁▁▁▂▁▁▁▂▁▁▁▁▂▁▂ ▃
+  6.04 ms         Histogram: frequency by time        10.6 ms <
+
+ Memory estimate: 5.85 MiB, allocs estimate: 205.

Julia's built-in generic LU factorization

@benchmark SteadyState(M_even; solver = LUFactorization(), verbose = false)
BenchmarkTools.Trial: 428 samples with 1 evaluation.
+ Range (minmax):  10.267 ms23.000 ms   GC (min … max): 0.00% … 45.30%
+ Time  (median):     11.126 ms               GC (median):    0.00%
+ Time  (mean ± σ):   11.691 ms ±  1.515 ms   GC (mean ± σ):  2.98% ±  5.83%
+
+    ▆▅▅█                                                  
+  ▃▇██████▆▅▄▃▃▃▃▂▄▅▅▄▅▃▄▄▃▃▁▃▃▃▂▃▁▂▁▁▁▁▃▁▁▁▁▁▃▁▁▁▁▁▁▁▁▁▂▁▂ ▃
+  10.3 ms         Histogram: frequency by time        18.1 ms <
+
+ Memory estimate: 9.40 MiB, allocs estimate: 166.

KrylovJL_BICGSTAB

@benchmark SteadyState(M_even; solver = KrylovJL_BICGSTAB(rtol=1e-10, atol=1e-12), verbose = false)
BenchmarkTools.Trial: 2892 samples with 1 evaluation.
+ Range (minmax):  1.398 ms  9.298 ms   GC (min … max): 0.00% … 81.91%
+ Time  (median):     1.536 ms                GC (median):    0.00%
+ Time  (mean ± σ):   1.719 ms ± 669.135 μs   GC (mean ± σ):  4.29% ±  9.86%
+
+  ▆▆█▄▃▂▁▁                                                  ▁
+  █████████▇▇▆▇▆▇▅▄▅▅▅▅▄▆▃▄▃▄▃▄▄▄▆▃▃▄▁▄▃▁▆▆▅▇█▇▇▆▆▆▅▁▃▄▄▄▃▄ █
+  1.4 ms       Histogram: log(frequency) by time      4.54 ms <
+
+ Memory estimate: 1.85 MiB, allocs estimate: 87.

MKLPardisoFactorize

@benchmark SteadyState(M_even; solver = MKLPardisoFactorize(), verbose = false)
BenchmarkTools.Trial: 212 samples with 1 evaluation.
+ Range (minmax):  20.500 ms31.318 ms   GC (min … max): 0.00% … 0.00%
+ Time  (median):     23.622 ms               GC (median):    0.00%
+ Time  (mean ± σ):   23.605 ms ±  1.936 ms   GC (mean ± σ):  0.48% ± 2.03%
+
+    ▂  ▇          █ ▅▃▂ ▄▄▃▂  ▄                               
+  ▆██▆▆█▇▇▇▅▇▅▄▃▆▆█▇████████▇▇█▅▃▃▅▄▆▆▄▃▁▁▄▁▁▃▁▁▁▃▁▁▁▁▁▄▁▁▁▃ ▄
+  20.5 ms         Histogram: frequency by time        29.9 ms <
+
+ Memory estimate: 2.72 MiB, allocs estimate: 104.

MKLPardisoIterate

@benchmark SteadyState(M_even; solver = MKLPardisoIterate(), verbose = false)
BenchmarkTools.Trial: 206 samples with 1 evaluation.
+ Range (minmax):  20.266 ms39.152 ms   GC (min … max): 0.00% … 0.00%
+ Time  (median):     23.587 ms               GC (median):    0.00%
+ Time  (mean ± σ):   24.257 ms ±  2.992 ms   GC (mean ± σ):  0.46% ± 1.99%
+
+    ▄      ▂▅▆█ ▅ ▂                                         
+  ▄▇██▆▇▅█▅█████▆█▆█▅▄▅▅▃▇▄▆▃▄▁▁▄▅▃▁▁▁▁▅▁▄▁▄▁▁▁▁▁▁▄▁▃▁▁▁▁▁▃ ▄
+  20.3 ms         Histogram: frequency by time        35.2 ms <
+
+ Memory estimate: 2.72 MiB, allocs estimate: 104.

Calculate Spectrum

UMFPACKFactorization (Default solver)

@benchmark spectrum(M_odd, ados_s, d_up, ωlist; verbose = false)
BenchmarkTools.Trial: 13 samples with 1 evaluation.
+ Range (minmax):  365.147 ms404.553 ms   GC (min … max): 2.31% … 4.23%
+ Time  (median):     385.824 ms                GC (median):    2.71%
+ Time  (mean ± σ):   384.778 ms ±  13.726 ms   GC (mean ± σ):  2.87% ± 0.82%
+
+  █     █  █ ██                  █   █    █       █  █     █ █  
+  █▁▁▁▁▁█▁▁█▁██▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█▁▁▁█▁▁▁▁█▁▁▁▁▁▁▁█▁▁█▁▁▁▁▁█▁█ ▁
+  365 ms           Histogram: frequency by time          405 ms <
+
+ Memory estimate: 269.72 MiB, allocs estimate: 3093.

KLUFactorization

@benchmark spectrum(M_odd, ados_s, d_up, ωlist; solver = KLUFactorization(), verbose = false)
BenchmarkTools.Trial: 38 samples with 1 evaluation.
+ Range (minmax):  125.538 ms144.313 ms   GC (min … max): 1.67% … 2.94%
+ Time  (median):     132.721 ms                GC (median):    3.10%
+ Time  (mean ± σ):   133.181 ms ±   4.452 ms   GC (mean ± σ):  2.50% ± 0.75%
+
+          ▄     ▄    ▁               ▁                          
+  ▆▁▁▆▁▆▁▁█▁▁▆▆▁█▁▆▆▆█▆▆▁▆▆▆▆▁▁▆▆▁▁█▁▆▁▆▁▆▁▁▁▆▁▁▆▁▁▁▁▁▁▁▆▁▁▆ ▁
+  126 ms           Histogram: frequency by time          144 ms <
+
+ Memory estimate: 89.31 MiB, allocs estimate: 2799.

Julia's built-in LU factorization

@benchmark spectrum(M_odd, ados_s, d_up, ωlist; solver = LUFactorization(), verbose = false)
BenchmarkTools.Trial: 11 samples with 1 evaluation.
+ Range (minmax):  449.222 ms468.401 ms   GC (min … max): 2.85% … 2.72%
+ Time  (median):     457.001 ms                GC (median):    2.80%
+ Time  (mean ± σ):   457.409 ms ±   6.867 ms   GC (mean ± σ):  2.81% ± 0.06%
+
+  ▁ ▁     █    ▁          ▁▁             ▁          ▁ ▁       ▁  
+  █▁█▁▁▁▁▁█▁▁▁▁█▁▁▁▁▁▁▁▁▁██▁▁▁▁▁▁▁▁▁▁▁▁█▁▁▁▁▁▁▁▁▁▁█▁█▁▁▁▁▁▁▁█ ▁
+  449 ms           Histogram: frequency by time          468 ms <
 
  Memory estimate: 347.26 MiB, allocs estimate: 4567.

KrylovJL_BICGSTAB

@benchmark spectrum(M_odd, ados_s, d_up, ωlist; solver = KrylovJL_BICGSTAB(rtol=1e-10, atol=1e-12), verbose = false)
BenchmarkTools.Trial: 9 samples with 1 evaluation.
- Range (minmax):  600.724 ms606.492 ms   GC (min … max): 0.22% … 0.22%
- Time  (median):     602.236 ms                GC (median):    0.22%
- Time  (mean ± σ):   602.579 ms ±   1.852 ms   GC (mean ± σ):  0.20% ± 0.07%
+ Range (minmax):  569.495 ms604.126 ms   GC (min … max): 0.43% … 0.37%
+ Time  (median):     599.576 ms                GC (median):    0.40%
+ Time  (mean ± σ):   594.195 ms ±  11.744 ms   GC (mean ± σ):  0.36% ± 0.14%
 
-  █   ██        █ ██                      █                  █  
-  █▁▁▁██▁▁▁▁▁▁▁▁█▁██▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█ ▁
-  601 ms           Histogram: frequency by time          606 ms <
+  ▁                ▁                           ▁  ▁   ▁▁  █   ▁  
+  █▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█▁▁█▁▁██▁▁█▁▁▁█ ▁
+  569 ms           Histogram: frequency by time          604 ms <
 
  Memory estimate: 54.02 MiB, allocs estimate: 1560.

MKLPardisoFactorize

@benchmark spectrum(M_odd, ados_s, d_up, ωlist; solver = MKLPardisoFactorize(), verbose = false)
BenchmarkTools.Trial: 22 samples with 1 evaluation.
- Range (minmax):  219.168 ms239.711 ms   GC (min … max): 0.60% … 0.55%
- Time  (median):     227.711 ms                GC (median):    0.58%
- Time  (mean ± σ):   228.076 ms ±   5.838 ms   GC (mean ± σ):  0.56% ± 0.13%
+ Range (minmax):  220.990 ms259.661 ms   GC (min … max): 1.02% … 0.90%
+ Time  (median):     235.705 ms                GC (median):    1.00%
+ Time  (mean ± σ):   236.674 ms ±   9.989 ms   GC (mean ± σ):  0.96% ± 0.22%
 
-                █                                                
-  ▆▁▁▆▁▆▁▁▁▁▁▆▆▁█▁▁▆▁▁▁▁▁▁▆▁▁▆▆▁▁▁▆▁▁▆▆▆▁▁▁▆▁▁▁▁▁▁▁▆▁▁▁▁▁▁▆▁▆ ▁
-  219 ms           Histogram: frequency by time          240 ms <
+  ▁ ▁    ▁ █   ▁  ▁  ▁█ ▁  ▁▁▁▁ ▁  ▁   ▁▁                   ▁▁  
+  █▁█▁▁▁▁█▁█▁▁▁█▁▁█▁▁██▁█████▁█▁▁█▁▁▁██▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁██ ▁
+  221 ms           Histogram: frequency by time          260 ms <
 
- Memory estimate: 55.18 MiB, allocs estimate: 1471.

MKLPardisoIterate

@benchmark spectrum(M_odd, ados_s, d_up, ωlist; solver = MKLPardisoIterate(), verbose = false)
BenchmarkTools.Trial: 22 samples with 1 evaluation.
- Range (minmax):  217.317 ms250.395 ms   GC (min … max): 0.60% … 0.51%
- Time  (median):     224.770 ms                GC (median):    0.58%
- Time  (mean ± σ):   227.502 ms ±   8.081 ms   GC (mean ± σ):  0.55% ± 0.12%
+ Memory estimate: 55.18 MiB, allocs estimate: 1471.

MKLPardisoIterate

@benchmark spectrum(M_odd, ados_s, d_up, ωlist; solver = MKLPardisoIterate(), verbose = false)
BenchmarkTools.Trial: 21 samples with 1 evaluation.
+ Range (minmax):  224.372 ms253.813 ms   GC (min … max): 1.05% … 0.88%
+ Time  (median):     238.077 ms                GC (median):    0.99%
+ Time  (mean ± σ):   238.353 ms ±   9.424 ms   GC (mean ± σ):  0.96% ± 0.24%
 
-  ▃   ▃     ▃ █         ▃       █                                
-  █▁▁▁█▁▁▇▇▁█▁█▇▇▁▁▁▁▁█▁▁▁▇▁▁▇█▁▁▁▁▁▁▁▁▁▁▁▁▁▇▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▇ ▁
-  217 ms           Histogram: frequency by time          250 ms <
+  ▁  █ ▁    ▁  ▁    ▁▁ █   ▁  ▁ ▁ ▁      ▁ ▁       █ ▁  ▁  
+  █▁▁█▁█▁▁▁▁█▁▁█▁▁▁▁██▁█▁▁▁▁▁█▁█▁▁█▁█▁█▁▁▁▁▁▁█▁█▁▁▁▁▁▁▁█▁█▁▁█ ▁
+  224 ms           Histogram: frequency by time          254 ms <
 
- Memory estimate: 55.18 MiB, allocs estimate: 1471.

This page was generated using Literate.jl.

+ Memory estimate: 55.18 MiB, allocs estimate: 1471.

This page was generated using Literate.jl.

diff --git a/dev/examples/benchmark_ODE_solvers/index.html b/dev/examples/benchmark_ODE_solvers/index.html index 0a5be53b..acb440c9 100644 --- a/dev/examples/benchmark_ODE_solvers/index.html +++ b/dev/examples/benchmark_ODE_solvers/index.html @@ -34,11 +34,11 @@ ==================================== Julia Version: 1.9.3 OS : Linux (x86_64-linux-gnu) -CPU : 2 × Intel(R) Xeon(R) Platinum 8370C CPU @ 2.80GHz +CPU : 2 × Intel(R) Xeon(R) CPU E5-2673 v3 @ 2.40GHz Memory : 6.76 GB WORD_SIZE: 64 LIBM : libopenlibm -LLVM : libLLVM-14.0.6 (ORCJIT, icelake-server) +LLVM : libLLVM-14.0.6 (ORCJIT, haswell) BLAS : libmkl_rt.so (ilp64)

Here, we use the example of driven systems and dynamical decoupling:

Γ  = 0.0005
 W  = 0.005
 kT = 0.05
@@ -72,36 +72,29 @@
 
 bath = Boson_DrudeLorentz_Pade(σz, Γ, W, kT, N)
 M = M_Boson(H0, tier, bath);
Preparing block matrices for HEOM Liouvillian superoperator (using 1 threads)...
-
Processing:   1%|▎                   |  ETA: 0:00:27 ( 0.13  s/it)
Processing: 100%|████████████████████| Time: 0:00:00 ( 1.23 ms/it)
+
Processing:   1%|▎                   |  ETA: 0:00:31 ( 0.15  s/it)
Processing: 100%|████████████████████| Time: 0:00:00 ( 1.43 ms/it)
 Constructing matrix...[DONE]

ODE Solver List

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

For any extra solver options, we can add it in the function evolution 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)

Furthermore, since we are using BenchmarkTools (@benchmark) in the following, we set verbose = false to disable the output message.

DP5 (Default solver)

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

@benchmark evolution(M, ρ0, tlist, H_D, param; abstol = 1e-12, reltol = 1e-12, verbose = false)
BenchmarkTools.Trial: 2 samples with 1 evaluation.
- Range (minmax):  2.875 s  2.924 s   GC (min … max): 3.14% … 3.22%
- Time  (median):     2.899 s               GC (median):    3.18%
- Time  (mean ± σ):   2.899 s ± 34.589 ms   GC (mean ± σ):  3.18% ± 0.06%
-
-                                                         █  
-  ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█ ▁
-  2.87 s         Histogram: frequency by time        2.92 s <
-
- Memory estimate: 2.64 GiB, allocs estimate: 1036259.

RK4

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

@benchmark evolution(M, ρ0, tlist, H_D, param; solver = RK4(), abstol = 1e-12, reltol = 1e-12, verbose = false)
BenchmarkTools.Trial: 1 sample with 1 evaluation.
- Single result which took 6.370 s (3.22% GC) to evaluate,
- with a memory estimate of 5.66 GiB, over 2177986 allocations.

Tsit5

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

@benchmark evolution(M, ρ0, tlist, H_D, param; solver = Tsit5(), abstol = 1e-12, reltol = 1e-12, verbose = false)
BenchmarkTools.Trial: 2 samples with 1 evaluation.
- Range (minmax):  3.608 s 3.613 s   GC (min … max): 3.49% … 3.38%
- Time  (median):     3.611 s              GC (median):    3.43%
- Time  (mean ± σ):   3.611 s ± 3.144 ms   GC (mean ± σ):  3.43% ± 0.08%
+ Range (minmax):  3.672 s 3.675 s   GC (min … max): 4.23% … 4.29%
+ Time  (median):     3.674 s              GC (median):    4.26%
+ Time  (mean ± σ):   3.674 s ± 1.969 ms   GC (mean ± σ):  4.26% ± 0.04%
 
                               ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█ ▁
-  3.61 s        Histogram: frequency by time        3.61 s <
+  3.67 s        Histogram: frequency by time        3.68 s <
 
- Memory estimate: 3.25 GiB, allocs estimate: 1282987.

Vern7

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

@benchmark evolution(M, ρ0, tlist, H_D, param; solver = Vern7(), abstol = 1e-12, reltol = 1e-12, verbose = false)
BenchmarkTools.Trial: 2 samples with 1 evaluation.
- Range (minmax):  4.847 s  4.910 s   GC (min … max): 3.75% … 3.56%
- Time  (median):     4.878 s               GC (median):    3.66%
- Time  (mean ± σ):   4.878 s ± 44.528 ms   GC (mean ± σ):  3.66% ± 0.13%
+ Memory estimate: 2.64 GiB, allocs estimate: 1036259.

RK4

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

@benchmark evolution(M, ρ0, tlist, H_D, param; solver = RK4(), abstol = 1e-12, reltol = 1e-12, verbose = false)
BenchmarkTools.Trial: 1 sample with 1 evaluation.
+ Single result which took 7.959 s (4.39% GC) to evaluate,
+ with a memory estimate of 5.66 GiB, over 2177986 allocations.

Tsit5

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

@benchmark evolution(M, ρ0, tlist, H_D, param; solver = Tsit5(), abstol = 1e-12, reltol = 1e-12, verbose = false)
BenchmarkTools.Trial: 2 samples with 1 evaluation.
+ Range (minmax):  4.476 s  4.553 s   GC (min … max): 4.44% … 4.59%
+ Time  (median):     4.515 s               GC (median):    4.51%
+ Time  (mean ± σ):   4.515 s ± 54.853 ms   GC (mean ± σ):  4.51% ± 0.11%
 
-                                                         █  
-  ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█ ▁
-  4.85 s         Histogram: frequency by time        4.91 s <
+                                                         █  
+  ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█ ▁
+  4.48 s         Histogram: frequency by time        4.55 s <
 
- Memory estimate: 4.46 GiB, allocs estimate: 1767852.

Vern9

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

@benchmark evolution(M, ρ0, tlist, H_D, param; solver = Vern9(), abstol = 1e-12, reltol = 1e-12, verbose = false)
BenchmarkTools.Trial: 1 sample with 1 evaluation.
- Single result which took 7.626 s (3.77% GC) to evaluate,
- with a memory estimate of 6.93 GiB, over 2737173 allocations.

This page was generated using Literate.jl.

+ Memory estimate: 3.25 GiB, allocs estimate: 1282987.

Vern7

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

@benchmark evolution(M, ρ0, tlist, H_D, param; solver = Vern7(), abstol = 1e-12, reltol = 1e-12, verbose = false)
BenchmarkTools.Trial: 1 sample with 1 evaluation.
+ Single result which took 6.037 s (4.75% GC) to evaluate,
+ with a memory estimate of 4.46 GiB, over 1767852 allocations.

Vern9

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

@benchmark evolution(M, ρ0, tlist, H_D, param; solver = Vern9(), abstol = 1e-12, reltol = 1e-12, verbose = false)
BenchmarkTools.Trial: 1 sample with 1 evaluation.
+ Single result which took 9.634 s (5.05% GC) to evaluate,
+ with a memory estimate of 6.93 GiB, over 2737173 allocations.

This page was generated using Literate.jl.

diff --git a/dev/examples/cavityQED/1258a018.svg b/dev/examples/cavityQED/36a16c9a.svg similarity index 84% rename from dev/examples/cavityQED/1258a018.svg rename to dev/examples/cavityQED/36a16c9a.svg index 4192676b..2373ef0a 100644 --- a/dev/examples/cavityQED/1258a018.svg +++ b/dev/examples/cavityQED/36a16c9a.svg @@ -1,46 +1,46 @@ - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dev/examples/cavityQED/a0583d56.svg b/dev/examples/cavityQED/7a8e5f02.svg similarity index 91% rename from dev/examples/cavityQED/a0583d56.svg rename to dev/examples/cavityQED/7a8e5f02.svg index 2d8fd568..393f1467 100644 --- a/dev/examples/cavityQED/a0583d56.svg +++ b/dev/examples/cavityQED/7a8e5f02.svg @@ -1,84 +1,84 @@ - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dev/examples/cavityQED/53d52d24.svg b/dev/examples/cavityQED/a83b5e28.svg similarity index 91% rename from dev/examples/cavityQED/53d52d24.svg rename to dev/examples/cavityQED/a83b5e28.svg index 8462b44f..b3703cdb 100644 --- a/dev/examples/cavityQED/53d52d24.svg +++ b/dev/examples/cavityQED/a83b5e28.svg @@ -1,84 +1,84 @@ - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dev/examples/cavityQED/92e60546.svg b/dev/examples/cavityQED/f2f22598.svg similarity index 84% rename from dev/examples/cavityQED/92e60546.svg rename to dev/examples/cavityQED/f2f22598.svg index a20c7ffc..4ac5700f 100644 --- a/dev/examples/cavityQED/92e60546.svg +++ b/dev/examples/cavityQED/f2f22598.svg @@ -1,46 +1,46 @@ - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dev/examples/cavityQED/56f5ca5f.svg b/dev/examples/cavityQED/fef39f73.svg similarity index 86% rename from dev/examples/cavityQED/56f5ca5f.svg rename to dev/examples/cavityQED/fef39f73.svg index 2fdf4198..6b8d5c81 100644 --- a/dev/examples/cavityQED/56f5ca5f.svg +++ b/dev/examples/cavityQED/fef39f73.svg @@ -1,52 +1,52 @@ - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dev/examples/cavityQED/index.html b/dev/examples/cavityQED/index.html index 1ac979ec..7f6e168d 100644 --- a/dev/examples/cavityQED/index.html +++ b/dev/examples/cavityQED/index.html @@ -56,7 +56,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').data
 
 tier = 2
@@ -87,9 +87,9 @@
 ⎢⠀⠀⠀⠀⠀⠙⠂⠐⠆⠀⠀⠀⠠⡄⠀⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡇⠀⠀⠈⠱⣦⡀⠀⎥
 ⎣⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠀⠀⠛⠀⠀⠒⠀⠀⠀⠰⠀⠀⠀⠀⠀⠀⡇⠀⠀⠀⠀⠈⠻⣦⎦

Solve time evolution of ADOs

(see also Time Evolution)

t_list = 0:1:500
 evo_H  = evolution(M_Heom, ρ0.data, t_list);
Solving time evolution for auxiliary density operators...
-
Progress :   0%|▏                   |  ETA: 0:05:52 ( 0.71  s/it)
Progress :   2%|▍                   |  ETA: 0:00:50 ( 0.10  s/it)
Progress :   3%|▋                   |  ETA: 0:00:30 (61.43 ms/it)
Progress :   5%|▉                   |  ETA: 0:00:22 (46.77 ms/it)
Progress :   6%|█▎                  |  ETA: 0:00:18 (39.23 ms/it)
Progress :   7%|█▌                  |  ETA: 0:00:16 (34.61 ms/it)
Progress :   9%|█▊                  |  ETA: 0:00:14 (31.60 ms/it)
Progress :  10%|██                  |  ETA: 0:00:14 (30.02 ms/it)
Progress :  11%|██▎                 |  ETA: 0:00:13 (28.18 ms/it)
Progress :  13%|██▌                 |  ETA: 0:00:12 (26.76 ms/it)
Progress :  14%|██▉                 |  ETA: 0:00:11 (25.62 ms/it)
Progress :  16%|███▏                |  ETA: 0:00:10 (24.72 ms/it)
Progress :  17%|███▍                |  ETA: 0:00:10 (23.95 ms/it)
Progress :  18%|███▋                |  ETA: 0:00:10 (23.29 ms/it)
Progress :  20%|████                |  ETA: 0:00:09 (22.73 ms/it)
Progress :  21%|████▎               |  ETA: 0:00:09 (22.24 ms/it)
Progress :  23%|████▌               |  ETA: 0:00:08 (21.81 ms/it)
Progress :  24%|████▊               |  ETA: 0:00:08 (21.43 ms/it)
Progress :  25%|█████▏              |  ETA: 0:00:08 (21.09 ms/it)
Progress :  27%|█████▍              |  ETA: 0:00:08 (20.79 ms/it)
Progress :  28%|█████▋              |  ETA: 0:00:07 (20.52 ms/it)
Progress :  30%|█████▉              |  ETA: 0:00:07 (20.28 ms/it)
Progress :  31%|██████▎             |  ETA: 0:00:07 (20.05 ms/it)
Progress :  32%|██████▌             |  ETA: 0:00:07 (19.85 ms/it)
Progress :  34%|██████▊             |  ETA: 0:00:07 (19.66 ms/it)
Progress :  35%|███████             |  ETA: 0:00:06 (19.49 ms/it)
Progress :  37%|███████▎            |  ETA: 0:00:06 (19.34 ms/it)
Progress :  38%|███████▋            |  ETA: 0:00:06 (19.19 ms/it)
Progress :  39%|███████▉            |  ETA: 0:00:06 (19.06 ms/it)
Progress :  41%|████████▏           |  ETA: 0:00:06 (19.08 ms/it)
Progress :  42%|████████▍           |  ETA: 0:00:05 (18.96 ms/it)
Progress :  44%|████████▊           |  ETA: 0:00:05 (18.84 ms/it)
Progress :  45%|█████████           |  ETA: 0:00:05 (18.74 ms/it)
Progress :  46%|█████████▎          |  ETA: 0:00:05 (18.64 ms/it)
Progress :  48%|█████████▌          |  ETA: 0:00:05 (18.59 ms/it)
Progress :  49%|█████████▉          |  ETA: 0:00:05 (18.50 ms/it)
Progress :  50%|██████████▏         |  ETA: 0:00:05 (18.41 ms/it)
Progress :  52%|██████████▍         |  ETA: 0:00:04 (18.33 ms/it)
Progress :  53%|██████████▋         |  ETA: 0:00:04 (18.25 ms/it)
Progress :  55%|███████████         |  ETA: 0:00:04 (18.28 ms/it)
Progress :  56%|███████████▎        |  ETA: 0:00:04 (18.20 ms/it)
Progress :  57%|███████████▌        |  ETA: 0:00:04 (18.14 ms/it)
Progress :  59%|███████████▊        |  ETA: 0:00:04 (18.07 ms/it)
Progress :  60%|████████████        |  ETA: 0:00:04 (18.01 ms/it)
Progress :  62%|████████████▍       |  ETA: 0:00:03 (17.95 ms/it)
Progress :  63%|████████████▋       |  ETA: 0:00:03 (17.89 ms/it)
Progress :  64%|████████████▉       |  ETA: 0:00:03 (17.84 ms/it)
Progress :  66%|█████████████▏      |  ETA: 0:00:03 (17.78 ms/it)
Progress :  67%|█████████████▌      |  ETA: 0:00:03 (17.80 ms/it)
Progress :  69%|█████████████▊      |  ETA: 0:00:03 (17.75 ms/it)
Progress :  70%|██████████████      |  ETA: 0:00:03 (17.70 ms/it)
Progress :  71%|██████████████▎     |  ETA: 0:00:03 (17.66 ms/it)
Progress :  73%|██████████████▋     |  ETA: 0:00:02 (17.62 ms/it)
Progress :  74%|██████████████▉     |  ETA: 0:00:02 (17.58 ms/it)
Progress :  76%|███████████████▏    |  ETA: 0:00:02 (17.54 ms/it)
Progress :  77%|███████████████▍    |  ETA: 0:00:02 (17.50 ms/it)
Progress :  78%|███████████████▊    |  ETA: 0:00:02 (17.46 ms/it)
Progress :  80%|████████████████    |  ETA: 0:00:02 (17.48 ms/it)
Progress :  81%|████████████████▎   |  ETA: 0:00:02 (17.44 ms/it)
Progress :  83%|████████████████▌   |  ETA: 0:00:02 (17.41 ms/it)
Progress :  84%|████████████████▊   |  ETA: 0:00:01 (17.37 ms/it)
Progress :  85%|█████████████████▏  |  ETA: 0:00:01 (17.34 ms/it)
Progress :  87%|█████████████████▍  |  ETA: 0:00:01 (17.31 ms/it)
Progress :  88%|█████████████████▋  |  ETA: 0:00:01 (17.28 ms/it)
Progress :  90%|█████████████████▉  |  ETA: 0:00:01 (17.25 ms/it)
Progress :  91%|██████████████████▎ |  ETA: 0:00:01 (17.22 ms/it)
Progress :  92%|██████████████████▌ |  ETA: 0:00:01 (17.20 ms/it)
Progress :  94%|██████████████████▊ |  ETA: 0:00:01 (17.22 ms/it)
Progress :  95%|███████████████████ |  ETA: 0:00:00 (17.19 ms/it)
Progress :  96%|███████████████████▎|  ETA: 0:00:00 (17.17 ms/it)
Progress :  98%|███████████████████▌|  ETA: 0:00:00 (17.14 ms/it)
Progress :  99%|███████████████████▉|  ETA: 0:00:00 (17.12 ms/it)
Progress : 100%|████████████████████| Time: 0:00:08 (17.10 ms/it)
+
Progress :   0%|▏                   |  ETA: 0:07:14 ( 0.87  s/it)
Progress :   2%|▌                   |  ETA: 0:00:48 (98.33 ms/it)
Progress :   4%|▊                   |  ETA: 0:00:28 (57.64 ms/it)
Progress :   6%|█▏                  |  ETA: 0:00:21 (44.42 ms/it)
Progress :   7%|█▍                  |  ETA: 0:00:17 (37.56 ms/it)
Progress :   9%|█▊                  |  ETA: 0:00:15 (33.10 ms/it)
Progress :  10%|██▏                 |  ETA: 0:00:14 (30.14 ms/it)
Progress :  12%|██▍                 |  ETA: 0:00:13 (28.33 ms/it)
Progress :  13%|██▋                 |  ETA: 0:00:12 (26.83 ms/it)
Progress :  15%|██▉                 |  ETA: 0:00:11 (25.85 ms/it)
Progress :  16%|███▎                |  ETA: 0:00:10 (24.90 ms/it)
Progress :  18%|███▌                |  ETA: 0:00:10 (23.79 ms/it)
Progress :  19%|███▉                |  ETA: 0:00:09 (22.97 ms/it)
Progress :  21%|████▏               |  ETA: 0:00:09 (22.42 ms/it)
Progress :  22%|████▍               |  ETA: 0:00:09 (22.02 ms/it)
Progress :  23%|████▋               |  ETA: 0:00:08 (21.61 ms/it)
Progress :  25%|█████               |  ETA: 0:00:08 (21.04 ms/it)
Progress :  27%|█████▎              |  ETA: 0:00:08 (20.78 ms/it)
Progress :  28%|█████▋              |  ETA: 0:00:07 (20.39 ms/it)
Progress :  30%|██████              |  ETA: 0:00:07 (20.03 ms/it)
Progress :  31%|██████▎             |  ETA: 0:00:07 (19.69 ms/it)
Progress :  33%|██████▋             |  ETA: 0:00:07 (19.43 ms/it)
Progress :  35%|██████▉             |  ETA: 0:00:06 (19.17 ms/it)
Progress :  36%|███████▏            |  ETA: 0:00:06 (19.02 ms/it)
Progress :  38%|███████▌            |  ETA: 0:00:06 (18.76 ms/it)
Progress :  39%|███████▉            |  ETA: 0:00:06 (18.54 ms/it)
Progress :  41%|████████▏           |  ETA: 0:00:05 (18.30 ms/it)
Progress :  43%|████████▌           |  ETA: 0:00:05 (18.06 ms/it)
Progress :  44%|████████▉           |  ETA: 0:00:05 (17.86 ms/it)
Progress :  46%|█████████▏          |  ETA: 0:00:05 (17.68 ms/it)
Progress :  47%|█████████▌          |  ETA: 0:00:05 (17.52 ms/it)
Progress :  49%|█████████▊          |  ETA: 0:00:04 (17.37 ms/it)
Progress :  50%|██████████▏         |  ETA: 0:00:04 (17.22 ms/it)
Progress :  52%|██████████▍         |  ETA: 0:00:04 (17.13 ms/it)
Progress :  53%|██████████▊         |  ETA: 0:00:04 (17.07 ms/it)
Progress :  55%|███████████         |  ETA: 0:00:04 (16.97 ms/it)
Progress :  57%|███████████▍        |  ETA: 0:00:04 (16.86 ms/it)
Progress :  58%|███████████▋        |  ETA: 0:00:04 (16.75 ms/it)
Progress :  60%|████████████        |  ETA: 0:00:03 (16.65 ms/it)
Progress :  61%|████████████▎       |  ETA: 0:00:03 (16.57 ms/it)
Progress :  63%|████████████▋       |  ETA: 0:00:03 (16.53 ms/it)
Progress :  64%|████████████▉       |  ETA: 0:00:03 (16.53 ms/it)
Progress :  66%|█████████████▏      |  ETA: 0:00:03 (16.44 ms/it)
Progress :  67%|█████████████▌      |  ETA: 0:00:03 (16.37 ms/it)
Progress :  69%|█████████████▊      |  ETA: 0:00:03 (16.29 ms/it)
Progress :  71%|██████████████▏     |  ETA: 0:00:02 (16.21 ms/it)
Progress :  72%|██████████████▌     |  ETA: 0:00:02 (16.14 ms/it)
Progress :  74%|██████████████▊     |  ETA: 0:00:02 (16.07 ms/it)
Progress :  75%|███████████████▏    |  ETA: 0:00:02 (16.01 ms/it)
Progress :  77%|███████████████▍    |  ETA: 0:00:02 (15.93 ms/it)
Progress :  79%|███████████████▊    |  ETA: 0:00:02 (15.91 ms/it)
Progress :  80%|████████████████    |  ETA: 0:00:02 (15.85 ms/it)
Progress :  82%|████████████████▍   |  ETA: 0:00:01 (15.79 ms/it)
Progress :  83%|████████████████▋   |  ETA: 0:00:01 (15.76 ms/it)
Progress :  85%|█████████████████   |  ETA: 0:00:01 (15.74 ms/it)
Progress :  86%|█████████████████▎  |  ETA: 0:00:01 (15.69 ms/it)
Progress :  88%|█████████████████▋  |  ETA: 0:00:01 (15.64 ms/it)
Progress :  90%|█████████████████▉  |  ETA: 0:00:01 (15.58 ms/it)
Progress :  91%|██████████████████▎ |  ETA: 0:00:01 (15.54 ms/it)
Progress :  93%|██████████████████▋ |  ETA: 0:00:01 (15.52 ms/it)
Progress :  94%|██████████████████▉ |  ETA: 0:00:00 (15.47 ms/it)
Progress :  96%|███████████████████▎|  ETA: 0:00:00 (15.42 ms/it)
Progress :  98%|███████████████████▌|  ETA: 0:00:00 (15.40 ms/it)
Progress :  99%|███████████████████▉|  ETA: 0:00:00 (15.36 ms/it)
Progress : 100%|████████████████████| Time: 0:00:07 (15.34 ms/it)
 [DONE]

Solve stationary state of ADOs

(see also Stationary State)

steady_H = SteadyState(M_Heom);
Solving steady state for auxiliary density operators...[DONE]

Expectation values

observable of atom: $\sigma_z$

σz_evo_H    = Expect(σz.data, evo_H)
-σz_steady_H = Expect(σz.data, steady_H)
-0.3731173931282965

observable of cavity: $a^\dagger a$ (average photon number)

np_evo_H    = Expect((a' * a).data, evo_H)
+σz_steady_H = Expect(σz.data, steady_H)
-0.37311739312829667

observable of cavity: $a^\dagger a$ (average photon number)

np_evo_H    = Expect((a' * a).data, evo_H)
 np_steady_H = Expect((a' * a).data, steady_H)
 
 p1 = Plots.plot(
@@ -113,11 +113,11 @@
     linestyle=[:solid  :dash]
 )
 Plots.plot(p1, p2, layout=[1,1])
-Plots.xaxis!("t")
Example block output

Power spectral density

(see also Spectrum)

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

Power spectral density

(see also Spectrum)

ω_list = 1:0.01:3
 psd_H = spectrum(M_Heom, steady_H, a.data, ω_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 spectrum 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 spectrum density is given by

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

We can also calculate the power spectral density

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

We can also calculate the power spectral density

ω_list = 1:0.01:3
 psd_M = spectrum(M_master, steady_M, a.data, ω_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/f2ffa20d.svg b/dev/examples/dynamical_decoupling/83d1feb4.svg similarity index 93% rename from dev/examples/dynamical_decoupling/f2ffa20d.svg rename to dev/examples/dynamical_decoupling/83d1feb4.svg index d486fb23..2df3d839 100644 --- a/dev/examples/dynamical_decoupling/f2ffa20d.svg +++ b/dev/examples/dynamical_decoupling/83d1feb4.svg @@ -1,41 +1,41 @@ - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + diff --git a/dev/examples/dynamical_decoupling/698d544b.svg b/dev/examples/dynamical_decoupling/a094d40c.svg similarity index 91% rename from dev/examples/dynamical_decoupling/698d544b.svg rename to dev/examples/dynamical_decoupling/a094d40c.svg index 7b092fd9..a94b9436 100644 --- a/dev/examples/dynamical_decoupling/698d544b.svg +++ b/dev/examples/dynamical_decoupling/a094d40c.svg @@ -1,50 +1,50 @@ - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dev/examples/dynamical_decoupling/index.html b/dev/examples/dynamical_decoupling/index.html index e6060136..8f0ffcbc 100644 --- a/dev/examples/dynamical_decoupling/index.html +++ b/dev/examples/dynamical_decoupling/index.html @@ -40,7 +40,7 @@ ], 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
@@ -71,7 +71,7 @@
 ⎢⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠓⢤⣀⠀⠀⢍⡛⣬⣦⠘⢆⠀⎥
 ⎢⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠙⠒⢦⣈⠛⠛⣤⣬⡄⎥
 ⎣⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠙⠒⠿⣿⢟⎦

time evolution with time-independent Hamiltonian

(see also Time Evolution)

noPulseResult = evolution(M, ρ0, tlist);
Solving time evolution for auxiliary density operators...
-
Progress :  40%|████████            |  ETA: 0:00:00 ( 0.29 ms/it)
Progress :  75%|███████████████     |  ETA: 0:00:00 ( 0.33 ms/it)
Progress : 100%|████████████████████| Time: 0:00:00 ( 0.32 ms/it)
+
Progress :  38%|███████▌            |  ETA: 0:00:00 ( 0.33 ms/it)
Progress :  68%|█████████████▋      |  ETA: 0:00:00 ( 0.33 ms/it)
Progress :  99%|███████████████████▊|  ETA: 0:00:00 ( 0.37 ms/it)
Progress : 100%|████████████████████| Time: 0:00:00 ( 0.37 ms/it)
 [DONE]

Solve time evolution with time-dependent Hamiltonian

(see also Time Evolution)

We need to provide a user-defined function (named as H_D in this case), which must be in the form H_D(p::Tuple, t) and returns the time-dependent part of system Hamiltonian (in AbstractMatrix type) at any given time point t. The parameter p should be a Tuple which contains all the extra parameters [V (amplitude), Δ (delay), and σx (operator) in this case] for the function H_D:

function H_D(p::Tuple, t)
     V, Δ, σx = p
     return pulse(V, Δ, t) * σx
@@ -80,11 +80,11 @@
 
 fastPulseResult = evolution(M, ρ0, tlist, H_D, fastTuple);
 slowPulseResult = evolution(M, ρ0, tlist, H_D, slowTuple);
Solving time evolution for auxiliary density operators with time-dependent Hamiltonian...
-
Progress :   0%|                    |  ETA: 0:18:37 ( 1.12  s/it)
Progress :   9%|█▉                  |  ETA: 0:00:12 (13.68 ms/it)
Progress :  17%|███▍                |  ETA: 0:00:07 ( 8.05 ms/it)
Progress :  24%|████▉               |  ETA: 0:00:05 ( 6.09 ms/it)
Progress :  31%|██████▏             |  ETA: 0:00:04 ( 5.16 ms/it)
Progress :  38%|███████▌            |  ETA: 0:00:03 ( 4.48 ms/it)
Progress :  45%|████████▉           |  ETA: 0:00:02 ( 4.00 ms/it)
Progress :  52%|██████████▍         |  ETA: 0:00:02 ( 3.63 ms/it)
Progress :  59%|███████████▉        |  ETA: 0:00:01 ( 3.36 ms/it)
Progress :  66%|█████████████▎      |  ETA: 0:00:01 ( 3.16 ms/it)
Progress :  73%|██████████████▋     |  ETA: 0:00:01 ( 3.00 ms/it)
Progress :  80%|████████████████    |  ETA: 0:00:01 ( 2.86 ms/it)
Progress :  87%|█████████████████▌  |  ETA: 0:00:00 ( 2.75 ms/it)
Progress :  94%|██████████████████▉ |  ETA: 0:00:00 ( 2.65 ms/it)
Progress : 100%|████████████████████| Time: 0:00:02 ( 2.58 ms/it)
+
Progress :   0%|                    |  ETA: 0:22:09 ( 1.33  s/it)
Progress :   8%|█▋                  |  ETA: 0:00:17 (18.20 ms/it)
Progress :  14%|██▊                 |  ETA: 0:00:10 (11.68 ms/it)
Progress :  18%|███▋                |  ETA: 0:00:08 ( 9.35 ms/it)
Progress :  23%|████▋               |  ETA: 0:00:06 ( 7.88 ms/it)
Progress :  29%|█████▊              |  ETA: 0:00:05 ( 6.66 ms/it)
Progress :  34%|██████▉             |  ETA: 0:00:04 ( 5.88 ms/it)
Progress :  40%|████████            |  ETA: 0:00:03 ( 5.25 ms/it)
Progress :  46%|█████████▎          |  ETA: 0:00:03 ( 4.80 ms/it)
Progress :  52%|██████████▍         |  ETA: 0:00:02 ( 4.46 ms/it)
Progress :  58%|███████████▌        |  ETA: 0:00:02 ( 4.22 ms/it)
Progress :  63%|████████████▋       |  ETA: 0:00:01 ( 4.02 ms/it)
Progress :  68%|█████████████▋      |  ETA: 0:00:01 ( 3.87 ms/it)
Progress :  73%|██████████████▋     |  ETA: 0:00:01 ( 3.74 ms/it)
Progress :  78%|███████████████▋    |  ETA: 0:00:01 ( 3.62 ms/it)
Progress :  84%|████████████████▊   |  ETA: 0:00:01 ( 3.50 ms/it)
Progress :  90%|██████████████████  |  ETA: 0:00:00 ( 3.39 ms/it)
Progress :  95%|███████████████████ |  ETA: 0:00:00 ( 3.31 ms/it)
Progress : 100%|████████████████████| Time: 0:00:03 ( 3.23 ms/it)
 [DONE]
 
 Solving time evolution for auxiliary density operators with time-dependent Hamiltonian...
-
Progress :   9%|█▉                  |  ETA: 0:00:02 ( 1.90 ms/it)
Progress :  15%|███                 |  ETA: 0:00:02 ( 1.92 ms/it)
Progress :  20%|████                |  ETA: 0:00:02 ( 1.94 ms/it)
Progress :  25%|█████               |  ETA: 0:00:01 ( 1.94 ms/it)
Progress :  30%|██████              |  ETA: 0:00:01 ( 1.94 ms/it)
Progress :  35%|███████▏            |  ETA: 0:00:01 ( 1.94 ms/it)
Progress :  41%|████████▎           |  ETA: 0:00:01 ( 1.91 ms/it)
Progress :  48%|█████████▋          |  ETA: 0:00:01 ( 1.87 ms/it)
Progress :  54%|██████████▉         |  ETA: 0:00:01 ( 1.89 ms/it)
Progress :  59%|███████████▉        |  ETA: 0:00:01 ( 1.89 ms/it)
Progress :  65%|████████████▉       |  ETA: 0:00:01 ( 1.90 ms/it)
Progress :  70%|██████████████      |  ETA: 0:00:01 ( 1.90 ms/it)
Progress :  75%|███████████████     |  ETA: 0:00:00 ( 1.90 ms/it)
Progress :  80%|████████████████▏   |  ETA: 0:00:00 ( 1.91 ms/it)
Progress :  87%|█████████████████▍  |  ETA: 0:00:00 ( 1.88 ms/it)
Progress :  93%|██████████████████▋ |  ETA: 0:00:00 ( 1.87 ms/it)
Progress :  99%|███████████████████▊|  ETA: 0:00:00 ( 1.88 ms/it)
Progress : 100%|████████████████████| Time: 0:00:01 ( 1.88 ms/it)
+
Progress :   8%|█▋                  |  ETA: 0:00:02 ( 1.90 ms/it)
Progress :  13%|██▋                 |  ETA: 0:00:02 ( 2.18 ms/it)
Progress :  17%|███▍                |  ETA: 0:00:02 ( 2.31 ms/it)
Progress :  21%|████▏               |  ETA: 0:00:02 ( 2.41 ms/it)
Progress :  25%|████▉               |  ETA: 0:00:02 ( 2.43 ms/it)
Progress :  29%|█████▊              |  ETA: 0:00:02 ( 2.47 ms/it)
Progress :  33%|██████▌             |  ETA: 0:00:02 ( 2.48 ms/it)
Progress :  36%|███████▎            |  ETA: 0:00:02 ( 2.52 ms/it)
Progress :  40%|████████            |  ETA: 0:00:02 ( 2.55 ms/it)
Progress :  45%|█████████           |  ETA: 0:00:01 ( 2.53 ms/it)
Progress :  49%|█████████▉          |  ETA: 0:00:01 ( 2.52 ms/it)
Progress :  53%|██████████▊         |  ETA: 0:00:01 ( 2.52 ms/it)
Progress :  58%|███████████▌        |  ETA: 0:00:01 ( 2.52 ms/it)
Progress :  62%|████████████▎       |  ETA: 0:00:01 ( 2.52 ms/it)
Progress :  66%|█████████████▏      |  ETA: 0:00:01 ( 2.51 ms/it)
Progress :  70%|██████████████      |  ETA: 0:00:01 ( 2.50 ms/it)
Progress :  75%|██████████████▉     |  ETA: 0:00:01 ( 2.49 ms/it)
Progress :  79%|███████████████▊    |  ETA: 0:00:01 ( 2.48 ms/it)
Progress :  83%|████████████████▋   |  ETA: 0:00:00 ( 2.48 ms/it)
Progress :  89%|█████████████████▊  |  ETA: 0:00:00 ( 2.43 ms/it)
Progress :  95%|██████████████████▉ |  ETA: 0:00:00 ( 2.42 ms/it)
Progress :  99%|███████████████████▊|  ETA: 0:00:00 ( 2.42 ms/it)
Progress : 100%|████████████████████| Time: 0:00:02 ( 2.42 ms/it)
 [DONE]

Measure the coherence

One can use the built-in function Expect to calculate the expectation value from a given observable and ADOs:

# Define the operator that measures the 0, 1 element of density matrix
 ρ01 = [0 1; 0 0]
 
@@ -101,4 +101,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/a7a97313.svg b/dev/examples/electronic_current/8657dc55.svg similarity index 89% rename from dev/examples/electronic_current/a7a97313.svg rename to dev/examples/electronic_current/8657dc55.svg index 96836896..684e8cf0 100644 --- a/dev/examples/electronic_current/a7a97313.svg +++ b/dev/examples/electronic_current/8657dc55.svg @@ -1,42 +1,42 @@ - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dev/examples/electronic_current/index.html b/dev/examples/electronic_current/index.html index 84f5a925..99833515 100644 --- a/dev/examples/electronic_current/index.html +++ b/dev/examples/electronic_current/index.html @@ -51,7 +51,7 @@ ⎢⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠙⠲⢤⣀⠀⠀⠀⠀⠀⠉⠓⠦⣄⡀⠀⠀⠀⠀⣿⣿⣿⣧⢧⎥ ⎣⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠙⠒⠦⢤⣀⠀⠀⠀⠀⠉⠙⠲⠤⣄⡺⠭⣟⣻⣾⎦

Solve time evolution of ADOs

(see also Time Evolution)

tlist = 0:0.5:100
 ados_evolution = evolution(M, ρ0, tlist);
Solving time evolution for auxiliary density operators...
-
Progress :  10%|██▏                 |  ETA: 0:00:01 ( 5.18 ms/it)
Progress :  25%|█████               |  ETA: 0:00:01 ( 4.19 ms/it)
Progress :  46%|█████████▎          |  ETA: 0:00:00 ( 3.35 ms/it)
Progress :  68%|█████████████▌      |  ETA: 0:00:00 ( 3.04 ms/it)
Progress :  89%|█████████████████▊  |  ETA: 0:00:00 ( 2.88 ms/it)
Progress : 100%|████████████████████| Time: 0:00:00 ( 2.83 ms/it)
+
Progress :  12%|██▍                 |  ETA: 0:00:01 ( 4.43 ms/it)
Progress :  31%|██████▎             |  ETA: 0:00:00 ( 3.27 ms/it)
Progress :  51%|██████████▏         |  ETA: 0:00:00 ( 3.43 ms/it)
Progress :  76%|███████████████▎    |  ETA: 0:00:00 ( 2.95 ms/it)
Progress : 100%|████████████████████| Time: 0:00:00 ( 2.73 ms/it)
 [DONE]

Solve stationary state of ADOs

(see also Stationary State)

ados_steady = SteadyState(M);
Solving steady state for auxiliary density operators...[DONE]

Calculate current

Within the influence functional approach, the expectation value of the electronic current from the $\alpha$-fermionic bath into the system can be written in terms of the first-level-fermionic ($n=1$) auxiliary density operators, namely

\[\langle I_\alpha(t) \rangle =(-e) \frac{d\langle \mathcal{N}_\alpha\rangle}{dt}=i e \sum_{q\in\textbf{q}}(-1)^{\delta_{\nu,-}} ~\textrm{Tr}\left[d^{\bar{\nu}}\rho^{(0,1,+)}_{\vert \textbf{q}}(t)\right],\]

where $e$ represents the value of the elementary charge, and $\mathcal{N}_\alpha=\sum_k c^\dagger_{\alpha,k}c_{\alpha,k}$ is the occupation number operator for the $\alpha$-fermionic bath.

Given an ADOs, we provide a function which calculates the current from the $\alpha$-fermionic bath into the system with the help of Hierarchy Dictionary.

bathIdx:

  • 1 means 1st bath (bath_L)
  • 2 means 2nd bath (bath_R)
function Ic(ados, M::M_Fermion, bathIdx::Int)
     # the hierarchy dictionary
     HDict = M.hierarchy
@@ -107,4 +107,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/f77b97d5.svg b/dev/examples/quick_start/3a24c6c3.svg similarity index 89% rename from dev/examples/quick_start/f77b97d5.svg rename to dev/examples/quick_start/3a24c6c3.svg index ce444c8a..f041bac0 100644 --- a/dev/examples/quick_start/f77b97d5.svg +++ b/dev/examples/quick_start/3a24c6c3.svg @@ -1,41 +1,41 @@ - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + diff --git a/dev/examples/quick_start/6090b7c3.svg b/dev/examples/quick_start/723cf18e.svg similarity index 91% rename from dev/examples/quick_start/6090b7c3.svg rename to dev/examples/quick_start/723cf18e.svg index 2500662f..f6e59e38 100644 --- a/dev/examples/quick_start/6090b7c3.svg +++ b/dev/examples/quick_start/723cf18e.svg @@ -1,45 +1,45 @@ - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dev/examples/quick_start/index.html b/dev/examples/quick_start/index.html index a967b1d0..13bf5906 100644 --- a/dev/examples/quick_start/index.html +++ b/dev/examples/quick_start/index.html @@ -32,11 +32,11 @@ ==================================== Julia Version: 1.9.3 OS : Linux (x86_64-linux-gnu) -CPU : 2 × Intel(R) Xeon(R) Platinum 8370C CPU @ 2.80GHz +CPU : 2 × Intel(R) Xeon(R) CPU E5-2673 v3 @ 2.40GHz Memory : 6.76 GB WORD_SIZE: 64 LIBM : libopenlibm -LLVM : libLLVM-14.0.6 (ORCJIT, icelake-server) +LLVM : libLLVM-14.0.6 (ORCJIT, haswell) BLAS : libmkl_rt.so (ilp64)

System and Bath

Let us consider a simple two-level system coupled to a Drude-Lorentz bosonic bath. The system Hamiltonian, $H_{sys}$, and the bath spectral density, $J_D$, are

\[H_{sys}=\frac{\epsilon \sigma_z}{2} + \frac{\Delta \sigma_x}{2} ~~\text{and}\]

\[J_{D}(\omega)=\frac{2\lambda W\omega}{W^2+\omega^2},\]

System Hamiltonian and initial state

You can construct system hamiltonian, initial state, and coupling operators by standard julia bulit-in types: Vector, SparseVector, Matrix, SparseMatrix.

Moreover, it is also convenient to use QuantumOptics framework. It provides many useful functions to create arbitrary quantum states and operators which can be combined in all the expected ways.

Note that HierarchicalEOM.jl only accept standard julia bulit-in types. If you use QuantumOptics to construct the operators, remember that the matrix (or vector) in standard type are stored in .data field of the objects, i.e., op.data where op is a QuantumOptics-type object. Thus, you should take it as the inputs of HierarchicalEOM.jl for objects in QuantumOptics package.

Extension for QuantumOptics.jl

HierarchicalEOM.jl provides an extension to support QuantumOptics-type object, but this feature requires Julia 1.9+ and HierarchicalEOM 0.3+. See here for more details.

We demonstrate this tutorial by QuantumOptics (under Julia 1.8):

import QuantumOptics: SpinBasis, sigmaz, sigmax, ⊗, Ket, Bra, dm
 
 basis = SpinBasis(1//2)
@@ -121,7 +121,7 @@
 plot!(tlist, ones(length(tlist)) .* p01_s, label = L"\textrm{P}_{01} \textrm{(Steady State)}", linecolor=:red, linestyle=:dash, linewidth=3)
 
 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

Note that, for the following, we use the built-in linear algebra in Julia (instead of QuantumOptics.jl) to construct the operators

# 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

Note that, for the following, we use the built-in linear algebra in Julia (instead of QuantumOptics.jl) to construct the operators

# The system Hamiltonian
 Hsys = [
     0.25 1.50 2.50;
     1.50 0.75 3.50;
@@ -165,4 +165,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 0a5007a9..9b3ccaf2 100644 --- a/dev/extensions/CUDA/index.html +++ b/dev/extensions/CUDA/index.html @@ -35,4 +35,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 SteadyState 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 evolution until you find it.

Solving time evolution with CPU

ados_list_cpu = evolution(M_even_cpu, ρ0, tlist)

Solving time evolution with GPU

ados_list_gpu = evolution(M_even_gpu, ρ0, tlist)

Solving Spectrum with CPU

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

Solving Spectrum with GPU

dos_gpu = spectrum(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 SteadyState 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 evolution until you find it.

Solving time evolution with CPU

ados_list_cpu = evolution(M_even_cpu, ρ0, tlist)

Solving time evolution with GPU

ados_list_gpu = evolution(M_even_gpu, ρ0, tlist)

Solving Spectrum with CPU

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

Solving Spectrum with GPU

dos_gpu = spectrum(M_odd_gpu, ados_ss, d_up, ωlist; solver=KrylovJL_BICGSTAB(rtol=1f-10, atol=1f-12))
diff --git a/dev/extensions/QuantumOptics/index.html b/dev/extensions/QuantumOptics/index.html index 07d47f7e..4e4861e6 100644 --- a/dev/extensions/QuantumOptics/index.html +++ b/dev/extensions/QuantumOptics/index.html @@ -37,4 +37,4 @@ # can use the functions provided in QuantumOptics.jl such as partial trace: ptrace(ρ_QO_type, [1])
Operator(dim=2x2)
-  basis: Spin(1/2)sparse([1, 2], [1, 2], ComplexF64[0.04578602927147296 + 6.0e-16im, 0.9542139707285268 - 6.0e-16im], 2, 2)
+ basis: Spin(1/2)sparse([1, 2], [1, 2], ComplexF64[0.04578602927147296 + 6.0e-16im, 0.9542139707285268 - 6.0e-16im], 2, 2) diff --git a/dev/heom_matrix/HEOMLS_intro/index.html b/dev/heom_matrix/HEOMLS_intro/index.html index 15c5923a..d38cc658 100644 --- a/dev/heom_matrix/HEOMLS_intro/index.html +++ b/dev/heom_matrix/HEOMLS_intro/index.html @@ -38,4 +38,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 fdd7b265..47a420bd 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 0f19ceca..988ed364 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 9cff2c9e..ea9068ff 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 d073f7cc..9ba87e98 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 6f5dd956..64822bb3 100644 --- a/dev/heom_matrix/schrodinger_eq/index.html +++ b/dev/heom_matrix/schrodinger_eq/index.html @@ -10,4 +10,4 @@ M.dim M.N M.sup_dim -M.parity +M.parity diff --git a/dev/hierarchy_dictionary/index.html b/dev/hierarchy_dictionary/index.html index 54947a14..2724a311 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 408ed090..8c779aba 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 inspired by the Quantum Toolbox in Python (QuTiP).

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 inspired by the Quantum Toolbox in Python (QuTiP).

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 86beb4e1..898416fb 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.8) pkg> add HierarchicalEOM

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

Julia 1.8

HierarchicalEOM.jl requires Julia 1.8 or higher

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

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

Other Useful Packages

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

QuantumOptics.jl

QuantumOptics framework provides many useful functions to create arbitrary quantum states and operators which can be combined in all the expected ways. Constructing arbitrary Hamiltonians and specifying initial states is also straightforward.

Note

The inputs in HierarchicalEOM should be child-type of the standard Base.AbstractVector (for vector-type quantum states) and Base.AbstractMatrix (for matrix-type quantum operators). Users can still construct the vectors or matrices by standard method and take it as the input of HierarchicalEOM. For the users who constructs the quantum objects by QuantumOptics package, the standard type of vectors or matrices are stored in the .data field of the objects, i.e., op.data (where op is a QuantumOptics-type object). Thus, users should take it as the inputs of HierarchicalEOM for objects in QuantumOptics package.

Extension for QuantumOptics.jl

HierarchicalEOM.jl provides an extension to support QuantumOptics-type object, but this feature requires Julia 1.9+ and HierarchicalEOM 0.3+. See here for more details.

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 SteadyState and spectrum 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()

Other Useful Packages

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

QuantumOptics.jl

QuantumOptics framework provides many useful functions to create arbitrary quantum states and operators which can be combined in all the expected ways. Constructing arbitrary Hamiltonians and specifying initial states is also straightforward.

Note

The inputs in HierarchicalEOM should be child-type of the standard Base.AbstractVector (for vector-type quantum states) and Base.AbstractMatrix (for matrix-type quantum operators). Users can still construct the vectors or matrices by standard method and take it as the input of HierarchicalEOM. For the users who constructs the quantum objects by QuantumOptics package, the standard type of vectors or matrices are stored in the .data field of the objects, i.e., op.data (where op is a QuantumOptics-type object). Thus, users should take it as the inputs of HierarchicalEOM for objects in QuantumOptics package.

Extension for QuantumOptics.jl

HierarchicalEOM.jl provides an extension to support QuantumOptics-type object, but this feature requires Julia 1.9+ and HierarchicalEOM 0.3+. See here for more details.

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 SteadyState and spectrum 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 e3d75437..70d40c83 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 : 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.
  • dim : the dimension of the coupling operator (should be equal to the system dimension).
  • 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 : 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.
  • dim : the dimension of the coupling operator (should be equal to the system dimension).
  • 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 : 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 : 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 : 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.
  • dim : the dimension of the coupling operator (should be equal to the system dimension).
  • η : 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 : 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.
  • dim : the dimension of the coupling operator (should be equal to the system dimension).
  • η : 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 : 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.
  • dim : the dimension of the coupling operator (should be equal to the system dimension).
  • η_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 : 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 : 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.
  • dim : the dimension of the coupling operator (should be equal to the system dimension).
  • η : 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 : 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.
  • dim : the dimension of the coupling operator (should be equal to the system dimension).
  • η : 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 : 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.
  • dim : the dimension of the coupling operator (should be equal to the system dimension).
  • η_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 : 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 : 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.
  • dim : the dimension of the coupling operator (should be equal to the system dimension).
  • η : 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 : 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.
  • dim : the dimension of the coupling operator (should be equal to the system dimension).
  • η : 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 : 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.
  • dim : the dimension of the coupling operator (should be equal to the system dimension).
  • 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 : 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.
  • dim : the dimension of the coupling operator (should be equal to the system dimension).
  • η : 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 : 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.
  • dim : the dimension of the coupling operator (should be equal to the system dimension).
  • η : 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 : 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.
  • dim : the dimension of the coupling operator (should be equal to the system dimension).
  • 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 : 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.
  • dim : the dimension of the coupling operator (should be equal to the system dimension).
  • η : 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 : 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.
  • dim : the dimension of the coupling operator (should be equal to the system dimension).
  • η : 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 : 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

Correlation Functions

HierarchicalEOM.CorrelationFunc.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.CorrelationFunc.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.CorrelationFunc.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.CorrelationFunc.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.M_SType
struct M_S{T} <: 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::T : the sparse matrix of HEOM Liouvillian superoperator
  • tier : the tier (cutoff level) for the hierarchy, which equals to 0 in this case
  • dim : the dimension of system
  • 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{T} <: AbstractHEOMLSMatrix

HEOM Liouvillian superoperator matrix for bosonic bath

Fields

  • data::T : the sparse matrix of HEOM Liouvillian superoperator
  • tier : the tier (cutoff level) for the bosonic hierarchy
  • dim : the dimension of system
  • 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{T} <: AbstractHEOMLSMatrix

HEOM Liouvillian superoperator matrix for fermionic bath

Fields

  • data::T : the sparse matrix of HEOM Liouvillian superoperator
  • tier : the tier (cutoff level) for the fermionic hierarchy
  • dim : the dimension of system
  • 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{T} <: AbstractHEOMLSMatrix

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

Fields

  • data::T : the sparse matrix of HEOM Liouvillian superoperator
  • Btier : the tier (cutoff level) for bosonic hierarchy
  • Ftier : the tier (cutoff level) for fermionic hierarchy
  • dim : the dimension of system
  • 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::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::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
mutable struct ADOs

The Auxiliary Density Operators for HEOM model.

Fields

  • data : the vectorized auxiliary density operators
  • dim : the dimension of the system
  • 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 : 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.
  • dim : the dimension of the coupling operator (should be equal to the system dimension).
  • η : 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 : 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.
  • dim : the dimension of the coupling operator (should be equal to the system dimension).
  • η : 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 : 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

Correlation Functions

HierarchicalEOM.CorrelationFunc.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.CorrelationFunc.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.CorrelationFunc.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.CorrelationFunc.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.M_SType
struct M_S{T} <: 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::T : the sparse matrix of HEOM Liouvillian superoperator
  • tier : the tier (cutoff level) for the hierarchy, which equals to 0 in this case
  • dim : the dimension of system
  • 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{T} <: AbstractHEOMLSMatrix

HEOM Liouvillian superoperator matrix for bosonic bath

Fields

  • data::T : the sparse matrix of HEOM Liouvillian superoperator
  • tier : the tier (cutoff level) for the bosonic hierarchy
  • dim : the dimension of system
  • 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{T} <: AbstractHEOMLSMatrix

HEOM Liouvillian superoperator matrix for fermionic bath

Fields

  • data::T : the sparse matrix of HEOM Liouvillian superoperator
  • tier : the tier (cutoff level) for the fermionic hierarchy
  • dim : the dimension of system
  • 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{T} <: AbstractHEOMLSMatrix

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

Fields

  • data::T : the sparse matrix of HEOM Liouvillian superoperator
  • Btier : the tier (cutoff level) for bosonic hierarchy
  • Ftier : the tier (cutoff level) for fermionic hierarchy
  • dim : the dimension of system
  • 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::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::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
mutable struct ADOs

The Auxiliary Density Operators for HEOM model.

Fields

  • data : the vectorized auxiliary density operators
  • dim : the dimension of the system
  • 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

  • ρ : 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 : The auxiliary density operator
source
HierarchicalEOM.HeomAPI.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{Re}\left\{\textrm{Tr}\left[ O \rho \right]\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{Re}\left\{\textrm{Tr}\left[ O \rho \right]\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

  • ρ : 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 : The auxiliary density operator
source
HierarchicalEOM.HeomAPI.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{Re}\left\{\textrm{Tr}\left[ O \rho \right]\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{Re}\left\{\textrm{Tr}\left[ O \rho \right]\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 six function definitions of evolution, which depend on different input types and methods to solve the time evolution:

HierarchicalEOM.HeomAPI.evolutionFunction
evolution(M, ρ0, Δt, steps; threshold, nonzero_tol, verbose, filename)

Solve the time evolution for auxiliary density operators based on propagator (generated by FastExpm.jl) with initial state is given in the type of density-matrix (ρ0).

This method will return the time evolution of ADOs corresponds to tlist = 0 : Δt : (Δt * steps)

Parameters

  • M::AbstractHEOMLSMatrix : the matrix given from HEOM model
  • ρ0 : system initial state (density matrix)
  • Δt::Real : A specific time step (time interval).
  • steps::Int : The number of time steps
  • 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" during the solving process.

For more details, please refer to FastExpm.jl

Returns

  • ADOs_list : The auxiliary density operators of each time step.
source
evolution(M, ados, Δt, steps; threshold, nonzero_tol, verbose, filename)

Solve the time evolution for auxiliary density operators based on propagator (generated by FastExpm.jl) with initial state is given in the type of ADOs.

This method will return the time evolution of ADOs corresponds to tlist = 0 : Δt : (Δt * steps)

Parameters

  • M::AbstractHEOMLSMatrix : the matrix given from HEOM model
  • ados::ADOs : initial auxiliary density operators
  • Δt::Real : A specific time step (time interval).
  • steps::Int : The number of time steps
  • 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" during the solving process.

For more details, please refer to FastExpm.jl

Returns

  • ADOs_list : The auxiliary density operators of each time step.
source
evolution(M, ρ0, tlist; solver, reltol, abstol, maxiters, save_everystep, verbose, filename, SOLVEROptions...)

Solve the time evolution for auxiliary density operators based on ordinary differential equations with initial state is given in the type of density-matrix (ρ0).

Parameters

  • M::AbstractHEOMLSMatrix : the matrix given from HEOM model
  • ρ0 : system initial state (density matrix)
  • tlist::AbstractVector : Denote the specific time points to save the solution at, during the solving process.
  • solver : solver in package DifferentialEquations.jl. Default to DP5().
  • reltol::Real : Relative tolerance in adaptive timestepping. Default to 1.0e-6.
  • abstol::Real : Absolute tolerance in adaptive timestepping. Default to 1.0e-8.
  • maxiters::Real : Maximum number of iterations before stopping. Default to 1e5.
  • save_everystep::Bool : Saves the result at every step. Defaults to false.
  • 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" during the solving process.
  • SOLVEROptions : extra options for solver

For more details about solvers and extra options, please refer to DifferentialEquations.jl

Returns

  • ADOs_list : The auxiliary density operators in each time point.
source
evolution(M, ados, tlist; solver, reltol, abstol, maxiters, save_everystep, verbose, filename, SOLVEROptions...)

Solve the time evolution for auxiliary density operators based on ordinary differential equations with initial state is given in the type of ADOs.

Parameters

  • M::AbstractHEOMLSMatrix : the matrix given from HEOM model
  • ados::ADOs : initial auxiliary density operators
  • tlist::AbstractVector : Denote the specific time points to save the solution at, during the solving process.
  • solver : solver in package DifferentialEquations.jl. Default to DP5().
  • reltol::Real : Relative tolerance in adaptive timestepping. Default to 1.0e-6.
  • abstol::Real : Absolute tolerance in adaptive timestepping. Default to 1.0e-8.
  • maxiters::Real : Maximum number of iterations before stopping. Default to 1e5.
  • save_everystep::Bool : Saves the result at every step. Defaults to false.
  • 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" during the solving process.
  • SOLVEROptions : extra options for solver

For more details about solvers and extra options, please refer to DifferentialEquations.jl

Returns

  • ADOs_list : The auxiliary density operators in each time point.
source
evolution(M, ρ0, tlist, H, param; solver, reltol, abstol, maxiters, save_everystep, verbose, filename, SOLVEROptions...)

Solve the time evolution for auxiliary density operators with time-dependent system Hamiltonian based on ordinary differential equations with initial state is given in the type of density-matrix (ρ0).

Parameters

  • M::AbstractHEOMLSMatrix : the matrix given from HEOM model (with time-independent system Hamiltonian)
  • ρ0 : system initial state (density matrix)
  • tlist::AbstractVector : Denote the specific time points to save the solution at, during the solving process.
  • H::Function : a function for time-dependent part of system Hamiltonian. The function will be called by H(param, t) and should return the time-dependent part system Hamiltonian matrix at time t with AbstractMatrix type.
  • param::Tuple: the tuple of parameters which is used to call H(param, t) for the time-dependent system Hamiltonian. Default to empty tuple ().
  • solver : solver in package DifferentialEquations.jl. Default to DP5().
  • reltol::Real : Relative tolerance in adaptive timestepping. Default to 1.0e-6.
  • abstol::Real : Absolute tolerance in adaptive timestepping. Default to 1.0e-8.
  • maxiters::Real : Maximum number of iterations before stopping. Default to 1e5.
  • save_everystep::Bool : Saves the result at every step. Defaults to false.
  • 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" during the solving process.
  • SOLVEROptions : extra options for solver

For more details about solvers and extra options, please refer to DifferentialEquations.jl

Returns

  • ADOs_list : The auxiliary density operators in each time point.
source
evolution(M, ados, tlist, H, param; solver, reltol, abstol, maxiters, save_everystep, verbose, filename, SOLVEROptions...)

Solve the time evolution for auxiliary density operators with time-dependent system Hamiltonian based on ordinary differential equations with initial state is given in the type of ADOs.

Parameters

  • M::AbstractHEOMLSMatrix : the matrix given from HEOM model (with time-independent system Hamiltonian)
  • ados::ADOs : initial auxiliary density operators
  • tlist::AbstractVector : Denote the specific time points to save the solution at, during the solving process.
  • H::Function : a function for time-dependent part of system Hamiltonian. The function will be called by H(param, t) and should return the time-dependent part system Hamiltonian matrix at time t with AbstractMatrix type.
  • param::Tuple: the tuple of parameters which is used to call H(param, t) for the time-dependent system Hamiltonian. Default to empty tuple ().
  • solver : solver in package DifferentialEquations.jl. Default to DP5().
  • reltol::Real : Relative tolerance in adaptive timestepping. Default to 1.0e-6.
  • abstol::Real : Absolute tolerance in adaptive timestepping. Default to 1.0e-8.
  • maxiters::Real : Maximum number of iterations before stopping. Default to 1e5.
  • save_everystep::Bool : Saves the result at every step. Defaults to false.
  • 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" during the solving process.
  • SOLVEROptions : extra options for solver

For more details about solvers and extra options, please refer to DifferentialEquations.jl

Returns

  • ADOs_list : The auxiliary density operators in each time point.
source

Steady State

There are three function definitions of SteadyState, which depend on different input types and methods to solve the stationary state:

HierarchicalEOM.HeomAPI.SteadyStateFunction
SteadyState(M; 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 : 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

For more details about solvers and extra options, please refer to LinearSolve.jl

Returns

  • ::ADOs : The steady state of auxiliary density operators.
source
SteadyState(M, ρ0; solver, reltol, abstol, maxiters, save_everystep, verbose, SOLVEROptions...)

Solve the steady state of the auxiliary density operators based on time evolution (ordinary differential equations) 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 : system initial state (density matrix)
  • solver : The ODE solvers in package DifferentialEquations.jl. Default to DP5().
  • reltol::Real : Relative tolerance in adaptive timestepping. Default to 1.0e-6.
  • abstol::Real : Absolute tolerance in adaptive timestepping. Default to 1.0e-8.
  • maxiters::Real : Maximum number of iterations before stopping. Default to 1e5.
  • save_everystep::Bool : Saves the result at every step. Defaults to false.
  • verbose::Bool : To display verbose output and progress bar during the process or not. Defaults to true.
  • SOLVEROptions : extra options for solver

For more details about solvers and extra options, please refer to DifferentialEquations.jl

Returns

  • ::ADOs : The steady state of auxiliary density operators.
source
SteadyState(M, ados; solver, reltol, abstol, maxiters, save_everystep, verbose, SOLVEROptions...)

Solve the steady state of the auxiliary density operators based on time evolution (ordinary differential equations) with initial state is given in the type of ADOs.

Parameters

  • M::AbstractHEOMLSMatrix : the matrix given from HEOM model, where the parity should be EVEN.
  • ados::ADOs : initial auxiliary density operators
  • solver : The ODE solvers in package DifferentialEquations.jl. Default to DP5().
  • reltol::Real : Relative tolerance in adaptive timestepping. Default to 1.0e-3.
  • abstol::Real : Absolute tolerance in adaptive timestepping. Default to 1.0e-6.
  • maxiters::Real : Maximum number of iterations before stopping. Default to 1e5.
  • save_everystep::Bool : Saves the result at every step. Defaults to false.
  • verbose::Bool : To display verbose output and progress bar during the process or not. Defaults to true.
  • SOLVEROptions : extra options for solver

For more details about solvers and extra options, please refer to DifferentialEquations.jl

Returns

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

Spectrum

HierarchicalEOM.Spectrum.spectrumFunction
spectrum(M, ρ, op, ωlist; solver, verbose, filename, SOLVEROptions...)

Calculate spectrum for the system.

To calculate spectrum for bosonic systems (usually known as power spectrum):

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

remember to set the parameters:

  • M::AbstractHEOMLSMatrix: should be EVEN parity
  • op: the operator $A$ for bosonic system as shown above

To calculate spectrum for fermionic systems (usually known as density of states):

\[ \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\},\]

remember to set the parameters:

  • M::AbstractHEOMLSMatrix: should be ODD parity
  • op: the (annihilation) operator $d$ for fermionic system as shown above

Parameters

  • M::AbstractHEOMLSMatrix : the matrix given from HEOM model.
  • ρ : the system density matrix or the auxiliary density operators.
  • op : The annihilation operator acting on the system.
  • ωlist::AbstractVector : the specific frequency points to solve.
  • solver : 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

For more details about solvers and extra options, please refer to LinearSolve.jl

Returns

  • spec::AbstractVector : the spectrum list corresponds to the specified ωlist
source

Misc.

The outputs will be something like the following:

using HierarchicalEOM
+end
source

Time Evolution

There are six function definitions of evolution, which depend on different input types and methods to solve the time evolution:

HierarchicalEOM.HeomAPI.evolutionFunction
evolution(M, ρ0, Δt, steps; threshold, nonzero_tol, verbose, filename)

Solve the time evolution for auxiliary density operators based on propagator (generated by FastExpm.jl) with initial state is given in the type of density-matrix (ρ0).

This method will return the time evolution of ADOs corresponds to tlist = 0 : Δt : (Δt * steps)

Parameters

  • M::AbstractHEOMLSMatrix : the matrix given from HEOM model
  • ρ0 : system initial state (density matrix)
  • Δt::Real : A specific time step (time interval).
  • steps::Int : The number of time steps
  • 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" during the solving process.

For more details, please refer to FastExpm.jl

Returns

  • ADOs_list : The auxiliary density operators of each time step.
source
evolution(M, ados, Δt, steps; threshold, nonzero_tol, verbose, filename)

Solve the time evolution for auxiliary density operators based on propagator (generated by FastExpm.jl) with initial state is given in the type of ADOs.

This method will return the time evolution of ADOs corresponds to tlist = 0 : Δt : (Δt * steps)

Parameters

  • M::AbstractHEOMLSMatrix : the matrix given from HEOM model
  • ados::ADOs : initial auxiliary density operators
  • Δt::Real : A specific time step (time interval).
  • steps::Int : The number of time steps
  • 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" during the solving process.

For more details, please refer to FastExpm.jl

Returns

  • ADOs_list : The auxiliary density operators of each time step.
source
evolution(M, ρ0, tlist; solver, reltol, abstol, maxiters, save_everystep, verbose, filename, SOLVEROptions...)

Solve the time evolution for auxiliary density operators based on ordinary differential equations with initial state is given in the type of density-matrix (ρ0).

Parameters

  • M::AbstractHEOMLSMatrix : the matrix given from HEOM model
  • ρ0 : system initial state (density matrix)
  • tlist::AbstractVector : Denote the specific time points to save the solution at, during the solving process.
  • solver : solver in package DifferentialEquations.jl. Default to DP5().
  • reltol::Real : Relative tolerance in adaptive timestepping. Default to 1.0e-6.
  • abstol::Real : Absolute tolerance in adaptive timestepping. Default to 1.0e-8.
  • maxiters::Real : Maximum number of iterations before stopping. Default to 1e5.
  • save_everystep::Bool : Saves the result at every step. Defaults to false.
  • 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" during the solving process.
  • SOLVEROptions : extra options for solver

For more details about solvers and extra options, please refer to DifferentialEquations.jl

Returns

  • ADOs_list : The auxiliary density operators in each time point.
source
evolution(M, ados, tlist; solver, reltol, abstol, maxiters, save_everystep, verbose, filename, SOLVEROptions...)

Solve the time evolution for auxiliary density operators based on ordinary differential equations with initial state is given in the type of ADOs.

Parameters

  • M::AbstractHEOMLSMatrix : the matrix given from HEOM model
  • ados::ADOs : initial auxiliary density operators
  • tlist::AbstractVector : Denote the specific time points to save the solution at, during the solving process.
  • solver : solver in package DifferentialEquations.jl. Default to DP5().
  • reltol::Real : Relative tolerance in adaptive timestepping. Default to 1.0e-6.
  • abstol::Real : Absolute tolerance in adaptive timestepping. Default to 1.0e-8.
  • maxiters::Real : Maximum number of iterations before stopping. Default to 1e5.
  • save_everystep::Bool : Saves the result at every step. Defaults to false.
  • 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" during the solving process.
  • SOLVEROptions : extra options for solver

For more details about solvers and extra options, please refer to DifferentialEquations.jl

Returns

  • ADOs_list : The auxiliary density operators in each time point.
source
evolution(M, ρ0, tlist, H, param; solver, reltol, abstol, maxiters, save_everystep, verbose, filename, SOLVEROptions...)

Solve the time evolution for auxiliary density operators with time-dependent system Hamiltonian based on ordinary differential equations with initial state is given in the type of density-matrix (ρ0).

Parameters

  • M::AbstractHEOMLSMatrix : the matrix given from HEOM model (with time-independent system Hamiltonian)
  • ρ0 : system initial state (density matrix)
  • tlist::AbstractVector : Denote the specific time points to save the solution at, during the solving process.
  • H::Function : a function for time-dependent part of system Hamiltonian. The function will be called by H(param, t) and should return the time-dependent part system Hamiltonian matrix at time t with AbstractMatrix type.
  • param::Tuple: the tuple of parameters which is used to call H(param, t) for the time-dependent system Hamiltonian. Default to empty tuple ().
  • solver : solver in package DifferentialEquations.jl. Default to DP5().
  • reltol::Real : Relative tolerance in adaptive timestepping. Default to 1.0e-6.
  • abstol::Real : Absolute tolerance in adaptive timestepping. Default to 1.0e-8.
  • maxiters::Real : Maximum number of iterations before stopping. Default to 1e5.
  • save_everystep::Bool : Saves the result at every step. Defaults to false.
  • 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" during the solving process.
  • SOLVEROptions : extra options for solver

For more details about solvers and extra options, please refer to DifferentialEquations.jl

Returns

  • ADOs_list : The auxiliary density operators in each time point.
source
evolution(M, ados, tlist, H, param; solver, reltol, abstol, maxiters, save_everystep, verbose, filename, SOLVEROptions...)

Solve the time evolution for auxiliary density operators with time-dependent system Hamiltonian based on ordinary differential equations with initial state is given in the type of ADOs.

Parameters

  • M::AbstractHEOMLSMatrix : the matrix given from HEOM model (with time-independent system Hamiltonian)
  • ados::ADOs : initial auxiliary density operators
  • tlist::AbstractVector : Denote the specific time points to save the solution at, during the solving process.
  • H::Function : a function for time-dependent part of system Hamiltonian. The function will be called by H(param, t) and should return the time-dependent part system Hamiltonian matrix at time t with AbstractMatrix type.
  • param::Tuple: the tuple of parameters which is used to call H(param, t) for the time-dependent system Hamiltonian. Default to empty tuple ().
  • solver : solver in package DifferentialEquations.jl. Default to DP5().
  • reltol::Real : Relative tolerance in adaptive timestepping. Default to 1.0e-6.
  • abstol::Real : Absolute tolerance in adaptive timestepping. Default to 1.0e-8.
  • maxiters::Real : Maximum number of iterations before stopping. Default to 1e5.
  • save_everystep::Bool : Saves the result at every step. Defaults to false.
  • 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" during the solving process.
  • SOLVEROptions : extra options for solver

For more details about solvers and extra options, please refer to DifferentialEquations.jl

Returns

  • ADOs_list : The auxiliary density operators in each time point.
source

Steady State

There are three function definitions of SteadyState, which depend on different input types and methods to solve the stationary state:

HierarchicalEOM.HeomAPI.SteadyStateFunction
SteadyState(M; 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 : 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

For more details about solvers and extra options, please refer to LinearSolve.jl

Returns

  • ::ADOs : The steady state of auxiliary density operators.
source
SteadyState(M, ρ0; solver, reltol, abstol, maxiters, save_everystep, verbose, SOLVEROptions...)

Solve the steady state of the auxiliary density operators based on time evolution (ordinary differential equations) 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 : system initial state (density matrix)
  • solver : The ODE solvers in package DifferentialEquations.jl. Default to DP5().
  • reltol::Real : Relative tolerance in adaptive timestepping. Default to 1.0e-6.
  • abstol::Real : Absolute tolerance in adaptive timestepping. Default to 1.0e-8.
  • maxiters::Real : Maximum number of iterations before stopping. Default to 1e5.
  • save_everystep::Bool : Saves the result at every step. Defaults to false.
  • verbose::Bool : To display verbose output and progress bar during the process or not. Defaults to true.
  • SOLVEROptions : extra options for solver

For more details about solvers and extra options, please refer to DifferentialEquations.jl

Returns

  • ::ADOs : The steady state of auxiliary density operators.
source
SteadyState(M, ados; solver, reltol, abstol, maxiters, save_everystep, verbose, SOLVEROptions...)

Solve the steady state of the auxiliary density operators based on time evolution (ordinary differential equations) with initial state is given in the type of ADOs.

Parameters

  • M::AbstractHEOMLSMatrix : the matrix given from HEOM model, where the parity should be EVEN.
  • ados::ADOs : initial auxiliary density operators
  • solver : The ODE solvers in package DifferentialEquations.jl. Default to DP5().
  • reltol::Real : Relative tolerance in adaptive timestepping. Default to 1.0e-3.
  • abstol::Real : Absolute tolerance in adaptive timestepping. Default to 1.0e-6.
  • maxiters::Real : Maximum number of iterations before stopping. Default to 1e5.
  • save_everystep::Bool : Saves the result at every step. Defaults to false.
  • verbose::Bool : To display verbose output and progress bar during the process or not. Defaults to true.
  • SOLVEROptions : extra options for solver

For more details about solvers and extra options, please refer to DifferentialEquations.jl

Returns

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

Spectrum

HierarchicalEOM.Spectrum.spectrumFunction
spectrum(M, ρ, op, ωlist; solver, verbose, filename, SOLVEROptions...)

Calculate spectrum for the system.

To calculate spectrum for bosonic systems (usually known as power spectrum):

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

remember to set the parameters:

  • M::AbstractHEOMLSMatrix: should be EVEN parity
  • op: the operator $A$ for bosonic system as shown above

To calculate spectrum for fermionic systems (usually known as density of states):

\[ \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\},\]

remember to set the parameters:

  • M::AbstractHEOMLSMatrix: should be ODD parity
  • op: the (annihilation) operator $d$ for fermionic system as shown above

Parameters

  • M::AbstractHEOMLSMatrix : the matrix given from HEOM model.
  • ρ : the system density matrix or the auxiliary density operators.
  • op : The annihilation operator acting on the system.
  • ωlist::AbstractVector : the specific frequency points to solve.
  • solver : 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

For more details about solvers and extra options, please refer to LinearSolve.jl

Returns

  • spec::AbstractVector : the spectrum list corresponds to the specified ωlist
source

Misc.

The outputs will be something like the following:

using HierarchicalEOM
 HierarchicalEOM.versioninfo()

                                    __
                                   /  \
@@ -95,12 +95,12 @@
 ====================================
 Julia Version: 1.9.3
 OS       : Linux (x86_64-linux-gnu)
-CPU      : 2 × Intel(R) Xeon(R) Platinum 8370C CPU @ 2.80GHz
+CPU      : 2 × Intel(R) Xeon(R) CPU E5-2673 v3 @ 2.40GHz
 Memory   : 6.76 GB
 WORD_SIZE: 64
 LIBM     : libopenlibm
-LLVM     : libLLVM-14.0.6 (ORCJIT, icelake-server)
-BLAS     : libmkl_rt.so (ilp64)

The output will be something like the following:

using HierarchicalEOM
+LLVM     : libLLVM-14.0.6 (ORCJIT, haswell)
+BLAS     : libmkl_rt.so (ilp64)

The output will be something like the following:

using HierarchicalEOM
 HierarchicalEOM.print_logo()
                                   __
                                   /  \
  __     __                     __ \__/ __
@@ -110,4 +110,4 @@
 |   ___   |  |__)  |  /  \  |    _     _   |
 |  |   |  |   ____/| (    ) |   / \   / \  |
 |  |   |  |  |____ |  \__/  |  |   | |   | |
-|__|   |__|\______) \______/|__|   |_|   |_|
+|__| |__|\______) \______/|__| |_| |_| diff --git a/dev/spectrum/index.html b/dev/spectrum/index.html index adb1081e..ca36e9ad 100644 --- a/dev/spectrum/index.html +++ b/dev/spectrum/index.html @@ -40,4 +40,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ω = spectrum(M_odd, ados, d, ω_list) +πAω = spectrum(M_odd, ados, d, ω_list) diff --git a/dev/stationary_state/index.html b/dev/stationary_state/index.html index 5a0e95ca..6a521ccd 100644 --- a/dev/stationary_state/index.html +++ b/dev/stationary_state/index.html @@ -13,4 +13,4 @@ # 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 de678a41..8369210b 100644 --- a/dev/time_evolution/index.html +++ b/dev/time_evolution/index.html @@ -78,4 +78,4 @@ ρ0::AbstractMatrix tlist = 0:0.1:10 -ados_list = evolution(M, ρ0, tlist, H_pump)
Note

The default value for param in evolution is an empty tuple ().

Given the initial state as Density Operator (AbstractMatrix type)

See the docstring of this method:

evolution(M::AbstractHEOMLSMatrix, ρ0, tlist::AbstractVector, H::Function, param::Tuple = ())

Given the initial state as Auxiliary Density Operators

Note

This method is usually used when you want to solve the time evolution again with the initial state are given from the last time point of the previous result.

See the docstring of this method: evolution(M::AbstractHEOMLSMatrix, ados::ADOs, tlist::AbstractVector, H::Function, param::Tuple = ())

+ados_list = evolution(M, ρ0, tlist, H_pump)
Note

The default value for param in evolution is an empty tuple ().

Given the initial state as Density Operator (AbstractMatrix type)

See the docstring of this method:

evolution(M::AbstractHEOMLSMatrix, ρ0, tlist::AbstractVector, H::Function, param::Tuple = ())

Given the initial state as Auxiliary Density Operators

Note

This method is usually used when you want to solve the time evolution again with the initial state are given from the last time point of the previous result.

See the docstring of this method: evolution(M::AbstractHEOMLSMatrix, ados::ADOs, tlist::AbstractVector, H::Function, param::Tuple = ())