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.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

dla_ideal_solver-0.0.4.tar.gz (18.0 kB view details)

Uploaded Source

Built Distribution

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

dla_ideal_solver-0.0.4-py3-none-any.whl (20.3 kB view details)

Uploaded Python 3

File details

Details for the file dla_ideal_solver-0.0.4.tar.gz.

File metadata

  • Download URL: dla_ideal_solver-0.0.4.tar.gz
  • Upload date:
  • Size: 18.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 dla_ideal_solver-0.0.4.tar.gz
Algorithm Hash digest
SHA256 a63e7d20e9754d6a46387c2f3e24de31eac3162bf7487e9bc1baf010d9f73281
MD5 4da7cc289b775297cae1ad4ae7adec3c
BLAKE2b-256 b1f7133ce07870e3bce4d1631a19fa30dcab4888287ac2cca7814000efbc18f1

See more details on using hashes here.

File details

Details for the file dla_ideal_solver-0.0.4-py3-none-any.whl.

File metadata

  • Download URL: dla_ideal_solver-0.0.4-py3-none-any.whl
  • Upload date:
  • Size: 20.3 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 dla_ideal_solver-0.0.4-py3-none-any.whl
Algorithm Hash digest
SHA256 55b1d3591f98d7358dca90f01019a9ede1dd23a12409ff98633902d9ee4278cf
MD5 0370c49a5b762bdaac33f19d2f2462fa
BLAKE2b-256 637048af7c6ef37f9a0b19d4f7a9821a0fd0f5bf2374f78c3a4e7de9032266ce

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.0.4 This release

2 files

0.0.3

2 files

0.0.2

2 files

0.0.1

2 files

Supported by

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