diff --git a/dev/ADOs/index.html b/dev/ADOs/index.html index ea82fdf6..db457e06 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/bosonic_bath/index.html b/dev/bosonic_bath/index.html index db744eb6..dcbaf8a5 100644 --- a/dev/bosonic_bath/index.html +++ b/dev/bosonic_bath/index.html @@ -29,4 +29,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/cite/index.html b/dev/cite/index.html index 8d293821..1e2fae3a 100644 --- a/dev/cite/index.html +++ b/dev/cite/index.html @@ -4,4 +4,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/index.html b/dev/examples/SIAM/index.html index 25af102c..99912920 100644 --- a/dev/examples/SIAM/index.html +++ b/dev/examples/SIAM/index.html @@ -61,49 +61,49 @@ Plots.plot(ωlist, dos) - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

This page was generated using Literate.jl.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

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 41772809..cdbd58c4 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 8171M CPU @ 2.60GHz +CPU : 2 × Intel(R) Xeon(R) Platinum 8370C CPU @ 2.80GHz Memory : 6.769 GB WORD_SIZE: 64 LIBM : libopenlibm -LLVM : libLLVM-14.0.6 (ORCJIT, skylake-avx512) +LLVM : libLLVM-14.0.6 (ORCJIT, icelake-server) BLAS : libopenblas64_.so (ilp64)

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

ϵ  = -5
 U  = 10
 Γ  = 2
@@ -67,94 +67,94 @@
 Constructing matrix...[DONE]
 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).

umf_solver = UMFPACKFactorization();

KLUFactorization

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

klu_solver = KLUFactorization();

Julia's built-in LU factorization

julia_solver = LUFactorization();

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
 mkl_solver     = MKLPardisoFactorize()
-mkl_ite_solver = 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: 431 samples with 1 evaluation.
- Range (minmax):  10.828 ms 16.200 ms   GC (min … max): 0.00% … 8.75%
- Time  (median):     11.338 ms                GC (median):    0.00%
- Time  (mean ± σ):   11.576 ms ± 651.017 μs   GC (mean ± σ):  2.13% ± 4.13%
-
-        ▆▇▇█▅█▇▅▇▃▂▁                                           
-  ▂▃▄▃▆▅████████████▄▃▄▂▃▁▁▁▁▁▁▁▁▁▁▂▁▁▁▁▂▃▃▂▂▆▄▄▅▃▄▃▅▆▄▃▃▄▃▄ ▄
-  10.8 ms         Histogram: frequency by time         13.2 ms <
-
- Memory estimate: 9.53 MiB, allocs estimate: 147.

KLUFactorization

@benchmark SteadyState(M_even; solver = klu_solver, verbose = false)
BenchmarkTools.Trial: 851 samples with 1 evaluation.
- Range (minmax):  5.489 ms 11.199 ms   GC (min … max): 0.00% … 13.48%
- Time  (median):     5.660 ms                GC (median):    0.00%
- Time  (mean ± σ):   5.862 ms ± 600.620 μs   GC (mean ± σ):  2.90% ±  6.43%
-
-     ▁█                                                       
-  ▂▂▃██▅▃▂▂▂▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▂▁▂▂▃▃▃▃ ▂
-  5.49 ms         Histogram: frequency by time        7.56 ms <
-
- Memory estimate: 5.86 MiB, allocs estimate: 339.

Julia's built-in generic LU factorization

@benchmark SteadyState(M_even; solver = julia_solver, verbose = false)
BenchmarkTools.Trial: 435 samples with 1 evaluation.
- Range (minmax):  10.644 ms 19.313 ms   GC (min … max): 0.00% … 7.66%
- Time  (median):     11.258 ms                GC (median):    0.00%
- Time  (mean ± σ):   11.487 ms ± 719.685 μs   GC (mean ± σ):  2.25% ± 4.39%
-
-          ▂▁▃▆▄█▄▇▄▂ ▁                                         
-  ▂▂▂▃▃▅▅███████████▆█▇▃▃▂▁▂▁▁▁▁▁▁▂▁▁▁▁▁▁▂▁▂▂▅▃▃▄▄▃▅▄▅▃▅▅▄▄▃ ▄
-  10.6 ms         Histogram: frequency by time         13.1 ms <
-
- Memory estimate: 9.40 MiB, allocs estimate: 166.

MKLPardisoFactorize

@benchmark SteadyState(M_even; solver = mkl_solver, verbose = false)
BenchmarkTools.Trial: 173 samples with 1 evaluation.
- Range (minmax):  25.753 ms49.737 ms   GC (min … max): 0.00% … 0.00%
- Time  (median):     28.905 ms               GC (median):    0.00%
- Time  (mean ± σ):   29.032 ms ±  3.477 ms   GC (mean ± σ):  0.26% ± 1.16%
-
-  ▁▇▃▃      █▆▁                                               
-  ████▄▃▃▃▅▅███▅▄▅▆▅▄▃▁▁▁▃▃▁▁▃▁▁▁▁▁▁▁▁▁▁▃▃▁▁▁▁▁▁▁▁▁▁▁▁▁▁▃▁▁▃ ▃
-  25.8 ms         Histogram: frequency by time        42.8 ms <
-
- Memory estimate: 2.72 MiB, allocs estimate: 97.

MKLPardisoIterate

@benchmark SteadyState(M_even; solver = mkl_ite_solver, verbose = false)
BenchmarkTools.Trial: 170 samples with 1 evaluation.
- Range (minmax):  25.438 ms59.217 ms   GC (min … max): 0.00% … 0.00%
- Time  (median):     28.830 ms               GC (median):    0.00%
- Time  (mean ± σ):   29.542 ms ±  5.046 ms   GC (mean ± σ):  0.26% ± 1.15%
-
-   ▅    ▂                                                     
-  ██▄▄▄▄█▇▃▂▃▃▁▃▂▃▂▃▁▂▂▂▂▁▂▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▂▁▁▁▁▁▁▁▁▁▁▃ ▂
-  25.4 ms         Histogram: frequency by time        53.4 ms <
-
- Memory estimate: 2.72 MiB, allocs estimate: 97.

