# OptiMic: A tool to generate optimized polycrystalline microstructures for
materials simulations

P. H. Serrao  S. Sandfeld  A. Prakash<EMAIL_ADDRESS>Micromechanical Materials Modelling (MiMM),
Institute of Mechanics and Fluid Dynamcis,
TU Bergakademie Freiberg, Lampadiusstraße 4, 09599 Freiberg, Germany
Institute for Advanced Simulation – IAS-9: Materials Data Science and
Informatics,
Forschungszentrum Juelich GmbH, 52425 Juelich, Germany  Chair of Materials
Data Science and Materials Informatics,
Faculty 5 – Georesources and Materials Engineering,
RWTH Aachen University, 52056 Aachen, Germany

###### Abstract

Polycrystal microstructures, with their distinct physical, chemical,
structural and topological entities, play an important role in determining the
effective properties of materials. Particularly for computational studies, the
well-known Voronoi tessellation technique is regularly used for obtaining
microstructures. Standard Voronoi tessellations, however, exhibit statistics
that are generally far removed from those in real microstructures.
Nevertheless, such tessellations can be optimized to obtain certain key
features and statistics seen in real microstructures. In this work, we develop
the open-source software package OptiMic that enables the generation of
optimized microstructures for both finite element as well as atomistic
simulations. OptiMic allows for both monodispersive grains as well as
irregular grains obtained currently via Voronoi tessellations. These initial
microstructures can then be optimized to reflect desired statistical features.
A key feature of the tool is that it gives the user extensive control on the
optimization process via customizable cost functions. The software currently
performs tessellations with the Voronoi method and can be easily extended to
include other methods like grain-growth, phase-field etc.

###### keywords:

Optimized microstructure , Crystal plasticity , Custom cost function ,
Atomistic simulation , Finite element meshing , Finite Element Method (FEM)

###### MSC:

[2010] 82-08

††journal: SoftwareX

## Code metadata

Nr. |  Code metadata description |
---|---|---
C1 |  Current code version |  2.0
C2 |  Permanent link to code/repository used for this code version |  OptiMic code repository [1]
C3 |  Code Ocean compute capsule |  $NA$
C4 |  Legal Code License |  GNU GPLv3
C5 |  Code versioning system used |  git
C6 |  Software code languages, tools, and services used |  Python, Gmsh, nanoSCULPT, Ovito
C7 |  Compilation requirements, operating environments & dependencies |  Numpy, Scipy, Matplotlib, Numba, Pytest, Numpy-quaternion, Tess, Click, gmsh-sdk, Yappi
C8 |  If available Link to developer documentation/manual |  OptiMic- Wiki [2]
C9 |  Support email for questions |<EMAIL_ADDRESS>
Table 1: Code metadata

##  1 Introduction

Computer simulations have now become an integral part of studies on material
behavior. Simulations are increasingly being used over the entire length scale
to investigate and explain various phenomena [3, 4]. Particularly in studies
dealing with the deformation behavior, multiscale simulation techniques are
being regularly used to describe, for example, the thermo-mechanical response
of a body subjected to various complex initial and boundary conditions [5].
Notwithstanding the underlying model used to describe the physics of the
material as authentically as possible, the predictive power of such
simulations depends on two further factors [6]: i) the reproduction of the
real-world boundary conditions in the simulated model, and ii) the inclusion
of all relevant statistical and topological information in the underlying
microstructure so as to accurately describe the effective material behavior.

The microstructure that we refer to is, at the most fundamental level,
comprised of individual cells called grains. Each grain is characterized by a
distinct orientation, size and shape [7]. The microstructure is made up of
further topological entities of varying dimensions: zero-dimensional (0-D)
entities called vertex or quadruple points (0-D) are formed at the contact
point of four or more grains, one-dimensional (1-D) entities called triple
junctions (TJs) or lines (1-D) are formed at the intersection of three or more
grains, and two-dimensional (2-D) entities called grain boundaries (GBs) are
the interfaces between two grains [8, 9]. Further entities include textural
characteristics like orientation of individual grains, mis-(dis)orientation
and orientation relationship between grains. Both structural and textural
characteristics can significantly influence GB properties, topology and
network, and thus affect the overall anisotropic response of the polycrystal.

