diff --git a/docs/dev/index.html b/docs/dev/index.html index a233f7c..a15e892 100644 --- a/docs/dev/index.html +++ b/docs/dev/index.html @@ -1,2 +1,2 @@ <!DOCTYPE html> -<html lang="en"><head><meta charset="UTF-8"/><meta name="viewport" content="width=device-width, initial-scale=1.0"/><title>Developers · MPSDynamics.jl</title><link href="https://fonts.googleapis.com/css?family=Lato|Roboto+Mono" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.0/css/fontawesome.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.0/css/solid.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.0/css/brands.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.11.1/katex.min.css" rel="stylesheet" type="text/css"/><script>documenterBaseURL=".."</script><script src="https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.6/require.min.js" data-main="../assets/documenter.js"></script><script src="../siteinfo.js"></script><script src="../../versions.js"></script><link class="docs-theme-link" rel="stylesheet" type="text/css" href="../assets/themes/documenter-dark.css" data-theme-name="documenter-dark" data-theme-primary-dark/><link class="docs-theme-link" rel="stylesheet" type="text/css" href="../assets/themes/documenter-light.css" data-theme-name="documenter-light" data-theme-primary/><script src="../assets/themeswap.js"></script></head><body><div id="documenter"><nav class="docs-sidebar"><a class="docs-logo" href="../"><img src="../assets/logo.png" alt="MPSDynamics.jl logo"/></a><div class="docs-package-name"><span class="docs-autofit">MPSDynamics.jl</span></div><form class="docs-search" action="../search/"><input class="docs-search-query" id="documenter-search-query" name="q" type="text" placeholder="Search docs"/></form><ul class="docs-menu"><li><a class="tocitem" href="../">Introduction</a></li><li><a class="tocitem" href="../user-guide/">User Guide</a></li><li><a class="tocitem" href="../nutshell/">In a nutshell: MPSDynamics.jl for open quantum systems</a></li><li><span class="tocitem">Examples</span><ul><li><a class="tocitem" href="../examples/sbm/">The Spin-Boson Model</a></li><li><a class="tocitem" href="../examples/puredephasing/">Pure-Dephasing</a></li><li><a class="tocitem" href="../examples/timedep/">Time-dependent Hamiltonian</a></li><li><a class="tocitem" href="../examples/anderson-model/">The Anderson Impurity Model</a></li><li><a class="tocitem" href="../examples/bath-observables/">Inspecting the bath by undoing the chain mapping</a></li><li><a class="tocitem" href="../examples/protontransfer/">Proton Transfer Model</a></li></ul></li><li><a class="tocitem" href="../theory/">Theoretical Background</a></li><li><a class="tocitem" href="../methods/">Methods</a></li><li class="is-active"><a class="tocitem" href>Developers</a><ul class="internal"><li><a class="tocitem" href="#Simulation-Workflow"><span>Simulation Workflow</span></a></li><li><a class="tocitem" href="#How-to-Contribute"><span>How to Contribute</span></a></li></ul></li></ul><div class="docs-version-selector field has-addons"><div class="control"><span class="docs-label button is-static is-size-7">Version</span></div><div class="docs-selector control is-expanded"><div class="select is-fullwidth is-size-7"><select id="documenter-version-selector"></select></div></div></div></nav><div class="docs-main"><header class="docs-navbar"><nav class="breadcrumb"><ul class="is-hidden-mobile"><li class="is-active"><a href>Developers</a></li></ul><ul class="is-hidden-tablet"><li class="is-active"><a href>Developers</a></li></ul></nav><div class="docs-right"><a class="docs-edit-link" href="https://github.com/shareloqs/MPSDynamics/blob/master/docs/src/dev.md" title="Edit on GitHub"><span class="docs-icon fab"></span><span class="docs-label is-hidden-touch">Edit on GitHub</span></a><a class="docs-settings-button fas fa-cog" id="documenter-settings-button" href="#" title="Settings"></a><a class="docs-sidebar-button fa fa-bars is-hidden-desktop" id="documenter-sidebar-button" href="#"></a></div></header><article class="content" id="documenter-page"><h1 id="Developers"><a class="docs-heading-anchor" href="#Developers">Developers</a><a id="Developers-1"></a><a class="docs-heading-anchor-permalink" href="#Developers" title="Permalink"></a></h1><h2 id="Simulation-Workflow"><a class="docs-heading-anchor" href="#Simulation-Workflow">Simulation Workflow</a><a id="Simulation-Workflow-1"></a><a class="docs-heading-anchor-permalink" href="#Simulation-Workflow" title="Permalink"></a></h2><p><img src="../assets/flowchart.png" alt="Flowchart of the simulation workflow"/></p><h2 id="How-to-Contribute"><a class="docs-heading-anchor" href="#How-to-Contribute">How to Contribute</a><a id="How-to-Contribute-1"></a><a class="docs-heading-anchor-permalink" href="#How-to-Contribute" title="Permalink"></a></h2><p>Contributions are welcome! Don't hesitate to contact us if you</p><ul><li>found a bug;</li><li>have a suggestion on how to improve the code and/or documentation;</li><li>would like to get involved in writing code and/or documentation.</li></ul><p>You can contact us by raising an <a href="https://github.com/shareloqs/MPSDynamics/issues">issue on Github</a>, or by writing to one of the developers.</p></article><nav class="docs-footer"><a class="docs-footer-prevpage" href="../methods/">« Methods</a><div class="flexbox-break"></div><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> on <span class="colophon-date" title="Wednesday 12 June 2024 14:11">Wednesday 12 June 2024</span>. Using Julia version 1.7.3.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html> +<html lang="en"><head><meta charset="UTF-8"/><meta name="viewport" content="width=device-width, initial-scale=1.0"/><title>Developers · MPSDynamics.jl</title><link href="https://fonts.googleapis.com/css?family=Lato|Roboto+Mono" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.0/css/fontawesome.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.0/css/solid.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.0/css/brands.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.11.1/katex.min.css" rel="stylesheet" type="text/css"/><script>documenterBaseURL=".."</script><script src="https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.6/require.min.js" data-main="../assets/documenter.js"></script><script src="../siteinfo.js"></script><script src="../../versions.js"></script><link class="docs-theme-link" rel="stylesheet" type="text/css" href="../assets/themes/documenter-dark.css" data-theme-name="documenter-dark" data-theme-primary-dark/><link class="docs-theme-link" rel="stylesheet" type="text/css" href="../assets/themes/documenter-light.css" data-theme-name="documenter-light" data-theme-primary/><script src="../assets/themeswap.js"></script></head><body><div id="documenter"><nav class="docs-sidebar"><a class="docs-logo" href="../"><img src="../assets/logo.png" alt="MPSDynamics.jl logo"/></a><div class="docs-package-name"><span class="docs-autofit">MPSDynamics.jl</span></div><form class="docs-search" action="../search/"><input class="docs-search-query" id="documenter-search-query" name="q" type="text" placeholder="Search docs"/></form><ul class="docs-menu"><li><a class="tocitem" href="../">Introduction</a></li><li><a class="tocitem" href="../user-guide/">User Guide</a></li><li><a class="tocitem" href="../nutshell/">In a nutshell: MPSDynamics.jl for open quantum systems</a></li><li><span class="tocitem">Examples</span><ul><li><a class="tocitem" href="../examples/sbm/">The Spin-Boson Model</a></li><li><a class="tocitem" href="../examples/puredephasing/">Pure-Dephasing</a></li><li><a class="tocitem" href="../examples/timedep/">Time-dependent Hamiltonian</a></li><li><a class="tocitem" href="../examples/anderson-model/">The Anderson Impurity Model</a></li><li><a class="tocitem" href="../examples/bath-observables/">Inspecting the bath by undoing the chain mapping</a></li><li><a class="tocitem" href="../examples/protontransfer/">Proton Transfer Model</a></li></ul></li><li><a class="tocitem" href="../theory/">Theoretical Background</a></li><li><a class="tocitem" href="../methods/">Methods</a></li><li class="is-active"><a class="tocitem" href>Developers</a><ul class="internal"><li><a class="tocitem" href="#Simulation-Workflow"><span>Simulation Workflow</span></a></li><li><a class="tocitem" href="#How-to-Contribute"><span>How to Contribute</span></a></li></ul></li></ul><div class="docs-version-selector field has-addons"><div class="control"><span class="docs-label button is-static is-size-7">Version</span></div><div class="docs-selector control is-expanded"><div class="select is-fullwidth is-size-7"><select id="documenter-version-selector"></select></div></div></div></nav><div class="docs-main"><header class="docs-navbar"><nav class="breadcrumb"><ul class="is-hidden-mobile"><li class="is-active"><a href>Developers</a></li></ul><ul class="is-hidden-tablet"><li class="is-active"><a href>Developers</a></li></ul></nav><div class="docs-right"><a class="docs-edit-link" href="https://github.com/shareloqs/MPSDynamics/blob/master/docs/src/dev.md" title="Edit on GitHub"><span class="docs-icon fab"></span><span class="docs-label is-hidden-touch">Edit on GitHub</span></a><a class="docs-settings-button fas fa-cog" id="documenter-settings-button" href="#" title="Settings"></a><a class="docs-sidebar-button fa fa-bars is-hidden-desktop" id="documenter-sidebar-button" href="#"></a></div></header><article class="content" id="documenter-page"><h1 id="Developers"><a class="docs-heading-anchor" href="#Developers">Developers</a><a id="Developers-1"></a><a class="docs-heading-anchor-permalink" href="#Developers" title="Permalink"></a></h1><h2 id="Simulation-Workflow"><a class="docs-heading-anchor" href="#Simulation-Workflow">Simulation Workflow</a><a id="Simulation-Workflow-1"></a><a class="docs-heading-anchor-permalink" href="#Simulation-Workflow" title="Permalink"></a></h2><p><img src="../assets/flowchart.png" alt="Flowchart of the simulation workflow"/></p><h2 id="How-to-Contribute"><a class="docs-heading-anchor" href="#How-to-Contribute">How to Contribute</a><a id="How-to-Contribute-1"></a><a class="docs-heading-anchor-permalink" href="#How-to-Contribute" title="Permalink"></a></h2><p>Contributions are welcome! Don't hesitate to contact us if you</p><ul><li>found a bug;</li><li>have a suggestion on how to improve the code and/or documentation;</li><li>would like to get involved in writing code and/or documentation.</li></ul><p>You can contact us by raising an <a href="https://github.com/shareloqs/MPSDynamics/issues">issue on Github</a>, or by writing to one of the developers.</p></article><nav class="docs-footer"><a class="docs-footer-prevpage" href="../methods/">« Methods</a><div class="flexbox-break"></div><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> on <span class="colophon-date" title="Monday 17 June 2024 16:15">Monday 17 June 2024</span>. Using Julia version 1.7.3.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html> diff --git a/docs/examples/anderson-model/index.html b/docs/examples/anderson-model/index.html index a2b19eb..564818a 100644 --- a/docs/examples/anderson-model/index.html +++ b/docs/examples/anderson-model/index.html @@ -266,4 +266,4 @@ end # Display the plots -plot(p2, p3, p4, p5, p1, layout = (3, 2), size = (1400, 1200))</code></pre><p>________________</p><h2 id="Bibliography"><a class="docs-heading-anchor" href="#Bibliography">Bibliography</a><a id="Bibliography-1"></a><a class="docs-heading-anchor-permalink" href="#Bibliography" title="Permalink"></a></h2><section class="footnotes is-size-7"><ul><li class="footnote" id="footnote-khon_efficient_2021"><a class="tag is-link" href="#citeref-khon_efficient_2021">khon_efficient_2021</a><blockquote><p>Kohn, L.; Santoro, G. E. Efficient mapping for anderson impurity problems with matrix product states. Phys. Rev. B 2021, 104 (1), 014303. https://doi.org/10.1103/PhysRevB.104.014303.</p></blockquote></li><li class="footnote" id="footnote-devega_thermo_2015"><a class="tag is-link" href="#citeref-devega_thermo_2015">devega_thermo_2015</a><blockquote><p>de Vega, I.; Banuls, M-.C. Thermofield-based chain-mapping approach for open quantum systems. Phys. Rev. A 2015, 92 (5), 052116. https://doi.org/10.1103/PhysRevA.92.052116.</p></blockquote></li><li class="footnote" id="footnote-khon_eff_2022"><a class="tag is-link" href="#citeref-khon_eff_2022">khon_eff_2022</a><blockquote><p>Kohn L.; Santoro G. E. J. Stat. Mech. (2022) 063102 DOI 10.1088/1742-5468/ac729b.</p></blockquote></li></ul></section></article><nav class="docs-footer"><a class="docs-footer-prevpage" href="../timedep/">« Time-dependent Hamiltonian</a><a class="docs-footer-nextpage" href="../bath-observables/">Inspecting the bath by undoing the chain mapping »</a><div class="flexbox-break"></div><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> on <span class="colophon-date" title="Wednesday 12 June 2024 14:11">Wednesday 12 June 2024</span>. Using Julia version 1.7.3.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html> +plot(p2, p3, p4, p5, p1, layout = (3, 2), size = (1400, 1200))</code></pre><p>________________</p><h2 id="Bibliography"><a class="docs-heading-anchor" href="#Bibliography">Bibliography</a><a id="Bibliography-1"></a><a class="docs-heading-anchor-permalink" href="#Bibliography" title="Permalink"></a></h2><section class="footnotes is-size-7"><ul><li class="footnote" id="footnote-khon_efficient_2021"><a class="tag is-link" href="#citeref-khon_efficient_2021">khon_efficient_2021</a><blockquote><p>Kohn, L.; Santoro, G. E. Efficient mapping for anderson impurity problems with matrix product states. Phys. Rev. B 2021, 104 (1), 014303. https://doi.org/10.1103/PhysRevB.104.014303.</p></blockquote></li><li class="footnote" id="footnote-devega_thermo_2015"><a class="tag is-link" href="#citeref-devega_thermo_2015">devega_thermo_2015</a><blockquote><p>de Vega, I.; Banuls, M-.C. Thermofield-based chain-mapping approach for open quantum systems. Phys. Rev. A 2015, 92 (5), 052116. https://doi.org/10.1103/PhysRevA.92.052116.</p></blockquote></li><li class="footnote" id="footnote-khon_eff_2022"><a class="tag is-link" href="#citeref-khon_eff_2022">khon_eff_2022</a><blockquote><p>Kohn L.; Santoro G. E. J. Stat. Mech. (2022) 063102 DOI 10.1088/1742-5468/ac729b.</p></blockquote></li></ul></section></article><nav class="docs-footer"><a class="docs-footer-prevpage" href="../timedep/">« Time-dependent Hamiltonian</a><a class="docs-footer-nextpage" href="../bath-observables/">Inspecting the bath by undoing the chain mapping »</a><div class="flexbox-break"></div><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> on <span class="colophon-date" title="Monday 17 June 2024 16:15">Monday 17 June 2024</span>. Using Julia version 1.7.3.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html> diff --git a/docs/examples/bath-observables/index.html b/docs/examples/bath-observables/index.html index 5025ff5..028f858 100644 --- a/docs/examples/bath-observables/index.html +++ b/docs/examples/bath-observables/index.html @@ -102,4 +102,4 @@ xlabel=L"\omega", ylabel=L"\langle n^b_\omega \rangle", title="Mode occupation in the physical bath") -plot(p1, p2, p3, p4, layout = (2, 2), size = (1400, 1200))</code></pre><p>___________________</p><h2 id="Bibliography"><a class="docs-heading-anchor" href="#Bibliography">Bibliography</a><a id="Bibliography-1"></a><a class="docs-heading-anchor-permalink" href="#Bibliography" title="Permalink"></a></h2><section class="footnotes is-size-7"><ul><li class="footnote" id="footnote-chin_exact_2010"><a class="tag is-link" href="#citeref-chin_exact_2010">chin_exact_2010</a><blockquote><p>Chin, A. W.; Rivas, Á.; Huelga, S. F.; Plenio, M. B. Exact Mapping between System-Reservoir Quantum Models and Semi-Infinite Discrete Chains Using Orthogonal Polynomials. Journal of Mathematical Physics 2010, 51 (9), 092109. https://doi.org/10.1063/1.3490188.</p></blockquote></li><li class="footnote" id="footnote-tamascelli_efficient_2019"><a class="tag is-link" href="#citeref-tamascelli_efficient_2019">tamascelli_efficient_2019</a><blockquote><p>Tamascelli, D.; Smirne, A.; Lim, J.; Huelga, S. F.; Plenio, M. B. Efficient Simulation of Finite-Temperature Open Quantum Systems. Phys. Rev. Lett. 2019, 123 (9), 090402. https://doi.org/10.1103/PhysRevLett.123.090402.</p></blockquote></li><li class="footnote" id="footnote-devega_thermo_2015"><a class="tag is-link" href="#citeref-devega_thermo_2015">devega_thermo_2015</a><blockquote><p>de Vega, I.; Banuls, M-.C. Thermofield-based chain-mapping approach for open quantum systems. Phys. Rev. A 2015, 92 (5), 052116. https://doi.org/10.1103/PhysRevA.92.052116.</p></blockquote></li><li class="footnote" id="footnote-riva_thermal_2023"><a class="tag is-link" href="#citeref-riva_thermal_2023">riva_thermal_2023</a><blockquote><p>Riva, A.; Tamascelli, D.; Dunnett, A. J.; Chin, A. W. Thermal cycle and polaron formation in structured bosonic environments. Phys. Rev. B 2023, 108, 195138, https://doi.org/10.1103/PhysRevB.108.195138.</p></blockquote></li></ul></section></article><nav class="docs-footer"><a class="docs-footer-prevpage" href="../anderson-model/">« The Anderson Impurity Model</a><a class="docs-footer-nextpage" href="../protontransfer/">Proton Transfer Model »</a><div class="flexbox-break"></div><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> on <span class="colophon-date" title="Wednesday 12 June 2024 14:11">Wednesday 12 June 2024</span>. Using Julia version 1.7.3.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html> +plot(p1, p2, p3, p4, layout = (2, 2), size = (1400, 1200))</code></pre><p>___________________</p><h2 id="Bibliography"><a class="docs-heading-anchor" href="#Bibliography">Bibliography</a><a id="Bibliography-1"></a><a class="docs-heading-anchor-permalink" href="#Bibliography" title="Permalink"></a></h2><section class="footnotes is-size-7"><ul><li class="footnote" id="footnote-chin_exact_2010"><a class="tag is-link" href="#citeref-chin_exact_2010">chin_exact_2010</a><blockquote><p>Chin, A. W.; Rivas, Á.; Huelga, S. F.; Plenio, M. B. Exact Mapping between System-Reservoir Quantum Models and Semi-Infinite Discrete Chains Using Orthogonal Polynomials. Journal of Mathematical Physics 2010, 51 (9), 092109. https://doi.org/10.1063/1.3490188.</p></blockquote></li><li class="footnote" id="footnote-tamascelli_efficient_2019"><a class="tag is-link" href="#citeref-tamascelli_efficient_2019">tamascelli_efficient_2019</a><blockquote><p>Tamascelli, D.; Smirne, A.; Lim, J.; Huelga, S. F.; Plenio, M. B. Efficient Simulation of Finite-Temperature Open Quantum Systems. Phys. Rev. Lett. 2019, 123 (9), 090402. https://doi.org/10.1103/PhysRevLett.123.090402.</p></blockquote></li><li class="footnote" id="footnote-devega_thermo_2015"><a class="tag is-link" href="#citeref-devega_thermo_2015">devega_thermo_2015</a><blockquote><p>de Vega, I.; Banuls, M-.C. Thermofield-based chain-mapping approach for open quantum systems. Phys. Rev. A 2015, 92 (5), 052116. https://doi.org/10.1103/PhysRevA.92.052116.</p></blockquote></li><li class="footnote" id="footnote-riva_thermal_2023"><a class="tag is-link" href="#citeref-riva_thermal_2023">riva_thermal_2023</a><blockquote><p>Riva, A.; Tamascelli, D.; Dunnett, A. J.; Chin, A. W. Thermal cycle and polaron formation in structured bosonic environments. Phys. Rev. B 2023, 108, 195138, https://doi.org/10.1103/PhysRevB.108.195138.</p></blockquote></li></ul></section></article><nav class="docs-footer"><a class="docs-footer-prevpage" href="../anderson-model/">« The Anderson Impurity Model</a><a class="docs-footer-nextpage" href="../protontransfer/">Proton Transfer Model »</a><div class="flexbox-break"></div><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> on <span class="colophon-date" title="Monday 17 June 2024 16:15">Monday 17 June 2024</span>. Using Julia version 1.7.3.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html> diff --git a/docs/examples/protontransfer/index.html b/docs/examples/protontransfer/index.html index b756369..78dd6a2 100644 --- a/docs/examples/protontransfer/index.html +++ b/docs/examples/protontransfer/index.html @@ -232,4 +232,4 @@ print("\n k = ", k) (plot(heatmap(xlist_rho, xlist_rho, abs.(ρx[:,:,t]), c=:Blues ), title="Time = $k (arb. units)", xlabel=L"$x$ (arb. units)",ylabel=L"$x$ (arb. units)", tickfontsize=(12),colorbar_title = L"||\rho_{RC}(x,x)||", legend=:none, xlims=(-0.5, 0.5), ylims=(-0.5,0.5), clims=(0,0.18),aspect_ratio=:equal)) end -display(gif(anim, "gif_reducedrho.gif", fps = 2.5))</code></pre><p>________________</p><h2 id="Bibliography"><a class="docs-heading-anchor" href="#Bibliography">Bibliography</a><a id="Bibliography-1"></a><a class="docs-heading-anchor-permalink" href="#Bibliography" title="Permalink"></a></h2><section class="footnotes is-size-7"><ul><li class="footnote" id="footnote-lede_ESIPT_2024"><a class="tag is-link" href="#citeref-lede_ESIPT_2024">lede_ESIPT_2024</a><blockquote><p>Le Dé, B.; Huppert, S.; Spezia, R.; Chin, A.W Extending Non-Perturbative Simulation Techniques for Open-Quantum Systems to Excited-State Proton Transfer and Ultrafast Non-Adiabatic Dynamics https://arxiv.org/abs/2405.08693</p></blockquote></li></ul></section></article><nav class="docs-footer"><a class="docs-footer-prevpage" href="../bath-observables/">« Inspecting the bath by undoing the chain mapping</a><a class="docs-footer-nextpage" href="../../theory/">Theoretical Background »</a><div class="flexbox-break"></div><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> on <span class="colophon-date" title="Wednesday 12 June 2024 14:11">Wednesday 12 June 2024</span>. Using Julia version 1.7.3.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html> +display(gif(anim, "gif_reducedrho.gif", fps = 2.5))</code></pre><p>________________</p><h2 id="Bibliography"><a class="docs-heading-anchor" href="#Bibliography">Bibliography</a><a id="Bibliography-1"></a><a class="docs-heading-anchor-permalink" href="#Bibliography" title="Permalink"></a></h2><section class="footnotes is-size-7"><ul><li class="footnote" id="footnote-lede_ESIPT_2024"><a class="tag is-link" href="#citeref-lede_ESIPT_2024">lede_ESIPT_2024</a><blockquote><p>Le Dé, B.; Huppert, S.; Spezia, R.; Chin, A.W Extending Non-Perturbative Simulation Techniques for Open-Quantum Systems to Excited-State Proton Transfer and Ultrafast Non-Adiabatic Dynamics https://arxiv.org/abs/2405.08693</p></blockquote></li></ul></section></article><nav class="docs-footer"><a class="docs-footer-prevpage" href="../bath-observables/">« Inspecting the bath by undoing the chain mapping</a><a class="docs-footer-nextpage" href="../../theory/">Theoretical Background »</a><div class="flexbox-break"></div><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> on <span class="colophon-date" title="Monday 17 June 2024 16:15">Monday 17 June 2024</span>. Using Julia version 1.7.3.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html> diff --git a/docs/examples/puredephasing/index.html b/docs/examples/puredephasing/index.html index a7d5b56..15efc3e 100644 --- a/docs/examples/puredephasing/index.html +++ b/docs/examples/puredephasing/index.html @@ -91,4 +91,4 @@ plot(time_analytical, t->Decoherence_ohmic(t), label="Analytics", title=L"Pure Dephasing, Ohmic $s=%$s$, $\beta = %$β ~\mathrm{K}$", linecolor=:black, xlabel="Time (arb. units)", ylabel=L"Coherence $|\rho_{12}(t)|$", linewidth=4, titlefontsize=16, legend=:best, legendfontsize=16, xguidefontsize=16, yguidefontsize=16, tickfontsize=10) -plot!(dat["data/times"], ρ12, lw=4, ls=:dash, label="Numerics")</code></pre><h2 id="Bibliography"><a class="docs-heading-anchor" href="#Bibliography">Bibliography</a><a id="Bibliography-1"></a><a class="docs-heading-anchor-permalink" href="#Bibliography" title="Permalink"></a></h2><section class="footnotes is-size-7"><ul><li class="footnote" id="footnote-breuer"><a class="tag is-link" href="#citeref-breuer">breuer</a><blockquote><p>Breuer, H.;Petruccione, F. The Theory of Open Quantum Systems; Oxford University Press, 2002.</p></blockquote></li></ul></section></article><nav class="docs-footer"><a class="docs-footer-prevpage" href="../sbm/">« The Spin-Boson Model</a><a class="docs-footer-nextpage" href="../timedep/">Time-dependent Hamiltonian »</a><div class="flexbox-break"></div><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> on <span class="colophon-date" title="Wednesday 12 June 2024 14:11">Wednesday 12 June 2024</span>. Using Julia version 1.7.3.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html> +plot!(dat["data/times"], ρ12, lw=4, ls=:dash, label="Numerics")</code></pre><h2 id="Bibliography"><a class="docs-heading-anchor" href="#Bibliography">Bibliography</a><a id="Bibliography-1"></a><a class="docs-heading-anchor-permalink" href="#Bibliography" title="Permalink"></a></h2><section class="footnotes is-size-7"><ul><li class="footnote" id="footnote-breuer"><a class="tag is-link" href="#citeref-breuer">breuer</a><blockquote><p>Breuer, H.;Petruccione, F. The Theory of Open Quantum Systems; Oxford University Press, 2002.</p></blockquote></li></ul></section></article><nav class="docs-footer"><a class="docs-footer-prevpage" href="../sbm/">« The Spin-Boson Model</a><a class="docs-footer-nextpage" href="../timedep/">Time-dependent Hamiltonian »</a><div class="flexbox-break"></div><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> on <span class="colophon-date" title="Monday 17 June 2024 16:15">Monday 17 June 2024</span>. Using Julia version 1.7.3.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html> diff --git a/docs/examples/sbm/index.html b/docs/examples/sbm/index.html index 89aa70d..8c7792f 100644 --- a/docs/examples/sbm/index.html +++ b/docs/examples/sbm/index.html @@ -78,4 +78,4 @@ method == :DTDVP && heatmap(dat["data/times"], collect(0:N+1), dat["data/bonddims"], xlabel=L"t",ylabel="bond index") -heatmap(dat["data/times"], collect(1:N), abs.(dat["data/SXdisp"][1,:,:]), xlabel=L"t",ylabel="chain mode")</code></pre></article><nav class="docs-footer"><a class="docs-footer-prevpage" href="../../nutshell/">« In a nutshell: MPSDynamics.jl for open quantum systems</a><a class="docs-footer-nextpage" href="../puredephasing/">Pure-Dephasing »</a><div class="flexbox-break"></div><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> on <span class="colophon-date" title="Wednesday 12 June 2024 14:11">Wednesday 12 June 2024</span>. Using Julia version 1.7.3.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html> +heatmap(dat["data/times"], collect(1:N), abs.(dat["data/SXdisp"][1,:,:]), xlabel=L"t",ylabel="chain mode")</code></pre></article><nav class="docs-footer"><a class="docs-footer-prevpage" href="../../nutshell/">« In a nutshell: MPSDynamics.jl for open quantum systems</a><a class="docs-footer-nextpage" href="../puredephasing/">Pure-Dephasing »</a><div class="flexbox-break"></div><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> on <span class="colophon-date" title="Monday 17 June 2024 16:15">Monday 17 June 2024</span>. Using Julia version 1.7.3.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html> diff --git a/docs/examples/timedep/index.html b/docs/examples/timedep/index.html index 96d0dcc..ab385c0 100644 --- a/docs/examples/timedep/index.html +++ b/docs/examples/timedep/index.html @@ -79,4 +79,4 @@ # Plots #---------- -plot(dat["data/times"], dat["data/sz"], label="Dmax = $(D...)", xlabel=L"t",ylabel=L"\sigma_z", title="")</code></pre></article><nav class="docs-footer"><a class="docs-footer-prevpage" href="../puredephasing/">« Pure-Dephasing</a><a class="docs-footer-nextpage" href="../anderson-model/">The Anderson Impurity Model »</a><div class="flexbox-break"></div><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> on <span class="colophon-date" title="Wednesday 12 June 2024 14:11">Wednesday 12 June 2024</span>. Using Julia version 1.7.3.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html> +plot(dat["data/times"], dat["data/sz"], label="Dmax = $(D...)", xlabel=L"t",ylabel=L"\sigma_z", title="")</code></pre></article><nav class="docs-footer"><a class="docs-footer-prevpage" href="../puredephasing/">« Pure-Dephasing</a><a class="docs-footer-nextpage" href="../anderson-model/">The Anderson Impurity Model »</a><div class="flexbox-break"></div><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> on <span class="colophon-date" title="Monday 17 June 2024 16:15">Monday 17 June 2024</span>. Using Julia version 1.7.3.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html> diff --git a/docs/index.html b/docs/index.html index 71a6e23..893d497 100644 --- a/docs/index.html +++ b/docs/index.html @@ -19,4 +19,4 @@ month = jun, year = {2024}, } -</code></pre></article><nav class="docs-footer"><a class="docs-footer-nextpage" href="user-guide/">User Guide »</a><div class="flexbox-break"></div><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> on <span class="colophon-date" title="Wednesday 12 June 2024 14:11">Wednesday 12 June 2024</span>. Using Julia version 1.7.3.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html> +</code></pre></article><nav class="docs-footer"><a class="docs-footer-nextpage" href="user-guide/">User Guide »</a><div class="flexbox-break"></div><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> on <span class="colophon-date" title="Monday 17 June 2024 16:15">Monday 17 June 2024</span>. Using Julia version 1.7.3.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html> diff --git a/docs/methods/index.html b/docs/methods/index.html index 243f719..879f5a1 100644 --- a/docs/methods/index.html +++ b/docs/methods/index.html @@ -1,5 +1,5 @@ <!DOCTYPE html> -<html lang="en"><head><meta charset="UTF-8"/><meta name="viewport" content="width=device-width, initial-scale=1.0"/><title>Methods · MPSDynamics.jl</title><link href="https://fonts.googleapis.com/css?family=Lato|Roboto+Mono" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.0/css/fontawesome.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.0/css/solid.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.0/css/brands.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.11.1/katex.min.css" rel="stylesheet" type="text/css"/><script>documenterBaseURL=".."</script><script src="https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.6/require.min.js" data-main="../assets/documenter.js"></script><script src="../siteinfo.js"></script><script src="../../versions.js"></script><link class="docs-theme-link" rel="stylesheet" type="text/css" href="../assets/themes/documenter-dark.css" data-theme-name="documenter-dark" data-theme-primary-dark/><link class="docs-theme-link" rel="stylesheet" type="text/css" href="../assets/themes/documenter-light.css" data-theme-name="documenter-light" data-theme-primary/><script src="../assets/themeswap.js"></script></head><body><div id="documenter"><nav class="docs-sidebar"><a class="docs-logo" href="../"><img src="../assets/logo.png" alt="MPSDynamics.jl logo"/></a><div class="docs-package-name"><span class="docs-autofit">MPSDynamics.jl</span></div><form class="docs-search" action="../search/"><input class="docs-search-query" id="documenter-search-query" name="q" type="text" placeholder="Search docs"/></form><ul class="docs-menu"><li><a class="tocitem" href="../">Introduction</a></li><li><a class="tocitem" href="../user-guide/">User Guide</a></li><li><a class="tocitem" href="../nutshell/">In a nutshell: MPSDynamics.jl for open quantum systems</a></li><li><span class="tocitem">Examples</span><ul><li><a class="tocitem" href="../examples/sbm/">The Spin-Boson Model</a></li><li><a class="tocitem" href="../examples/puredephasing/">Pure-Dephasing</a></li><li><a class="tocitem" href="../examples/timedep/">Time-dependent Hamiltonian</a></li><li><a class="tocitem" href="../examples/anderson-model/">The Anderson Impurity Model</a></li><li><a class="tocitem" href="../examples/bath-observables/">Inspecting the bath by undoing the chain mapping</a></li><li><a class="tocitem" href="../examples/protontransfer/">Proton Transfer Model</a></li></ul></li><li><a class="tocitem" href="../theory/">Theoretical Background</a></li><li class="is-active"><a class="tocitem" href>Methods</a><ul class="internal"><li><a class="tocitem" href="#Matrix-Product-State-(MPS)"><span>Matrix Product State (MPS)</span></a></li><li><a class="tocitem" href="#Tree-Tensor-Network-(TTN)"><span>Tree Tensor Network (TTN)</span></a></li><li><a class="tocitem" href="#Measure-and-Obervables"><span>Measure and Obervables</span></a></li><li><a class="tocitem" href="#Models-and-Hamiltonians-(MPO)"><span>Models and Hamiltonians (MPO)</span></a></li><li><a class="tocitem" href="#Chain-Mapping"><span>Chain-Mapping</span></a></li><li><a class="tocitem" href="#Dynamics-propagation-function"><span>Dynamics propagation function</span></a></li><li><a class="tocitem" href="#Advanced"><span>Advanced</span></a></li></ul></li><li><a class="tocitem" href="../dev/">Developers</a></li></ul><div class="docs-version-selector field has-addons"><div class="control"><span class="docs-label button is-static is-size-7">Version</span></div><div class="docs-selector control is-expanded"><div class="select is-fullwidth is-size-7"><select id="documenter-version-selector"></select></div></div></div></nav><div class="docs-main"><header class="docs-navbar"><nav class="breadcrumb"><ul class="is-hidden-mobile"><li class="is-active"><a href>Methods</a></li></ul><ul class="is-hidden-tablet"><li class="is-active"><a href>Methods</a></li></ul></nav><div class="docs-right"><a class="docs-edit-link" href="https://github.com/shareloqs/MPSDynamics/blob/master/docs/src/methods.md" title="Edit on GitHub"><span class="docs-icon fab"></span><span class="docs-label is-hidden-touch">Edit on GitHub</span></a><a class="docs-settings-button fas fa-cog" id="documenter-settings-button" href="#" title="Settings"></a><a class="docs-sidebar-button fa fa-bars is-hidden-desktop" id="documenter-sidebar-button" href="#"></a></div></header><article class="content" id="documenter-page"><h1 id="List-of-all-methods"><a class="docs-heading-anchor" href="#List-of-all-methods">List of all methods</a><a id="List-of-all-methods-1"></a><a class="docs-heading-anchor-permalink" href="#List-of-all-methods" title="Permalink"></a></h1><h2 id="Matrix-Product-State-(MPS)"><a class="docs-heading-anchor" href="#Matrix-Product-State-(MPS)">Matrix Product State (MPS)</a><a id="Matrix-Product-State-(MPS)-1"></a><a class="docs-heading-anchor-permalink" href="#Matrix-Product-State-(MPS)" title="Permalink"></a></h2><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.apply1siteoperator!-Tuple{Any, Any, Int64}" href="#MPSDynamics.apply1siteoperator!-Tuple{Any, Any, Int64}"><code>MPSDynamics.apply1siteoperator!</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">apply1siteoperator!(A, O, sites::Int)</code></pre><p>Apply an operator O on the MPS A. O is acting on only one site ::Int. The resulting MPS A is the MPS modified by the operator O.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/78f952b07039bfc34f43e6afc0237f8367e64697/src/mpsBasics.jl#L534-L539">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.apply1siteoperator!-Tuple{Any, Any, Vector{Int64}}" href="#MPSDynamics.apply1siteoperator!-Tuple{Any, Any, Vector{Int64}}"><code>MPSDynamics.apply1siteoperator!</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">apply1siteoperator!(A, O, sites::Vector{Int})</code></pre><p>Apply an operator O on the MPS A. O is acting on several sites ::Vector{Int}. The resulting MPS A is the MPS modified by the operator O.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/78f952b07039bfc34f43e6afc0237f8367e64697/src/mpsBasics.jl#L521-L526">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.applympo!-Tuple{Any, Any}" href="#MPSDynamics.applympo!-Tuple{Any, Any}"><code>MPSDynamics.applympo!</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">applympo!(A, H)</code></pre><p>Apply an MPO H on the MPS A. H must have the same number of site than A. The resulting MPS A is the MPS modified by the MPO H.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/78f952b07039bfc34f43e6afc0237f8367e64697/src/mpsBasics.jl#L542-L547">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.chainmps-Tuple{Int64, Int64, Int64}" href="#MPSDynamics.chainmps-Tuple{Int64, Int64, Int64}"><code>MPSDynamics.chainmps</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">chainmps(N::Int, site::Int, numex::Int)</code></pre><p>Generate an MPS with <code>numex</code> excitations on <code>site</code></p><p>The returned MPS will have bond-dimensions and physical dimensions <code>numex+1</code></p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/78f952b07039bfc34f43e6afc0237f8367e64697/src/mpsBasics.jl#L221-L228">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.chainmps-Tuple{Int64, Vector{Int64}, Int64}" href="#MPSDynamics.chainmps-Tuple{Int64, Vector{Int64}, Int64}"><code>MPSDynamics.chainmps</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">chainmps(N::Int, sites::Vector{Int}, numex::Int)</code></pre><p>Generate an MPS with <code>numex</code> excitations of an equal super-position over <code>sites</code></p><p>The returned MPS will have bond-dimensions and physical dimensions <code>numex+1</code></p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/78f952b07039bfc34f43e6afc0237f8367e64697/src/mpsBasics.jl#L248-L255">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.displacedchainmps-Tuple{Vector{Any}, Int64, Int64, Any}" href="#MPSDynamics.displacedchainmps-Tuple{Vector{Any}, Int64, Int64, Any}"><code>MPSDynamics.displacedchainmps</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">displacedchainmps(A::Vector{Any}, N::Int, Nm::Int, γ::Any)</code></pre><p>Given a MPS A, return a MPS B where the <code>Nm</code>-long chain is displaced by <code>γ</code> without displacing the <code>N</code>-long system.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/78f952b07039bfc34f43e6afc0237f8367e64697/src/mpsBasics.jl#L724-L728">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.electron2kmps" href="#MPSDynamics.electron2kmps"><code>MPSDynamics.electron2kmps</code></a> — <span class="docstring-category">Function</span></header><section><div><pre><code class="language-julia">electronkmps(N::Int, k::Vector{Int}, spin=:Up, chainparams=[fill(1.0,N), fill(1.0,N-1)])</code></pre><p>Generate an MPS with 2 electrons in k-states <code>k1</code> and <code>k2</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/78f952b07039bfc34f43e6afc0237f8367e64697/src/mpsBasics.jl#L382-L387">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.electronkmps" href="#MPSDynamics.electronkmps"><code>MPSDynamics.electronkmps</code></a> — <span class="docstring-category">Function</span></header><section><div><pre><code class="language-julia">electronkmps(N::Int, k::Int, spin=:Up, chainparams=[fill(1.0,N), fill(1.0,N-1)])</code></pre><p>Generate an MPS for an electron with momentum <code>k</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/78f952b07039bfc34f43e6afc0237f8367e64697/src/mpsBasics.jl#L346-L351">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.elementmpo-Tuple{Any, Vararg{Any}}" href="#MPSDynamics.elementmpo-Tuple{Any, Vararg{Any}}"><code>MPSDynamics.elementmpo</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">elementmpo(M, el...)</code></pre><p>Return the element of the MPO <code>M</code> for the set of physical states <code>el...</code></p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/78f952b07039bfc34f43e6afc0237f8367e64697/src/mpsBasics.jl#L506-L510">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.elementmps-Tuple{Any, Vararg{Any}}" href="#MPSDynamics.elementmps-Tuple{Any, Vararg{Any}}"><code>MPSDynamics.elementmps</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">elementmps(A, el...)</code></pre><p>Return the element of the MPS <code>A</code> for the set of physical states <code>el...</code></p><p><strong>Examples</strong></p><pre><code class="language-julia-repl">julia> A = chainmps(6, [2,4], 1); +<html lang="en"><head><meta charset="UTF-8"/><meta name="viewport" content="width=device-width, initial-scale=1.0"/><title>Methods · MPSDynamics.jl</title><link href="https://fonts.googleapis.com/css?family=Lato|Roboto+Mono" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.0/css/fontawesome.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.0/css/solid.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.0/css/brands.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.11.1/katex.min.css" rel="stylesheet" type="text/css"/><script>documenterBaseURL=".."</script><script src="https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.6/require.min.js" data-main="../assets/documenter.js"></script><script src="../siteinfo.js"></script><script src="../../versions.js"></script><link class="docs-theme-link" rel="stylesheet" type="text/css" href="../assets/themes/documenter-dark.css" data-theme-name="documenter-dark" data-theme-primary-dark/><link class="docs-theme-link" rel="stylesheet" type="text/css" href="../assets/themes/documenter-light.css" data-theme-name="documenter-light" data-theme-primary/><script src="../assets/themeswap.js"></script></head><body><div id="documenter"><nav class="docs-sidebar"><a class="docs-logo" href="../"><img src="../assets/logo.png" alt="MPSDynamics.jl logo"/></a><div class="docs-package-name"><span class="docs-autofit">MPSDynamics.jl</span></div><form class="docs-search" action="../search/"><input class="docs-search-query" id="documenter-search-query" name="q" type="text" placeholder="Search docs"/></form><ul class="docs-menu"><li><a class="tocitem" href="../">Introduction</a></li><li><a class="tocitem" href="../user-guide/">User Guide</a></li><li><a class="tocitem" href="../nutshell/">In a nutshell: MPSDynamics.jl for open quantum systems</a></li><li><span class="tocitem">Examples</span><ul><li><a class="tocitem" href="../examples/sbm/">The Spin-Boson Model</a></li><li><a class="tocitem" href="../examples/puredephasing/">Pure-Dephasing</a></li><li><a class="tocitem" href="../examples/timedep/">Time-dependent Hamiltonian</a></li><li><a class="tocitem" href="../examples/anderson-model/">The Anderson Impurity Model</a></li><li><a class="tocitem" href="../examples/bath-observables/">Inspecting the bath by undoing the chain mapping</a></li><li><a class="tocitem" href="../examples/protontransfer/">Proton Transfer Model</a></li></ul></li><li><a class="tocitem" href="../theory/">Theoretical Background</a></li><li class="is-active"><a class="tocitem" href>Methods</a><ul class="internal"><li><a class="tocitem" href="#Matrix-Product-State-(MPS)"><span>Matrix Product State (MPS)</span></a></li><li><a class="tocitem" href="#Tree-Tensor-Network-(TTN)"><span>Tree Tensor Network (TTN)</span></a></li><li><a class="tocitem" href="#Measure-and-Obervables"><span>Measure and Obervables</span></a></li><li><a class="tocitem" href="#Models-and-Hamiltonians-(MPO)"><span>Models and Hamiltonians (MPO)</span></a></li><li><a class="tocitem" href="#Chain-Mapping"><span>Chain-Mapping</span></a></li><li><a class="tocitem" href="#Dynamics-propagation-function"><span>Dynamics propagation function</span></a></li><li><a class="tocitem" href="#Advanced"><span>Advanced</span></a></li></ul></li><li><a class="tocitem" href="../dev/">Developers</a></li></ul><div class="docs-version-selector field has-addons"><div class="control"><span class="docs-label button is-static is-size-7">Version</span></div><div class="docs-selector control is-expanded"><div class="select is-fullwidth is-size-7"><select id="documenter-version-selector"></select></div></div></div></nav><div class="docs-main"><header class="docs-navbar"><nav class="breadcrumb"><ul class="is-hidden-mobile"><li class="is-active"><a href>Methods</a></li></ul><ul class="is-hidden-tablet"><li class="is-active"><a href>Methods</a></li></ul></nav><div class="docs-right"><a class="docs-edit-link" href="https://github.com/shareloqs/MPSDynamics/blob/master/docs/src/methods.md" title="Edit on GitHub"><span class="docs-icon fab"></span><span class="docs-label is-hidden-touch">Edit on GitHub</span></a><a class="docs-settings-button fas fa-cog" id="documenter-settings-button" href="#" title="Settings"></a><a class="docs-sidebar-button fa fa-bars is-hidden-desktop" id="documenter-sidebar-button" href="#"></a></div></header><article class="content" id="documenter-page"><h1 id="List-of-all-methods"><a class="docs-heading-anchor" href="#List-of-all-methods">List of all methods</a><a id="List-of-all-methods-1"></a><a class="docs-heading-anchor-permalink" href="#List-of-all-methods" title="Permalink"></a></h1><h2 id="Matrix-Product-State-(MPS)"><a class="docs-heading-anchor" href="#Matrix-Product-State-(MPS)">Matrix Product State (MPS)</a><a id="Matrix-Product-State-(MPS)-1"></a><a class="docs-heading-anchor-permalink" href="#Matrix-Product-State-(MPS)" title="Permalink"></a></h2><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.apply1siteoperator!-Tuple{Any, Any, Int64}" href="#MPSDynamics.apply1siteoperator!-Tuple{Any, Any, Int64}"><code>MPSDynamics.apply1siteoperator!</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">apply1siteoperator!(A, O, sites::Int)</code></pre><p>Apply an operator O on the MPS A. O is acting on only one site ::Int. The resulting MPS A is the MPS modified by the operator O.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/2d44f7a84131a18fb07ad6dbe14ac78ec2b9eb42/src/mpsBasics.jl#L534-L539">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.apply1siteoperator!-Tuple{Any, Any, Vector{Int64}}" href="#MPSDynamics.apply1siteoperator!-Tuple{Any, Any, Vector{Int64}}"><code>MPSDynamics.apply1siteoperator!</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">apply1siteoperator!(A, O, sites::Vector{Int})</code></pre><p>Apply an operator O on the MPS A. O is acting on several sites ::Vector{Int}. The resulting MPS A is the MPS modified by the operator O.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/2d44f7a84131a18fb07ad6dbe14ac78ec2b9eb42/src/mpsBasics.jl#L521-L526">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.applympo!-Tuple{Any, Any}" href="#MPSDynamics.applympo!-Tuple{Any, Any}"><code>MPSDynamics.applympo!</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">applympo!(A, H)</code></pre><p>Apply an MPO H on the MPS A. H must have the same number of site than A. The resulting MPS A is the MPS modified by the MPO H.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/2d44f7a84131a18fb07ad6dbe14ac78ec2b9eb42/src/mpsBasics.jl#L542-L547">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.chainmps-Tuple{Int64, Int64, Int64}" href="#MPSDynamics.chainmps-Tuple{Int64, Int64, Int64}"><code>MPSDynamics.chainmps</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">chainmps(N::Int, site::Int, numex::Int)</code></pre><p>Generate an MPS with <code>numex</code> excitations on <code>site</code></p><p>The returned MPS will have bond-dimensions and physical dimensions <code>numex+1</code></p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/2d44f7a84131a18fb07ad6dbe14ac78ec2b9eb42/src/mpsBasics.jl#L221-L228">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.chainmps-Tuple{Int64, Vector{Int64}, Int64}" href="#MPSDynamics.chainmps-Tuple{Int64, Vector{Int64}, Int64}"><code>MPSDynamics.chainmps</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">chainmps(N::Int, sites::Vector{Int}, numex::Int)</code></pre><p>Generate an MPS with <code>numex</code> excitations of an equal super-position over <code>sites</code></p><p>The returned MPS will have bond-dimensions and physical dimensions <code>numex+1</code></p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/2d44f7a84131a18fb07ad6dbe14ac78ec2b9eb42/src/mpsBasics.jl#L248-L255">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.displacedchainmps-Tuple{Vector{Any}, Int64, Int64, Any}" href="#MPSDynamics.displacedchainmps-Tuple{Vector{Any}, Int64, Int64, Any}"><code>MPSDynamics.displacedchainmps</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">displacedchainmps(A::Vector{Any}, N::Int, Nm::Int, γ::Any)</code></pre><p>Given a MPS A, return a MPS B where the <code>Nm</code>-long chain is displaced by <code>γ</code> without displacing the <code>N</code>-long system.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/2d44f7a84131a18fb07ad6dbe14ac78ec2b9eb42/src/mpsBasics.jl#L724-L728">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.electron2kmps" href="#MPSDynamics.electron2kmps"><code>MPSDynamics.electron2kmps</code></a> — <span class="docstring-category">Function</span></header><section><div><pre><code class="language-julia">electronkmps(N::Int, k::Vector{Int}, spin=:Up, chainparams=[fill(1.0,N), fill(1.0,N-1)])</code></pre><p>Generate an MPS with 2 electrons in k-states <code>k1</code> and <code>k2</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/2d44f7a84131a18fb07ad6dbe14ac78ec2b9eb42/src/mpsBasics.jl#L382-L387">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.electronkmps" href="#MPSDynamics.electronkmps"><code>MPSDynamics.electronkmps</code></a> — <span class="docstring-category">Function</span></header><section><div><pre><code class="language-julia">electronkmps(N::Int, k::Int, spin=:Up, chainparams=[fill(1.0,N), fill(1.0,N-1)])</code></pre><p>Generate an MPS for an electron with momentum <code>k</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/2d44f7a84131a18fb07ad6dbe14ac78ec2b9eb42/src/mpsBasics.jl#L346-L351">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.elementmpo-Tuple{Any, Vararg{Any}}" href="#MPSDynamics.elementmpo-Tuple{Any, Vararg{Any}}"><code>MPSDynamics.elementmpo</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">elementmpo(M, el...)</code></pre><p>Return the element of the MPO <code>M</code> for the set of physical states <code>el...</code></p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/2d44f7a84131a18fb07ad6dbe14ac78ec2b9eb42/src/mpsBasics.jl#L506-L510">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.elementmps-Tuple{Any, Vararg{Any}}" href="#MPSDynamics.elementmps-Tuple{Any, Vararg{Any}}"><code>MPSDynamics.elementmps</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">elementmps(A, el...)</code></pre><p>Return the element of the MPS <code>A</code> for the set of physical states <code>el...</code></p><p><strong>Examples</strong></p><pre><code class="language-julia-repl">julia> A = chainmps(6, [2,4], 1); julia> elementmps(A, 1, 2, 1, 1, 1, 1) 0.7071067811865475 @@ -11,28 +11,28 @@ 0.0 julia> elementmps(A, 1, 1, 1, 1, 1, 1) -0.0</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/78f952b07039bfc34f43e6afc0237f8367e64697/src/mpsBasics.jl#L473-L495">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.entanglemententropy-Tuple{Any}" href="#MPSDynamics.entanglemententropy-Tuple{Any}"><code>MPSDynamics.entanglemententropy</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">entanglemententropy(A)</code></pre><p>For a list of tensors <code>A</code> representing a right orthonormalized MPS, compute the entanglement entropy for a bipartite cut for every bond.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/78f952b07039bfc34f43e6afc0237f8367e64697/src/mpsBasics.jl#L422-L428">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.modemps" href="#MPSDynamics.modemps"><code>MPSDynamics.modemps</code></a> — <span class="docstring-category">Function</span></header><section><div><pre><code class="language-julia">modemps(N::Int, k::Vector{Int}, numex::Int, chainparams=[fill(1.0,N), fill(1.0,N-1)])</code></pre><p>Generate an MPS with <code>numex</code> excitations of an equal superposition of modes <code>k</code> of a bosonic tight-binding chain.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/78f952b07039bfc34f43e6afc0237f8367e64697/src/mpsBasics.jl#L313-L318">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.modemps" href="#MPSDynamics.modemps"><code>MPSDynamics.modemps</code></a> — <span class="docstring-category">Function</span></header><section><div><pre><code class="language-julia">modemps(N::Int, k::Int, numex::Int, chainparams=[fill(1.0,N), fill(1.0,N-1)])</code></pre><p>Generate an MPS with <code>numex</code> excitations of mode <code>k</code> of a bosonic tight-binding chain. </p><p><code>chainparams</code> takes the form <code>[e::Vector, t::Vector]</code> where <code>e</code> are the on-site energies and <code>t</code> are the hoppping parameters.</p><p>The returned MPS will have bond-dimensions and physical dimensions <code>numex+1</code></p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/78f952b07039bfc34f43e6afc0237f8367e64697/src/mpsBasics.jl#L276-L286">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.mpsembed!-Tuple{Vector, Int64}" href="#MPSDynamics.mpsembed!-Tuple{Vector, Int64}"><code>MPSDynamics.mpsembed!</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">mpsembed!(A::Vector, Dmax::Int)</code></pre><p>Embed MPS <code>A</code> in manifold of max bond-dimension <code>Dmax</code></p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/78f952b07039bfc34f43e6afc0237f8367e64697/src/mpsBasics.jl#L695-L699">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.mpsleftnorm!" href="#MPSDynamics.mpsleftnorm!"><code>MPSDynamics.mpsleftnorm!</code></a> — <span class="docstring-category">Function</span></header><section><div><pre><code class="language-julia">mpsleftnorm!(A::Vector, jq::Int=length(A))</code></pre><p>Left orthoganalise MPS <code>A</code> up to site <code>jq</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/78f952b07039bfc34f43e6afc0237f8367e64697/src/mpsBasics.jl#L69-L74">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.mpsmixednorm!-Tuple{Vector, Int64}" href="#MPSDynamics.mpsmixednorm!-Tuple{Vector, Int64}"><code>MPSDynamics.mpsmixednorm!</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">mpsmixednorm!(A::Vector, OC::Int)</code></pre><p>Put MPS <code>A</code> into mixed canonical form with orthogonality centre on site <code>OC</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/78f952b07039bfc34f43e6afc0237f8367e64697/src/mpsBasics.jl#L84-L89">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.mpsrightnorm!" href="#MPSDynamics.mpsrightnorm!"><code>MPSDynamics.mpsrightnorm!</code></a> — <span class="docstring-category">Function</span></header><section><div><pre><code class="language-julia">mpsrightnorm!(A::Vector, jq::Int=1)</code></pre><p>Right orthoganalise MPS <code>A</code> up to site <code>jq</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/78f952b07039bfc34f43e6afc0237f8367e64697/src/mpsBasics.jl#L52-L57">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.multiply-Tuple{Vector, Vector}" href="#MPSDynamics.multiply-Tuple{Vector, Vector}"><code>MPSDynamics.multiply</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">multiply(M1::Vector, M2::Vector)</code></pre><p>Calculates M1*M2 where M1 and M2 are MPOs</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/78f952b07039bfc34f43e6afc0237f8367e64697/src/mpsBasics.jl#L676-L681">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.normmps-Tuple{Vector}" href="#MPSDynamics.normmps-Tuple{Vector}"><code>MPSDynamics.normmps</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">normmps(A::Vector; mpsorthog=:None)</code></pre><p>Calculate norm of MPS <code>A</code>.</p><p>Setting <code>mpsorthog</code>=<code>:Right</code>/<code>:Left</code> will calculate the norm assuming right/left canonical form. Setting <code>mpsorthog=OC::Int</code> will cause the norm to be calculated assuming the orthoganility center is on site <code>OC</code>. If mpsorthog is <code>:None</code> the norm will be calculated as an MPS-MPS product.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/78f952b07039bfc34f43e6afc0237f8367e64697/src/mpsBasics.jl#L21-L30">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.orthcentersmps-Tuple{Vector}" href="#MPSDynamics.orthcentersmps-Tuple{Vector}"><code>MPSDynamics.orthcentersmps</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">orthcentersmps(A::Vector)</code></pre><p>Compute the orthoganality centres of MPS <code>A</code>.</p><p>Return value is a list in which each element is the corresponding site tensor of <code>A</code> with the orthogonality centre on that site. Assumes <code>A</code> is right normalised.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/78f952b07039bfc34f43e6afc0237f8367e64697/src/mpsBasics.jl#L1-L9">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.physdims-Tuple{Vector}" href="#MPSDynamics.physdims-Tuple{Vector}"><code>MPSDynamics.physdims</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">physdims(M)</code></pre><p>Return the physical dimensions of an MPS or MPO <code>M</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/78f952b07039bfc34f43e6afc0237f8367e64697/src/mpsBasics.jl#L617-L621">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.productstatemps" href="#MPSDynamics.productstatemps"><code>MPSDynamics.productstatemps</code></a> — <span class="docstring-category">Function</span></header><section><div><pre><code class="language-julia">productstatemps(physdims::Dims, Dmax=1; state=:Vacuum, mpsorthog=:Right)</code></pre><p>Return an MPS representing a product state with local Hilbert space dimensions given by <code>physdims</code>.</p><p>By default all bond-dimensions will be 1 since the state is a product state. However, to embed the product state in a manifold of greater bond-dimension, <code>Dmax</code> can be set accordingly.</p><p>The indvidual states of the MPS sites can be provided by setting <code>state</code> to a list of column vectors. Setting <code>state=:Vacuum</code> will produce an MPS in the vacuum state (where the state of each site is represented by a column vector with a 1 in the first row and zeros elsewhere). Setting <code>state=:FullOccupy</code> will produce an MPS in which each site is fully occupied (ie. a column vector with a 1 in the last row and zeros elsewhere).</p><p>The argument <code>mpsorthog</code> can be used to set the gauge of the resulting MPS.</p><p><strong>Example</strong></p><pre><code class="language-julia-repl">julia> ψ = unitcol(1,2); d = 6; N = 30; α = 0.1; Δ = 0.0; ω0 = 0.2; s = 1 +0.0</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/2d44f7a84131a18fb07ad6dbe14ac78ec2b9eb42/src/mpsBasics.jl#L473-L495">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.entanglemententropy-Tuple{Any}" href="#MPSDynamics.entanglemententropy-Tuple{Any}"><code>MPSDynamics.entanglemententropy</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">entanglemententropy(A)</code></pre><p>For a list of tensors <code>A</code> representing a right orthonormalized MPS, compute the entanglement entropy for a bipartite cut for every bond.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/2d44f7a84131a18fb07ad6dbe14ac78ec2b9eb42/src/mpsBasics.jl#L422-L428">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.modemps" href="#MPSDynamics.modemps"><code>MPSDynamics.modemps</code></a> — <span class="docstring-category">Function</span></header><section><div><pre><code class="language-julia">modemps(N::Int, k::Vector{Int}, numex::Int, chainparams=[fill(1.0,N), fill(1.0,N-1)])</code></pre><p>Generate an MPS with <code>numex</code> excitations of an equal superposition of modes <code>k</code> of a bosonic tight-binding chain.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/2d44f7a84131a18fb07ad6dbe14ac78ec2b9eb42/src/mpsBasics.jl#L313-L318">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.modemps" href="#MPSDynamics.modemps"><code>MPSDynamics.modemps</code></a> — <span class="docstring-category">Function</span></header><section><div><pre><code class="language-julia">modemps(N::Int, k::Int, numex::Int, chainparams=[fill(1.0,N), fill(1.0,N-1)])</code></pre><p>Generate an MPS with <code>numex</code> excitations of mode <code>k</code> of a bosonic tight-binding chain. </p><p><code>chainparams</code> takes the form <code>[e::Vector, t::Vector]</code> where <code>e</code> are the on-site energies and <code>t</code> are the hoppping parameters.</p><p>The returned MPS will have bond-dimensions and physical dimensions <code>numex+1</code></p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/2d44f7a84131a18fb07ad6dbe14ac78ec2b9eb42/src/mpsBasics.jl#L276-L286">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.mpsembed!-Tuple{Vector, Int64}" href="#MPSDynamics.mpsembed!-Tuple{Vector, Int64}"><code>MPSDynamics.mpsembed!</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">mpsembed!(A::Vector, Dmax::Int)</code></pre><p>Embed MPS <code>A</code> in manifold of max bond-dimension <code>Dmax</code></p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/2d44f7a84131a18fb07ad6dbe14ac78ec2b9eb42/src/mpsBasics.jl#L695-L699">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.mpsleftnorm!" href="#MPSDynamics.mpsleftnorm!"><code>MPSDynamics.mpsleftnorm!</code></a> — <span class="docstring-category">Function</span></header><section><div><pre><code class="language-julia">mpsleftnorm!(A::Vector, jq::Int=length(A))</code></pre><p>Left orthoganalise MPS <code>A</code> up to site <code>jq</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/2d44f7a84131a18fb07ad6dbe14ac78ec2b9eb42/src/mpsBasics.jl#L69-L74">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.mpsmixednorm!-Tuple{Vector, Int64}" href="#MPSDynamics.mpsmixednorm!-Tuple{Vector, Int64}"><code>MPSDynamics.mpsmixednorm!</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">mpsmixednorm!(A::Vector, OC::Int)</code></pre><p>Put MPS <code>A</code> into mixed canonical form with orthogonality centre on site <code>OC</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/2d44f7a84131a18fb07ad6dbe14ac78ec2b9eb42/src/mpsBasics.jl#L84-L89">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.mpsrightnorm!" href="#MPSDynamics.mpsrightnorm!"><code>MPSDynamics.mpsrightnorm!</code></a> — <span class="docstring-category">Function</span></header><section><div><pre><code class="language-julia">mpsrightnorm!(A::Vector, jq::Int=1)</code></pre><p>Right orthoganalise MPS <code>A</code> up to site <code>jq</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/2d44f7a84131a18fb07ad6dbe14ac78ec2b9eb42/src/mpsBasics.jl#L52-L57">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.multiply-Tuple{Vector, Vector}" href="#MPSDynamics.multiply-Tuple{Vector, Vector}"><code>MPSDynamics.multiply</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">multiply(M1::Vector, M2::Vector)</code></pre><p>Calculates M1*M2 where M1 and M2 are MPOs</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/2d44f7a84131a18fb07ad6dbe14ac78ec2b9eb42/src/mpsBasics.jl#L676-L681">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.normmps-Tuple{Vector}" href="#MPSDynamics.normmps-Tuple{Vector}"><code>MPSDynamics.normmps</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">normmps(A::Vector; mpsorthog=:None)</code></pre><p>Calculate norm of MPS <code>A</code>.</p><p>Setting <code>mpsorthog</code>=<code>:Right</code>/<code>:Left</code> will calculate the norm assuming right/left canonical form. Setting <code>mpsorthog=OC::Int</code> will cause the norm to be calculated assuming the orthoganility center is on site <code>OC</code>. If mpsorthog is <code>:None</code> the norm will be calculated as an MPS-MPS product.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/2d44f7a84131a18fb07ad6dbe14ac78ec2b9eb42/src/mpsBasics.jl#L21-L30">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.orthcentersmps-Tuple{Vector}" href="#MPSDynamics.orthcentersmps-Tuple{Vector}"><code>MPSDynamics.orthcentersmps</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">orthcentersmps(A::Vector)</code></pre><p>Compute the orthoganality centres of MPS <code>A</code>.</p><p>Return value is a list in which each element is the corresponding site tensor of <code>A</code> with the orthogonality centre on that site. Assumes <code>A</code> is right normalised.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/2d44f7a84131a18fb07ad6dbe14ac78ec2b9eb42/src/mpsBasics.jl#L1-L9">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.physdims-Tuple{Vector}" href="#MPSDynamics.physdims-Tuple{Vector}"><code>MPSDynamics.physdims</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">physdims(M)</code></pre><p>Return the physical dimensions of an MPS or MPO <code>M</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/2d44f7a84131a18fb07ad6dbe14ac78ec2b9eb42/src/mpsBasics.jl#L617-L621">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.productstatemps" href="#MPSDynamics.productstatemps"><code>MPSDynamics.productstatemps</code></a> — <span class="docstring-category">Function</span></header><section><div><pre><code class="language-julia">productstatemps(physdims::Dims, Dmax=1; state=:Vacuum, mpsorthog=:Right)</code></pre><p>Return an MPS representing a product state with local Hilbert space dimensions given by <code>physdims</code>.</p><p>By default all bond-dimensions will be 1 since the state is a product state. However, to embed the product state in a manifold of greater bond-dimension, <code>Dmax</code> can be set accordingly.</p><p>The indvidual states of the MPS sites can be provided by setting <code>state</code> to a list of column vectors. Setting <code>state=:Vacuum</code> will produce an MPS in the vacuum state (where the state of each site is represented by a column vector with a 1 in the first row and zeros elsewhere). Setting <code>state=:FullOccupy</code> will produce an MPS in which each site is fully occupied (ie. a column vector with a 1 in the last row and zeros elsewhere).</p><p>The argument <code>mpsorthog</code> can be used to set the gauge of the resulting MPS.</p><p><strong>Example</strong></p><pre><code class="language-julia-repl">julia> ψ = unitcol(1,2); d = 6; N = 30; α = 0.1; Δ = 0.0; ω0 = 0.2; s = 1 julia> cpars = chaincoeffs_ohmic(N, α, s) julia> H = spinbosonmpo(ω0, Δ, d, N, cpars) -julia> A = productstatemps(physdims(H), state=[ψ, fill(unitcol(1,d), N)...]) # MPS representation of |ψ>|Vacuum></code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/78f952b07039bfc34f43e6afc0237f8367e64697/src/mpsBasics.jl#L134-L161">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.productstatemps" href="#MPSDynamics.productstatemps"><code>MPSDynamics.productstatemps</code></a> — <span class="docstring-category">Function</span></header><section><div><pre><code class="language-julia">productstatemps(N::Int, d::Int, Dmax=1; state=:Vacuum, mpsorthog=:Right)</code></pre><p>Return an <code>N</code>-site MPS with all local Hilbert space dimensions given by <code>d</code>. </p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/78f952b07039bfc34f43e6afc0237f8367e64697/src/mpsBasics.jl#L212-L217">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.randmps" href="#MPSDynamics.randmps"><code>MPSDynamics.randmps</code></a> — <span class="docstring-category">Function</span></header><section><div><pre><code class="language-julia">randmps(N::Int, d::Int, Dmax::Int, T=Float64)</code></pre><p>Construct a random, <code>N</code>-site, right-normalised MPS with all local Hilbert space dimensions given by <code>d</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/78f952b07039bfc34f43e6afc0237f8367e64697/src/mpsBasics.jl#L126-L131">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.randmps-Union{Tuple{N}, Tuple{Tuple{Vararg{Int64, N}}, Int64}, Tuple{Tuple{Vararg{Int64, N}}, Int64, Type{<:Number}}} where N" href="#MPSDynamics.randmps-Union{Tuple{N}, Tuple{Tuple{Vararg{Int64, N}}, Int64}, Tuple{Tuple{Vararg{Int64, N}}, Int64, Type{<:Number}}} where N"><code>MPSDynamics.randmps</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">randmps(physdims::Dims{N}, Dmax::Int, T::Type{<:Number} = Float64) where {N}</code></pre><p>Construct a random, right-normalised MPS with local Hilbert space dimensions given by <code>physdims</code> and max bond-dimension given by <code>Dmax</code>. </p><p><code>T</code> specifies the element type, eg. use <code>T=ComplexF64</code> for a complex valued MPS.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/78f952b07039bfc34f43e6afc0237f8367e64697/src/mpsBasics.jl#L95-L103">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.reversempo!-Tuple{Any}" href="#MPSDynamics.reversempo!-Tuple{Any}"><code>MPSDynamics.reversempo!</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">reversempo!(M)</code></pre><p>Reverse the left and right dimensions of the MPO M. The resulting MPO M is the reversed MPO.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/78f952b07039bfc34f43e6afc0237f8367e64697/src/mpsBasics.jl#L588-L593">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.reversempo-Tuple{Any}" href="#MPSDynamics.reversempo-Tuple{Any}"><code>MPSDynamics.reversempo</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">reversempo(M)</code></pre><p>Reverse the left and right dimensions of the MPO M.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/78f952b07039bfc34f43e6afc0237f8367e64697/src/mpsBasics.jl#L602-L607">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.reversemps!-Tuple{Any}" href="#MPSDynamics.reversemps!-Tuple{Any}"><code>MPSDynamics.reversemps!</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">reversemps!(A)</code></pre><p>Reverse the left and right dimensions of the MPS A. The resulting MPS A is the reversed MPS.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/78f952b07039bfc34f43e6afc0237f8367e64697/src/mpsBasics.jl#L559-L564">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.reversemps-Tuple{Any}" href="#MPSDynamics.reversemps-Tuple{Any}"><code>MPSDynamics.reversemps</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">reversemps(A)</code></pre><p>Reverse the left and right bond-dimensions of the MPS A.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/78f952b07039bfc34f43e6afc0237f8367e64697/src/mpsBasics.jl#L573-L578">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.svdmps-Tuple{Any}" href="#MPSDynamics.svdmps-Tuple{Any}"><code>MPSDynamics.svdmps</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">svdmps(A)</code></pre><p>For a right normalised mps <code>A</code> compute the full svd spectrum for a bipartition at every bond.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/78f952b07039bfc34f43e6afc0237f8367e64697/src/mpsBasics.jl#L451-L455">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="Base.reshape-Tuple{Number, Vararg{Any}}" href="#Base.reshape-Tuple{Number, Vararg{Any}}"><code>Base.reshape</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">Base.reshape(x::Number, dims...)</code></pre><p>Reshape any matrix with dimensions "dims"</p><p><strong>Example</strong></p><pre><code class="language-julia-repl">julia> A = rand(2,3,2) +julia> A = productstatemps(physdims(H), state=[ψ, fill(unitcol(1,d), N)...]) # MPS representation of |ψ>|Vacuum></code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/2d44f7a84131a18fb07ad6dbe14ac78ec2b9eb42/src/mpsBasics.jl#L134-L161">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.productstatemps" href="#MPSDynamics.productstatemps"><code>MPSDynamics.productstatemps</code></a> — <span class="docstring-category">Function</span></header><section><div><pre><code class="language-julia">productstatemps(N::Int, d::Int, Dmax=1; state=:Vacuum, mpsorthog=:Right)</code></pre><p>Return an <code>N</code>-site MPS with all local Hilbert space dimensions given by <code>d</code>. </p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/2d44f7a84131a18fb07ad6dbe14ac78ec2b9eb42/src/mpsBasics.jl#L212-L217">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.randmps" href="#MPSDynamics.randmps"><code>MPSDynamics.randmps</code></a> — <span class="docstring-category">Function</span></header><section><div><pre><code class="language-julia">randmps(N::Int, d::Int, Dmax::Int, T=Float64)</code></pre><p>Construct a random, <code>N</code>-site, right-normalised MPS with all local Hilbert space dimensions given by <code>d</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/2d44f7a84131a18fb07ad6dbe14ac78ec2b9eb42/src/mpsBasics.jl#L126-L131">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.randmps-Union{Tuple{N}, Tuple{Tuple{Vararg{Int64, N}}, Int64}, Tuple{Tuple{Vararg{Int64, N}}, Int64, Type{<:Number}}} where N" href="#MPSDynamics.randmps-Union{Tuple{N}, Tuple{Tuple{Vararg{Int64, N}}, Int64}, Tuple{Tuple{Vararg{Int64, N}}, Int64, Type{<:Number}}} where N"><code>MPSDynamics.randmps</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">randmps(physdims::Dims{N}, Dmax::Int, T::Type{<:Number} = Float64) where {N}</code></pre><p>Construct a random, right-normalised MPS with local Hilbert space dimensions given by <code>physdims</code> and max bond-dimension given by <code>Dmax</code>. </p><p><code>T</code> specifies the element type, eg. use <code>T=ComplexF64</code> for a complex valued MPS.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/2d44f7a84131a18fb07ad6dbe14ac78ec2b9eb42/src/mpsBasics.jl#L95-L103">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.reversempo!-Tuple{Any}" href="#MPSDynamics.reversempo!-Tuple{Any}"><code>MPSDynamics.reversempo!</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">reversempo!(M)</code></pre><p>Reverse the left and right dimensions of the MPO M. The resulting MPO M is the reversed MPO.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/2d44f7a84131a18fb07ad6dbe14ac78ec2b9eb42/src/mpsBasics.jl#L588-L593">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.reversempo-Tuple{Any}" href="#MPSDynamics.reversempo-Tuple{Any}"><code>MPSDynamics.reversempo</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">reversempo(M)</code></pre><p>Reverse the left and right dimensions of the MPO M.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/2d44f7a84131a18fb07ad6dbe14ac78ec2b9eb42/src/mpsBasics.jl#L602-L607">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.reversemps!-Tuple{Any}" href="#MPSDynamics.reversemps!-Tuple{Any}"><code>MPSDynamics.reversemps!</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">reversemps!(A)</code></pre><p>Reverse the left and right dimensions of the MPS A. The resulting MPS A is the reversed MPS.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/2d44f7a84131a18fb07ad6dbe14ac78ec2b9eb42/src/mpsBasics.jl#L559-L564">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.reversemps-Tuple{Any}" href="#MPSDynamics.reversemps-Tuple{Any}"><code>MPSDynamics.reversemps</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">reversemps(A)</code></pre><p>Reverse the left and right bond-dimensions of the MPS A.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/2d44f7a84131a18fb07ad6dbe14ac78ec2b9eb42/src/mpsBasics.jl#L573-L578">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.svdmps-Tuple{Any}" href="#MPSDynamics.svdmps-Tuple{Any}"><code>MPSDynamics.svdmps</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">svdmps(A)</code></pre><p>For a right normalised mps <code>A</code> compute the full svd spectrum for a bipartition at every bond.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/2d44f7a84131a18fb07ad6dbe14ac78ec2b9eb42/src/mpsBasics.jl#L451-L455">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="Base.reshape-Tuple{Number, Vararg{Any}}" href="#Base.reshape-Tuple{Number, Vararg{Any}}"><code>Base.reshape</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">Base.reshape(x::Number, dims...)</code></pre><p>Reshape any matrix with dimensions "dims"</p><p><strong>Example</strong></p><pre><code class="language-julia-repl">julia> A = rand(2,3,2) julia> B = reshape(A,4,3) julia> size(B) == (4,3) -</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/78f952b07039bfc34f43e6afc0237f8367e64697/src/reshape.jl#L1-L16">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.svdtrunc-Tuple{Any}" href="#MPSDynamics.svdtrunc-Tuple{Any}"><code>MPSDynamics.svdtrunc</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">U, S, Vd = svdtrunc(A; truncdim = max(size(A)...), truncerr = 0.)</code></pre><p>Perform a truncated SVD, with maximum number of singular values to keep equal to <code>truncdim</code> or truncating any singular values smaller than <code>truncerr</code>. If both options are provided, the smallest number of singular values will be kept. Unlike the SVD in Julia, this returns matrix U, a diagonal matrix (not a vector) S, and Vt such that A ≈ U * S * Vt</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/78f952b07039bfc34f43e6afc0237f8367e64697/src/tensorOps.jl#L594-L601">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.MPOtoVector-Tuple{ITensors.MPO}" href="#MPSDynamics.MPOtoVector-Tuple{ITensors.MPO}"><code>MPSDynamics.MPOtoVector</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">MPOtoVector(mpo::MPO)</code></pre><p>Convert an ITensors chain MPO into a form compatible with MPSDynamics</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/78f952b07039bfc34f43e6afc0237f8367e64697/src/fundamentals.jl#L547-L552">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.chainprop-Tuple{Any, Any}" href="#MPSDynamics.chainprop-Tuple{Any, Any}"><code>MPSDynamics.chainprop</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">chainprop(t, cparams)</code></pre><p>Propagate an excitation placed initially on the first site of a tight-binding chain with parameters given by cparams for a time t and return occupation expectation for each site.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/78f952b07039bfc34f43e6afc0237f8367e64697/src/fundamentals.jl#L371-L376">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.cosineh-Tuple{Any, Any}" href="#MPSDynamics.cosineh-Tuple{Any, Any}"><code>MPSDynamics.cosineh</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">cosineh(omega, bet)</code></pre><p>Calculates the hyperbolic cosine function function based on the input parameters, for the Bogoliubov transformation necessary for the thermofield transformation.</p><p><strong>Arguments</strong></p><ul><li><code>omega::Float64</code>: The frequency parameter.</li><li><code>bet::Float64</code>: The beta parameter.</li></ul><p><strong>Returns</strong></p><ul><li><code>Float64</code>: The result of the modified cosine function.</li></ul></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/78f952b07039bfc34f43e6afc0237f8367e64697/src/fundamentals.jl#L258-L270">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.disp-Tuple{Any, Any, Any}" href="#MPSDynamics.disp-Tuple{Any, Any, Any}"><code>MPSDynamics.disp</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">disp(d,ωvib,m)</code></pre><p>Displacement operator <span>$X = \frac{\sqrt{2}}{2\sqrt{m \omega_{vib}}}(a + a^{\dagger})$</span></p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/78f952b07039bfc34f43e6afc0237f8367e64697/src/fundamentals.jl#L16-L23">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.disp-Tuple{Any}" href="#MPSDynamics.disp-Tuple{Any}"><code>MPSDynamics.disp</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">disp(d)</code></pre><p>Mass and frequency-weighted displacement operator <span>$X = \frac{1}{2}(a + a^{\dagger})$</span></p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/78f952b07039bfc34f43e6afc0237f8367e64697/src/fundamentals.jl#L6-L14">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.dynamap-NTuple{4, Any}" href="#MPSDynamics.dynamap-NTuple{4, Any}"><code>MPSDynamics.dynamap</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">dynamap(ps1,ps2,ps3,ps4)</code></pre><p>Calculate complete dynamical map to time step at which ps1, ps2, ps3 and ps4 are specified.</p><p><strong>Arguments</strong></p><ul><li><code>ps1</code> : time evolved system density matrix starting from initial state up</li><li><code>ps2</code> : time evolved system density matrix starting from initial state down</li><li><code>ps3</code> : time evolved system density matrix starting from initial state (up + down)/sqrt(2)</li><li><code>ps4</code> : time evolved system density matrix starting from initial state (up - i*down)/sqrt(2)</li></ul></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/78f952b07039bfc34f43e6afc0237f8367e64697/src/fundamentals.jl#L440-L450">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.eigenchain-Tuple{Any}" href="#MPSDynamics.eigenchain-Tuple{Any}"><code>MPSDynamics.eigenchain</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">eigenchain(cparams; nummodes=nothing)</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/78f952b07039bfc34f43e6afc0237f8367e64697/src/fundamentals.jl#L141-L144">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.endsiteocc-Tuple{Any, Any}" href="#MPSDynamics.endsiteocc-Tuple{Any, Any}"><code>MPSDynamics.endsiteocc</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">endsiteocc(t, cparams)</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/78f952b07039bfc34f43e6afc0237f8367e64697/src/fundamentals.jl#L388-L392">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.entropy-Tuple{Any}" href="#MPSDynamics.entropy-Tuple{Any}"><code>MPSDynamics.entropy</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">entropy(rho)</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/78f952b07039bfc34f43e6afc0237f8367e64697/src/fundamentals.jl#L492-L496">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.findchainlength-Tuple{Any, Any}" href="#MPSDynamics.findchainlength-Tuple{Any, Any}"><code>MPSDynamics.findchainlength</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">findchainlength(T, cparams; eps=10^-6, verbose=false)</code></pre><p>Estimate length of chain required for a particular set of chain parameters by calculating how long an excitation on the first site takes to reach the end. The chain length is given as the length required for the excitation to have just reached the last site after time T. The initial number of sites in cparams has to be larger than the findchainlength result.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/78f952b07039bfc34f43e6afc0237f8367e64697/src/fundamentals.jl#L341-L348">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.measurecorrs-Tuple{Any, Vector, Vector}" href="#MPSDynamics.measurecorrs-Tuple{Any, Vector, Vector}"><code>MPSDynamics.measurecorrs</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">measurecorrs(oper, , e::Vector, t::Vector)</code></pre><p><strong>Parameters</strong></p><p><code>oper</code>: Square matrix (Matrix{Float64}) representing the operator to be transformed. <code>e</code>: Vector (Vector{Float64}) of diagonal (on-site energy) chain coefficients. <code>t</code>: Vector (Vector{Float64}) of off-diagonal (hopping terms) chain coefficients.</p><p><strong>Returns</strong></p><p>Matrix{Float64}: This matrix is the operator <code>oper</code> transformed back from the chain representation to the representation corresponding to the extended bath. The resulting operator represents quantities like mode occupations or other properties in the basis of environmental modes associated with specific frequencies <span>$\omega_i$</span>.</p><p><strong>Description</strong></p><p>This function performs a basis transformation of the operator <code>oper</code>. Specifically, this transformation reverses the unitary transformation that maps the extended bath Hamiltonian into the chain representation. </p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/78f952b07039bfc34f43e6afc0237f8367e64697/src/fundamentals.jl#L226-L248">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.measuremodes" href="#MPSDynamics.measuremodes"><code>MPSDynamics.measuremodes</code></a> — <span class="docstring-category">Function</span></header><section><div><pre><code class="language-julia">measuremodes(adaga, e=1.0, t=1.0)</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/78f952b07039bfc34f43e6afc0237f8367e64697/src/fundamentals.jl#L200-L204">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.measuremodes-Tuple{Any, Tuple{Int64, Int64}, AbstractArray}" href="#MPSDynamics.measuremodes-Tuple{Any, Tuple{Int64, Int64}, AbstractArray}"><code>MPSDynamics.measuremodes</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">measuremodes(A, chainsection::Tuple{Int64,Int64}, U::AbstractArray)</code></pre><p>for longer chains it can be worth calculating U in advance</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/78f952b07039bfc34f43e6afc0237f8367e64697/src/fundamentals.jl#L186-L192">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.measuremodes-Tuple{Any, Tuple{Int64, Int64}, Vector{Float64}, Vector{Float64}}" href="#MPSDynamics.measuremodes-Tuple{Any, Tuple{Int64, Int64}, Vector{Float64}, Vector{Float64}}"><code>MPSDynamics.measuremodes</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">measuremodes(A, chainsection::Tuple{Int64,Int64}, e::Array{Float64,1}, t::Array{Float64,1})</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/78f952b07039bfc34f43e6afc0237f8367e64697/src/fundamentals.jl#L169-L172">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.measuremodes-Tuple{Any, Vector, Vector}" href="#MPSDynamics.measuremodes-Tuple{Any, Vector, Vector}"><code>MPSDynamics.measuremodes</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">measuremodes(adaga, e::Vector, t::Vector)</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/78f952b07039bfc34f43e6afc0237f8367e64697/src/fundamentals.jl#L213-L217">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.physical_occup-NTuple{6, Any}" href="#MPSDynamics.physical_occup-NTuple{6, Any}"><code>MPSDynamics.physical_occup</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">physical_occup(corr_constr, corr_destr, omega, occup, b, M)</code></pre><p>Calculates the physical occupation based on correlation matrices, omega values, and other parameters. The physical occupation in the original frequency environment is computed by reverting the thermofield transformation.</p><p><strong>Arguments</strong></p><ul><li><code>corr_constr::Matrix{ComplexF64}</code>: The correlation construction matrix.</li><li><code>corr_destr::Matrix{ComplexF64}</code>: The correlation destruction matrix.</li><li><code>omega::Vector{Float64}</code>: The omega values.</li><li><code>occup::Matrix{Float64}</code>: The occupation matrix.</li><li><code>b::Float64</code>: The beta parameter.</li><li><code>M::Int</code>: The number of points for interpolation.</li></ul><p><strong>Returns</strong></p><ul><li><code>Vector{Float64}</code>: The physical occupation values.</li></ul></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/78f952b07039bfc34f43e6afc0237f8367e64697/src/fundamentals.jl#L292-L309">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.randisometry-Tuple{Type, Int64, Int64}" href="#MPSDynamics.randisometry-Tuple{Type, Int64, Int64}"><code>MPSDynamics.randisometry</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">randisometry([T=Float64], dims...)</code></pre><p>Construct a random isometry</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/78f952b07039bfc34f43e6afc0237f8367e64697/src/fundamentals.jl#L511-L515">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.rmsd-Tuple{Any, Any}" href="#MPSDynamics.rmsd-Tuple{Any, Any}"><code>MPSDynamics.rmsd</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">rmsd(ob1, ob2)</code></pre><p>Calculate the root mean squared difference between two measurements of an observable over the same time period.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/78f952b07039bfc34f43e6afc0237f8367e64697/src/fundamentals.jl#L426-L431">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.sineh-Tuple{Any, Any}" href="#MPSDynamics.sineh-Tuple{Any, Any}"><code>MPSDynamics.sineh</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">sineh(omega, bet)</code></pre><p>Calculates the hyperbolic sine function function based on the input parameters, for the Bogoliubov transformation necessary for the thermofield transformation.</p><p><strong>Arguments</strong></p><ul><li><code>omega::Float64</code>: The frequency parameter.</li><li><code>bet::Float64</code>: The beta parameter.</li></ul><p><strong>Returns</strong></p><ul><li><code>Float64</code>: The result of the modified cosine function.</li></ul></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/78f952b07039bfc34f43e6afc0237f8367e64697/src/fundamentals.jl#L275-L287">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.therHam-Tuple{Any, Any, Any}" href="#MPSDynamics.therHam-Tuple{Any, Any, Any}"><code>MPSDynamics.therHam</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia"> therHam(psi, site1, site2)</code></pre><p>Calculates Hβ such that ρ = e^(-βH) for some density matrix ρ obatined from tracing out everything outside the range [site1,site2] in the MPS psi</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/78f952b07039bfc34f43e6afc0237f8367e64697/src/fundamentals.jl#L94-L98">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.thermaloccupations-Tuple{Any, Vararg{Any}}" href="#MPSDynamics.thermaloccupations-Tuple{Any, Vararg{Any}}"><code>MPSDynamics.thermaloccupations</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">thermaloccupations(β, cparams...)</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/78f952b07039bfc34f43e6afc0237f8367e64697/src/fundamentals.jl#L155-L158">source</a></section></article><h2 id="Tree-Tensor-Network-(TTN)"><a class="docs-heading-anchor" href="#Tree-Tensor-Network-(TTN)">Tree Tensor Network (TTN)</a><a id="Tree-Tensor-Network-(TTN)-1"></a><a class="docs-heading-anchor-permalink" href="#Tree-Tensor-Network-(TTN)" title="Permalink"></a></h2><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.addchild!-Tuple{MPSDynamics.Tree, Int64}" href="#MPSDynamics.addchild!-Tuple{MPSDynamics.Tree, Int64}"><code>MPSDynamics.addchild!</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">addchild!(tree::Tree, id::Int)</code></pre><p>Add child to node <code>id</code> of <code>tree</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/78f952b07039bfc34f43e6afc0237f8367e64697/src/treeBasics.jl#L40-L45">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.addchildren!-Tuple{MPSDynamics.Tree, Int64, Int64}" href="#MPSDynamics.addchildren!-Tuple{MPSDynamics.Tree, Int64, Int64}"><code>MPSDynamics.addchildren!</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">addchildren!(tree::Tree, id::Int, n::Int)</code></pre><p>Add <code>n</code> children to node <code>id</code> of <code>tree</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/78f952b07039bfc34f43e6afc0237f8367e64697/src/treeBasics.jl#L54-L59">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.findchild-Tuple{MPSDynamics.TreeNode, Int64}" href="#MPSDynamics.findchild-Tuple{MPSDynamics.TreeNode, Int64}"><code>MPSDynamics.findchild</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">findchild(node::TreeNode, id::Int)</code></pre><p>Return integer corresponding to the which number child site <code>id</code> is of <code>node</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/78f952b07039bfc34f43e6afc0237f8367e64697/src/treeBasics.jl#L222-L227">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.randtree-Tuple{Int64, Int64}" href="#MPSDynamics.randtree-Tuple{Int64, Int64}"><code>MPSDynamics.randtree</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">randtree(numnodes::Int, maxdegree::Int)</code></pre><p>Construct a random tree with <code>nummodes</code> modes and max degree <code>maxdegree</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/78f952b07039bfc34f43e6afc0237f8367e64697/src/treeBasics.jl#L353-L358">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.measure1siteoperator-Tuple{MPSDynamics.TreeNetwork, Any, Int64}" href="#MPSDynamics.measure1siteoperator-Tuple{MPSDynamics.TreeNetwork, Any, Int64}"><code>MPSDynamics.measure1siteoperator</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">measure1siteoperator(net::TreeNetwork, O, id::Int)</code></pre><p>For a Tree, compute the local expectation value of a one-site operator O for site id.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/78f952b07039bfc34f43e6afc0237f8367e64697/src/treeMeasure.jl#L1-L6">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.measure1siteoperator-Tuple{MPSDynamics.TreeNetwork, Any, Tuple{Int64, Int64}}" href="#MPSDynamics.measure1siteoperator-Tuple{MPSDynamics.TreeNetwork, Any, Tuple{Int64, Int64}}"><code>MPSDynamics.measure1siteoperator</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">measure1siteoperator(net::TreeNetwork, O, sites::Tuple{Int,Int})</code></pre><p>For a Tree, compute the local expectation value of a one-site operator O for the specified site range.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/78f952b07039bfc34f43e6afc0237f8367e64697/src/treeMeasure.jl#L18-L23">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.measure2siteoperator-Tuple{MPSDynamics.TreeNetwork, Any, Any, Tuple{Int64, Int64}}" href="#MPSDynamics.measure2siteoperator-Tuple{MPSDynamics.TreeNetwork, Any, Any, Tuple{Int64, Int64}}"><code>MPSDynamics.measure2siteoperator</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">measure2siteoperator(net::TreeNetwork, O1, O2, sites::Tuple{Int,Int})</code></pre><p>For a Tree, compute the local expectation value of two one-site operators O1 and O2 for the specified site range.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/78f952b07039bfc34f43e6afc0237f8367e64697/src/treeMeasure.jl#L60-L65">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.bonddims-Tuple{MPSDynamics.TreeNetwork}" href="#MPSDynamics.bonddims-Tuple{MPSDynamics.TreeNetwork}"><code>MPSDynamics.bonddims</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">bonddims(A::TreeNetwork)</code></pre><p>Return the bon-dimension of a tree-MPS <code>A</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/78f952b07039bfc34f43e6afc0237f8367e64697/src/treeTDVP.jl#L638-L643">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.mpsembed!-Tuple{MPSDynamics.TreeNetwork, Int64}" href="#MPSDynamics.mpsembed!-Tuple{MPSDynamics.TreeNetwork, Int64}"><code>MPSDynamics.mpsembed!</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">mpsembed(A::TreeNetwork, Dmax::Int)</code></pre><p>Embed tree-MPS <code>A</code> in manifold of max bond-dimension <code>Dmax</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/78f952b07039bfc34f43e6afc0237f8367e64697/src/treeTDVP.jl#L607-L612">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.mpsmixednorm!-Tuple{MPSDynamics.TreeNetwork, Int64}" href="#MPSDynamics.mpsmixednorm!-Tuple{MPSDynamics.TreeNetwork, Int64}"><code>MPSDynamics.mpsmixednorm!</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">mpsmixednorm!(A::TreeNetwork, id::Int)</code></pre><p>Normalise tree-MPS <code>A</code> such that orthogonality centre is on site <code>id</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/78f952b07039bfc34f43e6afc0237f8367e64697/src/treeTDVP.jl#L66-L71">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.mpsmoveoc!-Tuple{MPSDynamics.TreeNetwork, Int64}" href="#MPSDynamics.mpsmoveoc!-Tuple{MPSDynamics.TreeNetwork, Int64}"><code>MPSDynamics.mpsmoveoc!</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">mpsmoveoc!(A::TreeNetwork, id::Int)</code></pre><p>Move the orthogonality centre of right normalised tree-MPS <code>A</code> to site <code>id</code>.</p><p>This function will be more efficient than using <code>mpsmixednorm!</code> if the tree-MPS is already right-normalised.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/78f952b07039bfc34f43e6afc0237f8367e64697/src/treeTDVP.jl#L78-L85">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.mpsrightnorm!-Tuple{MPSDynamics.TreeNetwork}" href="#MPSDynamics.mpsrightnorm!-Tuple{MPSDynamics.TreeNetwork}"><code>MPSDynamics.mpsrightnorm!</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">mpsrightnorm!(A::TreeNetwork)</code></pre><p>When applied to a tree-MPS, right normalise towards head-node.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/78f952b07039bfc34f43e6afc0237f8367e64697/src/treeTDVP.jl#L58-L63">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.mpsshiftoc!-Tuple{MPSDynamics.TreeNetwork, Int64}" href="#MPSDynamics.mpsshiftoc!-Tuple{MPSDynamics.TreeNetwork, Int64}"><code>MPSDynamics.mpsshiftoc!</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">mpsshiftoc!(A::TreeNetwork, newhd::Int)</code></pre><p>Shift the orthogonality centre by one site, setting new head-node <code>newhd</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/78f952b07039bfc34f43e6afc0237f8367e64697/src/treeTDVP.jl#L92-L97">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.normmps-Tuple{MPSDynamics.TreeNetwork}" href="#MPSDynamics.normmps-Tuple{MPSDynamics.TreeNetwork}"><code>MPSDynamics.normmps</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">normmps(net::TreeNetwork; mpsorthog=:None)</code></pre><p>When applied to a tree-MPS <code>mpsorthog=:Left</code> is not defined.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/78f952b07039bfc34f43e6afc0237f8367e64697/src/treeTDVP.jl#L183-L188">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.physdims-Tuple{MPSDynamics.TreeNetwork}" href="#MPSDynamics.physdims-Tuple{MPSDynamics.TreeNetwork}"><code>MPSDynamics.physdims</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">physdims(M::TreeNetwork)</code></pre><p>Return the physical dimensions of a tree-MPS or tree-MPO <code>M</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/78f952b07039bfc34f43e6afc0237f8367e64697/src/treeTDVP.jl#L25-L29">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.productstatemps" href="#MPSDynamics.productstatemps"><code>MPSDynamics.productstatemps</code></a> — <span class="docstring-category">Function</span></header><section><div><pre><code class="language-julia">productstatemps(tree_::Tree, physdims::Dims, Dmax::Int=1; state=:Vacuum)</code></pre><p>Return a tree-MPS representing a product state with local Hilbert space dimensions given by <code>physdims</code>.</p><p>By default all bond-dimensions will be 1 since the state is a product state. However, to embed the product state in a manifold of greater bond-dimension, <code>Dmax</code> can be set accordingly.</p><p>The indvidual states of the MPS sites can be provided by setting <code>state</code> to a list of column vectors. Setting <code>state=:Vacuum</code> will produce an MPS in the vacuum state (where the state of each site is represented by a column vector with a 1 in the first row and zeros elsewhere). Setting <code>state=:FullOccupy</code> will produce an MPS in which each site is fully occupied (ie. a column vector with a 1 in the last row and zeros elsewhere).</p><p><strong>Example</strong></p><pre><code class="language-julia-repl">julia> ψ = unitcol(1,2); d = 6; N = 30; α = 0.1; Δ = 0.0; ω0 = 0.2; s = 1 +</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/2d44f7a84131a18fb07ad6dbe14ac78ec2b9eb42/src/reshape.jl#L1-L16">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.svdtrunc-Tuple{Any}" href="#MPSDynamics.svdtrunc-Tuple{Any}"><code>MPSDynamics.svdtrunc</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">U, S, Vd = svdtrunc(A; truncdim = max(size(A)...), truncerr = 0.)</code></pre><p>Perform a truncated SVD, with maximum number of singular values to keep equal to <code>truncdim</code> or truncating any singular values smaller than <code>truncerr</code>. If both options are provided, the smallest number of singular values will be kept. Unlike the SVD in Julia, this returns matrix U, a diagonal matrix (not a vector) S, and Vt such that A ≈ U * S * Vt</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/2d44f7a84131a18fb07ad6dbe14ac78ec2b9eb42/src/tensorOps.jl#L594-L601">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.MPOtoVector-Tuple{ITensors.MPO}" href="#MPSDynamics.MPOtoVector-Tuple{ITensors.MPO}"><code>MPSDynamics.MPOtoVector</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">MPOtoVector(mpo::MPO)</code></pre><p>Convert an ITensors chain MPO into a form compatible with MPSDynamics</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/2d44f7a84131a18fb07ad6dbe14ac78ec2b9eb42/src/fundamentals.jl#L547-L552">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.chainprop-Tuple{Any, Any}" href="#MPSDynamics.chainprop-Tuple{Any, Any}"><code>MPSDynamics.chainprop</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">chainprop(t, cparams)</code></pre><p>Propagate an excitation placed initially on the first site of a tight-binding chain with parameters given by cparams for a time t and return occupation expectation for each site.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/2d44f7a84131a18fb07ad6dbe14ac78ec2b9eb42/src/fundamentals.jl#L371-L376">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.cosineh-Tuple{Any, Any}" href="#MPSDynamics.cosineh-Tuple{Any, Any}"><code>MPSDynamics.cosineh</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">cosineh(omega, bet)</code></pre><p>Calculates the hyperbolic cosine function function based on the input parameters, for the Bogoliubov transformation necessary for the thermofield transformation.</p><p><strong>Arguments</strong></p><ul><li><code>omega::Float64</code>: The frequency parameter.</li><li><code>bet::Float64</code>: The beta parameter.</li></ul><p><strong>Returns</strong></p><ul><li><code>Float64</code>: The result of the modified cosine function.</li></ul></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/2d44f7a84131a18fb07ad6dbe14ac78ec2b9eb42/src/fundamentals.jl#L258-L270">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.disp-Tuple{Any, Any, Any}" href="#MPSDynamics.disp-Tuple{Any, Any, Any}"><code>MPSDynamics.disp</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">disp(d,ωvib,m)</code></pre><p>Displacement operator <span>$X = \frac{\sqrt{2}}{2\sqrt{m \omega_{vib}}}(a + a^{\dagger})$</span></p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/2d44f7a84131a18fb07ad6dbe14ac78ec2b9eb42/src/fundamentals.jl#L16-L23">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.disp-Tuple{Any}" href="#MPSDynamics.disp-Tuple{Any}"><code>MPSDynamics.disp</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">disp(d)</code></pre><p>Mass and frequency-weighted displacement operator <span>$X = \frac{1}{2}(a + a^{\dagger})$</span></p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/2d44f7a84131a18fb07ad6dbe14ac78ec2b9eb42/src/fundamentals.jl#L6-L14">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.dynamap-NTuple{4, Any}" href="#MPSDynamics.dynamap-NTuple{4, Any}"><code>MPSDynamics.dynamap</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">dynamap(ps1,ps2,ps3,ps4)</code></pre><p>Calculate complete dynamical map to time step at which ps1, ps2, ps3 and ps4 are specified.</p><p><strong>Arguments</strong></p><ul><li><code>ps1</code> : time evolved system density matrix starting from initial state up</li><li><code>ps2</code> : time evolved system density matrix starting from initial state down</li><li><code>ps3</code> : time evolved system density matrix starting from initial state (up + down)/sqrt(2)</li><li><code>ps4</code> : time evolved system density matrix starting from initial state (up - i*down)/sqrt(2)</li></ul></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/2d44f7a84131a18fb07ad6dbe14ac78ec2b9eb42/src/fundamentals.jl#L440-L450">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.eigenchain-Tuple{Any}" href="#MPSDynamics.eigenchain-Tuple{Any}"><code>MPSDynamics.eigenchain</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">eigenchain(cparams; nummodes=nothing)</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/2d44f7a84131a18fb07ad6dbe14ac78ec2b9eb42/src/fundamentals.jl#L141-L144">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.endsiteocc-Tuple{Any, Any}" href="#MPSDynamics.endsiteocc-Tuple{Any, Any}"><code>MPSDynamics.endsiteocc</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">endsiteocc(t, cparams)</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/2d44f7a84131a18fb07ad6dbe14ac78ec2b9eb42/src/fundamentals.jl#L388-L392">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.entropy-Tuple{Any}" href="#MPSDynamics.entropy-Tuple{Any}"><code>MPSDynamics.entropy</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">entropy(rho)</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/2d44f7a84131a18fb07ad6dbe14ac78ec2b9eb42/src/fundamentals.jl#L492-L496">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.findchainlength-Tuple{Any, Any}" href="#MPSDynamics.findchainlength-Tuple{Any, Any}"><code>MPSDynamics.findchainlength</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">findchainlength(T, cparams; eps=10^-6, verbose=false)</code></pre><p>Estimate length of chain required for a particular set of chain parameters by calculating how long an excitation on the first site takes to reach the end. The chain length is given as the length required for the excitation to have just reached the last site after time T. The initial number of sites in cparams has to be larger than the findchainlength result.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/2d44f7a84131a18fb07ad6dbe14ac78ec2b9eb42/src/fundamentals.jl#L341-L348">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.measurecorrs-Tuple{Any, Vector, Vector}" href="#MPSDynamics.measurecorrs-Tuple{Any, Vector, Vector}"><code>MPSDynamics.measurecorrs</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">measurecorrs(oper, , e::Vector, t::Vector)</code></pre><p><strong>Parameters</strong></p><p><code>oper</code>: Square matrix (Matrix{Float64}) representing the operator to be transformed. <code>e</code>: Vector (Vector{Float64}) of diagonal (on-site energy) chain coefficients. <code>t</code>: Vector (Vector{Float64}) of off-diagonal (hopping terms) chain coefficients.</p><p><strong>Returns</strong></p><p>Matrix{Float64}: This matrix is the operator <code>oper</code> transformed back from the chain representation to the representation corresponding to the extended bath. The resulting operator represents quantities like mode occupations or other properties in the basis of environmental modes associated with specific frequencies <span>$\omega_i$</span>.</p><p><strong>Description</strong></p><p>This function performs a basis transformation of the operator <code>oper</code>. Specifically, this transformation reverses the unitary transformation that maps the extended bath Hamiltonian into the chain representation. </p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/2d44f7a84131a18fb07ad6dbe14ac78ec2b9eb42/src/fundamentals.jl#L226-L248">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.measuremodes" href="#MPSDynamics.measuremodes"><code>MPSDynamics.measuremodes</code></a> — <span class="docstring-category">Function</span></header><section><div><pre><code class="language-julia">measuremodes(adaga, e=1.0, t=1.0)</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/2d44f7a84131a18fb07ad6dbe14ac78ec2b9eb42/src/fundamentals.jl#L200-L204">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.measuremodes-Tuple{Any, Tuple{Int64, Int64}, AbstractArray}" href="#MPSDynamics.measuremodes-Tuple{Any, Tuple{Int64, Int64}, AbstractArray}"><code>MPSDynamics.measuremodes</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">measuremodes(A, chainsection::Tuple{Int64,Int64}, U::AbstractArray)</code></pre><p>for longer chains it can be worth calculating U in advance</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/2d44f7a84131a18fb07ad6dbe14ac78ec2b9eb42/src/fundamentals.jl#L186-L192">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.measuremodes-Tuple{Any, Tuple{Int64, Int64}, Vector{Float64}, Vector{Float64}}" href="#MPSDynamics.measuremodes-Tuple{Any, Tuple{Int64, Int64}, Vector{Float64}, Vector{Float64}}"><code>MPSDynamics.measuremodes</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">measuremodes(A, chainsection::Tuple{Int64,Int64}, e::Array{Float64,1}, t::Array{Float64,1})</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/2d44f7a84131a18fb07ad6dbe14ac78ec2b9eb42/src/fundamentals.jl#L169-L172">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.measuremodes-Tuple{Any, Vector, Vector}" href="#MPSDynamics.measuremodes-Tuple{Any, Vector, Vector}"><code>MPSDynamics.measuremodes</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">measuremodes(adaga, e::Vector, t::Vector)</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/2d44f7a84131a18fb07ad6dbe14ac78ec2b9eb42/src/fundamentals.jl#L213-L217">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.physical_occup-NTuple{6, Any}" href="#MPSDynamics.physical_occup-NTuple{6, Any}"><code>MPSDynamics.physical_occup</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">physical_occup(corr_constr, corr_destr, omega, occup, b, M)</code></pre><p>Calculates the physical occupation based on correlation matrices, omega values, and other parameters. The physical occupation in the original frequency environment is computed by reverting the thermofield transformation.</p><p><strong>Arguments</strong></p><ul><li><code>corr_constr::Matrix{ComplexF64}</code>: The correlation construction matrix.</li><li><code>corr_destr::Matrix{ComplexF64}</code>: The correlation destruction matrix.</li><li><code>omega::Vector{Float64}</code>: The omega values.</li><li><code>occup::Matrix{Float64}</code>: The occupation matrix.</li><li><code>b::Float64</code>: The beta parameter.</li><li><code>M::Int</code>: The number of points for interpolation.</li></ul><p><strong>Returns</strong></p><ul><li><code>Vector{Float64}</code>: The physical occupation values.</li></ul></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/2d44f7a84131a18fb07ad6dbe14ac78ec2b9eb42/src/fundamentals.jl#L292-L309">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.randisometry-Tuple{Type, Int64, Int64}" href="#MPSDynamics.randisometry-Tuple{Type, Int64, Int64}"><code>MPSDynamics.randisometry</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">randisometry([T=Float64], dims...)</code></pre><p>Construct a random isometry</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/2d44f7a84131a18fb07ad6dbe14ac78ec2b9eb42/src/fundamentals.jl#L511-L515">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.rmsd-Tuple{Any, Any}" href="#MPSDynamics.rmsd-Tuple{Any, Any}"><code>MPSDynamics.rmsd</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">rmsd(ob1, ob2)</code></pre><p>Calculate the root mean squared difference between two measurements of an observable over the same time period.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/2d44f7a84131a18fb07ad6dbe14ac78ec2b9eb42/src/fundamentals.jl#L426-L431">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.sineh-Tuple{Any, Any}" href="#MPSDynamics.sineh-Tuple{Any, Any}"><code>MPSDynamics.sineh</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">sineh(omega, bet)</code></pre><p>Calculates the hyperbolic sine function function based on the input parameters, for the Bogoliubov transformation necessary for the thermofield transformation.</p><p><strong>Arguments</strong></p><ul><li><code>omega::Float64</code>: The frequency parameter.</li><li><code>bet::Float64</code>: The beta parameter.</li></ul><p><strong>Returns</strong></p><ul><li><code>Float64</code>: The result of the modified cosine function.</li></ul></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/2d44f7a84131a18fb07ad6dbe14ac78ec2b9eb42/src/fundamentals.jl#L275-L287">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.therHam-Tuple{Any, Any, Any}" href="#MPSDynamics.therHam-Tuple{Any, Any, Any}"><code>MPSDynamics.therHam</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia"> therHam(psi, site1, site2)</code></pre><p>Calculates Hβ such that ρ = e^(-βH) for some density matrix ρ obatined from tracing out everything outside the range [site1,site2] in the MPS psi</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/2d44f7a84131a18fb07ad6dbe14ac78ec2b9eb42/src/fundamentals.jl#L94-L98">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.thermaloccupations-Tuple{Any, Vararg{Any}}" href="#MPSDynamics.thermaloccupations-Tuple{Any, Vararg{Any}}"><code>MPSDynamics.thermaloccupations</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">thermaloccupations(β, cparams...)</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/2d44f7a84131a18fb07ad6dbe14ac78ec2b9eb42/src/fundamentals.jl#L155-L158">source</a></section></article><h2 id="Tree-Tensor-Network-(TTN)"><a class="docs-heading-anchor" href="#Tree-Tensor-Network-(TTN)">Tree Tensor Network (TTN)</a><a id="Tree-Tensor-Network-(TTN)-1"></a><a class="docs-heading-anchor-permalink" href="#Tree-Tensor-Network-(TTN)" title="Permalink"></a></h2><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.addchild!-Tuple{MPSDynamics.Tree, Int64}" href="#MPSDynamics.addchild!-Tuple{MPSDynamics.Tree, Int64}"><code>MPSDynamics.addchild!</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">addchild!(tree::Tree, id::Int)</code></pre><p>Add child to node <code>id</code> of <code>tree</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/2d44f7a84131a18fb07ad6dbe14ac78ec2b9eb42/src/treeBasics.jl#L40-L45">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.addchildren!-Tuple{MPSDynamics.Tree, Int64, Int64}" href="#MPSDynamics.addchildren!-Tuple{MPSDynamics.Tree, Int64, Int64}"><code>MPSDynamics.addchildren!</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">addchildren!(tree::Tree, id::Int, n::Int)</code></pre><p>Add <code>n</code> children to node <code>id</code> of <code>tree</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/2d44f7a84131a18fb07ad6dbe14ac78ec2b9eb42/src/treeBasics.jl#L54-L59">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.findchild-Tuple{MPSDynamics.TreeNode, Int64}" href="#MPSDynamics.findchild-Tuple{MPSDynamics.TreeNode, Int64}"><code>MPSDynamics.findchild</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">findchild(node::TreeNode, id::Int)</code></pre><p>Return integer corresponding to the which number child site <code>id</code> is of <code>node</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/2d44f7a84131a18fb07ad6dbe14ac78ec2b9eb42/src/treeBasics.jl#L222-L227">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.randtree-Tuple{Int64, Int64}" href="#MPSDynamics.randtree-Tuple{Int64, Int64}"><code>MPSDynamics.randtree</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">randtree(numnodes::Int, maxdegree::Int)</code></pre><p>Construct a random tree with <code>nummodes</code> modes and max degree <code>maxdegree</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/2d44f7a84131a18fb07ad6dbe14ac78ec2b9eb42/src/treeBasics.jl#L353-L358">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.measure1siteoperator-Tuple{MPSDynamics.TreeNetwork, Any, Int64}" href="#MPSDynamics.measure1siteoperator-Tuple{MPSDynamics.TreeNetwork, Any, Int64}"><code>MPSDynamics.measure1siteoperator</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">measure1siteoperator(net::TreeNetwork, O, id::Int)</code></pre><p>For a Tree, compute the local expectation value of a one-site operator O for site id.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/2d44f7a84131a18fb07ad6dbe14ac78ec2b9eb42/src/treeMeasure.jl#L1-L6">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.measure1siteoperator-Tuple{MPSDynamics.TreeNetwork, Any, Tuple{Int64, Int64}}" href="#MPSDynamics.measure1siteoperator-Tuple{MPSDynamics.TreeNetwork, Any, Tuple{Int64, Int64}}"><code>MPSDynamics.measure1siteoperator</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">measure1siteoperator(net::TreeNetwork, O, sites::Tuple{Int,Int})</code></pre><p>For a Tree, compute the local expectation value of a one-site operator O for the specified site range.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/2d44f7a84131a18fb07ad6dbe14ac78ec2b9eb42/src/treeMeasure.jl#L18-L23">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.measure2siteoperator-Tuple{MPSDynamics.TreeNetwork, Any, Any, Tuple{Int64, Int64}}" href="#MPSDynamics.measure2siteoperator-Tuple{MPSDynamics.TreeNetwork, Any, Any, Tuple{Int64, Int64}}"><code>MPSDynamics.measure2siteoperator</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">measure2siteoperator(net::TreeNetwork, O1, O2, sites::Tuple{Int,Int})</code></pre><p>For a Tree, compute the local expectation value of two one-site operators O1 and O2 for the specified site range.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/2d44f7a84131a18fb07ad6dbe14ac78ec2b9eb42/src/treeMeasure.jl#L60-L65">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.bonddims-Tuple{MPSDynamics.TreeNetwork}" href="#MPSDynamics.bonddims-Tuple{MPSDynamics.TreeNetwork}"><code>MPSDynamics.bonddims</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">bonddims(A::TreeNetwork)</code></pre><p>Return the bon-dimension of a tree-MPS <code>A</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/2d44f7a84131a18fb07ad6dbe14ac78ec2b9eb42/src/treeTDVP.jl#L638-L643">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.mpsembed!-Tuple{MPSDynamics.TreeNetwork, Int64}" href="#MPSDynamics.mpsembed!-Tuple{MPSDynamics.TreeNetwork, Int64}"><code>MPSDynamics.mpsembed!</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">mpsembed(A::TreeNetwork, Dmax::Int)</code></pre><p>Embed tree-MPS <code>A</code> in manifold of max bond-dimension <code>Dmax</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/2d44f7a84131a18fb07ad6dbe14ac78ec2b9eb42/src/treeTDVP.jl#L607-L612">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.mpsmixednorm!-Tuple{MPSDynamics.TreeNetwork, Int64}" href="#MPSDynamics.mpsmixednorm!-Tuple{MPSDynamics.TreeNetwork, Int64}"><code>MPSDynamics.mpsmixednorm!</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">mpsmixednorm!(A::TreeNetwork, id::Int)</code></pre><p>Normalise tree-MPS <code>A</code> such that orthogonality centre is on site <code>id</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/2d44f7a84131a18fb07ad6dbe14ac78ec2b9eb42/src/treeTDVP.jl#L66-L71">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.mpsmoveoc!-Tuple{MPSDynamics.TreeNetwork, Int64}" href="#MPSDynamics.mpsmoveoc!-Tuple{MPSDynamics.TreeNetwork, Int64}"><code>MPSDynamics.mpsmoveoc!</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">mpsmoveoc!(A::TreeNetwork, id::Int)</code></pre><p>Move the orthogonality centre of right normalised tree-MPS <code>A</code> to site <code>id</code>.</p><p>This function will be more efficient than using <code>mpsmixednorm!</code> if the tree-MPS is already right-normalised.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/2d44f7a84131a18fb07ad6dbe14ac78ec2b9eb42/src/treeTDVP.jl#L78-L85">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.mpsrightnorm!-Tuple{MPSDynamics.TreeNetwork}" href="#MPSDynamics.mpsrightnorm!-Tuple{MPSDynamics.TreeNetwork}"><code>MPSDynamics.mpsrightnorm!</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">mpsrightnorm!(A::TreeNetwork)</code></pre><p>When applied to a tree-MPS, right normalise towards head-node.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/2d44f7a84131a18fb07ad6dbe14ac78ec2b9eb42/src/treeTDVP.jl#L58-L63">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.mpsshiftoc!-Tuple{MPSDynamics.TreeNetwork, Int64}" href="#MPSDynamics.mpsshiftoc!-Tuple{MPSDynamics.TreeNetwork, Int64}"><code>MPSDynamics.mpsshiftoc!</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">mpsshiftoc!(A::TreeNetwork, newhd::Int)</code></pre><p>Shift the orthogonality centre by one site, setting new head-node <code>newhd</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/2d44f7a84131a18fb07ad6dbe14ac78ec2b9eb42/src/treeTDVP.jl#L92-L97">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.normmps-Tuple{MPSDynamics.TreeNetwork}" href="#MPSDynamics.normmps-Tuple{MPSDynamics.TreeNetwork}"><code>MPSDynamics.normmps</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">normmps(net::TreeNetwork; mpsorthog=:None)</code></pre><p>When applied to a tree-MPS <code>mpsorthog=:Left</code> is not defined.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/2d44f7a84131a18fb07ad6dbe14ac78ec2b9eb42/src/treeTDVP.jl#L183-L188">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.physdims-Tuple{MPSDynamics.TreeNetwork}" href="#MPSDynamics.physdims-Tuple{MPSDynamics.TreeNetwork}"><code>MPSDynamics.physdims</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">physdims(M::TreeNetwork)</code></pre><p>Return the physical dimensions of a tree-MPS or tree-MPO <code>M</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/2d44f7a84131a18fb07ad6dbe14ac78ec2b9eb42/src/treeTDVP.jl#L25-L29">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.productstatemps" href="#MPSDynamics.productstatemps"><code>MPSDynamics.productstatemps</code></a> — <span class="docstring-category">Function</span></header><section><div><pre><code class="language-julia">productstatemps(tree_::Tree, physdims::Dims, Dmax::Int=1; state=:Vacuum)</code></pre><p>Return a tree-MPS representing a product state with local Hilbert space dimensions given by <code>physdims</code>.</p><p>By default all bond-dimensions will be 1 since the state is a product state. However, to embed the product state in a manifold of greater bond-dimension, <code>Dmax</code> can be set accordingly.</p><p>The indvidual states of the MPS sites can be provided by setting <code>state</code> to a list of column vectors. Setting <code>state=:Vacuum</code> will produce an MPS in the vacuum state (where the state of each site is represented by a column vector with a 1 in the first row and zeros elsewhere). Setting <code>state=:FullOccupy</code> will produce an MPS in which each site is fully occupied (ie. a column vector with a 1 in the last row and zeros elsewhere).</p><p><strong>Example</strong></p><pre><code class="language-julia-repl">julia> ψ = unitcol(1,2); d = 6; N = 30; α = 0.1; Δ = 0.0; ω0 = 0.2; s = 1 julia> cpars = chaincoeffs_ohmic(N, α, s) julia> H = spinbosonmpo(ω0, Δ, d, N, cpars, tree=true) -julia> A = productstatemps(H.tree, physdims(H), state=[ψ, fill(unitcol(1,d), N)...]) # tree-MPS representation of |ψ>|Vacuum></code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/78f952b07039bfc34f43e6afc0237f8367e64697/src/treeTDVP.jl#L540-L565">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.randmps" href="#MPSDynamics.randmps"><code>MPSDynamics.randmps</code></a> — <span class="docstring-category">Function</span></header><section><div><pre><code class="language-julia">randmps(tree::Tree, physdims, Dmax::Int, T::Type{<:Number} = Float64)</code></pre><p>Construct a random, right-normalised, tree-MPS, with structure given by tree and max bond-dimension given by <code>Dmax</code>.</p><p>The local Hilbert space dimensions are specified by physdims which can either be of type <code>Dims{length(tree)}</code>, specifying the dimension of each site, or of type <code>Int</code>, in which case the same local dimension is used for every site.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/78f952b07039bfc34f43e6afc0237f8367e64697/src/treeTDVP.jl#L127-L134">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.tdvp1sweep!-Tuple{Any, MPSDynamics.TreeNetwork, MPSDynamics.TreeNetwork, Vector, Int64}" href="#MPSDynamics.tdvp1sweep!-Tuple{Any, MPSDynamics.TreeNetwork, MPSDynamics.TreeNetwork, Vector, Int64}"><code>MPSDynamics.tdvp1sweep!</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">tdvp1sweep!(dt, A::TreeNetwork, M::TreeNetwork, F::Vector, id::Int; verbose=false, kwargs...)</code></pre><p>Propagates the tree-MPS A with the tree-MPO M following the 1-site TDVP method. The sweep is done back and forth with a time step dt/2. F represents the merged left and right parts of the site being propagated. </p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/78f952b07039bfc34f43e6afc0237f8367e64697/src/treeTDVP.jl#L272-L276">source</a></section></article><h2 id="Measure-and-Obervables"><a class="docs-heading-anchor" href="#Measure-and-Obervables">Measure and Obervables</a><a id="Measure-and-Obervables-1"></a><a class="docs-heading-anchor-permalink" href="#Measure-and-Obervables" title="Permalink"></a></h2><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.OneSiteObservable-Tuple{Any, Any, Any}" href="#MPSDynamics.OneSiteObservable-Tuple{Any, Any, Any}"><code>MPSDynamics.OneSiteObservable</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">OneSiteObservable(name,op,sites)</code></pre><p>Computes the local expectation value of the one-site operator <code>op</code> on the specified sites. Used to define one-site observables that are obs and convobs parameters for the <code>runsim</code> function.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/78f952b07039bfc34f43e6afc0237f8367e64697/src/measure.jl#L11-L17">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.OneSiteObservable-Tuple{Any, Any}" href="#MPSDynamics.OneSiteObservable-Tuple{Any, Any}"><code>MPSDynamics.OneSiteObservable</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">OneSiteObservable(name,op)</code></pre><p>Computes the local expectation value of the one-site operator <code>op</code> on the every site. Used to define one-site observables that are obs and convobs parameters for the <code>runsim</code> function.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/78f952b07039bfc34f43e6afc0237f8367e64697/src/measure.jl#L20-L26">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.TwoSiteObservable" href="#MPSDynamics.TwoSiteObservable"><code>MPSDynamics.TwoSiteObservable</code></a> — <span class="docstring-category">Type</span></header><section><div><pre><code class="language-julia">TwoSiteObservable(name,op1,op2,sites1=nothing,sites2=nothing)</code></pre><p>Computes the local expectation value of operators <code>op1</code> and <code>op2</code> where <code>op1</code> acts on sites1 and <code>op2</code> acts on sites2. Used to define several-site observables that are obs and convobs parameters for the <code>runsim</code> function.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/78f952b07039bfc34f43e6afc0237f8367e64697/src/measure.jl#L52-L58">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.measure-Tuple{Any, OneSiteObservable}" href="#MPSDynamics.measure-Tuple{Any, OneSiteObservable}"><code>MPSDynamics.measure</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">measure(A, O; kwargs...)</code></pre><p>Measure observable <code>O</code> on mps state <code>A</code></p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/78f952b07039bfc34f43e6afc0237f8367e64697/src/measure.jl#L132-L137">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.measure-Tuple{Vector, Vector}" href="#MPSDynamics.measure-Tuple{Vector, Vector}"><code>MPSDynamics.measure</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia"> measure(A::Vector, Os::Vector; kwargs...)</code></pre><p>Caculate expectation of Os on MPS A.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/78f952b07039bfc34f43e6afc0237f8367e64697/src/measure.jl#L983-L988">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.measure1siteoperator-Tuple{Vector, Any, Int64}" href="#MPSDynamics.measure1siteoperator-Tuple{Vector, Any, Int64}"><code>MPSDynamics.measure1siteoperator</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">measure1siteoperator(A::Vector, O, site::Int)</code></pre><p>For a list of tensors <code>A</code> representing a right orthonormalized MPS, compute the local expectation value of a one-site operator O for a single site.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/78f952b07039bfc34f43e6afc0237f8367e64697/src/measure.jl#L268-L273">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.measure1siteoperator-Tuple{Vector, Any, Tuple{Int64, Int64}}" href="#MPSDynamics.measure1siteoperator-Tuple{Vector, Any, Tuple{Int64, Int64}}"><code>MPSDynamics.measure1siteoperator</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">measure1siteoperator(A::Vector, O, chainsection::Tuple{Int64,Int64})</code></pre><p>For a list of tensors <code>A</code> representing a right orthonormalized MPS, compute the local expectation value of a one-site operator O for a chainsection.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/78f952b07039bfc34f43e6afc0237f8367e64697/src/measure.jl#L212-L217">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.measure1siteoperator-Tuple{Vector, Any, Vector{Int64}}" href="#MPSDynamics.measure1siteoperator-Tuple{Vector, Any, Vector{Int64}}"><code>MPSDynamics.measure1siteoperator</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">measure1siteoperator(A::Vector, O, sites::Vector{Int})</code></pre><p>For a list of tensors <code>A</code> representing a right orthonormalized MPS, compute the local expectation value of a one-site operator O for every site or just one if it is specified.</p><p>For calculating operators on single sites this will be more efficient if the site is on the left of the mps.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/78f952b07039bfc34f43e6afc0237f8367e64697/src/measure.jl#L187-L195">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.measure1siteoperator-Tuple{Vector, Any}" href="#MPSDynamics.measure1siteoperator-Tuple{Vector, Any}"><code>MPSDynamics.measure1siteoperator</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">measure1siteoperator(A::Vector, O)</code></pre><p>For a list of tensors <code>A</code> representing a right orthonormalized MPS, compute the local expectation value of a one-site operator O for every site.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/78f952b07039bfc34f43e6afc0237f8367e64697/src/measure.jl#L247-L252">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.measure2siteoperator-Tuple{Vector, Any, Any, Int64, Int64}" href="#MPSDynamics.measure2siteoperator-Tuple{Vector, Any, Any, Int64, Int64}"><code>MPSDynamics.measure2siteoperator</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia"> measure2siteoperator(A::Vector, M1, M2, j1, j2)</code></pre><p>Caculate expectation of M1*M2 where M1 acts on site j1 and M2 acts on site j2, assumes A is right normalised.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/78f952b07039bfc34f43e6afc0237f8367e64697/src/measure.jl#L285-L290">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.measure2siteoperator-Tuple{Vector, Any, Any, Vector{Int64}, Vector{Int64}}" href="#MPSDynamics.measure2siteoperator-Tuple{Vector, Any, Any, Vector{Int64}, Vector{Int64}}"><code>MPSDynamics.measure2siteoperator</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia"> measure2siteoperator(A::Vector, M1, M2, sites1::Vector{Int}, sites2::Vector{Int})</code></pre><p>Caculate expectation of M1*M2 where M1 acts on sites1 and M2 acts on sites2, assumes A is right normalised.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/78f952b07039bfc34f43e6afc0237f8367e64697/src/measure.jl#L464-L469">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.measurempo-Tuple{Vector, Vector, Tuple{Int64, Int64}}" href="#MPSDynamics.measurempo-Tuple{Vector, Vector, Tuple{Int64, Int64}}"><code>MPSDynamics.measurempo</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">measurempo(A::Vector, M::Vector, sites::Tuples{Int,Int})</code></pre><p>For a list of tensors <code>A</code> representing a right orthonormalized MPS, compute the local expectation value of the MPO M on specified sites.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/78f952b07039bfc34f43e6afc0237f8367e64697/src/measure.jl#L110-L116">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.measurempo-Tuple{Vector, Vector}" href="#MPSDynamics.measurempo-Tuple{Vector, Vector}"><code>MPSDynamics.measurempo</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">measurempo(A::Vector, M::Vector)</code></pre><p>For a list of tensors <code>A</code> representing a right orthonormalized MPS, compute the local expectation value of the MPO M on every site.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/78f952b07039bfc34f43e6afc0237f8367e64697/src/measure.jl#L94-L100">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.rhoreduced_1site" href="#MPSDynamics.rhoreduced_1site"><code>MPSDynamics.rhoreduced_1site</code></a> — <span class="docstring-category">Function</span></header><section><div><pre><code class="language-julia"> rhoreduced_1site(A::Vector, site::Int=1)</code></pre><p>Caculate the reduced density matrix of the MPS A at the specified site.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/78f952b07039bfc34f43e6afc0237f8367e64697/src/measure.jl#L1022-L1027">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.rhoreduced_2sites-Tuple{Vector, Tuple{Int64, Int64}}" href="#MPSDynamics.rhoreduced_2sites-Tuple{Vector, Tuple{Int64, Int64}}"><code>MPSDynamics.rhoreduced_2sites</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia"> rhoreduced_2sites(A::Vector, site::Tuple{Int, Int})</code></pre><p>Caculate the reduced density matrix of the MPS A of two neigbour sites. The resulting dimensions will be the four physical dimensions in total, corresponding to the dimensions of the two sites</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/78f952b07039bfc34f43e6afc0237f8367e64697/src/measure.jl#L1046-L1052">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.measure-Tuple{Any, FockError}" href="#MPSDynamics.measure-Tuple{Any, FockError}"><code>MPSDynamics.measure</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">measure(A, obs::FockError; t=0, kwargs...)</code></pre><p>Return the measure of the observable obs on the MPS A. </p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/78f952b07039bfc34f43e6afc0237f8367e64697/src/observables.jl#L20-L25">source</a></section></article><h2 id="Models-and-Hamiltonians-(MPO)"><a class="docs-heading-anchor" href="#Models-and-Hamiltonians-(MPO)">Models and Hamiltonians (MPO)</a><a id="Models-and-Hamiltonians-(MPO)-1"></a><a class="docs-heading-anchor-permalink" href="#Models-and-Hamiltonians-(MPO)" title="Permalink"></a></h2><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.chaincoeffs_ohmic-Tuple{Any, Any, Any}" href="#MPSDynamics.chaincoeffs_ohmic-Tuple{Any, Any, Any}"><code>MPSDynamics.chaincoeffs_ohmic</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">chaincoeffs_ohmic(N, α, s; ωc=1, soft=false)</code></pre><p>Generate chain coefficients <span>$[[ϵ_0,ϵ_1,...],[t_0,t_1,...],c_0]$</span> for an Harmonic bath at zero temperature with a power law spectral density given by:</p><p>soft cutoff: <span>$J(ω) = 2αω_c (\frac{ω}{ω_c})^s \exp(-ω/ω_c)$</span> </p><p>hard cutoff: <span>$J(ω) = 2αω_c (\frac{ω}{ω_c})^s θ(ω-ω_c)$</span></p><p>The coefficients parameterise the chain Hamiltonian</p><p><span>$H = H_S + c_0 A_S⊗B_0+\sum_{i=0}^{N-1}t_i (b_{i+1}^\dagger b_i +h.c.) + \sum_{i=0}^{N} ϵ_ib_i^\dagger b_i$</span></p><p>which is unitarily equivalent (before the truncation to <code>N</code> sites) to</p><p><span>$H = H_S + A_S⊗\int_0^∞dω\sqrt{J(ω)}B_ω + \int_0^∞dωωb_ω^\dagger b_ω$</span>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/78f952b07039bfc34f43e6afc0237f8367e64697/src/models.jl#L483-L505">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.correlatedenvironmentmpo-Tuple{Vector, Int64, Int64}" href="#MPSDynamics.correlatedenvironmentmpo-Tuple{Vector, Int64, Int64}"><code>MPSDynamics.correlatedenvironmentmpo</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">correlatedenvironmentmpo(R::Vector, Nm::Int, d::Int; chainparams, fnamecc::String, s=1, α=1, ωc=1, c_phonon=1, β="inf", issoft=false)</code></pre><p>Generate a MPO for a one-dimensional bosonic bath spatially correlated to a multi-component system </p><p><span>$H_B + H_{int} = \int_{-∞}^{+∞} dk ω_k b_k^\dagger b_k + ∑_j \int_{-∞}^{+∞}dk \sqrt{J(k)}(A_j b_k e^{i k R_j} + h.c.)$</span>.</p><p>The interactions between the system and the chain-mapped bath are long range, i.e. each site interacts with all the chain modes. The spectral density is assumed to be Ohmic <span>$J(ω) = 2αωc(ω/ωc)^s$</span>.</p><p><strong>Arguments</strong></p><ul><li><code>R</code>: List of system's components positions</li><li><code>Nm</code>: Number of chain modes. The actual number of mode will be doubled to account for the left and right moving excitations.</li><li><code>d</code>: Local Hilbert space dimension of the bath modes</li><li><code>chainparams</code>: chain parameters, of the form <code>chainparams</code>=<span>$[[ϵ_0,ϵ_1,...],[t_0,t_1,...],c_0]$</span>, can be chosen to represent any arbitrary spectral density <span>$J(ω)$</span> at any temperature.</li><li><code>fnamecc</code>: Path to a file containing pre-computed long-range coupling coefficient. If not provided, the coupling coefficients will be computed and stored.</li><li><code>s</code>: Ohmicity</li><li><code>α</code>: Kondo parameter</li><li><code>ωc</code>: Bath cut-off frequency</li><li><code>c_phonon</code>: Speed of sound in the bath</li><li><code>β</code>: Inverse temperature </li><li><code>issoft</code>: Is the cut-off of the Ohmic SD soft or hard?</li></ul></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/78f952b07039bfc34f43e6afc0237f8367e64697/src/models.jl#L970-L994">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.hbathchain-Tuple{Int64, Int64, Any, Vararg{Any}}" href="#MPSDynamics.hbathchain-Tuple{Int64, Int64, Any, Vararg{Any}}"><code>MPSDynamics.hbathchain</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">hbathchain(N::Int, d::Int, chainparams, longrangecc...; tree=false, reverse=false, coupletox=false)</code></pre><p>Generate MPO representing a tight-binding chain of <code>N</code> oscillators with <code>d</code> Fock states each. Chain parameters are supplied in the standard form: <code>chainparams</code> <span>$=[[ϵ_0,ϵ_1,...],[t_0,t_1,...],c_0]$</span>. The output does not itself represent a complete MPO but will possess an end which is <em>open</em> and should be attached to another tensor site, usually representing the <em>system</em>.</p><p><strong>Arguments</strong></p><ul><li><code>reverse</code>: If <code>reverse=true</code> create a chain were the last (i.e. Nth) site is the site which couples to the system</li><li><code>coupletox</code>: Used to choose the form of the system coupling. <code>coupletox=true</code> gives a non-number conserving coupling of the form <span>$H_{\text{I}}= A_{\text{S}}(b_{0}^\dagger + b_0)$</span> where <span>$A_{\text{S}}$</span> is a system operator, while <code>coupletox=false</code> gives the number-converving coupling <span>$H_{\text{I}}=(A_{\text{S}} b_{0}^\dagger + A_{\text{S}}^\dagger b_0)$</span></li><li><code>tree</code>: If <code>true</code> the resulting chain will be of type <code>TreeNetwork</code>; useful for construcing tree-MPOs </li></ul><p><strong>Example</strong></p><p>One can constuct a system site tensor to couple to a chain by using the function <code>up</code> to populate the tensor. For example, to construct a system site with Hamiltonian <code>Hs</code> and coupling operator <code>As</code>, the system tensor <code>M</code> is constructed as follows for a non-number conserving interaction:</p><pre><code class="language-julia">u = one(Hs) # system identity +julia> A = productstatemps(H.tree, physdims(H), state=[ψ, fill(unitcol(1,d), N)...]) # tree-MPS representation of |ψ>|Vacuum></code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/2d44f7a84131a18fb07ad6dbe14ac78ec2b9eb42/src/treeTDVP.jl#L540-L565">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.randmps" href="#MPSDynamics.randmps"><code>MPSDynamics.randmps</code></a> — <span class="docstring-category">Function</span></header><section><div><pre><code class="language-julia">randmps(tree::Tree, physdims, Dmax::Int, T::Type{<:Number} = Float64)</code></pre><p>Construct a random, right-normalised, tree-MPS, with structure given by tree and max bond-dimension given by <code>Dmax</code>.</p><p>The local Hilbert space dimensions are specified by physdims which can either be of type <code>Dims{length(tree)}</code>, specifying the dimension of each site, or of type <code>Int</code>, in which case the same local dimension is used for every site.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/2d44f7a84131a18fb07ad6dbe14ac78ec2b9eb42/src/treeTDVP.jl#L127-L134">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.tdvp1sweep!-Tuple{Any, MPSDynamics.TreeNetwork, MPSDynamics.TreeNetwork, Vector, Int64}" href="#MPSDynamics.tdvp1sweep!-Tuple{Any, MPSDynamics.TreeNetwork, MPSDynamics.TreeNetwork, Vector, Int64}"><code>MPSDynamics.tdvp1sweep!</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">tdvp1sweep!(dt, A::TreeNetwork, M::TreeNetwork, F::Vector, id::Int; verbose=false, kwargs...)</code></pre><p>Propagates the tree-MPS A with the tree-MPO M following the 1-site TDVP method. The sweep is done back and forth with a time step dt/2. F represents the merged left and right parts of the site being propagated. </p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/2d44f7a84131a18fb07ad6dbe14ac78ec2b9eb42/src/treeTDVP.jl#L272-L276">source</a></section></article><h2 id="Measure-and-Obervables"><a class="docs-heading-anchor" href="#Measure-and-Obervables">Measure and Obervables</a><a id="Measure-and-Obervables-1"></a><a class="docs-heading-anchor-permalink" href="#Measure-and-Obervables" title="Permalink"></a></h2><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.OneSiteObservable-Tuple{Any, Any, Any}" href="#MPSDynamics.OneSiteObservable-Tuple{Any, Any, Any}"><code>MPSDynamics.OneSiteObservable</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">OneSiteObservable(name,op,sites)</code></pre><p>Computes the local expectation value of the one-site operator <code>op</code> on the specified sites. Used to define one-site observables that are obs and convobs parameters for the <code>runsim</code> function.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/2d44f7a84131a18fb07ad6dbe14ac78ec2b9eb42/src/measure.jl#L11-L17">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.OneSiteObservable-Tuple{Any, Any}" href="#MPSDynamics.OneSiteObservable-Tuple{Any, Any}"><code>MPSDynamics.OneSiteObservable</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">OneSiteObservable(name,op)</code></pre><p>Computes the local expectation value of the one-site operator <code>op</code> on the every site. Used to define one-site observables that are obs and convobs parameters for the <code>runsim</code> function.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/2d44f7a84131a18fb07ad6dbe14ac78ec2b9eb42/src/measure.jl#L20-L26">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.TwoSiteObservable" href="#MPSDynamics.TwoSiteObservable"><code>MPSDynamics.TwoSiteObservable</code></a> — <span class="docstring-category">Type</span></header><section><div><pre><code class="language-julia">TwoSiteObservable(name,op1,op2,sites1=nothing,sites2=nothing)</code></pre><p>Computes the local expectation value of operators <code>op1</code> and <code>op2</code> where <code>op1</code> acts on sites1 and <code>op2</code> acts on sites2. Used to define several-site observables that are obs and convobs parameters for the <code>runsim</code> function.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/2d44f7a84131a18fb07ad6dbe14ac78ec2b9eb42/src/measure.jl#L52-L58">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.measure-Tuple{Any, OneSiteObservable}" href="#MPSDynamics.measure-Tuple{Any, OneSiteObservable}"><code>MPSDynamics.measure</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">measure(A, O; kwargs...)</code></pre><p>Measure observable <code>O</code> on mps state <code>A</code></p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/2d44f7a84131a18fb07ad6dbe14ac78ec2b9eb42/src/measure.jl#L132-L137">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.measure-Tuple{Vector, Vector}" href="#MPSDynamics.measure-Tuple{Vector, Vector}"><code>MPSDynamics.measure</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia"> measure(A::Vector, Os::Vector; kwargs...)</code></pre><p>Caculate expectation of Os on MPS A.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/2d44f7a84131a18fb07ad6dbe14ac78ec2b9eb42/src/measure.jl#L983-L988">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.measure1siteoperator-Tuple{Vector, Any, Int64}" href="#MPSDynamics.measure1siteoperator-Tuple{Vector, Any, Int64}"><code>MPSDynamics.measure1siteoperator</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">measure1siteoperator(A::Vector, O, site::Int)</code></pre><p>For a list of tensors <code>A</code> representing a right orthonormalized MPS, compute the local expectation value of a one-site operator O for a single site.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/2d44f7a84131a18fb07ad6dbe14ac78ec2b9eb42/src/measure.jl#L268-L273">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.measure1siteoperator-Tuple{Vector, Any, Tuple{Int64, Int64}}" href="#MPSDynamics.measure1siteoperator-Tuple{Vector, Any, Tuple{Int64, Int64}}"><code>MPSDynamics.measure1siteoperator</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">measure1siteoperator(A::Vector, O, chainsection::Tuple{Int64,Int64})</code></pre><p>For a list of tensors <code>A</code> representing a right orthonormalized MPS, compute the local expectation value of a one-site operator O for a chainsection.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/2d44f7a84131a18fb07ad6dbe14ac78ec2b9eb42/src/measure.jl#L212-L217">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.measure1siteoperator-Tuple{Vector, Any, Vector{Int64}}" href="#MPSDynamics.measure1siteoperator-Tuple{Vector, Any, Vector{Int64}}"><code>MPSDynamics.measure1siteoperator</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">measure1siteoperator(A::Vector, O, sites::Vector{Int})</code></pre><p>For a list of tensors <code>A</code> representing a right orthonormalized MPS, compute the local expectation value of a one-site operator O for every site or just one if it is specified.</p><p>For calculating operators on single sites this will be more efficient if the site is on the left of the mps.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/2d44f7a84131a18fb07ad6dbe14ac78ec2b9eb42/src/measure.jl#L187-L195">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.measure1siteoperator-Tuple{Vector, Any}" href="#MPSDynamics.measure1siteoperator-Tuple{Vector, Any}"><code>MPSDynamics.measure1siteoperator</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">measure1siteoperator(A::Vector, O)</code></pre><p>For a list of tensors <code>A</code> representing a right orthonormalized MPS, compute the local expectation value of a one-site operator O for every site.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/2d44f7a84131a18fb07ad6dbe14ac78ec2b9eb42/src/measure.jl#L247-L252">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.measure2siteoperator-Tuple{Vector, Any, Any, Int64, Int64}" href="#MPSDynamics.measure2siteoperator-Tuple{Vector, Any, Any, Int64, Int64}"><code>MPSDynamics.measure2siteoperator</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia"> measure2siteoperator(A::Vector, M1, M2, j1, j2)</code></pre><p>Caculate expectation of M1*M2 where M1 acts on site j1 and M2 acts on site j2, assumes A is right normalised.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/2d44f7a84131a18fb07ad6dbe14ac78ec2b9eb42/src/measure.jl#L285-L290">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.measure2siteoperator-Tuple{Vector, Any, Any, Vector{Int64}, Vector{Int64}}" href="#MPSDynamics.measure2siteoperator-Tuple{Vector, Any, Any, Vector{Int64}, Vector{Int64}}"><code>MPSDynamics.measure2siteoperator</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia"> measure2siteoperator(A::Vector, M1, M2, sites1::Vector{Int}, sites2::Vector{Int})</code></pre><p>Caculate expectation of M1*M2 where M1 acts on sites1 and M2 acts on sites2, assumes A is right normalised.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/2d44f7a84131a18fb07ad6dbe14ac78ec2b9eb42/src/measure.jl#L464-L469">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.measurempo-Tuple{Vector, Vector, Tuple{Int64, Int64}}" href="#MPSDynamics.measurempo-Tuple{Vector, Vector, Tuple{Int64, Int64}}"><code>MPSDynamics.measurempo</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">measurempo(A::Vector, M::Vector, sites::Tuples{Int,Int})</code></pre><p>For a list of tensors <code>A</code> representing a right orthonormalized MPS, compute the local expectation value of the MPO M on specified sites.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/2d44f7a84131a18fb07ad6dbe14ac78ec2b9eb42/src/measure.jl#L110-L116">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.measurempo-Tuple{Vector, Vector}" href="#MPSDynamics.measurempo-Tuple{Vector, Vector}"><code>MPSDynamics.measurempo</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">measurempo(A::Vector, M::Vector)</code></pre><p>For a list of tensors <code>A</code> representing a right orthonormalized MPS, compute the local expectation value of the MPO M on every site.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/2d44f7a84131a18fb07ad6dbe14ac78ec2b9eb42/src/measure.jl#L94-L100">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.rhoreduced_1site" href="#MPSDynamics.rhoreduced_1site"><code>MPSDynamics.rhoreduced_1site</code></a> — <span class="docstring-category">Function</span></header><section><div><pre><code class="language-julia"> rhoreduced_1site(A::Vector, site::Int=1)</code></pre><p>Caculate the reduced density matrix of the MPS A at the specified site.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/2d44f7a84131a18fb07ad6dbe14ac78ec2b9eb42/src/measure.jl#L1022-L1027">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.rhoreduced_2sites-Tuple{Vector, Tuple{Int64, Int64}}" href="#MPSDynamics.rhoreduced_2sites-Tuple{Vector, Tuple{Int64, Int64}}"><code>MPSDynamics.rhoreduced_2sites</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia"> rhoreduced_2sites(A::Vector, site::Tuple{Int, Int})</code></pre><p>Caculate the reduced density matrix of the MPS A of two neigbour sites. The resulting dimensions will be the four physical dimensions in total, corresponding to the dimensions of the two sites</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/2d44f7a84131a18fb07ad6dbe14ac78ec2b9eb42/src/measure.jl#L1046-L1052">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.measure-Tuple{Any, FockError}" href="#MPSDynamics.measure-Tuple{Any, FockError}"><code>MPSDynamics.measure</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">measure(A, obs::FockError; t=0, kwargs...)</code></pre><p>Return the measure of the observable obs on the MPS A. </p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/2d44f7a84131a18fb07ad6dbe14ac78ec2b9eb42/src/observables.jl#L20-L25">source</a></section></article><h2 id="Models-and-Hamiltonians-(MPO)"><a class="docs-heading-anchor" href="#Models-and-Hamiltonians-(MPO)">Models and Hamiltonians (MPO)</a><a id="Models-and-Hamiltonians-(MPO)-1"></a><a class="docs-heading-anchor-permalink" href="#Models-and-Hamiltonians-(MPO)" title="Permalink"></a></h2><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.chaincoeffs_ohmic-Tuple{Any, Any, Any}" href="#MPSDynamics.chaincoeffs_ohmic-Tuple{Any, Any, Any}"><code>MPSDynamics.chaincoeffs_ohmic</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">chaincoeffs_ohmic(N, α, s; ωc=1, soft=false)</code></pre><p>Generate chain coefficients <span>$[[ϵ_0,ϵ_1,...],[t_0,t_1,...],c_0]$</span> for an Harmonic bath at zero temperature with a power law spectral density given by:</p><p>soft cutoff: <span>$J(ω) = 2αω_c (\frac{ω}{ω_c})^s \exp(-ω/ω_c)$</span> </p><p>hard cutoff: <span>$J(ω) = 2αω_c (\frac{ω}{ω_c})^s θ(ω-ω_c)$</span></p><p>The coefficients parameterise the chain Hamiltonian</p><p><span>$H = H_S + c_0 A_S⊗B_0+\sum_{i=0}^{N-1}t_i (b_{i+1}^\dagger b_i +h.c.) + \sum_{i=0}^{N} ϵ_ib_i^\dagger b_i$</span></p><p>which is unitarily equivalent (before the truncation to <code>N</code> sites) to</p><p><span>$H = H_S + A_S⊗\int_0^∞dω\sqrt{J(ω)}B_ω + \int_0^∞dωωb_ω^\dagger b_ω$</span>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/2d44f7a84131a18fb07ad6dbe14ac78ec2b9eb42/src/models.jl#L483-L505">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.correlatedenvironmentmpo-Tuple{Vector, Int64, Int64}" href="#MPSDynamics.correlatedenvironmentmpo-Tuple{Vector, Int64, Int64}"><code>MPSDynamics.correlatedenvironmentmpo</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">correlatedenvironmentmpo(R::Vector, Nm::Int, d::Int; chainparams, fnamecc::String, s=1, α=1, ωc=1, c_phonon=1, β="inf", issoft=false)</code></pre><p>Generate a MPO for a one-dimensional bosonic bath spatially correlated to a multi-component system </p><p><span>$H_B + H_{int} = \int_{-∞}^{+∞} dk ω_k b_k^\dagger b_k + ∑_j \int_{-∞}^{+∞}dk \sqrt{J(k)}(A_j b_k e^{i k R_j} + h.c.)$</span>.</p><p>The interactions between the system and the chain-mapped bath are long range, i.e. each site interacts with all the chain modes. The spectral density is assumed to be Ohmic <span>$J(ω) = 2αωc(ω/ωc)^s$</span>.</p><p><strong>Arguments</strong></p><ul><li><code>R</code>: List of system's components positions</li><li><code>Nm</code>: Number of chain modes. The actual number of mode will be doubled to account for the left and right moving excitations.</li><li><code>d</code>: Local Hilbert space dimension of the bath modes</li><li><code>chainparams</code>: chain parameters, of the form <code>chainparams</code>=<span>$[[ϵ_0,ϵ_1,...],[t_0,t_1,...],c_0]$</span>, can be chosen to represent any arbitrary spectral density <span>$J(ω)$</span> at any temperature.</li><li><code>fnamecc</code>: Path to a file containing pre-computed long-range coupling coefficient. If not provided, the coupling coefficients will be computed and stored.</li><li><code>s</code>: Ohmicity</li><li><code>α</code>: Kondo parameter</li><li><code>ωc</code>: Bath cut-off frequency</li><li><code>c_phonon</code>: Speed of sound in the bath</li><li><code>β</code>: Inverse temperature </li><li><code>issoft</code>: Is the cut-off of the Ohmic SD soft or hard?</li></ul></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/2d44f7a84131a18fb07ad6dbe14ac78ec2b9eb42/src/models.jl#L970-L994">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.hbathchain-Tuple{Int64, Int64, Any, Vararg{Any}}" href="#MPSDynamics.hbathchain-Tuple{Int64, Int64, Any, Vararg{Any}}"><code>MPSDynamics.hbathchain</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">hbathchain(N::Int, d::Int, chainparams, longrangecc...; tree=false, reverse=false, coupletox=false)</code></pre><p>Generate MPO representing a tight-binding chain of <code>N</code> oscillators with <code>d</code> Fock states each. Chain parameters are supplied in the standard form: <code>chainparams</code> <span>$=[[ϵ_0,ϵ_1,...],[t_0,t_1,...],c_0]$</span>. The output does not itself represent a complete MPO but will possess an end which is <em>open</em> and should be attached to another tensor site, usually representing the <em>system</em>.</p><p><strong>Arguments</strong></p><ul><li><code>reverse</code>: If <code>reverse=true</code> create a chain were the last (i.e. Nth) site is the site which couples to the system</li><li><code>coupletox</code>: Used to choose the form of the system coupling. <code>coupletox=true</code> gives a non-number conserving coupling of the form <span>$H_{\text{I}}= A_{\text{S}}(b_{0}^\dagger + b_0)$</span> where <span>$A_{\text{S}}$</span> is a system operator, while <code>coupletox=false</code> gives the number-converving coupling <span>$H_{\text{I}}=(A_{\text{S}} b_{0}^\dagger + A_{\text{S}}^\dagger b_0)$</span></li><li><code>tree</code>: If <code>true</code> the resulting chain will be of type <code>TreeNetwork</code>; useful for construcing tree-MPOs </li></ul><p><strong>Example</strong></p><p>One can constuct a system site tensor to couple to a chain by using the function <code>up</code> to populate the tensor. For example, to construct a system site with Hamiltonian <code>Hs</code> and coupling operator <code>As</code>, the system tensor <code>M</code> is constructed as follows for a non-number conserving interaction:</p><pre><code class="language-julia">u = one(Hs) # system identity M = zeros(1,3,2,2) M[1, :, :, :] = up(Hs, As, u)</code></pre><p>The full MPO can then be constructed with:</p><pre><code class="language-julia">Hmpo = [M, hbathchain(N, d, chainparams, coupletox=true)...]</code></pre><p>Similarly for a number conserving interaction the site tensor would look like:</p><pre><code class="language-julia">u = one(Hs) # system identity M = zeros(1,4,2,2) -M[1, :, :, :] = up(Hs, As, As', u)</code></pre><p>And the full MPO would be</p><pre><code class="language-julia">Hmpo = [M, hbathchain(N, d, chainparams; coupletox=false)...]</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/78f952b07039bfc34f43e6afc0237f8367e64697/src/models.jl#L180-L216">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.heisenbergmpo" href="#MPSDynamics.heisenbergmpo"><code>MPSDynamics.heisenbergmpo</code></a> — <span class="docstring-category">Function</span></header><section><div><pre><code class="language-julia">heisenbergmpo(N::Int, J=1.0) = xyzmpo(N; Jx=J)</code></pre><p>Generate MPO for the <code>N</code>-spin Heisenberg XXX model, defined by the Hamiltonian</p><p><span>$H = \sum_{n=1}^{N-1} -J σ_x^{n} σ_x^{n+1} - J σ_y^{n} σ_y^{n+1} - J σ_z^{n} σ_z^{n+1}$</span></p><p>with <span>$σ_x^{n}, σ_y^{n}, σ_z^{n}$</span> the Pauli spin-1/2 matrices of the <span>$n^\text{th}$</span> site.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/78f952b07039bfc34f43e6afc0237f8367e64697/src/models.jl#L55-L67">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.ibmmpo-NTuple{4, Any}" href="#MPSDynamics.ibmmpo-NTuple{4, Any}"><code>MPSDynamics.ibmmpo</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">ibmmpo(ω0, d, N, chainparams; tree=false)</code></pre><p>Generate MPO for a spin-1/2 coupled to a chain of harmonic oscillators with the interacting boson model (IBM), defined by the Hamiltonian</p><p><span>$H = \frac{ω_0}{2}σ_z + c_0σ_z(b_0^\dagger+b_0) + \sum_{i=0}^{N-1} t_i (b_{i+1}^\dagger b_i +h.c.) + \sum_{i=0}^{N} ϵ_ib_i^\dagger b_i$</span>.</p><p>The spin is on site 1 of the MPS and the bath modes are to the right.</p><p>This Hamiltonain is unitarily equivalent (before the truncation to <code>N</code> sites) to the spin-boson Hamiltonian defined by</p><p><span>$H = \frac{ω_0}{2}σ_z + σ_z\int_0^∞ dω\sqrt{J(ω)}(b_ω^\dagger+b_ω) + \int_0^∞ dω ωb_ω^\dagger b_ω$</span>.</p><p>The chain parameters, supplied by <code>chainparams</code>=<span>$[[ϵ_0,ϵ_1,...],[t_0,t_1,...],c_0]$</span>, can be chosen to represent any arbitrary spectral density <span>$J(ω)$</span> at any temperature.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/78f952b07039bfc34f43e6afc0237f8367e64697/src/models.jl#L553-L572">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.interleaved_tightbinding_mpo-NTuple{4, Any}" href="#MPSDynamics.interleaved_tightbinding_mpo-NTuple{4, Any}"><code>MPSDynamics.interleaved_tightbinding_mpo</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">interleaved_tightbinding_mpo(N, ϵd, chainparams1, chainparams2)</code></pre><p>Generate MPO for a tight-binding chain of N fermionic sites with a single impurity site (fermionic as well) of energy ϵd. The impurity is coupled to two leads, each described by a set of chain parameters. The interactions are next-nearest-neighbour, with the first site corresponding to the impurity, and the two chains organised in an interleaved fashion.</p><p><strong>Arguments</strong></p><ul><li><code>N::Int</code>: number of sites in the chain</li><li><code>ϵd::Real</code>: energy of the impurity site at the first site, as Ed - μ, where μ is the chemical potential</li><li>chainparams1::Array{Real,1}: chain parameters for the first lead</li><li>chainparams2::Array{Real,1}: chain parameters for the second lead</li></ul><p>The chain parameters are given in the standard form: <code>chainparams</code> <span>$=[[ϵ_0,ϵ_1,...],[t_0,t_1,...],c_0]$</span>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/78f952b07039bfc34f43e6afc0237f8367e64697/src/models.jl#L839-L855">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.isingmpo-Tuple{Int64}" href="#MPSDynamics.isingmpo-Tuple{Int64}"><code>MPSDynamics.isingmpo</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">isingmpo(N; J=1.0, h=1.0)</code></pre><p>Generate MPO for the <code>N</code>-spin 1D Ising model with external field <span>$\vec{h} = (0,0,h)$</span>, defined by the Hamiltonian</p><p><span>$H = \sum_{n=1}^{N-1} -J_x σ_x^{n} σ_x^{n+1} + \sum_{n=1}^{N}(- h_z σ_z^{n})$</span></p><p>with <span>$σ_x^{n}, σ_y^{n}, σ_z^{n}$</span> the Pauli spin-1/2 matrices of the <span>$n^\text{th}$</span> site.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/78f952b07039bfc34f43e6afc0237f8367e64697/src/models.jl#L42-L53">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.longrange_isingmpo" href="#MPSDynamics.longrange_isingmpo"><code>MPSDynamics.longrange_isingmpo</code></a> — <span class="docstring-category">Function</span></header><section><div><pre><code class="language-julia">longrange_isingmpo(N::Int, α::Float64=0.; J=1.0, h=1.0) = longrange_xyzmpo(N, α; Jx=J, Jy=0., Jz=0., hz=h, hx=0.)</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/78f952b07039bfc34f43e6afc0237f8367e64697/src/models.jl#L121-L124">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.longrange_xyzmpo" href="#MPSDynamics.longrange_xyzmpo"><code>MPSDynamics.longrange_xyzmpo</code></a> — <span class="docstring-category">Function</span></header><section><div><pre><code class="language-julia">longrange_xyzmpo(N::Int, α::Float64=0.; Jx=1.0, Jy=Jx, Jz=Jx, hx=0., hz=0.)</code></pre><p>Gennerate MPO for the <code>N</code>-spin long-range XYZ model with external field <span>$\vec{h}=(h_x, 0, h_z)$</span>, , defined by the Hamiltonian</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/78f952b07039bfc34f43e6afc0237f8367e64697/src/models.jl#L83-L89">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.nearestneighbourmpo" href="#MPSDynamics.nearestneighbourmpo"><code>MPSDynamics.nearestneighbourmpo</code></a> — <span class="docstring-category">Function</span></header><section><div><pre><code class="language-julia">nearestneighbourmpo(N::Int, h0, A, Ad = A')</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/78f952b07039bfc34f43e6afc0237f8367e64697/src/models.jl#L627-L634">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.nearestneighbourmpo" href="#MPSDynamics.nearestneighbourmpo"><code>MPSDynamics.nearestneighbourmpo</code></a> — <span class="docstring-category">Function</span></header><section><div><pre><code class="language-julia">nearestneighbourmpo(tree_::Tree, h0, A, Ad = A')</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/78f952b07039bfc34f43e6afc0237f8367e64697/src/models.jl#L651-L658">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.protontransfermpo-NTuple{11, Any}" href="#MPSDynamics.protontransfermpo-NTuple{11, Any}"><code>MPSDynamics.protontransfermpo</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">protontransfermpo(ω0e,ω0k,x0e,x0k, Δ, dRC, d, N, chainparams, RCparams, λreorg)</code></pre><p>Generate a MPO for a system described in space with a reaction coordinate (RC) tensor. The Hamiltonian of the two-level system and of the reaction coordinate tensor reads </p><p><span>$H_S + H_{RC} + H_{int}^{S-RC} = \omega^0_{e} |e\rangle \langle e| + \omega^0_{k} |k\rangle \langle k| + \Delta (|e\rangle \langle k| + |k\rangle \langle e|) + \omega_{RC} (d^{\dagger}d + \frac{1}{2}) + g_{e} |e\rangle \langle e|( d + d^{\dagger})+ g_{k} |k \rangle \langle k|( d + d^{\dagger})$</span> The RC tensor is coupled to a bosonic bath, taking into account the induced reorganization energy <span>$H_B + H_{int}^{RC-B} = \int_{-∞}^{+∞} dk ω_k b_k^\dagger b_k - (d + d^{\dagger})\int_0^∞ dω\sqrt{J(ω)}(b_ω^\dagger+b_ω) + \lambda_{reorg}(d + d^{\dagger})^2$</span> with <span>$\lambda_{reorg} = \int \frac{J(\omega)}{\omega}d\omega.$</span></p><p><strong>Arguments</strong></p><ul><li><code>ω0e</code>: enol energy at reaction coordinate value x=0 </li><li><code>ω0k</code>: keto energy at reaction coordinate value x=0</li><li><code>x0e</code>: enol equilibrium displacement</li><li><code>x0k</code>: keto equilibrium displacement </li><li><code>Δ</code>: direct coupling between enol and keto</li><li><code>dRC</code>: fock space of the RC tensor </li><li><code>d</code>: number of Fock states of the chain modes</li><li><code>N</code>: length of the bosonic chain</li><li><code>chainparams</code>: chain parameters, of the form <code>chainparams</code>=<span>$[[ϵ_0,ϵ_1,...],[t_0,t_1,...],c_0]$</span>, can be chosen to represent any arbitrary spectral density <span>$J(ω)$</span> at any temperature. </li><li><code>RCparams</code>: RC tensor parameter, of the form <code>RCparams</code>=<span>$[ω_RC,-g/x]$</span> </li><li><code>λreorg</code>: reorganization energy</li></ul></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/78f952b07039bfc34f43e6afc0237f8367e64697/src/models.jl#L1315-L1345">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.puredephasingmpo-NTuple{4, Any}" href="#MPSDynamics.puredephasingmpo-NTuple{4, Any}"><code>MPSDynamics.puredephasingmpo</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">puredephasingmpo(ΔE, dchain, Nchain, chainparams; tree=false)</code></pre><p>Generate MPO for a pure dephasing model, defined by the Hamiltonian <span>$H = \frac{ΔE}{2} σ_z + \frac{σ_z}{2} c_0 (b_0^\dagger + b_0) + \sum_{i=0}^{N-1} t_i (b_{i+1}^\dagger b_i +h.c.) + \sum_{i=0}^{N-1} ϵ_i b_i^\dagger b_i$</span></p><p>The spin is on site 1 of the MPS and the bath modes are to the right.</p><p><strong>Arguments</strong></p><ul><li><code>ΔE::Real</code>: energy splitting of the spin</li><li><code>dchain::Int</code>: physical dimension of the chain sites truncated Hilbert spaces</li><li><code>Nchain::Int</code>: number of sites in the chain</li><li><code>chainparams::Array{Real,1}</code>: chain parameters for the bath chain. The chain parameters are given in the standard form: <code>chainparams</code> <span>$=[[ϵ_0,ϵ_1,...],[t_0,t_1,...],c_0]$</span>.</li><li><code>tree::Bool</code>: if true, return a <code>TreeNetwork</code> object, otherwise return a vector of MPO tensors</li></ul></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/78f952b07039bfc34f43e6afc0237f8367e64697/src/models.jl#L690-L704">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.readchaincoeffs-Tuple{Any, Vararg{Any}}" href="#MPSDynamics.readchaincoeffs-Tuple{Any, Vararg{Any}}"><code>MPSDynamics.readchaincoeffs</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">readchaincoeffs(fdir, params...)</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/78f952b07039bfc34f43e6afc0237f8367e64697/src/models.jl#L525-L531">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.spinbosonmpo-NTuple{5, Any}" href="#MPSDynamics.spinbosonmpo-NTuple{5, Any}"><code>MPSDynamics.spinbosonmpo</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">spinbosonmpo(ω0, Δ, d, N, chainparams; rwa=false, tree=false)</code></pre><p>Generate MPO for a spin-1/2 coupled to a chain of harmonic oscillators, defined by the Hamiltonian</p><p><span>$H = \frac{ω_0}{2}σ_z + Δσ_x + c_0σ_x(b_0^\dagger+b_0) + \sum_{i=0}^{N-1} t_i (b_{i+1}^\dagger b_i +h.c.) + \sum_{i=0}^{N} ϵ_ib_i^\dagger b_i$</span>.</p><p>The spin is on site 1 of the MPS and the bath modes are to the right.</p><p>This Hamiltonain is unitarily equivalent (before the truncation to <code>N</code> sites) to the spin-boson Hamiltonian defined by</p><p><span>$H = \frac{ω_0}{2}σ_z + Δσ_x + σ_x\int_0^∞ dω\sqrt{J(ω)}(b_ω^\dagger+b_ω) + \int_0^∞ dω ωb_ω^\dagger b_ω$</span>.</p><p>The chain parameters, supplied by <code>chainparams</code>=<span>$[[ϵ_0,ϵ_1,...],[t_0,t_1,...],c_0]$</span>, can be chosen to represent any arbitrary spectral density <span>$J(ω)$</span> at any temperature.</p><p>The rotating wave approximation can be made by setting <code>rwa=true</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/78f952b07039bfc34f43e6afc0237f8367e64697/src/models.jl#L398-L419">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.spinchainmpo-Tuple{Int64}" href="#MPSDynamics.spinchainmpo-Tuple{Int64}"><code>MPSDynamics.spinchainmpo</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">spinchainmpo(N::Int; J=1.0, hz=1.0, hx=0.0, i=div(N,2))</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/78f952b07039bfc34f43e6afc0237f8367e64697/src/models.jl#L127-L131">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.tightbinding_mpo-NTuple{4, Any}" href="#MPSDynamics.tightbinding_mpo-NTuple{4, Any}"><code>MPSDynamics.tightbinding_mpo</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">tightbinding_mpo(N, ϵd, chainparams1, chainparams2)</code></pre><p>Generate MPO for a tight-binding chain of N fermionic sites with a single impurity site (fermionic as well) of energy ϵd at the center. The impurity is coupled to two leads, each described by a set of chain parameters. The interactions are nearest-neighbour, with the first N/2-1 sites corresponding to the first lead, the Nth site corresponding to the impurity, and the rest of the sites corresponding to the second lead.</p><p><strong>Arguments</strong></p><ul><li><code>N::Int</code>: number of sites in the chain</li><li><code>ϵd::Real</code>: energy of the impurity site at the center, as Ed - μ, where μ is the chemical potential</li><li><code>chainparams1::Array{Real,1}</code>: chain parameters for the first lead</li><li><code>chainparams2::Array{Real,1}</code>: chain parameters for the second lead</li></ul><p>The chain parameters are given in the standard form: <code>chainparams</code> <span>$=[[ϵ_0,ϵ_1,...],[t_0,t_1,...],c_0]$</span>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/78f952b07039bfc34f43e6afc0237f8367e64697/src/models.jl#L719-L734">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.tightbindingmpo-Tuple{Int64, Int64}" href="#MPSDynamics.tightbindingmpo-Tuple{Int64, Int64}"><code>MPSDynamics.tightbindingmpo</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">tightbindingmpo(N::Int, d::Int; J=1.0, e=1.0)</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/78f952b07039bfc34f43e6afc0237f8367e64697/src/models.jl#L156-L161">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.tunnelingmpo-Tuple{Any, Any, Any, Any, Any, Int64, Int64}" href="#MPSDynamics.tunnelingmpo-Tuple{Any, Any, Any, Any, Any, Int64, Int64}"><code>MPSDynamics.tunnelingmpo</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">tunnelingmpo(ϵ, delta, α, s, β, d::Int, nummodes::Int; tree=false, ωc=1)</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/78f952b07039bfc34f43e6afc0237f8367e64697/src/models.jl#L595-L602">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.twobathspinmpo" href="#MPSDynamics.twobathspinmpo"><code>MPSDynamics.twobathspinmpo</code></a> — <span class="docstring-category">Function</span></header><section><div><pre><code class="language-julia">twobathspinmpo(ω0, Δ, Nl, Nr, dl, dr, chainparamsl=[fill(1.0,N),fill(1.0,N-1), 1.0], chainparamsr=chainparamsl; tree=false)</code></pre><p>Generate MPO for a spin-1/2 coupled to two chains of harmonic oscillators, defined by the Hamiltonian</p><p><span>$H = \frac{ω_0}{2}σ_z + Δσ_x + c_0^rσ_x(b_0^\dagger+b_0) + \sum_{i=0}^{N_r-1} t_i^r (b_{i+1}^\dagger b_i +h.c.) + \sum_{i=0}^{N_r} ϵ_i^rb_i^\dagger b_i + c_0^lσ_x(d_0^\dagger+d_0) + \sum_{i=0}^{N_l-1} t_i^l (d_{i+1}^\dagger d_i +h.c.) + \sum_{i=0}^{N_l} ϵ_i^l d_i^\dagger d_i$</span>.</p><p>The spin is on site <span>$N_l + 1$</span> of the MPS, surrounded by the left chain modes and the right chain modes.</p><p>This Hamiltonain is unitarily equivalent (before the truncation to <code>N</code> sites) to the spin-boson Hamiltonian defined by</p><p><span>$H = \frac{ω_0}{2}σ_z + Δσ_x + σ_x\int_0^∞ dω\sqrt{J(ω)}(b_ω^\dagger+b_ω) + \int_0^∞ dω ωb_ω^\dagger b_ωi + σ_x\int_0^∞ dω\sqrt{J^l(ω)}(d_ω^\dagger+d_ω) + \int_0^∞ dω ωd_ω^\dagger d_ω$</span>.</p><p>The chain parameters, supplied by <code>chainparams</code>=<span>$[[ϵ_0,ϵ_1,...],[t_0,t_1,...],c_0]$</span>, can be chosen to represent any arbitrary spectral density <span>$J(ω)$</span> at any temperature. The two chains can have a different spectral density.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/78f952b07039bfc34f43e6afc0237f8367e64697/src/models.jl#L446-L465">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.xxzmpo" href="#MPSDynamics.xxzmpo"><code>MPSDynamics.xxzmpo</code></a> — <span class="docstring-category">Function</span></header><section><div><pre><code class="language-julia">xxzmpo(N::Int, Δ = 1.0, J=1.0) = xyzmpo(N; Jx=J, Jy=J, Jz=J*Δ)</code></pre><p>Generate MPO for the <code>N</code>-spin XXZ model, defined by the Hamiltonian</p><p><span>$H = \sum_{n=1}^{N-1} -J σ_x^{n} σ_x^{n+1} - J σ_y^{n} σ_y^{n+1} - \Delta J σ_z^{n} σ_z^{n+1}$</span></p><p>with <span>$σ_x^{n}, σ_y^{n}, σ_z^{n}$</span> the Pauli spin-1/2 matrices of the <span>$n^\text{th}$</span> site.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/78f952b07039bfc34f43e6afc0237f8367e64697/src/models.jl#L69-L80">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.xyzmpo-Tuple{Int64}" href="#MPSDynamics.xyzmpo-Tuple{Int64}"><code>MPSDynamics.xyzmpo</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">xyzmpo(N::Int; Jx=1.0, Jy=Jx, Jz=Jx, hx=0., hz=0.)</code></pre><p>Generate MPO for the <code>N</code>-spin XYZ model with external field <span>$\vec{h}=(h_x, 0, h_z)$</span>, , defined by the Hamiltonian</p><p><span>$H = \sum_{n=1}^{N-1} -J_x σ_x^{n} σ_x^{n+1} - J_y σ_y^{n} σ_y^{n+1} - J_z σ_z^{n} σ_z^{n+1} + \sum_{n=1}^{N}(- h_x σ_x^{n} - h_z σ_z^{n})$</span></p><p>with <span>$σ_x^{n}, σ_y^{n}, σ_z^{n}$</span> the Pauli spin-1/2 matrices of the <span>$n^\text{th}$</span> site.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/78f952b07039bfc34f43e6afc0237f8367e64697/src/models.jl#L4-L15">source</a></section></article><h2 id="Chain-Mapping"><a class="docs-heading-anchor" href="#Chain-Mapping">Chain-Mapping</a><a id="Chain-Mapping-1"></a><a class="docs-heading-anchor-permalink" href="#Chain-Mapping" title="Permalink"></a></h2><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.chaincoeffs_fermionic-Tuple{Any, Any, Any}" href="#MPSDynamics.chaincoeffs_fermionic-Tuple{Any, Any, Any}"><code>MPSDynamics.chaincoeffs_fermionic</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">chaincoeffs_fermionic(nummodes, β, chain; ϵ=x, ωc=1, mc=4, mp=0, AB=nothing, iq=1, idelta=2, procedure=:Lanczos, Mmax=5000, save=true)</code></pre><p>Generate chain coefficients <span>$[[ϵ_0,ϵ_1,...],[t_0,t_1,...],c_0]$</span> for a fermionic bath at the inverse temperature β.</p><p><strong>Arguments</strong></p><ul><li>nummodes: Number of bath modes</li><li>β: inverse temperature</li><li>chain: 1 if the chain modes are empty, 2 if the chain modes are filled</li><li>ϵ: user-provided dispersion relation. Should be a function f(x) where x is the wavenumber</li><li>J: user-provided spectral density. Should be a function f(x) where x is the wavenumber</li><li>ωc: the maximum frequency allowwed in the spectral density</li><li>mc: the number of component intervals</li><li>mp: the number of points in the discrete part of the measure (mp=0 if there is none)</li><li>iq: a parameter to be set equal to 1, if the user provides his or her own quadrature routine, and different from 1 otherwise</li><li>idelta: a parameter whose default value is 1, but is preferably set equal to 2, if iq=1 and the user provides Gauss-type quadrature routines</li><li>procedure: choice between the Stieltjes and the Lanczos procedure</li><li>AB: component intervals</li><li>Mmax: maximum number of integration points</li><li>save: if true the coefficients are saved</li></ul></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/78f952b07039bfc34f43e6afc0237f8367e64697/src/finitetemperature.jl#L120-L140">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.chaincoeffs_finiteT" href="#MPSDynamics.chaincoeffs_finiteT"><code>MPSDynamics.chaincoeffs_finiteT</code></a> — <span class="docstring-category">Function</span></header><section><div><pre><code class="language-julia">chaincoeffs_finiteT(nummodes, β, ohmic=true; α, s, J, ωc=1, mc=4, mp=0, AB=nothing, iq=1, idelta=2, procedure=:Lanczos, Mmax=5000, save=true)</code></pre><p>Generate chain coefficients <span>$[[ϵ_0,ϵ_1,...],[t_0,t_1,...],c_0]$</span> for a harmonic bath at the inverse temperature β.</p><p>By default a Ohmic spectral density <span>$J(ω) = 2αω_c (\frac{ω}{ω_c})^s θ(ω-ω_c)$</span> is considered. Users can provide their own spectral density.</p><p><strong>Arguments</strong></p><ul><li>nummodes: Number of bath modes</li><li>β: inverse temperature</li><li>ohmic: true if the spectral density is Ohmic, false if the user provides its own spectral density</li><li>α: Kondo parameter of the Ohmic spectral density </li><li>s: ohmicity</li><li>J: user-provided spectral density. Should be a function f(x,i) where x is the frequency and i ∈ {1,...,mc} labels the intervals on which the SD is defined</li><li>ωc: the maximum frequency of the Ohmic spectral density</li><li>mc: the number of component intervals</li><li>mp: the number of points in the discrete part of the measure (mp=0 if there is none)</li><li>iq: a parameter to be set equal to 1, if the user provides his or her own quadrature routine, and different from 1 otherwise</li><li>idelta: a parameter whose default value is 1, but is preferably set equal to 2, if iq=1 and the user provides Gauss-type quadrature routines</li><li>procedure: choice between the Stieltjes and the Lanczos procedure</li><li>AB: component intervals</li><li>Mmax: maximum number of integration points</li><li>save: if true the coefficients are saved</li></ul></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/78f952b07039bfc34f43e6afc0237f8367e64697/src/finitetemperature.jl#L6-L30">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.gauss-Tuple{Any, Any}" href="#MPSDynamics.gauss-Tuple{Any, Any}"><code>MPSDynamics.gauss</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">gauss(N,ab)</code></pre><p>Gauss quadrature rule for <code>N</code> sites on an interval <code>ab</code>. Given a weight function w encoded by the <code>N</code>x2 array <code>ab</code> of the first <code>N</code> recurrence coefficients for the associated orthogonal polynomials, the first column of <code>ab</code> containing the <code>N</code> alpha-coefficients and the second column the <code>N</code> beta-coefficients, the call xw = gauss(N,ab) generates the nodes and weights xw of the <code>N</code>-point Gauss quadrature rule for the weight function w. The nodes, in increasing order, are stored in the first column, the n corresponding weights in the second column, of the <code>N</code>x2 array xw.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/78f952b07039bfc34f43e6afc0237f8367e64697/ChainOhmT/gauss.jl#L3-L10">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.lanczos-Tuple{Any, Any}" href="#MPSDynamics.lanczos-Tuple{Any, Any}"><code>MPSDynamics.lanczos</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">lanczos(N,xw)</code></pre><p>Given the discrete inner product whose nodes are contained in the first column, and whose weights are contained in the second column, of the <code>N</code>x2 array <code>xw</code>, the call ab=lanczos(N,xw) generates the first <code>N</code> recurrence coefficients ab of the corresponding discrete orthogonal polynomials. The <code>N</code> alpha-coefficients are stored in the first column, the <code>N</code> beta-coefficients in the second column, of the <code>N</code>x2 array ab.</p><p>The script is adapted from the routine RKPW in W.B. Gragg and W.J. Harrod, ``The numerically stable reconstruction of Jacobi matrices from spectral data'', Numer. Math. 44 (1984), 317-335.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/78f952b07039bfc34f43e6afc0237f8367e64697/ChainOhmT/lanczos.jl#L1-L8">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.stieltjes-Tuple{Any, Any}" href="#MPSDynamics.stieltjes-Tuple{Any, Any}"><code>MPSDynamics.stieltjes</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">stieltjes(N,xw)</code></pre><p>Discretized Stieltjes procedure. Given the discrete inner product whose nodes are contained in the first column, and whose weights are contained in the second column, of the <code>N</code>x2 array <code>xw</code>, the call ab=stieltjes(N,xw) generates the first <code>N</code> recurrence coefficients ab of the corresponding discrete orthogonal polynomials. The <code>N</code> alpha- coefficients are stored in the first column, the <code>N</code> beta-coefficients in the second column, of the <code>N</code>x2 array ab.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/78f952b07039bfc34f43e6afc0237f8367e64697/ChainOhmT/stieltjes.jl#L1-L6">source</a></section></article><h2 id="Dynamics-propagation-function"><a class="docs-heading-anchor" href="#Dynamics-propagation-function">Dynamics propagation function</a><a id="Dynamics-propagation-function-1"></a><a class="docs-heading-anchor-permalink" href="#Dynamics-propagation-function" title="Permalink"></a></h2><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.runsim-NTuple{4, Any}" href="#MPSDynamics.runsim-NTuple{4, Any}"><code>MPSDynamics.runsim</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">runsim(dt, tmax, A, H; +M[1, :, :, :] = up(Hs, As, As', u)</code></pre><p>And the full MPO would be</p><pre><code class="language-julia">Hmpo = [M, hbathchain(N, d, chainparams; coupletox=false)...]</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/2d44f7a84131a18fb07ad6dbe14ac78ec2b9eb42/src/models.jl#L180-L216">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.heisenbergmpo" href="#MPSDynamics.heisenbergmpo"><code>MPSDynamics.heisenbergmpo</code></a> — <span class="docstring-category">Function</span></header><section><div><pre><code class="language-julia">heisenbergmpo(N::Int, J=1.0) = xyzmpo(N; Jx=J)</code></pre><p>Generate MPO for the <code>N</code>-spin Heisenberg XXX model, defined by the Hamiltonian</p><p><span>$H = \sum_{n=1}^{N-1} -J σ_x^{n} σ_x^{n+1} - J σ_y^{n} σ_y^{n+1} - J σ_z^{n} σ_z^{n+1}$</span></p><p>with <span>$σ_x^{n}, σ_y^{n}, σ_z^{n}$</span> the Pauli spin-1/2 matrices of the <span>$n^\text{th}$</span> site.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/2d44f7a84131a18fb07ad6dbe14ac78ec2b9eb42/src/models.jl#L55-L67">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.ibmmpo-NTuple{4, Any}" href="#MPSDynamics.ibmmpo-NTuple{4, Any}"><code>MPSDynamics.ibmmpo</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">ibmmpo(ω0, d, N, chainparams; tree=false)</code></pre><p>Generate MPO for a spin-1/2 coupled to a chain of harmonic oscillators with the interacting boson model (IBM), defined by the Hamiltonian</p><p><span>$H = \frac{ω_0}{2}σ_z + c_0σ_z(b_0^\dagger+b_0) + \sum_{i=0}^{N-1} t_i (b_{i+1}^\dagger b_i +h.c.) + \sum_{i=0}^{N} ϵ_ib_i^\dagger b_i$</span>.</p><p>The spin is on site 1 of the MPS and the bath modes are to the right.</p><p>This Hamiltonain is unitarily equivalent (before the truncation to <code>N</code> sites) to the spin-boson Hamiltonian defined by</p><p><span>$H = \frac{ω_0}{2}σ_z + σ_z\int_0^∞ dω\sqrt{J(ω)}(b_ω^\dagger+b_ω) + \int_0^∞ dω ωb_ω^\dagger b_ω$</span>.</p><p>The chain parameters, supplied by <code>chainparams</code>=<span>$[[ϵ_0,ϵ_1,...],[t_0,t_1,...],c_0]$</span>, can be chosen to represent any arbitrary spectral density <span>$J(ω)$</span> at any temperature.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/2d44f7a84131a18fb07ad6dbe14ac78ec2b9eb42/src/models.jl#L553-L572">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.interleaved_tightbinding_mpo-NTuple{4, Any}" href="#MPSDynamics.interleaved_tightbinding_mpo-NTuple{4, Any}"><code>MPSDynamics.interleaved_tightbinding_mpo</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">interleaved_tightbinding_mpo(N, ϵd, chainparams1, chainparams2)</code></pre><p>Generate MPO for a tight-binding chain of N fermionic sites with a single impurity site (fermionic as well) of energy ϵd. The impurity is coupled to two leads, each described by a set of chain parameters. The interactions are next-nearest-neighbour, with the first site corresponding to the impurity, and the two chains organised in an interleaved fashion.</p><p><strong>Arguments</strong></p><ul><li><code>N::Int</code>: number of sites in the chain</li><li><code>ϵd::Real</code>: energy of the impurity site at the first site, as Ed - μ, where μ is the chemical potential</li><li>chainparams1::Array{Real,1}: chain parameters for the first lead</li><li>chainparams2::Array{Real,1}: chain parameters for the second lead</li></ul><p>The chain parameters are given in the standard form: <code>chainparams</code> <span>$=[[ϵ_0,ϵ_1,...],[t_0,t_1,...],c_0]$</span>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/2d44f7a84131a18fb07ad6dbe14ac78ec2b9eb42/src/models.jl#L839-L855">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.isingmpo-Tuple{Int64}" href="#MPSDynamics.isingmpo-Tuple{Int64}"><code>MPSDynamics.isingmpo</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">isingmpo(N; J=1.0, h=1.0)</code></pre><p>Generate MPO for the <code>N</code>-spin 1D Ising model with external field <span>$\vec{h} = (0,0,h)$</span>, defined by the Hamiltonian</p><p><span>$H = \sum_{n=1}^{N-1} -J_x σ_x^{n} σ_x^{n+1} + \sum_{n=1}^{N}(- h_z σ_z^{n})$</span></p><p>with <span>$σ_x^{n}, σ_y^{n}, σ_z^{n}$</span> the Pauli spin-1/2 matrices of the <span>$n^\text{th}$</span> site.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/2d44f7a84131a18fb07ad6dbe14ac78ec2b9eb42/src/models.jl#L42-L53">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.longrange_isingmpo" href="#MPSDynamics.longrange_isingmpo"><code>MPSDynamics.longrange_isingmpo</code></a> — <span class="docstring-category">Function</span></header><section><div><pre><code class="language-julia">longrange_isingmpo(N::Int, α::Float64=0.; J=1.0, h=1.0) = longrange_xyzmpo(N, α; Jx=J, Jy=0., Jz=0., hz=h, hx=0.)</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/2d44f7a84131a18fb07ad6dbe14ac78ec2b9eb42/src/models.jl#L121-L124">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.longrange_xyzmpo" href="#MPSDynamics.longrange_xyzmpo"><code>MPSDynamics.longrange_xyzmpo</code></a> — <span class="docstring-category">Function</span></header><section><div><pre><code class="language-julia">longrange_xyzmpo(N::Int, α::Float64=0.; Jx=1.0, Jy=Jx, Jz=Jx, hx=0., hz=0.)</code></pre><p>Gennerate MPO for the <code>N</code>-spin long-range XYZ model with external field <span>$\vec{h}=(h_x, 0, h_z)$</span>, , defined by the Hamiltonian</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/2d44f7a84131a18fb07ad6dbe14ac78ec2b9eb42/src/models.jl#L83-L89">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.nearestneighbourmpo" href="#MPSDynamics.nearestneighbourmpo"><code>MPSDynamics.nearestneighbourmpo</code></a> — <span class="docstring-category">Function</span></header><section><div><pre><code class="language-julia">nearestneighbourmpo(N::Int, h0, A, Ad = A')</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/2d44f7a84131a18fb07ad6dbe14ac78ec2b9eb42/src/models.jl#L627-L634">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.nearestneighbourmpo" href="#MPSDynamics.nearestneighbourmpo"><code>MPSDynamics.nearestneighbourmpo</code></a> — <span class="docstring-category">Function</span></header><section><div><pre><code class="language-julia">nearestneighbourmpo(tree_::Tree, h0, A, Ad = A')</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/2d44f7a84131a18fb07ad6dbe14ac78ec2b9eb42/src/models.jl#L651-L658">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.protontransfermpo-NTuple{11, Any}" href="#MPSDynamics.protontransfermpo-NTuple{11, Any}"><code>MPSDynamics.protontransfermpo</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">protontransfermpo(ω0e,ω0k,x0e,x0k, Δ, dRC, d, N, chainparams, RCparams, λreorg)</code></pre><p>Generate a MPO for a system described in space with a reaction coordinate (RC) tensor. The Hamiltonian of the two-level system and of the reaction coordinate tensor reads </p><p><span>$H_S + H_{RC} + H_{int}^{S-RC} = \omega^0_{e} |e\rangle \langle e| + \omega^0_{k} |k\rangle \langle k| + \Delta (|e\rangle \langle k| + |k\rangle \langle e|) + \omega_{RC} (d^{\dagger}d + \frac{1}{2}) + g_{e} |e\rangle \langle e|( d + d^{\dagger})+ g_{k} |k \rangle \langle k|( d + d^{\dagger})$</span> The RC tensor is coupled to a bosonic bath, taking into account the induced reorganization energy <span>$H_B + H_{int}^{RC-B} = \int_{-∞}^{+∞} dk ω_k b_k^\dagger b_k - (d + d^{\dagger})\int_0^∞ dω\sqrt{J(ω)}(b_ω^\dagger+b_ω) + \lambda_{reorg}(d + d^{\dagger})^2$</span> with <span>$\lambda_{reorg} = \int \frac{J(\omega)}{\omega}d\omega.$</span></p><p><strong>Arguments</strong></p><ul><li><code>ω0e</code>: enol energy at reaction coordinate value x=0 </li><li><code>ω0k</code>: keto energy at reaction coordinate value x=0</li><li><code>x0e</code>: enol equilibrium displacement</li><li><code>x0k</code>: keto equilibrium displacement </li><li><code>Δ</code>: direct coupling between enol and keto</li><li><code>dRC</code>: fock space of the RC tensor </li><li><code>d</code>: number of Fock states of the chain modes</li><li><code>N</code>: length of the bosonic chain</li><li><code>chainparams</code>: chain parameters, of the form <code>chainparams</code>=<span>$[[ϵ_0,ϵ_1,...],[t_0,t_1,...],c_0]$</span>, can be chosen to represent any arbitrary spectral density <span>$J(ω)$</span> at any temperature. </li><li><code>RCparams</code>: RC tensor parameter, of the form <code>RCparams</code>=<span>$[ω_RC,-g/x]$</span> </li><li><code>λreorg</code>: reorganization energy</li></ul></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/2d44f7a84131a18fb07ad6dbe14ac78ec2b9eb42/src/models.jl#L1315-L1345">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.puredephasingmpo-NTuple{4, Any}" href="#MPSDynamics.puredephasingmpo-NTuple{4, Any}"><code>MPSDynamics.puredephasingmpo</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">puredephasingmpo(ΔE, dchain, Nchain, chainparams; tree=false)</code></pre><p>Generate MPO for a pure dephasing model, defined by the Hamiltonian <span>$H = \frac{ΔE}{2} σ_z + \frac{σ_z}{2} c_0 (b_0^\dagger + b_0) + \sum_{i=0}^{N-1} t_i (b_{i+1}^\dagger b_i +h.c.) + \sum_{i=0}^{N-1} ϵ_i b_i^\dagger b_i$</span></p><p>The spin is on site 1 of the MPS and the bath modes are to the right.</p><p><strong>Arguments</strong></p><ul><li><code>ΔE::Real</code>: energy splitting of the spin</li><li><code>dchain::Int</code>: physical dimension of the chain sites truncated Hilbert spaces</li><li><code>Nchain::Int</code>: number of sites in the chain</li><li><code>chainparams::Array{Real,1}</code>: chain parameters for the bath chain. The chain parameters are given in the standard form: <code>chainparams</code> <span>$=[[ϵ_0,ϵ_1,...],[t_0,t_1,...],c_0]$</span>.</li><li><code>tree::Bool</code>: if true, return a <code>TreeNetwork</code> object, otherwise return a vector of MPO tensors</li></ul></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/2d44f7a84131a18fb07ad6dbe14ac78ec2b9eb42/src/models.jl#L690-L704">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.readchaincoeffs-Tuple{Any, Vararg{Any}}" href="#MPSDynamics.readchaincoeffs-Tuple{Any, Vararg{Any}}"><code>MPSDynamics.readchaincoeffs</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">readchaincoeffs(fdir, params...)</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/2d44f7a84131a18fb07ad6dbe14ac78ec2b9eb42/src/models.jl#L525-L531">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.spinbosonmpo-NTuple{5, Any}" href="#MPSDynamics.spinbosonmpo-NTuple{5, Any}"><code>MPSDynamics.spinbosonmpo</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">spinbosonmpo(ω0, Δ, d, N, chainparams; rwa=false, tree=false)</code></pre><p>Generate MPO for a spin-1/2 coupled to a chain of harmonic oscillators, defined by the Hamiltonian</p><p><span>$H = \frac{ω_0}{2}σ_z + Δσ_x + c_0σ_x(b_0^\dagger+b_0) + \sum_{i=0}^{N-1} t_i (b_{i+1}^\dagger b_i +h.c.) + \sum_{i=0}^{N} ϵ_ib_i^\dagger b_i$</span>.</p><p>The spin is on site 1 of the MPS and the bath modes are to the right.</p><p>This Hamiltonain is unitarily equivalent (before the truncation to <code>N</code> sites) to the spin-boson Hamiltonian defined by</p><p><span>$H = \frac{ω_0}{2}σ_z + Δσ_x + σ_x\int_0^∞ dω\sqrt{J(ω)}(b_ω^\dagger+b_ω) + \int_0^∞ dω ωb_ω^\dagger b_ω$</span>.</p><p>The chain parameters, supplied by <code>chainparams</code>=<span>$[[ϵ_0,ϵ_1,...],[t_0,t_1,...],c_0]$</span>, can be chosen to represent any arbitrary spectral density <span>$J(ω)$</span> at any temperature.</p><p>The rotating wave approximation can be made by setting <code>rwa=true</code>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/2d44f7a84131a18fb07ad6dbe14ac78ec2b9eb42/src/models.jl#L398-L419">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.spinchainmpo-Tuple{Int64}" href="#MPSDynamics.spinchainmpo-Tuple{Int64}"><code>MPSDynamics.spinchainmpo</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">spinchainmpo(N::Int; J=1.0, hz=1.0, hx=0.0, i=div(N,2))</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/2d44f7a84131a18fb07ad6dbe14ac78ec2b9eb42/src/models.jl#L127-L131">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.tightbinding_mpo-NTuple{4, Any}" href="#MPSDynamics.tightbinding_mpo-NTuple{4, Any}"><code>MPSDynamics.tightbinding_mpo</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">tightbinding_mpo(N, ϵd, chainparams1, chainparams2)</code></pre><p>Generate MPO for a tight-binding chain of N fermionic sites with a single impurity site (fermionic as well) of energy ϵd at the center. The impurity is coupled to two leads, each described by a set of chain parameters. The interactions are nearest-neighbour, with the first N/2-1 sites corresponding to the first lead, the Nth site corresponding to the impurity, and the rest of the sites corresponding to the second lead.</p><p><strong>Arguments</strong></p><ul><li><code>N::Int</code>: number of sites in the chain</li><li><code>ϵd::Real</code>: energy of the impurity site at the center, as Ed - μ, where μ is the chemical potential</li><li><code>chainparams1::Array{Real,1}</code>: chain parameters for the first lead</li><li><code>chainparams2::Array{Real,1}</code>: chain parameters for the second lead</li></ul><p>The chain parameters are given in the standard form: <code>chainparams</code> <span>$=[[ϵ_0,ϵ_1,...],[t_0,t_1,...],c_0]$</span>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/2d44f7a84131a18fb07ad6dbe14ac78ec2b9eb42/src/models.jl#L719-L734">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.tightbindingmpo-Tuple{Int64, Int64}" href="#MPSDynamics.tightbindingmpo-Tuple{Int64, Int64}"><code>MPSDynamics.tightbindingmpo</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">tightbindingmpo(N::Int, d::Int; J=1.0, e=1.0)</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/2d44f7a84131a18fb07ad6dbe14ac78ec2b9eb42/src/models.jl#L156-L161">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.tunnelingmpo-Tuple{Any, Any, Any, Any, Any, Int64, Int64}" href="#MPSDynamics.tunnelingmpo-Tuple{Any, Any, Any, Any, Any, Int64, Int64}"><code>MPSDynamics.tunnelingmpo</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">tunnelingmpo(ϵ, delta, α, s, β, d::Int, nummodes::Int; tree=false, ωc=1)</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/2d44f7a84131a18fb07ad6dbe14ac78ec2b9eb42/src/models.jl#L595-L602">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.twobathspinmpo" href="#MPSDynamics.twobathspinmpo"><code>MPSDynamics.twobathspinmpo</code></a> — <span class="docstring-category">Function</span></header><section><div><pre><code class="language-julia">twobathspinmpo(ω0, Δ, Nl, Nr, dl, dr, chainparamsl=[fill(1.0,N),fill(1.0,N-1), 1.0], chainparamsr=chainparamsl; tree=false)</code></pre><p>Generate MPO for a spin-1/2 coupled to two chains of harmonic oscillators, defined by the Hamiltonian</p><p><span>$H = \frac{ω_0}{2}σ_z + Δσ_x + c_0^rσ_x(b_0^\dagger+b_0) + \sum_{i=0}^{N_r-1} t_i^r (b_{i+1}^\dagger b_i +h.c.) + \sum_{i=0}^{N_r} ϵ_i^rb_i^\dagger b_i + c_0^lσ_x(d_0^\dagger+d_0) + \sum_{i=0}^{N_l-1} t_i^l (d_{i+1}^\dagger d_i +h.c.) + \sum_{i=0}^{N_l} ϵ_i^l d_i^\dagger d_i$</span>.</p><p>The spin is on site <span>$N_l + 1$</span> of the MPS, surrounded by the left chain modes and the right chain modes.</p><p>This Hamiltonain is unitarily equivalent (before the truncation to <code>N</code> sites) to the spin-boson Hamiltonian defined by</p><p><span>$H = \frac{ω_0}{2}σ_z + Δσ_x + σ_x\int_0^∞ dω\sqrt{J(ω)}(b_ω^\dagger+b_ω) + \int_0^∞ dω ωb_ω^\dagger b_ωi + σ_x\int_0^∞ dω\sqrt{J^l(ω)}(d_ω^\dagger+d_ω) + \int_0^∞ dω ωd_ω^\dagger d_ω$</span>.</p><p>The chain parameters, supplied by <code>chainparams</code>=<span>$[[ϵ_0,ϵ_1,...],[t_0,t_1,...],c_0]$</span>, can be chosen to represent any arbitrary spectral density <span>$J(ω)$</span> at any temperature. The two chains can have a different spectral density.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/2d44f7a84131a18fb07ad6dbe14ac78ec2b9eb42/src/models.jl#L446-L465">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.xxzmpo" href="#MPSDynamics.xxzmpo"><code>MPSDynamics.xxzmpo</code></a> — <span class="docstring-category">Function</span></header><section><div><pre><code class="language-julia">xxzmpo(N::Int, Δ = 1.0, J=1.0) = xyzmpo(N; Jx=J, Jy=J, Jz=J*Δ)</code></pre><p>Generate MPO for the <code>N</code>-spin XXZ model, defined by the Hamiltonian</p><p><span>$H = \sum_{n=1}^{N-1} -J σ_x^{n} σ_x^{n+1} - J σ_y^{n} σ_y^{n+1} - \Delta J σ_z^{n} σ_z^{n+1}$</span></p><p>with <span>$σ_x^{n}, σ_y^{n}, σ_z^{n}$</span> the Pauli spin-1/2 matrices of the <span>$n^\text{th}$</span> site.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/2d44f7a84131a18fb07ad6dbe14ac78ec2b9eb42/src/models.jl#L69-L80">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.xyzmpo-Tuple{Int64}" href="#MPSDynamics.xyzmpo-Tuple{Int64}"><code>MPSDynamics.xyzmpo</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">xyzmpo(N::Int; Jx=1.0, Jy=Jx, Jz=Jx, hx=0., hz=0.)</code></pre><p>Generate MPO for the <code>N</code>-spin XYZ model with external field <span>$\vec{h}=(h_x, 0, h_z)$</span>, , defined by the Hamiltonian</p><p><span>$H = \sum_{n=1}^{N-1} -J_x σ_x^{n} σ_x^{n+1} - J_y σ_y^{n} σ_y^{n+1} - J_z σ_z^{n} σ_z^{n+1} + \sum_{n=1}^{N}(- h_x σ_x^{n} - h_z σ_z^{n})$</span></p><p>with <span>$σ_x^{n}, σ_y^{n}, σ_z^{n}$</span> the Pauli spin-1/2 matrices of the <span>$n^\text{th}$</span> site.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/2d44f7a84131a18fb07ad6dbe14ac78ec2b9eb42/src/models.jl#L4-L15">source</a></section></article><h2 id="Chain-Mapping"><a class="docs-heading-anchor" href="#Chain-Mapping">Chain-Mapping</a><a id="Chain-Mapping-1"></a><a class="docs-heading-anchor-permalink" href="#Chain-Mapping" title="Permalink"></a></h2><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.chaincoeffs_fermionic-Tuple{Any, Any, Any}" href="#MPSDynamics.chaincoeffs_fermionic-Tuple{Any, Any, Any}"><code>MPSDynamics.chaincoeffs_fermionic</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">chaincoeffs_fermionic(nummodes, β, chain; ϵ=x, ωc=1, mc=4, mp=0, AB=nothing, iq=1, idelta=2, procedure=:Lanczos, Mmax=5000, save=true)</code></pre><p>Generate chain coefficients <span>$[[ϵ_0,ϵ_1,...],[t_0,t_1,...],c_0]$</span> for a fermionic bath at the inverse temperature β.</p><p><strong>Arguments</strong></p><ul><li>nummodes: Number of bath modes</li><li>β: inverse temperature</li><li>chain: 1 if the chain modes are empty, 2 if the chain modes are filled</li><li>ϵ: user-provided dispersion relation. Should be a function f(x) where x is the wavenumber</li><li>J: user-provided spectral density. Should be a function f(x) where x is the wavenumber</li><li>ωc: the maximum frequency allowwed in the spectral density</li><li>mc: the number of component intervals</li><li>mp: the number of points in the discrete part of the measure (mp=0 if there is none)</li><li>iq: a parameter to be set equal to 1, if the user provides his or her own quadrature routine, and different from 1 otherwise</li><li>idelta: a parameter whose default value is 1, but is preferably set equal to 2, if iq=1 and the user provides Gauss-type quadrature routines</li><li>procedure: choice between the Stieltjes and the Lanczos procedure</li><li>AB: component intervals</li><li>Mmax: maximum number of integration points</li><li>save: if true the coefficients are saved</li></ul></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/2d44f7a84131a18fb07ad6dbe14ac78ec2b9eb42/src/finitetemperature.jl#L120-L140">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.chaincoeffs_finiteT" href="#MPSDynamics.chaincoeffs_finiteT"><code>MPSDynamics.chaincoeffs_finiteT</code></a> — <span class="docstring-category">Function</span></header><section><div><pre><code class="language-julia">chaincoeffs_finiteT(nummodes, β, ohmic=true; α, s, J, ωc=1, mc=4, mp=0, AB=nothing, iq=1, idelta=2, procedure=:Lanczos, Mmax=5000, save=true)</code></pre><p>Generate chain coefficients <span>$[[ϵ_0,ϵ_1,...],[t_0,t_1,...],c_0]$</span> for a harmonic bath at the inverse temperature β.</p><p>By default a Ohmic spectral density <span>$J(ω) = 2αω_c (\frac{ω}{ω_c})^s θ(ω-ω_c)$</span> is considered. Users can provide their own spectral density.</p><p><strong>Arguments</strong></p><ul><li>nummodes: Number of bath modes</li><li>β: inverse temperature</li><li>ohmic: true if the spectral density is Ohmic, false if the user provides its own spectral density</li><li>α: Kondo parameter of the Ohmic spectral density </li><li>s: ohmicity</li><li>J: user-provided spectral density. Should be a function f(x,i) where x is the frequency and i ∈ {1,...,mc} labels the intervals on which the SD is defined</li><li>ωc: the maximum frequency of the Ohmic spectral density</li><li>mc: the number of component intervals</li><li>mp: the number of points in the discrete part of the measure (mp=0 if there is none)</li><li>iq: a parameter to be set equal to 1, if the user provides his or her own quadrature routine, and different from 1 otherwise</li><li>idelta: a parameter whose default value is 1, but is preferably set equal to 2, if iq=1 and the user provides Gauss-type quadrature routines</li><li>procedure: choice between the Stieltjes and the Lanczos procedure</li><li>AB: component intervals</li><li>Mmax: maximum number of integration points</li><li>save: if true the coefficients are saved</li></ul></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/2d44f7a84131a18fb07ad6dbe14ac78ec2b9eb42/src/finitetemperature.jl#L6-L30">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.gauss-Tuple{Any, Any}" href="#MPSDynamics.gauss-Tuple{Any, Any}"><code>MPSDynamics.gauss</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">gauss(N,ab)</code></pre><p>Gauss quadrature rule for <code>N</code> sites on an interval <code>ab</code>. Given a weight function w encoded by the <code>N</code>x2 array <code>ab</code> of the first <code>N</code> recurrence coefficients for the associated orthogonal polynomials, the first column of <code>ab</code> containing the <code>N</code> alpha-coefficients and the second column the <code>N</code> beta-coefficients, the call xw = gauss(N,ab) generates the nodes and weights xw of the <code>N</code>-point Gauss quadrature rule for the weight function w. The nodes, in increasing order, are stored in the first column, the n corresponding weights in the second column, of the <code>N</code>x2 array xw.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/2d44f7a84131a18fb07ad6dbe14ac78ec2b9eb42/ChainOhmT/gauss.jl#L3-L10">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.lanczos-Tuple{Any, Any}" href="#MPSDynamics.lanczos-Tuple{Any, Any}"><code>MPSDynamics.lanczos</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">lanczos(N,xw)</code></pre><p>Given the discrete inner product whose nodes are contained in the first column, and whose weights are contained in the second column, of the <code>N</code>x2 array <code>xw</code>, the call ab=lanczos(N,xw) generates the first <code>N</code> recurrence coefficients ab of the corresponding discrete orthogonal polynomials. The <code>N</code> alpha-coefficients are stored in the first column, the <code>N</code> beta-coefficients in the second column, of the <code>N</code>x2 array ab.</p><p>The script is adapted from the routine RKPW in W.B. Gragg and W.J. Harrod, ``The numerically stable reconstruction of Jacobi matrices from spectral data'', Numer. Math. 44 (1984), 317-335.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/2d44f7a84131a18fb07ad6dbe14ac78ec2b9eb42/ChainOhmT/lanczos.jl#L1-L8">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.stieltjes-Tuple{Any, Any}" href="#MPSDynamics.stieltjes-Tuple{Any, Any}"><code>MPSDynamics.stieltjes</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">stieltjes(N,xw)</code></pre><p>Discretized Stieltjes procedure. Given the discrete inner product whose nodes are contained in the first column, and whose weights are contained in the second column, of the <code>N</code>x2 array <code>xw</code>, the call ab=stieltjes(N,xw) generates the first <code>N</code> recurrence coefficients ab of the corresponding discrete orthogonal polynomials. The <code>N</code> alpha- coefficients are stored in the first column, the <code>N</code> beta-coefficients in the second column, of the <code>N</code>x2 array ab.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/2d44f7a84131a18fb07ad6dbe14ac78ec2b9eb42/ChainOhmT/stieltjes.jl#L1-L6">source</a></section></article><h2 id="Dynamics-propagation-function"><a class="docs-heading-anchor" href="#Dynamics-propagation-function">Dynamics propagation function</a><a id="Dynamics-propagation-function-1"></a><a class="docs-heading-anchor-permalink" href="#Dynamics-propagation-function" title="Permalink"></a></h2><article class="docstring"><header><a class="docstring-binding" id="MPSDynamics.runsim-NTuple{4, Any}" href="#MPSDynamics.runsim-NTuple{4, Any}"><code>MPSDynamics.runsim</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia">runsim(dt, tmax, A, H; method=:TDVP1, machine=LocalMachine(), params=[], @@ -45,4 +45,4 @@ unid=randstring(5), name=nothing, kwargs... - )</code></pre><p>Propagate the MPS <code>A</code> with the MPO <code>H</code> up to time <code>tmax</code> in time steps of <code>dt</code>. The final MPS is returned to <code>A</code> and the measurement data is returned to <code>dat</code> </p><p><strong>Arguments</strong></p><ul><li><code>method</code>: Several methods are implemented in MPSDynamics. <code>:TDVP1</code> refers to 1-site TDVP on tree and chain MPS, <code>:TDVP2</code> refers to 2-site TDVP on chain MPS, <code>:DTDVP</code> refers to a variant of 1-site TDVP with dynamics bond-dimensions on chain MPS</li><li><code>machine</code>: <code>LocalMachine()</code> points local ressources, <code>RemoteMachine()</code> points distant ressources</li><li><code>params</code>: list of parameters written in the log.txt file to describe the dynamics. Can be listed with @LogParams(). </li><li><code>obs</code>: list of observables that will be measured at every time step for the most accurate convergence parameter supplied to <code>convparams</code> </li><li><code>convobs</code>: list of observables that will be measure at every time step for every convergence parameter supplied to <code>convparams</code> </li><li><code>convparams</code>: list of convergence parameter with which the propagation will be calculated for every parameter. At each parameter, <code>convobs</code> are measured while <code>obs</code> are measured only for the most accurate dynamics</li><li><code>save</code>: Used to choose whether the data will also be saved to a file </li><li><code>plot</code>: Used to choose whether plots for 1D observables will be automatically generated and saved along with the data</li><li><code>savedir</code>: Used to specify the path where resulting files are stored</li><li><code>unid</code>: Used to specify the name of the directory containing the resulting files</li><li><code>name</code>: Used to describe the calculation. This name will appear in the log.txt file</li></ul></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/78f952b07039bfc34f43e6afc0237f8367e64697/src/MPSDynamics.jl#L32-L64">source</a></section></article><h2 id="Advanced"><a class="docs-heading-anchor" href="#Advanced">Advanced</a><a id="Advanced-1"></a><a class="docs-heading-anchor-permalink" href="#Advanced" title="Permalink"></a></h2></article><nav class="docs-footer"><a class="docs-footer-prevpage" href="../theory/">« Theoretical Background</a><a class="docs-footer-nextpage" href="../dev/">Developers »</a><div class="flexbox-break"></div><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> on <span class="colophon-date" title="Wednesday 12 June 2024 14:11">Wednesday 12 June 2024</span>. Using Julia version 1.7.3.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html> + )</code></pre><p>Propagate the MPS <code>A</code> with the MPO <code>H</code> up to time <code>tmax</code> in time steps of <code>dt</code>. The final MPS is returned to <code>A</code> and the measurement data is returned to <code>dat</code> </p><p><strong>Arguments</strong></p><ul><li><code>method</code>: Several methods are implemented in MPSDynamics. <code>:TDVP1</code> refers to 1-site TDVP on tree and chain MPS, <code>:TDVP2</code> refers to 2-site TDVP on chain MPS, <code>:DTDVP</code> refers to a variant of 1-site TDVP with dynamics bond-dimensions on chain MPS</li><li><code>machine</code>: <code>LocalMachine()</code> points local ressources, <code>RemoteMachine()</code> points distant ressources</li><li><code>params</code>: list of parameters written in the log.txt file to describe the dynamics. Can be listed with @LogParams(). </li><li><code>obs</code>: list of observables that will be measured at every time step for the most accurate convergence parameter supplied to <code>convparams</code> </li><li><code>convobs</code>: list of observables that will be measure at every time step for every convergence parameter supplied to <code>convparams</code> </li><li><code>convparams</code>: list of convergence parameter with which the propagation will be calculated for every parameter. At each parameter, <code>convobs</code> are measured while <code>obs</code> are measured only for the most accurate dynamics</li><li><code>save</code>: Used to choose whether the data will also be saved to a file </li><li><code>plot</code>: Used to choose whether plots for 1D observables will be automatically generated and saved along with the data</li><li><code>savedir</code>: Used to specify the path where resulting files are stored</li><li><code>unid</code>: Used to specify the name of the directory containing the resulting files</li><li><code>name</code>: Used to describe the calculation. This name will appear in the log.txt file</li></ul></div><a class="docs-sourcelink" target="_blank" href="https://github.com/shareloqs/MPSDynamics/blob/2d44f7a84131a18fb07ad6dbe14ac78ec2b9eb42/src/MPSDynamics.jl#L32-L64">source</a></section></article><h2 id="Advanced"><a class="docs-heading-anchor" href="#Advanced">Advanced</a><a id="Advanced-1"></a><a class="docs-heading-anchor-permalink" href="#Advanced" title="Permalink"></a></h2></article><nav class="docs-footer"><a class="docs-footer-prevpage" href="../theory/">« Theoretical Background</a><a class="docs-footer-nextpage" href="../dev/">Developers »</a><div class="flexbox-break"></div><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> on <span class="colophon-date" title="Monday 17 June 2024 16:15">Monday 17 June 2024</span>. Using Julia version 1.7.3.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html> diff --git a/docs/nutshell/index.html b/docs/nutshell/index.html index a4f93fc..acfa776 100644 --- a/docs/nutshell/index.html +++ b/docs/nutshell/index.html @@ -1,2 +1,2 @@ <!DOCTYPE html> -<html lang="en"><head><meta charset="UTF-8"/><meta name="viewport" content="width=device-width, initial-scale=1.0"/><title>In a nutshell: MPSDynamics.jl for open quantum systems · MPSDynamics.jl</title><link href="https://fonts.googleapis.com/css?family=Lato|Roboto+Mono" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.0/css/fontawesome.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.0/css/solid.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.0/css/brands.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.11.1/katex.min.css" rel="stylesheet" type="text/css"/><script>documenterBaseURL=".."</script><script src="https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.6/require.min.js" data-main="../assets/documenter.js"></script><script src="../siteinfo.js"></script><script src="../../versions.js"></script><link class="docs-theme-link" rel="stylesheet" type="text/css" href="../assets/themes/documenter-dark.css" data-theme-name="documenter-dark" data-theme-primary-dark/><link class="docs-theme-link" rel="stylesheet" type="text/css" href="../assets/themes/documenter-light.css" data-theme-name="documenter-light" data-theme-primary/><script src="../assets/themeswap.js"></script></head><body><div id="documenter"><nav class="docs-sidebar"><a class="docs-logo" href="../"><img src="../assets/logo.png" alt="MPSDynamics.jl logo"/></a><div class="docs-package-name"><span class="docs-autofit">MPSDynamics.jl</span></div><form class="docs-search" action="../search/"><input class="docs-search-query" id="documenter-search-query" name="q" type="text" placeholder="Search docs"/></form><ul class="docs-menu"><li><a class="tocitem" href="../">Introduction</a></li><li><a class="tocitem" href="../user-guide/">User Guide</a></li><li class="is-active"><a class="tocitem" href>In a nutshell: MPSDynamics.jl for open quantum systems</a></li><li><span class="tocitem">Examples</span><ul><li><a class="tocitem" href="../examples/sbm/">The Spin-Boson Model</a></li><li><a class="tocitem" href="../examples/puredephasing/">Pure-Dephasing</a></li><li><a class="tocitem" href="../examples/timedep/">Time-dependent Hamiltonian</a></li><li><a class="tocitem" href="../examples/anderson-model/">The Anderson Impurity Model</a></li><li><a class="tocitem" href="../examples/bath-observables/">Inspecting the bath by undoing the chain mapping</a></li><li><a class="tocitem" href="../examples/protontransfer/">Proton Transfer Model</a></li></ul></li><li><a class="tocitem" href="../theory/">Theoretical Background</a></li><li><a class="tocitem" href="../methods/">Methods</a></li><li><a class="tocitem" href="../dev/">Developers</a></li></ul><div class="docs-version-selector field has-addons"><div class="control"><span class="docs-label button is-static is-size-7">Version</span></div><div class="docs-selector control is-expanded"><div class="select is-fullwidth is-size-7"><select id="documenter-version-selector"></select></div></div></div></nav><div class="docs-main"><header class="docs-navbar"><nav class="breadcrumb"><ul class="is-hidden-mobile"><li class="is-active"><a href>In a nutshell: MPSDynamics.jl for open quantum systems</a></li></ul><ul class="is-hidden-tablet"><li class="is-active"><a href>In a nutshell: MPSDynamics.jl for open quantum systems</a></li></ul></nav><div class="docs-right"><a class="docs-edit-link" href="https://github.com/shareloqs/MPSDynamics/blob/master/docs/src/nutshell.md" title="Edit on GitHub"><span class="docs-icon fab"></span><span class="docs-label is-hidden-touch">Edit on GitHub</span></a><a class="docs-settings-button fas fa-cog" id="documenter-settings-button" href="#" title="Settings"></a><a class="docs-sidebar-button fa fa-bars is-hidden-desktop" id="documenter-sidebar-button" href="#"></a></div></header><article class="content" id="documenter-page"><h1 id="In-a-nutshell:-MPSDynamics.jl-for-open-quantum-systems"><a class="docs-heading-anchor" href="#In-a-nutshell:-MPSDynamics.jl-for-open-quantum-systems">In a nutshell: MPSDynamics.jl for open quantum systems</a><a id="In-a-nutshell:-MPSDynamics.jl-for-open-quantum-systems-1"></a><a class="docs-heading-anchor-permalink" href="#In-a-nutshell:-MPSDynamics.jl-for-open-quantum-systems" title="Permalink"></a></h1><p><code>MPSDynamics.jl</code> was originally developed to perform tensor network simulations of open quantum systems by solving the Schrödinger equation for the closed {System + Environment}. The key idea to construct the simulations is to reformulate the open quantum system Hamiltonian as a one-dimensional many-body problem with nearest-neighbor interactions. The dynamics are then efficiently simulated with <a href="../theory/#Tensor-Networks">Tensor Networks</a> methods. </p><p><img src="../examples/mappings-1.png" alt="Sketch of the different ingredients behind MPSDynamics"/></p><p>The starting point is a system linearly coupled to a bosonic environment, where the coupling between system and environment is specified by the spectral density function <span>$J(\omega)$</span>: the prototypical example being <a href="../examples/sbm/#The-Spin-Boson-Model">The Spin-Boson Model</a>. At finite temperature, the initial state of the environment will be a thermal state (mixed), requiring density matrix formalism and thus making the problem more complex. To circumvent this issue, we consider instead an <em>extended environment</em>, with coupling to the system characterized by a thermalized spectral density function <span>$J(\omega,\beta)$</span>. The two environments induce the same reduced dynamics on the system, enabling us to deal with pure states only<sup class="footnote-reference"><a id="citeref-1" href="#footnote-1">[1]</a></sup>. The vacuum state (pure) of the extended environment corresponds to the thermal state of the original environment. </p><p>To exploit the computational efficiency of the matrix product states (MPS) description of pure states, we apply the so called <a href="../theory/#Chain-Mapping-of-bosonic-environments">Chain-Mapping of bosonic environments</a> —a unitary transformation dependent on <span>$J(\omega,\beta)$</span>— to the Spin-Boson Hamiltonian, mapping it on a chain Hamiltonian with nearest-neighbor interactions. This enables efficient representation of the full {System + Environment} state and its time evolution using the <a href="../theory/#Time-Dependent-Variational-Principle">Time-Dependent Variational Principle</a>.</p><p>To go further, you will find in this documentation:</p><ul><li>a <a href="../user-guide/#User-Guide">User Guide</a> explaining how to use the package</li><li>several examples illustrating different features of the package: adaptive time-evolution methods in <a href="../examples/sbm/#The-Spin-Boson-Model">The Spin-Boson Model</a>, <a href="../examples/timedep/#Time-dependent-Hamiltonian">Time-dependent Hamiltonian</a>, or fermionic environments with <a href="../examples/anderson-model/#The-Anderson-Impurity-Model">The Anderson Impurity Model</a></li><li>a <a href="../theory/#Theoretical-Background">Theoretical Background</a> covering the chain mapping procedure, flying over the basics of tensor networks, and summarizing the TDVP methods</li></ul><p>If this package was useful in your work, do not forget <a href="../#Citation">Citation</a>. And if you would like to get involved in its development, you can find out <a href="../dev/#How-to-Contribute">How to Contribute</a>.</p><section class="footnotes is-size-7"><ul><li class="footnote" id="footnote-1"><a class="tag is-link" href="#citeref-1">1</a>Moreover, the dynamics of the original environment can still be recovered, see <a href="../examples/bath-observables/#Inspecting-the-bath-by-undoing-the-chain-mapping">Inspecting the bath by undoing the chain mapping</a></li></ul></section></article><nav class="docs-footer"><a class="docs-footer-prevpage" href="../user-guide/">« User Guide</a><a class="docs-footer-nextpage" href="../examples/sbm/">The Spin-Boson Model »</a><div class="flexbox-break"></div><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> on <span class="colophon-date" title="Wednesday 12 June 2024 14:10">Wednesday 12 June 2024</span>. Using Julia version 1.7.3.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html> +<html lang="en"><head><meta charset="UTF-8"/><meta name="viewport" content="width=device-width, initial-scale=1.0"/><title>In a nutshell: MPSDynamics.jl for open quantum systems · MPSDynamics.jl</title><link href="https://fonts.googleapis.com/css?family=Lato|Roboto+Mono" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.0/css/fontawesome.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.0/css/solid.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.0/css/brands.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.11.1/katex.min.css" rel="stylesheet" type="text/css"/><script>documenterBaseURL=".."</script><script src="https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.6/require.min.js" data-main="../assets/documenter.js"></script><script src="../siteinfo.js"></script><script src="../../versions.js"></script><link class="docs-theme-link" rel="stylesheet" type="text/css" href="../assets/themes/documenter-dark.css" data-theme-name="documenter-dark" data-theme-primary-dark/><link class="docs-theme-link" rel="stylesheet" type="text/css" href="../assets/themes/documenter-light.css" data-theme-name="documenter-light" data-theme-primary/><script src="../assets/themeswap.js"></script></head><body><div id="documenter"><nav class="docs-sidebar"><a class="docs-logo" href="../"><img src="../assets/logo.png" alt="MPSDynamics.jl logo"/></a><div class="docs-package-name"><span class="docs-autofit">MPSDynamics.jl</span></div><form class="docs-search" action="../search/"><input class="docs-search-query" id="documenter-search-query" name="q" type="text" placeholder="Search docs"/></form><ul class="docs-menu"><li><a class="tocitem" href="../">Introduction</a></li><li><a class="tocitem" href="../user-guide/">User Guide</a></li><li class="is-active"><a class="tocitem" href>In a nutshell: MPSDynamics.jl for open quantum systems</a></li><li><span class="tocitem">Examples</span><ul><li><a class="tocitem" href="../examples/sbm/">The Spin-Boson Model</a></li><li><a class="tocitem" href="../examples/puredephasing/">Pure-Dephasing</a></li><li><a class="tocitem" href="../examples/timedep/">Time-dependent Hamiltonian</a></li><li><a class="tocitem" href="../examples/anderson-model/">The Anderson Impurity Model</a></li><li><a class="tocitem" href="../examples/bath-observables/">Inspecting the bath by undoing the chain mapping</a></li><li><a class="tocitem" href="../examples/protontransfer/">Proton Transfer Model</a></li></ul></li><li><a class="tocitem" href="../theory/">Theoretical Background</a></li><li><a class="tocitem" href="../methods/">Methods</a></li><li><a class="tocitem" href="../dev/">Developers</a></li></ul><div class="docs-version-selector field has-addons"><div class="control"><span class="docs-label button is-static is-size-7">Version</span></div><div class="docs-selector control is-expanded"><div class="select is-fullwidth is-size-7"><select id="documenter-version-selector"></select></div></div></div></nav><div class="docs-main"><header class="docs-navbar"><nav class="breadcrumb"><ul class="is-hidden-mobile"><li class="is-active"><a href>In a nutshell: MPSDynamics.jl for open quantum systems</a></li></ul><ul class="is-hidden-tablet"><li class="is-active"><a href>In a nutshell: MPSDynamics.jl for open quantum systems</a></li></ul></nav><div class="docs-right"><a class="docs-edit-link" href="https://github.com/shareloqs/MPSDynamics/blob/master/docs/src/nutshell.md" title="Edit on GitHub"><span class="docs-icon fab"></span><span class="docs-label is-hidden-touch">Edit on GitHub</span></a><a class="docs-settings-button fas fa-cog" id="documenter-settings-button" href="#" title="Settings"></a><a class="docs-sidebar-button fa fa-bars is-hidden-desktop" id="documenter-sidebar-button" href="#"></a></div></header><article class="content" id="documenter-page"><h1 id="In-a-nutshell:-MPSDynamics.jl-for-open-quantum-systems"><a class="docs-heading-anchor" href="#In-a-nutshell:-MPSDynamics.jl-for-open-quantum-systems">In a nutshell: MPSDynamics.jl for open quantum systems</a><a id="In-a-nutshell:-MPSDynamics.jl-for-open-quantum-systems-1"></a><a class="docs-heading-anchor-permalink" href="#In-a-nutshell:-MPSDynamics.jl-for-open-quantum-systems" title="Permalink"></a></h1><p><code>MPSDynamics.jl</code> was originally developed to perform tensor network simulations of open quantum systems by solving the Schrödinger equation for the closed {System + Environment}. The key idea to construct the simulations is to reformulate the open quantum system Hamiltonian as a one-dimensional many-body problem with nearest-neighbor interactions. The dynamics are then efficiently simulated with <a href="../theory/#Tensor-Networks">Tensor Networks</a> methods. </p><p><img src="../examples/mappings-1.png" alt="Sketch of the different ingredients behind MPSDynamics"/></p><p>The starting point is a system linearly coupled to a bosonic environment, where the coupling between system and environment is specified by the spectral density function <span>$J(\omega)$</span>: the prototypical example being <a href="../examples/sbm/#The-Spin-Boson-Model">The Spin-Boson Model</a>. At finite temperature, the initial state of the environment will be a thermal state (mixed), requiring density matrix formalism and thus making the problem more complex. To circumvent this issue, we consider instead an <em>extended environment</em>, with coupling to the system characterized by a thermalized spectral density function <span>$J(\omega,\beta)$</span>. The two environments induce the same reduced dynamics on the system, enabling us to deal with pure states only<sup class="footnote-reference"><a id="citeref-1" href="#footnote-1">[1]</a></sup>. The vacuum state (pure) of the extended environment corresponds to the thermal state of the original environment. </p><p>To exploit the computational efficiency of the matrix product states (MPS) description of pure states, we apply the so called <a href="../theory/#Chain-Mapping-of-bosonic-environments">Chain-Mapping of bosonic environments</a> —a unitary transformation dependent on <span>$J(\omega,\beta)$</span>— to the Spin-Boson Hamiltonian, mapping it on a chain Hamiltonian with nearest-neighbor interactions. This enables efficient representation of the full {System + Environment} state and its time evolution using the <a href="../theory/#Time-Dependent-Variational-Principle">Time-Dependent Variational Principle</a>.</p><p>To go further, you will find in this documentation:</p><ul><li>a <a href="../user-guide/#User-Guide">User Guide</a> explaining how to use the package</li><li>several examples illustrating different features of the package: adaptive time-evolution methods in <a href="../examples/sbm/#The-Spin-Boson-Model">The Spin-Boson Model</a>, <a href="../examples/timedep/#Time-dependent-Hamiltonian">Time-dependent Hamiltonian</a>, or fermionic environments with <a href="../examples/anderson-model/#The-Anderson-Impurity-Model">The Anderson Impurity Model</a></li><li>a <a href="../theory/#Theoretical-Background">Theoretical Background</a> covering the chain mapping procedure, flying over the basics of tensor networks, and summarizing the TDVP methods</li></ul><p>If this package was useful in your work, do not forget <a href="../#Citation">Citation</a>. And if you would like to get involved in its development, you can find out <a href="../dev/#How-to-Contribute">How to Contribute</a>.</p><section class="footnotes is-size-7"><ul><li class="footnote" id="footnote-1"><a class="tag is-link" href="#citeref-1">1</a>Moreover, the dynamics of the original environment can still be recovered, see <a href="../examples/bath-observables/#Inspecting-the-bath-by-undoing-the-chain-mapping">Inspecting the bath by undoing the chain mapping</a></li></ul></section></article><nav class="docs-footer"><a class="docs-footer-prevpage" href="../user-guide/">« User Guide</a><a class="docs-footer-nextpage" href="../examples/sbm/">The Spin-Boson Model »</a><div class="flexbox-break"></div><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> on <span class="colophon-date" title="Monday 17 June 2024 16:15">Monday 17 June 2024</span>. Using Julia version 1.7.3.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html> diff --git a/docs/search/index.html b/docs/search/index.html index 3b4d535..96876dd 100644 --- a/docs/search/index.html +++ b/docs/search/index.html @@ -1,2 +1,2 @@ <!DOCTYPE html> -<html lang="en"><head><meta charset="UTF-8"/><meta name="viewport" content="width=device-width, initial-scale=1.0"/><title>Search · MPSDynamics.jl</title><link href="https://fonts.googleapis.com/css?family=Lato|Roboto+Mono" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.0/css/fontawesome.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.0/css/solid.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.0/css/brands.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.11.1/katex.min.css" rel="stylesheet" type="text/css"/><script>documenterBaseURL=".."</script><script src="https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.6/require.min.js" data-main="../assets/documenter.js"></script><script src="../siteinfo.js"></script><script src="../../versions.js"></script><link class="docs-theme-link" rel="stylesheet" type="text/css" href="../assets/themes/documenter-dark.css" data-theme-name="documenter-dark" data-theme-primary-dark/><link class="docs-theme-link" rel="stylesheet" type="text/css" href="../assets/themes/documenter-light.css" data-theme-name="documenter-light" data-theme-primary/><script src="../assets/themeswap.js"></script></head><body><div id="documenter"><nav class="docs-sidebar"><a class="docs-logo" href="../"><img src="../assets/logo.png" alt="MPSDynamics.jl logo"/></a><div class="docs-package-name"><span class="docs-autofit">MPSDynamics.jl</span></div><form class="docs-search" action><input class="docs-search-query" id="documenter-search-query" name="q" type="text" placeholder="Search docs"/></form><ul class="docs-menu"><li><a class="tocitem" href="../">Introduction</a></li><li><a class="tocitem" href="../user-guide/">User Guide</a></li><li><a class="tocitem" href="../nutshell/">In a nutshell: MPSDynamics.jl for open quantum systems</a></li><li><span class="tocitem">Examples</span><ul><li><a class="tocitem" href="../examples/sbm/">The Spin-Boson Model</a></li><li><a class="tocitem" href="../examples/puredephasing/">Pure-Dephasing</a></li><li><a class="tocitem" href="../examples/timedep/">Time-dependent Hamiltonian</a></li><li><a class="tocitem" href="../examples/anderson-model/">The Anderson Impurity Model</a></li><li><a class="tocitem" href="../examples/bath-observables/">Inspecting the bath by undoing the chain mapping</a></li><li><a class="tocitem" href="../examples/protontransfer/">Proton Transfer Model</a></li></ul></li><li><a class="tocitem" href="../theory/">Theoretical Background</a></li><li><a class="tocitem" href="../methods/">Methods</a></li><li><a class="tocitem" href="../dev/">Developers</a></li></ul><div class="docs-version-selector field has-addons"><div class="control"><span class="docs-label button is-static is-size-7">Version</span></div><div class="docs-selector control is-expanded"><div class="select is-fullwidth is-size-7"><select id="documenter-version-selector"></select></div></div></div></nav><div class="docs-main"><header class="docs-navbar"><nav class="breadcrumb"><ul class="is-hidden-mobile"><li class="is-active"><a href>Search</a></li></ul><ul class="is-hidden-tablet"><li class="is-active"><a href>Search</a></li></ul></nav><div class="docs-right"><a class="docs-settings-button fas fa-cog" id="documenter-settings-button" href="#" title="Settings"></a><a class="docs-sidebar-button fa fa-bars is-hidden-desktop" id="documenter-sidebar-button" href="#"></a></div></header><article><p id="documenter-search-info">Loading search...</p><ul id="documenter-search-results"></ul></article><nav class="docs-footer"><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> on <span class="colophon-date" title="Wednesday 12 June 2024 14:11">Wednesday 12 June 2024</span>. Using Julia version 1.7.3.</p></section><footer class="modal-card-foot"></footer></div></div></div></body><script src="../search_index.js"></script><script src="../assets/search.js"></script></html> +<html lang="en"><head><meta charset="UTF-8"/><meta name="viewport" content="width=device-width, initial-scale=1.0"/><title>Search · MPSDynamics.jl</title><link href="https://fonts.googleapis.com/css?family=Lato|Roboto+Mono" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.0/css/fontawesome.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.0/css/solid.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.0/css/brands.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.11.1/katex.min.css" rel="stylesheet" type="text/css"/><script>documenterBaseURL=".."</script><script src="https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.6/require.min.js" data-main="../assets/documenter.js"></script><script src="../siteinfo.js"></script><script src="../../versions.js"></script><link class="docs-theme-link" rel="stylesheet" type="text/css" href="../assets/themes/documenter-dark.css" data-theme-name="documenter-dark" data-theme-primary-dark/><link class="docs-theme-link" rel="stylesheet" type="text/css" href="../assets/themes/documenter-light.css" data-theme-name="documenter-light" data-theme-primary/><script src="../assets/themeswap.js"></script></head><body><div id="documenter"><nav class="docs-sidebar"><a class="docs-logo" href="../"><img src="../assets/logo.png" alt="MPSDynamics.jl logo"/></a><div class="docs-package-name"><span class="docs-autofit">MPSDynamics.jl</span></div><form class="docs-search" action><input class="docs-search-query" id="documenter-search-query" name="q" type="text" placeholder="Search docs"/></form><ul class="docs-menu"><li><a class="tocitem" href="../">Introduction</a></li><li><a class="tocitem" href="../user-guide/">User Guide</a></li><li><a class="tocitem" href="../nutshell/">In a nutshell: MPSDynamics.jl for open quantum systems</a></li><li><span class="tocitem">Examples</span><ul><li><a class="tocitem" href="../examples/sbm/">The Spin-Boson Model</a></li><li><a class="tocitem" href="../examples/puredephasing/">Pure-Dephasing</a></li><li><a class="tocitem" href="../examples/timedep/">Time-dependent Hamiltonian</a></li><li><a class="tocitem" href="../examples/anderson-model/">The Anderson Impurity Model</a></li><li><a class="tocitem" href="../examples/bath-observables/">Inspecting the bath by undoing the chain mapping</a></li><li><a class="tocitem" href="../examples/protontransfer/">Proton Transfer Model</a></li></ul></li><li><a class="tocitem" href="../theory/">Theoretical Background</a></li><li><a class="tocitem" href="../methods/">Methods</a></li><li><a class="tocitem" href="../dev/">Developers</a></li></ul><div class="docs-version-selector field has-addons"><div class="control"><span class="docs-label button is-static is-size-7">Version</span></div><div class="docs-selector control is-expanded"><div class="select is-fullwidth is-size-7"><select id="documenter-version-selector"></select></div></div></div></nav><div class="docs-main"><header class="docs-navbar"><nav class="breadcrumb"><ul class="is-hidden-mobile"><li class="is-active"><a href>Search</a></li></ul><ul class="is-hidden-tablet"><li class="is-active"><a href>Search</a></li></ul></nav><div class="docs-right"><a class="docs-settings-button fas fa-cog" id="documenter-settings-button" href="#" title="Settings"></a><a class="docs-sidebar-button fa fa-bars is-hidden-desktop" id="documenter-sidebar-button" href="#"></a></div></header><article><p id="documenter-search-info">Loading search...</p><ul id="documenter-search-results"></ul></article><nav class="docs-footer"><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> on <span class="colophon-date" title="Monday 17 June 2024 16:15">Monday 17 June 2024</span>. Using Julia version 1.7.3.</p></section><footer class="modal-card-foot"></footer></div></div></div></body><script src="../search_index.js"></script><script src="../assets/search.js"></script></html> diff --git a/docs/theory/index.html b/docs/theory/index.html index 68149eb..c4b8763 100644 --- a/docs/theory/index.html +++ b/docs/theory/index.html @@ -4,4 +4,4 @@ \end{aligned}\]</p><p>where <span>$\hat a_\omega$</span> (<span>$\hat a^\dagger_\omega$</span>) is a bosonic annihilation (creation) operator for a normal mode of the environment of energy <span>$\omega$</span>, <span>$\hat{A}_S$</span> is a system operator, and <span>$J(\omega) = \sum_k |g_k|^2\delta(\omega - \omega_k)$</span> is the bath spectral density (SD), defined with the microscopic system-environment coupling strength <span>$g_k$</span>. The SD quantifies the coupling strengths of the different normal modes of the environment with the system. Any SD that is not flat corresponds to a non-Markovian environment.</p><h3 id="Zero-Temperature"><a class="docs-heading-anchor" href="#Zero-Temperature">Zero Temperature</a><a id="Zero-Temperature-1"></a><a class="docs-heading-anchor-permalink" href="#Zero-Temperature" title="Permalink"></a></h3><p>Let us consider the Hamiltonian presented in Eq.(1). To investigate its rich phenomenology, using the powerful tools provided by tensor network techniques, it is convenient to map the system and its environment from a star-like to a chain-like configuration, with local interactions. To do so, we introduce a unitary transformation of the continuous normal modes <span>$\hat{a}_\omega$</span> to an infinite discrete set of interacting modes <span>$\hat{b}_n$</span><sup class="footnote-reference"><a id="citeref-chin_exact_2010" href="#footnote-chin_exact_2010">[chin_exact_2010]</a></sup>.</p><p class="math-container">\[ \hat{a}_\omega = \sum_{n=0}^{+\infty} U_n(\omega)\hat{b}_n = \sum_{n=0}^{+\infty} \sqrt{J(\omega)}P_n(\omega)\hat{b}_n\ ,\]</p><p>where <span>$P_n(\omega)$</span> are orthonormal polynomials such that</p><p class="math-container">\[ \int_{0}^{+\infty}P_n(\omega)P_m(\omega)J(\omega)\mathrm{d}\omega = \delta_{n,m}\ ;\]</p><p>and the inverse transformation is</p><p class="math-container">\[ \hat{b}_n = \int_0^{+\infty} U^*_n(\omega)\hat{a}_\omega\mathrm{d}\omega\ .\]</p><p>Note that the orthonormality of the polynomials ensures the unitarity of the transformation defined in Eq.(2). The mapping from a continuous set of modes to a (still infinite) discrete set might seem counter-intuitive, however it is a direct consequence of the separability of the underlying Hilbert space.</p><p>Under this transformation, the Hamiltonian in Eq.(1) becomes</p><p class="math-container">\[ \hat{H}= \hat{H}_S + \sum_{n=0}^{+\infty}\varepsilon_n\hat{b}_n^\dagger\hat{b}_n + t_n(\hat{b}_{n+1}^\dagger\hat{b}_n + \mathrm{h.c.}) + c_0 \hat{A}_S(\hat{b}_0 + \hat{b}_0^\dagger)\ .\]</p><p>Hence, this mapping transforms the normal bath Hamiltonian into a tight-binding Hamiltonian with on-site energies <span>$\varepsilon_n$</span> and hopping energies <span>$t_n$</span>. Another important consequence of this mapping is that now the system only interacts with the first mode <span>$n = 0$</span> of the chain-mapped environment. The chain coefficients <span>$\varepsilon_n$</span>, <span>$t_n$</span>, and the coupling <span>$c_0$</span> depend solely on the SD.</p><p>This makes chain mapping a tool of choice for describing systems coupled to environment with highly structured SD (e.g. experimentally measured or calculated <em>ab initio</em>)<sup class="footnote-reference"><a id="citeref-chin_role_2013" href="#footnote-chin_role_2013">[chin_role_2013]</a></sup><sup class="footnote-reference"><a id="citeref-alvertis_nonequilibrium_2019" href="#footnote-alvertis_nonequilibrium_2019">[alvertis_nonequilibrium_2019]</a></sup><sup class="footnote-reference"><a id="citeref-dunnett_influence_2021" href="#footnote-dunnett_influence_2021">[dunnett_influence_2021]</a></sup><sup class="footnote-reference"><a id="citeref-caycedosoler_exact_2022" href="#footnote-caycedosoler_exact_2022">[caycedosoler_exact_2022]</a></sup>. In this new representation, the Hamiltonian in Eq.(5) has naturally a 1D chain topology. This makes its representation as a Matrix Product Operator (MPO) and the representation of the joint {System + Environment} wave-function as a Matrix Product State (MPS) suited <sup class="footnote-reference"><a id="citeref-orus_practical_2014" href="#footnote-orus_practical_2014">[orus_practical_2014]</a></sup><sup class="footnote-reference"><a id="citeref-paeckel_timeevolution_2019" href="#footnote-paeckel_timeevolution_2019">[paeckel_timeevolution_2019]</a></sup>.</p><p>The orthogonal polynomial-based chain mapping and the subsequent representation of the joint wave-function as a MPS (and the operators as MPO) are the building blocks of the Time-dependent Density operator with Orthonormal Polynomials Algorithm (TEDOPA) one of the state-of-the-art numerically exact method to simulate the dynamics of open quantum systems especially in the non-Markovian, non-perturbative regimes both at zero and finite temperatures <sup class="footnote-reference"><a id="citeref-prior_efficient_2010" href="#footnote-prior_efficient_2010">[prior_efficient_2010]</a></sup><sup class="footnote-reference"><a id="citeref-woods_simulating_2015" href="#footnote-woods_simulating_2015">[woods_simulating_2015]</a></sup><sup class="footnote-reference"><a id="citeref-tamascelli_efficient_2019" href="#footnote-tamascelli_efficient_2019">[tamascelli_efficient_2019]</a></sup><sup class="footnote-reference"><a id="citeref-dunnett_simulating_2021" href="#footnote-dunnett_simulating_2021">[dunnett_simulating_2021]</a></sup><sup class="footnote-reference"><a id="citeref-lacroix_unveiling_2021" href="#footnote-lacroix_unveiling_2021">[lacroix_unveiling_2021]</a></sup>.</p><h3 id="Finite-Temperature-with-T-TEDOPA"><a class="docs-heading-anchor" href="#Finite-Temperature-with-T-TEDOPA">Finite Temperature with T-TEDOPA</a><a id="Finite-Temperature-with-T-TEDOPA-1"></a><a class="docs-heading-anchor-permalink" href="#Finite-Temperature-with-T-TEDOPA" title="Permalink"></a></h3><p>Assuming a unitary evolution for both the system and environment, the system's dynamics can be isolated by tracing out the environmental degrees of freedom. The density operator for the system at time <span>$t$</span> is described as</p><p class="math-container">\[\hat{\rho}_S(t) = \text{T}r_E\left\{\hat{U}(t) \hat{\rho}_S(0) \otimes \hat{\rho}_E(0) \hat{U}^\dagger(t)\right\}.\]</p><p>Initially, the system state, <span>$\hat{\rho}_S(0)$</span>, can be pure or mixed, and the environment is in a thermal state defined by the inverse temperature <span>$\beta = (k_B T)^{-1}$</span>. This state is represented by a product of Gaussian states</p><p class="math-container">\[\hat{\rho}_E(0) = \bigotimes_\omega \frac{e^{-\beta \omega \hat{a}_\omega^\dagger \hat{a}_\omega}}{Z_\omega(\beta)} .\]</p><p>The system's evolution is dictated by the environment's two-time correlation function <span>$S(t)$</span>, which in turn is determined by the spectral density function <span>$J$</span> and the temperature <span>$\beta$</span> via the Bose-Einstein distribution <span>$n_\omega(\beta)$</span></p><p class="math-container">\[S(t) = \int_0^\infty d\omega J(\omega)\left[e^{-i\omega t}(1 + n_\omega(\beta)) + e^{i\omega t} n_\omega(\beta)\right] .\]</p><p>To simulate finite temperature effects using a zero-temperature model with the T-TEDOPA method <sup class="footnote-reference"><a id="citeref-tamascelli_efficient_2019" href="#footnote-tamascelli_efficient_2019">[tamascelli_efficient_2019]</a></sup>, we extend the spectral density function to cover both positive and negative frequencies, allowing us to use a pure state description for the environment. This is achieved by defining a new spectral density function <span>$J(\omega, \beta)$</span> that incorporates the Boltzmann factors, supporting the entire real axis</p><p class="math-container">\[J(\omega, \beta) = \frac{\text{sign}(\omega)J(\left|\omega\right|)}{2} \Big(1 + \coth\Big(\frac{\beta \omega}{2}\Big)\Big).\]</p><p>This modified bath has the same correlation function <span>$S(t)$</span> and thus allows us to maintain a pure state description of the environment, represented as a vacuum state, and avoid the computational complexities of density matrices</p><p class="math-container">\[\left|\text{vac}\right\rangle = \bigotimes_\omega \left|0_\omega\right\rangle .\]</p><p>The Hamiltonian of the system interacting with this extended bath now includes temperature-dependent interactions:</p><p class="math-container">\[\hat{H} = \hat{H}_S + \int_{-\infty}^{+\infty} \omega \hat{a}_\omega^\dagger \hat{a}_\omega \mathrm{d}\omega + \hat{A}_S \otimes \int_{-\infty}^{+\infty} \sqrt{J(\omega,\beta)}\left(\hat{a}_\omega^\dagger+\hat{a}_\omega\right) \mathrm{d}\omega,\]</p><p>This method simplifies the simulation of finite temperature effects by treating them within an effective zero-temperature framework, thereby keeping the computational advantages of using pure states. In conclusion: the dynamics of the system resulting from the interaction with the original bath, starting in a thermal state at finite temperature, is exactly the same as the one resulting from the interaction with the extended environment, starting in the vacuum state at zero temperature. Once computed the chain coefficients at a given inverse temperature <span>$\beta$</span>, the time evolution of the vacuum state interacting with the extended environment can be efficiently simulated using MPS time evolution methods.</p><h3 id="Finite-temperature-with-the-thermofield-transformation"><a class="docs-heading-anchor" href="#Finite-temperature-with-the-thermofield-transformation">Finite temperature with the thermofield transformation</a><a id="Finite-temperature-with-the-thermofield-transformation-1"></a><a class="docs-heading-anchor-permalink" href="#Finite-temperature-with-the-thermofield-transformation" title="Permalink"></a></h3><p>Finite temperature initial states of the system are challenging: in the previous section we have seen that a very efficient solution is to reabsorb the effect of the temperature inside of the spectral density function that characterizes the environment. De Vega and Bañuls present<sup class="footnote-reference"><a id="citeref-devega_thermo_2015" href="#footnote-devega_thermo_2015">[devega_thermo_2015]</a></sup> another suggestive approach based on the idea of the thermofield transformation. The idea is to double the environmental degrees of freedom and then to apply a Bogoliubov transformation: the real environment in a thermal state is transformed into two virtual environments in the vacuum state, defined as the <em>thermofield vacuum</em>. For any operator of the real environment, the expectation values in the thermal state are equivalent to those calculated in the thermofield vacuum. Behind the thermofield approach there is the concept of purification: the initial mixed state of the environment can be represented as the partial trace of a pure state (the thermofield vacuum) defined on the larger Hilbert space of the modes of the two virtual environments at zero temperature. The interaction of the system and each one of the two environments is then mapped on two separate chains, using the TEDOPA chain mapping to define a unitary transformation that can be applied to the bath modes, in order to define new modes for the environment, mapping it from a star-like to a one dimensional chain-like configuration, which is very well suited for the application of tensor network techniques.</p><p>In the thermofield approach, the first step is to introduce the auxiliary environment <span>$E^{\text{aux}}$</span> of non-interacting bosonic modes of negative frequencies:</p><p class="math-container">\[ \hat H^\text{aux} = \hat H - \sum_k \omega_k \hat c_k^\dagger \hat c_k,\]</p><p>where the Hamiltonian <span>$\hat H$</span> is the bosonic Hamiltonian defined in Eq. \ref{eq:bosonic_ham}. The two environments, of positive and negative frequencies, are assumed to be in a thermal environment at inverse temperature <span>$\beta$</span>; the second step is to apply a thermal Bogoliubov transformation to change the basis. The applied transformation produces two-modes squeezed states:</p><p class="math-container">\[ \hat a_{1k}=e^{-iG} \hat b_k e^{iG}= \cosh(\theta_k) \hat b_k -\sinh(\theta_k) \hat c_k^\dagger \\ \hat a_{2k}=e^{-iG} \hat c_k e^{iG}= \cosh(\theta_k) \hat c_k -\sinh(\theta_k) \hat b_k^\dagger,\]</p><p>where the exponent of the squeeze operator is <span>$G = i \sum_k \theta_k(\hat b_k^\dagger \hat c_k^\dagger-\hat c_k \hat b_k)$</span>, and <span>$\theta_k$</span> is dependent on the temperature as in the following relations, where the number of excitations in the <span>$k$</span>-th mode is <span>$n_k = 1/(e^{\beta \omega_k}-1)$</span>:</p><p class="math-container">\[ \cosh(\theta_k) = \sqrt{1+n_k} = \sqrt{\frac{1}{1-e^{-\beta \omega_k}}} \\ \sinh(\theta_k) =\quad\sqrt{n_k}\quad= \sqrt{\frac{1}{e^{\beta \omega_k}-1}}.\]</p><p>The Bogoliubov transformation defines a new squeezed vacuum state, which we write in terms of the vacuum state <span>$| \Omega_0 \rangle$</span> of the operators <span>$\hat b_k$</span>, <span>$\hat c_k$</span>:</p><p class="math-container">\[ |\Omega\rangle = e^{iG} |\Omega_0\rangle, \quad \text{such that: }\quad \hat a_{1k} |\Omega\rangle = 0, \hat a_{2k} |\Omega\rangle = 0.\]</p><p>From the vacuum state, we can obtain the thermal state of the original environment:</p><p class="math-container">\[ \hat \rho_E = \text{Tr}_{\text{aux}}\{ |\Omega\rangle\langle\Omega| \},\]</p><p>and it can be now used as pure an initial state for both of the environments. Moreover, the expectation value on <span>$| \Omega \rangle$</span> of the number of physical modes <span>$\hat n_k$</span> does not vanish:</p><p class="math-container">\[ n_k= \langle\Omega| \hat b_k^\dagger \hat b_k |\Omega\rangle = \sinh^2(\theta_k).\]</p><p>Therefore, solving the dynamics given by the original Hamiltonian <span>$\hat H$</span>, starting from the initial condition <span>$\hat \rho_S(0) \otimes \hat \rho_E(\beta)$</span>, is equivalent to solving the dynamics given by the following Hamiltonian:</p><p class="math-container">\[ \hat H = \hat H_S +\hat H_E +\hat H_I \\ - \hat H = \overbrace{\hat A_S}^{\hat H_S} + \overbrace{\sum_k \omega_k \big(\hat a_{1k}^\dagger \hat a_{1k} - \hat a_{2k}^\dagger \hat a_{2k} \big)}^{\hat H_E} + \overbrace{\hat L_S \otimes \sum_k g_{1k}(\hat a_{1k}^\dagger + \hat a_{1k})+\hat L_S \otimes \sum_k g_{2k}(\hat a_{2k}^\dagger + \hat a_{2k})}^{\hat H_I}.\]</p><p>where <span>$\hat L_S = \hat L_S^\dagger$</span>, considering <span>$\hat \rho_S(0) \otimes |\Omega \rangle \langle \Omega |$</span> as the initial state of system and environment. It is this Hamiltonian that is mapped on two chains with TEDOPA, to be able to perform the time evolution using tensor network techniques. </p><h2 id="Computation-of-the-chain-coefficients"><a class="docs-heading-anchor" href="#Computation-of-the-chain-coefficients">Computation of the chain coefficients</a><a id="Computation-of-the-chain-coefficients-1"></a><a class="docs-heading-anchor-permalink" href="#Computation-of-the-chain-coefficients" title="Permalink"></a></h2><p>A useful property of the orthonormal polynomials is that they obey a recurrence relation</p><p class="math-container">\[ P_n(\omega) = (C_{n-1}\omega - A_{n-1})P_{n-1}(\omega) + B_{n-1}P_{n-2}(\omega)\ ,\]</p><p>where <span>$A_n$</span> is related to the first moment of <span>$P_n$</span>, <span>$B_n$</span> and <span>$C_n$</span> to the norms of <span>$P_n$</span> and <span>$P_{n-1}$</span><sup class="footnote-reference"><a id="citeref-appel_mathematics_2007" href="#footnote-appel_mathematics_2007">[appel_mathematics_2007]</a></sup>. This recurrence relation can be used to construct the polynomials with the conditions that <span>$P_0(\omega) = ||p_0||^{-1} = \left(\int_{\mathbb{R}^{+}} J(\omega)\mathrm{d}\omega \right)^{-\frac{1}{2}}$</span> and <span>$P_{-1}(\omega) = 0$</span>, with <span>$||\bullet||$</span> the norm of <span>$\bullet$</span> with respect to the measure <span>$J(\omega)$</span>, and <span>$P_n(\omega) = p_n(\omega)||p_n||^{-1}$</span> ; where the polynomials <span>$\{p_n\}_{n\in\mathbb{N}}$</span> are the so called <em>monic polynomials</em> where the factor <span>$a_n$</span> in front of <span>$\omega^{n}$</span> is equal to 1.</p><p>The energy of the chain mode <span>$n$</span> is given by <span>$\varepsilon_n = A_n C_n^{-1}$</span> and <span>$t_n=C_n^{-1}$</span> is the coupling between mode <span>$n$</span> and <span>$n+1$</span><sup class="footnote-reference"><a id="citeref-chin_exact_2010" href="#footnote-chin_exact_2010">[chin_exact_2010]</a></sup>.</p><p>The system couples <em>only</em> to the first mode with the coupling strength <span>$c_0 = ||p_0||$</span>.</p><p>Explain that for some weight function/SD they are known analytically and that for others we can use the build-in routines inspired by Gautschi or the PolyChaos.jl package.</p><h2 id="Tensor-Networks"><a class="docs-heading-anchor" href="#Tensor-Networks">Tensor Networks</a><a id="Tensor-Networks-1"></a><a class="docs-heading-anchor-permalink" href="#Tensor-Networks" title="Permalink"></a></h2><p>A multipartite quantum state <span>$|\psi\rangle$</span>, e.g. a <span>$N$</span>-site system where the sites can each be in a state <span>$|\phi_i\rangle$</span> belonging to a <span>$d$</span>-dimensional Hilbert space, can be written as follows</p><p class="math-container">\[ |\psi\rangle = \sum_{\{i_k\}}c_{i_1\ldots i_N}|\phi_{i_1}\rangle\otimes\ldots\otimes|\phi_{i_N}\rangle\ ,\]</p><p>where the complex numbers <span>$c_{i_1\ldots i_N}$</span> are the amplitudes of each state <span>$|\phi_{i_1}\rangle\otimes\ldots\otimes|\phi_{i_N}\rangle$</span> whose superpositions form in full generality the state <span>$|\psi\rangle$</span>. Thus the state <span>$|\psi\rangle$</span> can be completely represented by a rank-<span>$N$</span> tensor <span>$c$</span> that is the collection of all possible amplitudes <span>$c_{i_1\ldots i_N}$</span>. Here by the rank of a tensor, we simply mean the number of indices it has.</p><h3 id="MPS"><a class="docs-heading-anchor" href="#MPS">MPS</a><a id="MPS-1"></a><a class="docs-heading-anchor-permalink" href="#MPS" title="Permalink"></a></h3><p>The tensor <span>$c$</span> of a quantum state <span>$|\psi\rangle$</span> corresponding to a one-dimensional system can be decomposed into a product of <span>$N$</span> smaller rank-3 tensors <span>$T_{k}$</span> (except for the first and last sites where the tensors will have a rank-2)</p><p class="math-container">\[ c_{i_1\ldots i_N} = \sum_{\{\alpha\}} T^{\alpha_1}_{i_1}T^{\alpha_1\alpha_2\ }_{i_2}T^{\alpha_2\alpha_3\ }_{i_3}\ldots T^{\alpha_{N-1}}_{i_N} \ .\]</p><p>In this form, the local tensor <span>$T_k$</span> contains the information on the quantum state on site <span>$k$</span> and its relation (especially the entanglement) with the neighbouring sites.</p><p>The decomposition of the tensor of the amplitudes of a quantum state into a product of smaller rank tensors is called a <strong>Matrix Product State</strong> decomposition.</p><p>The contracted indices <span>$\alpha_k$</span> between the tensors are called <em>virtual indices</em> and carry information about the correlations between bi-partitions of the state at bond <span>$k$</span>. The number of different values a virtual index can take is called the <em>bond dimension</em> and is denoted <span>$D$</span>. The free indices <span>$i_k$</span> associated with local quantum states are called <em>physical indices</em>. Thus, they can take <span>$d$</span> values (with <span>$d$</span> the dimension of the local Hilbert space).</p><p>Any state in the Hilbert space of a one-dimensional many-body system can in principle be represented by a MPS by choosing a sufficiently large value for the bond dimension <span>$D$</span> <sup class="footnote-reference"><a id="citeref-Orus" href="#footnote-Orus">[Orus]</a></sup>. On top of this intellectually satisfying property of MPSs being a dense set of states for a 1d-system, they can also be used as a practical Ansätze for a many-body quantum states by setting a maximal allowed value <span>$\chi$</span> for the bond dimension <span>$D$</span>. In doing so, we restrict ourselves to a corner of the total Hilbert space. The rationale behind this Ansatz is the following: if the initial quantum state of a many-body system has a low bond dimension (typically if the initial state is a product state with <span>$D = 1$</span>), then in a finite time it will only be able to explore a region of the Hilbert space that is not to far away from its starting point. Thus, the bond dimension will not have the time to diverge exponentially <sup class="footnote-reference"><a id="citeref-poulin_quantum_2011" href="#footnote-poulin_quantum_2011">[poulin_quantum_2011]</a></sup>. However, depending on the physical system at hand, this sub-manifold of the Hilbert space could still be "too large". There is an additional reason that explains why MPSs are good Ansätze for 1d physical systems. Most many-body Hamiltonians we (physicists) are interested in are local, meaning that the interactions they describe involve objects that are "neighbours". For such Hamiltonians, the ground states (outside of potential critical phases) follow the so called <em>area law</em> for the entanglement entropy <sup class="footnote-reference"><a id="citeref-srednicki_entropy_1993" href="#footnote-srednicki_entropy_1993">[srednicki_entropy_1993]</a></sup><sup class="footnote-reference"><a id="citeref-vidal_entanglement_2003" href="#footnote-vidal_entanglement_2003">[vidal_entanglement_2003]</a></sup><sup class="footnote-reference"><a id="citeref-wolf_area_2008" href="#footnote-wolf_area_2008">[wolf_area_2008]</a></sup>. This law states that the entanglement entropy <span>$S_{vN}$</span> of a bi-partition of the system is proportional, not to the volume of the partition as one might expect, but to the hyper-surface of the partition's boundary; hence the name "area law". For a 3d system this corresponds to an actual surface area <span>$A$</span>, <span>$S_{vN} \sim A$</span>; for a 2d system it corresponds to the length <span>$L$</span> of the partition's boundary, <span>$S_{vN} \sim L$</span>; and in 1d the boundary reduces to a point, thus the entropy will be independent of the size of the system <span>$S_{vN} \sim \text{constant}$</span>. The MPSs are states that satisfy this area law.</p><p>An application of the <a href="https://en.wikipedia.org/wiki/Singular_value_decomposition">Singular Value Decomposition</a> is to create efficient approximations of quantum states to perform computations. The main idea is to reduce the content of the MPS to keep only the parts that contain the physics of interest. One method to realise this approximation is to do a SVD on each of the tensors of the MPS after each time step of the state time-evolution and to trim the smallest singular values in order to decrease the bond dimension of the MPS down to a chosen maximal value <span>$\chi$</span>. The corresponding columns and rows of the unitary matrices <span>$U$</span> and <span>$V^\dagger$</span> are also removed. Then, the trimmed matrices <span>$\tilde{U}$</span>, <span>$\tilde{S}$</span> and <span>$\tilde{V}^\dagger$</span> are contracted back to give an approximated tensor <span>$T$</span> with a smaller bond dimension. Another way to apply the restricted rank approximation is to restrict oneself into working in a manifold of fixed bond dimension <span>$D$</span> and to use methods that can enforce this constraint.</p><h3 id="MPO"><a class="docs-heading-anchor" href="#MPO">MPO</a><a id="MPO-1"></a><a class="docs-heading-anchor-permalink" href="#MPO" title="Permalink"></a></h3><p>In order to compute expectation values of observables or apply unitary transformations to a quantum state, we need a TN representation of operators. In the same fashion as a one-dimensional quantum state can be represented as a MPS, operators acting on those states can be represented as <strong>Matrix Product Operators</strong> (MPO). For an operator <span>$\hat{O}$</span>, its MPO can be defined as follows</p><p class="math-container">\[ \hat{O} = \sum_{\{i_k\}\{i_k^{'}\} \{w\}} W^{i_1\ i^{'}_1}_{1\ w_0w_1}\ldots W^{i_N\ i^{'}_N}_{N\ w_{N-1}w_N} |\phi_{i_1^{'}}\ldots \phi_{i_N^{'}}\rangle\langle\phi_{i_1}\ldots \phi_{i_N}| \]</p><p>The contracted indices between the tensors are called <em>virtual indices</em>. The free indices are called <em>physical indices</em> and correspond to the different input and output local quantum states. They can take <span>$d$</span> values (with <span>$d$</span> the dimension of the local Hilbert space).</p><h3 id="TTN"><a class="docs-heading-anchor" href="#TTN">TTN</a><a id="TTN-1"></a><a class="docs-heading-anchor-permalink" href="#TTN" title="Permalink"></a></h3><p>A natural extension to the MPS is the (loop-free) tree tensor network. A TTN is a generalisation of the MPS wherein each site, instead of being connected to only one other site to its right, may be connected to any arbitrary number of <em>child</em> sites. Provided the tree does not contain any loops, everything that one can do to an MPS/MPO can be extended straight-forwardly to TTN states and TTN operators. The generalisation to trees introduces no new conceptual complexity (only implementational complexity). The sites of a TTN are usually referred to as <em>nodes</em>. For our purposes, every node of a TTN state and operator has one <em>parent</em> leg, and any number (including zero) of child legs. The first node is known as the head-node and has a dummy parent leg with dimension 1.</p><h2 id="Time-Dependent-Variational-Principle"><a class="docs-heading-anchor" href="#Time-Dependent-Variational-Principle">Time-Dependent Variational Principle</a><a id="Time-Dependent-Variational-Principle-1"></a><a class="docs-heading-anchor-permalink" href="#Time-Dependent-Variational-Principle" title="Permalink"></a></h2><p>The original idea behind TDVP goes back to Dirac <sup class="footnote-reference"><a id="citeref-dirac_note_1930" href="#footnote-dirac_note_1930">[dirac_note_1930]</a></sup> and Frenkel <sup class="footnote-reference"><a id="citeref-frenkel_wave_1934" href="#footnote-frenkel_wave_1934">[frenkel_wave_1934]</a></sup>. The main point, in the modern tensor networks formulation, is that instead of solving the Schrödinger equation and then truncating the MPS representation of the quantum state, one can solve the equations of motion projected into a space of restricted bond dimension <sup class="footnote-reference"><a id="citeref-haegeman_timedependent_2011" href="#footnote-haegeman_timedependent_2011">[haegeman_timedependent_2011]</a></sup><sup class="footnote-reference"><a id="citeref-haegeman_unifying_2016" href="#footnote-haegeman_unifying_2016">[haegeman_unifying_2016]</a></sup>.</p><p>The general formulation of the Dirac-Frenkel Variational Principle <sup class="footnote-reference"><a id="citeref-raab_diracfrenkelmclachlan_2000" href="#footnote-raab_diracfrenkelmclachlan_2000">[raab_diracfrenkelmclachlan_2000]</a></sup> is that one looks for a solution <span>$|\varphi\rangle \in \mathcal{M}$</span> of the Schrödinger equation where <span>$\mathcal{M} \subset \mathcal{H}$</span> is a manifold of the total Hilbert space <span>$\mathcal{H}$</span> in which we think that the relevant physical states `live'.</p><p>We define <span>$T_{|\varphi\rangle}\mathcal{M}$</span> the tangent space of <span>$\mathcal{M}$</span> around the state <span>$|\varphi\rangle$</span>. The criterion to find <span>$|\varphi\rangle$</span> is that for every state <span>$|\chi\rangle \in T_{|\varphi\rangle}\mathcal{M}$</span></p><p class="math-container">\[ \langle\chi|\left(\frac{\mathrm{d}}{\mathrm{d}t} - \frac{1}{\mathrm{i}\hbar}\hat{H}\right)|\varphi\rangle =0\ ,\]</p><p>which can be interpreted as saying that the time evolution procedure should keep <span>$|\varphi\rangle$</span> inside of the manifold <span>$\mathcal{M}$</span>.</p><p>The term <em>variational</em> in the name of the method comes from the fact that in practice one aims at minimising the right-hand side of the hereinabove Eq. to find <span>$|\varphi\rangle$</span>.</p><p>Introducing <span>$\hat{P}_{T_{|\varphi\rangle}\mathcal{M}}$</span> the projector onto the tangent space <span>$T_{|\varphi\rangle}\mathcal{M}$</span>, we can write the state <span>$|\chi\rangle = \hat{P}_{T_{|\varphi\rangle}\mathcal{M}}|\phi\rangle$</span> with <span>$|\phi\rangle$</span> a state in <span>$\mathcal{H}$</span>. Leading to</p><p class="math-container">\[ \forall |\phi\rangle \in \mathcal{H}, \ \langle\phi|\hat{P}_{T_{|\varphi\rangle}\mathcal{M}}\left(\frac{\mathrm{d}}{\mathrm{d}t} - \frac{1}{\mathrm{i}\hbar}\hat{H}\right)|\varphi\rangle =0\ .\]</p><p>Because the time derivation and the projector commute, we have</p><p class="math-container">\[ \forall |\phi\rangle \in \mathcal{H}, \ \langle\phi|\left(\frac{\mathrm{d}}{\mathrm{d}t} - \frac{1}{\mathrm{i}\hbar}\hat{P}_{T_{|\varphi\rangle}\mathcal{M}}\hat{H}\right)|\varphi\rangle =0\ .\]</p><p>This equation must be true for any <span>$|\phi\rangle \in \mathcal{H}$</span>, Eq.~(\ref{eq:DiracFrenkel1}) can thus be written</p><p class="math-container">\[ \left(\frac{\mathrm{d}}{\mathrm{d}t} - \frac{1}{\mathrm{i}\hbar}\hat{P}_{T_{|\varphi\rangle}\mathcal{M}}\hat{H}\right)|\varphi\rangle =0\ .\]</p><p>In the context of MPS, the manifold <span>$\mathcal{M}$</span> will correspond to the space of full-ranked MPS of a given bond dimension <span>$D$</span>, and the tangent space will be the space spanned by variations of single MPS tensors. The projector defines an effective Hamiltonian under which the dynamics are constrained on <span>$\mathcal{M}$</span>. Constraining the dynamics on a manifold, introduces a projection error: the time evolution will obey to an effective Hamiltonian different from the starting one. After the introduction of TDVP as a time evolution method for MPS, Haegeman <em>et al.</em> pointed out <sup class="footnote-reference"><a id="citeref-haegeman_unifying_2016" href="#footnote-haegeman_unifying_2016">[haegeman_unifying_2016]</a></sup> that there exist an analytical decomposition for the projector operator <span>$\hat{\mathcal{P}}$</span> that simplifies the resolution of the equation, turning the problem into one where each matrix <span>$A_i$</span> can be updated with an effective <em>on site</em> Hamiltonian <span>$\hat H_\text{eff}$</span> via a Schroedinger like equation. The effective Hamiltonian <span>$\hat H_\text{eff}$</span> is a contraction of the Hamiltonian MPO and the current state of the other matrices composing the MPS. This allows to do a sequential update.</p><p>There exist different versions of the TDVP algorithm. In <code>MPSDynamics.jl</code> three methods have been so far implemented:</p><ul><li>the one-site TDVP (1TDVP)</li><li>the two-sites TDVP (2TDVP) </li><li>the adaptive TDVP (DTDVP) <sup class="footnote-reference"><a id="citeref-dunnett_efficient_2021" href="#footnote-dunnett_efficient_2021">[dunnett_efficient_2021]</a></sup></li></ul><p>The main advantage of the one-site 1TDVP algorithm is that it preserves the unitarity of the MPS during the time evolution. Its main problem, conversely, is that the time evolution is constrained to happen on a manifold constituted by tensors of fixed bond dimension, a quantity closely related to the amount of entanglement in the MPS, and such a bond dimension has therefore to be fixed before the beginning of the time evolution. This strategy will necessarily be non optimal: the growth of the bond dimensions required to describe the quantum state should ideally mirror the entanglement growth induced by the time evolution. 2TDVP allows for such a dynamical growth of the bond dimensions, and therefore better describes the entanglement in the MPS. It suffers however of other drawbacks: first of all, a truncation error is introduced (by the means of an SVD decomposition), which entails a loss of unitarity of the time-evolved MPS. Moreover, 2TDVP has bad scaling properties with the size of the local dimensions of the MPS: this is a major issue when dealing with bosons. The DTDVP algorithm combines the best features of 1TDVP and 2TDVP: it preserves unitarity, it has the same scaling properties of 1TDVP, and it adapts the bond dimensions to the entanglement evolution at each site and at each time-step. DTDVP does not suffer from a truncation error, but introduces only a projection error.</p><p>________________</p><h2 id="Bibliography"><a class="docs-heading-anchor" href="#Bibliography">Bibliography</a><a id="Bibliography-1"></a><a class="docs-heading-anchor-permalink" href="#Bibliography" title="Permalink"></a></h2><section class="footnotes is-size-7"><ul><li class="footnote" id="footnote-chin_exact_2010"><a class="tag is-link" href="#citeref-chin_exact_2010">chin_exact_2010</a><blockquote><p>Chin, A. W.; Rivas, Á.; Huelga, S. F.; Plenio, M. B. Exact Mapping between System-Reservoir Quantum Models and Semi-Infinite Discrete Chains Using Orthogonal Polynomials. Journal of Mathematical Physics 2010, 51 (9), 092109. https://doi.org/10.1063/1.3490188.</p></blockquote></li><li class="footnote" id="footnote-chin_role_2013"><a class="tag is-link" href="#citeref-chin_role_2013">chin_role_2013</a><blockquote><p>Chin, A. W.; Prior, J.; Rosenbach, R.; Caycedo-Soler, F.; Huelga, S. F.; Plenio, M. B. The Role of Non-Equilibrium Vibrational Structures in Electronic Coherence and Recoherence in Pigment–Protein Complexes. Nature Phys 2013, 9 (2), 113–118. https://doi.org/10.1038/nphys2515.</p></blockquote></li><li class="footnote" id="footnote-alvertis_nonequilibrium_2019"><a class="tag is-link" href="#citeref-alvertis_nonequilibrium_2019">alvertis_nonequilibrium_2019</a><blockquote><p>Alvertis, A. M.; Schröder, F. A. Y. N.; Chin, A. W. Non-Equilibrium Relaxation of Hot States in Organic Semiconductors: Impact of Mode-Selective Excitation on Charge Transfer. J. Chem. Phys. 2019, 151 (8), 084104. https://doi.org/10.1063/1.5115239.</p></blockquote></li><li class="footnote" id="footnote-dunnett_influence_2021"><a class="tag is-link" href="#citeref-dunnett_influence_2021">dunnett_influence_2021</a><blockquote><p>Dunnett, A. J.; Gowland, D.; Isborn, C. M.; Chin, A. W.; Zuehlsdorff, T. J. Influence of Non-Adiabatic Effects on Linear Absorption Spectra in the Condensed Phase: Methylene Blue. J. Chem. Phys. 2021, 155 (14), 144112. https://doi.org/10.1063/5.0062950.</p></blockquote></li><li class="footnote" id="footnote-caycedosoler_exact_2022"><a class="tag is-link" href="#citeref-caycedosoler_exact_2022">caycedosoler_exact_2022</a><blockquote><p>Caycedo-Soler, F.; Mattioni, A.; Lim, J.; Renger, T.; Huelga, S. F.; Plenio, M. B. Exact Simulation of Pigment-Protein Complexes Unveils Vibronic Renormalization of Electronic Parameters in Ultrafast Spectroscopy. Nat Commun 2022, 13 (1), 2912. https://doi.org/10.1038/s41467-022-30565-4.</p></blockquote></li><li class="footnote" id="footnote-orus_practical_2014"><a class="tag is-link" href="#citeref-orus_practical_2014">orus_practical_2014</a><blockquote><p>Orus, R. A Practical Introduction to Tensor Networks: Matrix Product States and Projected Entangled Pair States. Annals of Physics 2014, 349, 117–158. https://doi.org/10.1016/j.aop.2014.06.013.</p></blockquote></li><li class="footnote" id="footnote-paeckel_timeevolution_2019"><a class="tag is-link" href="#citeref-paeckel_timeevolution_2019">paeckel_timeevolution_2019</a><blockquote><p>Paeckel, S.; Köhler, T.; Swoboda, A.; Manmana, S. R.; Schollwöck, U.; Hubig, C. Time-Evolution Methods for Matrix-Product States. Annals of Physics 2019, 411, 167998. https://doi.org/10.1016/j.aop.2019.167998.</p></blockquote></li><li class="footnote" id="footnote-prior_efficient_2010"><a class="tag is-link" href="#citeref-prior_efficient_2010">prior_efficient_2010</a><blockquote><p>Prior, J.; Chin, A. W.; Huelga, S. F.; Plenio, M. B. Efficient Simulation of Strong System-Environment Interactions. Phys. Rev. Lett. 2010, 105 (5), 050404. https://doi.org/10.1103/PhysRevLett.105.050404.</p></blockquote></li><li class="footnote" id="footnote-woods_simulating_2015"><a class="tag is-link" href="#citeref-woods_simulating_2015">woods_simulating_2015</a><blockquote><p>Woods, M. P.; Cramer, M.; Plenio, M. B. Simulating Bosonic Baths with Error Bars. Phys. Rev. Lett. 2015, 115 (13), 130401. https://doi.org/10.1103/PhysRevLett.115.130401.</p></blockquote></li><li class="footnote" id="footnote-tamascelli_efficient_2019"><a class="tag is-link" href="#citeref-tamascelli_efficient_2019">tamascelli_efficient_2019</a><blockquote><p>Tamascelli, D.; Smirne, A.; Lim, J.; Huelga, S. F.; Plenio, M. B. Efficient Simulation of Finite-Temperature Open Quantum Systems. Phys. Rev. Lett. 2019, 123 (9), 090402. https://doi.org/10.1103/PhysRevLett.123.090402.</p></blockquote></li><li class="footnote" id="footnote-dunnett_simulating_2021"><a class="tag is-link" href="#citeref-dunnett_simulating_2021">dunnett_simulating_2021</a><blockquote><p>Dunnett, A. J.; Chin, A. W. Simulating Quantum Vibronic Dynamics at Finite Temperatures With Many Body Wave Functions at 0 K. Front. Chem. 2021, 8. https://doi.org/10.3389/fchem.2020.600731.</p></blockquote></li><li class="footnote" id="footnote-lacroix_unveiling_2021"><a class="tag is-link" href="#citeref-lacroix_unveiling_2021">lacroix_unveiling_2021</a><blockquote><p>Lacroix, T.; Dunnett, A.; Gribben, D.; Lovett, B. W.; Chin, A. Unveiling Non-Markovian Spacetime Signaling in Open Quantum Systems with Long-Range Tensor Network Dynamics. Phys. Rev. A 2021, 104 (5), 052204. https://doi.org/10.1103/PhysRevA.104.052204.</p></blockquote></li><li class="footnote" id="footnote-appel_mathematics_2007"><a class="tag is-link" href="#citeref-appel_mathematics_2007">appel_mathematics_2007</a><blockquote><p>Appel, W. Mathematics for Physics and Physicists; Princeton University Press, 2007.</p></blockquote></li><li class="footnote" id="footnote-devega_thermo_2015"><a class="tag is-link" href="#citeref-devega_thermo_2015">devega_thermo_2015</a><blockquote><p>de Vega, I.; Banuls, M-.C. Thermofield-based chain-mapping approach for open quantum systems. Phys. Rev. A 2015, 92 (5), 052116. https://doi.org/10.1103/PhysRevA.92.052116.</p></blockquote></li><li class="footnote" id="footnote-Orus"><a class="tag is-link" href="#citeref-Orus">Orus</a><blockquote><p>Orus, R. A Practical Introduction to Tensor Networks: Matrix Product States and Projected Entangled Pair States. Annals of Physics 2014, 349, 117–158. https://doi.org/10.1016/j.aop.2014.06.013.</p></blockquote></li><li class="footnote" id="footnote-poulin_quantum_2011"><a class="tag is-link" href="#citeref-poulin_quantum_2011">poulin_quantum_2011</a><blockquote><p>Poulin, D.; Qarry, A.; Somma, R.; Verstraete, F. Quantum Simulation of Time-Dependent Hamiltonians and the Convenient Illusion of Hilbert Space. Phys. Rev. Lett. 2011, 106 (17), 170501. https://doi.org/10.1103/PhysRevLett.106.170501.</p></blockquote></li><li class="footnote" id="footnote-srednicki_entropy_1993"><a class="tag is-link" href="#citeref-srednicki_entropy_1993">srednicki_entropy_1993</a><blockquote><p>Srednicki, M. Entropy and Area. Phys. Rev. Lett. 1993, 71 (5), 666–669. https://doi.org/10.1103/PhysRevLett.71.666.</p></blockquote></li><li class="footnote" id="footnote-vidal_entanglement_2003"><a class="tag is-link" href="#citeref-vidal_entanglement_2003">vidal_entanglement_2003</a><blockquote><p>Vidal, G.; Latorre, J. I.; Rico, E.; Kitaev, A. Entanglement in Quantum Critical Phenomena. Phys. Rev. Lett. 2003, 90 (22), 227902. https://doi.org/10.1103/PhysRevLett.90.227902.</p></blockquote></li><li class="footnote" id="footnote-wolf_area_2008"><a class="tag is-link" href="#citeref-wolf_area_2008">wolf_area_2008</a><blockquote><p>Wolf, M. M.; Verstraete, F.; Hastings, M. B.; Cirac, J. I. Area Laws in Quantum Systems: Mutual Information and Correlations. Phys. Rev. Lett. 2008, 100 (7), 070502. https://doi.org/10.1103/PhysRevLett.100.070502.</p></blockquote></li><li class="footnote" id="footnote-dirac_note_1930"><a class="tag is-link" href="#citeref-dirac_note_1930">dirac_note_1930</a><blockquote><p>Dirac, P. A. M. Note on Exchange Phenomena in the Thomas Atom. Mathematical Proceedings of the Cambridge Philosophical Society 1930, 26 (3), 376–385. https://doi.org/10.1017/S0305004100016108.</p></blockquote></li><li class="footnote" id="footnote-frenkel_wave_1934"><a class="tag is-link" href="#citeref-frenkel_wave_1934">frenkel_wave_1934</a><blockquote><p>Frenkel, Y. Wave Mechanics, Advanced General Theory; Oxford, 1934; Vol. 1.</p></blockquote></li><li class="footnote" id="footnote-haegeman_timedependent_2011"><a class="tag is-link" href="#citeref-haegeman_timedependent_2011">haegeman_timedependent_2011</a><blockquote><p>Haegeman, J.; Cirac, J. I.; Osborne, T. J.; Pižorn, I.; Verschelde, H.; Verstraete, F. Time-Dependent Variational Principle for Quantum Lattices. Phys. Rev. Lett. 2011, 107 (7), 070601. https://doi.org/10.1103/PhysRevLett.107.070601.</p></blockquote></li><li class="footnote" id="footnote-haegeman_unifying_2016"><a class="tag is-link" href="#citeref-haegeman_unifying_2016">haegeman_unifying_2016</a><blockquote><p>Haegeman, J.; Lubich, C.; Oseledets, I.; Vandereycken, B.; Verstraete, F. Unifying Time Evolution and Optimization with Matrix Product States. Phys. Rev. B 2016, 94 (16), 165116. https://doi.org/10.1103/PhysRevB.94.165116.</p></blockquote></li><li class="footnote" id="footnote-raab_diracfrenkelmclachlan_2000"><a class="tag is-link" href="#citeref-raab_diracfrenkelmclachlan_2000">raab_diracfrenkelmclachlan_2000</a><blockquote><p>Raab, A. On the Dirac–Frenkel/McLachlan Variational Principle. Chemical Physics Letters 2000, 319 (5), 674–678. https://doi.org/10.1016/S0009-2614(00)00200-1.</p></blockquote></li><li class="footnote" id="footnote-dunnett_efficient_2021"><a class="tag is-link" href="#citeref-dunnett_efficient_2021">dunnett_efficient_2021</a><blockquote><p>Dunnett, A. J.; Chin A. W. Efficient bond-adaptive approach for finite-temperature open quantum dynamics using the one-site time-dependent variational principle for matrix product states. Physical Review B, 104(21):214302, Dec 2021. doi:10.1103/PhysRevB.104.214302. </p></blockquote></li></ul></section></article><nav class="docs-footer"><a class="docs-footer-prevpage" href="../examples/protontransfer/">« Proton Transfer Model</a><a class="docs-footer-nextpage" href="../methods/">Methods »</a><div class="flexbox-break"></div><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> on <span class="colophon-date" title="Wednesday 12 June 2024 14:11">Wednesday 12 June 2024</span>. Using Julia version 1.7.3.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html> + \hat H = \overbrace{\hat A_S}^{\hat H_S} + \overbrace{\sum_k \omega_k \big(\hat a_{1k}^\dagger \hat a_{1k} - \hat a_{2k}^\dagger \hat a_{2k} \big)}^{\hat H_E} + \overbrace{\hat L_S \otimes \sum_k g_{1k}(\hat a_{1k}^\dagger + \hat a_{1k})+\hat L_S \otimes \sum_k g_{2k}(\hat a_{2k}^\dagger + \hat a_{2k})}^{\hat H_I}.\]</p><p>where <span>$\hat L_S = \hat L_S^\dagger$</span>, considering <span>$\hat \rho_S(0) \otimes |\Omega \rangle \langle \Omega |$</span> as the initial state of system and environment. It is this Hamiltonian that is mapped on two chains with TEDOPA, to be able to perform the time evolution using tensor network techniques. </p><h2 id="Computation-of-the-chain-coefficients"><a class="docs-heading-anchor" href="#Computation-of-the-chain-coefficients">Computation of the chain coefficients</a><a id="Computation-of-the-chain-coefficients-1"></a><a class="docs-heading-anchor-permalink" href="#Computation-of-the-chain-coefficients" title="Permalink"></a></h2><p>A useful property of the orthonormal polynomials is that they obey a recurrence relation</p><p class="math-container">\[ P_n(\omega) = (C_{n-1}\omega - A_{n-1})P_{n-1}(\omega) + B_{n-1}P_{n-2}(\omega)\ ,\]</p><p>where <span>$A_n$</span> is related to the first moment of <span>$P_n$</span>, <span>$B_n$</span> and <span>$C_n$</span> to the norms of <span>$P_n$</span> and <span>$P_{n-1}$</span><sup class="footnote-reference"><a id="citeref-appel_mathematics_2007" href="#footnote-appel_mathematics_2007">[appel_mathematics_2007]</a></sup>. This recurrence relation can be used to construct the polynomials with the conditions that <span>$P_0(\omega) = ||p_0||^{-1} = \left(\int_{\mathbb{R}^{+}} J(\omega)\mathrm{d}\omega \right)^{-\frac{1}{2}}$</span> and <span>$P_{-1}(\omega) = 0$</span>, with <span>$||\bullet||$</span> the norm of <span>$\bullet$</span> with respect to the measure <span>$J(\omega)$</span>, and <span>$P_n(\omega) = p_n(\omega)||p_n||^{-1}$</span> ; where the polynomials <span>$\{p_n\}_{n\in\mathbb{N}}$</span> are the so called <em>monic polynomials</em> where the factor <span>$a_n$</span> in front of <span>$\omega^{n}$</span> is equal to 1.</p><p>The energy of the chain mode <span>$n$</span> is given by <span>$\varepsilon_n = A_n C_n^{-1}$</span> and <span>$t_n=C_n^{-1}$</span> is the coupling between mode <span>$n$</span> and <span>$n+1$</span><sup class="footnote-reference"><a id="citeref-chin_exact_2010" href="#footnote-chin_exact_2010">[chin_exact_2010]</a></sup>.</p><p>The system couples <em>only</em> to the first mode with the coupling strength <span>$c_0 = ||p_0||$</span>.</p><p>Explain that for some weight function/SD they are known analytically and that for others we can use the build-in routines inspired by Gautschi or the PolyChaos.jl package.</p><h2 id="Tensor-Networks"><a class="docs-heading-anchor" href="#Tensor-Networks">Tensor Networks</a><a id="Tensor-Networks-1"></a><a class="docs-heading-anchor-permalink" href="#Tensor-Networks" title="Permalink"></a></h2><p>A multipartite quantum state <span>$|\psi\rangle$</span>, e.g. a <span>$N$</span>-site system where the sites can each be in a state <span>$|\phi_i\rangle$</span> belonging to a <span>$d$</span>-dimensional Hilbert space, can be written as follows</p><p class="math-container">\[ |\psi\rangle = \sum_{\{i_k\}}c_{i_1\ldots i_N}|\phi_{i_1}\rangle\otimes\ldots\otimes|\phi_{i_N}\rangle\ ,\]</p><p>where the complex numbers <span>$c_{i_1\ldots i_N}$</span> are the amplitudes of each state <span>$|\phi_{i_1}\rangle\otimes\ldots\otimes|\phi_{i_N}\rangle$</span> whose superpositions form in full generality the state <span>$|\psi\rangle$</span>. Thus the state <span>$|\psi\rangle$</span> can be completely represented by a rank-<span>$N$</span> tensor <span>$c$</span> that is the collection of all possible amplitudes <span>$c_{i_1\ldots i_N}$</span>. Here by the rank of a tensor, we simply mean the number of indices it has.</p><h3 id="MPS"><a class="docs-heading-anchor" href="#MPS">MPS</a><a id="MPS-1"></a><a class="docs-heading-anchor-permalink" href="#MPS" title="Permalink"></a></h3><p>The tensor <span>$c$</span> of a quantum state <span>$|\psi\rangle$</span> corresponding to a one-dimensional system can be decomposed into a product of <span>$N$</span> smaller rank-3 tensors <span>$T_{k}$</span> (except for the first and last sites where the tensors will have a rank-2)</p><p class="math-container">\[ c_{i_1\ldots i_N} = \sum_{\{\alpha\}} T^{\alpha_1}_{i_1}T^{\alpha_1\alpha_2\ }_{i_2}T^{\alpha_2\alpha_3\ }_{i_3}\ldots T^{\alpha_{N-1}}_{i_N} \ .\]</p><p>In this form, the local tensor <span>$T_k$</span> contains the information on the quantum state on site <span>$k$</span> and its relation (especially the entanglement) with the neighbouring sites.</p><p>The decomposition of the tensor of the amplitudes of a quantum state into a product of smaller rank tensors is called a <strong>Matrix Product State</strong> decomposition.</p><p>The contracted indices <span>$\alpha_k$</span> between the tensors are called <em>virtual indices</em> and carry information about the correlations between bi-partitions of the state at bond <span>$k$</span>. The number of different values a virtual index can take is called the <em>bond dimension</em> and is denoted <span>$D$</span>. The free indices <span>$i_k$</span> associated with local quantum states are called <em>physical indices</em>. Thus, they can take <span>$d$</span> values (with <span>$d$</span> the dimension of the local Hilbert space).</p><p>Any state in the Hilbert space of a one-dimensional many-body system can in principle be represented by a MPS by choosing a sufficiently large value for the bond dimension <span>$D$</span> <sup class="footnote-reference"><a id="citeref-Orus" href="#footnote-Orus">[Orus]</a></sup>. On top of this intellectually satisfying property of MPSs being a dense set of states for a 1d-system, they can also be used as a practical Ansätze for a many-body quantum states by setting a maximal allowed value <span>$\chi$</span> for the bond dimension <span>$D$</span>. In doing so, we restrict ourselves to a corner of the total Hilbert space. The rationale behind this Ansatz is the following: if the initial quantum state of a many-body system has a low bond dimension (typically if the initial state is a product state with <span>$D = 1$</span>), then in a finite time it will only be able to explore a region of the Hilbert space that is not to far away from its starting point. Thus, the bond dimension will not have the time to diverge exponentially <sup class="footnote-reference"><a id="citeref-poulin_quantum_2011" href="#footnote-poulin_quantum_2011">[poulin_quantum_2011]</a></sup>. However, depending on the physical system at hand, this sub-manifold of the Hilbert space could still be "too large". There is an additional reason that explains why MPSs are good Ansätze for 1d physical systems. Most many-body Hamiltonians we (physicists) are interested in are local, meaning that the interactions they describe involve objects that are "neighbours". For such Hamiltonians, the ground states (outside of potential critical phases) follow the so called <em>area law</em> for the entanglement entropy <sup class="footnote-reference"><a id="citeref-srednicki_entropy_1993" href="#footnote-srednicki_entropy_1993">[srednicki_entropy_1993]</a></sup><sup class="footnote-reference"><a id="citeref-vidal_entanglement_2003" href="#footnote-vidal_entanglement_2003">[vidal_entanglement_2003]</a></sup><sup class="footnote-reference"><a id="citeref-wolf_area_2008" href="#footnote-wolf_area_2008">[wolf_area_2008]</a></sup>. This law states that the entanglement entropy <span>$S_{vN}$</span> of a bi-partition of the system is proportional, not to the volume of the partition as one might expect, but to the hyper-surface of the partition's boundary; hence the name "area law". For a 3d system this corresponds to an actual surface area <span>$A$</span>, <span>$S_{vN} \sim A$</span>; for a 2d system it corresponds to the length <span>$L$</span> of the partition's boundary, <span>$S_{vN} \sim L$</span>; and in 1d the boundary reduces to a point, thus the entropy will be independent of the size of the system <span>$S_{vN} \sim \text{constant}$</span>. The MPSs are states that satisfy this area law.</p><p>An application of the <a href="https://en.wikipedia.org/wiki/Singular_value_decomposition">Singular Value Decomposition</a> is to create efficient approximations of quantum states to perform computations. The main idea is to reduce the content of the MPS to keep only the parts that contain the physics of interest. One method to realise this approximation is to do a SVD on each of the tensors of the MPS after each time step of the state time-evolution and to trim the smallest singular values in order to decrease the bond dimension of the MPS down to a chosen maximal value <span>$\chi$</span>. The corresponding columns and rows of the unitary matrices <span>$U$</span> and <span>$V^\dagger$</span> are also removed. Then, the trimmed matrices <span>$\tilde{U}$</span>, <span>$\tilde{S}$</span> and <span>$\tilde{V}^\dagger$</span> are contracted back to give an approximated tensor <span>$T$</span> with a smaller bond dimension. Another way to apply the restricted rank approximation is to restrict oneself into working in a manifold of fixed bond dimension <span>$D$</span> and to use methods that can enforce this constraint.</p><h3 id="MPO"><a class="docs-heading-anchor" href="#MPO">MPO</a><a id="MPO-1"></a><a class="docs-heading-anchor-permalink" href="#MPO" title="Permalink"></a></h3><p>In order to compute expectation values of observables or apply unitary transformations to a quantum state, we need a TN representation of operators. In the same fashion as a one-dimensional quantum state can be represented as a MPS, operators acting on those states can be represented as <strong>Matrix Product Operators</strong> (MPO). For an operator <span>$\hat{O}$</span>, its MPO can be defined as follows</p><p class="math-container">\[ \hat{O} = \sum_{\{i_k\}\{i_k^{'}\} \{w\}} W^{i_1\ i^{'}_1}_{1\ w_0w_1}\ldots W^{i_N\ i^{'}_N}_{N\ w_{N-1}w_N} |\phi_{i_1^{'}}\ldots \phi_{i_N^{'}}\rangle\langle\phi_{i_1}\ldots \phi_{i_N}| \]</p><p>The contracted indices between the tensors are called <em>virtual indices</em>. The free indices are called <em>physical indices</em> and correspond to the different input and output local quantum states. They can take <span>$d$</span> values (with <span>$d$</span> the dimension of the local Hilbert space).</p><h3 id="TTN"><a class="docs-heading-anchor" href="#TTN">TTN</a><a id="TTN-1"></a><a class="docs-heading-anchor-permalink" href="#TTN" title="Permalink"></a></h3><p>A natural extension to the MPS is the (loop-free) tree tensor network. A TTN is a generalisation of the MPS wherein each site, instead of being connected to only one other site to its right, may be connected to any arbitrary number of <em>child</em> sites. Provided the tree does not contain any loops, everything that one can do to an MPS/MPO can be extended straight-forwardly to TTN states and TTN operators. The generalisation to trees introduces no new conceptual complexity (only implementational complexity). The sites of a TTN are usually referred to as <em>nodes</em>. For our purposes, every node of a TTN state and operator has one <em>parent</em> leg, and any number (including zero) of child legs. The first node is known as the head-node and has a dummy parent leg with dimension 1.</p><h2 id="Time-Dependent-Variational-Principle"><a class="docs-heading-anchor" href="#Time-Dependent-Variational-Principle">Time-Dependent Variational Principle</a><a id="Time-Dependent-Variational-Principle-1"></a><a class="docs-heading-anchor-permalink" href="#Time-Dependent-Variational-Principle" title="Permalink"></a></h2><p>The original idea behind TDVP goes back to Dirac <sup class="footnote-reference"><a id="citeref-dirac_note_1930" href="#footnote-dirac_note_1930">[dirac_note_1930]</a></sup> and Frenkel <sup class="footnote-reference"><a id="citeref-frenkel_wave_1934" href="#footnote-frenkel_wave_1934">[frenkel_wave_1934]</a></sup>. The main point, in the modern tensor networks formulation, is that instead of solving the Schrödinger equation and then truncating the MPS representation of the quantum state, one can solve the equations of motion projected into a space of restricted bond dimension <sup class="footnote-reference"><a id="citeref-haegeman_timedependent_2011" href="#footnote-haegeman_timedependent_2011">[haegeman_timedependent_2011]</a></sup><sup class="footnote-reference"><a id="citeref-haegeman_unifying_2016" href="#footnote-haegeman_unifying_2016">[haegeman_unifying_2016]</a></sup>.</p><p>The general formulation of the Dirac-Frenkel Variational Principle <sup class="footnote-reference"><a id="citeref-raab_diracfrenkelmclachlan_2000" href="#footnote-raab_diracfrenkelmclachlan_2000">[raab_diracfrenkelmclachlan_2000]</a></sup> is that one looks for a solution <span>$|\varphi\rangle \in \mathcal{M}$</span> of the Schrödinger equation where <span>$\mathcal{M} \subset \mathcal{H}$</span> is a manifold of the total Hilbert space <span>$\mathcal{H}$</span> in which we think that the relevant physical states `live'.</p><p>We define <span>$T_{|\varphi\rangle}\mathcal{M}$</span> the tangent space of <span>$\mathcal{M}$</span> around the state <span>$|\varphi\rangle$</span>. The criterion to find <span>$|\varphi\rangle$</span> is that for every state <span>$|\chi\rangle \in T_{|\varphi\rangle}\mathcal{M}$</span></p><p class="math-container">\[ \langle\chi|\left(\frac{\mathrm{d}}{\mathrm{d}t} - \frac{1}{\mathrm{i}\hbar}\hat{H}\right)|\varphi\rangle =0\ ,\]</p><p>which can be interpreted as saying that the time evolution procedure should keep <span>$|\varphi\rangle$</span> inside of the manifold <span>$\mathcal{M}$</span>.</p><p>The term <em>variational</em> in the name of the method comes from the fact that in practice one aims at minimising the right-hand side of the hereinabove Eq. to find <span>$|\varphi\rangle$</span>.</p><p>Introducing <span>$\hat{P}_{T_{|\varphi\rangle}\mathcal{M}}$</span> the projector onto the tangent space <span>$T_{|\varphi\rangle}\mathcal{M}$</span>, we can write the state <span>$|\chi\rangle = \hat{P}_{T_{|\varphi\rangle}\mathcal{M}}|\phi\rangle$</span> with <span>$|\phi\rangle$</span> a state in <span>$\mathcal{H}$</span>. Leading to</p><p class="math-container">\[ \forall |\phi\rangle \in \mathcal{H}, \ \langle\phi|\hat{P}_{T_{|\varphi\rangle}\mathcal{M}}\left(\frac{\mathrm{d}}{\mathrm{d}t} - \frac{1}{\mathrm{i}\hbar}\hat{H}\right)|\varphi\rangle =0\ .\]</p><p>Because the time derivation and the projector commute, we have</p><p class="math-container">\[ \forall |\phi\rangle \in \mathcal{H}, \ \langle\phi|\left(\frac{\mathrm{d}}{\mathrm{d}t} - \frac{1}{\mathrm{i}\hbar}\hat{P}_{T_{|\varphi\rangle}\mathcal{M}}\hat{H}\right)|\varphi\rangle =0\ .\]</p><p>This equation must be true for any <span>$|\phi\rangle \in \mathcal{H}$</span>, Eq.~(\ref{eq:DiracFrenkel1}) can thus be written</p><p class="math-container">\[ \left(\frac{\mathrm{d}}{\mathrm{d}t} - \frac{1}{\mathrm{i}\hbar}\hat{P}_{T_{|\varphi\rangle}\mathcal{M}}\hat{H}\right)|\varphi\rangle =0\ .\]</p><p>In the context of MPS, the manifold <span>$\mathcal{M}$</span> will correspond to the space of full-ranked MPS of a given bond dimension <span>$D$</span>, and the tangent space will be the space spanned by variations of single MPS tensors. The projector defines an effective Hamiltonian under which the dynamics are constrained on <span>$\mathcal{M}$</span>. Constraining the dynamics on a manifold, introduces a projection error: the time evolution will obey to an effective Hamiltonian different from the starting one. After the introduction of TDVP as a time evolution method for MPS, Haegeman <em>et al.</em> pointed out <sup class="footnote-reference"><a id="citeref-haegeman_unifying_2016" href="#footnote-haegeman_unifying_2016">[haegeman_unifying_2016]</a></sup> that there exist an analytical decomposition for the projector operator <span>$\hat{\mathcal{P}}$</span> that simplifies the resolution of the equation, turning the problem into one where each matrix <span>$A_i$</span> can be updated with an effective <em>on site</em> Hamiltonian <span>$\hat H_\text{eff}$</span> via a Schroedinger like equation. The effective Hamiltonian <span>$\hat H_\text{eff}$</span> is a contraction of the Hamiltonian MPO and the current state of the other matrices composing the MPS. This allows to do a sequential update.</p><p>There exist different versions of the TDVP algorithm. In <code>MPSDynamics.jl</code> three methods have been so far implemented:</p><ul><li>the one-site TDVP (1TDVP)</li><li>the two-sites TDVP (2TDVP) </li><li>the adaptive TDVP (DTDVP) <sup class="footnote-reference"><a id="citeref-dunnett_efficient_2021" href="#footnote-dunnett_efficient_2021">[dunnett_efficient_2021]</a></sup></li></ul><p>The main advantage of the one-site 1TDVP algorithm is that it preserves the unitarity of the MPS during the time evolution. Its main problem, conversely, is that the time evolution is constrained to happen on a manifold constituted by tensors of fixed bond dimension, a quantity closely related to the amount of entanglement in the MPS, and such a bond dimension has therefore to be fixed before the beginning of the time evolution. This strategy will necessarily be non optimal: the growth of the bond dimensions required to describe the quantum state should ideally mirror the entanglement growth induced by the time evolution. 2TDVP allows for such a dynamical growth of the bond dimensions, and therefore better describes the entanglement in the MPS. It suffers however of other drawbacks: first of all, a truncation error is introduced (by the means of an SVD decomposition), which entails a loss of unitarity of the time-evolved MPS. Moreover, 2TDVP has bad scaling properties with the size of the local dimensions of the MPS: this is a major issue when dealing with bosons. The DTDVP algorithm combines the best features of 1TDVP and 2TDVP: it preserves unitarity, it has the same scaling properties of 1TDVP, and it adapts the bond dimensions to the entanglement evolution at each site and at each time-step. DTDVP does not suffer from a truncation error, but introduces only a projection error.</p><p>________________</p><h2 id="Bibliography"><a class="docs-heading-anchor" href="#Bibliography">Bibliography</a><a id="Bibliography-1"></a><a class="docs-heading-anchor-permalink" href="#Bibliography" title="Permalink"></a></h2><section class="footnotes is-size-7"><ul><li class="footnote" id="footnote-chin_exact_2010"><a class="tag is-link" href="#citeref-chin_exact_2010">chin_exact_2010</a><blockquote><p>Chin, A. W.; Rivas, Á.; Huelga, S. F.; Plenio, M. B. Exact Mapping between System-Reservoir Quantum Models and Semi-Infinite Discrete Chains Using Orthogonal Polynomials. Journal of Mathematical Physics 2010, 51 (9), 092109. https://doi.org/10.1063/1.3490188.</p></blockquote></li><li class="footnote" id="footnote-chin_role_2013"><a class="tag is-link" href="#citeref-chin_role_2013">chin_role_2013</a><blockquote><p>Chin, A. W.; Prior, J.; Rosenbach, R.; Caycedo-Soler, F.; Huelga, S. F.; Plenio, M. B. The Role of Non-Equilibrium Vibrational Structures in Electronic Coherence and Recoherence in Pigment–Protein Complexes. Nature Phys 2013, 9 (2), 113–118. https://doi.org/10.1038/nphys2515.</p></blockquote></li><li class="footnote" id="footnote-alvertis_nonequilibrium_2019"><a class="tag is-link" href="#citeref-alvertis_nonequilibrium_2019">alvertis_nonequilibrium_2019</a><blockquote><p>Alvertis, A. M.; Schröder, F. A. Y. N.; Chin, A. W. Non-Equilibrium Relaxation of Hot States in Organic Semiconductors: Impact of Mode-Selective Excitation on Charge Transfer. J. Chem. Phys. 2019, 151 (8), 084104. https://doi.org/10.1063/1.5115239.</p></blockquote></li><li class="footnote" id="footnote-dunnett_influence_2021"><a class="tag is-link" href="#citeref-dunnett_influence_2021">dunnett_influence_2021</a><blockquote><p>Dunnett, A. J.; Gowland, D.; Isborn, C. M.; Chin, A. W.; Zuehlsdorff, T. J. Influence of Non-Adiabatic Effects on Linear Absorption Spectra in the Condensed Phase: Methylene Blue. J. Chem. Phys. 2021, 155 (14), 144112. https://doi.org/10.1063/5.0062950.</p></blockquote></li><li class="footnote" id="footnote-caycedosoler_exact_2022"><a class="tag is-link" href="#citeref-caycedosoler_exact_2022">caycedosoler_exact_2022</a><blockquote><p>Caycedo-Soler, F.; Mattioni, A.; Lim, J.; Renger, T.; Huelga, S. F.; Plenio, M. B. Exact Simulation of Pigment-Protein Complexes Unveils Vibronic Renormalization of Electronic Parameters in Ultrafast Spectroscopy. Nat Commun 2022, 13 (1), 2912. https://doi.org/10.1038/s41467-022-30565-4.</p></blockquote></li><li class="footnote" id="footnote-orus_practical_2014"><a class="tag is-link" href="#citeref-orus_practical_2014">orus_practical_2014</a><blockquote><p>Orus, R. A Practical Introduction to Tensor Networks: Matrix Product States and Projected Entangled Pair States. Annals of Physics 2014, 349, 117–158. https://doi.org/10.1016/j.aop.2014.06.013.</p></blockquote></li><li class="footnote" id="footnote-paeckel_timeevolution_2019"><a class="tag is-link" href="#citeref-paeckel_timeevolution_2019">paeckel_timeevolution_2019</a><blockquote><p>Paeckel, S.; Köhler, T.; Swoboda, A.; Manmana, S. R.; Schollwöck, U.; Hubig, C. Time-Evolution Methods for Matrix-Product States. Annals of Physics 2019, 411, 167998. https://doi.org/10.1016/j.aop.2019.167998.</p></blockquote></li><li class="footnote" id="footnote-prior_efficient_2010"><a class="tag is-link" href="#citeref-prior_efficient_2010">prior_efficient_2010</a><blockquote><p>Prior, J.; Chin, A. W.; Huelga, S. F.; Plenio, M. B. Efficient Simulation of Strong System-Environment Interactions. Phys. Rev. Lett. 2010, 105 (5), 050404. https://doi.org/10.1103/PhysRevLett.105.050404.</p></blockquote></li><li class="footnote" id="footnote-woods_simulating_2015"><a class="tag is-link" href="#citeref-woods_simulating_2015">woods_simulating_2015</a><blockquote><p>Woods, M. P.; Cramer, M.; Plenio, M. B. Simulating Bosonic Baths with Error Bars. Phys. Rev. Lett. 2015, 115 (13), 130401. https://doi.org/10.1103/PhysRevLett.115.130401.</p></blockquote></li><li class="footnote" id="footnote-tamascelli_efficient_2019"><a class="tag is-link" href="#citeref-tamascelli_efficient_2019">tamascelli_efficient_2019</a><blockquote><p>Tamascelli, D.; Smirne, A.; Lim, J.; Huelga, S. F.; Plenio, M. B. Efficient Simulation of Finite-Temperature Open Quantum Systems. Phys. Rev. Lett. 2019, 123 (9), 090402. https://doi.org/10.1103/PhysRevLett.123.090402.</p></blockquote></li><li class="footnote" id="footnote-dunnett_simulating_2021"><a class="tag is-link" href="#citeref-dunnett_simulating_2021">dunnett_simulating_2021</a><blockquote><p>Dunnett, A. J.; Chin, A. W. Simulating Quantum Vibronic Dynamics at Finite Temperatures With Many Body Wave Functions at 0 K. Front. Chem. 2021, 8. https://doi.org/10.3389/fchem.2020.600731.</p></blockquote></li><li class="footnote" id="footnote-lacroix_unveiling_2021"><a class="tag is-link" href="#citeref-lacroix_unveiling_2021">lacroix_unveiling_2021</a><blockquote><p>Lacroix, T.; Dunnett, A.; Gribben, D.; Lovett, B. W.; Chin, A. Unveiling Non-Markovian Spacetime Signaling in Open Quantum Systems with Long-Range Tensor Network Dynamics. Phys. Rev. A 2021, 104 (5), 052204. https://doi.org/10.1103/PhysRevA.104.052204.</p></blockquote></li><li class="footnote" id="footnote-appel_mathematics_2007"><a class="tag is-link" href="#citeref-appel_mathematics_2007">appel_mathematics_2007</a><blockquote><p>Appel, W. Mathematics for Physics and Physicists; Princeton University Press, 2007.</p></blockquote></li><li class="footnote" id="footnote-devega_thermo_2015"><a class="tag is-link" href="#citeref-devega_thermo_2015">devega_thermo_2015</a><blockquote><p>de Vega, I.; Banuls, M-.C. Thermofield-based chain-mapping approach for open quantum systems. Phys. Rev. A 2015, 92 (5), 052116. https://doi.org/10.1103/PhysRevA.92.052116.</p></blockquote></li><li class="footnote" id="footnote-Orus"><a class="tag is-link" href="#citeref-Orus">Orus</a><blockquote><p>Orus, R. A Practical Introduction to Tensor Networks: Matrix Product States and Projected Entangled Pair States. Annals of Physics 2014, 349, 117–158. https://doi.org/10.1016/j.aop.2014.06.013.</p></blockquote></li><li class="footnote" id="footnote-poulin_quantum_2011"><a class="tag is-link" href="#citeref-poulin_quantum_2011">poulin_quantum_2011</a><blockquote><p>Poulin, D.; Qarry, A.; Somma, R.; Verstraete, F. Quantum Simulation of Time-Dependent Hamiltonians and the Convenient Illusion of Hilbert Space. Phys. Rev. Lett. 2011, 106 (17), 170501. https://doi.org/10.1103/PhysRevLett.106.170501.</p></blockquote></li><li class="footnote" id="footnote-srednicki_entropy_1993"><a class="tag is-link" href="#citeref-srednicki_entropy_1993">srednicki_entropy_1993</a><blockquote><p>Srednicki, M. Entropy and Area. Phys. Rev. Lett. 1993, 71 (5), 666–669. https://doi.org/10.1103/PhysRevLett.71.666.</p></blockquote></li><li class="footnote" id="footnote-vidal_entanglement_2003"><a class="tag is-link" href="#citeref-vidal_entanglement_2003">vidal_entanglement_2003</a><blockquote><p>Vidal, G.; Latorre, J. I.; Rico, E.; Kitaev, A. Entanglement in Quantum Critical Phenomena. Phys. Rev. Lett. 2003, 90 (22), 227902. https://doi.org/10.1103/PhysRevLett.90.227902.</p></blockquote></li><li class="footnote" id="footnote-wolf_area_2008"><a class="tag is-link" href="#citeref-wolf_area_2008">wolf_area_2008</a><blockquote><p>Wolf, M. M.; Verstraete, F.; Hastings, M. B.; Cirac, J. I. Area Laws in Quantum Systems: Mutual Information and Correlations. Phys. Rev. Lett. 2008, 100 (7), 070502. https://doi.org/10.1103/PhysRevLett.100.070502.</p></blockquote></li><li class="footnote" id="footnote-dirac_note_1930"><a class="tag is-link" href="#citeref-dirac_note_1930">dirac_note_1930</a><blockquote><p>Dirac, P. A. M. Note on Exchange Phenomena in the Thomas Atom. Mathematical Proceedings of the Cambridge Philosophical Society 1930, 26 (3), 376–385. https://doi.org/10.1017/S0305004100016108.</p></blockquote></li><li class="footnote" id="footnote-frenkel_wave_1934"><a class="tag is-link" href="#citeref-frenkel_wave_1934">frenkel_wave_1934</a><blockquote><p>Frenkel, Y. Wave Mechanics, Advanced General Theory; Oxford, 1934; Vol. 1.</p></blockquote></li><li class="footnote" id="footnote-haegeman_timedependent_2011"><a class="tag is-link" href="#citeref-haegeman_timedependent_2011">haegeman_timedependent_2011</a><blockquote><p>Haegeman, J.; Cirac, J. I.; Osborne, T. J.; Pižorn, I.; Verschelde, H.; Verstraete, F. Time-Dependent Variational Principle for Quantum Lattices. Phys. Rev. Lett. 2011, 107 (7), 070601. https://doi.org/10.1103/PhysRevLett.107.070601.</p></blockquote></li><li class="footnote" id="footnote-haegeman_unifying_2016"><a class="tag is-link" href="#citeref-haegeman_unifying_2016">haegeman_unifying_2016</a><blockquote><p>Haegeman, J.; Lubich, C.; Oseledets, I.; Vandereycken, B.; Verstraete, F. Unifying Time Evolution and Optimization with Matrix Product States. Phys. Rev. B 2016, 94 (16), 165116. https://doi.org/10.1103/PhysRevB.94.165116.</p></blockquote></li><li class="footnote" id="footnote-raab_diracfrenkelmclachlan_2000"><a class="tag is-link" href="#citeref-raab_diracfrenkelmclachlan_2000">raab_diracfrenkelmclachlan_2000</a><blockquote><p>Raab, A. On the Dirac–Frenkel/McLachlan Variational Principle. Chemical Physics Letters 2000, 319 (5), 674–678. https://doi.org/10.1016/S0009-2614(00)00200-1.</p></blockquote></li><li class="footnote" id="footnote-dunnett_efficient_2021"><a class="tag is-link" href="#citeref-dunnett_efficient_2021">dunnett_efficient_2021</a><blockquote><p>Dunnett, A. J.; Chin A. W. Efficient bond-adaptive approach for finite-temperature open quantum dynamics using the one-site time-dependent variational principle for matrix product states. Physical Review B, 104(21):214302, Dec 2021. doi:10.1103/PhysRevB.104.214302. </p></blockquote></li></ul></section></article><nav class="docs-footer"><a class="docs-footer-prevpage" href="../examples/protontransfer/">« Proton Transfer Model</a><a class="docs-footer-nextpage" href="../methods/">Methods »</a><div class="flexbox-break"></div><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> on <span class="colophon-date" title="Monday 17 June 2024 16:15">Monday 17 June 2024</span>. Using Julia version 1.7.3.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html> diff --git a/docs/user-guide/index.html b/docs/user-guide/index.html index d3a0cda..b577a85 100644 --- a/docs/user-guide/index.html +++ b/docs/user-guide/index.html @@ -42,4 +42,4 @@ "nchain" => [0.0 0.23466 … 1.84319 1.76098; 0.0 0.00231507 … 0.83105 0.9033… "sy" => [0.0, -0.0133489, -0.0588887, -0.0858181, -0.0759996, -0.048539… "times" => [0.0, 0.0005, 0.001, 0.0015, 0.002, 0.0025, 0.003, 0.0035, 0.00… -</code></pre><section class="footnotes is-size-7"><ul><li class="footnote" id="footnote-Gautschi"><a class="tag is-link" href="#citeref-Gautschi">Gautschi</a><blockquote><p>Gautschi, W. Algorithm 726: ORTHPOL–a package of routines for generating orthogonal polynomials and Gauss-type quadrature rules. ACM Trans. Math. Softw. 20, 21–62 (1994).</p></blockquote></li></ul></section></article><nav class="docs-footer"><a class="docs-footer-prevpage" href="../">« Introduction</a><a class="docs-footer-nextpage" href="../nutshell/">In a nutshell: MPSDynamics.jl for open quantum systems »</a><div class="flexbox-break"></div><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> on <span class="colophon-date" title="Wednesday 12 June 2024 14:11">Wednesday 12 June 2024</span>. Using Julia version 1.7.3.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html> +</code></pre><section class="footnotes is-size-7"><ul><li class="footnote" id="footnote-Gautschi"><a class="tag is-link" href="#citeref-Gautschi">Gautschi</a><blockquote><p>Gautschi, W. Algorithm 726: ORTHPOL–a package of routines for generating orthogonal polynomials and Gauss-type quadrature rules. ACM Trans. Math. Softw. 20, 21–62 (1994).</p></blockquote></li></ul></section></article><nav class="docs-footer"><a class="docs-footer-prevpage" href="../">« Introduction</a><a class="docs-footer-nextpage" href="../nutshell/">In a nutshell: MPSDynamics.jl for open quantum systems »</a><div class="flexbox-break"></div><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> on <span class="colophon-date" title="Monday 17 June 2024 16:15">Monday 17 June 2024</span>. Using Julia version 1.7.3.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html>