Supplemental Material for: Not just fractal surfaces, but surface

Supplemental Material
for:
Not just fractal surfaces, but surface fractal aggregates: derivation of the expression for
the structure factor and its applications.
R. Besselink1,a),b), T. M. Stawski1,2,a),b), A. E. S. van Driessche3,4, L. G. Benning1,2
1
German Research Centre for Geosciences, GFZ, 14473, Potsdam, Germany
Cohen Geochemsitry, School of Earth and Environment, University of Leeds, LS2 9JT,
Leeds, UK
3
CNRS, ISTerre, F-38041 Grenoble, France
4
Université Grenoble Alpes, ISTerre, F-38041 Grenoble, France
2
a)
b)
Corresponding authors: [email protected], [email protected]
The manuscript was written through equal contributions of RB and TMS, who share the 1 st authorship.
1
S1. Generation of a brick-in-a-wall von Koch-type contour fractal
Here, we describe the algorithm that we used to generate the von Koch-type contour fractal
composed of quadrilateral primary units (particles) as we consider in Fig. 5 in the main text.
We do this because, it is not immediately obvious by just looking at Fig. 5 that the contour
fractal was generated in a top-down approach through elimination and re-attachment of
primary units, rather than by building up an assembly of primary particles. The formation of
the contour fractal can be divided into three separate steps: (1) generation of a contour fractal
framework of slots, i.e., regional subsections from which each potentially contains a single
brick, (2) generation of a randomized grid, and (3) placing bricks within the coordinates of the
randomized grid, which only include the coordinates from occupied slot indices of the
generated contour fractal framework. These three steps are followed by the generation of
reciprocal space image of the fractal aggregate in step (4).
1.
Generation of a contour fractal framework of slots
To illustrate the procedure, we started with a perfectly smooth square-shaped matrix
composed of 16 x 16 square-shaped empty slots (Fig. S1A). Every single slot represented an
area that might be occupied by a single brick with an electron density higher than the
surrounding environment outside the aggregate (“solvent”). The number of slots within the
matrix is just an example that depends on the total number of iteration levels. The original
size and the roughening procedure however, dictates the maximum possible number of
consequent iteration levels within the fractal build-up. This is level 0.
Roughening procedure: The procedure was initiated with a square shaped particle that had
four straight edges. For this type of contour fractal (eight-segment-von Koch-curve1) every
edge was subdivided into 4 line-segments (Fig. S1B). These four segments were aligned in
the same direction and the line they formed could be considered as a one-dimensional walk
2
path. This straight line composed of four segments (pointing upwards) was our smooth
starting condition. Subsequently, the line was roughened by making a detour: one step up
(step 1), one left (step 2), one up (step 3), two times right (steps 4, and 5), one up (step 6) one
left (step 7) and one up (step 8). Consequently, 4 steps along the same direction, were
replaced by 8 steps in various directions. This way a straight line was converted into a
roughened line.
Next, let us imagine that the line was a border between a low-electron-density-area
(e.g., “solvent”) on the left-hand side (Fig. S1B, white colour), and a high-electron-densityarea filled up with particles on the right-hand side (Fig. S1B, orange colour). After
roughening the contour line, matter was “reshuffled” in such a way that all high-density areas
were placed on the right-hand side of the walk line, while the low-density area were placed on
the left-hand side of the walk line. Consequently, in step 2 a new block of high density orange
matter was placed on the right-hand side and in step 5 an orange block was removed from the
left-hand side of the walk line. The size of these blocks depends on the iteration level.
For a contour fractal with 2 iteration levels, the surface thus becomes roughened at two
length-scales. Firstly, level 1 iteration, where the initial red square of 16 x 16 slots was
roughened by “reshuffling” block of 4 x 4 slots (blue lines and squares in Fig. S1C).
Secondly, level 2 iteration, where the roughened assembly is shown in blue, was further
roughened by “shuffling” blocks of a single slot (green lines and squares in Fig S1C). The
roughening procedure was repeated for all edges of the original 16 x 16 matrix. We had the
option to repeat the same surface fractal pattern along every edge. We increased the number
of primary particles within the aggregate, while limiting the increase in the number of primary
particles at the very contour. This allowed us to build a fractal aggregate with a smaller
number of edges at the outer contour (Fig. 5H in the main text). For practical reasons the
iteration levels were not separated by separate loops in the source code. Instead, the procedure
3
started roughening at the highest iteration level (smallest step size of one slot). Once, it had
passed all the 8 roughening stages, it went one stage further in a one level lower iteration (4
times higher step size). This approach allowed us to scale up the procedure to a higher number
of iteration levels, since the stages of several iteration levels can be stored in a nti-digit
octagonal number, where nti represents the total number of iteration levels. Consequently, the
script walked through various stages of several iteration levels counting with a nti-digit
octagonal number, where the first and last digit represented the lowest and highest iteration
level respectively.
The roughening procedure(s) can be used for any number of sub-levels within the fractal
aggregate. So for instance, for a 64 x 64 matrix, we would have 4 pieces of 16 x 16 blocks,
which we could divide into 16 pieces of 4 x 4 sub-blocks, and these into 64 pieces 1 x 1 subsub-blocks. Hence, we could apply up to 4 levels of roughening. Importantly, a fractal by
definition is characterized by the fact that a particular contour pattern at a shorter length-scale
(higher level) is repeated at longer length-scales (lower level), which makes the contour line
self-similar at different length-scales. The fractal dimension of the roughened contour line
should obey the relation:1
nL1r = nL1DL
(S1)
, where DL represents the contour line fractal dimension, and nL1 and nL1r represent the
number of contour line steps of the flat and roughened edge respectively. In our case DL =
lognL1(nL1r) = log4(8) = 1.5.
4
2.
Generation of a randomized grid
With this procedure we calculated the coordinates of a randomized grid. This grid defined the
boundary positions in between which the quadrilaterals were placed. First, we calculated the
coordinates of a grid with a regular spacing between the 20 pixels we used in our simulations.
From the regular coordinates, a randomized grid was calculated by a randomized shift within
a predefined range in both the vertical and the horizontal direction. This is illustrated in Fig.
S1D, where the purple, green and orange lines represent a regular grid, a randomized shift and
a randomized grid, respectively. Each slot is surrounded by 4 interconnected grid positions
and the randomized grid surrounds an area of 4 x 4 slots. For every slot we defined an inner
grid (as marked by the indices expressed as Roman numerals in Fig. S1E). These represent the
vertices of the quadrilateral brick inside a slot. The inner grid positions were generated by a
randomized shift in both the vertical and the horizontal direction from the outer grid positions
as illustrated in Fig. S1E.
3.
Placing the occupied slots within the randomized grid
For every slot we randomized the inner grid positions that defined the vertices of a
quadrilateral brick. Subsequently, the pixels that fall inside the boundary coordinates, which
were defined by these four vertices, can be filled up with high-density matter. When filling up
all quadrilaterals of a grid we obtained an image as illustrated in Fig. S1F. Please note that the
bricks in Fig. S1F were indexed similarly as the slots in Fig. S1C and both were composed of
26 x 26 slots, which included 1 level 0 block (16 slots), 2 level 1 blocks (2x4 slots) and 2 level
2 (2x1 slots) along both axis. In the final stage, we loaded only the randomized coordinates of
the quadrilaterals for which the corresponding slots were occupied (as in Fig. S1C). By doing
so we obtained a “brick-in-a-wall” contour fractal aggregate as shown in Fig. S1G.
5
Using the above algorithm, written in GNU Octave 4.0.1,2 we generated matrices representing
the real-space density functions of fractal aggregates. The low-density matter was filled with
“0” (the voids in between the particles and outside of the aggregate) and the high-density
matter with “1” (the primary particles).
4.
Further processing
To represent the contour fractal aggregates made up of variable numbers of primary particles
at their surfaces, we varied the number of roughening levels for the same size of the original
256 x 256 matrix. The real-space density functions were converted to reciprocal space
amplitude functions through a discrete Fourier transform. The transformation integrals were
parameterized as matrix products in Octave and a Blackman-Harris apodization function3 was
used to supress window size artefacts. The 2D intensity function was described by the square
of modulus of the amplitude function.4 The azimuthal average was calculated by the
following procedure:
Pixels were arranged in a single column vector and sorted based on their radial distance in
pixel index number with respect to the centre of the intensity matrix. For every pixel, a floor
(rounded down) and ceiling (rounded up) radial integer index value was determined and for
every pixel a weighting factor to which the pixel contributed to both floor and ceiling indices
was calculated. This weighting factor was determined by linear weighting of the pixel
position with respect to the floor and ceiling indices. For example, a pixel that was located at
x = 5 and y = 7 positions, had a radial index of (52 + 72)1/2 = 8.6 and a floor and ceiling radial
index of 8 and 9, respectively. Subsequently, we applied linear weighting and the value
contributed in (9-8.6)·100% = 40% to the floor integer index of 8 and contributed in (8.68)·100% = 60% to the ceiling integer index of 9. This approach was parameterized to a large
6
extent, since most calculations; such as the calculation of weighting factors were expressed as
element-wise vector calculations, which speed up the calculation rate. A histogram function
was used to determine the number of elements for every unique floor index value.
Consequently, these values were used to look up the intensity and weighting values for all the
floored and ceiling indices. This allowed us to summarize the weighted intensities within a
single iteration.
7
Figure S1. Generation of a brick-in-a-wall von Koch-type surface fractal aggregate of square-shaped primary
particles. A) Representation of “level 0” starting aggregate composed of 16 x 16 slots (level 0), with 16 blocks of
4 x 4 slots (level 1), and 16 sub-blocks of 1 x 1 slots (level 2); B) Roughening procedure, which transforms a 4-
8
segmented smooth contour walk into a 8-segmented roughened contour walk. This procedure is applicable at the
length-scales of blocks, sub-blocks etc. all the way down to the 1 x 1 slots; C) A generated brick-in-a-wall
surface fractal framework of slots based on A) with 2 iteration levels; D) a randomized grid (orange lines)
generated by a randomized shift (green lines) from a regular grid (purple lines); E) A quadrilateral brick (black)
obtained by a randomized shift (blue lines) within randomized outer grid vertices, F) A completely filled grid of
26x26 randomized quadrilateral bricks; G) Selection of quadrilateral bricks whose slots are occupied within the
generated contour fractal framework as shown in C.
REFERENCES
1
B. Mandelbrot, in Fractal Geom. Nat., edited by B. Mandelbrot, 2nd ed. (W. H. Freeman
and Co., New York, 1982), pp. 34–57.
2
J.W. Eaton, D. Bateman, S. Hauberg, and R. Wehbring, (2016).
3
H. Qian, R. Zhao, and T. Chen, IEEE Trans. Power Deliv. 22, 1064 (2007).
4
G. Porod, in Small Angle X-Ray Scatt., edited by O. Glatter and O. Kratky (Academic Press
London LTD, New York, 1982), pp. 17–51.
9