It hence follows that inclusion of microstructure in simulations refers not
only to the packing of cells, but also to the inclusion of relevant
statistical information on further topological entities. Four kinds of models
are generally used to describe the microstructure [10, 11]: a) Monodispersive
grain size models (e.g., [12, 13, 14], where all grains have the same shape
like hexagons or cubes; b) Voronoi based tessellations (e.g., [15, 16]), c)
microstructures obtained from physics based models of grain-growth, like e.g.
phase-field, vertex grain growth, Potts monte carlo etc. [7, 17, 18, 19], and
d) digitization of realistic microstructures via e.g. serial sectioning [20,
21].

Of these, the usage of Voronoi based microstructures is almost ubiquitous in
both finite element as well as atomistic simulations, due to the relative ease
in generating such structures. Although the grains obtained by Voronoi
tessellations look similar to those seen in experimental micrographs, closer
quantitative analysis shows that many topological and statistical properties
are quite removed from those observed in real microstructures [10, 19].
Nonetheless, some microstructural statistics can be tailored by using
optimization algorithms so as to obtain optimal initial structures for further
simulations. This is done by minimizing a cost function, which penalizes any
deviation of the desired statistic from the target distribution.

In this work, we develop a software tool called OptiMic that generates
optimized microstructures for both finite element as well as atomistic
simulations. The tool generates both mono-dispersive as well as Voronoi
tessellations, and allows for the optimization of desired statistics so as to
reflect probability distributions as specified by the user. The software
computes a variety of statistical information than can be used for the
optimization process. OptiMic is a part of growing ecosystem of tools, e.g.
Neper [22], Kanapy [23], dream3d [24], MicroStructPy [25] that enable the
generation of optimal microstructures mainly for finite element simulations. A
key feature of OptiMic is that it gives the user extensive control on the
optimization via customizable cost functions, which can in turn be used to
treat specific microstructural features. Additionally, the modular approach
used in the development allows an easy extension of the code for further
tessellation methods like vertex grain growth, phase field etc.

##  2 Software description

Generation of a microstructure with OptiMic involves the following steps:

  * 1.

Generate seeds/grain centers in a user defined simulation box

  * 2.

Tessellate simulation box via the Voronoi method using seed positions
generated previously

  * 3.

Construct cost function using desired metric

  * 4.

Optimize microstructure by moving the position of seeds

  * 5.

Write out seed coordinates, structural and textural statistics, and other
relevant information

  * 6.

Generate finite element mesh

  * 7.

Output surface mesh in VTK [26] and OBJ [27, 28] file format for generation of
atomistic structures and for further processing

The initial step in the generation of the desired microstructure is to
tessellate the simulation box with a pre-defined number of seeds or grain
centers, which are either placed at regular intervals or at random positions.
In the current version of OptiMic, the well-known Voronoi method is used for
the tessellation. The Voronoi tessellation generates grain domains
$\mathcal{T}$ that enclose all points with closest distances to the
corresponding grain center. Formally, this can be represented as:

$\mathcal{T}_{p}=\\{\boldsymbol{\mathnormal{x}}\in\mathcal{D}\,|\parallel\boldsymbol{\mathnormal{x}}-S_{p}\parallel<\parallel\boldsymbol{\mathnormal{x}}-S_{q}\parallel\\},\hskip
10.00002pt\textrm{with}\hskip 5.0ptp,q=1\ldots N_{g}\hskip
5.0pt\textrm{and}\hskip 5.0ptp\neq q,$ (1)

where $\boldsymbol{\mathnormal{x}}$ denotes the coordinates of any point in
the $n$-dimensional simulation box $\mathcal{D}$, $N_{g}$ is the total number
of grains, and $S$ denotes the set of coordinates of grain centers. With grain
seeds placed at regular intervals, this method results in mono-dispersive
grains; with random seeds, one obtains the standard Poisson-Voronoi
tessellation.

The so-obtained tessellation is then optimized in a subsequent step. In
general, the objective of the optimization process is to achieve a target
distribution of a particular metric. The cost function $\mathcal{C}$ for
optimization is defined simply as the sum of squared differences between the
current and target distributions, $Y$ and $\hat{Y}$, respectively:

$\mathcal{C}=\frac{1}{m}\sum_{i=1}^{m}(Y_{i}-\hat{Y_{i}})^{2},$ (2)

where $m$ is the number of points (or bins) chosen to discretize the
distribution. In the current version of OptiMic, the metric chosen for
optimization can be distributions of any of the following: i) grain sizes, ii)
number of neighbors, iii) grain boundary areas, iv) triple junction lengths,
v) angles at a triple junction, vi) disorientation angles, vii) type of GB (in
terms of sigma values), and viii) maximum Schmid factors.

