A flexible and efficient solver for the 1D Nonlinear Schrödinger Equation
Project description
Simple Idealized 1D NLSE Solver
A flexible and efficient solver for the 1D Nonlinear Schrödinger Equation (NLSE) using pseudo-spectral methods
Overview
This package provides a high-accuracy numerical framework for solving the 1D focusing NLSE:
$$i \frac{\partial \psi}{\partial t} + \frac{1}{2} \frac{\partial^2 \psi}{\partial x^2 } + |\psi|^2 \psi = 0,$$
where $\psi(x,t)$ is the complex wave function. This equation models various physical phenomena including Bose-Einstein condensates, nonlinear optics, and water waves.
Numerical Method
The solver employs a Fourier pseudo-spectral method combined with high-order time integration:
Spatial Discretization
Using the Fourier transform $\hat{\psi}(k,t) = \mathcal{F}[\psi(x,t)]$, the NLSE becomes:
$$\frac{\partial \hat{\psi}}{\partial t} = -\frac{i}{2}k^2\hat{\psi} + i\mathcal{F}[|\psi|^2\psi],$$
where spatial derivatives are computed spectrally:
- $\mathcal{F}[\partial^2_x \psi] = -k^2 \hat{\psi}$
- Wavenumbers: $k_j = 2\pi j/L$ for $j \in [-N/2, N/2)$
Anti-Aliasing Filter
To prevent aliasing from the nonlinear term, we apply an exponential filter (2/3 rule):
$$\sigma(k) = \exp\left[-36\left(\frac{|k|}{k_{max}}\right)^{36}\right], \quad k_{max} = \frac{2\pi N}{3L}$$
Time Integration
The filtered equation in Fourier space:
$$\frac{d\hat{\psi}_f}{dt} = -\frac{i}{2}k^2\hat{\psi}_f + i\sigma(k)\mathcal{F}[|\mathcal{F}^{-1}[\hat{\psi}_f]|^2 \mathcal{F}^{-1}[\hat{\psi}_f]]$$
is solved using the 8th-order Dormand-Prince method (DOP853) with adaptive time-stepping, achieving relative tolerances down to $10^{-9}$.
Conservation Laws
The solver monitors three conserved quantities to ensure numerical stability:
-
Mass (L² norm): $M = \int_{-\infty}^{\infty} |\psi|^2 dx$
-
Momentum: $P = \int_{-\infty}^{\infty} \text{Im}(\psi^* \partial_x \psi) dx$
-
Energy (Hamiltonian): $E = \int_{-\infty}^{\infty} \left[\frac{1}{2}|\partial_x \psi|^2 - \frac{1}{2}|\psi|^4\right] dx$
Key Features
- Spectral accuracy: Exponential convergence for smooth solutions
- Adaptive time-stepping: Automatic step size control based on error estimates
- JIT compilation: Optional Numba acceleration for performance-critical sections
- Stability monitoring: Real-time tracking of conservation laws
- Multiple initial conditions: Solitons, breathers, and modulation instability scenarios
Installation
From PyPI
pip install simple-idealized-1d-nlse
From source
git clone https://github.com/samuderasains/simple-idealized-1d-nlse.git
cd simple-idealized-1d-nlse
pip install -e .
Quick Start
# Run single scenario with YAML config
nlse-simulate single_soliton
# Run with TXT configuration file
nlse-simulate --config configs/txt/single_soliton.txt
# Run all predefined scenarios
nlse-simulate --all
# Run with verbose output
nlse-simulate single_soliton --verbose
Project Structure
simple_idealized_1d_nlse/
├── src/simple_idealized_1d_nlse/
│ ├── core/ # Core solver and numerical methods
│ ├── utils/ # Utility functions and helpers
│ ├── visualization/ # FiveThirtyEight-style plotting
│ └── io/ # Input/output handlers (YAML/TXT)
├── configs/
│ ├── yaml/ # YAML configuration files
│ └── txt/ # TXT configuration files
../outputs/ # Simulation results (outside package)
../logs/ # Simulation logs (outside package)
Authors
- Sandy H. S. Herho - sandy.herho@email.ucr.edu
- Iwan P. Anwar
- Faruq Khadami
- Fikry P. Lugina
- Rusmawan Suwarman
- Dasapta E. Irawan
License
This project is licensed under the WTFPL License - see the LICENSE file for details.
Citation
If you use this software in your research, please cite:
@software{nlse_solver_2025,
title = {Simple Idealized 1D NLSE Solver},
author = {Herho, Sandy H. S. and Anwar, Iwan P. and Khadami, Faruq and
Lugina, Fikry P. and Suwarman, Rusmawan and Irawan, Dasapta E.},
year = {2025},
version = {0.0.1},
url = {https://github.com/sandyherho/simple_idealized_1d_nlse}
}
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file simple_idealized_1d_nlse-0.0.2.tar.gz.
File metadata
- Download URL: simple_idealized_1d_nlse-0.0.2.tar.gz
- Upload date:
- Size: 17.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.1.3 CPython/3.12.2 Linux/6.11.9-100.fc39.x86_64
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b012f51001f8e78de5f18e865ea1e032a7e116e432c6e64dc4fed6822efebbf7
|
|
| MD5 |
660c4ddf552a1dca15f06ac30a8e7086
|
|
| BLAKE2b-256 |
0f93e3a845c77a18121ffd43746058af65adc24d5c639f0d098dcec10aa70b82
|
File details
Details for the file simple_idealized_1d_nlse-0.0.2-py3-none-any.whl.
File metadata
- Download URL: simple_idealized_1d_nlse-0.0.2-py3-none-any.whl
- Upload date:
- Size: 21.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.1.3 CPython/3.12.2 Linux/6.11.9-100.fc39.x86_64
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
07001dd653320b4eb8784fe03eb3441db32c2974f4f770a98a63ae2b030fdcc0
|
|
| MD5 |
68a8174a325967a4f516cfe51722fb0f
|
|
| BLAKE2b-256 |
bcd2c6fd8196d6fd0b49ac72614e998bd788b6a9cf2b4b61c346cede79f711fa
|