dla-ideal-solver: 2D Diffusion-Limited Aggregation Solver
High-performance Diffusion-Limited Aggregation (DLA) solver with Numba JIT compilation and parallel rendering.
Physics
Simulates particle aggregation through random walks on a 2D lattice:
- Random Walk: Particles perform 4-neighbor random walks
- Sticking Rule: Particles stick when adjacent to existing aggregate
- Growth: Dendritic structures emerge from stochastic aggregation
Fractal Analysis: Mass-radius relationship $M(R) \propto R^D$ gives fractal dimension $D \approx 1.71$ (2D DLA)
Features
- Numba JIT: Compiled random walk for 100x speedup
- Parallel rendering: Multi-core GIF generation
- NetCDF output: Compact compressed format
- 4 test cases: Classic, competitive, controlled, dense
- Fractal analysis: Automatic $D$ calculation
Installation
# From PyPI
pip install dla-ideal-solver
# From source
git clone https://github.com/sandyherho/dla-ideal-solver.git
cd dla-ideal-solver
pip install -e .
Quick Start
Command line:
# Run single case
dla-simulate case1
# Run all cases
dla-simulate --all
# Custom cores
dla-simulate case1 --cores 8
Python API:
from dla_ideal import DLASolver
solver = DLASolver(N=512, n_cores=8)
result = solver.solve(
n_walkers=10000,
n_seeds=1,
max_iter=100000,
injection_mode='random'
)
print(f"Particles: {result['n_particles']}")
print(f"Aggregates: {result['n_aggregates']}")
print(f"Fractal dimension: {result['fractal_dimension']:.3f}")
Test Cases
| Case | Description | Seeds | Walkers | Physics |
|---|---|---|---|---|
| 1 | Classic DLA | 1 | 10k | Baseline dendritic |
| 2 | Multiple Seeds | 12 | 15k | Competition & fusion |
| 3 | Radial Injection | 1 | 10k | Controlled growth |
| 4 | High Density | 1 | 25k | Dense packing |
Configuration
Key parameters:
lattice_size = 512 # Grid size (N×N)
n_walkers = 10000 # Number of particles
n_seeds = 1 # Initial sticky particles
max_iterations = 100000 # Safety limit
injection_mode = random # 'random' or 'radial'
injection_radius = 180 # For radial mode
snapshot_interval = 100 # Frames per N particles
Output
NetCDF variables:
grid(x,y): Final aggregatesnapshots(time,x,y): Growth evolutionglued_counts(time): Particle timelineradii, masses: Fractal analysis data
Attributes:
fractal_dimension: $D$ from $M(R)$ fitn_aggregates: Number of clustersn_particles: Total stuck particles
Reading data:
import netCDF4 as nc
data = nc.Dataset('outputs/case1_classic_dla.nc')
grid = data['grid'][:]
snapshots = data['snapshots'][:]
D = data.fractal_dimension
print(f"Fractal dimension: {D:.3f}")
Mathematical Background
The fractal dimension $D$ is computed from the mass-radius scaling relationship:
$$M(R) = \int_0^R \rho(r) , dV \propto R^D$$
where $M(R)$ is the mass within radius $R$ from the aggregate center. For 2D DLA:
$$\log M(R) = D \log R + \text{const}$$
The slope $D$ is obtained via linear regression on $\log$-$\log$ scale. Theoretical predictions give $D \approx 1.71$ for 2D DLA structures.
Citation
@software{dla_solver_2025,
author = {Herho, Sandy H. S. and Fajary, Faiz R. and Anwar, Iwan P. and Khadami, Faruq and
Trilaksono, Nurjanna J. and Suwarman, Rusmawan and
Irawan, Dasapta E.},
title = {DLA Solver: Diffusion-Limited Aggregation with Numba},
year = {2026},
version = {0.0.4},
license = {MIT}
}
Authors
- Sandy H. S. Herho
- Faiz R. Fajary
- Iwan P. Anwar
- Faruq Khadami
- Nurjanna J. Trilaksono
- Rusmawan Suwarman
- Dasapta E. Irawan
License
MIT License - See LICENSE for details.
Metadata
Release files for dla-ideal-solver 0.0.4
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| dla_ideal_solver-0.0.4.tar.gz | 18.0 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| dla_ideal_solver-0.0.4-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 38.3 kB
Release files / dla_ideal_solver-0.0.4.tar.gz
| Download URL | dla_ideal_solver-0.0.4.tar.gz |
|---|---|
| Size | 18.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
a63e7d20e9754d6a46387c2f3e24de31eac3162bf7487e9bc1baf010d9f73281
|
|
BLAKE2b-256 checksum How to use checksums |
b1f7133ce07870e3bce4d1631a19fa30dcab4888287ac2cca7814000efbc18f1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
poetry/2.1.3 CPython/3.12.2 Linux/6.11.9-100.fc39.x86_64
|
Release files / dla_ideal_solver-0.0.4-py3-none-any.whl
| Download URL | dla_ideal_solver-0.0.4-py3-none-any.whl |
|---|---|
| Size | 20.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
55b1d3591f98d7358dca90f01019a9ede1dd23a12409ff98633902d9ee4278cf
|
|
BLAKE2b-256 checksum How to use checksums |
637048af7c6ef37f9a0b19d4f7a9821a0fd0f5bf2374f78c3a4e7de9032266ce
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
poetry/2.1.3 CPython/3.12.2 Linux/6.11.9-100.fc39.x86_64
|