Equation (2) is the cost function used by default in OptiMic; the user may,
however, also define a custom cost function. To this end, in addition to the
above mentioned metrics in terms of distributions, the distance between grain
centers is also made available. An example of a custom cost function is shown
as part of application examples in _section_ 3.2.

The cost function is now minimized using optimization algorithms, which
essentially move the grain centers to more favorable positions so as to
reflect the desired distribution of the chosen metric. Both gradient-based and
gradient-free algorithms can be used for this purpose. The final optimized
microstructure is then meshed and/or filled with atoms for further
simulations.

###  2.1 Software details

OptiMic is written in Python and uses the following libraries to accomplish
various tasks:

  * 1.

Voro++ [29] for generation of Voronoi tessellations. The Python package Tess
[30] is used to interface with Voro++.

  * 2.

scipy.optimize [31] for optimization of the microstructure

  * 3.

Gmsh [32], together with its Python API, for generation of tetrahedral and
hexahedral meshes for finite element simulations.

  * 4.

nanosculpt [11] for generation of the atomistic sample.

The generated microstructure is periodic in all directions. OptiMic can
generate microstructures in both 2D and 3D. The precise execution
instructions, including all options of the program, can be found on the wiki
page [2] of OptiMic. Although all optimization algorithms in scipy.optimize
[31] are available to the user, currently OptiMic has only been tested with
the Cobyla [33] and SLSQP [34] algorithms.

Once the microstructure has been optimized, the volume defining individual
grains is written out as a surface mesh in the VTK [26] and OBJ [27] file
formats; these files are then used for generating atomistic configurations
using _nano sculpt_ [11]. Furthermore, all relevant statistical information is
written out for further processing by the user. The seed coordinates and
orientations of individual grains are written out every iteration, thus
enabling a restart of the optimization process, if needed.

##  3 Application examples

The following examples were generated on a system with AMD Ryzen 5 2500U (4
physical cores, 8 virtual cores) with Radeon Vega Mobile Gfx processor with 8
Gigabytes (GB) of RAM. The CPU architecture is equipped with L1d, L1i, L2 and
L3 cache memory of 32 Kilobytes (KB), 64 KB, 512 KB and 4096 KB respectively.
All examples were generated with the simplex-based Cobyla optimization
algorithm [33].

###  3.1 3D microstructure with log-normal grain size distribution

In this example, we generate a 3D microstructure with 500 grains in a
simulation box of size 15 x 15 x 15 units. The aim of the optimization process
in this example is to ensure a (close to) log-normal grain size distribution;
herein, the maximum function evaluations were set to 2000. Each grain has a
face-centered cubic (fcc) crystal structure and is given a random orientation.
The following command is used for execution:

⬇

$> ./optimic main --size 15. 15. 15. \--dimension 3

\--number_seed 500 \--target user_grain_size_distribution.txt

\--characteristic 0 \--material example_1_3D

\--stress_direction 1 0 0 \--seed_spacing random_3d

\--rand_seed 1 \--optimization_method COBYLA \--max_iter 2000

\--number_bins 20 \--mesh hex

By default with random seeds, the Voronoi method generates a tessellation with
Poisson-Voronoi grain size distribution (cf. _fig_. 1a,b). The Cobyla
algorithm [33] is able to successfully reduce the cost function and result in
a microstructure with log-normal grain size distribution (see _fig_. 1b,c).
The final microstructure along with the meshed and atomistic configurations
are shown in _fig_. 1d,e,f. The optimization process is shown as a movie in
supplementary movie S1.

Figure 1: Generation of a 3D microstructure with 500 grains in a simulation
box of size 15 x 15 x 15 units using OptiMic and optimized to a target log-
normal grain-size distribution: a) Initial Voronoi tessellation with randomly
placed seeds; b) Evolution of cost function during the optimization process;
c) Initial, target and optimal grain size distribution; d) Voronoi
tessellation after optimization of grain size distribution; e) Finite element
mesh; f) Atomistic configuration. The transparent cube in a) and d) shows the
limits of the simulation box. Individual grains are colored with different
colors in a, d-f.

