Skip to main content

Symplectic pseudo-spectral solver for (1+1)D nonlinear Klein-Gordon equation with topological solitons, breathers, and Numba acceleration.

Project description

amangkurat: Idealized (1+1)D nonlinear Klein-Gordon solver

Python PyPI DOI Code style: black License: MIT NumPy SciPy Matplotlib Numba NetCDF4 tqdm

Overview

Numerical solver for the $(1+1)$-dimensional nonlinear Klein-Gordon equation using symplectic pseudo-spectral methods. Features adaptive timestepping, Numba acceleration, and scientific data output.

Key Features:

  • Pseudo-spectral Fourier discretization (exponential convergence)
  • Størmer-Verlet symplectic integration (structure-preserving)
  • Adaptive CFL-based timestepping
  • Parallel execution with Numba
  • NetCDF4 data output + 3D animations

Mathematical Foundation

Klein-Gordon Equation

$$(1+1)$-dimensional relativistic field equation in natural units ($c = \hbar = 1$):

$$\frac{\partial^2 \phi}{\partial t^2} - \frac{\partial^2 \phi}{\partial x^2} + V'(\phi) = 0$$

Supported Potentials

Potential $V(\phi)$ $V'(\phi)$ Physics
Linear $\frac{1}{2}m^2\phi^2$ $m^2\phi$ Free massive scalar field
$\phi^4$ $\frac{\lambda}{4}(\phi^2 - v^2)^2$ $\lambda\phi(\phi^2 - v^2)$ Topological kinks, domain walls
Sine-Gordon $1 - \cos(\phi)$ $\sin(\phi)$ Breathers, Josephson junctions

Numerical Method

Spatial: Pseudo-spectral Fourier with wavenumbers $k_n = 2\pi n/L$