Calculate Spectrum

UMFPACKFactorization (Default solver)

@benchmark spectrum(M_odd, ados_s, d_up, ωlist; verbose = false)
BenchmarkTools.Trial: 14 samples with 1 evaluation.
- Range (minmax):  358.513 ms374.452 ms   GC (min … max): 2.18% … 2.04%
- Time  (median):     362.928 ms                GC (median):    2.12%
- Time  (mean ± σ):   364.492 ms ±   5.015 ms   GC (mean ± σ):  2.15% ± 0.13%
-
-  █     ▁▁      ▁▁   ▁█              ▁              ▁  ▁  
-  █▁▁▁▁▁██▁▁▁▁▁▁███▁▁▁▁▁▁▁██▁▁▁▁▁▁▁▁▁▁▁▁▁▁█▁▁▁▁▁▁▁▁▁▁▁▁▁▁█▁▁█ ▁
-  359 ms           Histogram: frequency by time          374 ms <
-
- Memory estimate: 269.61 MiB, allocs estimate: 3098.

KLUFactorization

@benchmark spectrum(M_odd, ados_s, d_up, ωlist; solver = klu_solver, verbose = false)
BenchmarkTools.Trial: 47 samples with 1 evaluation.
- Range (minmax):  104.137 ms127.252 ms   GC (min … max): 1.57% … 2.56%
- Time  (median):     106.472 ms                GC (median):    3.00%
- Time  (mean ± σ):   107.332 ms ±   4.506 ms   GC (mean ± σ):  2.54% ± 0.69%
-
-       ▂                                                       
-  ▇█▇▁▆█▁▁▁▁▁▁▁▁▁▁▃▃▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▃▃▁▁▁▁▁▁▁▁▁▁▁▁▁▁▃ ▁
-  104 ms           Histogram: frequency by time          127 ms <
-
- Memory estimate: 89.50 MiB, allocs estimate: 6817.

Julia's built-in LU factorization

@benchmark spectrum(M_odd, ados_s, d_up, ωlist; solver = julia_solver, verbose = false)
BenchmarkTools.Trial: 11 samples with 1 evaluation.
- Range (minmax):  452.032 ms477.285 ms   GC (min … max): 2.44% … 1.96%
- Time  (median):     456.674 ms                GC (median):    2.09%
- Time  (mean ± σ):   458.250 ms ±   6.940 ms   GC (mean ± σ):  2.21% ± 0.19%
-
-  ▁ ▁▁    ▁ ▁ ▁█          ▁                                  ▁  
-  █▁██▁▁▁▁█▁█▁██▁▁▁▁▁▁▁▁▁█▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█ ▁
-  452 ms           Histogram: frequency by time          477 ms <
-
- Memory estimate: 347.15 MiB, allocs estimate: 4553.

MKLPardisoFactorize

@benchmark spectrum(M_odd, ados_s, d_up, ωlist; solver = mkl_solver, verbose = false)
BenchmarkTools.Trial: 17 samples with 1 evaluation.
- Range (minmax):  279.292 ms344.574 ms   GC (min … max): 0.63% … 0.58%
- Time  (median):     290.447 ms                GC (median):    0.60%
- Time  (mean ± σ):   299.356 ms ±  19.029 ms   GC (mean ± σ):  0.59% ± 0.03%
-
-  ▁ ▁ █▁▁ ▁▁     ▁ ▁ ▁        ▁         ▁ ▁ ▁                ▁  
-  █▁█▁███▁██▁▁▁▁▁█▁██▁▁▁▁▁▁▁▁█▁▁▁▁▁▁▁▁▁█▁█▁█▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█ ▁
-  279 ms           Histogram: frequency by time          345 ms <
-
- Memory estimate: 55.07 MiB, allocs estimate: 1463.

MKLPardisoIterate

@benchmark spectrum(M_odd, ados_s, d_up, ωlist; solver = mkl_ite_solver, verbose = false)
BenchmarkTools.Trial: 17 samples with 1 evaluation.
- Range (minmax):  275.306 ms333.147 ms   GC (min … max): 0.63% … 0.50%
- Time  (median):     293.110 ms                GC (median):    0.59%
- Time  (mean ± σ):   299.332 ms ±  19.914 ms   GC (mean ± σ):  0.58% ± 0.04%
-
-  ▁   ▁ ▁█  ▁ ▁    ▁    █      ▁                 █     ▁     █  
-  █▁▁▁█▁██▁▁█▁█▁▁▁▁█▁▁▁▁█▁▁▁▁▁█▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█▁▁▁▁▁█▁▁▁▁▁█ ▁
-  275 ms           Histogram: frequency by time          333 ms <
-
- Memory estimate: 55.07 MiB, allocs estimate: 1463.

This page was generated using Literate.jl.

+mkl_ite_solver = 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: 556 samples with 1 evaluation.
+ Range (minmax):  8.548 ms 10.865 ms   GC (min … max): 0.00% … 8.79%
+ Time  (median):     8.828 ms                GC (median):    0.00%
+ Time  (mean ± σ):   8.988 ms ± 415.663 μs   GC (mean ± σ):  1.96% ± 3.84%
+
+       ▂ ▂▃██▆▄▂                                              
+  ▃▄▅▆▆█▅███████▆▄▂▂▃▁▂▃▁▁▂▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▂▂▃▃▅▅▅▅▃▄▄▃▄▃▄▃ ▃
+  8.55 ms         Histogram: frequency by time          10 ms <
+
+ Memory estimate: 9.53 MiB, allocs estimate: 147.

KLUFactorization