Various characteristics of the microstructure generated by OptiMic are shown
in _fig_. 2. These statistics indicate that the optimization process results
in an increase of small GBs and TJs (_fig_. 2a,b). The distribution of the
angles at TJs (_fig_. 2c), however, remains almost identical. The optimization
process also results in slight changes in the neighborhood with a mean of 12
neighbors observed in the optmized configuration. Additionally, the
distribution of the nearest neighor distances is also broader, with a peak
value around 75% of the mean grain size.

No siginificant changes can be observed in the textural statistics. The
disorientation distribution remains close to a Mackenzie type distribution
[35] after optimization, which is expected in a polycrystal with random
orientations. A slight change of less than 1% is observed in the number of
$\Sigma 9,\Sigma 11,\Sigma 17,\Sigma 19$ GBs. The distribution of Schmid
factors in individual grains, considering the global $x$, $y$ and $z$ as
loading directions, also shows no significant changes.

Figure 2:  Statistics of the 3D microstructure (example 1) shown as
distributions: a) GB area; b) TJ length; c) TJ angle; d) Number of neighbors;
e) Nearest neighbor distances; f) Disorientation between grains; g) Special
GBs; h-i) First, second and third highest Schmid factors in x, y and z
directions, respectively. For computing the Schmid factors, only the
$\left[111\right]\left<110\right>$ system is considered.

###  3.2 2D microstructure with user-defined cost function

Generation of 2D-columnar microstructures with OptiMic follows in principle
the same procedure as in the 3D case. The seed coordinates are, however,
defined only in the global $x$ and $y$ directions. The grains are finally
extruded in the $z$ direction to obtain a columnar microstructure of a
particular thickness.

Voronoi tessellated microstructures constructed with random grain centers can
result in extremely small GBs/TJs (see _fig_. 3a) which pose a problem during
meshing of the configuration. A common method to overcome this problem is
regularization, which involves the elimination of such GBs/TJs and collapsing
corresponding vertices to a single vertex [22]. This, however, results in
spurous topological features such as quintuple or higher order junctions, as
against triple junctions that are generally observed in real microstructures,
and can lead to erroneous results particularly in atomistic simulations [36].

Figure 3: Generation of a 2D microstructure in a box of 180 x 120 x 15 units
using a custom cost function: a) Initial microstructure with random seeds; b)
Evolution of the overall cost during optimization; c) Evolution of the minimum
neighbor distance and minimum GB area during optimization; d) Final optimized
microstructure; e) Hexahedral FE mesh; f) Atomistic configuration with fcc
crystal structure and $\left<110\right>$ orientation along the thickness.
Color code as in _fig_. 1.

To overcome such undesired features, we define a cost function based on GB
areas (here, lengths) and neighbor distances. The function is formally
expressed as:

$\mathcal{C}=f(\bar{d}-\textrm{d}^{\textrm{c}})+f(\bar{A}_{GB}-\textrm{A}^{\textrm{c}}_{GB}),$
(3)

where $\bar{d}$ and $\bar{A}_{GB}$ denote the arrays of neighbor distances and
GB areas, respectively. The parameters $\textrm{d}^{\textrm{c}}$ and
$\textrm{A}^{\textrm{c}}_{GB}$ denote critical values for distance and GB
area, and are taken to be 12 and 6 units, respectively. The function
$f(\cdot)$ takes the form:

$f(\cdot)=\sum_{1}^{n}\exp\left[-\alpha*(\cdot)\right]+\beta*(\cdot),$ (4)

where the summation is performed over the given array. The symbol $*$
indicates the product of two terms. The parameters $\alpha$ and $\beta$ work
as scaling constants and are given values of 0.6 in the current work.

