====================================================================================================================== WHY FROST, CORAL AND COPPER DEPOSITS ALL GROW THE SAME SHAPE Diffusion limited aggregation on a square lattice: two independent measurements of the fractal dimension Science Journaling Club, Volume 1 Issue 4, Summer 2025 ====================================================================================================================== Everything below is simulation output. No frost, no mineral, no metal and no organism was observed at any point in the production of this file. python version : 3.12.3 numpy version : 2.4.2 master seed : 20250704 generator : numpy PCG64, one independent stream per cluster spawned from SeedSequence(MASTER_SEED) lattice : square, 4 nearest neighbours production clusters : 6 x 50,000 particles, p_stick = 1 sticking sweep : 3 clusters x 8,000 particles at each of p = [1.0, 0.5, 0.2, 0.1, 0.05] jump control : 12 clusters x 3,000 particles, jumps on and jumps off accepted D (literature) : 1.71 mean-field (d^2+1)/(d+1) : 1.6667 (Muthukumar 1983; exactly 5/3) Growth rule: release on a circle of radius R_max + 5, nearest-neighbour random walk, freeze with probability p_stick on first contact with an occupied site. ====================================================================================================================== SECTION 1. GROWING THE PRODUCTION CLUSTERS (p_stick = 1) ====================================================================================================================== grid half-width : 807 lattice units (1615 x 1615 sites) Rg checkpoints : 70 log-spaced counts from 100 to 50000 cluster N Rg Rmax Rmax/Rg A4 lattice steps jumps reinject sec ---------------------------------------------------------------------------------------------------------------------- 1 50,000 215.851 402.523 1.865 0.7020 17,976,114 3,987,621 407,332 30.0 2 50,000 209.308 411.672 1.967 0.1333 17,705,742 4,241,004 410,136 28.3 3 50,000 214.347 449.111 2.095 0.5055 18,098,873 5,164,862 460,975 36.8 4 50,000 208.795 402.732 1.929 0.2995 17,925,893 3,838,942 403,084 30.7 5 50,000 213.497 424.124 1.987 0.3497 17,923,798 4,348,412 423,450 37.5 6 50,000 217.000 431.269 1.987 0.5065 18,004,873 4,509,924 435,144 49.1 ---------------------------------------------------------------------------------------------------------------------- A4 is the r^4-weighted mean of cos(4 theta): zero for an isotropic cluster, positive for a four-armed cross lined up with the lattice axes. Watch it in Section 2; it is the reason the exponent will not sit still. ====================================================================================================================== SECTION 2. METHOD A - RADIUS OF GYRATION SCALING ====================================================================================================================== Model: N = A * Rg^D, so ln Rg = (1/D) ln N + const. D is one over the slope. Fitting window: N from 1,000 to 50,000. cluster points slope 1/D D (Rg) fit SE R^2 D - 1.71 ---------------------------------------------------------------------------------------------------------------------- 1 44 0.59202 1.6891 0.0040 0.999768 -0.0209 2 44 0.56418 1.7725 0.0038 0.999808 +0.0625 3 44 0.58458 1.7106 0.0022 0.999934 +0.0006 4 44 0.59930 1.6686 0.0046 0.999677 -0.0414 5 44 0.58727 1.7028 0.0033 0.999847 -0.0072 6 44 0.60550 1.6515 0.0047 0.999662 -0.0585 ---------------------------------------------------------------------------------------------------------------------- mean 0.58851 1.6992 0.0172 (sem) -0.0108 D_Rg = 1.6992 +/- 0.0172 (mean and standard error of 6 independent clusters) spread of the 6 cluster values: 1.6515 to 1.7725 Within-cluster regression standard errors are printed above for completeness, but they are not the right error bar: the checkpoints along one growth history are heavily correlated, so the regression treats correlated points as independent and reports an error far too small. The cluster-to-cluster standard error is the one we quote everywhere else in this file. Local slopes of ln Rg against ln N, to show how stable the exponent is with N: N band mean local 1/D implied D sd of D over clusters ---------------------------------------------------------------------------------------------------------------------- 100 to 300 0.55192 1.8119 0.1372 300 to 1,000 0.54824 1.8240 0.0866 1,000 to 3,000 0.59307 1.6861 0.0586 3,000 to 10,000 0.57504 1.7390 0.0609 10,000 to 30,000 0.60007 1.6665 0.0457 30,000 to 50,000 0.59923 1.6688 0.0318 ---------------------------------------------------------------------------------------------------------------------- The exponent is not constant. It falls as the cluster grows, and it is still falling at N = 50,000. So we also quote the fit restricted to the last decade: D_Rg over N = 1,000 to 50,000 : 1.6992 +/- 0.0172 D_Rg over N = 5,000 to 50,000 : 1.6835 +/- 0.0181 difference between the two windows : +0.0157, which is 0.6 combined standard errors The choice of window moves the answer by more than the statistical error bar. That is a systematic, and it is larger than the thing we are trying to measure to. We print both and we do not pick the flattering one. Four-fold anisotropy against cluster size, averaged over the six clusters: (A4 = r^4-weighted ; 0 means isotropic, larger means more cross-like) N mean A4 sd ---------------------------------------------------------------------------------------------------------------------- 200 0.0414 0.2075 500 0.0925 0.0692 1,000 0.1341 0.1634 2,000 0.2616 0.1908 5,000 0.3058 0.1437 10,000 0.2970 0.0898 20,000 0.3658 0.0980 50,000 0.4161 0.1979 ---------------------------------------------------------------------------------------------------------------------- A four-armed cross lined up with the lattice axes has A4 > 0. A square lattice hands the growth a preferred set of directions, the tips that happen to point along them screen the rest more effectively, and the effect compounds. This is the leading candidate for why our exponent drifts downward with size. ====================================================================================================================== SECTION 3. METHOD B - BOX COUNTING ====================================================================================================================== Box sizes (lattice units): [1, 2, 3, 4, 6, 8, 12, 16, 24, 32, 48, 64, 96, 128, 192, 256] Grid offsets averaged per box size: 8 Fitting window: eps from 4 to 64 lattice units. Mean occupied-box count N(eps), averaged over the 6 clusters: eps N(eps) local slope implied D in window ---------------------------------------------------------------------------------------------------------------------- 1 50,000.0 -1.2845 1.2845 2 20,525.9 -1.4394 1.4394 3 11,450.6 -1.5111 1.5111 4 7,413.7 -1.5634 1.5634 yes 6 3,933.1 -1.5982 1.5982 yes 8 2,483.5 -1.6254 1.6254 yes 12 1,284.8 -1.6462 1.6462 yes 16 800.1 -1.6648 1.6648 yes 24 407.4 -1.6772 1.6772 yes 32 251.5 -1.6746 1.6746 yes 48 127.5 -1.6325 1.6325 yes 64 79.7 -1.5992 1.5992 96 41.7 -1.5099 1.5099 128 27.0 -1.4634 1.4634 192 14.9 -1.3397 1.3397 256 10.1 ---------------------------------------------------------------------------------------------------------------------- cluster points slope D (box) fit SE R^2 D - 1.71 ---------------------------------------------------------------------------------------------------------------------- 1 9 -1.64779 1.6478 0.0087 0.999807 -0.0622 2 9 -1.64044 1.6404 0.0056 0.999919 -0.0696 3 9 -1.63973 1.6397 0.0070 0.999872 -0.0703 4 9 -1.64307 1.6431 0.0074 0.999858 -0.0669 5 9 -1.64312 1.6431 0.0058 0.999914 -0.0669 6 9 -1.63756 1.6376 0.0072 0.999864 -0.0724 ---------------------------------------------------------------------------------------------------------------------- mean -1.64195 1.6420 0.0015 (sem) -0.0680 D_box = 1.6420 +/- 0.0015 (mean and standard error of 6 independent clusters) spread of the 6 cluster values: 1.6376 to 1.6478 Window sensitivity for box counting. The same six clusters, refitted over different ranges of eps: eps window points D (box) sem ---------------------------------------------------------------------------------------------------------------------- 1 to 16 8 1.5061 0.0013 2 to 32 9 1.5957 0.0013 4 to 64 9 1.6420 0.0015 <- quoted 8 to 128 9 1.6422 0.0034 16 to 256 9 1.5864 0.0046 2 to 64 11 1.6147 0.0013 4 to 128 11 1.6358 0.0024 1 to 256 16 1.5830 0.0018 ---------------------------------------------------------------------------------------------------------------------- ====================================================================================================================== SECTION 4. CALIBRATING THE BOX COUNTER ON SHAPES WHOSE DIMENSION IS KNOWN ====================================================================================================================== Before trusting a box-counting number on an object whose dimension we do not know, run the same code, with the same box sizes and the same fitting window, on three objects whose dimension is known exactly. Any bias it shows there is a bias it is also carrying on the DLA clusters. object points extent exact D box D bias R^2 ---------------------------------------------------------------------------------------------------------------------- Sierpinski gasket, gen 10 59,049 1,023 1.5850 1.5438 -0.0411 0.999656 Sierpinski carpet, gen 5 32,768 242 1.8928 1.7549 -0.1379 0.999284 filled disc, radius 126 49,861 252 2.0000 1.8220 -0.1780 0.998825 ---------------------------------------------------------------------------------------------------------------------- mean bias of the box counter over the three calibration objects: -0.1190 Every one of them comes out low. Box counting in a window of a decade and a half, on a lattice, with an outer cutoff at the size of the object, undercounts the exponent. This is a property of the estimator, not of the object. ====================================================================================================================== SECTION 5. DO THE TWO METHODS AGREE, AND DO THEY MATCH 1.71? ====================================================================================================================== accepted value D_acc = 1.7100 mean-field formula (d^2+1)/(d+1) = 1.6667 (= 5/3) club, radius of gyration D_Rg = 1.6992 +/- 0.0172 club, box counting D_box = 1.6420 +/- 0.0015 D_Rg - D_acc = -0.0108 = -0.63 of our own standard errors D_box - D_acc = -0.0680 = -46.87 of our own standard errors D_Rg - D_box = +0.0572 = +3.33 combined standard errors (unpaired) paired, cluster by cluster: mean difference +0.0572 +/- 0.0172, z = +3.32 D_Rg - mean field = +0.0325 = +1.9 standard errors D_Rg (last decade) - mean field = +0.0168 = +0.9 standard errors D_Rg: consistent with the accepted value D_box: NOT consistent with the accepted value at this precision the two methods DISAGREE with each other: 3.32 standard errors apart, paired INVESTIGATION, because the two numbers do not sit on top of each other. 1. The two estimators are not looking at the same scales. The radius of gyration fit spans cluster radii from about 6 to 216 lattice units; the box-counting fit spans eps = 4 to 64. The exponent is not constant across scales, so measuring it in two different windows and then demanding the same answer is asking for something the object does not have. 2. The box counter is biased low, and we measured the bias directly in Section 4: -0.1190 averaged over three shapes with exactly known dimension, in the same window with the same code. Applying that correction: D_box corrected = 1.6420 - (-0.1190) = 1.7610 against D_acc = 1.7100, difference +0.0510 against D_Rg = 1.6992, difference +0.0618 The correction is a rough one. It is the mean of three shapes with different dimensions and different lacunarity, and the bias is not a constant offset. We show it to establish the sign and the order of magnitude, not to claim a corrected measurement. 3. The radius of gyration fit over its last decade alone gives D_Rg (N from 5,000) = 1.6835 +/- 0.0181, which is -1.5 SE from 1.71 and which is BELOW the accepted value, not above it. Both of our estimators, read at the largest scales they can reach, come out low. 4. The clusters are anisotropic and getting more so (Section 2). Square-lattice DLA is not the same object as off-lattice DLA at these sizes, and 1.71 is an off-lattice number. Note on what these error bars do and do not cover. They are the scatter of repeated runs of the same estimator on the same model with the same fitting window. They do not cover the systematic error from choosing the window, which the window table in Section 3 shows is larger than the statistical error for box counting, nor the finite-size correction to scaling, which Section 2's local slopes show is still moving at N = 50,000. ====================================================================================================================== SECTION 6. STICKING PROBABILITY BELOW ONE ====================================================================================================================== A walker that refuses to stick on first contact keeps walking, so it can work its way into a fjord that a p = 1 walker would have sealed off. The cluster fills in. Each row: 3 independent clusters of 8,000 particles. Fit window for D: N from 1,000 to 8,000. p_stick clusters mean Rg mean Rmax D (Rg) sem D (box) sem steps/particle sec ---------------------------------------------------------------------------------------------------------------------- 1.00 3 72.95 135.14 1.7006 0.0259 1.5764 0.0105 353 18.5 0.50 3 64.63 120.51 1.7110 0.0299 1.5963 0.0073 390 18.7 0.20 3 52.30 99.18 1.8088 0.0340 1.6172 0.0011 498 22.4 0.10 3 46.34 91.97 1.8640 0.0149 1.6251 0.0063 652 19.8 0.05 3 41.15 74.08 1.9595 0.0171 1.6369 0.0049 895 25.4 ---------------------------------------------------------------------------------------------------------------------- From p = 1.00 to p = 0.05 at fixed N = 8,000: apparent D (Rg) moves 1.7006 -> 1.9595, a change of +0.2589, which is 8.4 combined standard errors mean Rg moves 73.0 -> 41.2 lattice units, a contraction of 43.6% walk cost moves 353 -> 895 lattice steps per particle Read this as an APPARENT dimension at a fixed cluster size, not as a new universality class. Lowering p_stick introduces a crossover length: below it growth is compact, above it the usual DLA branching resumes. At N = 8,000 a low-p cluster is still largely inside its own compact regime, so the fitted exponent is pulled toward 2. The literature position is that the asymptotic dimension is unchanged and only the crossover scale moves. ====================================================================================================================== SECTION 7. CONTROL - HOW MUCH DO THE FREE-SPACE JUMPS COST US? ====================================================================================================================== The jumps replace a lattice walk with a continuum first-passage step of length 8, 32 or 128. If that approximation biased the growth, the dimension would move. So we grow 12 clusters of 3,000 particles each way, from the same 12 seeds, and compare paired cluster by cluster. jumps ON: D = 1.7109 +/- 0.0153 mean Rg = 40.519 341 lattice steps/particle 14.0 s jumps OFF: D = 1.7360 +/- 0.0194 mean Rg = 40.647 1,050 lattice steps/particle 29.9 s difference in D, unpaired: -0.0251, which is -1.02 combined standard errors. difference in D, paired : -0.0251 +/- 0.0262, which is -0.96 standard errors. difference in mean Rg: -0.31% speed-up from the jumps: 3x fewer lattice steps per particle No detectable bias from the jump approximation at 12 clusters a side. The control resolves a shift of about 0.052 in D; anything smaller than that is invisible to us, so this is a bound and not a proof of zero. ====================================================================================================================== SECTION 8. CONVERGENCE AS CLUSTERS ACCUMULATE ====================================================================================================================== Running mean and running standard error of both estimators as each new production cluster is added. This is the Monte Carlo convergence check. clusters D_Rg running sem D_box running sem |D_Rg - 1.71| / sem ---------------------------------------------------------------------------------------------------------------------- 1 1.6891 nan 1.6478 nan nan 2 1.7308 0.0417 1.6441 0.0037 0.50 3 1.7241 0.0250 1.6427 0.0026 0.56 4 1.7102 0.0225 1.6428 0.0018 0.01 5 1.7087 0.0175 1.6428 0.0014 0.07 6 1.6992 0.0172 1.6420 0.0015 0.63 ---------------------------------------------------------------------------------------------------------------------- ====================================================================================================================== SECTION 9. VALIDATION SUMMARY ====================================================================================================================== quantity club value reference difference in our SE ---------------------------------------------------------------------------------------------------------------------- D, radius of gyration 1.6992 +/- 0.0172 1.7100 -0.0108 -0.63 D, box counting 1.6420 +/- 0.0015 1.7100 -0.0680 -46.87 D_Rg minus D_box (paired) +0.0572 +/- 0.0172 0.0000 +0.0572 +3.32 D_Rg vs mean-field 5/3 1.6992 +/- 0.0172 1.6667 +0.0325 +1.90 D, Rg, last decade only 1.6835 +/- 0.0181 1.7100 -0.0265 -1.47 D, box, calibration-corrected 1.7610 1.7100 +0.0510 +35.11 jump bias control, paired -0.0251 +/- 0.0262 0.0000 -0.0251 -0.96 ---------------------------------------------------------------------------------------------------------------------- radius of gyration within 3 SE of 1.71 : PASS box counting within 3 SE of 1.71 : FAIL two methods agree within 2 SE (paired) : FAIL no detectable jump bias : PASS The two methods do not agree. That disagreement is a real feature of the measurement, not a coding error, and Section 3's window table is where to look: box counting on a cluster whose radius is only a few hundred lattice units has at most a decade and a half of usable scales, and the fitted exponent moves by more than its own statistical error when the window moves. We report both numbers and the gap between them rather than picking one. total wall clock: 365.1 s ====================================================================================================================== END OF OUTPUT ======================================================================================================================