@benchmark SteadyState(M_even; solver = klu_solver, verbose = false)
BenchmarkTools.Trial: 1090 samples with 1 evaluation.
+ Range (minmax):  4.368 ms  7.922 ms   GC (min … max): 0.00% … 13.22%
+ Time  (median):     4.444 ms                GC (median):    0.00%
+ Time  (mean ± σ):   4.583 ms ± 406.865 μs   GC (mean ± σ):  2.58% ±  5.90%
+
+   ▁█                                                    
+  ▃███▄▃▂▁▁▂▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▂▂▂▃▃▃▃ ▂
+  4.37 ms         Histogram: frequency by time        5.75 ms <
+
+ Memory estimate: 5.86 MiB, allocs estimate: 339.

Julia's built-in generic LU factorization

@benchmark SteadyState(M_even; solver = julia_solver, verbose = false)
BenchmarkTools.Trial: 562 samples with 1 evaluation.
+ Range (minmax):  8.434 ms 10.065 ms   GC (min … max): 0.00% … 10.66%
+ Time  (median):     8.726 ms                GC (median):    0.00%
+ Time  (mean ± σ):   8.886 ms ± 449.957 μs   GC (mean ± σ):  2.11% ±  4.13%
+
+     ▂▁    ▂▅▇▂                                               
+  ▂▅▅██▆▆█▇█████▆▅▂▂▁▂▁▂▁▁▁▂▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▃▃▁▃▃▂▃▃▄▅▅▆▄▄ ▃
+  8.43 ms         Histogram: frequency by time        9.95 ms <
+
+ Memory estimate: 9.40 MiB, allocs estimate: 166.

MKLPardisoFactorize

@benchmark SteadyState(M_even; solver = mkl_solver, verbose = false)
BenchmarkTools.Trial: 233 samples with 1 evaluation.
+ Range (minmax):  19.513 ms40.867 ms   GC (min … max): 0.00% … 0.00%
+ Time  (median):     21.999 ms               GC (median):    0.00%
+ Time  (mean ± σ):   21.537 ms ±  2.155 ms   GC (mean ± σ):  0.26% ± 1.11%
+
+  ▆▇▃▂       █▂                                              
+  ████▆▄▄▄▄▇██▁█▆▆▄▄▄▄▁▁▄▁▄▁▁▁▁▁▄▁▁▁▁▁▁▄▁▁▁▁▄▁▁▁▁▁▁▁▁▁▁▁▁▄ ▆
+  19.5 ms      Histogram: log(frequency) by time      31.4 ms <
+
+ Memory estimate: 2.72 MiB, allocs estimate: 97.

MKLPardisoIterate

@benchmark SteadyState(M_even; solver = mkl_ite_solver, verbose = false)
BenchmarkTools.Trial: 226 samples with 1 evaluation.
+ Range (minmax):  19.573 ms49.166 ms   GC (min … max): 0.00% … 2.43%
+ Time  (median):     22.080 ms               GC (median):    0.00%
+ Time  (mean ± σ):   22.196 ms ±  3.465 ms   GC (mean ± σ):  0.26% ± 1.10%
+
+  █▃▁   ▆▂▂▁▃                                                 
+  ███▄▆██████▇▇▇▇▁▄▄▄▄▄▁▁▁▁▁▁▁▄▁▁▁▁▁▁▁▄▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▄ ▆
+  19.6 ms      Histogram: log(frequency) by time      41.7 ms <
+
+ Memory estimate: 2.72 MiB, allocs estimate: 97.

Calculate Spectrum

UMFPACKFactorization (Default solver)

@benchmark spectrum(M_odd, ados_s, d_up, ωlist; verbose = false)
BenchmarkTools.Trial: 18 samples with 1 evaluation.
+ Range (minmax):  285.050 ms296.609 ms   GC (min … max): 1.97% … 2.02%
+ Time  (median):     287.191 ms                GC (median):    1.99%
+ Time  (mean ± σ):   288.671 ms ±   3.321 ms   GC (mean ± σ):  1.99% ± 0.05%
+
+  ▁  ▁   █▁██ ▁ █▁        ▁         ▁             ▁▁          ▁  
+  █▁▁█▁▁▁█████▁██▁▁▁▁▁▁▁█▁▁▁▁▁▁▁▁▁█▁▁▁▁▁▁▁▁▁▁▁▁▁██▁▁▁▁▁▁▁▁▁▁█ ▁
+  285 ms           Histogram: frequency by time          297 ms <
+
+ Memory estimate: 269.61 MiB, allocs estimate: 3100.

KLUFactorization

@benchmark spectrum(M_odd, ados_s, d_up, ωlist; solver = klu_solver, verbose = false)
BenchmarkTools.Trial: 60 samples with 1 evaluation.
+ Range (minmax):  82.359 ms104.256 ms   GC (min … max): 1.45% … 2.28%
+ Time  (median):     84.121 ms                GC (median):    2.82%
+ Time  (mean ± σ):   84.492 ms ±   3.388 ms   GC (mean ± σ):  2.39% ± 0.63%
+
+   ▂   ▂                                                      
+  ▅█▇▅▆█▇▃▁▃▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▃ ▁
+  82.4 ms         Histogram: frequency by time         99.7 ms <
+
+ Memory estimate: 89.50 MiB, allocs estimate: 6817.

Julia's built-in LU factorization

@benchmark spectrum(M_odd, ados_s, d_up, ωlist; solver = julia_solver, verbose = false)
BenchmarkTools.Trial: 14 samples with 1 evaluation.
+ Range (minmax):  358.981 ms384.617 ms   GC (min … max): 1.97% … 1.80%
+ Time  (median):     361.301 ms                GC (median):    2.08%
+ Time  (mean ± σ):   363.913 ms ±   6.742 ms   GC (mean ± σ):  2.07% ± 0.18%
+
+  ██ █ ▁    ▁  ▁▁▁       ▁                                   ▁  
+  ██▁█▁█▁▁▁▁█▁███▁▁▁▁▁▁▁█▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█ ▁
+  359 ms           Histogram: frequency by time          385 ms <
+
+ Memory estimate: 347.15 MiB, allocs estimate: 4553.

