Skip to main content

dla-ideal-solver: 2D Diffusion-Limited Aggregation Solver

DOI Python License: MIT PyPI version NumPy Matplotlib Numba netCDF4 tqdm Pillow

High-performance Diffusion-Limited Aggregation (DLA) solver with Numba JIT compilation and parallel rendering.

radial_injection

Physics

Simulates particle aggregation through random walks on a 2D lattice:

  1. Random Walk: Particles perform 4-neighbor random walks
  2. Sticking Rule: Particles stick when adjacent to existing aggregate
  3. 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 aggregate
  • snapshots(time,x,y): Growth evolution
  • glued_counts(time): Particle timeline
  • radii, masses: Fractal analysis data

Attributes:

  • fractal_dimension: $D$ from $M(R)$ fit
  • n_aggregates: Number of clusters
  • n_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

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)

Source distribution for dla-ideal-solver 0.0.4
File Size Uploaded
dla_ideal_solver-0.0.4.tar.gz 18.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for dla-ideal-solver 0.0.4
File Interpreter ABI Platform
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

Release history Release notifications | RSS feed

This release

0.0.4 This release

2 release files

0.0.3

2 release files

0.0.2

2 release files

0.0.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page