Temporal: Størmer-Verlet (symplectic leapfrog) $$\phi^{n+1} = 2\phi^n - \phi^{n-1} + \Delta t^2 \left[\nabla^2\phi^n - V'(\phi^n)\right]$$

Stability: CFL condition $\Delta t \leq 0.5/k_{\max}$ enforced via adaptive timestepping


Installation

From Source

git clone https://github.com/sandyherho/amangkurat.git
cd amangkurat
pip install -e .

From PyPI

pip install amangkurat

Dependencies: numpy, scipy, matplotlib, netCDF4, tqdm, numba (optional, recommended for 10-100× speedup)


Quick Start

Command Line

amangkurat case1           # Linear wave
amangkurat case2           # Kink soliton
amangkurat case3           # Breather
amangkurat case4           # Kink-antikink collision

# Options
amangkurat case1 --cores 8 --output-dir results/ --quiet
amangkurat --all           # Run all cases

Python API

from amangkurat import KGSolver
from amangkurat.core.initial_conditions import KinkIC

# Initialize solver
solver = KGSolver(nx=512, x_min=-30.0, x_max=30.0, adaptive_dt=True, n_cores=4)

# Create initial condition
ic = KinkIC(vacuum=1.0, position=0.0, velocity=0.0)
phi0, phi_dot0 = ic(solver.x)

# Solve
result = solver.solve(
    phi0=phi0, phi_dot0=phi_dot0,
    dt=0.005, t_final=50.0,
    potential='phi4', lambda_=1.0, vacuum=1.0,
    n_snapshots=200
)

# Access results
x = result['x']      # Spatial grid
t = result['t']      # Time snapshots  
phi = result['phi']  # Field evolution (nt × nx)

Test Cases

Case Potential Initial Condition Description
1 Linear Gaussian pulse Dispersive wave propagation
2 $\phi^4$ Static kink Topological soliton ($\phi = v\tanh(x/\xi)$)
3 Sine-Gordon Breather Time-periodic localized oscillation
4 $\phi^4$ Kink-antikink pair Collision dynamics ($v = 0.3c$)

Configuration

Simple key-value format (configs/case*.txt):

scenario_name = Kink Soliton
nx = 1024
x_min = -50.0
x_max = 50.0
t_final = 50.0
dt = 0.005
adaptive_dt = true

potential = phi4
lambda = 1.0
vacuum = 1.0

ic_type = kink
position = 0.0
velocity = 0.0

n_cores = 0
save_netcdf = true
save_animation = true
n_frames = 200
fps = 30
colormap = inferno

Output Files

NetCDF4 data (outputs/*.nc):

  • Variables: x(nx), t(nt), phi(nt, nx)
  • Metadata: grid parameters, potential type, timestep info

Animated GIFs (outputs/*.gif):

  • 3D visualization of $\phi(x,t)$ evolution
  • Dynamic camera rotation, color-coded amplitude

Log files (logs/*.log):

  • Detailed diagnostics, parameter listings, timing

Physical Units

Code uses dimensionless units. Map to physical systems via scale factors:

$\phi^4$ Kinks

Natural scales: Length $\xi = \sqrt{2}/v$, Time $T = \xi/c$, Energy $E_0 = \frac{2\sqrt{2}}{3}\lambda v^3$

Context Length Scale Time Scale Application
Particle physics $\xi \sim 10^{-18}$ m $T \sim 10^{-26}$ s Higgs field (theoretical)
Condensed matter $\xi \sim 10$ nm $T \sim 1$ ps Ferromagnetic domain walls
Josephson junctions $\lambda_J \sim 1$ μm $T \sim 10$ ps Superconducting phase

Conversion:

units = result['units']
x_physical = result['x'] * length_scale_physical / units.length_scale

Directory Structure

amangkurat/
├── configs/              # Test configurations
├── src/amangkurat/
│   ├── core/            # Solver + initial conditions
│   ├── io/              # NetCDF + config parser
│   ├── visualization/   # 3D animations
│   └── utils/           # Logger + timer
├── outputs/             # Results (*.nc, *.gif)
├── logs/                # Simulation logs
└── pyproject.toml       # Build config

Limitations

  • 1D spatial domain only ($(1+1)$D spacetime)
  • Periodic boundary conditions (not suitable for scattering)
  • Uniform grid (no adaptive mesh refinement)
  • CFL-limited timestep (explicit integration)
  • Requires smooth solutions (spectral methods)

Citation

@software{herho2025_amangkurat,
  author = {Herho, Sandy H. S.},
  title = {amangkurat: Idealized Nonlinear Klein-Gordon Solver},
  year = {2025},
  version = {0.0.1},
  url = {https://github.com/sandyherho/amangkurat}
}

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

amangkurat-0.0.1.tar.gz (19.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

amangkurat-0.0.1-py3-none-any.whl (20.9 kB view details)

Uploaded Python 3

File details

Details for the file amangkurat-0.0.1.tar.gz.

File metadata

  • Download URL: amangkurat-0.0.1.tar.gz
  • Upload date:
  • Size: 19.0 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

Hashes for amangkurat-0.0.1.tar.gz
Algorithm Hash digest
SHA256 800de890aea27c41901ef98bfff5cd7d7c5359adb59dff50a609a984ddb1cebe
MD5 977de7718c83bf43d22ba0abb4d372f2
BLAKE2b-256 96ced9a2e035d4a45bb8509a6b9349e0a64c843488d9f55d09fb9c1c06e6f7d6

See more details on using hashes here.

File details

Details for the file amangkurat-0.0.1-py3-none-any.whl.

File metadata

  • Download URL: amangkurat-0.0.1-py3-none-any.whl
  • Upload date:
  • Size: 20.9 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

Hashes for amangkurat-0.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 17bc4d634cc0103db0da917659ae50e3c832bbb3fd54e618339bae123013b7c3
MD5 ebcc0be59fe889b2a7debb17b1ace325
BLAKE2b-256 a20651945259b2b8cc58ba978aef60dbda8513bf87a824704ae30b036f81a040

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page