MKLPardisoFactorize

@benchmark spectrum(M_odd, ados_s, d_up, ωlist; solver = mkl_solver, verbose = false)
BenchmarkTools.Trial: 25 samples with 1 evaluation.
+ Range (minmax):  190.288 ms239.449 ms   GC (min … max): 0.71% … 0.52%
+ Time  (median):     203.987 ms                GC (median):    0.62%
+ Time  (mean ± σ):   207.581 ms ±  14.190 ms   GC (mean ± σ):  0.67% ± 0.14%
+
+  ▁   ▁█▁ ▁ █ ▁▁ █ ▁█ ▁ ▁              ▁       ▁        ▁  ▁▁  
+  █▁▁▁███▁█▁█▁██▁█▁██▁█▁█▁▁▁▁▁▁▁▁▁▁▁▁▁▁█▁▁▁▁▁▁▁█▁▁▁▁▁▁▁▁█▁▁██ ▁
+  190 ms           Histogram: frequency by time          239 ms <
+
+ Memory estimate: 55.07 MiB, allocs estimate: 1463.

MKLPardisoIterate

@benchmark spectrum(M_odd, ados_s, d_up, ωlist; solver = mkl_ite_solver, verbose = false)
BenchmarkTools.Trial: 24 samples with 1 evaluation.
+ Range (minmax):  195.021 ms283.398 ms   GC (min … max): 0.64% … 0.43%
+ Time  (median):     202.830 ms                GC (median):    0.61%
+ Time  (mean ± σ):   211.742 ms ±  20.463 ms   GC (mean ± σ):  0.60% ± 0.07%
+
+  █ ▃ █                                                   
+  █▇█▇██▇▇▁▁▁▁▁▁▁▁▁▁▁▇▇▇▁▇▇▁▇▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▇ ▁
+  195 ms           Histogram: frequency by time          283 ms <
+
+ Memory estimate: 55.07 MiB, allocs estimate: 1463.

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 2572a04d..f0276dad 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 8171M CPU @ 2.60GHz +CPU : 2 × Intel(R) Xeon(R) Platinum 8370C CPU @ 2.80GHz Memory : 6.769 GB WORD_SIZE: 64 LIBM : libopenlibm -LLVM : libLLVM-14.0.6 (ORCJIT, skylake-avx512) +LLVM : libLLVM-14.0.6 (ORCJIT, icelake-server) BLAS : libopenblas64_.so (ilp64)

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

Γ  = 0.0005
 W  = 0.005
 kT = 0.05
@@ -72,49 +72,49 @@
 
 bath = Boson_DrudeLorentz_Pade(σz, Γ, W, kT, N)
 M = M_Boson(H0, tier, bath);
Preparing block matrices for HEOM Liouvillian superoperator (using 1 threads)...
-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: 3 samples with 1 evaluation.
- Range (minmax):  1.705 s 1.715 s   GC (min … max): 7.16% … 6.93%
- Time  (median):     1.705 s              GC (median):    7.16%
- Time  (mean ± σ):   1.708 s ± 5.922 ms   GC (mean ± σ):  7.16% ± 0.22%
+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: 5 samples with 1 evaluation.
+ Range (minmax):  1.237 s 1.255 s   GC (min … max): 6.25% … 6.36%
+ Time  (median):     1.246 s              GC (median):    6.44%
+ Time  (mean ± σ):   1.246 s ± 7.198 ms   GC (mean ± σ):  6.47% ± 0.18%
 
-                                                        ▁  
-  ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█ ▁
-  1.7 s         Histogram: frequency by time        1.72 s <
+  █           █               █            █  
+  █▁▁▁▁▁▁▁▁▁▁▁█▁▁▁▁▁▁▁▁▁▁▁▁▁█▁▁▁▁▁▁▁▁▁▁▁▁▁█▁▁▁▁▁▁▁▁▁▁▁▁█ ▁
+  1.24 s        Histogram: frequency by time        1.26 s <
 
  Memory estimate: 2.61 GiB, allocs estimate: 879546.

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: 2 samples with 1 evaluation.
- Range (minmax):  3.747 s 3.752 s   GC (min … max): 7.39% … 7.18%
- Time  (median):     3.749 s              GC (median):    7.28%
- Time  (mean ± σ):   3.749 s ± 3.681 ms   GC (mean ± σ):  7.28% ± 0.15%
+ Range (minmax):  2.693 s  2.758 s   GC (min … max): 6.73% … 6.34%
+ Time  (median):     2.726 s               GC (median):    6.53%
+ Time  (mean ± σ):   2.726 s ± 45.877 ms   GC (mean ± σ):  6.53% ± 0.27%
 
-                                                        █  
-  ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█ ▁
-  3.75 s        Histogram: frequency by time        3.75 s <
+                                                         █  
+  ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█ ▁
+  2.69 s         Histogram: frequency by time        2.76 s <
 
- Memory estimate: 5.64 GiB, allocs estimate: 1867824.

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: 3 samples with 1 evaluation.
- Range (minmax):  2.148 s  2.174 s   GC (min … max): 7.74% … 7.82%
- Time  (median):     2.169 s               GC (median):    7.66%
- Time  (mean ± σ):   2.164 s ± 13.434 ms   GC (mean ± σ):  7.68% ± 0.18%
+ Memory estimate: 5.64 GiB, allocs estimate: 1867824.

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: 4 samples with 1 evaluation.
+ Range (minmax):  1.568 s  1.614 s   GC (min … max): 7.21% … 6.66%
+ Time  (median):     1.592 s               GC (median):    7.03%
+ Time  (mean ± σ):   1.591 s ± 19.452 ms   GC (mean ± σ):  6.99% ± 0.25%
 
-                                               █         █  
-  ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█▁▁▁▁▁▁▁▁▁█ ▁
-  2.15 s         Histogram: frequency by time        2.17 s <
+  █                                   █                  █  
+  █▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█ ▁
+  1.57 s         Histogram: frequency by time        1.61 s <
 