The exponential term results in repulsion of points that are very close to
each other, whilst the linear term leads to an attraction of points that are
far from one another, albeit to a lesser extent than the repulsion of close
points. Upon optimization, the reduction in the overall cost function (_fig_.
3b) results in an increase in the smallest nearest neighbor distance to
approximately 8 units. Simultaneously, the smallest GB length increases tto
approximately 2.5 units ((_fig_. 3c). The optimized configuration shown in
_fig_. 3d exhibits no spurious features that are visible in the initial
configuration (see supplementary movie S2 for more details). Each grain is
then assigned a $\left<111\right>$ orientation along the thickness and a
random in-plane rotation. A fcc crystal structure is used for generating
individual crystals.

The command used for this example is:

⬇

$> ./optimic main --size 180 120 15 \--dimension 2 \--number_seed 122

\--target user_grain_size_distribution.txt \--characteristic 2

\--characteristic 5 \--material example_2_2D_10k_so

\--stress_direction 1 0 0 \--sharp_orientation 1 1 1

\--seed_spacing random_3d \--rand_seed 2

\--optimization_method COBYLA \--max_iter 10000 \--number_bins 10

\--user_cost_func user_cost_function_2.py

\--mesh hex \--mesh_size 1.0

The statistics of the microstructure before and after optimization are shown
in _fig_. 4. The optimization has almost no effect on the grain size
distribution (cf. _fig_. 4a). The neighborhood distribution (_fig_. 4b) shows
that grains with less than 3 and more than 8 neighbors are eliminated during
the optimization process. Furthermore, very small and very large GBs are
reduced. The distribution in TJ lengths shows no change since the length of
any TJ is identical to the thickness of the film. The TJ angle distribution
(_fig_. 4f) is more compact with reduced numbers of both large and small
angles at TJs, indicating the manifestation of circular grains (cf. _fig_. 3d)
and is also seen in the distribution of neighbor distances (_fig_. 4f). No
large differences can be observed in the textural statistics shown in _fig_.
4g-i.

.

Figure 4:  Statistics of the 2D microstructure (example 2) as distributions:
a) Grain size; b) Number of neighbors; c) GB areas; d) TJ lengths; e) TJ
angles; f) Nearest neighbor distances; g) Disorientation; h) Special GBs; i,j)
First, second and third highest Schmid factors of the
$\left[111\right]\left<110\right>$ family for loading in x and y directions.

###  3.3 Optimized TJ angle distribution in a monodispersive microstructure

In this example, we demonstrate the optimization of a 2D microstructure
starting from a mono-dispersive tessellation (hexagons) (_fig_. 5a). The aim
is to obtain a microstructure that looks more realistic than a simple
hexagonal tessellation. To this end, we define a target distribution of TJ
angles with a spread of $\pm 20^{\circ}$ around a mean TJ angle of
$120^{\circ}$ found in the initial microstructure. The command used is:

⬇

$> ./optimic main --size 10. 10. 1. \--spacing_length 1

\--dimension 2 \--target junc_angle_80160_sc_17.txt

\--characteristic 4 \--material example_3_2D_hcp_longer

\--stress_direction 1 0 0 \--sharp_orientation 1 1 1

\--seed_spacing hcp_2d \--rand_seed 3 \--optimization_method COBYLA

\--max_iter 7000 \--number_bins 15

\--user_cost_func user_cost_function_5_junc_angle.py \--mesh tet

\--mesh_size 0.2

The reduction of the cost function and the final distribution of the TJ angles
are shown in _fig_. 5b,c respectively, and as supplementary movie S3. The
optimized Voronoi tessellation (_fig_. 5d) shows grains of different sizes and
shapes, unlike example 2 where the optimized tessellation manifested more-or-
less circular grains. In this example, the meshed configuration is generated
as a conforming mesh, i.e. mesh respecting the boundaries of individual
grains, as seen in _fig_. 5e. The atomistic configuration generated using a
fcc crystal structure and $\left<110\right>$ orientation along the thickness
is shown in _fig_. 5f. For the sake of completeness, a few relevant statistics
are shown in _fig_. 6.

Figure 5: Optimization of TJ angle distribution in a mono-dispersive
microstructure: a) Initial hexagonal microstructure obtained by seeds placed
at regular intervals; b) Evolution of the cost function during optimization;
c) Distribution of TJ angles; d) Optimized microstructure; e) Tetragonal FE
mesh; f) Atomistic configuration with fcc crystal structure and
$\left<110\right>$ orientation along the thickness. Color code as in _fig_. 1.
Figure 6: Statistics of the optimized 2D microstructure starting from a mono-
dispersive tessellation shown as distribution: a) Grain size; b) Neighborhood;
c) GB area; d) Disorientation angle; e) Special GBs; f,g) First, second and
third highest Schmid factors of the $\left[111\right]\left<110\right>$ family
for loading in x and y directions, respectively.

##  4 Conclusions

