diff --git a/README.md b/README.md index 60cf2d7..107ec7b 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,6 @@ in the classroom. Students can also use them for self-learning. * Try on `Materials Cloud` (fast, a few seconds to load) [![Materials Cloud Tool osscar-qmcourse](https://raw.githubusercontent.com/materialscloud-org/mcloud-badge/main/badges/img/mcloud_badge_tools.svg)](https://osscar-quantum-mechanics.materialscloud.io) -* Try on `BinderHub` (can take > 1 minute to load) [![badge](https://img.shields.io/badge/OSSCAR-binder-E66581.svg?logo=data:image/png;base64,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)](https://mybinder.org/v2/gh/osscar-org/quantum-mechanics/master?urlpath=%2Fvoila%2Frender%2Fnotebook%2Findex.ipynb) ## Local installation @@ -42,48 +41,47 @@ This will start the voila server and then open your default browser, where you c Here are the tutorials to demonstrate numerical solution for 1D Schrödinger equation. -| Name | Description | Notebook links | Binder | Materials Cloud | -| ------------- |:-------------:| -----:| -----:| -----:| -| One Quantum Well | The solution for 1 quantum well | [One Quantum Well](./notebook/quantum-mechanics/1quantumwell.ipynb) | [![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/osscar-org/quantum-mechanics/master?urlpath=%2Fvoila%2Frender%2Fnotebook%2Fquantum-mechanics%2F1quantumwell.ipynb) | [![Materials Cloud Tool osscar-qmcourse](https://raw.githubusercontent.com/materialscloud-org/mcloud-badge/main/badges/img/mcloud_badge_tools.svg)](https://osscar-quantum-mechanics.materialscloud.io/voila/render/quantum-mechanics/1quantumwell.ipynb) | -| Two Quantum Wells | The solution for 2 quantum wells | [Two Quantum Wells](./notebook/quantum-mechanics/2quantumwells.ipynb) | [![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/osscar-org/quantum-mechanics/master?urlpath=%2Fvoila%2Frender%2Fnotebook%2Fquantum-mechanics%2F2quantumwells.ipynb) | [![Materials Cloud Tool osscar-qmcourse](https://raw.githubusercontent.com/materialscloud-org/mcloud-badge/main/badges/img/mcloud_badge_tools.svg)](https://osscar-quantum-mechanics.materialscloud.io/voila/render/quantum-mechanics/2quantumwells.ipynb) | -| Asymmetric Well | Avoided crossing in an asymmetric well | [Asymmetric Well](./notebook/quantum-mechanics/asymmetricwell.ipynb) | [![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/osscar-org/quantum-mechanics/master?urlpath=%2Fvoila%2Frender%2Fnotebook%2Fquantum-mechanics%2Fasymmetricwell.ipynb) | [![Materials Cloud Tool osscar-qmcourse](https://raw.githubusercontent.com/materialscloud-org/mcloud-badge/main/badges/img/mcloud_badge_tools.svg)](https://osscar-quantum-mechanics.materialscloud.io/voila/render/quantum-mechanics/asymmetricwell.ipynb) | -| Shooting method | Shooting method with Numerov algorithm | [Shooting method](./notebook/quantum-mechanics/shooting_method.ipynb) | [![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/osscar-org/quantum-mechanics/master?urlpath=%2Fvoila%2Frender%2Fnotebook%2Fquantum-mechanics%2Fshooting_method.ipynb) | [![Materials Cloud Tool osscar-qmcourse](https://raw.githubusercontent.com/materialscloud-org/mcloud-badge/main/badges/img/mcloud_badge_tools.svg)](https://osscar-quantum-mechanics.materialscloud.io/voila/render/quantum-mechanics/shooting_method.ipynb) | -| SOFT | Split operator Fourier transform method | [SOFT](./notebook/quantum-mechanics/soft.ipynb) | [![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/osscar-org/quantum-mechanics/master?urlpath=%2Fvoila%2Frender%2Fnotebook%2Fquantum-mechanics%2Fsoft.ipynb) | [![Materials Cloud Tool osscar-qmcourse](https://raw.githubusercontent.com/materialscloud-org/mcloud-badge/main/badges/img/mcloud_badge_tools.svg)](https://osscar-quantum-mechanics.materialscloud.io/voila/render/quantum-mechanics/soft.ipynb) | -| MSOFT | Multiple Split operator Fourier transform method | [SOFT](./notebook/quantum-mechanics/msoft.ipynb) | [![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/osscar-org/quantum-mechanics/master?urlpath=%2Fvoila%2Frender%2Fnotebook%2Fquantum-mechanics%2Fmsoft.ipynb) | [![Materials Cloud Tool osscar-qmcourse](https://raw.githubusercontent.com/materialscloud-org/mcloud-badge/main/badges/img/mcloud_badge_tools.svg)](https://osscar-quantum-mechanics.materialscloud.io/voila/render/quantum-mechanics/msoft.ipynb) | +| Name | Description | Notebook links | Materials Cloud | +| ------------- |:-------------:| -----:| -----:| +| One Quantum Well | The solution for 1 quantum well | [One Quantum Well](./notebook/quantum-mechanics/1quantumwell.ipynb) | [![Materials Cloud Tool osscar-qmcourse](https://raw.githubusercontent.com/materialscloud-org/mcloud-badge/main/badges/img/mcloud_badge_tools.svg)](https://osscar-quantum-mechanics.materialscloud.io/voila/render/quantum-mechanics/1quantumwell.ipynb) | +| Two Quantum Wells | The solution for 2 quantum wells | [Two Quantum Wells](./notebook/quantum-mechanics/2quantumwells.ipynb) | [![Materials Cloud Tool osscar-qmcourse](https://raw.githubusercontent.com/materialscloud-org/mcloud-badge/main/badges/img/mcloud_badge_tools.svg)](https://osscar-quantum-mechanics.materialscloud.io/voila/render/quantum-mechanics/2quantumwells.ipynb) | +| Asymmetric Well | Avoided crossing in an asymmetric well | [Asymmetric Well](./notebook/quantum-mechanics/asymmetricwell.ipynb) | [![Materials Cloud Tool osscar-qmcourse](https://raw.githubusercontent.com/materialscloud-org/mcloud-badge/main/badges/img/mcloud_badge_tools.svg)](https://osscar-quantum-mechanics.materialscloud.io/voila/render/quantum-mechanics/asymmetricwell.ipynb) | Shooting method | Shooting method with Numerov algorithm | [Shooting method](./notebook/quantum-mechanics/shooting_method.ipynb) [![Materials Cloud Tool osscar-qmcourse](https://raw.githubusercontent.com/materialscloud-org/mcloud-badge/main/badges/img/mcloud_badge_tools.svg)](https://osscar-quantum-mechanics.materialscloud.io/voila/render/quantum-mechanics/shooting_method.ipynb) | +| SOFT | Split operator Fourier transform method | [SOFT](./notebook/quantum-mechanics/soft.ipynb) | [![Materials Cloud Tool osscar-qmcourse](https://raw.githubusercontent.com/materialscloud-org/mcloud-badge/main/badges/img/mcloud_badge_tools.svg)](https://osscar-quantum-mechanics.materialscloud.io/voila/render/quantum-mechanics/soft.ipynb) | +| MSOFT | Multiple Split operator Fourier transform method | [MSOFT](./notebook/quantum-mechanics/msoft.ipynb) | [![Materials Cloud Tool osscar-qmcourse](https://raw.githubusercontent.com/materialscloud-org/mcloud-badge/main/badges/img/mcloud_badge_tools.svg)](https://osscar-quantum-mechanics.materialscloud.io/voila/render/quantum-mechanics/msoft.ipynb) | ### Section 2: Band Theory of Crystals Here are the tutorials to demonstrate the band theory of crystal systems. -| Name | Description | Notebook links | Binder | Materials Cloud | -| ------------- |:-------------:| -----:| -----:| -----:| -| FFT and Planewaves | Fourier Transforms and Plane-Wave Expansions | [FFT and Planewaves](./notebook/band-theory/FFT_and_planewaves.ipynb) | [![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/osscar-org/quantum-mechanics/master?urlpath=%2Fvoila%2Frender%2Fnotebook%2Fband-theory%2FFFT_and_planewaves.ipynb) | [![Materials Cloud Tool osscar-qmcourse](https://raw.githubusercontent.com/materialscloud-org/mcloud-badge/main/badges/img/mcloud_badge_tools.svg)](https://osscar-quantum-mechanics.materialscloud.io/voila/render/band-theory/FFT_and_planewaves.ipynb) | -| Free Electron | Free-electron Bands in a Periodic Lattice | [Free Electron](./notebook/band-theory/free_electron.ipynb) | [![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/osscar-org/quantum-mechanics/master?urlpath=%2Fvoila%2Frender%2Fnotebook%2Fband-theory%2Ffree_electron.ipynb) | [![Materials Cloud Tool osscar-qmcourse](https://raw.githubusercontent.com/materialscloud-org/mcloud-badge/main/badges/img/mcloud_badge_tools.svg)](https://osscar-quantum-mechanics.materialscloud.io/voila/render/band-theory/free_electron.ipynb) | -| Density of States | Density of States (DOS) | [Density of States](./notebook/band-theory/density_of_states.ipynb) | [![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/osscar-org/quantum-mechanics/master?urlpath=%2Fvoila%2Frender%2Fnotebook%2Fband-theory%2Fdensity_of_states.ipynb) | [![Materials Cloud Tool osscar-qmcourse](https://raw.githubusercontent.com/materialscloud-org/mcloud-badge/main/badges/img/mcloud_badge_tools.svg)](https://osscar-quantum-mechanics.materialscloud.io/voila/render/band-theory/density_of_states.ipynb) | -| Pseudopotentials | Norm-conserving pseudopotentials | [Pseudopotentials](./notebook/band-theory/pseudopotential.ipynb) | [![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/osscar-org/quantum-mechanics/master?urlpath=%2Fvoila%2Frender%2Fnotebook%2Fband-theory%2Fpseudopotential.ipynb) | [![Materials Cloud Tool osscar-qmcourse](https://raw.githubusercontent.com/materialscloud-org/mcloud-badge/main/badges/img/mcloud_badge_tools.svg)](https://osscar-quantum-mechanics.materialscloud.io/voila/render/band-theory/pseudopotential.ipynb) | -| Brillouin Zone | Brillouin Zone | [Brillouin Zone](./notebook/band-theory/brillouin_zone.ipynb) | [![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/osscar-org/quantum-mechanics/master?urlpath=%2Fvoila%2Frender%2Fnotebook%2Fband-theory%2Fbrillouin_zone.ipynb) | [![Materials Cloud Tool osscar-qmcourse](https://raw.githubusercontent.com/materialscloud-org/mcloud-badge/main/badges/img/mcloud_badge_tools.svg)](https://osscar-quantum-mechanics.materialscloud.io/voila/render/band-theory/brillouin_zone.ipynb) | +| Name | Description | Notebook links | Materials Cloud | +| ------------- |:-------------:| -----:| -----:| +| FFT and Planewaves | Fourier Transforms and Plane-Wave Expansions | [FFT and Planewaves](./notebook/band-theory/FFT_and_planewaves.ipynb) | [![Materials Cloud Tool osscar-qmcourse](https://raw.githubusercontent.com/materialscloud-org/mcloud-badge/main/badges/img/mcloud_badge_tools.svg)](https://osscar-quantum-mechanics.materialscloud.io/voila/render/band-theory/FFT_and_planewaves.ipynb) | +| Free Electron | Free-electron Bands in a Periodic Lattice | [Free Electron](./notebook/band-theory/free_electron.ipynb) | [![Materials Cloud Tool osscar-qmcourse](https://raw.githubusercontent.com/materialscloud-org/mcloud-badge/main/badges/img/mcloud_badge_tools.svg)](https://osscar-quantum-mechanics.materialscloud.io/voila/render/band-theory/free_electron.ipynb) | +| Density of States | Density of States (DOS) | [Density of States](./notebook/band-theory/density_of_states.ipynb) | [![Materials Cloud Tool osscar-qmcourse](https://raw.githubusercontent.com/materialscloud-org/mcloud-badge/main/badges/img/mcloud_badge_tools.svg)](https://osscar-quantum-mechanics.materialscloud.io/voila/render/band-theory/density_of_states.ipynb) | +| Pseudopotentials | Norm-conserving pseudopotentials | [Pseudopotentials](./notebook/band-theory/pseudopotential.ipynb) | [![Materials Cloud Tool osscar-qmcourse](https://raw.githubusercontent.com/materialscloud-org/mcloud-badge/main/badges/img/mcloud_badge_tools.svg)](https://osscar-quantum-mechanics.materialscloud.io/voila/render/band-theory/pseudopotential.ipynb) | +| Brillouin Zone | Brillouin Zone | [Brillouin Zone](./notebook/band-theory/brillouin_zone.ipynb) | [![Materials Cloud Tool osscar-qmcourse](https://raw.githubusercontent.com/materialscloud-org/mcloud-badge/main/badges/img/mcloud_badge_tools.svg)](https://osscar-quantum-mechanics.materialscloud.io/voila/render/band-theory/brillouin_zone.ipynb) | ### Section 3: Molecule and Lattice Vibration -| Name | Description | Notebook links | Binder | Materials Cloud | -| ------------- |:-------------:| -----:| -----:| -----:| -| Phonon 1D | lattice vibration for one dimensional system | [Phonons 1D](./notebook/lattice-vibration/Phonon_1D.ipynb) | [![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/osscar-org/quantum-mechanics/master?urlpath=%2Fvoila%2Frender%2Fnotebook%2Flattice-vibration%2FPhonon_1D.ipynb) | [![Materials Cloud Tool osscar-qmcourse](https://raw.githubusercontent.com/materialscloud-org/mcloud-badge/main/badges/img/mcloud_badge_tools.svg)](https://osscar-quantum-mechanics.materialscloud.io/voila/render/lattice-vibration/Phonon_1D.ipynb) | -| Phonon 2D | lattice vibration for two dimensional systems | [Phonon 2D](./notebook/lattice-vibration/Phonon_2D.ipynb) | [![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/osscar-org/quantum-mechanics/master?urlpath=%2Fvoila%2Frender%2Fnotebook%2Flattice-vibration%2FPhonon_2D.ipynb) | [![Materials Cloud Tool osscar-qmcourse](https://raw.githubusercontent.com/materialscloud-org/mcloud-badge/main/badges/img/mcloud_badge_tools.svg)](https://osscar-quantum-mechanics.materialscloud.io/voila/render/lattice-vibration/Phonon_2D.ipynb) | -| Molecular Vibrations | introduce to molecular vibrations | [Molecular Vibration](./notebook/lattice-vibration/Molecule_Vibration.ipynb) | [![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/osscar-org/quantum-mechanics/master?urlpath=%2Fvoila%2Frender%2Fnotebook%2Flattice-vibration%2FMolecule_Vibration.ipynb) | [![Materials Cloud Tool osscar-qmcourse](https://raw.githubusercontent.com/materialscloud-org/mcloud-badge/main/badges/img/mcloud_badge_tools.svg)](https://osscar-quantum-mechanics.materialscloud.io/voila/render/lattice-vibration/Molecule_Vibration.ipynb) | +| Name | Description | Notebook links | Materials Cloud | +| ------------- |:-------------:| -----:| -----:| +| Phonon 1D | lattice vibration for one dimensional system | [Phonons 1D](./notebook/lattice-vibration/Phonon_1D.ipynb) | [![Materials Cloud Tool osscar-qmcourse](https://raw.githubusercontent.com/materialscloud-org/mcloud-badge/main/badges/img/mcloud_badge_tools.svg)](https://osscar-quantum-mechanics.materialscloud.io/voila/render/lattice-vibration/Phonon_1D.ipynb) | +| Phonon 2D | lattice vibration for two dimensional systems | [Phonon 2D](./notebook/lattice-vibration/Phonon_2D.ipynb) | [![Materials Cloud Tool osscar-qmcourse](https://raw.githubusercontent.com/materialscloud-org/mcloud-badge/main/badges/img/mcloud_badge_tools.svg)](https://osscar-quantum-mechanics.materialscloud.io/voila/render/lattice-vibration/Phonon_2D.ipynb) | +| Molecular Vibrations | introduce to molecular vibrations | [Molecular Vibration](./notebook/lattice-vibration/Molecule_Vibration.ipynb) | [![Materials Cloud Tool osscar-qmcourse](https://raw.githubusercontent.com/materialscloud-org/mcloud-badge/main/badges/img/mcloud_badge_tools.svg)](https://osscar-quantum-mechanics.materialscloud.io/voila/render/lattice-vibration/Molecule_Vibration.ipynb) | ### Section 4: Molecular Dynamics -| Name | Description | Notebook links | Binder | Materials Cloud | -| ------------- |:-------------:| -----:| -----:| -----:| -| Verlet Integration | Verlet integration | [Verlet Integration](./notebook/molecular-dynamics/verlet_integration.ipynb) | [![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/osscar-org/quantum-mechanics/master?urlpath=%2Fvoila%2Frender%2Fnotebook%2Fmolecular-dynamics%2Fverlet_integration.ipynb) | [![Materials Cloud Tool osscar-qmcourse](https://raw.githubusercontent.com/materialscloud-org/mcloud-badge/main/badges/img/mcloud_badge_tools.svg)](https://osscar-quantum-mechanics.materialscloud.io/voila/render/molecular-dynamics/verlet_integration.ipynb) | +| Name | Description | Notebook links | Materials Cloud | +| ------------- |:-------------:| -----:| -----:| +| Verlet integration | Verlet integration | [Verlet Integration](./notebook/molecular-dynamics/verlet_integration.ipynb) | [![Materials Cloud Tool osscar-qmcourse](https://raw.githubusercontent.com/materialscloud-org/mcloud-badge/main/badges/img/mcloud_badge_tools.svg)](https://osscar-quantum-mechanics.materialscloud.io/voila/render/molecular-dynamics/verlet_integration.ipynb) | ### Section 5: Statistical Mechanics -| Name | Description | Notebook links | Binder | Materials Cloud | -| ------------- |:-------------:| -----:| -----:| -----:| -| Metropolis Monte Carlo | Metropolis-Hastings Monte Carlo | [Metropolis Monte Carlo](./notebook/statistical-mechanics/monte_carlo_parabolic.ipynb) | [![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/osscar-org/quantum-mechanics/master?urlpath=%2Fvoila%2Frender%2Fnotebook%2Fstatistical-mechanics%2Fmonte_carlo_parabolic.ipynb) | [![Materials Cloud Tool osscar-qmcourse](https://raw.githubusercontent.com/materialscloud-org/mcloud-badge/main/badges/img/mcloud_badge_tools.svg)](https://osscar-quantum-mechanics.materialscloud.io/voila/render/statistical-mechanics/monte_carlo_parabolic.ipynb) | -| Monte Carlo Integration | Monte Carlo Integration | [Monte Carlo Integration](./notebook/statistical-mechanics/monte_carlo_pi.ipynb) | [![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/osscar-org/quantum-mechanics/master?urlpath=%2Fvoila%2Frender%2Fnotebook%2Fstatistical-mechanics%2Fmonte_carlo_pi.ipynb) | [![Materials Cloud Tool osscar-qmcourse](https://raw.githubusercontent.com/materialscloud-org/mcloud-badge/main/badges/img/mcloud_badge_tools.svg)](https://osscar-quantum-mechanics.materialscloud.io/voila/render/statistical-mechanics/monte_carlo_pi.ipynb) | -| Ising Model | Ising Model | [Ising Model](./notebook/statistical-mechanics/ising_model.ipynb) | [![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/osscar-org/quantum-mechanics/master?urlpath=%2Fvoila%2Frender%2Fnotebook%2Fstatistical-mechanics%2Fising_model.ipynb) | [![Materials Cloud Tool osscar-qmcourse](https://raw.githubusercontent.com/materialscloud-org/mcloud-badge/main/badges/img/mcloud_badge_tools.svg)](https://osscar-quantum-mechanics.materialscloud.io/voila/render/statistical-mechanics/ising_model.ipynb) | +| Name | Description | Notebook links | Materials Cloud | +| ------------- |:-------------:| -----:| -----:| +| Metropolis Monte Carlo | Metropolis-Hastings Monte Carlo | [Metropolis Monte Carlo](./notebook/statistical-mechanics/monte_carlo_parabolic.ipynb) | [![Materials Cloud Tool osscar-qmcourse](https://raw.githubusercontent.com/materialscloud-org/mcloud-badge/main/badges/img/mcloud_badge_tools.svg)](https://osscar-quantum-mechanics.materialscloud.io/voila/render/statistical-mechanics/monte_carlo_parabolic.ipynb) | +| Monte Carlo Integration | Monte Carlo Integration | [Monte Carlo Integration](./notebook/statistical-mechanics/monte_carlo_pi.ipynb) | [![Materials Cloud Tool osscar-qmcourse](https://raw.githubusercontent.com/materialscloud-org/mcloud-badge/main/badges/img/mcloud_badge_tools.svg)](https://osscar-quantum-mechanics.materialscloud.io/voila/render/statistical-mechanics/monte_carlo_pi.ipynb) | +| Ising Model | Ising Model | [Ising Model](./notebook/statistical-mechanics/ising_model.ipynb) | [![Materials Cloud Tool osscar-qmcourse](https://raw.githubusercontent.com/materialscloud-org/mcloud-badge/main/badges/img/mcloud_badge_tools.svg)](https://osscar-quantum-mechanics.materialscloud.io/voila/render/statistical-mechanics/ising_model.ipynb) | ## How to contribute @@ -98,7 +96,7 @@ You can then go ahead and create a branch off master to work on your new noteboo ```bash git checkout -b new_notebook_branch ``` -After making your changes, you can push this new branch to the remote quantum-mechanics repo and open a pull request for this branch to be merged with the master branch. After review, it can be merged and automatically deployed to the materials cloud server. +After making your changes, you can push this new branch to the remote quantum-mechanics repo and open a pull request for this branch to be merged with the master branch. After review, it can be merged and automatically deployed to the materials cloud server. This process is illustrated below. ## Development @@ -113,7 +111,7 @@ git branch your-branch ``` Once you create a pull request from your branch to the master, the workflows -will automatically deploy the apps to the mybinder.org and matcloud.xyz servers +will automatically deploy the apps to the matcloud.xyz server. (it needs to pass the voila test workflow). You can check and review the deployed apps. After merging the PR to the master branch, the web apps will be automatically diff --git a/notebook/quantum-mechanics/asymmetricwell.ipynb b/notebook/quantum-mechanics/asymmetricwell.ipynb index f98bd06..d478486 100644 --- a/notebook/quantum-mechanics/asymmetricwell.ipynb +++ b/notebook/quantum-mechanics/asymmetricwell.ipynb @@ -415,7 +415,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.12" + "version": "3.11.0" }, "voila": { "authors": "Dou Du and Giovanni Pizzi" diff --git a/notebook/quantum-mechanics/images/SOFT_algorithm.png b/notebook/quantum-mechanics/images/SOFT_algorithm.png index b0aabbd..720678c 100644 Binary files a/notebook/quantum-mechanics/images/SOFT_algorithm.png and b/notebook/quantum-mechanics/images/SOFT_algorithm.png differ diff --git a/notebook/quantum-mechanics/shooting_method.ipynb b/notebook/quantum-mechanics/shooting_method.ipynb index feec463..b24f050 100644 --- a/notebook/quantum-mechanics/shooting_method.ipynb +++ b/notebook/quantum-mechanics/shooting_method.ipynb @@ -4,7 +4,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# **Shooting Method with Numerov Algorithm to Solve the Time Independent Schrödinger Equation for 1D Quantum Well**\n", + "# **Using the Shooting Method to Solve the Time-Independent Schrödinger Equation for a 1D Quantum Well**\n", "\n", "**Authors:** Dou Du, Taylor James Baird and Giovanni Pizzi \n", "\n", @@ -12,8 +12,7 @@ "\n", "**Source code:** https://github.com/osscar-org/quantum-mechanics/blob/master/notebook/quantum-mechancis/shooting_method.ipynb\n", "\n", - "This notebook demonstrates the shooting method with the Numerov algorithm to search the \n", - "eigenfunctions (wavefunctions) and eigenvalues for a one-dimensional quantum well.\n", + "This notebook demonstrates the use of the shooting method to search for the eigenfunctions (wavefunctions) and eigenvalues of the time-independent Schrödinger equation in the case of a one-dimensional quantum well potential.\n", "\n", "
" ] @@ -24,12 +23,9 @@ "source": [ "## **Goals**\n", "\n", - "* Understand the mathematical method to solve the Schrödinger equation \n", - "numerically and the boundary condition for the 1D quantum well.\n", - "* Understand the Numerov algorithm and how to improve the accuracy with \n", - "high order correction.\n", - "* Know how to use the shooting method with the Numerov algorithm to get \n", - "the eigenvalues and eigenfunctions." + "* Understand the mathematical formalism underlying the numerical approach to solving the Schrödinger equation with boundary conditions in the case of a 1D quantum well.\n", + "* Learn how to use the shooting method with a numerical integrator to obtain eigenvalues and eigenfunctions of the Schrödinger equation.\n", + "* Appreciate how the accuracy of the solutions can be improved by including higher-order corrections in the numerical integration scheme." ] }, { @@ -43,43 +39,59 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "tags": [] + }, "source": [ "## **Tasks and exercises**\n", "\n", - "1. Move the sliders for the width and depth of the quantum well. Do you understand\n", - "the concept of quantum confinement? Do you know any numerical method to solve \n", - "the Schrödinger equation for 1D quantum well?\n", + "1. Move the sliders which control the width and depth of the quantum well. Do you understand\n", + "the concept of quantum confinement? Can you think of any numerical method that can be used to solve \n", + "the Schrödinger equation for a 1D quantum well?\n", "\n", "
\n", " Solution\n", - " Please check the previous notebooks for the \n", + "
\n", + "\n", + " Please check the previous notebook which looks at solving the time-independent Shrödinger equation for the \n", " 1D quantum well.\n", - " In that notebook, the one-dimensional Shrödinger equation was solved\n", - " by numerical matrix diagonalization.\n", + " In that notebook, the phenomenon of quantum confinement was investigated for the 1D quantum well and the Shrödinger equation was solved\n", + " by numerical matrix diagonalization. \n", "
\n", "\n", - "2. With the default width (1.20) and depth (0.20), move the sliders \n", - "(on the left side) to the targeted energies. Report the energy when the tail \n", - "of the wavefunction on the right converge to zero (line color turns to green). \n", - "Is the energy the same as the eigenvalue shown in the right plot? You can also \n", - "use the \"auto search\" button to get the eigenvalues, which searches the next \n", - "solution when increasing the energy (i.e. it searches always upwards).\n", + "2. The goal of this task is to obtain the value of the lowest energy eigenvalue. With the default width (1.20) and depth (0.20), move the sliders \n", + "(on the left side) to target the energy of the lowest state. There are multiple sliders to allow specification of very high precision for the trial eigenvalue. You can also \n", + "use the \"auto search\" button to get the eigenvalues, which searches for the next \n", + "solution in order of increasing energy. Report the value of the energy when the tail \n", + "of the wavefunction on the right converges to zero.\n", + "Comparing visually, is the energy the same as the eigenvalue shown in the plot on the right? \n", "
\n", " Solution\n", - " The 1st eigenvalue is about 0.0092. You may need to click the \"Flip\n", - " eigenfunctions\" button to make the comparsion. Check the exact eigenvalue \n", + "
\n", + " The 1st eigenvalue is about 0.00919429. Check the exact eigenvalue \n", " by clicking on the eigenfunction in the plot.\n", "
\n", " \n", - "3. Follow the same step to get all the eigenvalues, and make a table to compare \n", - "the results with the eigenvalues from the figure. Compare the results with \n", - "and without using the 4th derivative correction (checkbox). Which values \n", - "should be more accurate and why?\n", + "3. Follow the same steps to get the 2nd, 3rd and 4th eigenvalues (you may have to use the \"flip eigenfunction\" button to match up the trial and target wavefunctions). Report the resulting values of the energy eigenvalues in a table with the full precision outputted in the \"Current value\" field after convergence. Compare the results with the target eigenvalues from the figure. Repeat the the procedure now without using the 4th order correction (uncheck the \"incl. 4th derivative\" checkbox). Which of the eigenvalues is most affected by removal of the 4th order correction? Why do you think this is?\n", + "
\n", + " Solution\n", + "
\n", + " When higher-order terms are included in the construction of the numerical integration scheme, the error in our approximation of the derivatives in the Shrödinger equation decreases accordingly. In the present case, the improvement in accuracy is small but still numerically measurable. In other systems, the need for higher-order integrators is necessary to avoid pathological behaviour and even obtain reasonable results (the quantum harmonic oscillator is one such example). A typical higher-order integration scheme that is used to solve the Shrödinger equation is the Numerov method. You can have a read of the background theory notebook for additional information and references. You should find that the highest energy eigenvalue is that which is most affected by the accuracy of the numerical integration scheme (what order of approximation to the derivative we are using). Intuitively this makes sense as the wavefunctions corresponding to higher energy eigenvalues possess more nodes and therefore have a more oscillatory nature than lower energy wavefunctions. Consequently, the curvature of these wavefunctions is greater and our ability to correctly capture this is reliant on the accuracy of our approximation to the second derivative.\n", + "
\n", + " \n", + "4. As you will have seen in the previous task, we sometimes have to flip our trial wavefunction in order to get it to match up with the target eigenfunction. Firstly, what part of the algorithm causes the need for this flipping to obtain the target wavefunction? Secondly, why is is acceptable for us to do this flipping? \n", + "
\n", + " Solution\n", + "
\n", + " As is mentioned in the background theory notebook, the initial two values of the trial wavefunction used in our iterative ODE solver at the left-hand-side boundary are chosen to be zero and a small number (in our implementation this small number is chosen to be positive). The exact value of $\\epsilon$ is irrelevant as it just leads to a different normalization factor for the wavefunction. In other words, we have $\\psi(x_0)=0$ and $\\psi(x_1)=\\epsilon > 0$. This forces the derivative at $x_0$, $\\psi'(x_0)$, to be positive. The reason why it is alright for us to flip $\\psi\\to - \\psi$ is due to the fact the time-independent Shrödinger equation equation is symmetric under a sign-flip of the solution wavefunction. Consequently, the negative of a solution is also a solution.\n", + "
\n", + " \n", + "4. In comparison with the previous method of solving the time-independent Schrodinger equation we have seen (matrix diagonalization), how does this approach fare in terms of computational expense? \n", "
\n", " Solution\n", - " Please check the background theory section for the Numerov algorithm.\n", - "
" + "
\n", + " Solving for the eigenvalues and eigenfunctions of the time-independent Shrödinger equation equation via matrix diagonalization requires diagonalization of a full matrix on a grid representing our system. This incurs a large cost with regard to required to the memory required. Note also that if we wish to use higher order approximations to the derivative in the matrix diagonalization method, this memory requirement is further increased as bands of nonzero elements in the Hamiltonian matrix shall be wider for these methods (more points are used to approximate the derivatives). On the other hand, the approach discussed in this notebook (shooting method + numerical integration scheme) ultimately let's us solve the time-independent Shrödinger equation by keeping only the values of the trial wavefunction at two previous points plus the current point.\n", + " " ] }, { @@ -474,32 +486,29 @@ "\n", "## Interactive figures\n", "\n", - "In the interative figure, the soild lines show the wavefunctions and their\n", - "corresponding eigenvalues, which are solved by matrix diagonalization. \n", + "In the interactive figure, the solid lines show the wavefunctions and their corresponding eigenvalues, which are obtained via matrix diagonalization. \n", "There is a red dash line at the bottom of the figure, which shows the \n", - "eigenfunction solved by Numerov algorithm. \n", + "eigenfunction obtained via use of the shooting method.\n", "\n", "## Controls\n", "\n", - "There are four vertical sliders to control the targeted eigenvalue E. The first \n", + "\n", + "There are four vertical sliders to control the trial eigenvalue, E, used in the shooting method. Multiple slides are necessary in order to affect precise control over the value of the trial eigenvalue. The first \n", "slider controls the precision for tenths ($10^{-1}$) and hundredths ($10^{-2}$). \n", "The second slider controls thousandths ($10^{-3}$) and ten thousandths decimal ($10^{-4}$). The third slider controls hundred thousandths ($10^{-5}$) and \n", "millionths ($10^{-6}$). The last slider controls ten millionths ($10^{-7}$) \n", "and hundred millionths ($10^{-8}$). The current value is also displayed under \n", "the sliders.\n", "\n", - "You need slowly move the 1st slider and observe the tail of the dashed line on \n", + "You need to slowly move the 1st slider and observe the tail of the dashed line on \n", "the right edge. Once you see the tail change directions (up or down), the true \n", - "value should be between these two values. You need to go back to a smaller value \n", - "and start to tune the 2nd slider. Then the same procedure is for the 3rd and 4th\n", - "slider. When the absolute value at the right edge is smaller than 0.001, the \n", - "dashed red line will turn green. It reaches the desired accuracy for the \n", - "wavefunction. Then, you can read out the current targeted value, which is the\n", + "value of the eigenvalue should be between these two values. You need to go back to a smaller value and start to tune the 2nd slider. Then the same procedure is used for the 3rd and 4th sliders. When the absolute value at the right edge is smaller than 0.001, the \n", + "dashed red line will turn green. At this point it has reached the desired accuracy for the \n", + "wavefunction. You can then read out the current targeted value, which is the\n", "corresponding eigenvalue.\n", "\n", "You can also use the `Auto search` button, which finds the closest eigenvalue \n", - "and eigenfunction (search in the upward direction). In order to make a comparison, \n", - "you may also need to click the `Flip eigenfunctions` button." + "and eigenfunction to that currently targeted by the sliders (the search is performed in the upward direction). In order to make a comparison between the true eigenfunction and that obtained via solution of the Shrödinger equation with the guess eigenvalue, you may also need to click the `Flip eigenfunctions` button (see task 4)." ] }, { @@ -526,7 +535,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.12" + "version": "3.11.0" }, "voila": { "authors": "Dou Du and Giovanni Pizzi" diff --git a/notebook/quantum-mechanics/soft.ipynb b/notebook/quantum-mechanics/soft.ipynb index 3cc273a..1295c33 100644 --- a/notebook/quantum-mechanics/soft.ipynb +++ b/notebook/quantum-mechanics/soft.ipynb @@ -12,7 +12,7 @@ "\n", "**Source code:** https://github.com/osscar-org/quantum-mechanics/blob/master/notebook/quantum-mechanics/soft.ipynb\n", "\n", - "This notebook presents the split operator Fourier transform (SOFT) numerical method for solving the one-dimensional time-dependent Schrödinger equation.\n", + "This notebook presents the Split Operator Fourier Transform (SOFT) numerical method for solving the one-dimensional time-dependent Schrödinger equation.\n", "
" ] }, @@ -21,10 +21,10 @@ "metadata": {}, "source": [ "## **Goals**\n", - "* Understand the various steps in the SOFT algorithm and how they are translated to code.\n", - "* Familiarize yourself with the key assumptions underlying the algorithm and how their validity depends on the values of the parameters used in the simulation.\n", - "* Use the SOFT method to investigate various quantum mechanical features which appear in the dynamics of a quantum system.\n", - "* Observe the manifestation of Heisenberg's uncertainty principle in the time evolution of a nuclear wavepacket." + "* Use the SOFT method to observe the evolution of a quantum mechanical system in the coordinate ($X$) and momentum ($P$) representations using different potentials.\n", + "* Background theory: understand the steps involved in the SOFT algorithm and how they are translated to code.\n", + "* Explore how the performance of the simulations depends on different core parameters.\n", + "* As in the first point, observe the evolution of the system in the position and momentum representations and take note of the manifestation of Heisenberg's uncertainty principle." ] }, { @@ -43,23 +43,23 @@ "## **Tasks and exercises**\n", "\n", "
    \n", - "
  1. Investigate the dependence on timestep of the stability of the dynamics (try moving the slider for $dt$ and monitor the behaviour of the various control properties of the simulation).\n", + "
  2. Investigate the dependence on timestep of the stability of the dynamics (move the slider for $dt$ and monitor the total energy of the system and norm of the wavefunction).\n", "
    \n", " Solution\n", - " One may observe that as the timestep employed in the simulation is increased, the conservation of total energy of the system degrades until eventually the timestep is so large that the dynamics becomes totally unstable. The reason why this integration scheme does not conserve total energy exactly may be attributed to the non-commutativity of the split-operator propagator with the Hamiltonian. It is worth noting, however, that norm conservation is maintained even as one increases the timestep. This latter fact is due to the unitarity of the propagator in the split-operator scheme.\n", + " Observe that as the timestep employed in the simulation is increased, the conservation of total energy of the system degrades until eventually the timestep is so large that the dynamics becomes totally unstable. The reason why this integration scheme does not conserve total energy exactly may be attributed to the non-commutativity of the split-operator propagator with the Hamiltonian. It is worth noting, however, that norm conservation is maintained even as one increases the timestep. This latter fact is due to the unitarity of the propagator in the split-operator scheme.\n", "
    \n", "
  3. \n", "
  4. What dictates the maximum size of the timestep that we can use for the SOFT algorithm (consider the main assumptions/approximations that are made when formulating the propagation scheme for SOFT).\n", "
    \n", " Solution\n", - " Recall that the central approximation used in the derivation of the SOFT propagation scheme is in the truncation of the Trotter product formula: $e^{A+B} = \\lim\\limits_{P \\to \\infty} (e^{\\frac{A}{P}} e^{\\frac{B}{P}})^{P} \\approx (e^{\\frac{A}{N}} e^{\\frac{B}{N}})^{N}$ for $N$ sufficiently large. This approximation becomes more and more accurate the larger we make the value of $N$. In our specific case we have $e^{\\frac{it}{\\hbar} (\\hat{T} + \\hat{V} )}$ and we approximate this via the product \n", - " $(e^{\\frac{idt}{\\hbar}\\hat{T} } e^{\\frac{idt}{\\hbar}\\hat{V} })^{N_{\\text{steps}}}$ where $N_{\\text{steps}}\\cdot dt = t$.\n", + " Recall that the central approximation used in the derivation of the SOFT propagation scheme is in the truncation of the (symmetric) Trotter product formula: $e^{A+B} = \\lim\\limits_{P \\to \\infty} (e^{\\frac{B}{2P}}e^{\\frac{A}{P}} e^{\\frac{B}{2P}})^{P} \\approx (e^{\\frac{B}{2N}}e^{\\frac{A}{N}} e^{\\frac{B}{2N}})^{N}$ for $N$ sufficiently large. This approximation becomes more and more accurate the larger we make the value of $N$. In our specific case we have $e^{\\frac{it}{\\hbar} (\\hat{T} + \\hat{V} )}$ and we approximate this via the product \n", + " $(e^{\\frac{it}{2\\hbar N_{\\text{steps}}}\\hat{V} }e^{\\frac{it}{\\hbar N_{\\text{steps}}}\\hat{T} } e^{\\frac{it}{2\\hbar N_{\\text{steps}}}\\hat{V} })^{N_{\\text{steps}}}$ where $N_{\\text{steps}}\\cdot dt = t$. This approximation therefore becomes increasingly more accurate the larger $N_{\\text{steps}}$ (or equivalently the smaller we make $dt$).\n", "
    \n", "
  5. \n", "
  6. Why is the use of the SOFT algorithm unfeasible for larger systems (think about how much data is needed to represent the state of the system on a computer and how many operations are required to carry out the propagation)?\n", "
    \n", " Solution\n", - " In order to implement the MSOFT algorithm on a computer it is necessary to discretize the nuclear wavefunction. To do so, we must introduce a grid of points that make up the space throughout which the wavefunction extends. Say that for each dimension of the grid we use $N$ grid points. For a system in $d$ dimensions, this means that we shall require $N^d$ points to represent the wavefunction of a single nucleus. Now, if we want to instead consider a system of, say $n$ nuclei, then we find that a total number of $N^{nd}$ grid points are required. In other words, the amount of data required to represent our system scales exponentially with increasing system size. Moreover, since we must loop over each of these grid points to carry out the time evolution of our system - the number of operations required also scales exponentially. This is what renders the SOFT algorithm unsuitable for large systems.\n", + " In order to implement the SOFT algorithm on a computer it is necessary to discretize the nuclear wavefunction. To do so, we must introduce a grid of points that make up the space throughout which the wavefunction extends. Say that for each dimension of the grid we use $N$ grid points. For a system in $d$ dimensions, this means that we shall require $N^d$ points to represent the wavefunction of a single nucleus. Now, if we want to instead consider a system of, say $n$ nuclei, then we find that a total number of $N^{nd}$ grid points are required. In other words, the amount of data required to represent our system scales exponentially with increasing system size. Moreover, since we must loop over each of these grid points to carry out the time evolution of our system - the number of operations required also scales exponentially. This is what renders the SOFT algorithm unsuitable for large systems.\n", "
    \n", "
  7. \n", "
  8. Observe the evolution of the wavefunction in both position and momentum space. Do you notice the manifestation of Heisenberg's uncertainty principle? Can you explain it?\n", @@ -92,7 +92,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 33, "metadata": {}, "outputs": [], "source": [ @@ -111,7 +111,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 34, "metadata": {}, "outputs": [], "source": [ @@ -208,7 +208,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 35, "metadata": {}, "outputs": [], "source": [ @@ -255,7 +255,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 36, "metadata": {}, "outputs": [], "source": [ @@ -295,9 +295,24 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 37, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "f5d32d1194954129a59ea1cbe259da68", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Accordion(children=(VBox(children=(Dropdown(description='Potential type:', options=('1. Box potential', '2. Mo…" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "style = {'description_width': 'initial'}\n", "\n", @@ -416,7 +431,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 38, "metadata": {}, "outputs": [], "source": [ @@ -437,9 +452,34 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 39, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/tmp/ipykernel_916868/673579290.py:75: ComplexWarning: Casting complex values to real discards the imaginary part\n", + " self.norm[int(self.t/self.dt)] = sum(np.conj(self.psi_x)*self.psi_x)*self.dx\n", + "/tmp/ipykernel_916868/673579290.py:72: ComplexWarning: Casting complex values to real discards the imaginary part\n", + " self.epot[int(self.t/self.dt)] = epot\n" + ] + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "571777b3cd834fd2bb0ddd9e424e2e85", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Accordion(children=(VBox(children=(HBox(children=(FloatSlider(value=1.0, description='mass: ', max=5.0, min=0.…" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "V_x = square_barrier(x, a, V0)\n", "V_x[x < -98] = 100\n", @@ -477,9 +517,63 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 40, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "fa80577f247044a9936690e95c77e2b3", + "version_major": 2, + "version_minor": 0 + }, + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA+gAAAPoCAYAAABNo9TkAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/P9b71AAAACXBIWXMAAA9hAAAPYQGoP6dpAADFVElEQVR4nOzdeXwU9f3H8ffmvki4QkI4o1xyhkMoKAIViIi21AstLYeKtQWVYkXxpyBWRUUFa1G0CtEqoniAFYsiGtSCXBIURAQkciacSch97Pz+WHdhIZuLbGZ283o+HvvY3dmZ2c9+IDvz2e8xNsMwDAEAAAAAAFMFmB0AAAAAAACgQAcAAAAAwBIo0AEAAAAAsAAKdAAAAAAALIACHQAAAAAAC6BABwAAAADAAijQAQAAAACwAAp0AAAAAAAsgAIdAAAAAAALoEAHAAAAAMACKNABAAAAALAACnQAAAAAACyAAh0AAAAAAAugQAcAAAAAwAIo0AEAAAAAsAAKdAAAAAAALIACHQAAAAAAC6BABwAAAADAAijQAQAAAACwAAp0AAAAAAAsgAIdAAAAAAALoEAHAAAAAMACKNABAAAAALAACnQAAAAAACyAAh0AAAAAAAugQAcAAAAAwAIo0AEAAAAAsAAKdAAAAAAALIACHQAAAAAAC6BABwAAAADAAijQAQAAAACwAAp0AAAAAAAsgAIdAAAAAAALoEAHAAAAAMACKNABAAAAALAACnQAAAAAACyAAh0AAAAAAAugQAcAAAAAwAIo0AEAAAAAsAAKdAAAAAAALIACHQAAAAAAC6BABwAAAADAAijQAQAAAACwAAp0AAAAAAAsgAIdAAAAAAALoEAHAAAAAMACKNABAAAAALAACnQAAAAAACyAAh0AAAAAAAugQAcAAAAAwAIo0AEAAAAAsAAKdAAAAAAALIACHQAAAAAAC6BABwAAAADAAijQAQAAAACwAAp0AAAAAAAsgAIdAAAAAAALoEAHAAAAAMACKNABAAAAALAACnQAAAAAACyAAh0AAAAAAAugQAcAAAAAwAIo0AEAAAAAsAAKdAAAAAAALIACHQAAAAAAC6BABwAAAADAAijQAQAAAACwAAp0AAAAAAAsgAIdAAAAAAALoEAHAAAAAMACKNABAAAAALAACnQAAAAAACyAAh0AAAAAAAugQAcAAAAAwAIo0AEAAAAAsAAKdAAAAAAALIACHQAAAAAAC6BABwAAAADAAijQAQAAAACwAAp0AAAAAAAsgAIdAAAAAAALoEAHAAAAAMACKNABAAAAALAACnQAAAAAACyAAh0AAAAAAAugQAcAAAAAwAIo0AEAAAAAsAAKdAAAAAAALIACHQAAAAAAC6BABwAAAADAAijQAQAAAACwAAp0AAAAAAAsgAIdAAAAAAALoEAHAAAAAMACKNABAAAAALAACnQAAAAAACyAAh0AAAAAAAugQAcAAAAAwAIo0AHUyNq1a/XQQw8pKyvLlPfPysrSbbfdptjYWEVGRmrIkCH65ptvTIkFAAAAqA0U6ABqZO3atZo1a5YpBbrdbtfIkSO1ePFiTZ48WU8++aSOHDmiwYMHa9euXXUeDwAAAFAbgswOAACq65133tHatWu1dOlSXXfddZKkG264QR06dNDMmTO1ePFikyMEAAAAqo8WdADV9tBDD+mee+6RJCUmJspms8lmsyk9Pb1O3v+dd95RXFycrrnmGtey2NhY3XDDDVq+fLmKiorqJA4AAACgNtGCDqDarrnmGv3444968803NXfuXDVt2lSSo0j2JD8/X/n5+ZXuOzAwUI0aNapwnS1btqhXr14KCHD/jbFv37566aWX9OOPP6pbt25V+CQAAACAdVCgA6i27t27q1evXnrzzTc1atQotW3bttJtnnzySc2aNavS9dq0aVNpS/zhw4d12WWXnbO8efPmkqRDhw5RoAMAAMDnUKADqBNjx47VpZdeWul64eHhla5TUFCg0NDQc5aHhYW5XgcAAAB8DQU6gDpxwQUX6IILLqiVfYWHh5c7zrywsND1OgAAAOBrKNAB1Inc3Fzl5uZWul5gYGCFY9klR1f2w4cPn7PcuSwhIaFmQQIAAAAmokAHUCM2m61a6z/11FO1NgY9KSlJX375pex2u9tEcevXr1dERIQ6dOhQrdgAAAAAK6BAB1AjkZGRkqSsrKwqrV+bY9Cvu+46vfPOO3rvvfdc10E/duyYli5dqquvvrrc8ekAAACA1dkMwzDMDgKA79m4caP69u2rK6+8UjfeeKOCg4N19dVXuwp3byorK9Oll16qbdu26Z577lHTpk31/PPPa9++fdq4caM6duzo9RgAAACA2kaBDqDGHnnkES1YsECHDx+W3W7X3r17q3TJtdpw8uRJ3XPP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/PIbrmfPnurXr59++OEHt+VpaWm68sorTYoKqENHjtRO93bpdBd3L49BZxZ3oHr+9Kc/6aKLLtLGjRu1c+dOzZkzR59++ql69erlalWviU2bNqlnz57q2bOnJGnq1Knq2bOnZsyYIUk6fPiwq1iXpMTERK1YsUKrVq1Sjx499PTTT+vll1/mEmuoVeHh4a4fjrgG+i+cE72dVaBXmivnj/d0cwcsyW+6uJ9p0aJFmjlzpi699FItW7ZMzZo10wMPPKB3332XAh31w5EjUuvWtbOvyEjHwZwWdMBS9uzZo/fee08dOnSQJLVr105//OMfdcMNN2jKlClaunRpjfY7ePDgCoeGpKSklLvNli1bavR+AGrIWaBXt7ccBTpgaX7Zgi5Js2bN0tSpUzVs2DB17dpVp06d0rp16/Sf//ynTuOYP3++2rZtq7CwMPXr108bNmzwuO7gwYNls9nOuY0cOdK1zvjx4895/YorrqiLjwJfYRi124IuOVrRKdABS7nooot05Ky/S5vNpocfflgrV640KSoAdcZDF/dKOdfnUmuAJfllgZ6Zmam77rpLjzzyiDp37qzg4GCNHz9effv2rdM43nrrLU2dOlUzZ87UN998ox49eig5OfmcEyqn9957T4cPH3bdtm3bpsDAQF1//fVu611xxRVu61V1Vl/UEydPSqWltVugN2vGJHGAxYwfP1533HGH9u/f77Y8Oztb0dHRJkUFeEdBQYEGDx6swYMHq4Cx0w4eurhXmita0AFL88su7omJierYsaOWLl2qkSNHauXKlRo9erT27dune+65p87ieOaZZzRx4kRNmDBBkrRgwQKtWLFCCxcu1H333XfO+o0bN3Z7vmTJEkVERJxToIeGhio+Pt57gcO31eYl1pzi4qTNm5nxFbCQKVOmSJLat2+va665RklJSSorK9Prr7+uJ5980tzggFpmt9u1Zs0a12PI4yzuleaKAh2wNL8s0BcuXKgbb7zR9fyKK67Q559/rquuukrp6emaP3++12MoLi7W5s2bNX36dNeygIAADR06VOvWravSPl555RXdeOON51weIzU1Vc2aNVOjRo3061//Wo888oiaNGlSq/HDhzkLdOfkbrWhWTNHq/zJk9JZPyTVFiaJA6rn8OHDSktL09atW5WWlqaUlBTt2rVLNptNTz75pP773/+qe/fu6t69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PtetW6eGDRu69Q4aOnSoAgICtH79+jqPGadlZmZq4sSJ+ve//62IiAizw7E0T8cQf+VLxyWzeTou1leTJk3SyJEjzznHBpyCzA4A5sjIyHArziW5nmdkZFS4Tk5OjgoKChQeHl43wUp65ZVXlJycrJYtW7qWRUVF6emnn9Yll1yigIAAvfvuuxo1apSWLVum3/zmN3UWm9Odd96pXr16qXHjxlq7dq2mT5+uw4cP65lnnpHkyGdiYqLbNmfmvFGjRnUes9Pu3bv13HPP6amnnnIts1J+jx07prKysnL/P/7www91GktF7Ha7pkyZoksuuURdu3Z1Lf/973+vNm3aKCEhQd9++63uvfde7dy5U++9954pcfbr108pKSnq2LGjDh8+rFmzZmngwIHatm2bMjIyFBIScs7cFXFxca7vBjMtW7ZMWVlZGj9+vGuZ1fJ7JmfOyvu/e+Z3bbNmzdxeDwoKUuPGjS2R8/rKMAyNHz9et99+u/r06aP09HSzQ7Ks8o4h/s5Xjktm83RcrK+WLFmib775xjWfElAeCnQfct999+mJJ56ocJ0dO3a4TfZkNTX5DAcOHNDHH3+st99+2229pk2baurUqa7nF198sQ4dOqQ5c+bUWgFZnXjPjKV79+4KCQnRn/70J82ePVuhoaG1Ek9lapLfgwcP6oorrtD111+viRMnupbXRX79zaRJk7Rt2za38dyS3MYSd+vWTc2bN9fll1+uPXv26MILL6zrMDVixAjX4+7du6tfv35q06aN3n777Tr94a0mXnnlFY0YMcJtPLDV8gtrq+r35CeffKJTp05p+vTpdRSZ+WrzGAJIno+L9dH+/ft11113adWqVQoLCzM7HFgYBboPufvuu91ajcpzwQUXVGlf8fHx58w06pylOT4+3nV/9szNmZmZio6OrvFJfE0+w6JFi9SkSZMqFYX9+vVzTSBVG84n5/369VNpaanS09PVsWNHj/mUTue8ruM9dOiQhgwZogEDBlRpsrrazm9VNW3aVIGBgeXmr7Zyd74mT57smtzrzJ4e5enXr58kR6uTFQrIhg0bqkOHDtq9e7eGDRum4uJiZWVlubWiWyHXP//8sz799NNKW8atlF9nzjIzM9W8eXPX8szMTCUlJbnWOXtSqdLSUp04ccL0nPujqn5PfvbZZ1q3bt05P7D26dNHY8aM0auvvurF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fBhj0AFYWnp6ukaOHKn7779fN910ky644AL1799f33zzjXr16mV2eACAeigtLU2dOnXStGnTdO211yo7O1vJyclas2aNGjZsaHZ4AHyYzTAMw+wgAKA8J06c0IABAzR48GAtWLDAtXzkyJEqKyvTypUrTYwOAFBfTZo0SSdPntTixYvNDgWAn6FABwAAAKrhkksu0dVXX6377rvP7FAA+BnGoAMAAABVZBiGvvvuO3Xv3t3sUAD4IVrQAQAAAACwAFrQAQAAAACwAAp0AAAAAAAsgAIdAAAAAAALoEAHAAAAAMACKNABAAAAALAACnQAAAAAACyAAh0AAAAAAAugQAcAAAAAwAIo0AEAAAAAsAAKdAAAAAAALIACHQAAAAAAC6BABwAAAADAAijQAQAAAACwAAp0AAAAAAAsgAIdAAAAAAALoEAHAAAAAMACKNABAAAAALAACnQAAAAAACyAAh0AAAAAAAugQAcAAAAAwAIo0AEAAAAAsAAKdAAAAAAALIACHQAAAAAAC6BAN8ns2bN18cUXq0GDBmrWrJlGjRqlnTt3Vrrd0qVL1alTJ4WFhalbt2766KOP6iBaAEB9wLEJAABzUaCbZM2aNZo0aZK+/vprrVq1SiUlJRo+fLjy8vI8brN27VrddNNNuuWWW7RlyxaNGjVKo0aN0rZt2+owcgCAv+LYBACAuWyGYRhmBwHp6NGjatasmdasWaPLLrus3HVGjx6tvLw8ffjhh65lv/rVr5SUlKQFCxbUVagAgHqCYxMAAHUryOwA4JCdnS1Jaty4scd11q1bp6lTp7otS05O1rJlyzxuU1RUpKKiItdzu92uEydOqEmTJrLZbOcXNACgygzD0KlTp5SQkKCAAN/owMaxCQD8my8em/wdBboF2O12TZkyRZdccom6du3qcb2MjAzFxcW5LYuLi1NGRobHbWbPnq1Zs2bVWqwAgPOzf/9+tWzZ0uwwKsWxCQDqD185NtUHFOgWMGnSJG3btk1fffVVre97+vTpbi0b2dnZat26tfbv36/o6Ohafz8AQPlycnLUqlUrNWjQwOxQqoRjEwD4P187NtUHFOgmmzx5sj788EN98cUXlf5qFR8fr8zMTLdlmZmZio+P97hNaGioQkNDz1keHR3NSRAAmMAXunBzbAKA+sUXjk31BQW6SQzD0B133KH3339fqampSkxMrHSb/v37a/Xq1ZoyZYpr2apVq9S/f38vRuqbysrKVFJSYnYYAOqx4OBgBQYGmh1GtXBsAgDAXBToJpk0aZIWL16s5cuXq0GDBq6xejExMQoPD5ckjR07Vi1atNDs2bMlSXfddZcGDRqkp59+WiNHjtSSJUu0adMmvfTSS6Z9DivKzc3VgQMHxAUKAJjJZrOpZcuWioqKMjuUKuPYBACAuSjQTfLCCy9IkgYPHuy2fNGiRRo/frwkad++fW6zKQ4YMECLFy/WAw88oPvvv1/t27fXsmXLKpy8p74pKyvTgQMHFBERodjYWLrrADCFYRg6evSoDhw4oPbt2/tMSzrHJgAAzMV10OuZnJwcxcTEKDs72y/H+RUWFmrv3r1q27atq7UHAMxQUFCg9PR0JSYmKiwszO+/f88HuQEAc/D9az1c7A5+qa5aztPT03XddddJknbt2qU+ffpo3759mjJligoKCqq1r5SUFBUXF7ser1u3rtbjrQ/S09MVGxurwYMHq2/fvtq4caPH9T755JNq7z8tLU0bNmyQ5Li81MyZMz2uO378eG3btq3a71HfFBQUaPDgwRo8eLAaNGjgenzixAnXOqmpqfrxxx897uPMv0WroAcPgPqirKxMhYWF3Cx0Yy4m30UXd6AWHDx4UL///e/1+uuvq3Xr1po3b16195GSkqLrrrtOISEhrq6kdcVut7t1WfV1gwYN0jvvvKP169fr//7v/8otxJ0F+vDhw6u177S0NOXm5qpv376Kj4837VrO/vRvFh4ertTUVElSnz59XI/PlJqaqj59+qhDhw51G9wv/CnfAFBbDMNQRkaGsrOzmfvHgkJDQ9W0aVNaxn0MBTpwnk6cOKFrr71WCxYsUKdOnSQ5xm9++OGHeuedd/Sf//xHxcXFysjI0AcffKDmzZsrJSVFr7zyisrKyvTII48oPDxcaWlpGjFihH73u98pJydHffr00VVXXaVHH31UH374oUJDQ/Xcc8+pW7durvdeuXKlHn30UZWVlemOO+7QTTfdpPHjxyssLEx79uxRZGSk3n//fUnSnXfeqW3btikwMFApKSlq2bKlOnfurH79+ikmJkbjxo3TxIkTlZCQIMMwdPfdd+v999/X6NGjNWDAAH3yySdas2aNHn30UVPyXBNJSUnav3+/cnJy9Ic//EHZ2dlq3ry5XnvtNb3wwgtau3atNm3apPfee08ffPCB27/Jr3/9aw0ePFi9evXSpk2b1L17d/3zn//UCy+8oBMnTuiDDz7QSy+9pL/97W965513NGfOHK1YsUI5OTl64oknNGzYsHJj+umnn/TnP/9ZRUVF6tmzp+bOnauUlJQq/T9xxtS3b19t2bJFS5cu1Q033KCAgADFx8erbdu26tGjh3bs2KH7779fOTk5uuaaa/Tpp5/WcebPz3fffac///nPMgxDV111laZMmaKUlBS9++67evvttzVnzhzdeOONKi0tVVxcnN566y2P+3rsscf08ccfyzAMzZ8/X926dVOvXr00YMAAbdy4Uddcc43uvfdeHTt2TLfeeqtycnJc/0e+/PJLPf300woKCtLVV1+twMBAPffcc+rSpYs2btyo77//Xpdddpk++eQThYWF6f7779eQIUM8/tsDgL/Jzs5WVlaWYmNjFRkZSc8hizAMQyUlJcrOztbBgwcliSLdlxioV7Kzsw1JRnZ2ttmheEVBQYHx/fffGwUFBXXyfnv37jViYmKMq666ym35oEGDjFOnThmLFi0yJkyYYBiGYTz//PPGs88+axw7dsxITk427Ha7kZubawwaNMhtG8MwjJkzZxr/+c9/jLS0NOM3v/mNYbfbDcMwjLKyMtd72O12Y8CAAUZRUZFRWlpqDBgwwCgtLTXGjRtnvPrqq4ZhGMYNN9xgbN261fjPf/5jPPjgg4ZhGMbXX39tTJo0yTAMw2jQoIFx4sQJwzAMY+TIkcbOnTsNu91uXHLJJcbnn39ubN682fjzn/9sGIZhjB071tixY4c30lir9u7da1x77bWGYRjGxx9/bIwaNcqYM2eO8cILLxiGYRgPP/yw8eqrrxqff/65cffddxuGYVT4b7JmzRrDMAzjV7/6lZGVlWUsWrTIeO655855r7y8PMMwDCMzM9O47LLLDMMwjHHjxhnfffedW3zXX3+9sXv3bsMwDOP22283Nm7cWO3/J59++qlhGIYxZ84c48UXXzQMwzCmT59uzJw50ygqKjIGDhxoGIZhLFy40PW5fUXv3r2Nq666yvj+++8Nu91uDBs2zNi7d6/rb8IwDKOoqMgoKSkxDMMw7rzzTuOTTz5x+7dw+u6774yxY8cahmEYBw8eNH7zm98YhmEYiYmJRnp6ulFaWmp06dLFMAzDuPvuu43Vq1cbhmEYjz/+uLF06VLj888/NwYOHGjY7XajtLTU6NGjh1FYWGgcP37ciIqKMgzDMJ5++mnjrbfecv09nvk3evb3kb9//54PcgP4HrvdbuzcudM4cOCA2aHAA7vdbuzbt8/Ys2ePx3X4/rUeWtDhv/r0kX65RNB5i4+XNm0q96WhQ4cqISFBM2bM0MMPP3zO6z179pQktWrVSps3b9aePXu0fft2DRkyRJJ09OhRj2/7ww8/aODAga5fpM/sYnv06FH9+OOPri7aWVlZrn2d+Z4nT578//buPiyqOv//+Gu4GzADNLlVVExXLE0NyzDbdGUXbyrdzKw0b1Jb3drN8FuJlmZlaJmZftvMbsRu1GpX3WpbzdDqlykqSmUqRZmYCprGTJoiwvn94depSTAqmPOBeT6ua66rOedzZt7zIc6bl+fMOdq+fbuWL1+u999/X5ZlKSEhQZLUunVrNWrUSJJUXFzsOX349PYXX3yxtm/fLpfLpT179njOEPi1fPQj0XvvvacePXqoYcOGmjNnjmbNmqUxY8ZIki655BKtW7dOzZs394w/28/k9Fw0bdpUJSUlVdbz4osv6uWXX1ZAQID2799f5bidO3dq1KhRkqTvvvtOaWlpXu9Tnf9PLrnkEklSQUGB53MlJyfrk08+UUhIiDp27KgtW7botdde00svvVRlLdXVpUsXz+22fovY2FhtruqH9iNFRUVq166dpFP/D37xxRde6w8dOqRx48bp22+/1b59+3TxxRerTZs2Z7zO9u3b9eGHH3quSH76SuqNGjVSixYtJEmhoaGesTk5OXrggQd07Ngx3XzzzWrSpIm6dOkih8OhgwcPKiEhQU6nU06nUy1btpQkDRkyROPGjVNcXJxSUlI4DR6A3ygvL1d5eTlHZg3mcDgUERGhvXv3qqysTMHBwXaXhGogoKP+KiqS/u+0nto2Z84c/fnPf9bChQs1cuRIr3U/Pt3Lsiy1atVKF110kd588005HA7PRTyCg4NVXl7utW27du20ZMkSTZgwQQ6Hw+t7sE2aNFFSUpLefvtthYSEeO14f/qeSUlJuv7663XfffdJkuc9fxwmYmJi9Pnnn6t169bKy8vTwIEDJUlXXXWVxo4dq/79+//mefLVj+T0d9BPa926tTZu3Kjk5GRt2rRJbdq08Zrvqn4m0plzWdnPSZLmzZunjz76SN988426d+9eZW1t27bVrFmz1KJFC1mWpfLycr300kvV/v9E+uHn1rp1a23dulXJycnaunWrgoJO7dKHDx+umTNnKiwsTI0bN/6l03eGoqIizylyvhATE6MdO3YoKSlJW7Zs0dixY7VhwwbPvC9evFhXXXWVRo8erb/97W9Vfu8xKSlJV155pZ599llJP/x/X9kpmElJSfrzn/+sK664wjN23bp1nrmOiorS119/rRMnTujo0aP66quvPLValqUnnnjC8/sFAP7g5MmTkuTpPTDT6b8Ny8vLCeh1BL9RqL9iY332WgEBAVq8eLFSU1PVrFmzs45t0qSJbrjhBl155ZUKDAxUhw4dNHfuXF1zzTW6/vrrPcFYki666CJ16dJFKSkpCgsL09y5cz3fQQ8ICNC9996rP/7xjwoICFBUVJReffXVSt/z6quv1po1a9SzZ085HA4NGTLEcxT3tAcffFA33nijYmNjdc4553h24kOGDNG9996rJ5544men6ef48EfiZcyYMRoyZIiWLl2qmJgY3XPPPTp+/LgyMjI0aNAgPfPMM5X+TCqTkpKiYcOGKScnRw8//LBneffu3dW9e3dddtllatiwYZW1zJw5U2PHjtXx48cVGBio559/vtJxVf1/8mOjR4/WoEGD9Nprr6lJkya64IILJJ064r1t27ZKz+j4NWJr6AdX3deZPn26Ro8eLcuy1K9fP7Vs2VJ/+MMfdM8992jNmjUaOXKkbr75Zr3xxhtnvZ3iRRddpDZt2ujKK69UQECA/vjHP2rSpEmVjp08ebLGjBnjuSr/I4884rU+MDBQ48ePV7du3dSuXTuvMzBuuukmPfDAA+rYsWO1Ph8A1Cd879xs/HzqHu6D7mfq+70OT98H/fR9h1F9p4/AV1RUqGfPnlq6dKni4uJUVFSksWPHasWKFXaXiJ+oqKiQZVkKDAzUpEmT1LFjRw0ePFjSqQsVrlq1Sk6n0+Yq64/TvyOHDx9W7969Pbfb+9e//qVdu3bpf/7nf7zG/3R/VN/3v78FcwPUPfzNVTf83M+J/a95OIIOQJKUk5OjSZMm6dixY+rfv7/i4uK0bt063XXXXZo1a5bd5aESx44dU+/evWVZlqKjo3X//ferpKREgwYN0oABAwjnNeypp57SsmXL9N133+mhhx6SJC1YsEAvvviiXn/9dZurAwAA9QFH0P1Mff9XMv41F4ApOIJefcwNUPfU97+5srKyNHLkSDmdTn3xxRdq2rSp1/oePXrom2++0bZt22yqsHo4gl73cLlZAAAAAKhEaWmpZsyYYXcZ8CMEdNRLnBgCwG7shwCg7uvUqZOeeeYZ7du3r1Ze37IsHTt2rFZeG3UT30FHvRIcHOy5Z3FUVBRXrgRgC8uydPDgQTkcDm5rAwB12KRJk3TTTTdpxowZVd7hRTp127nMzExlZWXp66+/VlxcnG666SZNnTrV65owLVu2VPv27fW3v/1NkydP1rZt2zRjxgx16tRJPXv21CuvvKIdO3ZowYIFcrvdSktL03PPPafQ0FDdc889Wrx4sb7//nsNGjRI8+fP53oz9RABHfVKYGCgmjVrpq+//tpzn2IAsIPD4VCzZs0UGBhodykAgF8pMTFRw4YN0zPPPKOJEycqPj6+0nGjR4/WokWLdN1112nChAnKyclRZmamduzYoeXLl3uNzc/P14033qi//OUvGjNmjNq2betZl5mZqbCwME2cOFEFBQWaN2+egoODFRAQoG+//Vb333+/NmzYoKysLCUmJmrKlCm1+vnhewR01DsNGzZUmzZtVFZWZncpAPxYcHAw4RwA6oHJkyfrhRde0MyZM/XEE0+csf6jjz7SokWLNHr0aD3zzDOSpL/+9a+Kjo7WrFmztHbtWvXs2dMzvqCgQCtXrlRaWppn2bvvvivp1JH49957z3P21cGDB7V06VL17t1bb731lue1CwoK9PzzzxPQ6yECOuqlwMBA/jAGAACwQ5cuUlGR3VWcEhsrbd78m16iVatWuvnmm7VgwQJNnDhRcXFxXutPB+f09HSv5RMmTNCsWbP0n//8xyugJyYmeoXzHxs2bJjXV6O6du2qJUuW6JZbbvEa17VrV82dO1cnT55UUBCRrj7hpwkAAACg5hQVSXv32l1Fjbr33nv14osvasaMGWccRd+9e7cCAgLUunVrr+WxsbGKjIzU7t27vZYnJiZW+T7Nmzf3eh4RESFJSkhIOGN5RUWFXC6XzjvvvF/8eWAuAjoAAACAmhMba3cFP6ihWlq1aqWhQ4d6jqJXproXJw4LC6tyXVVngFa1nDuG1D8EdAAAAAA15zeeUm6qe++9Vy+99JJmzpzptbxFixaqqKjQ559/rnbt2nmWFxcXq6SkRC1atPB1qajDuA86AAAAAPyM888/X0OHDtXTTz+toh99x75v376SpDlz5niNnz17tiSpX79+PqsRdR9H0AEAAACgGiZPnqwXX3xR+fn5uvDCCyVJHTt21PDhw7VgwQKVlJToyiuv1MaNG7Vo0SINGDDA6wJxwM/hCDoAAAAAVEPr1q01dOjQM5Y/++yzmjZtmjZt2qTx48drzZo1ysjI0NKlS22oEnWZw+LKAn7F7XYrIiJCLpdL4eHhdpcDAH6D/W/VmBug7jl+/Lh27dqlxMREhYaG2l0OqvBzPyf2v+bhCDoAAAAAAAYgoAMAAAAAYAACOgAAAAAABiCgAwAAAABgAAI6AAAAAAAGIKADAAAAAGAAAjoAAACAX4U7NpuNn0/dQ0AHAAAA8IsEBQVJkk6ePGlzJTibsrIySVJgYKDNlaC6COgAAAAAfpHAwEAFBgbK7XbbXQqqYFmWXC6XnE6ngoOD7S4H1RRkdwH+7P3339ejjz6q3Nxc7d+/X8uXL9eAAQOqHP/uu++qZ8+eZyzfv3+/YmNja7FSAIC/oDcBqA6Hw6Ho6Gjt379fTqdT55xzjhwOh91lQaeCeVlZmVwul44cOaKmTZvaXRJ+AQK6jY4ePaqOHTvqlltu0bXXXlvt7fLz8xUeHu55Hh0dXRvlAQD8EL0JQHVFRETo2LFj+uabb3Tw4EG7y8FPOJ1ONW3a1GvfDPMR0G3Up08f9enT5xdvFx0drcjIyJovCADg9+hNAKrL4XAoLi5O0dHRnu86wwyBgYGc1l5HEdDroE6dOqm0tFTt27fX/fffr8svv9zukgAAfo7eBPiv099HB/DbEdDrkLi4OM2fP19dunRRaWmpnn32WfXo0UM5OTm6+OKLK92mtLRUpaWlnudcyAMAUJPoTQAA1BwCeh3Stm1btW3b1vO8W7du+uKLL/T444/rxRdfrHSbzMxMTZs2zVclAgD8DL0JAICaw23W6rhLL71UBQUFVa7PyMiQy+XyPPbs2ePD6gAA/ojeBADAr8MR9DouLy9PcXFxVa53Op1yOp0+rAgA4O/oTQAA/DoEdBsdOXLE6wjDrl27lJeXp8aNG6t58+bKyMjQ3r179cILL0iS5syZo8TERF144YU6fvy4nn32Wa1Zs0Zvv/22XR8BAFDP0JsAALAPAd1GmzdvVs+ePT3P09PTJUnDhw9XVlaW9u/fr8LCQs/6EydOaMKECdq7d68aNGigiy66SO+8847XawAA8FvQmwAAsI/DsizL7iLgO263WxEREXK5XAoPD7e7HADwG+x/q8bcAIA92P+ah4vEAQAAAABgAAI6AAAAAAAGIKADAAAAAGAAAjoAAAAAAAYgoAMAAAAAYAACOgAAAAAABiCgAwAAAABgAAI6AAAAAAAGIKADAAAAAGAAAjoAAAAAAAYgoAMAAAAAYAACOgAAAAAABiCgAwAAAABgAAI6AAAAAAAGIKADAAAAAGAAAjoAAAAAAAYgoAMAAAAAYAACOgAAAAAABiCgAwAAAABgAAI6AAAAAAAGIKADAAAAAGAAAjoAAAAAAAYgoAMAAAAAYAACOgAAAAAABiCgAwAAAABgAAI6AAAAAAAGIKADAAAAAGAAAjoAAAAAAAYgoAMAAAAAYAACOgAAAAAABiCgAwAAAABgAAI6AAAAAAAGIKADAAAAAGAAArqN3n//fV199dWKj4+Xw+HQihUrfnabd999VxdffLGcTqdat26trKysWq8TAOA/6E0AANiHgG6jo0ePqmPHjnryySerNX7Xrl3q16+fevbsqby8PI0fP16jR4/WqlWrarlSAIC/oDcBAGCfILsL8Gd9+vRRnz59qj1+/vz5SkxM1GOPPSZJateunT744AM9/vjjSktLq60yAQB+hN4EAIB9OIJeh6xfv16pqaley9LS0rR+/XqbKgIA+Dt6EwAANYcj6HVIUVGRYmJivJbFxMTI7Xbr2LFjCgsLO2Ob0tJSlZaWep673e5arxMA4D/oTQAA1ByOoNdzmZmZioiI8DwSEhLsLgkA4OfoTQAAVI6AXofExsaquLjYa1lxcbHCw8MrPUIhSRkZGXK5XJ7Hnj17fFEqAMBP0JsAAKg5nOJeh6SkpOitt97yWrZ69WqlpKRUuY3T6ZTT6azt0gAAforeBABAzeEIuo2OHDmivLw85eXlSTp1q5q8vDwVFhZKOnWEYdiwYZ7xY8eO1Zdffqm7775bO3fu1D/+8Q+9+uqruvPOO+0oHwBQD9GbAACwDwHdRps3b1bnzp3VuXNnSVJ6ero6d+6sKVOmSJL279/v+YNIkhITE/Wf//xHq1evVseOHfXYY4/p2Wef5TY2AIAaQ28CAMA+DsuyLLuLgO+43W5FRETI5XIpPDzc7nIAwG+w/60acwMA9mD/ax6OoAMAAAAAYAACOgAAAAAABiCgAwAAAABgAAI6AAAAAAAGIKADAAAAAGAAAjoAAAAAAAYgoAMAAAAAYAACOgAAAAAABiCgAwAAAABgAAI6AAAAAAAGIKADAAAAAGAAAjoAAAAAAAYgoAMAAAAAYAACOgAAAAAABiCgAwAAAABgAAI6AAAAAAAGIKADAAAAAGAAAjoAAAAAAAYgoAMAAAAAYAACOgAAAAAABiCgAwAAAABgAAI6AAAAAAAGIKADAAAAAGAAAjoAAAAAAAYgoAMAAAAAYAACOgAAAAAABiCgAwAAAABgAAI6AAAAAAAGIKADAAAAAGAAAjoAAAAAAAYgoAMAAAAAYAACOgAAAAAABiCgAwAAAABgAAK6zZ588km1bNlSoaGh6tq1qzZu3Fjl2KysLDkcDq9HaGioD6sFAPgDehMAAPYgoNvolVdeUXp6uqZOnaotW7aoY8eOSktL04EDB6rcJjw8XPv37/c8du/e7cOKAQD1Hb0JAAD7ENBtNHv2bI0ZM0YjR47UBRdcoPnz56tBgwZ6/vnnq9zG4XAoNjbW84iJifFhxQCA+o7eBACAfQjoNjlx4oRyc3OVmprqWRYQEKDU1FStX7++yu2OHDmiFi1aKCEhQf3799enn3561vcpLS2V2+32egAAUBl6EwAA9iKg2+Sbb75ReXn5GUcZYmJiVFRUVOk2bdu21fPPP69///vfeumll1RRUaFu3brp66+/rvJ9MjMzFRER4XkkJCTU6OcAANQf9CYAAOxFQK9DUlJSNGzYMHXq1ElXXnmlli1bpqioKD399NNVbpORkSGXy+V57Nmzx4cVAwDqO3oTAAA1J8juAvxVkyZNFBgYqOLiYq/lxcXFio2NrdZrBAcHq3PnziooKKhyjNPplNPp/E21AgD8A70JAAB7cQTdJiEhIUpOTlZ2drZnWUVFhbKzs5WSklKt1ygvL9cnn3yiuLi42ioTAOBH6E0AANiLI+g2Sk9P1/Dhw9WlSxddeumlmjNnjo4ePaqRI0dKkoYNG6amTZsqMzNTkvTAAw/osssuU+vWrVVSUqJHH31Uu3fv1ujRo+38GACAeoTeBACAfQjoNho8eLAOHjyoKVOmqKioSJ06ddLKlSs9F+cpLCxUQMAPJzl8++23GjNmjIqKitSoUSMlJyfrww8/1AUXXGDXRwAA1DP0JgAA7OOwLMuyuwj4jtvtVkREhFwul8LDw+0uBwD8BvvfqjE3AGAP9r/m4TvoAAAAAAAYgIAOAAAAAIABCOgAAAAAABiAgA4AAAAAgAEI6AAAAAAAGICADgAAAACAAQjoAAAAAAAYgIAOAAAAAIABCOgAAAAAABiAgA4AAAAAgAEI6AAAAAAAGICADgAAAACAAQjoAAAAAAAYgIAOAAAAAIABCOgAAAAAABiAgC7p6NGjdpcAAAAAAPBzBHRJMTExuuWWW/TBBx/YXQoAAAAAwE8R0CW99NJLOnz4sP7whz/od7/7nWbMmKF9+/bZXRYAAAAAwI8Q0CUNGDBAK1as0N69ezV27FgtXrxYLVq00FVXXaVly5bp5MmTdpcIAAAAAKjnCOg/EhUVpfT0dH388ceaPXu23nnnHV133XWKj4/XlClT9P3339tdIgAAAACgngqyuwCTFBcXa9GiRcrKytLu3bt13XXXadSoUfr66681c+ZMbdiwQW+//bbdZQIAAAAA6iECuqRly5Zp4cKFWrVqlS644AL99a9/1dChQxUZGekZ061bN7Vr186+IgEAAAAA9RoBXdLIkSN1ww03aN26dbrkkksqHRMfH6/Jkyf7uDIAgL+yLEv//Oc/tXbtWh04cEAVFRVe65ctW2ZTZQAAoLYQ0CXt379fDRo0OOuYsLAwTZ061UcVAQD83fjx4/X000+rZ8+eiomJkcPhsLskAABQywjokk6ePCm3233GcofDIafTqZCQEBuqAgD4sxdffFHLli1T37597S4FAAD4CAFdUmRk5FmPTDRr1kwjRozQ1KlTFRDAhe8BALUvIiJCrVq1srsMAADgQ6RNSVlZWYqPj9ekSZO0YsUKrVixQpMmTVLTpk311FNP6dZbb9XcuXM1Y8YMu0sFAPiJ+++/X9OmTdOxY8fsLgUAAPgIR9AlLVq0SI899piuv/56z7Krr75aHTp00NNPP63s7Gw1b95c06dP16RJk2ysFADgL66//notWbJE0dHRatmypYKDg73Wb9myxabKAABAbSGgS/rwww81f/78M5Z37txZ69evlyR1795dhYWFvi4NAOCnhg8frtzcXA0dOpSLxAEA4CcI6JISEhL03HPPnXEK+3PPPaeEhARJ0qFDh9SoUSM7ygMA+KH//Oc/WrVqlbp37253KQAAwEcI6JJmzZqlQYMG6b///a/nPuibN2/Wzp079c9//lOStGnTJg0ePNjOMgEAfiQhIUHh4eF2lwEAAHyIi8RJuuaaa5Sfn6++ffvq8OHDOnz4sPr06aOdO3fqqquukiSNGzdOs2fPtrlSAIC/eOyxx3T33Xfrq6++srsUAADgI34f0MvKytSrVy+VlZUpMzNTy5Yt07Jly5SZmamWLVvW+vs/+eSTatmypUJDQ9W1a1dt3LjxrONfe+01JSUlKTQ0VB06dNBbb71V6zUCAHxv6NChWrt2rc4//3yde+65aty4sdejNtGbAACwh9+f4h4cHKyPP/7Ylvd+5ZVXlJ6ervnz56tr166aM2eO0tLSlJ+fr+jo6DPGf/jhh7rxxhuVmZmpq666SosXL9aAAQO0ZcsWtW/f3oZPAACoLXPmzLHlfelNAADYx2FZlmV3EXa788475XQ6fX6f865du+qSSy7R//7v/0qSKioqlJCQoL/97W+aOHHiGeMHDx6so0eP6s033/Qsu+yyy9SpU6dKr0JfGbfbrYiICLlcLr7bCAA+9Ev2v2VlZfrLX/6i++67T4mJiT6q8BR6EwD4D/a/5vH7I+iSdPLkST3//PN65513lJycrHPOOcdrfW189/zEiRPKzc1VRkaGZ1lAQIBSU1M9t3b7qfXr1ys9Pd1rWVpamlasWFHj9QEA7BMcHKx//etfuu+++3z6vvQmAADsRUCXtG3bNl188cWSpM8++8xrXW3dd/abb75ReXm5YmJivJbHxMRo586dlW5TVFRU6fiioqIq36e0tFSlpaWe5263+zdUDQDwlQEDBmjFihW68847ffae9CYAAOxFQJe0du1au0uoNZmZmZo2bZrdZQAAfqE2bdrogQce0Lp16yo9u+vvf/+7TZX9dvQmAAAqR0D/kYKCAn3xxRf6/e9/r7CwMFmWVWtH0Js0aaLAwEAVFxd7LS8uLlZsbGyl28TGxv6i8ZKUkZHhdeqh2+1WQkLCb6gcAOALzz33nCIjI5Wbm6vc3FyvdQ6Ho1YCOr0JAAB7+f1t1iTp0KFD6tWrl373u9+pb9++2r9/vyRp1KhRmjBhQq28Z0hIiJKTk5Wdne1ZVlFRoezsbKWkpFS6TUpKitd4SVq9enWV4yXJ6XQqPDzc6wEAMN+uXbuqfHz55Ze18p70JgAA7EVA16mruAcHB6uwsFANGjTwLB88eLBWrlxZa++bnp6uZ555RosWLdKOHTs0btw4HT16VCNHjpQkDRs2zOtCPXfccYdWrlypxx57TDt37tT999+vzZs36/bbb6+1GgEA9rMsS7666Qq9CQAA+3CKu6S3335bq1atUrNmzbyWt2nTRrt376619x08eLAOHjyoKVOmqKioSJ06ddLKlSs9F9spLCxUQMAP/4bSrVs3LV68WPfee68mTZqkNm3aaMWKFdxnFgDqqRdeeEGPPvqoPv/8c0nS7373O9111126+eaba+096U0AANiH+6BLOvfcc7Vlyxa1adNG5557rj766CO1atVKmzdvVlpamg4dOmR3iTWGex0CgD1+6f539uzZuu+++3T77bfr8ssvlyR98MEHevLJJ/XQQw/59OrutY3eBAD2YP9rHo6gS7riiiv0wgsv6MEHH5R06uI7FRUVeuSRR9SzZ0+bqwMA+KN58+bpqaee0rBhwzzLrrnmGl144YW6//7761VABwAApxDQJT3yyCPq1auXNm/erBMnTujuu+/Wp59+qsOHD2vdunV2lwcA8EP79+9Xt27dzljerVs3z8VMAQBA/cJF4iS1b99en332mbp3767+/fvr6NGjuvbaa7V161adf/75dpcHAPBDrVu31quvvnrG8ldeeUVt2rSxoSIAAFDbOIL+fyIiIjR58mS7ywAAQJI0bdo0DR48WO+//77nO+jr1q1TdnZ2pcEdAADUfQT0/1NSUqKNGzfqwIEDqqio8Fr34+//AQDgCwMHDlROTo5mz56tFStWSJLatWunjRs3qnPnzvYWBwAAagUBXdIbb7yhIUOG6MiRIwoPD5fD4fCsczgcBHQAgC2Sk5P18ssv210GAADwEb6DLmnChAm65ZZbdOTIEZWUlOjbb7/1PA4fPmx3eQAAPxIQEKDAwMCzPoKC+Pd1AADqIzq8pL179+rvf/+7GjRoYHcpAAA/t3z58irXrV+/XnPnzj3jq1gAAKB+IKBLSktL0+bNm9WqVSu7SwEA+Ln+/fufsSw/P18TJ070fCXrgQcesKEyAABQ2wjokvr166e77rpL27dvV4cOHRQcHOy1/pprrrGpMgCAP9u3b5+mTp2qRYsWKS0tTXl5eWrfvr3dZQEAgFpCQJc0ZswYSar0iITD4VB5ebmvSwIA+DGXy6WHH35Y8+bNU6dOnZSdna0rrrjC7rIAAEAtI6BLfJcPAGCMRx55RDNnzlRs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", + "text/html": [ + "\n", + "
    \n", + "
    \n", + " Figure\n", + "
    \n", + " \n", + "
    \n", + " " + ], + "text/plain": [ + "Canvas(header_visible=False, toolbar=Toolbar(toolitems=[('Home', 'Reset original view', 'home', 'home'), ('Bac…" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "c990f82f8a264cd5a2cd752eba5dcabe", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "HBox(children=(Label(value='Wavefunction component'), Checkbox(value=True, description='$|\\\\psi|$', layout=Lay…" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "df53efc46abe42dfbefc9005b4117f46", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Button(description='Play', style=ButtonStyle())" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "######################################################################\n", "# Set up plot\n", @@ -517,7 +611,7 @@ "ax2 = fig.add_subplot(222, xlim=klim,\n", " ylim=(ymin - 0.2 * (ymax - ymin),\n", " ymax + 0.2 * (ymax - ymin)))\n", - "psi_k_line, = ax2.plot([], [], c='r', label=r'$|\\psi(k)|$', linewidth=1.2)\n", + "psi_k_line, = ax2.plot([], [], c='r', label=r'$|\\psi(p)|$', linewidth=1.2)\n", "\n", "p0_line1 = ax2.axvline(-p0 / hbar, c='k', ls=':', label=r'$\\pm p_0$')\n", "p0_line2 = ax2.axvline(p0 / hbar, c='k', ls=':')\n", @@ -525,7 +619,7 @@ "\n", "ax2.legend(prop=dict(size=8), ncol=4, loc=1)\n", "ax2.set_xlabel('$p$')\n", - "ax2.set_ylabel(r'$|\\psi(k)|$')\n", + "ax2.set_ylabel(r'$|\\psi(p)|$')\n", "\n", "# axis for energy plots\n", "ax3 = fig.add_subplot(223, xlim=(0,S.tot_steps*S.dt),ylim=(-2.,2.))\n", @@ -734,7 +828,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.8" + "version": "3.10.6" }, "voila": { "authors": "Dou Du, Sara Bonella and Giovanni Pizzi" diff --git a/notebook/quantum-mechanics/theory/theory_shooting_method.ipynb b/notebook/quantum-mechanics/theory/theory_shooting_method.ipynb new file mode 100644 index 0000000..58aa069 --- /dev/null +++ b/notebook/quantum-mechanics/theory/theory_shooting_method.ipynb @@ -0,0 +1,108 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "bec50683-b438-443d-adcf-cd18fbffc0d8", + "metadata": {}, + "source": [ + "# **Background Theory**:Using the Shooting Method to Solve the Time-Independent Schrödinger Equation for a 1D Quantum Well\n", + "\n", + " Go back to the interactive notebook\n", + "\n", + "**Source code:** https://github.com/osscar-org/quantum-mechanics/blob/master/notebook/quantum-mechanics/theory/theory_shooting_method.ipynb\n", + "\n", + "
    " + ] + }, + { + "cell_type": "markdown", + "id": "ae07c1b8-3889-46f3-83cb-f7d92660c627", + "metadata": {}, + "source": [ + "\n", + "# **Shooting method**\n", + " \n", + "

    \n", + " In numerical analysis, the shooting method is a method for solving a boundary value problem by reformulating it as an initial value problem. Roughly speaking, we 'shoot' out trajectories in different directions from an initial trial value until we find a trajectory that has the desired boundary value. You can check out the following link for additional information on the method\n", + "https://en.wikipedia.org/wiki/Shooting_method.\n", + "

    \n", + "For the specific example of the one-dimensional time-independent Schrodinger equation with a quantum well potential, we know that the wavefunction will converge to zero at both the far left and right boundaries in order for the wavefunction to be normalizable (i.e. $\\psi(x_{\\pm \\infty})=0$). \n", + " By keeping the boundary value at the left hand side equal to zero, one can try different eigenvalues of the Schrödinger equation and obtain the\n", + " corresponding eigenfunctions (by means of a numerical integrator such as the Numerov algorithm discussed below). Only the true eigenvalue will result in the solution\n", + " wavefunction converging to zero at the right hand side. By scanning over the possible trial energies and monitoring the\n", + " solution wavefunction at the right hand boundary, we can find all allowed eigenvalues and their corresponding wavefunctions. This \n", + " numerical method is referred to as the shooting method. Through its use can obtain the eigenvalues and eigenfunctions of the Schrödinger equation for this 1D quantum well." + ] + }, + { + "cell_type": "markdown", + "id": "de09fcbb-8517-43c7-a7d0-527faea70af4", + "metadata": {}, + "source": [ + "# **Numerical integration and the Numerov algorithm**\n", + "\n", + "The time-independent Schrödinger equation is an ordinary differential equation (ODE) of second order, where the 1st-order term does not appear in the equation, i.e. it assumes the following structure: \n", + "$\\large \\dfrac{d^2 y}{d x^{2}} = -g(x)y(x) + s(x)$\n", + "\n", + "

    \n", + "In the particular case of the time-independent Schrödinger equation, we have: \n", + "

    \n", + "\n", + "$\\large \\left[\n", + " -\\dfrac{\\hslash^2}{2m} \\, \\dfrac{\\partial^2}{\\partial x^{2}} + V(x)\\right] \\psi(x) = E\\psi(x)$ (1)\n", + " \n", + "and so $g(x)= \\frac{2m}{\\hslash^2}(E-V(x))$ and $s(x)=0$.\n", + "

    \n", + "For a one dimensional system, the second-derivative can be evaluated numerically via the following formula \n", + "

    \n", + "\n", + "$\\large \\psi ''(x_{i})= \\dfrac{1}{\\delta x^2}\\left[ \\psi(x_{i+1})-2\\psi(x_i)+\\psi(x_{i-1}) \\right]$ (2)\n", + "\n", + "where $x_i$ gives the position at the i-th point on a discretized grid of $i=1,...,N$ points representing space in the x-dimension and $\\delta x = x_{i+1}-x_{i}$ is the grid spacing. \n", + "\n", + "Substituting equation 2 into equation 1, we can create an iterative procedure for generating the wavefunction $\\psi(x)$: \n", + "\n", + "$\\large \\psi(x_{i+1}) =\\delta x^2 \\psi ''(x_{i}) +2\\psi(x_i)-\\psi(x_{i-1}) = -\\dfrac{2m \\delta x^2}{\\hslash^2} \\left[E-V(x_i)\\right]\\psi(x_i) +2\\psi(x_i)-\\psi(x_{i-1})$\n", + "\n", + "I.e. if we know the value of $\\psi$ at two preceding points $x_i$ and $x_{i-1}$, then we can obtain the value of $\\psi$ at the next point $x_{i+1}$. Carrying this out for all values of $i$, we obtain our solution wavefunction.\n", + "\n", + "

    \n", + " However, the values of the first two starting points are unknown. \n", + " For the square well potential shown in the interactive notebook, we can assume $\\psi(x_0)$ is zero and $\\psi(x_1)$\n", + " is a very small positive (or negative) number. See task 4 in the interactive notebook for further discussion of the issue of initial conditions.\n", + " \n", + "There are occasions where the above approximation to the derivative is simply not accurate enough for the problem at hand. In this case, higher-order approximations must be employed. \n", + " The Numerov method is one such higher-order method. It is used to specifically solve the kind of \n", + " ODE which has a form like that of the time-independent Schrödinger equation, i.e., one having the form $\\dfrac{d^2 y}{d x^{2}} = -g(x)y(x) + s(x)$. The method capitalizes on this particular form to approximate the solution to order $O((\\delta x)^6)$, where $\\delta x$ is the step size for the integration. The method works by allowing one to relate the value of the solution at a given point on a discretized grid representing space, $y_{n+1}$, to the two previous points, $y_n$ and $y_{n-1}$, through the relationship:\n", + "\n", + "$\\large y_{n+1}\\left(1+{\\frac {(\\delta x)^{2}}{12}}g_{n+1}\\right)=2y_{n}\\left(1-{\\frac {5(\\delta x)^{2}}{12}}g_{n}\\right)-y_{n-1}\\left(1+{\\frac {(\\delta x)^{2}}{12}}g_{n-1}\\right)+{\\frac {(\\delta x)^{2}}{12}}(s_{n+1}+10s_{n}+s_{n-1})+O((\\delta x)^{6})$ \n", + " \n", + "where $s_n = s(x_n)$ and $g_n = g(x_n)$.\n", + "\n", + "\n", + "See https://en.wikipedia.org/wiki/Numerov's_method for a detailed derivation of the method. " + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.0" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/notebook/quantum-mechanics/theory/theory_soft.ipynb b/notebook/quantum-mechanics/theory/theory_soft.ipynb index e842fb5..5fd35c0 100644 --- a/notebook/quantum-mechanics/theory/theory_soft.ipynb +++ b/notebook/quantum-mechanics/theory/theory_soft.ipynb @@ -16,87 +16,61 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## **Background theory**\n", - "\n", - "In previous notebooks, we focus on numerical solutions of the time-independent\n", - "Schrödinger equation. Here, we demonstrate the numercial solution of the \n", + "In other notebooks, we focus on numerical solutions of the time-independent\n", + "Schrödinger equation. Here, we demonstrate the numerical solution of the \n", "one-dimensional time dependent Schrödinger equation. The split operator \n", "Fourier transform (SOFT) was employed.\n", "\n", - "

    \n", - "Propagation operator\n", "Let's consider a time-independent Hamiltonian and its associated time-dependent\n", "Schrödinger equation for a system of one particle in one dimension.\n", " \n", "$$\\large i\\hbar\\frac{d}{dt}|\\psi> = \\hat{H}|\\psi> \\quad \\text{where} \\quad \n", - "\\hat{H} = \\frac{\\hat{P}^2}{2m} + V(\\hat{x})$$\n", + "\\hat{H} = \\frac{\\hat{P}^2}{2m} + V(\\hat{X})$$\n", "\n", - "The time evolution of the eigenstates can be formulated as:\n", - " \n", - "$$\\large \\psi_n(x,t) = \\psi_n(x)e^{-iE_nt/\\hbar}$$\n", - " \n", - "For a small time $\\Delta t$, the evolution of the wavefunction from $t=0$\n", - "to $t=\\Delta t$ can be formulated as:\n", - " \n", - "$$\\large \\psi(x, \\Delta t) = e^{-iH\\Delta t/\\hbar}\\psi(x, 0)\n", - "=\\sum_{n=0}^{\\infty} \\frac{(-1)^n}{n!}\\left(\\frac{iH\\Delta t}{\\hbar}\\right)^n \\psi(x,0)\n", - "=U(\\Delta t)\\psi(x,0)$$\n", - " \n", - "and where the $U(\\Delta t)$ is called the unitary propagation operator.\n", - "The $U$ is Hermitian, which fulfills the condition:\n", " \n", - "$$\\large UU^\\dagger = e^{-iHt/\\hbar}e^{-iHt/\\hbar \\dagger}\n", - "= e^{-iHt/\\hbar}e^{iHt/\\hbar} = I$$\n", - " \n", - "The time-evolution operator is also reversible or symmetric\n", - "in thime:\n", - " \n", - "$$\\large U(-\\Delta t)U(\\Delta t)|\\psi(x,t)> = |\\psi(x,t)>$$\n", - "
    " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
    \n", - "Split operator Fourier transform\n", "We know that this equation admits at least a formal solution of the kind\n", "$|\\psi(t)> = \\exp\\biggl[-\\frac{i}{\\hbar}\\hat{H}t\\biggr]|\\psi(0)>$\n", "that projected on the coordinate basis gives the (still formal) solution\n", - "$\\psi(x_t,t) = \\int dx_0 K(x_t, t; x_0, 0)\\psi(x_0,0)$\n", - "where $ K(x_t, t; x_0, 0)= < x_t|\\exp\\biggl[-\\frac{i}{\\hbar}\\hat{H}t\\biggr]|x_0 > $\n", - "Note that $x_t$ and $x_0$ are just labels for the coordinates, as if we had $x$ and $x'$.\n", + "$\\psi(X_t,t) = \\int dX_0 K(X_t, t; X_0, 0)\\psi(X_0,0)$\n", + "where $ K(X_t, t; X_0, 0)= < X_t|\\exp\\biggl[-\\frac{i}{\\hbar}\\hat{H}t\\biggr]|X_0 > $\n", + "Note that $X_t$ and $X_0$ are just labels for the coordinates, as if we had $X$ and $X'$.\n", "\n", - "$$\\large k(x_t, x_0) = < x_t|e^{-\\frac{i}{\\hbar}\\hat{H}t} | x_0 > = < x_{N+1} | \\underbrace{e^{-\\frac{i}{\\hbar}t/N} e^{-\\frac{i}{\\hbar}t/N} ... e^{-\\frac{i}{\\hbar}t/N}}_\\textrm{N} |x_0 >$$\n", + "$$\\large k(X_t, X_0) = < X_t|e^{-\\frac{i}{\\hbar}\\hat{H}t} | X_0 > = < X_{N+1} | \\underbrace{e^{-\\frac{i\\hat{H}}{\\hbar}t/N} e^{-\\frac{i\\hat{H}}{\\hbar}t/N} ... e^{-\\frac{i\\hat{H}}{\\hbar}t/N}}_\\textrm{N} |X_0 >$$\n", " \n", "Let us then focus on the single step propogator.\n", " \n", - "$$\\large < x_1 |\\psi(\\epsilon) > = \\psi(x_1,\\epsilon) = \\int dx_0 < x_1 | \n", - "e^{-\\frac{i}{\\hbar}\\hat{H}\\epsilon} |x_0 > \\psi(x_0,0)$$\n", + "$$\\large < X_1 |\\psi(\\epsilon) > = \\psi(X_1,\\epsilon) = \\int dX_0 < X_1 | \n", + "e^{-\\frac{i}{\\hbar}\\hat{H}\\epsilon} |X_0 > \\psi(X_0,0)$$\n", " \n", "We can use the Trotter approximation to write:\n", " \n", - "$$\\large < x_1 |e^{-\\frac{i}{\\hbar}\\hat{H}\\epsilon}| x_0 > = < x_1 | e^{-\\frac{i}{\\hbar}\n", - "[\\frac{\\hat{P^2}}{2m}+V(\\hat{x})]\\epsilon} | x_0> \\approx < x_1 | e^{-\\frac{i}\n", - "{\\hbar}V(\\hat{x})\\epsilon/2}e^{-\\frac{i}{\\hbar}\\frac{\\hat{P^2}}{2m}\\epsilon}e^{-\\frac{i}\n", - "{\\hbar}V(\\hat{x})\\epsilon/2} | x_0 >$$\n", + "$$\\large < X_1 |e^{-\\frac{i}{\\hbar}\\hat{H}\\epsilon}| X_0 > = < X_1 | e^{-\\frac{i}{\\hbar}\n", + "[\\frac{\\hat{P^2}}{2m}+V(\\hat{X})]\\epsilon} | X_0> \\approx < X_1 | e^{-\\frac{i}\n", + "{\\hbar}V(\\hat{X})\\epsilon/2}e^{-\\frac{i}{\\hbar}\\frac{\\hat{P^2}}{2m}\\epsilon}e^{-\\frac{i}\n", + "{\\hbar}V(\\hat{X})\\epsilon/2} | X_0 >$$\n", " \n", - "$$\\large =e^{-\\frac{i}{\\hbar}V(\\hat{x})\\epsilon /2} \\int dp < x_1 | e^{-\\frac{i}{\\hbar}\\frac{\\hat{P^2}}{2m}\\epsilon} | p > < p | x_0 > e^{ \n", - "\\frac{i}{\\hbar}V(\\hat{x})\\epsilon/2}$$\n", + "$$\\large =e^{-\\frac{i}{\\hbar}V(\\hat{X})\\epsilon /2} \\int dp < X_1 | e^{-\\frac{i}{\\hbar}\\frac{\\hat{P^2}}{2m}\\epsilon} | P > < P | X_0 > e^{ \n", + "\\frac{i}{\\hbar}V(\\hat{X})\\epsilon/2}$$\n", " \n", - "where, $< p | x_0 > = \\frac{1}{\\sqrt{2\\pi\\hbar}}e^{-\\frac{i}{\\hbar}Px_0}$.\n", + "where, $< p | X_0 > = \\frac{1}{\\sqrt{2\\pi\\hbar}}e^{-\\frac{i}{\\hbar}PX_0}$.\n", " \n", - "$$\\large \\psi(x_1,\\epsilon)=e^{-\\frac{1}{\\hbar}V(x_1)\\epsilon/2}\\int \\frac{dp}{\\sqrt{2\\pi\\hbar}}e^{\\frac{i}{\\hbar}px_1}e^{-\\frac{i}{\\hbar}\\frac{p^2}{2m}\\epsilon}\\underbrace{\\int \\frac{dx_0}{\\sqrt{2\\pi\\hbar}}e^{-\\frac{i}{\\hbar}px_0}\\underbrace{e^{-\\frac{i}{\\hbar}V(x_0)\\frac{\\epsilon}{2}}\\psi(x_0,0)}_{\\Phi_{\\frac{\\epsilon}{2}}(x_0)}}_{\\tilde{\\Phi}_{\\frac{\\epsilon}{2}}(p)}$$\n", + "$$\\large \\psi(X_1,\\epsilon)=e^{-\\frac{1}{\\hbar}V(X_1)\\epsilon/2}\\int \\frac{dP}{\\sqrt{2\\pi\\hbar}}e^{\\frac{i}{\\hbar}PX_1}e^{-\\frac{i}{\\hbar}\\frac{P^2}{2m}\\epsilon}\\underbrace{\\int \\frac{dX_0}{\\sqrt{2\\pi\\hbar}}e^{-\\frac{i}{\\hbar}PX_0}\\underbrace{e^{-\\frac{i}{\\hbar}V(X_0)\\frac{\\epsilon}{2}}\\psi(X_0,0)}_{\\Phi_{\\frac{\\epsilon}{2}}(X_0)}}_{\\tilde{\\Phi}_{\\frac{\\epsilon}{2}}(P)}$$\n", " \n", - "$$\\large \\psi(x_1,\\epsilon)=e^{-\\frac{1}{\\hbar}V(x_1)\\epsilon/2}\\underbrace{\\int \\frac{dp}{\\sqrt{2\\pi\\hbar}}e^{\\frac{i}{\\hbar}px_1}\\underbrace{e^{-\\frac{i}{\\hbar}\\frac{p^2}{2m}\\epsilon}\\tilde{\\Phi}_{\\frac{\\epsilon}{2}}(p)}_{\\tilde{\\Phi}(p)}}_{\\tilde{\\Phi}(x_1)}$$\n", + "$$\\large \\psi(X_1,\\epsilon)=e^{-\\frac{1}{\\hbar}V(X_1)\\epsilon/2}\\underbrace{\\int \\frac{dP}{\\sqrt{2\\pi\\hbar}}e^{\\frac{i}{\\hbar}PX_1}\\underbrace{e^{-\\frac{i}{\\hbar}\\frac{P^2}{2m}\\epsilon}\\tilde{\\Phi}_{\\frac{\\epsilon}{2}}(P)}_{\\tilde{\\Phi}(P)}}_{\\tilde{\\Phi}(X_1)}$$, \n", + "\n", + "where we recognize $\\tilde{\\Phi}(P)$ as the Fourier transform of $\\Phi(X)$ for instance.\n", " \n", - "By interating N times, we can obtain $\\psi(x,t)$. In summary, the split operator\n", - "Fourier transfer algorithm can be conducted into five step as shown below:\n", + "By interating N times, we can obtain $\\psi(X,t)$. In summary, the split operator\n", + "Fourier transfer algorithm can be reduced into the repeated execution of the five steps shown below:\n", "\n", - "\n", - "
    " + "\n", + "\n" ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [] } ], "metadata": { @@ -115,7 +89,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.8" + "version": "3.10.6" }, "voila": { "authors": "Dou Du, Sara Bonella and Giovanni Pizzi"