Schr: GPU-Accelerated Quantum Mechanics and QED Simulator¶
Schr is a high-performance Python framework for simulating quantum mechanical and quantum electrodynamics (QED) systems using GPU acceleration via JAX. Designed for researchers in computational physics, quantum optics, and atomic physics, it provides numerically rigorous implementations of time-dependent Schrödinger equation solvers and field-theoretic methods.
Key Features¶
GPU-Accelerated: Built on JAX for automatic differentiation and XLA compilation to GPUs/TPUs
Spectral Methods: Split-step Fourier method for efficient time evolution with periodic boundary conditions
QED Support: Fock space representation for photon fields and light-matter interaction
Research-Grade Numerics: Absorbing boundary conditions, normalization preservation, and energy conservation
Flexible Architecture: Modular design supporting 1D/2D/3D systems with arbitrary potentials
Quick Start¶
Installation¶
# Install uv
curl -LsSf https://astral.sh/uv/install.sh | sh
# Clone and sync
git clone https://github.com/sql-hkr/schr.git
cd schr
uv sync
For GPU support:
uv pip install "jax[cuda12]"
Basic Usage¶
Solve the time-dependent Schrödinger equation for a Gaussian wavepacket:
import jax.numpy as jnp
from schr.qm.hamiltonian import ParticleInPotential
from schr.qm.solvers import SplitStepFourier
from schr.qm.wavefunction import gaussian_wavepacket
from schr.utils.grid import create_grid_1d
# Create spatial grid
x, dx = create_grid_1d(-10.0, 10.0, 1024)
# Define free particle Hamiltonian
def potential(psi, t):
return jnp.zeros_like(psi, dtype=jnp.float32)
hamiltonian = ParticleInPotential(
potential=potential,
grid_shape=(1024,),
dx=dx,
mass=1.0,
hbar=1.0
)
# Initialize wavepacket
psi0 = gaussian_wavepacket(x, x0=0.0, p0=1.0, sigma=1.0)
# Time evolution
solver = SplitStepFourier(hamiltonian)
psi = psi0
for step in range(1000):
psi = solver.step(psi, step * 0.01, dt=0.01)
Documentation Contents¶
User Guide
API Reference
Additional Information
Mathematical Foundation¶
Time-Dependent Schrödinger Equation¶
The package solves the TDSE in atomic units (\(\hbar = m_e = e = 1\)):
where \(\psi(\mathbf{r}, t)\) is the wavefunction, \(m\) is the particle mass, and \(V(\mathbf{r}, t)\) is the time-dependent potential.
Split-Step Fourier Method¶
The primary solver implements the split-step Fourier method (SSFM), a pseudo-spectral technique:
Advantages:
Second-order accuracy in time: local error \(O(\Delta t^3)\), global error \(O(\Delta t^2)\)
Preserves unitarity and norm conservation
Efficient FFT-based implementation: \(O(N \log N)\) per time step
Handles arbitrary potentials without operator commutation requirements
Project Structure¶
The package is organized into several modules:
- Core (
schr.core) Abstract base classes for Hamiltonians, Solvers, and Fields
- Quantum Mechanics (
schr.qm) hamiltonian: Hamiltonian operators (ParticleInPotential)solvers: Time evolution methods (SplitStepFourier, RungeKutta4)wavefunction: Wavefunction utilities and initial conditions
- Quantum Electrodynamics (
schr.qed) field: PhotonField representation in Fock spaceinteraction: Light-matter interaction Hamiltonians
- Utilities (
schr.utils) grid: Grid generation for 1D/2D/3D systemsfft: FFT utilities and momentum operatorsabsorbing_boundary: Boundary condition implementationsvisualization: Plotting and animation tools
Physical Units¶
The package uses atomic units (Hartree atomic units) by default:
Quantity |
Atomic Unit |
SI Equivalent |
Symbol |
|---|---|---|---|
Length |
Bohr radius |
\(5.29 \times 10^{-11}\) m |
\(a_0\) |
Energy |
Hartree |
\(4.36 \times 10^{-18}\) J = 27.21 eV |
\(E_h\) |
Time |
\(\hbar/E_h\) |
\(2.42 \times 10^{-17}\) s = 24.2 as |
— |
Mass |
Electron mass |
\(9.11 \times 10^{-31}\) kg |
\(m_e\) |
Charge |
Elementary charge |
\(1.60 \times 10^{-19}\) C |
\(e\) |
In atomic units, \(\hbar = m_e = e = 1\).
Contributing¶
Contributions are welcome! Please see the Contributing to Schr guide for details on:
Setting up a development environment
Running tests
Code style guidelines
Submitting pull requests
Citation¶
If you use this software in your research, please cite:
@software{schr2025,
author = {sql-hkr},
title = {Schr: GPU-Accelerated Quantum Mechanics and QED Simulator},
year = {2025},
url = {https://github.com/sql-hkr/schr}
}
License¶
This project is licensed under the MIT License.