A Python-based desktop application for real-time, interactive 3D visualization of the time-dependent 2D Schrödinger equation.
Quaint provides a real-time, interactive environment to explore quantum mechanics. Built with PyQt6, PyQtGraph, SciPy, NumPy, and PyOpenGL.
- Custom Potentials: Use a built-in canvas to brush or erase custom potential energy barriers, or load mathematical presets (e.g., Harmonic Oscillator, Gaussian Bump).
-
Initial Conditions: Visually set the wave packet's starting position (
$r_0$ ), momentum vector ($k_0$ ), spatial spread ($\sigma$ ), and mass. - Multiple Solvers: Choose between different numerical integration methods (Crank-Nicolson, SSFM or symmetric SSFM) to calculate the wave's evolution.
- High-Performance 3D Rendering: View the probability density mapped to height (Z-axis) and the complex quantum phase mapped to color, fully cached for lag-free playback.
This project uses uv.
1. Clone the repository
git clone https://github.com/Hansus00/Quaint
cd Quaint
2. Install Dependencies Synchronize the environment using uv:
uv sync
3. Run the Application
uv run main.py
Click the Simulation Setup button to customize your experiment:
- Numerical Solver: Select your preferred integration method (Crank-Nicolson SSFM).
- Potential Energy: Choose a preset potential or select "Brush Potential" to draw a custom landscape directly onto the canvas.
-
Wavepacket Configuration: Select "Set Wavepacket" to click-and-drag on the canvas.
- The dot represents the starting position (
$r_0$ ). - The red line represents the momentum vector (
$k_0$ ).
- The dot represents the starting position (
-
Initial Parameters: Adjust covariant matrix elements (
$s_{xx}$ ,$s_{yy}$ ,$s_{xy}$ ) and particle mass. - Click Save & Update Simulation to compute the wave's evolution over time.
- Use the Play and Pause buttons to watch the animation.
- Drag the timeline slider to manually scrub forward and backward through time.
- Rotate: Left-click and drag on the 3D viewport.
- Zoom: Scroll your mouse wheel in and out.
- Settings: Click the Settings button to adjust playback framerate, total number of frames, grid resolution, and visual amplitude scaling of the wave and potential meshes.
- Jacek Winiarczyk @Jaclav
- Szymon Borowski @Szymon-Borowski
- Franciszek Hansdorfer @Hansus00
- Bartosz Łakomy @paluzki
- Adam Podkowiński @adam-podkowinski
This project was developed under the mentorship of Bartosz Kasza (@bkasza) at the Faculty of Physics, University of Warsaw.