In this work, we have developed an open source software OptiMic that enables
the generation of optimized microstructures for simulations of polycrystalline
material behavior. The tool is able to generate both mono-dispersive as well
as Voronoi microstructures, which can further be optimized to obtain certain
key features and statistics seen in real microstructures. OptiMic is highly
flexible and allows users to define customized cost functions using a wide
variety of statistics that are computed by the program. The functioning of the
software has been demonstrated using three different examples, and encompassed
both 3D and 2D microstructures, Voronoi and monodispersive microstructures,
and the usability of custom cost functions. The code is programmed in a
modular fashion and allows easy extension to other tessellation methods.

##  5 Open Source Repository

OptiMic is available as open-source code and can be downloaded from the
official Gitlab [1] repository. The code is distributed under GNU General
Public License, version 3.0.

##  6 Conflict of Interest

The authors confirm that there are no known conflicts of interest associated
with this publication and there has been no significant financial support for
this work that could have influenced its outcome.

##  7 Acknowledgements

SS acknowledges funding from the ERC starting grant, “A Multiscale Dislocation
Language for Data-Driven Materials Science”, ERC Grant agreement No. 759419
MuDiLingo.

## References

## References

  * [1] P. Serrao, S. Sandfeld, A. Prakash, OptiMic: Software repository (2020 (accessed December 28, 2020)).
URL https://gitlab.com/arun.prakash.mimm/optimic/

  * [2] P. Serrao, S. Sandfeld, A. Prakash, OptiMic: Wiki (2020 (accessed December 28, 2020)).
URL https://gitlab.com/arun.prakash.mimm/optimic/-/wikis/home

  * [3] D. Raabe, Computational materials science-the simulation of materials microstructures and properties, Wiley-VCH, 1998.
  * [4] D. Raabe, F. Roters, F. Barlat, L.-Q. Chen (Eds.), Continuum scale simulation of engineering materials: fundamentals-microstructures-process applications, John Wiley & Sons, 2004.
  * [5] Z. X. Guo (Ed.), Multiscale materials modelling: Fundamentals and applications, Elsevier, 2007.
  * [6] A. Prakash, E. Bitzek, Idealized vs. realistic microstructures: An atomistic simulation case study on $\gamma$/$\gamma^{\prime}$ microstructures, Materials 10 (1) (2017) 88.
  * [7] K. G. F. Janssens, D. Raabe, E. Kozeschnik, M. A. Miodownik, B. Nestler, Computational materials engineering: an introduction to microstructure evolution, Academic Press, 2010.
  * [8] T. Xu, M. Li, Geometric methods for microstructure rendition and atomic characterization of poly-and nano-crystalline materials, Philosophical Magazine 90 (16) (2010) 2191–2222.
  * [9] M. Li, T. Xu, Topological and atomic scale characterization of grain boundary networks in polycrystalline and nanocrystalline materials, Progress in Materials Science 56 (6) (2011) 864–899.
  * [10] D. Gross, M. Li, Constructing microstructures of poly-and nanocrystalline materials for numerical modeling and simulation, Applied Physics Letters 80 (5) (2002) 746–748.
  * [11] A. Prakash, M. Hummel, S. Schmauder, E. Bitzek, Nanosculpt: A methodology for generating complex realistic configurations for atomistic simulations, MethodsX 3 (2016) 219–230.
  * [12] A. Stukowski, K. Albe, D. Farkas, Nanotwinned fcc metals: Strengthening versus softening mechanisms, Physical Review B 82 (22) (2010) 224103.
  * [13] K. Frydrych, K. Kowalczyk-Gajewska, A. Prakash, On solution mapping and remeshing in crystal plasticity finite element simulations: Application to equal channel angular pressing, Modelling and Simulation in Materials Science and Engineering 27 (7) (2019) 075001.
  * [14] J. Amodeo, S. Dancette, L. Delannay, Atomistically-informed crystal plasticity in MgO polycrystals under pressure, International Journal of Plasticity 82 (2016) 177–191.
  * [15] R. Carson, M. Obstalecki, M. Miller, P. Dawson, Characterizing heterogeneous intragranular deformations in polycrystalline solids using diffraction-based and mechanics-based metrics, Modelling and Simulation in Materials Science and Engineering 25 (5) (2017) 055008.
  * [16] C. Brandl, P. Derlet, H. Van Swygenhoven, Dislocation mediated plasticity in nanocrystalline Al: the strongest size, Modelling and Simulation in Materials Science and Engineering 19 (7) (2011) 074005.
  * [17] M. Syha, D. Weygand, A generalized vertex dynamics model for grain growth in three dimensions, Modelling and Simulation in Materials Science and Engineering 18 (1) (2009) 015010.
  * [18] J. K. Mason, E. A. Lazar, R. D. MacPherson, D. J. Srolovitz, Geometric and topological properties of the canonical grain-growth microstructure, Physical Review E 92 (6) (2015) 063308.
  * [19] A. Prakash, D. Weygand, E. Bitzek, Influence of grain boundary structure and topology on the plastic deformation of nanocrystalline aluminum as studied by atomistic simulations, International Journal of Plasticity 97 (2017) 107–125.
  * [20] J. Alkemper, P. Voorhees, Quantitative serial sectioning analysis, Journal of Microscopy 201 (3) (2001) 388–394.
  * [21] M. D. Uchic, M. A. Groeber, A. D. Rollett, Automated serial sectioning methods for rapid collection of 3-d microstructure data, JOM 63 (3) (2011) 25–29.
  * [22] R. Quey, P. Dawson, F. Barbe, Large-scale 3D random polycrystals for the finite element method: Generation, meshing and remeshing, Computer Methods in Applied Mechanics and Engineering 200 (17-20) (2011) 1729–1745.
  * [23] M. Prasad, N. Vajragupta, A. Hartmaier, Kanapy: A python package for generating complex synthetic polycrystalline microstructures, Journal of Open Source Software 4 (43) (2019) 1732.
  * [24] M. A. Groeber, M. A. Jackson, DREAM. 3D: a digital representation environment for the analysis of microstructure in 3D, Integrating Materials and Manufacturing Innovation 3 (1) (2014) 5.
  * [25] K. A. Hart, J. J. Rimoli, MicroStructPy: A statistical microstructure mesh generator in Python, SoftwareX 12 (2020) 100595.
  * [26] W. J. Schroder, K. M. Martin, L. S. Avila, VTK User’s Guide-VTK File Formats, chapter 14, Kitware Inc.
  * [27] J. Murray, W. Van Ryper, Wavefront OBJ file format summary (2005).
  * [28] P. Bourke, Data formats: 3D, audio, image (2020 (accessed December 28, 2020)).
