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
© Copyright 2024 Paperzz