VOLUME 1, ISSUE 4 · SUMMER 2025 · ORIGINAL RESEARCH
Why Frost, Coral and Copper Deposits All Grow the Same Shape
Computational study · Peer-edited by the club review board · LaTeX source · Analysis code · Raw output · Interactive model
A Drawer of Things That Look Alike
The collection began with a bad photograph of a window, and the print is still pinned to the noticeboard above the club table. February, single glazing. Ice had put out a spray of branches from one corner of the pane that forked, forked again, and thinned away to nothing somewhere near the middle of the glass, and the photograph was blurred enough that it could have been almost anything. A month later somebody carried in a slab of limestone off a road cut, a black manganese dendrite spread flat across the joint surface, looking so much like a fern that the old name for the thing was a fossil fern. Then came a plate of Bacillus subtilis, starved on thin agar, grown outward into a tangle of narrow arms and wide empty bays.
Ice, manganese oxide and a starved bacterial colony share no chemistry, no timescale, no length scale, and no mechanism anyone could propose passing between them: the ice grew in minutes on a pane of glass, the manganese over some unknown span sealed inside rock, the colony over a few days in a dish at blood heat. Yet the three pictures, cropped square and laid side by side with their labels turned under, are genuinely hard to sort, and the club has failed to sort them twice.
Two honest reactions to that are available, and the first says that something real is shared between them, a rule about growth that does not much care what happens to be growing. The other says that human beings are superb detectors of branches, so a collector of coincidences will turn them up at a rate governed more by the collector than by the world, and no quantity of enthusiasm in the drawer tells those two cases apart. This article is our attempt to put the first of those two reactions somewhere it could actually fail.
The candidate rule has a name: Witten and Sander described it in 1981, a growth process stripped down and stripped down again until almost nothing was left inside it [1]. Particles arrive one at a time and freeze where they touch. Nothing else happens. Branches come out anyway, because the arms reaching furthest into the surrounding space intercept the wandering particles first, so the bays behind those arms starve, so the arms get further ahead still. Screening compounds, and the product is an object with no characteristic size, whose mass grows as a non-integer power of its own radius. A longer treatment followed two years later [2], and the model has since been pointed at electrical breakdown in insulators [3], metal plated out of solution [4], mineral dendrites in rock [5], the fractal outline of real snowflakes [6] and the morphology of stony corals [7].
A fractal dimension is the number carrying the claim. If the resemblance between frost and manganese and bacteria is real in the way physicists mean the word, then the model's dimension and the dimensions measured on real deposits ought to be a single number, and that number ought not to shift depending on which ruler somebody picks up to measure it with. We set out to measure it twice.
The Rule, Written Out
Specification of the model as implemented, in which nothing whatever describes anything
physical; the list describes a program, and a reader can check every clause of it against the
program, which lives in
analysis/diffusion-limited-growth.py.
- Occupy one site at the origin of a square lattice. Call it the seed.
- Release a walker at a uniformly random angle on a circle of radius Rbirth = Rmax + 5, where Rmax is the current distance from the origin to the furthest occupied site.
- The walker steps to one of its four nearest neighbours, each with probability 1/4.
- If the site it tries to enter is already occupied, then with probability pstick the walker freezes where it stands and joins the cluster for good. Otherwise it stays where it is and tries again on the next step.
- If the walker wanders outside Rbirth, it returns to the birth circle at its first-return angle, drawn from the Poisson kernel, and no walker in this model is ever discarded.
- Repeat from 2 until the cluster has N particles.
Two accelerations were needed to make 50,000 particles affordable on a laptop, and both are approximations that we tested rather than trusted; the first of them swaps long stretches of empty walking for a single jump. Three coarse occupancy maps run alongside the lattice at block sizes 8, 32 and 128 units, each dilated by one block in every direction, so a clear block at the 128 level guarantees that no occupied site lies within 128 units of the walker. The walker then jumps the whole 128 units at once, in a uniformly random direction. For a continuum Brownian walker that step is exact, since the first exit point from a disc is distributed uniformly around its boundary; on a lattice it becomes an approximation, and we apply it only at distances of 8 units or more. The second acceleration is the reinjection rule already stated, exact in the continuum for exactly the same reason, and section nine reports what happens when the jumps are switched off altogether.
Parameters a reader might reasonably expect to matter, and which are simply absent: temperature, surface tension, particle size, particle shape, hydrodynamics, gravity, surface diffusion, detachment, and any concentration of walkers above one at a time. Every physical system named in the opening section violates at least three of those omissions, which are no defect buried in a footnote: they are the point of the model, and they decide in advance what an agreement between model and measurement could possibly mean.
The Arithmetic
A fractal dimension is a slope on a log-log plot, and nothing about it is more mysterious than any other slope. Below, by hand, on real output, so that a reader can check the machine's arithmetic against their own.
For a mass fractal, particle number and radius are tied by \(N = A\,R_g^{D}\). Take logarithms, rearrange, and the radius of gyration becomes a power of the mass:
$$\ln R_g \;=\; \frac{1}{D}\,\ln N \;+\; \text{const}$$A straight line through \(\ln R_g\) against \(\ln N\) therefore has slope \(1/D\). Cluster number one passed 1,040 particles carrying a radius of gyration of 21.458 lattice units, and finished at 50,000 particles with a radius of gyration of 215.851. Two points are enough for an estimate:
$$\frac{1}{D} \;=\; \frac{\ln(215.851/21.458)}{\ln(50{,}000/1{,}040)} \;=\; \frac{2.3085}{3.8728} \;=\; 0.5961$$which inverts to \(D = 1.678\). Least squares over all 44 checkpoints in that window gives 1.6891 for the same cluster, so the two-point shortcut misses by about 0.011, which is small enough to shrug at and interesting enough to keep. Also the first hint of the story, because the checkpoints do not lie on a line at all, they lie along a gentle curve, and which pair you happen to pick moves the answer further than the scatter between whole clusters does.
Box counting works the same way with the sign flipped. Cover the finished cluster with a grid of boxes of side \(\varepsilon\) and count the boxes holding at least one particle; shrinking \(\varepsilon\) makes that count climb as \(N_{\text{box}} \sim \varepsilon^{-D}\). Averaged over our six clusters and over eight random grid offsets, boxes of side 4 covered the cluster in 7,413.7 boxes and boxes of side 64 in 79.7:
$$D \;=\; \frac{\ln(7{,}413.7/79.7)}{\ln(64/4)} \;=\; \frac{4.5325}{2.7726} \;=\; 1.6347$$Least squares across all nine box sizes inside that window gives 1.6420. Close again, and not identical again, and again for the single reason that the data curve.
Finally the comparison the club insists on. Our radius-of-gyration answer reads 1.6992 with a standard error of 0.0172 across six clusters, against an accepted value of 1.71, so the difference is \(1.6992 - 1.7100 = -0.0108\), and dividing that by our own error bar gives \(-0.0108/0.0172 = -0.63\). Six tenths of an error bar. Our box-counting answer reads 1.64195 with a standard error of 0.00145, so the same difference comes out at \(-0.06805/0.00145 = -46.87\). Forty-seven error bars, the same clusters, two rulers and two verdicts.
Working Notes From the Club Table
Week 1First version grew 200 particles in eleven seconds, and we celebrated in the corridor outside the physics room. Then somebody worked out that 50,000 particles would take rather longer than eleven seconds times 250, because the walk in from the birth circle lengthens as the cluster widens. Estimated runtime for one cluster: about four days.
Week 1Killed the walker when it strayed too far. Clusters came out visibly lopsided. Realised that a two-dimensional random walk is recurrent, so a walker that leaves always comes back, and throwing it away biases growth toward the side it left from. Replaced the kill radius with the exact first-return angle. Lopsidedness went away.
Week 2Added the long jumps. Runtime for one 50,000-particle cluster dropped to about a minute. Immediately suspicious of anything that fast, so we wrote the control in section nine first.
Week 2Grid overflow on cluster four. The cluster reached the edge of its array and the program kept writing. Added an explicit guard that raises if Rmax plus the birth gap ever passes within twelve sites of the boundary, and sized the grid from \(N^{1/1.71}\) with a 30 percent margin. Every production run since has stayed inside it.
Week 3First box-counting number came back at 1.58 and we assumed a bug. Spent an evening hunting one. No bug. The box counter really does read low, and proving that took the three calibration objects in section seven, which is where the rest of that week eventually went.
Week 4Argument at the table about which number to put in the abstract. Resolved by putting both in, in the order that makes us look worse.
Two entries there deserve pulling out of the list. The kill-radius bug produced a result that looked plausible and was wrong, and we caught it only because the clusters came out visibly asymmetric; had the bias been subtler, we would have published it and never known. The box-counting number that looked like a bug was not one, which is the more useful lesson of the pair, since the reflex to debug until the answer looks right is the same reflex as the reflex to stop debugging the moment it does.
What Six Clusters Say
Six clusters, 50,000 particles each, sticking probability one, every one of them grown from its own independent random stream spawned off a single seed. Total lattice steps across the six: 107.6 million, plus 26.1 million jumps and 2.54 million reinjections; the largest cluster reached 449 lattice units out from its seed, on a grid 1,615 sites to a side.
The six cluster values run from 1.6515 to 1.7725. Wide, for six samples of a single process, and that width is exactly why the standard error lands at 0.0172 rather than at somewhere more impressive. Each cluster's own regression reports a standard error near 0.004, but those within-cluster errors are worthless as error bars, because the 44 checkpoints along a single growth history are strongly correlated: the cluster at 30,000 particles physically contains the cluster at 20,000 particles. Treating strongly correlated points as though they were independent produces an error bar four times too small. The cluster-to-cluster scatter is the honest one, and the honest one is what we quote here.
| Cluster | Rg | Rmax | Rmax/Rg | A4 | D (gyration) | D (boxes) | D (gyration, N ≥ 5,000) |
|---|---|---|---|---|---|---|---|
| 1 | 215.851 | 402.523 | 1.865 | 0.7020 | 1.6891 | 1.6478 | 1.6488 |
| 2 | 209.308 | 411.672 | 1.967 | 0.1333 | 1.7725 | 1.6404 | 1.7312 |
| 3 | 214.347 | 449.111 | 2.095 | 0.5055 | 1.7106 | 1.6397 | 1.7008 |
| 4 | 208.795 | 402.732 | 1.929 | 0.2995 | 1.6686 | 1.6431 | 1.7016 |
| 5 | 213.497 | 424.124 | 1.987 | 0.3497 | 1.7028 | 1.6431 | 1.7068 |
| 6 | 217.000 | 431.269 | 1.987 | 0.5065 | 1.6515 | 1.6376 | 1.6117 |
| mean | 213.133 | 420.239 | 1.972 | 0.4161 | 1.6992 | 1.6420 | 1.6835 |
| s.e. | · | · | · | 0.0808 | 0.0172 | 0.0015 | 0.0181 |
A4 is the \(r^4\)-weighted mean of \(\cos 4\theta\), zero for a cluster with no preferred direction and positive for one that has grown into a four-armed cross lined up with the lattice axes. Every one of our clusters has it positive. Hold that thought until section seven.
The Second Ruler Disagrees
Box counting is the measurement most people meet first, because it is the one anybody can perform on a photograph with a sheet of graph paper. Lay a grid over the object, count the occupied squares, shrink the grid and count again, then plot the counts against grid size on log axes and read the slope straight off. Theiler surveyed the numerical methods people actually use to estimate a fractal dimension, and how those methods behave once they wander away from the definition they came from [8]. Ours behaved badly.
We averaged the count over eight random grid offsets at each box size, so the answer does not depend on where the grid lands. Sixteen box sizes were used, from 1 to 256 lattice units. The fit was taken over the nine sizes from 4 to 64, chosen because that is where the local slope runs flattest, and the result was 1.6420 with a standard error of 0.0015 across the six clusters.
So we hold two numbers taken off the same six clusters. Paired cluster by cluster, the gyration estimate exceeds the box estimate by 0.0572 with a standard error of 0.0172, which works out at a paired z of +3.32. They do not agree. We had agreed at the start of this study that a disagreement between the two methods would be investigated rather than quietly settled in favour of the flattering one. The flattering one is obvious. 1.6992 lands within two thirds of an error bar of the accepted value and would have made a tidy result.
Before blaming the object itself, we spent a while looking hard at the ruler instead. Box counting on our clusters is sensitive to where the fit window is placed, and that sensitivity outruns the statistical error forty times over. Fitting over 1 to 16 lattice units gives 1.5061; over 2 to 32, 1.5957; over 4 to 64, our quoted 1.6420; over 8 to 128, 1.6422; over 16 to 256, back down to 1.5864; and over the whole range of 1 to 256, 1.5830, with the standard error on every one of those six fits sitting somewhere between 0.0013 and 0.0046. Nudge the window and the answer walks 0.06. A quantity that wanders that far under a nudge is not in any real sense being measured to 0.0015.
Calibrating a Ruler on Shapes Whose Answer We Already Know
The test that settled it is one any reader with a laptop can repeat in an afternoon. Take the box-counting code, change nothing whatsoever, and run it on objects whose dimension is known exactly by construction, because whatever error it makes there it is making on the DLA clusters too.
We used a Sierpinski gasket at generation 10, which has 59,049 points and an exact dimension of \(\ln 3/\ln 2 = 1.58496\); a Sierpinski carpet at generation 5, 32,768 points, exact dimension \(\ln 8/\ln 3 = 1.89279\); and every lattice site inside a disc of radius 126, 49,861 points, exact dimension 2 by definition. The point counts were chosen to sit near our clusters' 50,000.
The gasket came back at 1.5438, low by 0.0411, the carpet at 1.7549, low by 0.1379, and the disc at 1.8220, low by 0.1780. Mean error across the three, −0.1190. The error widens as the true dimension rises. The \(R^2\) of each fit exceeded 0.9988, so a reader consulting only the goodness of fit would have concluded that all three measurements were excellent, which is the whole trouble with consulting goodness of fit.
The mechanism is not mysterious. A box-counting fit taken over a decade and a half, on a lattice, with the object's own diameter serving as the outer cutoff, gets squeezed from both ends at once. At small \(\varepsilon\) the count saturates at the number of particles, forcing the local slope toward 1 for a point set, while at large \(\varepsilon\) the whole object drops into a handful of boxes and the local slope collapses. A window survives in between, and on an object 400 lattice units across it is too short to be flat.
With the calibration in hand, apply the correction and watch: the mean bias of −0.1190 pushes our box estimate from 1.6420 up to 1.7610, overshooting the accepted value by 0.0510. We are not claiming that as a corrected measurement. The bias is no constant offset; it ranges from 0.041 to 0.178 across the three calibration shapes, and it depends on an object's lacunarity quite as much as on its dimension. What the correction establishes is a sign and an order of magnitude, nothing finer than that. The gap between our two rulers is the size of a known defect in one of them, pointing in the direction that closes the gap.
Now the other half of the explanation, which concerns the object rather than the ruler, because the gyration exponent will not hold still either at any size we grew. Read in bands, its local value is 1.812 between 100 and 300 particles, 1.824 between 300 and 1,000, 1.686 between 1,000 and 3,000, 1.739 between 3,000 and 10,000, 1.666 between 10,000 and 30,000, and 1.669 between 30,000 and 50,000. Falling, in other words, and still falling at the largest size we managed to reach. Restricting the fit to N above 5,000 drops our own answer from 1.6992 down to 1.6835.
That drift has a documented cause, and the cause is the square lattice: the four-fold anisotropy A4 in our clusters climbs from 0.041 at 200 particles to 0.416 at 50,000. Ball and Brady reported in 1985 that square-lattice clusters of \(10^5\) particles are visibly anisotropic, and that their overall shape depends on the lattice they were grown on [9]. Meakin then grew hundreds of clusters on square, triangular and hexagonal lattices and found the radius-of-gyration exponent \(\beta = 1/D\) to be \(0.585 \pm 0.003\) on the six-fold lattices, matching off-lattice growth, and about \(0.60\) on the square lattice at the largest sizes [10].
Our own mean local exponent from 10,000 to 30,000 particles comes to 0.60007, and from 30,000 to 50,000, to 0.59923. Nobody went looking for that agreement. Our square lattice produced it unprompted, and it matches Meakin's square-lattice number to three decimal places, a coincidence nobody at the club table found especially comfortable. The accepted 1.71 is an off-lattice value [11], so we measured a different object and got the number that object is known to give.
One closed-form prediction deserves setting beside that, if only because of how close our lattice clusters land to it: a mean-field treatment of the screening gives \(D = (d^2+1)/(d+1)\), exactly \(5/3 = 1.6667\) in two dimensions. Muthukumar derived it from the competition between different parts of a growing cluster for the incoming walkers [19], and Tokuyama and Kawasaki published a mean-field treatment of the same problem the following year [20], while Meakin's early lattice simulations across dimensions 2 to 6 reported \(D \approx 5d/6\), also 1.667 at \(d = 2\) [12]. Our square-lattice exponent read over the last half-decade of growth is 1.6688, which is 0.0021 away from that value, and our full-window answer of 1.6992 sits 1.90 of our standard errors above it. The mean-field result is now understood to be wrong in two dimensions, and off-lattice clusters miss it clearly: Tolman and Meakin describe their 1.715 in their own abstract as significantly higher than 5/3 [11]. A square lattice reproduces it almost exactly. We write that down as coincidence rather than vindication, because two wrong things agreeing with each other is no evidence at all that either one of them is right.
Letting Go Before You Stick
The sticking rule is the one piece of physics left in the model that a real system could plausibly be expected to vary. A walker refusing to attach on first contact keeps wandering, and a wanderer can work its way down into a bay that a stickier walker would have sealed off from the outside, so lowering the sticking probability ought to fill the cluster in.
We ran three independent clusters of 8,000 particles at each of five different sticking probabilities. Eight thousand rather than fifty thousand, because the walk cost climbs steeply as the probability falls: at p = 1 a particle costs 353 lattice steps on average, and at p = 0.05 it costs 895.
Read the left panel carefully, because it is easy to read wrongly. The apparent dimension rises steadily toward 2, and the temptation at that point is to announce that sticking probability changes the universality class of the whole thing. It almost certainly does not. What a low sticking probability introduces is a crossover length: below that length the growth is effectively compact, and above it the usual branching resumes as before. At 8,000 particles a cluster grown at p = 0.05 still sits largely inside its own compact regime, so the fitted exponent gets dragged toward 2 by the only part of the curve we can see. The later literature settles on an asymptotic dimension that never changes while the crossover scale slides. Ball, Bowler, Sander and Somfai put the strongest modern form of that argument, finding two-dimensional DLA consistent with a single fractal fixed point once one slow correction to scaling is removed [14]. Our own measurement cannot separate those two stories, because settling the matter would demand clusters large enough to get out past the crossover, and at p = 0.05 that lies far beyond what a laptop will do in ten minutes. We report the apparent exponent and label it apparent.
The Strongest Objection We Could Make
Here is the case against this study, put as well as the people who made it can put it.
Six clusters is a small sample and the spread across them is large. The cluster values run from 1.6515 to 1.7725, a range of 0.121, seven times our quoted standard error, and with six samples that standard error is itself estimated from five degrees of freedom and uncertain by roughly 30 percent. A critic could reasonably say that our headline agreement with 1.71 is the agreement of a noisy estimate with a target it happens to straddle, and that a different seed would have walked the same people to a different conclusion.
We take that seriously, and the convergence record is the only honest answer we have to it.
Objection one: six clusters is not a sample
The figure concedes one half of the objection and then refuses the other half of it outright. The gyration estimate really is still drifting at six clusters, and anyone quoting 1.6992 to four figures is overselling; but the objection assumed more clusters would fix things, and the box-counting curve shows why that assumption fails in general. Six clusters agreeing to within 0.005 on a value 0.068 away from the truth is not an argument for the value, and adding sixty more would narrow the band by another factor of three and leave the answer exactly as wrong as it already was.
The sharper form of the objection runs differently, and we think it correct: our error bars measure the scatter of repeated runs of one estimator, with one fixed fit window, on one lattice. They do not measure the window choice, which on its own moves the box answer by 0.06. They do not measure the finite-size correction, which Figure 3 shows to be still live at 50,000 particles. They do not measure the lattice, which section seven and the closing section argue is the largest term of all, larger than the other three put together. Three of our four sources of error carry no bar at all, and the only one that does carry a bar happens to be the smallest of them.
Objection two: the algorithm is too fast to be trusted
A fast algorithm returning the right answer is more dangerous than a slow one returning the wrong answer, because nobody checks it. Our long jumps replace thousands of single lattice steps with one hop, and they are exact only for a continuum walker; on a lattice they are an approximation. Were they biasing the growth even slightly, every single number printed anywhere in this article would have inherited that bias without anybody in the club noticing.
So we grew twelve clusters of 3,000 particles with the jumps switched on, then grew twelve more from the same twelve seeds with the jumps switched off entirely, so that every walker took every single step. Jumps on: D = 1.7109 ± 0.0153, mean radius of gyration 40.519, 341 lattice steps per particle; jumps off: D = 1.7360 ± 0.0194, mean radius of gyration 40.647, 1,050 lattice steps per particle. Paired cluster by cluster, the difference in D is −0.0251 ± 0.0262, which is 0.96 standard errors from zero, and the difference in mean radius is 0.31 percent.
No detectable bias. But the useful way to state a null result is as a resolution rather than as a proof, so: this control can see a shift of about 0.052 in D and cannot see anything smaller. Our quoted gyration error bar is 0.0172. A jump bias of 0.03 would sit inside the control's blind spot and outside our error bar at the same time, and we would never once know. The control rules out a large problem, not a small one.
An earlier version of this control used three clusters a side and returned a difference of −0.103, which is 2.9 combined standard errors, and we spent a day believing our accelerations were broken. They were not. Three clusters at 3,000 particles simply do not constrain a dimension well enough to compare two conditions, and a standard error estimated from three samples is itself so noisy that the ratio meant very little. Raising the control to twelve a side cost thirty seconds and changed the conclusion. We mention it here because the two-standard-error alarm from the underpowered version would have been entirely publishable as a cautionary finding, and it was simply wrong.
Where a different choice would have changed the answer
Five decisions in this study are load-bearing, and a reader wanting to know how far to trust the headline should look at those rather than at the error bars.
The lattice. The big one. We grew on a square lattice because it is simple to write and fast to run, and square-lattice DLA is known to develop four-fold anisotropy that strengthens with size and pulls the exponent down toward 5/3 [9][10]. Off-lattice growth does not do this, and the accepted 1.71 comes out of off-lattice work: Tolman and Meakin found 1.715 ± 0.004 from clusters of up to \(10^6\) particles [11], and Menshutin later grew a thousand clusters of \(5 \times 10^7\) particles each and argued that a single dimension governs all scales once the clusters are large enough [13]. Had we written the off-lattice version, our exponent would very likely have come out near 1.71 and stayed there, and this article would have carried a duller and more accurate conclusion.
The fit window for gyration. Fitting from 1,000 particles gives 1.6992, and fitting from 5,000 gives 1.6835, a gap of 0.0157 that matches the whole statistical error. No principled place exists to put the lower edge. Figure 3 shows the exponent still moving at the upper one. Ball, Bowler, Sander and Somfai showed that the approach to the asymptotic value in two-dimensional DLA is governed by one slow correction to scaling [14], and Somfai, Sander and Ball earlier estimated the correction exponent at −0.3 ± 0.1 [15], slow enough that 50,000 particles is nowhere near the asymptote.
The fit window for boxes. Moving it moves the answer by 0.06, against an error bar of 0.0015. We chose 4 to 64 because that is where the local slope runs flattest, a defensible criterion and also a criterion that selects for the answer being stable rather than for the answer being correct.
The stopping rule in the sticking sweep. Fixed particle count rather than fixed radius, the choice that makes low-p clusters look compact.
The jumps. Controlled above, and the control's resolution is 0.052.
Only the first of those has a published answer we can point at; the rest are ours, and every one of them moves the result by more than the number printed after the plus-or-minus sign.
Reproducing This
Everything in this article comes out of one file and one command. No data set exists to download, because no data exists at all: the numbers are generated by the program, and the program is deterministic given its seed.
cd analysis
python diffusion-limited-growth.py > diffusion-limited-growth-output.txt
Python 3.12.3 and NumPy 2.4.2 on an ordinary laptop, single-threaded. Total wall clock for the
run reported here was 365.1 seconds, a little over six minutes, of which about four and a
half minutes is the six production clusters. The master seed is 20250704, and every
cluster draws from its own stream spawned by numpy.random.SeedSequence(20250704), so
the ordering of the clusters does not affect their contents and the whole output file is
reproducible line for line. We reran it from a clean checkout before submitting this article and
compared the two output files: sections one through six and eight through nine matched character
for character, and the only differences were the wall-clock timings.
If your numbers differ from ours by more than the printed standard errors, then something somewhere is wrong, and the club would like very much to hear about it. The interactive model runs a smaller version of the same growth rule in your browser and reproduces the headline numbers on its default settings, so the fitted slope can be watched settling without anything being installed.
Validation summary, as printed
What the Coincidence Is Worth Now
Start with what held up, because something did: a rule containing no chemistry, no temperature, no surface tension and no particle size produces branched clusters whose mass scales as a non-integer power of their radius, and the power lands somewhere near 1.7. Real systems sharing almost nothing with one another return numbers in that same neighbourhood: zinc grown by electrodeposition in a thin cell measured 1.66 ± 0.03 [16], and Bacillus subtilis colonies on starved agar measured 1.716 ± 0.008 [17]. Those are not our measurements and we never inspected the photographs, but independent groups published them, and they bracket the model's value.
Now the part that got worse the longer we looked. Our two rulers disagree by three and a third standard errors on the same six clusters, one of them demonstrably biased low by an amount we measured on shapes whose dimension we already knew, the other still drifting with cluster size at 50,000 particles and showing no sign at all of settling. And when we pushed the gyration exponent out to the largest scales within reach, it landed on 0.600, the square lattice's signature rather than the growth process's.
So the honest summary is that we measured the dimension of our own program and recovered the number our program is known to give. A real result, and not the result the opening section was hoping for. The agreement between 1.699 and 1.71 was partly luck, because the gyration fit averaged over a window inside which the exponent slides from 1.82 down to 1.67, and the average happened to pass through 1.70 on its way past.
Which leaves the drawer of photographs roughly where it started, and here the club ended up divided. One reading: agreement to within a few percent between a model containing almost no physics and measurements on ice, metal and bacteria is a strong sign that the screening instability is what all three have in common, with the remaining physics left to set the prefactor. Halsey's Physics Today survey is written from inside that view and sets the model out as a general account of pattern formation [18]. The other reading: 1.66 and 1.72 and 1.70 are numbers between 1.5 and 2, dimensions estimated from photographs by box-counting-type methods carry exactly the biases we measured in section seven, and a family of estimators that all read low on known shapes will hand back agreeable numbers for a wide range of objects that are not really alike at all.
We cannot settle that from a laptop. What we can say is narrower and firmer than what we set out to say. The resemblance in the photographs survives one quantitative test, in the sense that the numbers land close together, and it fails the same test, in the sense that the closeness sits well inside the error we measured on the measuring technique itself. If somebody wants to know whether frost and a manganese dendrite are the same object, the limiting factor is not the model. The limiting factor is that nobody in this club has measured a real one, and the published numbers were made with rulers whose bias we now know how to estimate and whose bias the original papers never reported.
The next thing to build is the off-lattice version, and the thing to do after that is to point the calibrated box counter at an actual photograph of an actual window in February. We have the window.
References
- Witten, T. A. & Sander, L. M. (1981). Diffusion-limited aggregation, a kinetic critical phenomenon. Physical Review Letters 47, 1400–1403. doi:10.1103/PhysRevLett.47.1400
- Witten, T. A. & Sander, L. M. (1983). Diffusion-limited aggregation. Physical Review B 27, 5686–5697. doi:10.1103/PhysRevB.27.5686
- Niemeyer, L., Pietronero, L. & Wiesmann, H. J. (1984). Fractal dimension of dielectric breakdown. Physical Review Letters 52, 1033–1036. doi:10.1103/PhysRevLett.52.1033
- Brady, R. M. & Ball, R. C. (1984). Fractal growth of copper electrodeposits. Nature 309, 225–229. doi:10.1038/309225a0
- Chopard, B., Herrmann, H. J. & Vicsek, T. (1991). Structure and growth mechanism of mineral dendrites. Nature 353, 409–412. doi:10.1038/353409a0
- Nittmann, J. & Stanley, H. E. (1987). Non-deterministic approach to anisotropic growth patterns with continuously tunable morphology: the fractal properties of some real snowflakes. Journal of Physics A 20, L1185–L1191. doi:10.1088/0305-4470/20/17/010
- Kaandorp, J. A., Lowe, C. P., Frenkel, D. & Sloot, P. M. A. (1996). Effect of nutrient diffusion and flow on coral morphology. Physical Review Letters 77, 2328–2331. doi:10.1103/PhysRevLett.77.2328
- Theiler, J. (1990). Estimating fractal dimension. Journal of the Optical Society of America A 7, 1055–1073. doi:10.1364/JOSAA.7.001055
- Ball, R. C. & Brady, R. M. (1985). Large scale lattice effect in diffusion-limited aggregation. Journal of Physics A 18, L809–L813. doi:10.1088/0305-4470/18/13/014
- Meakin, P. (1986). Universality, nonuniversality, and the effects of anisotropy on diffusion-limited aggregation. Physical Review A 33, 3371–3382. doi:10.1103/PhysRevA.33.3371
- Tolman, S. & Meakin, P. (1989). Off-lattice and hypercubic-lattice models for diffusion-limited aggregation in dimensionalities 2–8. Physical Review A 40, 428–437. doi:10.1103/PhysRevA.40.428
- Meakin, P. (1983). Diffusion-controlled cluster formation in 2–6-dimensional space. Physical Review A 27, 1495–1507. doi:10.1103/PhysRevA.27.1495
- Menshutin, A. (2012). Scaling in the diffusion limited aggregation model. Physical Review Letters 108, 015501. doi:10.1103/PhysRevLett.108.015501
- Ball, R. C., Bowler, N. E., Sander, L. M. & Somfai, E. (2002). Off-lattice noise reduction and the ultimate scaling of diffusion-limited aggregation in two dimensions. Physical Review E 66, 026109. doi:10.1103/PhysRevE.66.026109
- Somfai, E., Sander, L. M. & Ball, R. C. (1999). Scaling and crossovers in diffusion limited aggregation. Physical Review Letters 83, 5523–5526. doi:10.1103/PhysRevLett.83.5523
- Matsushita, M., Sano, M., Hayakawa, Y., Honjo, H. & Sawada, Y. (1984). Fractal structures of zinc metal leaves grown by electrodeposition. Physical Review Letters 53, 286–289. doi:10.1103/PhysRevLett.53.286
- Fujikawa, H. & Matsushita, M. (1989). Fractal growth of Bacillus subtilis on agar plates. Journal of the Physical Society of Japan 58, 3875–3878. doi:10.1143/JPSJ.58.3875
- Halsey, T. C. (2000). Diffusion-limited aggregation: a model for pattern formation. Physics Today 53(11), 36–41. doi:10.1063/1.1333284
- Muthukumar, M. (1983). Mean-field theory for diffusion-limited cluster formation. Physical Review Letters 50, 839–842. doi:10.1103/PhysRevLett.50.839
- Tokuyama, M. & Kawasaki, K. (1984). Fractal dimensions for diffusion-limited aggregation. Physics Letters A 100, 337–340. doi:10.1016/0375-9601(84)91083-1