URL http://paulbourke.net/dataformats/

  * [29] C. Rycroft, Voro++: A three-dimensional Voronoi cell library in C++, Tech. rep., Lawrence Berkeley National Lab.(LBNL), Berkeley, CA (United States) (2009).
  * [30] W. Smith, Tess: a set of Python bindings to the Voro++ library (2019 (accessed December 20, 2020)).
URL https://github.com/wackywendell/tess

  * [31] P. Virtanen, R. Gommers, T. E. Oliphant, M. Haberland, T. Reddy, D. Cournapeau, E. Burovski, P. Peterson, W. Weckesser, J. Bright, S. J. van der Walt, M. Brett, J. Wilson, K. J. Millman, N. Mayorov, A. R. J. Nelson, E. Jones, R. Kern, E. Larson, C. J. Carey, İ. Polat, Y. Feng, E. W. Moore, J. VanderPlas, D. Laxalde, J. Perktold, R. Cimrman, I. Henriksen, E. A. Quintero, C. R. Harris, A. M. Archibald, A. H. Ribeiro, F. Pedregosa, P. van Mulbregt, SciPy 1.0 Contributors, SciPy 1.0: Fundamental Algorithms for Scientific Computing in Python, Nature Methods 17 (2020) 261–272.  doi:10.1038/s41592-019-0686-2.
  * [32] C. Geuzaine, J.-F. Remacle, Gmsh: A 3-D finite element mesh generator with built-in pre-and post-processing facilities, International journal for numerical methods in engineering 79 (11) (2009) 1309–1331.
  * [33] M. J. Powell, A direct search optimization method that models the objective and constraint functions by linear interpolation, in: Advances in optimization and numerical analysis, Springer, 1994, pp. 51–67.
  * [34] D. Kraft, K. Schnepper, SLSQP – a nonlinear programming method with quadratic programming subproblems, DLR, Oberpfaffenhofen 545.
  * [35] J. Mackenzie, M. Thomson, Some statistics associated with the random disorientation of cubes, Biometrika 44 (1-2) (1957) 205–210.
  * [36] P. Hirvonen, Z. Fan, M. M. Ervasti, A. Harju, K. R. Elder, T. Ala-Nissila, Energetics and structure of grain boundary triple junctions in graphene, Scientific reports 7 (1) (2017) 1–14.