- Memory estimate: 3.30 GiB, allocs estimate: 1119957.

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):  2.929 s  3.006 s   GC (min … max): 8.03% … 7.67%
- Time  (median):     2.968 s               GC (median):    7.85%
- Time  (mean ± σ):   2.968 s ± 54.300 ms   GC (mean ± σ):  7.85% ± 0.25%
+ Memory estimate: 3.30 GiB, allocs estimate: 1119957.

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: 3 samples with 1 evaluation.
+ Range (minmax):  2.136 s  2.191 s   GC (min … max): 7.30% … 6.92%
+ Time  (median):     2.146 s               GC (median):    7.27%
+ Time  (mean ± σ):   2.158 s ± 29.017 ms   GC (mean ± σ):  7.21% ± 0.25%
 
-                                                         █  
-  ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█ ▁
-  2.93 s         Histogram: frequency by time        3.01 s <
+                                    █  
+  ▁▁▁▁▁▁▁▁▁█▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█ ▁
+  2.14 s         Histogram: frequency by time        2.19 s <
 
  Memory estimate: 4.47 GiB, allocs estimate: 1519472.

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: 2 samples with 1 evaluation.
- Range (minmax):  4.499 s  4.547 s   GC (min … max): 7.99% … 8.19%
- Time  (median):     4.523 s               GC (median):    8.09%
- Time  (mean ± σ):   4.523 s ± 34.261 ms   GC (mean ± σ):  8.09% ± 0.14%
+ Range (minmax):  3.190 s  3.236 s   GC (min … max): 7.63% … 7.22%
+ Time  (median):     3.213 s               GC (median):    7.42%
+ Time  (mean ± σ):   3.213 s ± 32.083 ms   GC (mean ± σ):  7.42% ± 0.28%
 
                               ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█ ▁
-  4.5 s          Histogram: frequency by time        4.55 s <
+  3.19 s         Histogram: frequency by time        3.24 s <
 
- Memory estimate: 6.68 GiB, allocs estimate: 2269711.

This page was generated using Literate.jl.

+ Memory estimate: 6.68 GiB, allocs estimate: 2269711.

This page was generated using Literate.jl.

diff --git a/dev/examples/cavityQED/index.html b/dev/examples/cavityQED/index.html index e5930d21..411dd546 100644 --- a/dev/examples/cavityQED/index.html +++ b/dev/examples/cavityQED/index.html @@ -59,55 +59,55 @@ Plots.yaxis!("C(t)") - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

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
 
@@ -138,7 +138,7 @@ 

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 :   4%|▊                   |  ETA: 0:00:03 ( 5.70 ms/it)
Progress :   7%|█▌                  |  ETA: 0:00:03 ( 5.75 ms/it)
Progress :  11%|██▎                 |  ETA: 0:00:03 ( 5.69 ms/it)
Progress :  15%|███                 |  ETA: 0:00:02 ( 5.67 ms/it)
Progress :  19%|███▊                |  ETA: 0:00:02 ( 5.64 ms/it)
Progress :  22%|████▌               |  ETA: 0:00:02 ( 5.61 ms/it)
Progress :  26%|█████▎              |  ETA: 0:00:02 ( 5.58 ms/it)
Progress :  30%|█████▉              |  ETA: 0:00:02 ( 5.70 ms/it)
Progress :  33%|██████▋             |  ETA: 0:00:02 ( 5.67 ms/it)
Progress :  37%|███████▍            |  ETA: 0:00:02 ( 5.67 ms/it)
Progress :  41%|████████▏           |  ETA: 0:00:02 ( 5.66 ms/it)
Progress :  45%|████████▉           |  ETA: 0:00:02 ( 5.64 ms/it)
Progress :  48%|█████████▋          |  ETA: 0:00:01 ( 5.64 ms/it)
Progress :  52%|██████████▍         |  ETA: 0:00:01 ( 5.63 ms/it)
Progress :  56%|███████████▏        |  ETA: 0:00:01 ( 5.63 ms/it)
Progress :  59%|███████████▉        |  ETA: 0:00:01 ( 5.62 ms/it)
Progress :  63%|████████████▋       |  ETA: 0:00:01 ( 5.63 ms/it)
Progress :  67%|█████████████▍      |  ETA: 0:00:01 ( 5.63 ms/it)
Progress :  70%|██████████████      |  ETA: 0:00:01 ( 5.63 ms/it)
Progress :  74%|██████████████▊     |  ETA: 0:00:01 ( 5.70 ms/it)
Progress :  77%|███████████████▌    |  ETA: 0:00:01 ( 5.70 ms/it)
Progress :  81%|████████████████▎   |  ETA: 0:00:01 ( 5.70 ms/it)
Progress :  85%|████████████████▉   |  ETA: 0:00:00 ( 5.70 ms/it)
Progress :  88%|█████████████████▋  |  ETA: 0:00:00 ( 5.74 ms/it)
Progress :  92%|██████████████████▍ |  ETA: 0:00:00 ( 5.73 ms/it)
Progress :  95%|███████████████████▏|  ETA: 0:00:00 ( 5.72 ms/it)
Progress :  99%|███████████████████▊|  ETA: 0:00:00 ( 5.72 ms/it)
Progress : 100%|████████████████████| Time: 0:00:02 ( 5.72 ms/it)
+
Progress :   5%|▉                   |  ETA: 0:00:02 ( 4.61 ms/it)
Progress :   9%|█▉                  |  ETA: 0:00:02 ( 4.57 ms/it)
Progress :  14%|██▊                 |  ETA: 0:00:02 ( 4.54 ms/it)
Progress :  18%|███▋                |  ETA: 0:00:02 ( 4.53 ms/it)
Progress :  23%|████▋               |  ETA: 0:00:02 ( 4.52 ms/it)
Progress :  28%|█████▌              |  ETA: 0:00:02 ( 4.52 ms/it)
Progress :  32%|██████▍             |  ETA: 0:00:02 ( 4.59 ms/it)
Progress :  37%|███████▍            |  ETA: 0:00:01 ( 4.58 ms/it)
Progress :  41%|████████▎           |  ETA: 0:00:01 ( 4.57 ms/it)
Progress :  46%|█████████▏          |  ETA: 0:00:01 ( 4.57 ms/it)
Progress :  50%|██████████          |  ETA: 0:00:01 ( 4.57 ms/it)
Progress :  55%|███████████         |  ETA: 0:00:01 ( 4.56 ms/it)
Progress :  59%|███████████▉        |  ETA: 0:00:01 ( 4.55 ms/it)
Progress :  64%|████████████▊       |  ETA: 0:00:01 ( 4.56 ms/it)
Progress :  68%|█████████████▋      |  ETA: 0:00:01 ( 4.56 ms/it)
Progress :  73%|██████████████▌     |  ETA: 0:00:01 ( 4.56 ms/it)
Progress :  77%|███████████████▍    |  ETA: 0:00:01 ( 4.56 ms/it)
Progress :  81%|████████████████▎   |  ETA: 0:00:00 ( 4.56 ms/it)
Progress :  86%|█████████████████▏  |  ETA: 0:00:00 ( 4.56 ms/it)
Progress :  90%|██████████████████  |  ETA: 0:00:00 ( 4.63 ms/it)
Progress :  94%|██████████████████▉ |  ETA: 0:00:00 ( 4.64 ms/it)
Progress :  99%|███████████████████▊|  ETA: 0:00:00 ( 4.64 ms/it)
Progress : 100%|████████████████████| Time: 0:00:02 ( 4.64 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.3731173931282967

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)
@@ -167,87 +167,87 @@ 

- + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Power spectral density

(see also Spectrum)

ω_list = 1:0.01:3
 psd_H = spectrum(M_Heom, steady_H, a.data, ω_list)
 
@@ -255,49 +255,49 @@ 

- + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + +

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 )
 
@@ -353,87 +353,87 @@ 

- + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

We can also calculate the power spectral density

ω_list = 1:0.01:3
 psd_M = spectrum(M_master, steady_M, a.data, ω_list)
 
@@ -441,47 +441,47 @@ 

- + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - -

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.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +

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/index.html b/dev/examples/dynamical_decoupling/index.html index 6180ad68..a74e5d25 100644 --- a/dev/examples/dynamical_decoupling/index.html +++ b/dev/examples/dynamical_decoupling/index.html @@ -43,53 +43,53 @@ )

- + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

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$
  • \[kT\]

    (the product of the Boltzmann constant $k$ and the absolute temperature $T$)
  • the total number of exponentials for the reservoir $(N + 1)$
Γ  = 0.0005
 W  = 0.005
 kT = 0.05
@@ -120,7 +120,7 @@ 

time evolution with time-independent Hamiltonian

(see also Time Evolution)

noPulseResult = evolution(M, ρ0, tlist);
Solving time evolution for auxiliary density operators...
-
Progress :  20%|███▉                |  ETA: 0:00:00 ( 0.51 ms/it)
Progress :  83%|████████████████▌   |  ETA: 0:00:00 ( 0.25 ms/it)
Progress : 100%|████████████████████| Time: 0:00:00 ( 0.24 ms/it)
+
Progress :  32%|██████▍             |  ETA: 0:00:00 ( 0.32 ms/it)
Progress : 100%|████████████████████| Time: 0:00:00 ( 0.22 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
@@ -129,11 +129,11 @@ 

Solving time evolution for auxiliary density operators with time-dependent Hamiltonian... - Progress : 0%| | ETA: 0:18:47 ( 1.13 s/it) Progress : 10%|██ | ETA: 0:00:11 (12.25 ms/it) Progress : 19%|███▉ | ETA: 0:00:06 ( 6.90 ms/it) Progress : 30%|██████ | ETA: 0:00:03 ( 4.83 ms/it) Progress : 42%|████████▍ | ETA: 0:00:02 ( 3.71 ms/it) Progress : 54%|██████████▉ | ETA: 0:00:01 ( 3.05 ms/it) Progress : 67%|█████████████▎ | ETA: 0:00:01 ( 2.70 ms/it) Progress : 79%|███████████████▊ | ETA: 0:00:01 ( 2.41 ms/it) Progress : 91%|██████████████████▏ | ETA: 0:00:00 ( 2.21 ms/it) Progress : 100%|████████████████████| Time: 0:00:02 ( 2.08 ms/it) + Progress : 0%| | ETA: 0:15:36 ( 0.94 s/it) Progress : 20%|████ | ETA: 0:00:04 ( 5.56 ms/it) Progress : 34%|██████▊ | ETA: 0:00:02 ( 3.56 ms/it) Progress : 48%|█████████▌ | ETA: 0:00:01 ( 2.74 ms/it) Progress : 62%|████████████▌ | ETA: 0:00:01 ( 2.25 ms/it) Progress : 77%|███████████████▌ | ETA: 0:00:00 ( 1.95 ms/it) Progress : 93%|██████████████████▋ | ETA: 0:00:00 ( 1.73 ms/it) Progress : 100%|████████████████████| Time: 0:00:01 ( 1.68 ms/it) [DONE] Solving time evolution for auxiliary density operators with time-dependent Hamiltonian... - Progress : 11%|██▎ | ETA: 0:00:01 ( 1.00 ms/it) Progress : 21%|████▎ | ETA: 0:00:01 ( 1.05 ms/it) Progress : 30%|██████ | ETA: 0:00:01 ( 1.09 ms/it) Progress : 39%|███████▊ | ETA: 0:00:01 ( 1.10 ms/it) Progress : 50%|█████████▉ | ETA: 0:00:01 ( 1.07 ms/it) Progress : 60%|████████████ | ETA: 0:00:00 ( 1.08 ms/it) Progress : 69%|█████████████▊ | ETA: 0:00:00 ( 1.11 ms/it) Progress : 77%|███████████████▌ | ETA: 0:00:00 ( 1.12 ms/it) Progress : 88%|█████████████████▌ | ETA: 0:00:00 ( 1.10 ms/it) Progress : 98%|███████████████████▋| ETA: 0:00:00 ( 1.10 ms/it) Progress : 100%|████████████████████| Time: 0:00:01 ( 1.10 ms/it) + Progress : 15%|██▉ | ETA: 0:00:01 ( 0.75 ms/it) Progress : 28%|█████▋ | ETA: 0:00:01 ( 0.81 ms/it) Progress : 40%|████████ | ETA: 0:00:00 ( 0.81 ms/it) Progress : 53%|██████████▋ | ETA: 0:00:00 ( 0.80 ms/it) Progress : 66%|█████████████▎ | ETA: 0:00:00 ( 0.80 ms/it) Progress : 78%|███████████████▋ | ETA: 0:00:00 ( 0.81 ms/it) Progress : 92%|██████████████████▍ | ETA: 0:00:00 ( 0.81 ms/it) Progress : 100%|████████████████████| Time: 0:00:00 ( 0.81 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]
 
@@ -153,42 +153,42 @@ 

- + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - -

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


This page was generated using Literate.jl.

+ + + + + + + + + + + + + + + + + + + + + + +

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/index.html b/dev/examples/electronic_current/index.html index ecb7b0a5..7af43bb3 100644 --- a/dev/examples/electronic_current/index.html +++ b/dev/examples/electronic_current/index.html @@ -50,7 +50,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 :  32%|██████▍             |  ETA: 0:00:00 ( 1.59 ms/it)
Progress :  81%|████████████████▎   |  ETA: 0:00:00 ( 1.24 ms/it)
Progress : 100%|████████████████████| Time: 0:00:00 ( 1.19 ms/it)
+
Progress :  49%|█████████▊          |  ETA: 0:00:00 ( 1.03 ms/it)
Progress : 100%|████████████████████| Time: 0:00:00 ( 0.89 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
@@ -109,43 +109,43 @@
 )
- + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - -

Note that this example can also be found in qutip documentation


This page was generated using Literate.jl.

+ + + + + + + + + + + + + + + + + + + + + + + +

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/index.html b/dev/examples/quick_start/index.html index af027b64..f31a9595 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 8171M CPU @ 2.60GHz +CPU : 2 × Intel(R) Xeon(R) Platinum 8370C CPU @ 2.80GHz Memory : 6.769 GB WORD_SIZE: 64 LIBM : libopenlibm -LLVM : libLLVM-14.0.6 (ORCJIT, skylake-avx512) +LLVM : libLLVM-14.0.6 (ORCJIT, icelake-server) BLAS : libopenblas64_.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.

We demonstrate this tutorial by QuantumOptics:

import QuantumOptics: SpinBasis, sigmaz, sigmax, ⊗, Ket, Bra
 
 basis = SpinBasis(1//2)
@@ -123,48 +123,48 @@
 ylabel!("Population")
- + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + +

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;
@@ -212,42 +212,42 @@ 

Mu ylabel!("Population")

- + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - -

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


This page was generated using Literate.jl.

+ + + + + + + + + + + + + + + + + + + + + + +

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


This page was generated using Literate.jl.

diff --git a/dev/fermionic_bath/index.html b/dev/fermionic_bath/index.html index 9740a772..f0d6d2a5 100644 --- a/dev/fermionic_bath/index.html +++ b/dev/fermionic_bath/index.html @@ -35,4 +35,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/heom_matrix/M_Boson/index.html b/dev/heom_matrix/M_Boson/index.html index 7f01472b..2c4f7777 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 c7b4af4e..84cd0edf 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 82448573..0a198d52 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/intro/index.html b/dev/heom_matrix/intro/index.html index 9851fb64..0a002b8b 100644 --- a/dev/heom_matrix/intro/index.html +++ b/dev/heom_matrix/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/master_eq/index.html b/dev/heom_matrix/master_eq/index.html index 6dc45315..75ccf3e2 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 cab66065..069bae26 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 b8cfbd2a..a526cbc2 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 fee60bfa..56e62f88 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 ( arXiv:2306.07522 ) 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 ( arXiv:2306.07522 ) using the bibtex entry here.

diff --git a/dev/install/index.html b/dev/install/index.html index ceb5f7b3..35669bfa 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.

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.

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 98209116..f95c9c52 100644 --- a/dev/libraryAPI/index.html +++ b/dev/libraryAPI/index.html @@ -1,42 +1,42 @@ -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.

Note that

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

Parameters

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

Returns

  • clist::Vector{ComplexF64} : a list of the value of 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.

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)$
  • "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.

Note that

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

Parameters

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

Returns

  • clist::Vector{ComplexF64} : a list of the value of 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.

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)$
  • "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.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 $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.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 HEOM 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 (right side operator multiplication) for the coupling operator.
  • spost : the super-operator (left side operator multiplication) for the coupling operator.
  • spreD : the super-operator (right side operator multiplication) for the adjoint of the coupling operator.
  • spostD : the super-operator (left 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 (right side operator multiplication) for the coupling operator.
  • spost : the super-operator (left side operator multiplication) for the coupling operator.
  • spreD : the super-operator (right side operator multiplication) for the adjoint of the coupling operator.
  • spostD : the super-operator (left 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

HEOM Liouvillian superoperator matrices

HierarchicalEOM.HeomAPI.M_SType
struct M_S <: AbstractHEOMLSMatrix

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

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

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

Fields

  • data : 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 fermionic system (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::Symbol : the parity label of the fermionic system (only set as :odd for calculating spectrum of fermionic system). Defaults to :even.
  • verbose::Bool : To display verbose output during the process or not. Defaults to true.

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

source
HierarchicalEOM.HeomAPI.M_BosonType
struct M_Boson <: AbstractHEOMLSMatrix

HEOM Liouvillian superoperator matrix for bosonic bath

Fields

  • data : 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 fermionic system (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::Symbol : the parity label of the fermionic system (only set as :odd for calculating spectrum of fermionic system). Defaults to :even.
  • threshold::Real : The threshold of the importance value (see Ref. [1]). Defaults to 0.0.
  • verbose::Bool : To display verbose output and progress bar during the process or not. Defaults to true.

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

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

source
HierarchicalEOM.HeomAPI.M_FermionType
struct M_Fermion <: AbstractHEOMLSMatrix

HEOM Liouvillian superoperator matrix for fermionic bath

Fields

  • data : 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 fermionic system (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::Symbol : the parity label of the fermionic system (only set as :odd for calculating spectrum of fermionic system). Defaults to :even.
  • threshold::Real : The threshold of the importance value (see Ref. [1]). Defaults to 0.0.
  • verbose::Bool : To display verbose output and progress bar during the process or not. Defaults to true.

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

source
HierarchicalEOM.HeomAPI.M_Boson_FermionType
struct M_Boson_Fermion <: AbstractHEOMLSMatrix

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

Fields

  • data : 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 fermionic system (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::Symbol : the parity label of the fermionic system (only set as :odd for calculating spectrum of fermionic system). Defaults to :even.
  • 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
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 HEOM 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 HEOM 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 HEOM 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 HEOM 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 HEOM 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 (right side operator multiplication) for the coupling operator.
  • spost : the super-operator (left side operator multiplication) for the coupling operator.
  • spreD : the super-operator (right side operator multiplication) for the adjoint of the coupling operator.
  • spostD : the super-operator (left 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 (right side operator multiplication) for the coupling operator.
  • spost : the super-operator (left side operator multiplication) for the coupling operator.
  • spreD : the super-operator (right side operator multiplication) for the adjoint of the coupling operator.
  • spostD : the super-operator (left 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

HEOM Liouvillian superoperator matrices

HierarchicalEOM.HeomAPI.M_SType
struct M_S <: AbstractHEOMLSMatrix

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

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

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

Fields

  • data : 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 fermionic system (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::Symbol : the parity label of the fermionic system (only set as :odd for calculating spectrum of fermionic system). Defaults to :even.
  • verbose::Bool : To display verbose output during the process or not. Defaults to true.

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

source
HierarchicalEOM.HeomAPI.M_BosonType
struct M_Boson <: AbstractHEOMLSMatrix

HEOM Liouvillian superoperator matrix for bosonic bath

Fields

  • data : 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 fermionic system (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::Symbol : the parity label of the fermionic system (only set as :odd for calculating spectrum of fermionic system). Defaults to :even.
  • threshold::Real : The threshold of the importance value (see Ref. [1]). Defaults to 0.0.
  • verbose::Bool : To display verbose output and progress bar during the process or not. Defaults to true.

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

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

source
HierarchicalEOM.HeomAPI.M_FermionType
struct M_Fermion <: AbstractHEOMLSMatrix

HEOM Liouvillian superoperator matrix for fermionic bath

Fields

  • data : 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 fermionic system (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::Symbol : the parity label of the fermionic system (only set as :odd for calculating spectrum of fermionic system). Defaults to :even.
  • threshold::Real : The threshold of the importance value (see Ref. [1]). Defaults to 0.0.
  • verbose::Bool : To display verbose output and progress bar during the process or not. Defaults to true.

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

source
HierarchicalEOM.HeomAPI.M_Boson_FermionType
struct M_Boson_Fermion <: AbstractHEOMLSMatrix

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

Fields

  • data : 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 fermionic system (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::Symbol : the parity label of the fermionic system (only set as :odd for calculating spectrum of fermionic system). Defaults to :even.
  • 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
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 HEOM 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 HEOM 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 HEOM 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 HEOM 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::Symbol : 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
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::Symbol : 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
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 
 
@@ -55,7 +55,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 (annihilation) 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 (annihilation) 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()

                                    __
                                   /  \
@@ -88,12 +88,12 @@
 ====================================
 Julia Version: 1.9.3
 OS       : Linux (x86_64-linux-gnu)
-CPU      : 2 × Intel(R) Xeon(R) Platinum 8171M CPU @ 2.60GHz
+CPU      : 2 × Intel(R) Xeon(R) Platinum 8370C CPU @ 2.80GHz
 Memory   : 6.769 GB
 WORD_SIZE: 64
 LIBM     : libopenlibm
-LLVM     : libLLVM-14.0.6 (ORCJIT, skylake-avx512)
-BLAS     : libopenblas64_.so (ilp64)

The output will be something like the following:

using HierarchicalEOM
+LLVM     : libLLVM-14.0.6 (ORCJIT, icelake-server)
+BLAS     : libopenblas64_.so (ilp64)

The output will be something like the following:

using HierarchicalEOM
 HierarchicalEOM.print_logo()
                                   __
                                   /  \
  __     __                     __ \__/ __
@@ -103,4 +103,4 @@
 |   ___   |  |__)  |  /  \  |    _     _   |
 |  |   |  |   ____/| (    ) |   / \   / \  |
 |  |   |  |  |____ |  \__/  |  |   | |   | |
-|__|   |__|\______) \______/|__|   |_|   |_|
+|__| |__|\______) \______/|__| |_| |_| diff --git a/dev/search/index.html b/dev/search/index.html index e2af7fc2..dcc328d7 100644 --- a/dev/search/index.html +++ b/dev/search/index.html @@ -1,2 +1,2 @@ -Search · Documentation | HierarchicalEOM.jl +Search · Documentation | HierarchicalEOM.jl diff --git a/dev/spectrum/index.html b/dev/spectrum/index.html index a445c296..bca22380 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 b701f999..f9fb7bf6 100644 --- a/dev/stationary_state/index.html +++ b/dev/stationary_state/index.html @@ -13,4 +13,4 @@ # the initial state of the ADOs ados::AbstractMatrix -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 a0bf1991..3a9adb3b 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 = ())