Self-contained, Well-Tested, Well-Documented Analytical Solutions of Quantum Mechanical Equations.
To install this package, run the following code in your Jupyter Notebook:
using Pkg; Pkg.add("Antique")
Install Antique.jl for the first use and run using Antique
before each use.
using Antique
The energy E()
, wavefunction ψ()
, potential V()
and some other functions are suppoted. Here are examples in hydrogen-like atom. The analytical notation of energy (eigen value of the Hamiltonian) is written as
Hydrogen atom has symbol
H = HydrogenAtom(Z=1)
E(H)
# output> -0.5
Helium cation has symbol
He⁺ = HydrogenAtom(Z=2)
E(He⁺)
# output> -2.0
There are more examples on each model page.
- Delta Potential
DeltaPotential
- Infinite Potential Well
InfinitePotentialWell
- Harmonic Oscillator
HarmonicOscillator
- PoschlTeller
PoschlTeller
- Morse Potential
MorsePotential
- Rigid Rotor
RigidRotor
- Infinite PotentialWell 3D
InfinitePotentialWell3D
- Spherical Oscillator
SphericalOscillator
- Hydrogen Atom
HydrogenAtom
- Coulomb 2-Body System
CoulombTwoBody
List of quantum-mechanical systems with analytical solutions
This is the guideline for adding new models. Adding a new model may take from a few days to a week due to reference search, test implementation, and writing documentation.
- First, please submit a new issue here. We need to find orthodox references (textbooks or papers, not Wikipedia) for the analytical solutions (eigenvalues and eigenfunctions) before the development. This will take more time than you think.
- Fork the repository on GitHub.
- Clone the forked repository to your local machine by Git.
- Please create 3 files:
files | comments |
---|---|
src/ModelName.jl |
Write the source codes and docstrings in this file. The most helpful examples are harmonic oscillators for one-dimensional systems and hydrogen atoms for three-dimensional systems. We recommend that you copy these files. First we need to create a structure struct ModelName with the same name as the model name (The best way is Find & Replace). Because the function names conflict, you must always give the struct ModelName as the fisrt argument to V, E, ψ and other functions. Multi-dispatch avoids conflicts. We recommend using Revice.jl while coding. Run include("./developer/revice.jl") on the REPL or use dev.ipynb. |
test/ModelName.jl |
Write test code in this file. At a minimum, it is recommended to check the normalization and the orthogonality of wavefunction using QuadGK.jl. |
docs/src/ModelName.md |
Write documnetation in this file. Include at least the definition of the Hamiltonian and the analytical solutions (eigenvalues and eigenfunctions). Calls a docstring in the source code. |
- Please rewrite 5 files:
files | comments |
---|---|
src/Antique.jl |
Add the new model name :ModelName to the models = [...] array in this file. : is required at the beginning. |
docs/make.jl |
Add the new model into pages=[...] in this file. |
test/runtests.jl |
Change for model in [...] in this file. Please test all models before pull requests. |
README.md |
Add the new model to the list of supported models. |
docs/index.md |
Add the new model to the list of supported models. |
- Execute
include("./developer/test.jl")
to run tests. It will take few minutes to complete. - Execute
include("./developer/docs.jl")
to compile documents. HTML files (docs/build/*.html) will be generated. Please check them with Chrome or any other web browsers. - Commit and Push the codes.
- Submit a pull request on GitHub.
Thanks to all contributors. This package was named by @KB-satou and @ultimatile.