A routine for the determination of the microstructure of stacking-faulted nickel cobalt aluminium hydroxide precursors for lithium nickel cobalt aluminium oxide battery materials

Stacking faults and interstratification faults in a cobalt- and aluminium-bearing nickel layered double hydroxide used as a precursor for Li(Ni1−x−yCoxAly)O2 battery materials were quantified by a combination of a grid-search approach and a recursive routine for generating and averaging supercells of stacking-faulted layered substances implemented in the TOPAS software.


Figure S6
Illustration of a C19-type fault in the C6-type stacking that induces a subsequent intercalation.

Table S1
Applied transition probability matrices in the 3-dimensional final grid search (top) (Figure 7, c) and in the one-dimensional grid search for ppref (bottom) (Figure 9, b). The stacking vectors are given in Figure 6. A, B, C, D, E, F refer to brucite-type layers, G refers to intercalation layers. Layers D, E and F had to be added as the c-component of the stacking vector cannot be varied within a row of the transition probability matrix in the TOPAS syntax.

S2.1. One-dimensional grid-search
In order to perform a grid-search optimization in any parameter space, a TOPAS input-file has to be executed many times. This can be realized by the "num-runs" command (Table S2). The parameters, which should be optimized, are varied from one run to another by an incremental value. By including "##Run_Number##" into the syntax the run number is used as running index that increases from one run to the next one, as it is suggested for performing a series of simulations (Dinnebier et al., 2019). For a one dimensional grid search, the input file was executed 101 times, starting with run number 0 and ending with run number 100. The actual run number divided by 100 was used as parameter value for Px. Hence, in the one dimensional grid search, Px was varied from 0.00 to 1.00 in 0.01 increments (Table S2). With a conventional PC or notebook, the one-dimensional grid search of the NCA-precursor samples takes approx. 40-50 minutes.

Table S2
Selected commands in TOPAS syntax that were used to perform a one-dimensional grid search in the parameter space of the transition probabilities.

num_runs 101
The input file is executed 101 times, i.e .101 grid points are investigated. The run number is used as a running index, starting at 0, from one run to the next one the parameter Px is increased by 0.01, which lead to Px = 1 in the last run.
out "grid-1D.txt" append Out(Get(r_wp),\t%11.5f) Out(px, "\t%11.5f\n") The Rwp value and the parameter value of Px are stored in a separate ASCII file, as the INP-file is not modified and not OUT file is created when "num_runs" is used

S2.2. Two-dimensional grid-search
In a two dimensional grid search, two parameters: Px and Py are optimized simultaneously, i.e. a grid has to be created that contains all points from Px = 0.01 to Px = 1.00 and Py = 0.00 to Py = 1.00. If the parameters are varied in 0.01 increments, this grid will contain 10099 points (excluding Px = 1.00, Py = 0).
In order to search all points, this grid is subdivided into 101 rows with each row containing 100 points (Table S3). Within a row Px is varied from 1.00 to 0.00 in 0.01 increments and Py is kept constant. When the grid search is completed in one row, i.e. Px = 0.00, another row is started, which means that Py is increased by 0.01 and Px switches back to 0.99. By using the "Round" command the grid is divided into 101 rows ("rownumber", Table S3 ) consisting of 100 points. In addition, the "Round" command provides integer value for the "rownumber" running index that is increased by 1 after 100 runs. With a conventional PC or notebook, the two-dimensional grid search of the NCA-precursor samples took between (7 and 8) hours.

Table S3
Selected commands in TOPAS syntax that were used to perform a two-dimensional grid search in the parameter space of the transition probabilities.
prm rownumber = Round((##Run_Number##-49)/100); The running index parameter "rownumber" is created that is in dependence on the Run_Number index. The round command provides an integer value for this parameter. The rownumber is increased by 1 after 100 runs. This provides a subdivision of the 10099 runs into 101 sets with 100 runs each.
prm !py = rownumber/100; The transition probability Py is varied from 0.00 to 1.00 in 0.01 increments. Within a set of 100 runs, Py is kept constant.

S2.3. Three-dimensional grid-search
Extending a two-dimensional grid to a three-dimensional one in order to optimize both Px, Py and Pcar requires both a further subdivision of the running index and an increase of the total number of runs. As a full three dimensional grid search with all parameters varying from 0.00 to 0.99 in 0.01 increments contains 100x100x100 = 10000000 points and will take several weeks on a conventional PC or notebook, the grid search was limited to an excerpt of 0.10 ≤ Px ≤ 0.24, 0.00 ≤ Py ≤ 0.19, 0.04 ≤ Pcar ≤ 0.09 in which the global minimum was expected based on the two dimensional grid search and which only contains The running index parameter "row" is created that is always increased out "grid-2D.txt" append Out(Get(r_wp),\t%11.5f") Out(px, "\t%11.5f") Out(py, "\t%11.5f") Out(pcar, "\t%11.5f\n") The Rwp value and the parameter values of Px, Py and Pcar are stored in a separate ASCII file