Diffusion-Limited Aggregation (DLA) solver with Numba acceleration
Project description
dla-ideal-solver: 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 Kaban, Siti N. and
Trilaksono, Nurjanna J. and Suwarman, Rusmawan and
Irawan, Dasapta E.},
title = {DLA Solver: Diffusion-Limited Aggregation with Numba},
year = {2025},
version = {0.0.1},
license = {MIT}
}
Authors
- Sandy H. S. Herho (sandy.herho@email.ucr.edu)
- Siti N. Kaban
- Nurjanna J. Trilaksono
- Rusmawan Suwarman
- Dasapta E. Irawan
License
MIT License - See LICENSE for details.
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 dla_ideal_solver-0.0.1.tar.gz.
File metadata
- Download URL: dla_ideal_solver-0.0.1.tar.gz
- Upload date:
- Size: 15.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 |
333d9970b74ff314df1978e9df8cf90dff0f5576eabfbc29fe4335527eb3ac48
|
|
| MD5 |
3b9260f76e09ed28e4a98f40d11d324e
|
|
| BLAKE2b-256 |
ab3bb90fe47699ce920b339fa4705851ab7616c349224febfbdd603ad1f00bb1
|
File details
Details for the file dla_ideal_solver-0.0.1-py3-none-any.whl.
File metadata
- Download URL: dla_ideal_solver-0.0.1-py3-none-any.whl
- Upload date:
- Size: 17.7 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 |
b5b5ca2ecbf4fc23380c35d7ca30af63ea75b3ec8c49133d7cd1b4a5772d5912
|
|
| MD5 |
2a4a510bb43e369aa8e1f88b95b4b561
|
|
| BLAKE2b-256 |
ea01d9cf810f96bf0961f75b0256b3206371e8ea98e00c8ba0ae33febd87d3c5
|