High-performance 1D quantum tunneling solver with absorbing boundary conditions. Implements split-operator Fourier method with Numba acceleration.
Solves the time-dependent Schrödinger equation:
In natural units (
Split-operator evolution with absorbing boundaries:
Absorbing mask (cos⁴ profile):
$\mathcal{M}(x) = \begin{cases} 1 - s\left[1 - \cos^4\left(\frac{\pi i}{2n_b}\right)\right] & \text{left boundary} \ 1 & \text{safe zone} \ 1 - s\left[1 - \cos^4\left(\frac{\pi(N-i)}{2n_b}\right)\right] & \text{right boundary} \end{cases}$
Natural Units Convention:
- ℏ = 1 (reduced Planck constant)
- Electron mass m_e = 1
- Energy in eV, length in nm, time in fs
Observables:
- Transmission coefficient: T
- Reflection coefficient: R
- Absorbed probability: A
- Conservation: T + R + A ≈ 1
- Absorbing boundary conditions prevent spurious reflections
- Adaptive time stepping
- Numba JIT compilation
- Stochastic environments with noise and decoherence
- Visualization with zone highlighting
- NetCDF4 output
# From PyPI
pip install 1d-qt-ideal-solver
# From source
git clone https://github.com/sandyherho/1d-qt-ideal-solver.git
cd 1d-qt-ideal-solver
pip install -e .
Command line:
# Run single case
qt1d-simulate case1
# Run both cases
qt1d-simulate --all
# Custom parameters
qt1d-simulate case1 --boundary-width 3.0 --cores 8
Python API:
from qt1d_ideal import QuantumTunneling1D, GaussianWavePacket
# Initialize solver
solver = QuantumTunneling1D(
nx=2048,
x_min=-30.0,
x_max=30.0,
boundary_width=3.0,
boundary_strength=0.03
)
# Create initial wavepacket
psi0 = GaussianWavePacket(x0=-8.0, k0=4.0, sigma=0.8)(solver.x)
# Define barrier
V = solver.rectangular_barrier(height=4.5, width=1.0)
# Solve
result = solver.solve(psi0=psi0, V=V, t_final=6.0, n_snapshots=200)
# Results
T = result['transmission_coefficient']
R = result['reflection_coefficient']
A = result['absorbed_probability']
print(f"T = {T:.4f}, R = {R:.4f}, A = {A:.4f}, T+R+A = {T+R+A:.4f}")
Case | Barrier Type | Height | Width | Domain |
---|---|---|---|---|
1 | Rectangular | 4.5 eV | 1.0 nm | ±30 nm |
2 | Gaussian | 4.0 eV | 0.8 nm | ±30 nm |
Key parameters (see configs/
for examples):
# Spatial grid
nx = 2048
x_min = -30.0
x_max = 30.0
# Time integration
t_final = 6.0
n_snapshots = 200
# Absorbing boundaries
boundary_width = 3.0
boundary_strength = 0.03
# Environment
noise_amplitude = 0.0
decoherence_rate = 0.0
Generated files:
outputs/*.nc
- NetCDF4 with wavefunction dataoutputs/*.gif
- Animated visualizationlogs/*.log
- Simulation diagnostics
Reading NetCDF data:
import netCDF4 as nc
data = nc.Dataset('outputs/case1_rectangular_barrier.nc')
x = data['x'][:]
t = data['t'][:]
psi_real = data['psi_real'][:, :]
psi_imag = data['psi_imag'][:, :]
probability = data['probability'][:, :]
potential = data['potential'][:]
T = data.transmission
R = data.reflection
A = data.absorbed
@article{qt1d_solver_2025,
author = {Herho, Sandy H. S. and Kaban, Siti N. and Anwar, Iwan P. and
and Trilaksono, Nurjanna J., Suwarman, Rusmawan},
title = {{\texttt{1d-qt-ideal-solver}: 1D idealized quantum tunneling solver with absorbing boundaries}},
journal = {xxxx},
volume = {xxxx},
pages = {xxxx},
year = {xxxx},
doi = {10.5281/xxxxx},
url = {https://github.com/sandyherho/1d-qt-ideal-solver}
}
- Sandy H. S. Herho (sandy.herho@email.ucr.edu)
- Siti N. Kaban
- Iwan P. Anwar
- Nurjanna J. Trilaksono
- Rusmawan Suwarman
MIT License - See LICENSE for details.