Upload
others
View
7
Download
0
Embed Size (px)
Citation preview
GENERATING TRIPLE JUNCTION
DISTRIBUTIONS
By
GRADEN BRYANT HARDY
A dissertation submitted in partial fulfilment of
the requirements for the degree of
DOCTOR OF PHILOSOPHY
WASHINGTON STATE UNIVERSITY
School of Mechanical and Materials Engineering
MAY 2015
© Copyright by GRADEN BRYANT HARDY, 2015
All Rights Reserved
© Copyright by GRADEN BRYANT HARDY, 2015
All Rights Reserved
ii
To the Faculty of Washington State University:
The members of the Committee appointed to examine the dissertation of
GRADEN BRYANT HARDY find it satisfactory and recommend that it be
accepted.
___________________________________
David P. Field, Ph.D., Chair
___________________________________
Jow-Lian Ding, Ph.D.
___________________________________
Hussein M. Zbib, Ph.D.
___________________________________
Robert H. Dillon, Ph.D.
iii
ACKNOWLEDGEMENT
I would like to first acknowledge the contributions of my advisor Dr. David Field. He
devised the topic for this dissertation and it was through his efforts in securing funding that I had
the opportunity to complete this work. I would also like to thank him for his willingness to give
me a position on this project when I first approached him five years ago. I want to acknowledge
his consistent financial support and outstanding patience over the course of completing this
dissertation. In addition, I would like to recognize his steadfast guidance and willingness to
make time for the many discussions we have had when working through problems.
I would like to recognize the efforts of my research committee in reviewing this work and
the National Science Foundation for supporting this project under Award DMR-1003004. Thank
you for the consistent support of my family, particularly my wife, who have continually
encouraged and supported me in my efforts. I would also like to acknowledge the Lord who has
continually sustained me in this work. It was largely through His assistance that I was able to
complete this dissertation.
iv
GENERATING TRIPLE JUNCTION
DISTRIBUTIONS
Abstract
by Graden Bryant Hardy, Ph.D.
Washington State University
May 2015
Chair: David P. Field
Substantial studies indicate polycrystalline triple junctions are independent
microstructural defects with distinct properties and effects from their constituent grain
boundaries. Triple junctions are also descriptive of grain boundary networks and can provide
relative grain boundary energies. Despite their undeniable influence within microstructures,
there is a lack of techniques for characterizing triple junctions on a large scale. This is the result
of the difficulty of measuring their many parameters and three-dimensional features. In a first
step towards triple junction characterization, this work has developed a method of characterizing
twin-dependent triple junction distributions. All necessary parameters and conventions are
established for generating twin-dependent distributions within a discrete space. A novel method
of weighting distribution values to remove inherent sampling biases is developed. As a result of
the distribution weighting, a novel technique for generating twin-dependent triple junctions with
unequal volume cells is created. Grain boundary plane stereological methods are adopted to
enable forming twin-dependent distributions from electron back-scatter diffraction data on a
single section plane. This method has been prepared in a software format for the automated
v
generation of distributions. The method has been optimized by empirical techniques and through
the implementation of simulated microstructures it has been qualitatively and quantitatively
validated. Quantitative measures of distribution quality are developed and implemented to
approximate the relative reliability of results with respect to data quantity. The implications of
this method to general triple junctions are discussed and the parameters and conventions of a
general triple junction distribution are presented as a foundation for future development. This
work prepares the fundamentals to general triple junction characterization and makes progress
towards integrated materials engineering.
vi
TABLE OF CONTENTS
Page
ACKNOWLEDGEMENT ............................................................................................................. iii
LIST OF TABLES ......................................................................................................................... ix
LIST OF FIGURES ........................................................................................................................ x
CHAPTER 1 INTRODUCTION .................................................................................................... 1
1.1 Polycrystalline Structure .................................................................................................... 1
1.2 The Need for Triple Junction Characterization ................................................................. 3
1.3 Lack of Reliable Characterization Techniques with Fully Descriptive Parameters .......... 5
1.4 Shortcomings of Current Three-Dimensional Characterization Techniques for
Characterizing Triple Junction Distributions ..................................................................... 8
1.5 Advantages of a Stereological Approach ........................................................................ 10
CHAPTER 2 THEORY ................................................................................................................ 13
2.1 Triple Junction Parameters .............................................................................................. 13
2.2 The Parameter Space ....................................................................................................... 17
2.3 Reducing the Distribution Space to a Fundamental Zone ............................................... 20
2.3.1 Reducing the Distribution Space by Geometric Constraints ..................................... 20
2.3.2 Reducing the Distribution Space by Selecting a Fundamental Zone ........................ 22
2.3.3 Examining the Distribution Space ............................................................................. 26
2.4 Weighting the Distribution Values .................................................................................. 31
2.4.1 Sampling Biases within the Distribution ................................................................... 31
vii
2.4.2 Correcting the Sampling Biases within the Distribution ........................................... 32
2.5 Distributions with Unequal Volume Cells ....................................................................... 35
2.6 Interpreting Distribution Plots ......................................................................................... 39
2.7 Adoption of the Grain Boundary Stereological Approach .............................................. 43
2.7.1 Implementation of Grain Boundary Stereology to Characterize Triple
Junctions .................................................................................................................... 43
2.7.2 Advantages and Disadvantages of the Grain Boundary Plane Stereology ................ 47
CHAPTER 3 EMPIRICAL OPTIMIZATION OF THE TECHNIQUE ...................................... 50
3.1 Practical Application Specifics ........................................................................................ 50
3.2 Mapping the Distribution Space ...................................................................................... 50
3.3 Selecting Optimal Mapping, Distribution, and Stereological Parameters ....................... 55
3.3.1 Optimizing the Distribution Generation Parameters ................................................. 57
3.3.1.1 Two-Level Factorial Design ............................................................................ 59
3.3.1.2 Response Surface Design ................................................................................ 71
3.3.2 Optimizing the Stereological Parameters .................................................................. 75
3.3.2.1 Selecting a Value for Cos111N2Discrt ........................................................... 75
3.3.2.2 Optimizing CosN1Discrt and CosN3Discrt .................................................... 78
CHAPTER 4 RESULTS ............................................................................................................... 85
4.1 Validating the Method ..................................................................................................... 85
4.1.1 Visual Validation of the Technique ........................................................................... 87
4.1.2 Quantitative Validation of the Technique ................................................................. 96
CHAPTER 5 CONCLUSIONS .................................................................................................. 102
CHAPTER 6 FUTURE WORK ................................................................................................. 104
viii
6.1 Experimental Application .............................................................................................. 104
6.1.1 Decreasing the Weighting Factor Computational Time .......................................... 104
6.2 Generating a Generalized Triple Junction Distribution ................................................. 106
6.2.1 Parameters and Conventions of a Generalized Triple Junction Distribution .......... 107
6.2.2 Selecting a Fundamental Zone ................................................................................ 109
6.2.3 Stereology and Data Requirements of a Generalized Triple Junction
Distribution .............................................................................................................. 111
BIBLIOGRAPHY ....................................................................................................................... 114
APPENDIX ................................................................................................................................. 119
A. PROGRAM CODE EXCERPTS AND DETAILS ....................................................... 120
A.1 TJDinit() ........................................................................................................................ 121
A.2 SpaceGen() .................................................................................................................... 126
A.3 RebuildSpace() .............................................................................................................. 137
A.4 SimDataGen() ................................................................................................................ 143
A.5 SpaceTJDexpGen() ........................................................................................................ 152
A.6 TJDexpGen() ................................................................................................................. 163
A.7 StoreDists() .................................................................................................................... 173
A.8 RebuildDists() ................................................................................................................ 175
B. TWIN-DEPENDENT TRIPLE JUNCTION DISTRIBUTION FUNCTION ............... 178
B.1 Motivation ...................................................................................................................... 178
B.2 Definition of the Function ............................................................................................. 178
B.3 Series Expansion ............................................................................................................ 179
B.4 Definitions ..................................................................................................................... 182
ix
LIST OF TABLES
Table 3.1 - Table of parameters necessary for generating triple junction distributions. .............. 56
Table 3.2 – Table of parameters necessary for adopting grain boundary plane stereology to
triple junctions. ....................................................................................................................... 57
Table 3.3 – Response surface results from the Minitab Response Optimizer. ............................. 82
Table 4.1 – Summary of cells at a fixed misorientation, triple junctions per cell, and triple
junctions for the full space for varying levels of fixed misorientation data. (a) Actual data
taken from the simulated distributions in Figure 4.5. (b) Values calculated for a 12.9
degree resolution at the10 degree resolution filtering levels. (c)Values calculated for a 15
degree resolution at the10 degree resolution filtering levels. ................................................. 97
x
LIST OF FIGURES
Figure 1.1 – EBSD map of grain boundary engineered copper with a single triple junction
identified on the section plane. ................................................................................................. 2
Figure 1.2 – Two identical triple junctions with dissimilar dihedral angles in the section
plane. The dihedral angles are shown to be subject to the angle of the sectioning plane
with respect to the junction orientation. .................................................................................... 3
Figure 2.1 – All 17 parameters of a fully characterized polycrystalline triple junction. .............. 14
Figure 2.2 – Six parameter characterization and conventions of a triple junction within the
twin-dependent triple junction distribution. ............................................................................ 17
Figure 2.3 – Parameter space of the twin-dependent triple junction distribution. The
misorientation space and plane parameter space have been separated into two three-
dimensional spaces. An example discrete cell is visible in both spaces. ............................... 18
Figure 2.4 – (a) Triple junction not following plane normal convention of all normals
pointing in the same direction about the triple line. (b) Triple junction following plane
normal convention of all normals pointing in the same direction about the triple line. ......... 22
Figure 2.5 – The standard 111 stereographic projection and the three possible
misorientation axis zones. For every misorientation class, each of the three
misorientation axes pertains to one of the three labeled zones. .............................................. 26
Figure 2.6 – (a) Southern hemispheres of the A1n stereographic projections for decreasing
values of cos . The distribution is a simulated triple junction distribution within a
single fundamental zone. The peak value is found at 1211 An and 73.0cos or
xi
1033 An . (b) Northern hemispheres of the A1n stereographic projections for
decreasing values of cos . The distribution is a simulated triple junction distribution
within a single fundamental zone. .......................................................................................... 28
Figure 2.7 – (a) Triple junction at simulated distribution peak with 1211 An , 1112 An ,
and 1033 An . (b) Triple junction with inverted A1n value from the distribution peak
A1n value. 2111 An , 1112 An , and 1033 An . (c) Triple junction with
2111 An , 1112 An , and 5269.,8433.,1058.3 An . ................................................ 30
Figure 2.8 – The standard 001 stereographic projection and the labeled 111 zone. All
triple lines for the twin-dependent triple junction distribution lie along the 111 zone. ....... 31
Figure 2.9 – (a) Southern hemispheres of the A1n stereographic projections for decreasing
values of cos . The distribution is a simulated uniform random triple junction
distribution formed within a single fundamental zone. The peak values are found as
values approach 1111 An and 1cos or 1113 An and 1cos or
1113 An . (b) Northern hemispheres of the A1n stereographic projections for decreasing
values of cos . The distribution is a simulated uniform random triple junction
distribution within a single fundamental zone. The peak value is found as values
approach 1111 An and 1cos or 1113 An . ........................................................... 33
Figure 2.10 – (a) Southern hemispheres of the A1n stereographic projections for increasing
values of α. This distribution is identical to Figure 2.6 with the exception that it is formed
with discrete unequal volume cells as opposed to equal volume cells. (b) Northern
xii
hemispheres of the A1n stereographic projections for increasing values of α. This
distribution is identical to Figure 2.6 with the exception that it is formed with discrete
unequal volume cells as opposed to equal volume cells. ........................................................ 37
Figure 2.11 – (a) Two-dimensional depiction of the cell volume dimensions and associated
cell angular dimensions for the equal volume parameterization by cos . (b) Two-
dimensional depiction of the cell volume dimensions and associated cell angular
dimensions for the unequal volume parameterization by . .................................................. 39
Figure 2.12 - (a) Southern hemisphere of the A1n stereographic projection for
73.0cos within the equal volume distribution space. The peak value is found at
1211 An and 73.0cos or 1033 An . (b) Southern hemisphere of the A1n
stereographic projection for 17410.cos within the equal volume distribution
space. The peak value is found at 1221 An and 17410.cos or 3113 An . (c)
Southern hemisphere of the A1n stereographic projection for 100 within the
unequal volume distribution space. The peak value is found at 1221 An and
100 or 3113 An . ........................................................................................................ 41
Figure 2.13 - (a) Frequency values for triple junctions according to their proximity to the
peak value of 1211 An and 73.0cos or 1033 An . (b) Frequency values for
triple junctions according to their proximity to the peak value of 1221 An and
17410.cos or 3113 An . ............................................................................................ 42
xiii
Figure 2.14 – The progression of steps to characterize a twin-dependent triple junction from a
section plane. (a) Identify the coherent twin trace in the section plane. (b) Apply
developed conventions to the twin-dependent triple junction grains and trace normals. (c)
Identify the twin boundary plane orientation by selecting the potential trace normal
nearest a 111 direction. Transform the normal to the 111 direction. (d) Apply the
grain boundary stereology by generating potential 1n normals. For every 1n normal the
corresponding 3n may be found and both transformed to the crystal coordinate frame. ........ 44
Figure 3.1 – The A1n planes of random triple junctions generated within the parameter space
at a fixed cos index. ........................................................................................................... 52
Figure 3.2 – The A1n planes at a fixed cos value for a uniform random triple junction
distribution with all expected sampling biases. ...................................................................... 53
Figure 3.3 – Filtered weighting factors within their corresponding cells within the
distribution space. ................................................................................................................... 54
Figure 3.4 – Residual plots for difference response ..................................................................... 61
Figure 3.5 – Residual plots for range response ............................................................................. 61
Figure 3.6 – Standard deviation vs. mean for both the range and difference values. These
plots demonstrate the increase in variance with increasing magnitude. ................................. 63
Figure 3.7 - Standard deviation vs. mean for the transformed range and difference values.
These plots demonstrate the result of the equal variance transformation. .............................. 64
Figure 3.8 – Residual plots for reciprocal square root range response. ........................................ 65
Figure 3.9 – Residual plots for reciprocal square root difference response. ................................. 65
Figure 3.10 – Main effects for reciprocal square root range. ........................................................ 67
xiv
Figure 3.11 – Normal plot of the standardized effects with the reciprocal square root range as
the response. This plot distinguishes significant from non-significant effects. ..................... 67
Figure 3.12 – Main effects for reciprocal square root difference. ................................................ 68
Figure 3.13 – Normal plot of the standardized effects with the reciprocal square root
difference as the response. This plot distinguishes significant from non-significant
effects. ..................................................................................................................................... 68
Figure 3.14 – Interactions for reciprocal square root range. ......................................................... 69
Figure 3.15 – Interactions for reciprocal square root difference. ................................................. 69
Figure 3.16 - The cells within the empty geometric region of the parameter space as a
function of RandCellPtsGeom ................................................................................................ 70
Figure 3.17 – Optimal parameter values for the distribution generation parameters as
produced by the response surface design. ............................................................................... 73
Figure 3.18 – The rate of filtering according to the quantity of data. ........................................... 74
Figure 3.19 – (a) The failures in the twin boundary plane reconstruction for 10,000 twin
traces as a function of Cos11N2Discrt. (b) The twin boundary plane reconstruction
computational time for 10,000 twin traces as a function of Cos11N2Discrt. ......................... 77
Figure 3.20 – (a) The rate of boundary plane assignation failure and computational time
normalized and plotted on the same graph as a function of Cos111N2Discrt. (b) The
equated normalized rates of boundary plane assignation failure and computational time as
a function of Cos111N2Discrt. ............................................................................................... 77
Figure 3.21 – Performance of optimal parameter values within the actual program. (a) The
computational time versus difference for using the selected parameter value in the left of
the legend to generate weighting factors. (b) The computational time versus difference
xv
for using the selected parameter value in the right of the legend to generate the
experimental distribution from simulated trace values. .......................................................... 83
Figure 3.22 – Performance of parameter values within the actual program where the
parameter values are equally matched when forming the weighting factors and the
experimental distribution. ....................................................................................................... 84
Figure 4.1 – Simulated distribution generated in the equal volume cell distribution space.
The peak of the distribution is located at 1211 An , 1112 An , and 1023 An or
2582.cos . (a) Southern hemispheres of the stereographic projections of A1n for
fixed values of cos at center cell values. (b) Northern hemispheres of the
stereographic projections of A1n for fixed values of cos at center cell values. ............... 88
Figure 4.2 – Stereologically generated distribution from simulated experimental data created
from the junctions in Figure 4.1. Comparison of Figure 4.1 and Figure 4.2 provide a
qualitative visual validation of the implemented stereological method. (a) Southern
hemispheres of the stereographic projections of A1n for fixed values of cos at center
cell values. (b) Northern hemispheres of the stereographic projections of A1n for fixed
values of cos at center cell values. ................................................................................... 89
Figure 4.3 – Simulated distribution generated in the unequal volume cell distribution space.
The peak of the distribution is located at 1211 An , 1112 An , and 1023 An or
104.96 . (a) Southern hemispheres of the stereographic projections of A1n for fixed
values of at center cell values. (b) Northern hemispheres of the stereographic
projections of A1n for fixed values of at center cell values. .............................................. 90
xvi
Figure 4.4 – Stereologically generated distribution from simulated experimental data created
from the junctions in Figure 4.3. Comparison of Figure 4.3 and Figure 4.4 provide a
qualitative visual validation of the implemented stereological method. (a) Southern
hemispheres of the stereographic projections of A1n for fixed values of at center cell
values. (b) Northern hemispheres of the stereographic projections of A1n for fixed values
of at center cell values. ....................................................................................................... 91
Figure 4.5 – Simulated distribution peak projections composed of approximately (a) 500,000
(b) 250,000 (c) 100,000 (d) 50,000 (e) 25,000 (f) 10,000 twin-dependent junctions at a
fixed misorientation. ............................................................................................................... 94
Figure 4.6 – Distribution peak projections stereologically generated from (a) 500,000 (b)
250,000 (c) 100,000 (d) 50,000 (e) 25,000 (f) 10,000 simulated measurements of twin-
dependent junctions at a fixed misorientation. ....................................................................... 95
Figure 4.7 – Difference values of similarity between the simulated and stereologically
reconstructed boundaries in Figure 4.5 and Figure 4.6. .......................................................... 99
Figure 6.1 - Parameters and conventions of a general triple junction distribution. .................... 108
1
CHAPTER 1
INTRODUCTION
1.1 Polycrystalline Structure
In nature, metals are composed of the union of many individual crystals or grains. This
conglomeration of grains is formally known as a polycrystalline structure. Each grain within the
polycrystal is composed of a periodic lattice of atoms in three-dimensions. There are several
topological components of the polycrystal which may be approximated by macroscopic
parameters. These components include grains, grain boundaries, triple junctions, and quadruple
points. Grain boundaries are the common plane where two grains meet and triple junctions are
the common intersection of three grains. A fully characterized triple junction consists of three
grains, three grain boundaries, and a common triple line. A quadruple point is formed by four
grains, six grain boundaries, and the intersection of four triple lines which meet at a point.
In efforts to understand and improve materials, experimental techniques have been
developed to characterize polycrystalline topology. A powerful and widespread technique for
automated polycrystalline characterization is electron back-scatter diffraction (EBSD). By this
technique, the diffraction patterns of back-scattered electrons are indexed point by point along
the surface of a properly prepared material sample. The indexed diffraction patterns provide the
local orientation of the crystal lattice at a point. When these points are combined in a map, the
polycrystalline structure as it appears in the section plane is apparent. An EBSD map of grain
boundary engineered copper is shown in Figure 1.1.
2
Figure 1.1 – EBSD map of grain boundary engineered copper with a single triple junction
identified on the section plane.
As apparent in Figure 1.1, the grains of the polycrystal are visible and their lattice
orientations indicated by the color of the grains. The traces of the grain boundaries are found
where two grains meet in the EBSD map. As an EBSD map is generated on a section plane
through the three-dimensional polycrystal, the grain boundary plane orientation is not readily
available from a single map. A single polycrystalline triple junction has been identified in the
section plane and magnified for clarity. As with a single grain boundary plane, neither the planes
of the triple junction nor the triple junction dihedral angles are readily available from the
geometry of the traces in the section plane.
An example of the inability to measure triple junction dihedral angles from a section
plane is given in Figure 1.2. In the figure, two identical triple junctions are sectioned at two
different angles with respect to the triple junction. As apparent in the figure, the section plane
dihedral angles are a function of the angle of the sectioning plane with respect to the triple
junction orientation. As the triple junction orientation is typically unknown with respect to the
section plane, extracting dihedral angles directly from the plane isn’t possible. These
3
observations highlight the difficulty of measurement and the large dimensionality of triple
junctions. As compared to grain boundaries, triple junctions are an emerging frontier in
materials research. This introduction will attempt to demonstrate the need for triple junction
characterization as well as an effective strategy for doing so.
Figure 1.2 – Two identical triple junctions with dissimilar dihedral angles in the section
plane. The dihedral angles are shown to be subject to the angle of the sectioning plane
with respect to the junction orientation.
1.2 The Need for Triple Junction Characterization
For much of the last century grain boundaries have been a main focus of materials
science research [1]. This has been under the limited assumption that the properties of
polycrystalline structure as a whole may be derived from the sum of its parts [2]. While the
study of grain boundaries has led to innumerable materials advances, the grain boundary
distribution gives incomplete information of the network as a whole. While grain boundaries
4
have various properties on a local scale, corresponding macroscale material properties are likely
the result of the grain boundary network [3]. For example, this was demonstrated through
studies of grain boundary engineered materials. In these materials, the improvement in
properties such as intergranular cracking were shown as the result of the break-up of the random
boundary network [4,5].
The grain boundary character distribution (GBCD) [6], where a distribution is a
normalized probability distribution, provides the relative fraction of grain boundaries without
consideration for geometrical or topological correlations within the network [7]. These
correlations become particularly important for grain boundary networks with a high fraction of
symmetric boundaries such as twin boundaries [8]. Several studies have shown that the
percolation threshold for a crystallographically consistent grain boundary network is shifted from
that generated by a random network [9–12]. In these studies, boundaries were classified with a
binary representation of special vs. high-angle random (or general). These studies also indicated
that the deviations from the random percolation threshold were the result of crystallographic
correlations at triple junctions.
Within the context of special vs. random boundaries, it has been further shown that while
the GBCD is incapable of reliably describing the boundary network topology, the triple junction
distribution can describe network properties [5,10]. Intuitively, this is because the triple junction
distribution contains local boundary correlation data and thus serves as the most basic measure of
connectivity within the boundary network. Given its geometry, the triple junction has been
designated as a first order constraint and a quadruple node or the intersection of four grains, six
boundaries, and four triple junctions as a second order constraint. Frary and Schuh indicated that
at least 75% of the correlations within a grain boundary network were accounted for by the triple
5
junction first order constraints whereas the quadruple node 2nd
order constraints account for the
minority fraction [13,14]. Therefore the triple junction distribution not only describes network
topology but also accounts for the majority of the network constraints.
The mentioned studies highlight the fundamental ability of the triple junction distribution
to describe the topology of the grain boundary network. In addition to describing network
connectivity, triple junctions are distinct microstructural features with independent properties
and effects from their constituent boundaries [15]. Gottstein and Shvindlerman have shown that
triple junctions exert a drag effect on grain boundary motion which can significantly impact
grain growth [16–19]. They have additionally reported triple junction energies from basic
experimental geometries and shown an orientation dependence for energy [20–22]. Triple
junctions are prime locations for heterogeneous solute segregation as observed by the
segregation of bismuth in copper [23]. In this study it was shown that the varying concentration
of bismuth at each junction was a function of junction character. Rapid diffusion has also been
experimentally observed along triple junctions in aluminum [24]. Triple junctions are prime
sites for heterogeneous nucleation of precipitates given that there exists 50% less boundary
material at a triple junction as opposed to a grain boundary [25]. In addition, the growth of the
precipitate at a triple junction is favored by diffusion along the constituent boundaries.
1.3 Lack of Reliable Characterization Techniques with Fully Descriptive Parameters
The listed triple junction properties are far from comprehensive and others are accounted
for in more detailed reviews [25]. This list does illustrate that many triple junction properties are
junction specific and are not accounted for by the comprising boundaries. Additionally, despite
an understanding of unique junction phenomena, there is minimal research quantitatively linking
6
junction character to properties. Likewise, there is little research quantitatively linking triple
junction distributions to macroscopic material properties. This is largely due to the inherent
experimental difficulty of characterizing the junction’s many three-dimensional parameters.
Many simplified techniques have been developed and used over the years to characterize
triple junctions. Through extension of the O-lattice method, Bollmann classified triple lines as I-
lines or U-lines according to whether there exists a dislocation balance about the triple line or not
[26–28]. The U-lines were characterized as disclinations which were likely to have a higher
disorder and energy than I-lines. Doni and Bleris characterized triple junctions using the
coincident site lattice (CSL) model and examined common boundary symmetry properties [29].
Palumbo and Aust formalized a coincident axial direction description of triple junctions. This
model may be described as a one-dimensional limit of the three-dimensional CSL junction model
or the one dimensional limit to Bollmann’s U-lines [30]. As previously mentioned, triple
junctions have most commonly been examined using a binary model where boundaries within
the junction are identified as special or random. Typically triple junctions are ranked according
to their number of special boundaries whether zero, one, two, or three. Specialness in boundary
character is application specific where boundaries are designated as special according to the
desired material properties. For instance, Frary and Schuh designated triple junction low angle
boundaries as special while investigating the percolation behavior in high temperature
superconductors [11]. Most frequently, boundaries with low CSL values have been termed
special by researchers.
The aforementioned techniques of triple junction characterization have been beneficial to
the materials community. The binary model of specialness has been particularly useful in
determining grain boundary network properties. While there are advantages to simplifying the
7
large junction dimensionality to a binary model, there are also significant disadvantages. By
treating boundaries as either special or random there is no resolution of character. Junctions with
superior qualities may be lost in a sea of junctions with moderate to poor qualities. In addition,
by examining the boundary plane orientation at CSL misorientations, the coincident site lattice
model has been shown by Rohrer et al. [3,31] to be true for a select few values and to be a
poor predictor of grain boundary energy [32]. Rather than following the plane of highest
coincidence density, most frequently the grain boundary plane is oriented along a low index
plane common to the material. Many boundaries which are frequently termed special by the
CSL model are therefore not necessarily special at all.
While advances have been made in the past by simplified models, the technology now
exists to experimentally produce more complete triple junction distributions. By developing a
method for experimentally characterizing complete triple junction distributions, junction
character could be better linked to microscopic as well as macroscopic material properties. As
already described, these distributions could also provide grain boundary network information
which is unavailable from grain boundary distributions alone. A method of characterizing triple
junction distributions would also allow grain boundary energy distributions to be easily
approximated on a large scale. Grain boundary energy distributions have been extracted over the
full range of grain boundary parameters in a few significant studies, but always with great
experimental effort [33–38]. By enabling triple junction distributions to be generated from
measurements on a section plane, the grain boundary character and energy distributions could be
extracted from this data [39,40]. In short, a method of fully characterizing triple junction
distributions provides an indispensable tool for integrated materials engineering.
8
This work will focus primarily upon fully characterizing twin-dependent triple junction
distributions. This reduces the dimensionality of the problem and allows for sufficient
experimental data to be collected. It may be argued that including a coherent twin boundary
debilitatingly limits the application of the distribution. While the application is seriously
reduced, there are still a significant number of materials to which this distribution can be applied.
There are many FCC materials with low to moderate stacking fault energy that form an
abundance of annealing twins. Any of these materials could be successfully examined and, more
specifically within these materials, the grain boundary engineered alloys could be investigated.
These alloys contain a preponderance of annealing twins and would serve as prime candidates
for analysis. In addition, these alloys have already been the source of intense grain boundary
studies given their impressive properties. This provides a good foundation of knowledge upon
which to build. Focusing upon twin-dependent triple junction distributions enables the first
comprehensive characterization of triple junctions which would otherwise remain unobtainable.
When analyzing these results, researchers should be able to put them in the proper context of
their limitations as well as their implications. In addition, this work prepares the way for a more
generalized approach to measuring triple junctions by establishing the needed foundational work.
1.4 Shortcomings of Current Three-Dimensional Characterization Techniques for
Characterizing Triple Junction Distributions
Three-dimensional characterization techniques have seen great advances over the past
decade and will continue to increase in efficiency and efficacy [41,42]. The techniques
mentioned here are those capable of characterizing polycrystalline microstructures on the grain
and grain boundary scale. These techniques include methods of high-energy X-ray tomography
9
or diffraction and serial sectioning methods such as three-dimensional electron back-scatter
diffraction (EBSD) by mechanical sectioning, focused ion beam milling, or laser ablation [43–
55]. These techniques have advantages over traditional two-dimensional techniques in that they
can reveal information which cannot be extracted from two-dimensional planes [56,57]. Despite
these advantages and advances in automated techniques [58,59], the three-dimensional
techniques are typically expensive and tend to require substantial time and effort to carry out.
Given the time and effort required to collect data, current three dimensional approaches
are incapable of providing the quantity of data necessary for practically forming statistically
reliable triple junction distributions. For grain boundary distributions, Morawiec recently
showed that despite the great advances in the ability to collect three dimensional datasets, these
datasets are still relatively small compared to the quantity of measurements required for
reasonable resolution and statistical reliability [60]. He estimated that for the largest dataset
measured at the time, the relative error of the grain boundary distribution at 1 MRD was
approximately 53% at best. The relative error for the distribution at its peak was approximately
34%. These error estimates were made for a 5-dimensional grain boundary distribution which
included both the boundary misorientation and plane orientation. Smaller datasets would likely
result in higher estimates of relative error over the full boundary distributions.
While the generated grain boundary distributions will require more measurements to
reduce the approximate relative errors, triple junction distributions would require substantially
more data. This is because the quantity of data for minimal statistical reliability increases as the
dimensionality of the characterized feature increases. Bunge approximated that the quantity of
measurements for minimal statistical reliability of a distribution is approximately N10 , where N
10
is the dimensionality of the desired feature [61]. While grain boundaries may be
macroscopically characterized by 5 dimensions or parameters, a twin-dependent triple junction
requires 6. The data required for generation of a twin-dependent triple junction distribution is
then approximately an order of magnitude greater than that for a grain boundary distribution.
This number increases greatly for a generalized triple junction distribution. It may be concluded
that if it is challenging for the three dimensional techniques to generate grain boundary plane
distributions with an acceptable relative error, then they would be ineffective or impractical
when the quantity of data must be increased an order of magnitude for twin-dependent triple
junction distributions.
1.5 Advantages of a Stereological Approach
Despite the inability of current three-dimensional techniques to generate reliable triple
junction distributions, the technology exists to generate these distributions through stereology.
As defined by Russ, “stereology is the science of the geometrical relationships between a
structure that exists in three dimensions and the images of that structure that are fundamentally
two-dimensional,” [62]. In this instance, the two-dimensional images would be EBSD maps
from a section plane through the triple junctions.
There are several advantages to characterizing a triple junction distribution by a
stereological technique. Primarily, a stereological technique could supply the quantity of data
necessary for statistical reliability. The nature of a three dimensional technique requires
characterizing each microstructural feature from many progressive planes in order to measure the
feature with a reasonable resolution. A stereological technique will typically require less time
since each individual feature requires a single measurement. From a single measurement applied
11
to many similar features, the three dimensional data is extracted. As previously explained,
Bunge gave the rough estimate that approximately 610 triple junctions would be required for
minimal statistical reliability of a twin-dependent triple junction distribution [61]. Note that this
is an approximate value. It will be shown later that this value is a little low but of the correct
order of magnitude. Currently, EBSD cameras are being sold with the capability of indexing up
to 1400 points per second and speeds have been continually increasing. While it might still take
anywhere from days up to a few weeks to measure the required quantity of data, it is an
automated process and not out of the question.
Additionally, a stereological method does not require reconstruction of a three-
dimensional polycrystalline structure. For many of the three-dimensional techniques it is
estimated that researchers often spend more time in reconstruction than in data collection
[42,63]. Reconstruction generally may consist of data handling activities such as image
processing or alignment. Changes in the reconstruction process have been shown to have a
significant effect on results and great care must be taken to ensure the data is reconstructed
properly [38]. Given the tedious task of reconstructing polycrystalline structures, care must be
taken to ensure errors are not inadvertently introduced into the datasets through the image and
data processing steps. For a stereological technique there is no polycrystalline reconstruction
process and much of the data handling can be automated. For good statistical reliability the data
collection time is still significant, but does not require attention to alignment. In addition, the
measured features can be acquired from EBSD scans over many representative regions of a
material rather than from a single volume. These reductions in the required effort for image and
section processing remove the possibilities of potential errors from these activities. This is not
12
to say that a stereological method is more accurate than a three dimensional approach. As will
be emphasized later, this approach provides good results but it is an approximate technique that
relies on several assumptions. The emphasis here is that the labor involved in forming
distributions from a stereological technique appears significantly reduced from what is required
from common three dimensional approaches.
As EBSD systems are commonplace in materials characterization labs, a stereological
technique would also put twin-dependent triple junction characterization into the hands of
students and researchers everywhere. Many of the advanced three-dimensional characterization
techniques, such as the variations of automated serial sectioning or high-energy X-ray
diffraction, require expensive highly specialized equipment which is available to only elite
research programs. The experimental setup and requisite software for an EBSD-based
stereological method are widespread and relatively inexpensive. This accessibility allows the
technique to be used by many researchers and also allows the technique to be easily incorporated
into larger studies.
This work describes the framework of a characterization method capable of
characterizing twin-dependent triple junction distributions from a single section plane. The
developed foundational material, adopted stereology, and methods of implementation will be
described. The efficacy of the technique will be demonstrated by some quantitative measures as
well as by plots of results generated from simulated distributions. Fundamental material for
characterizing general triple junction distributions will also be discussed along with potential
areas for future development.
13
CHAPTER 2
THEORY
2.1 Triple Junction Parameters
In polycrystalline microstructures a triple junction is formed by the common intersection
of three grains and is composed of an intersection line or grain edge, three grain boundaries, and
three crystal lattices. Given these components, a triple junction is characterized by 17
macroscopic parameters consisting of a triple line direction t (2 parameters), three lattice
orientations Ag , Bg , Cg (3×3 parameters), and three grain boundary plane normals 1n , 2n , 3n (3×2
parameters) as indicated in Figure 2.1. The line direction t and boundary plane normals are
given by and , the azimuthal and polar angles respectively. The lattice orientations are
given by Euler angles 1 , , 2 in the Bunge convention [64]. Microscopic translations between
grains, sometimes used in grain boundary characterization, are not considered in this work.
All 17 macroscopic parameters are not independent and steps may be taken to reduce the
dimensionality of the space. By characterizing the lattice orientations using lattice
misorientation, three parameters corresponding to the redundant misorientation may be
eliminated. This is according to the relation:
I CABCAB ggg
Where I is the second rank identity matrix and misorientations are defined by
T
ABAB ggg . The three parameters corresponding to the external or laboratory reference frame
14
have been eliminated using this approach. Given this exclusion, triple line directions and
boundary plane normals must be referenced from an internal reference frame or one of the
crystal lattices. Three redundant parameters from the boundary normals and triple line direction
may also be arbitrarily removed to reduce the parameterization to 11 independent parameters.
Figure 2.1 – All 17 parameters of a fully characterized polycrystalline triple junction.
As mentioned in the Introduction, Bunge estimated that approximately N10
measurements are required for generating a microstructural distribution with minimal statistical
reliability, where N is the dimensionality of the microstructural feature [61]. Clearly 1110 triple
junction measurements are currently beyond the capabilities of any experimental technique. In
order to reduce the dimensionality of the triple junction to measurable levels and make the
function experimentally tractable, a coherent twin boundary may be introduced into the triple
junction. In cubic materials the boundary plane of a coherent twin boundary is always a {111}
crystal plane. The coherent twin boundary misorientation consists of a 60 degree rotation about
a 111 direction corresponding to the boundary plane normal. If the reference frame is rotated
n2(φ
2,θ
2)
n3(φ
3,θ
3)
gA(ϕ
1,Φ,ϕ
2)
n1(φ
1,θ
1)
gC(ϕ
1,Φ,ϕ
2)
t (φ,θ)
gB(ϕ
1,Φ,ϕ
2)
1e2e
3e
15
such that the 111 twin boundary normal sits in the [111] direction, the twin boundary normal
becomes a known parameter. Therefore the constraints of the coherent twin boundary reduce the
number of independent parameters by five, consisting of the known twin boundary normal and
twin boundary misorientation. The twin-dependent triple junction distribution is then fully
characterized by a boundary plane normal, a single misorientation, and a dihedral angle between
the fixed twin plane normal and the remaining undefined boundary plane normal.
Conventions of the characterization will be established as follows: Of the two
misorientations other than the twin boundary, the misorientation with the minimum rotation
angle will be selected as ABg . Grain B is selected opposite the twin and grain A neighboring the
twin. The remaining grain will be identified as grain C. The ABg boundary plane will be
labeled as plane 1 with boundary normal 1n and the twin boundary as plane 2 with normal 2n .
The remaining grain boundary plane will be labeled as plane 3 with normal 3n . Clearly, in the
experimental two-dimensional section plane, grain A will occur both clockwise and
counterclockwise from the twin. The apparent inconsistency of either clockwise or
counterclockwise locations in the section plane has no significance in the three dimensional
microstructure. If two twin boundaries are present within a single triple junction, the twin
boundary with character closest to an ideal twin boundary is selected as the known twin with
normal 2n . The remaining twin is then managed with the same conventions as any other
boundary.
By convention each triple junction will be characterized by a misorientation ABg , a
boundary normal 1n , and a dihedral angle between 3n and the fixed twin boundary 2n . As
16
explained, the elimination of the laboratory or sample reference frame reduces the
dimensionality of the characterization by three parameters and all parameter values will be
referenced from a crystal reference frame. Grain A will be assigned as the crystal reference
frame with a standard Cartesian coordinate system attached to the crystal lattice. From this
coordinate frame all oriented parameters will be referenced. To distinguish values in the sample
or laboratory coordinate frame from those within the crystal coordinate frame, the subscript A
will be appended to parameters within that frame [65]. As the A2n plane or twin boundary must
be constrained to the [111] direction, after identifying ABg the grain A orientation Ag will be
selected such that the twin normal lies in the [111] direction. This is accomplished by applying
cubic symmetry operators to the initial Ag orientation and selecting the operator which provides
A2n in the [111] direction and a minimum rotation angle. This new Ag will then be used as the
distribution reference frame. This process is given by the relation:
initial
ArotateAA gCgg A ]111[
1112n
Where ]111[rotateC are elements of SO(3) belonging to the octahedral (or cubic) symmetry
group. The selected ]111[rotateC symmetry operator will also be applied to grain B or Bg so that
the ABg misorientation remains true to its original value. This operation does not reduce the
symmetry of Bg as for Ag . The reduced six parameter triple junction distribution is then given
by: ABAA g ,,, 11 where A1 and A1 are the spherical coordinates of A1n . The
characterization and conventions are illustrated in Figure 2.2. While six parameters provide a
large distribution space, the order of 610 measurements is within the capabilities of current two-
dimensional automated electron backscatter diffraction (EBSD) mapping technology. The
17
methodology to extract the three-dimensional triple junction distribution from two-dimensional
EBSD measurements in a section plane relies on the adoption of established grain boundary
plane stereology [66]. This adoption is described in Section 2.7 on page 43.
Figure 2.2 – Six parameter characterization and conventions of a triple junction within the
twin-dependent triple junction distribution.
2.2 The Parameter Space
The triple junction parameter space is given by the region enclosed by the parameter
domains. In the method followed by Saylor for grain boundary distributions [34], the continuous
triple junction distribution ABAA g ,,, 11 will be approximated by discrete representations
over the triple junction parameter space. The discretization makes possible the practical
experimental generation of the distribution and this method has been carried out numerous times
in previous studies [31,37,66,67]. Each parameter will be divided into equal discrete units.
These units correspond to equal volume cells in the space or parameter array which prevents
biasing the distribution for any parameters associated with a polar angle over the unit sphere
[68]. The parameter space is shown in Figure 2.3. For visualization purposes, in the figure the
α
n3A
(α)
gAB
(ϕ1,Φ,ϕ
2)
(Minimum
Misorientation)
n1A
(φ1A
,θ1A
)
t
n2A
[111]
Grain A
Grain B
Grain C
Plane 1
Plane 3
Plane 2
(Coherent Twin)
18
space has been broken into two 3-dimensional arrays separating 21 ,, ABg from
AAA 111 ,n and dihedral angle . This also conveniently divides the misorientation parameters
from the triple junction plane parameters. In reality, the parameter space consists of a 6-
dimensional array with no division between parameters. The domain of the A1n boundary plane
normal coordinates A1 and A1 is parameterized by the spherical coordinates A1 and A1cos
over the range of 20 1 A and 1cos1 1 A . The domain of the dihedral angle is
parameterized by cos over 1cos1 . The domain of the Euler angles 1 , , 2 is
parameterized by 1 , cos , and 2 over 20 1 , 1cos0 , and 20 2 . The
adopted parameters A1cos , cos , and cos have been used in place of A1 , , and as
these parameterizations provide equal volume cells when equally divided.
Figure 2.3 – Parameter space of the twin-dependent triple junction distribution. The
misorientation space and plane parameter space have been separated into two three-
dimensional spaces. An example discrete cell is visible in both spaces.
19
The discretization of the array and equivalently each parameter determines the resolution
of the distribution. The resolution increases as the discretization increases and the size of the
cells decreases. As noted by Rohrer et al., while boundary properties begin to vary significantly
at resolutions of just 10 degrees, it is uncommon to measure boundaries with a resolution less
than 5 degrees. An appropriate resolution may therefore be designated from 5 to 10 degrees
[68,69]. While this is a justifiable guideline, an increased resolution or increase in the total
number of cells also increases the amount of measurements required to reliably form the
distribution. While a 10 degree resolution provides sufficient topological detail so as to link
properties to character, it might require too much data to reliably form a distribution. Therefore
conclusions could not be reliably made despite the suitable resolution. In this work a resolution
of 10 degrees is typically used, but the 15 degrees resolution will be provided as an alternative
distribution which is easier to form reliably but with less topological detail.
To form the discussed resolutions, 1 and A1 are equally divided into 36 or 24 cells,
cos and 2 are divided into 9 or 6 cells, and A1cos and cos are divided into 18 or 12
cells. These discretizations correspond to resolutions of approximately 10 or 15 degrees
respectively. To assist with visualization of the array structure, a single example cell has been
marked in each of the three dimensional units within Figure 2.3. In practice, each unit is entirely
composed of individual cells and every cell corresponds to distinct discrete parameter values of
the triple junction distribution ABAA g ,,, 11 . For every measured triple junction a unit
value is added to its corresponding cell in the parameter space or array. The distribution is
formed after adding a statistically significant number of triple junction values to the array. To
20
convert the distribution values to multiples of random distribution (MRD), each cell may be
normalized by the average value of all the cells.
2.3 Reducing the Distribution Space to a Fundamental Zone
2.3.1 Reducing the Distribution Space by Geometric Constraints
The above parameterizations take no account for energetically imposed geometric
constraints occurring in actual polycrystalline triple junctions. In an actual triple junction it is
energetically unfavorable for a dihedral angle to exceed 180 degrees. With A2n in the [111]
direction, there are many combinations of A1n and cos that exceed this criteria. Given this
constraint, it is obvious that there is a substantial region of the parameter space which does not
pertain to actual polycrystalline triple junctions. In other words, the space of the triple junction
distribution is a subregion of the parameter space.
The discrete cells within the parameter space may be divided into three classes: cells
which lie entirely within the distribution space, cells entirely outside of the distribution space,
and cells which lie on the border of the distribution space and the empty region outside of the
distribution. Each cell class is determined according to whether the parameter values within the
class cells pertain to triple junctions with dihedral angles less than or greater than 180 degrees.
Clearly, the border cells are cells where only a fraction of the cell parameter values correspond to
triple junctions with dihedral angles less than 180 degrees. The border cells may be alternatively
described by considering the volume of the distribution space with respect to the cell and
parameter space volumes. The volume of the triple junction distribution is exactly 50% of the
parameter space volume, though the borders of the volume do not coincide with the discrete cell
borders. The distribution volume therefore indiscriminately sections through cells which lie at
21
its edges resulting in border cells with only a fraction of their volume corresponding to
distribution triple junctions.
The distribution space pertains to a fraction of the cells in the parameter space depending
on the resolution of the distribution. For a fixed misorientation and a resolution of 10 degrees,
6575 of the 11664 parameter space cells pertain to the distribution. As explained, cells outside
of the distribution subregion are empty space. Of the 6575 distribution cells, 1493 border the
distribution volume and the empty space. While 1493 cells border the distribution only a
fraction of the cell volume within these cells is enclosed by the distribution. The distribution
therefore entirely encompasses 5082 cells and a fraction of 1493 cells for a total cell volume of
5832 equal volume cells, (50% of the parameter space volume). For a fixed misorientation and a
resolution of 15 degrees, 2062 of the 3456 parameter space cells pertain to the distribution. Of
the distribution cells, 668 cells lie on the border of the distribution. As expected, the distribution
volume consists of a cell volume of 1728 equal volume cells, (50% of the parameter space
volume).
The dihedral angle geometric constraint is not only responsible for excluded cells in the
parameter space but also accounts for a sampling bias in the distribution. This bias is caused by
the border cells where only a portion of their cell values exceed 180 degrees. The distribution
array consists of equal volume cells and relies on those cells being filled with values according to
their occurrence. Generally, for a random distribution each cell would be filled with a uniform
frequency since every cell has an equal volume [68]. In the triple junction distribution this is not
the case. All cells remain equal volume, though a varying number of cell values are excluded
from the distribution. In effect the cells are not equal volume cells anymore despite no change in
cell dimensions. Accordingly, cells with excluded values will be filled at a slower rate than the
22
remaining cells even when a uniform distribution is measured. Corrections for this geometric
sampling bias as well as other sampling biases will be addressed in Section 3.
2.3.2 Reducing the Distribution Space by Selecting a Fundamental Zone
This distribution is measured in FCC materials. Given unconstrained symmetries, the
distribution space may be divided into symmetrically equivalent regions termed fundamental
zones or asymmetric domains. Here a fundamental zone is defined as a region of the distribution
space where each unique triple junction is represented only once. Across all the fundamental
zones within the distribution space there exist multiple symmetrically equivalent triple junctions.
While equivalent, these triple junctions pertain to distinct and difficult to correlate parameter
values. In order to distinguish equivalent triple junctions, a single fundamental zone must be
selected from all potential characterizations [34,65].
Figure 2.4 – (a) Triple junction not following plane normal convention of all normals
pointing in the same direction about the triple line. (b) Triple junction following plane
normal convention of all normals pointing in the same direction about the triple line.
n1A
(φ1A
,θ1A
)
α
n3A
(α)
gAB
(ϕ1,Φ,ϕ
2)
(Minimum
Misorientation)
n2A
[111]
t
(a)
n1A
(φ1A
,θ1A
)
α
n3A
(α)
gAB
(ϕ1,Φ,ϕ
2)
(Minimum
Misorientation)
n2A
[111]
t
(b)
23
The triple junction parameter space allows inversion symmetry of the plane normals as
they may be formed for either side of the plane. Given the inversion symmetry of the crystal
lattice, these normals correspond to crystallographically identical directions. An example of this
is given in Figure 2.4. Figure 2.4a and Figure 2.4b correspond to crystallographically identical
triple junctions but the inverted boundary plane normal provides distinct A1n values. In order to
constrain the distribution inversion symmetry, the azimuthal angles i or normals in in the sample
frame will always be defined according to the following convention: 2 or equivalently 2n will
point into grain A and 1 or 1n and 3 or 3n will point in the same direction as 2n , whether
clockwise or counterclockwise about the triple line. While all in vectors will be transformed to
the Ag crystal coordinate frame, the convention is maintained through the transformation and
will eliminate the inversion symmetry of the parameter space. This convention is illustrated in
Figure 2.4b.
This convention also constrains the junction boundary normals to consistently point in the
same direction about the triple line. Without all boundaries consistently pointing in the same
direction, boundary normals with greater than 180 degrees between them would not necessarily
correspond to boundary planes with angles greater than 180 degrees. This is demonstrated in
Figure 2.4. In the figure both triple junctions are identical and both have planes with dihedral
angles less than 180 degrees between them though that is not true for the boundary normals. As
the boundary normals in Figure 2.4a do not follow the established convention, the dihedral angle
between A1n and A3n exceeds 180 degrees despite the legitimacy of the junction geometry. This
24
convention is therefore necessary for not only reducing inversion symmetries but for simply and
uniquely characterizing junction geometry.
In addition to inversion symmetries, the distribution is also subject to the remaining
unconstrained cubic crystal symmetries. For a cubic crystal orientation g there exist 24
equivalent orientations by the relation: gCg i where iC are the cubic symmetry operators and
i = 1 to 24. As grain A or Ag has been rotated and constrained such that A2n points in the [111]
direction, the active symmetry operators for this grain have been reduced. For the distribution
misorientation ABg there exist 72 potential equivalent misorientations by the relation:
TAjBiAB gCgCg where i = 1 to 24 and j = 1 to 3. The three remaining jC symmetry
operators correspond to the tri-axial symmetry about [111] which remains unconstrained after the
A2n rotation to the [111] direction. Given the conventions of the distribution, misorientations
will only be considered with respect to Bg and not Ag as for TBiAjBA gCgCg .
Given that the triple junction plane parameters are defined within Ag , for every
equivalent TAjBiAB gCgCg there exist equivalent plane parameters according to
iAj
eq
iA C nn . As emphasized by Morawiec for grain boundary plane distributions [70], each
symmetry element simultaneously couples both Ag and iAn determining equivalent plane
parameters for every equivalent misorientation. A single fundamental zone may be designated
by selecting a unique set of symmetry operators for each misorientation which simultaneously
selects a unique set of associated plane parameters. As the methodology of selecting
fundamental zones for misorientations is already well established [71–74], this methodology will
be adapted to the triple junction distribution.
25
The used misorientation space, 20 1 , 1cos0 , and 20 2 , is a
subregion 1/8th the size of the full space where 20 1 , 1cos1 , and 20 2 .
Since 97281 , the misorientation space subregion encompasses only 9 equivalent
misorientations of the 72 misorientations within the full space. As described by Neumann [72],
the full set of 72 misorientations may be divided into 24 classes of three misorientations. This is
according to the 24 symmetry operators within grain B and the three active symmetry operators
within grain A. The misorientations within each class consist of three identical misorientation
angles and three misorientation axes. The three axes may be generated by transforming one of
them by the grain A symmetry operators. The 9 misorientations within the misorientation space
are selected from the 72 misorientations within the full space with disregard to class. Most
frequently misorientations from 9 different classes are selected though misorientations within the
same class do occasionally occur.
To designate a single representative fundamental zone both a misorientation axis and
angle must be consistently selected from the 9 equivalent misorientations. Since most frequently
the misorientations are from 9 different classes with 9 different misorientation angles, it is
usually sufficient to select the misorientation with the smallest angle. This selection rule is
sufficient even if misorientations from the same class occur as long as they are not the minimum
angles within the 9 present. If two misorientations from the same class occur with identical
minimum misorientation angles, then a misorientation must be further selected by its axis. The
three misorientation axes corresponding to the identical misorientation angles within a class sit in
one of three zones defined by the symmetry within grain A [72]. These zones are depicted in
Figure 2.5 on the standard [111] stereographic projection. When minimum misorientation angles
26
of the same class occur within the misorientation space, the angle with a misorientation axis in
zone 1 is selected as the representative misorientation. If a misorientation with axis in zone 1 is
not present the misorientation with an axis in zone 2 is selected. These selection criteria identify
a single unique representative misorientation from all symmetrically equivalent misorientations
and concurrently select a single fundamental zone for all distribution parameters.
Figure 2.5 – The standard 111 stereographic projection and the three possible
misorientation axis zones. For every misorientation class, each of the three misorientation
axes pertains to one of the three labeled zones.
2.3.3 Examining the Distribution Space
A simulated distribution with a resolution of 10 degrees is depicted in Figure 2.6. The
method of forming a simulated distribution was adapted from Saylor et al. [66] and Morawiec
[70]. The figure consists of stereographic projections of A1n for progressing values of cos
from 1 to -1. As distribution values are uniform within each cell, the number of stereographic
projections in Figure 2.6 corresponds to the cos discretization with cos at center cell
values. All stereographic projections are for a fixed misorientation which in this case is a 20
degree rotation about [952]. This misorientation axis was originally selected as it represents a
truly general boundary with no special symmetries [34,68,75,76]. The developed method of
Zone 3
111 111
111
111
112 121
211
Zone 1 Zone 2
27
weighting distribution values, as introduced later in this work, should compensate for special
symmetries making the example axis selection arbitrary. The southern and northern hemispheres
of the stereographic projections have been plotted separately in Figure 2.6a and Figure 2.6b.
To assist in understanding the distribution plot, it may be described in coordination with
the distribution space in Figure 2.3 on page 18. The entire figure corresponds to a single cell in
the misorientation space in the left of Figure 2.3, which is a single fixed misorientation. Each
stereographic projection is a slice through the plane parameter space in the right of Figure 2.3,
corresponding to a single cos value and the entire domain of A1cos and A1 . Following
the stereographic projections from left to right and top to bottom corresponds to stepping through
the plane parameter space slice by slice beginning at the slice adjoining cos at 1 and
progressing to -1. In other words, the stereographic projections are generated by slicing the
plane parameter space one cell layer at a time progressing out of the page. The discrete cells of
the distribution array are visible in the figure as the distribution has not undergone any sort of
smoothing or averaging technique. This accounts for the projections’ pixelated appearance.
Given that the distribution is being displayed exactly as it exists in the array structure, the quality
of the raw technique may be visibly analyzed from these images.
28
Figure 2.6 – (a) Southern hemispheres of the A1n stereographic projections for decreasing
values of cos . The distribution is a simulated triple junction distribution within a
single fundamental zone. The peak value is found at 1211 An and 73.0cos or
1033 An . (b) Northern hemispheres of the A1n stereographic projections for
decreasing values of cos . The distribution is a simulated triple junction distribution
within a single fundamental zone.
29
The designated distribution peak sits in the southern hemisphere at 1211 An and
73.0cos or 1033 An . The peak location at 73.0cos accounts for increasing
peak intensities as cos approaches 73.0 . The empty space in each stereographic projection
corresponds to junction locations where a dihedral angle is greater than 180 degrees, or rather to
locations of infeasible junction geometry. This geometrically infeasible empty region also
accounts for the two empty stereographic projections in the northern hemisphere of Figure 2.6.
In these locations there are no parameter values with dihedral angles less than 180 degrees,
therefore both stereographic projections consist solely of empty space.
In a common stereographic projection with crystal symmetry, the northern and southern
hemispheres are identical and overlay without contradiction. Such is not the case for the
boundary planes of triple junction distributions. Given the previous discussion on defining the
fundamental zone, it is clear that the inversion of a single plane normal is inconsistent with the
established inversion symmetry conventions. For clarity, the triple junction distribution peak
will be used as an example. The peak of the distribution sits in the southern hemisphere with the
value of 1211 An and 73.0cos or 1033 An . This junction is shown in Figure 2.7a.
By reversing A1n to the 211 direction, as in Figure 2.7b, the triple junction normals are no
longer consistent with the established inversion symmetry convention and do not lie in the same
direction about the triple line.
30
Figure 2.7 – (a) Triple junction at simulated distribution peak with 1211 An ,
1112 An , and 1033 An . (b) Triple junction with inverted A1n value from the
distribution peak A1n value. 2111 An , 1112 An , and 1033 An . (c) Triple
junction with 2111 An , 1112 An , and 5269.,8433.,1058.3 An .
While reversing a single junction boundary plane normal is inconsistent with the
established conventions, there are configurations of triple junctions in the distribution which
have inverted A1n boundary planes. For instance, as explained the distribution peak sits in the
southern hemisphere of the stereographic projection. In the northern hemisphere of the
distribution stereographic projection lies a different unique junction with values 2111 An and
73.0cos or approximately 5269.,8433.,1058.3 An as in Figure 2.7c. The
distribution values of 1211 An and 73.0cos and 2111 An and 73.0cos only
differ by the inversion of A1n , though they represent distinguishable unique triple junctions.
These junctions therefore are not interchangeable and the stereographic projections of their
distribution values do not coincide in the northern and southern hemispheres. From this example
it is also clear that equivalent cos distribution values do not necessarily correspond to
equivalent A3n values.
31
2.4 Weighting the Distribution Values
2.4.1 Sampling Biases within the Distribution
It was explained that given the discretization of the parameter space there exist cells
which border the distribution subspace. A fraction of the values within these cells sit outside of
the distribution space and are excluded from the distribution. These cells cause a sampling bias
within the distribution. If this bias were to go uncorrected, intensity values within cells would
not accurately represent the frequency of occurrence for those cells. The sampling bias from
geometric constraints is not the only bias that has been introduced into this distribution. Another
bias for A1n and A3n has been created as the result of only selecting triple junctions with an
associated twin boundary. This bias has been further augmented by rotating the Ag frame such
that A2n consistently points in the 111 direction. As A2n always sits in the 111 direction, the
junction triple line always sits in the 111 plane or on the stereographic projection in a direction
along the 111 great circle. This great circle is shown in Figure 2.8.
Figure 2.8 – The standard 001 stereographic projection and the labeled 111 zone. All
triple lines for the twin-dependent triple junction distribution lie along the 111 zone.
[111] Zone or
Great Circle
111 001
100
010
32
The A1n and A3n directions always sit in the plane of the triple line. These planes are the
planes of the 111 zone where all planes within the zone are parallel to the 111 direction or
zone axis [77]. In addition to being parallel to the 111 zone axis, it should be emphasized that
every plane of the zone contains the zone axis as a possible direction. Since A1n and A3n sit
exclusively in these planes they sample the 111 and 111 directions more frequently than any
other direction.
An alternative and perhaps simpler way of observing the A1n and A3n sampling bias is
by examining the geometry of a triple junction within the space. The peak triple junction in
Figure 2.7a is a suitable example. In the figure, according to the established convention, A2n
points in the 111 direction. It can be imagined that through variations of triple junctions, A1n
and A3n swing along the triple line plane shown in the figure as a grid. Through varied junction
geometries the junction plane may rotate about 111 or A2n , but it is fixed to that direction. As
A1n and A3n approach the A2n pole they are always approaching 111 or 111 and taking on
that value.
2.4.2 Correcting the Sampling Biases within the Distribution
The sampling biases listed above are shown in Figure 2.9. Figure 2.9a and Figure 2.9b
consist of a simulated random distribution which in this case has not been corrected for the
present sampling errors. While the value of the distribution should be 1 everywhere, in this case
it varies according to the sampling biases in the distribution.
33
Figure 2.9 – (a) Southern hemispheres of the A1n stereographic projections for
decreasing values of cos . The distribution is a simulated uniform random triple
junction distribution formed within a single fundamental zone. The peak values are found
as values approach 1111 An and 1cos or 1113 An and 1cos or
1113 An . (b) Northern hemispheres of the A1n stereographic projections for decreasing
values of cos . The distribution is a simulated uniform random triple junction
34
distribution within a single fundamental zone. The peak value is found as values approach
1111 An and 1cos or 1113 An .
As explained, the most frequent values in the distribution occur as both A1n and A3n
approach either 111 or 111 . In the southern hemisphere or Figure 2.9a, the peaks are found
as the values approach 1111 An and 1cos or 1113 An and 1cos or
1113 An . In the northern hemisphere or Figure 2.9b, the intensity increases as the values
approach 1111 An and 1cos or 1113 An . These values are clearly at the limit of
the distribution geometrical values with dihedral angles at 180 degrees and equivalent or inverse
A1n , A2n and A3n values. In practice these values may be approached but they are the limit of
reality since they do not correspond to triple junction geometry.
To correct the triple junction distribution such that its values represent true distribution
values, the distribution may be weighted according to the error present in each cell. The random
distribution shown provides the perfect measure of all present biases and can be implemented in
this correction. To make this correction, each cell of a biased distribution may be multiplied by
the inverse intensity value of the corresponding cell in the random distribution. After this
procedure, all present distribution peaks and valleys are true values since the peaks and valleys
as a result of the sampling biases have been annihilated. This is a simple method which can be
easily applied to all biased triple junction distributions no matter what the actual distribution
features. In practice, a random distribution may be simulated and its inverse weighting factors
generated and stored in a file format. Anytime a triple junction distribution is formed these
weighting factors may be recalled to correct the distribution to representative values.
35
Occasionally a cell on the distribution edge has an exceptionally small value since the
majority of the space within it lies outside the distribution. When these values near zero are
inverted to form weighting factors they become exceptionally large and unstable. These cells
generate singular points within the weighted distribution which obscure its true features. These
cells must be filtered from the distribution according to their instability. This artificial reduction
in distribution space introduces a small error into the distribution, but is a necessary result of the
weighting process. Intuitively this error should decrease as the cell resolution increases.
The simulated distribution in Figure 2.6 has been weighted with a uniform random
distribution to provide true values. This distribution was formed from 5E5 simulated triple
junctions at a fixed misorientation. The simulated dataset is about an order of magnitude beyond
what is experimentally practical for the entire distribution, but the intention is to demonstrate the
success of the methodology. Steps can be taken to improve convergence and the rates of
convergence will be addressed in CHAPTER 4. The unstable distribution edge cells were
filtered from this distribution which accounts for the jagged distribution edges in the projections.
It is visually evident from the minor areas removed that the majority of the filtered cell volumes
were outside of the distribution. In this distribution the filtered cell volumes account for .7% of
the distribution space.
2.5 Distributions with Unequal Volume Cells
In this work the misorientation Euler angles 1 , , and 2 were parameterized by 1 ,
cos , and 2 . The A1n boundary plane normal coordinates A1 and A1 were parameterized
by A1 and A1cos . The dihedral angle was parameterized by cos . As noted, some of
the parameters implement the cosine function to produce equal volume cells over the parameter
36
space. With minor exceptions, this convention maintains a uniform random sampling rate across
the distribution space for grain boundary planes [34,68,75,76]. This has been a standard
approach to discretized grain boundary plane studies and was an appropriate starting point for
characterizing triple junctions. In retrospect of this work, the primary motivation for using equal
volume cells has been largely negated by the inherent triple junction distribution sampling
biases. These biases were corrected by weighting the distribution with a uniform random
distribution, and this weighting would also correct the biases generated by unequal volume cells.
The adopted parameterizations were utilized in order to avoid further sampling biases and this
parameterization maintains uniformity with previous works [34,36,66]. However, Morawiec
[78] has recently shown that the equal volume cell parameterization is responsible for artifacts
over the grain boundary plane distribution. Given this insight, it becomes advantageous to also
produce distributions with unequal volume cells over the distribution space.
The method of generating unequal volume cell twin-dependent triple junction
distributions is almost identical to that of the equal volume approach. The only difference for the
unequal volume procedure is that the cosine functions are removed from the boundary plane
parameterizations. In this work, the 21 ,, ABg Euler angle domains will remain identical
for the equal and unequal volume discretization as this parameterization remains the standard in
the field of texture analysis. The twin-dependent triple junction distribution produced in Figure
2.6 is reproduced in Figure 2.10 with unequal volume cells.
37
Figure 2.10 – (a) Southern hemispheres of the A1n stereographic projections for
increasing values of α. This distribution is identical to Figure 2.6 with the exception that it
is formed with discrete unequal volume cells as opposed to equal volume cells. (b)
Northern hemispheres of the A1n stereographic projections for increasing values of α. This
distribution is identical to Figure 2.6 with the exception that it is formed with discrete
unequal volume cells as opposed to equal volume cells.
38
Clearly in these stereographic projections the small border cells are not the only cells
filtered from the distribution. As the cells at the northern and southern poles of the distribution
become exceptionally small, they also become unstable and are filtered from the distribution. In
this instance, a few of these cells at the poles remain unfiltered and present in the plots. This
distribution is identical to that plotted in Figure 2.6 in that it is composed of 5E5 simulated triple
junctions and .7% of the distribution has been filtered from the distribution volume. The
necessary weighting factors were computed in an identical manner as well.
A key difference between the methods, many of which are apparent in the plots, is the
difference in cell angular dimensions [78]. There are four empty stereographic projections
within Figure 2.10b, whereas there are only two empty projections within Figure 2.6b. The first
two cells of the cosine parameterization within Figure 2.6b, or the equal cell volume
parameterization, span approximately 38.94 degrees. The first four cells in the unequal cell
volume parameterization span an almost equivalent 40 degrees. The shift in other features,
including the distribution peak, is also a result of this difference in cell dimensions as a result of
the parameterizations. While the unequal cell volume parameterization results in unequal
volume cells over the distribution space, each cell is consistent in angular dimensions. The
difference in cell volume and angular dimension between both parameterizations is demonstrated
through a two-dimensional depiction in Figure 2.11. This figure provides a convenient
visualization of the interaction of the parameters with the distribution space.
39
Figure 2.11 – (a) Two-dimensional depiction of the cell volume dimensions and associated
cell angular dimensions for the equal volume parameterization by cos . (b) Two-
dimensional depiction of the cell volume dimensions and associated cell angular
dimensions for the unequal volume parameterization by .
2.6 Interpreting Distribution Plots
Now that the distribution plots have been introduced and the method of forming unequal
volume distributions described, it is appropriate to emphasize additional principles for
interpreting these plots. While the stereographic projection of the triple junction A1n plane at a
fixed dihedral angle may provide plots which appear similar to more conventional
distributions, it should be noted that the more subtle parameter is active within the plots. At
times can cause unanticipated results.
The effect of the dihedral angle parameter on the distribution plots is nicely demonstrated
by comparing the effects of moving the peak within the distribution. As mentioned in Section
2.3.3, the method of forming a simulated distribution was adapted from Saylor et al. [66] and
Morawiec [70]. In this method, the peak within the simulated distribution was produced by
40
conditionally adding random triple junctions to the distribution space according to their
proximity to the peak triple junction. The shape of the peak is determined by the generating
function implemented. In this work, the generating function is Gaussian in nature and adapted
from that used by Saylor [66]. Further details of the process of generating simulated
distributions will be provided in Section 4.1, Validating the Method.
For enhanced visual detail, only the projection containing the peak of the simulated
distribution in Figure 2.6 is shown in Figure 2.12a. The peak of the distribution looks fairly
smooth and the peak intensity appears nicely distributed about the peak value. The plot appears
to properly reflect the Gaussian generating function. The result of using the same generating
function for a different peak value is plotted in Figure 2.12b. In this plot the peak has been
moved to 1221 An and 17410.cos or 3113 An . In a more conventional distribution
plot, such as a pole figure or even grain boundary plane distribution, it is expected that simulated
distributions generated by the same generating function would have similar plots despite a
change in peak location. This is clearly not the case for the twin-dependent triple junction
distribution.
41
Figure 2.12 - (a) Southern hemisphere of the A1n stereographic projection for
73.0cos within the equal volume distribution space. The peak value is found at
1211 An and 73.0cos or 1033 An . (b) Southern hemisphere of the A1n
stereographic projection for 17410.cos within the equal volume distribution space.
The peak value is found at 1221 An and 17410.cos or 3113 An . (c) Southern
hemisphere of the A1n stereographic projection for 100 within the unequal volume
distribution space. The peak value is found at 1221 An and 100 or 3113 An .
The smooth and spherical peak in Figure 2.12a becomes only a strip of a peak in Figure
2.12b. This was the result of just shifting the arbitrary peak. At first glance the change between
Figure 2.12a and Figure 2.12b might be assumed to be an artifact of the varying angular
dimensions within the equal volume cells as described in Section 2.5. A plot of the same
distribution in the unequal volume space is given in Figure 2.12c. This plot appears almost
identical to Figure 2.12b. Given the similarity of Figure 2.12b and Figure 2.12c, it may be
concluded that this is not an artifact of the equal volume space angular dimensions. Plotting the
frequency values from the generating function sheds light on the root cause of the difference in
plot appearance.
The generating function outputs frequency values according to the proximity of the
plotted junction A1n and A3n planes to the peak A1n and A3n planes. Proximity is approximated
42
by the average angular distance between the peak and the plotted junction A1n and A3n planes.
The frequency values increase with proximity to the peak and decrease as the junction character
diverges from the peak. In Figure 2.13, the frequency values are plotted for the stereographic
projections of A1n planes at a fixed cos value. Clearly, the distribution plots in Figure 2.12
agree nicely with the generating function frequency values. The plot differences then are the
nature of the twin-dependent junction space and not an artifact or error.
Figure 2.13 - (a) Frequency values for triple junctions according to their proximity to the
peak value of 1211 An and 73.0cos or 1033 An . (b) Frequency values for
triple junctions according to their proximity to the peak value of 1221 An and
17410.cos or 3113 An .
The intensity for every point in the twin-dependent triple junction distribution plots is the
result of both the A1n and A3n planes. While the stereographic projection is for the A1n planes,
these planes are selected for a fixed dihedral angle . The value is the dihedral angle
between the twin A2n and A3n plane. Therefore, when examining these plots, points within the
projections correspond to the full twin-dependent triple junction geometry and not just the A1n
plane. In addition, the triple junctions have geometric constraints associated with them. Not
43
only must the dihedral angles remain less than 180 degrees, but the A1n , A2n , and A3n planes
must remain in a single plane. Therefore, the proximity of a triple junction to a peak orientation
after a modification to the A1n plane orientation depends on the direction of the change with
respect to the triple junction plane. If A1n moves in the plane of A2n and A3n , A3n does not
move to remain in plane and maintain the fixed value. This would result in a higher
frequency value. If A1n moves an equal distance out of the plane, A3n must shift to remain in
plane and maintain the fixed value. This would result in a lower frequency value. The plots
of results from actual twin-dependent triple junction distributions will assist in knowing whether
changes to the simulated generating function are necessary.
In summary, the differences between the plots in Figure 2.12 are the result of changes in
the full junction geometry and not just A1n . While the method of plotting the twin-dependent
triple junction distribution facilitates viewing the six-dimensional space, care must be taken so as
not to judge results with preconceived notions of how conventional distributions should appear.
2.7 Adoption of the Grain Boundary Stereological Approach
2.7.1 Implementation of Grain Boundary Stereology to Characterize Triple Junctions
The majority of the parameters required to fully characterize a triple junction containing a
coherent twin boundary are measurable from a two-dimensional section plane. As depicted in
Figure 2.14a, from a section plane the grain orientations and plane traces are apparent.
44
Figure 2.14 – The progression of steps to characterize a twin-dependent triple junction
from a section plane. (a) Identify the coherent twin trace in the section plane. (b) Apply
developed conventions to the twin-dependent triple junction grains and trace normals. (c)
Identify the twin boundary plane orientation by selecting the potential trace normal
nearest a 111 direction. Transform the normal to the 111 direction. (d) Apply the grain
boundary stereology by generating potential 1n normals. For every 1n normal the
corresponding 3n may be found and both transformed to the crystal coordinate frame.
45
While the traces don’t indicate the orientation of the junction planes, the traces indicate a
range of possible orientations. This information may be used to identify the actual orientation of
the coherent twin boundary and approximate the orientations of the remaining planes. The
method of accomplishing this will be described progressively with Figure 2.14.
Commercial EBSD software already contains algorithms for identifying coherent twins
according to the proximity of a boundary misorientation angle to a twin misorientation and the
boundary trace to the twinning plane trace [79,80]. As depicted in Figure 2.14a, once an EBSD
map is generated, the triple junctions containing a coherent twin may be identified as a subset of
all the triple junctions. After each twin is identified within every junction, misorientation ABg
is identified as the minimum misorientation. The normals to each trace and Grain A, B, and C
can then be assigned according to the established conventions as depicted in Figure 2.14b. As
illustrated in Figure 2.14c, the normal vector to the twin plane, or 2n as identified in the sample
or laboratory reference frame, must be normal to the trace of the twin in the section plane.
Therefore, a range of potential normal vectors may be identified over a hemisphere about the
trace. Note that when 2n is represented by the spherical angles 2 and 2 , angle 2 is known
while the range of 2 values provides potential normals. As this method is applied to FCC
materials, it is known the twin boundary normal points in a 111 direction within grain A. The
potential normals may be transformed to the crystal coordinate system according to the
transformation:
22 nn AA g
46
The normal closest to a 111 direction is selected as the true normal and the grain A
reference frame, or Ag , is rotated such that A2n points in the 111 direction according to the
relation:
initial
ArotateAA gCgg A ]111[
1112n
Where ]111[rotateC are elements of SO(3) belonging to the octahedral (or cubic) symmetry
group. The selected ]111[rotateC symmetry operator is applied to grain B, or Bg , so the ABg
misorientation remains consistent. Once A2n points in the 111 orientation it becomes known
and doesn’t require representation in the distribution space. The only unknown parameters
remaining within the triple junction are 1 and 3 or the polar angles of 1n and 3n . In order to
complete characterization of the triple junction, only 1n or rather 1 must be identified. Once this
plane is known, the constraints of the junction geometry allows 3n to be constructed solely from
the known value 3 .
To characterize 1n we can conveniently adopt the grain boundary stereology as already
developed by Saylor et al. A brief summary of this stereology will be provided here, but further
details and proofs may be found in the original publication of the technique [66]. This
stereology functions in a similar manner to what has already been described and demonstrated
for identification of A2n in Figure 2.14c. For a given grain boundary trace, potential plane
orientations are obtained. For every potential boundary orientation and associated
misorientation, the boundary length of the corresponding trace is added to a cell within a
discretized five parameter grain boundary space. The discrete space acts as an accumulator array
since potential boundaries are progressively stored within the array. Because every set of
47
potential boundaries contains the true boundary orientation, as more and more sets of potential
boundaries are added to the array, eventually the peaks of the true distribution will become
apparent. Clearly while the true grain boundary plane orientations are added to the accumulator
array, many false orientations are also included. To compensate for this error within the
distribution, an approximate background subtraction is performed to subtract the erroneous grain
boundaries from the distribution.
As only 1n must be characterized to finish forming the triple junction distribution, the
grain boundary stereology may be directly applied. This is roughly depicted in Figure 2.14d.
Potential 1n normals are formed about the plane 1 trace and for every potential 1n normal a 3n
may be found according to the potential junction geometry. Both of these are transformed to the
crystal coordinate frame and a unit value corresponding to the potential triple junction geometry
may then be added to the twin-dependent triple junction space. After this occurs for every twin-
dependent triple junction trace in the section plane, the background subtraction is applied. The
values within the distribution space are then normalized to values of MRD.
2.7.2 Advantages and Disadvantages of the Grain Boundary Plane Stereology
There are many advantages as well as a few notable disadvantages of the grain boundary
stereology. The primary advantage of the technique is its ease of application. The technique is
exceptionally simple compared to three dimensional techniques since it relies exclusively upon a
two-dimensional EBSD orientation map. This accounts for the many studies which have
employed this technique [36,38,81–84]. As already noted, this ease of application along with the
high data collection capacity of automated EBSD systems enables collecting the quantity of data
necessary to form twin-dependent triple junction distributions.
48
The primary disadvantage of the technique is its inherent errors given its employed
approximations. One of the primary approximations of most concern is that of a random
distribution. In estimating an appropriate background subtraction, the applied distribution was
assumed to be random. While this enables the subtraction to be easily performed, the end result
is that the accuracy of the technique decreases as the sharpness of a measured texture increases.
This can clearly become problematic when attempting to analyze microstructures with a high
degree of anisotropy. As noted by Morawiec in a recent review of the technique, this assumption
makes it difficult to separate genuine features of distributions from artifacts of the method. He
also correctly observes that at times this technique has been applied with no accounting for its
potential inaccuracies [60]. These are valuable observations which should be accounted for
when analyzing results and drawing conclusions through this technique.
Despite its potential inaccuracies, this technique is still very valuable as a
characterization method. In previous studies good quantitative as well as qualitative results have
been obtained and validated. In these instances, distributions generated from the stereology were
compared to distributions obtained through a three-dimensional characterization technique and
good agreement was obtained [36–38]. This method has shown reliability for common textures
and while results will become less accurate as anisotropy increases, this method can still provide
general features of a distribution. As this technique in some applications provides quantitative
results and consistently provides qualitative results, it may be effectively used by recognizing its
limitations.
The value of this technique is also appreciated when the reliability of three-dimensional
results is considered as mentioned in the Introduction. As explained, the current three-
dimensional grain boundary plane characterization techniques have difficulty in collecting the
49
quantity of data necessary for reliable distributions. Morawiec suggested focusing on the most
reliable points in the distribution which are the peaks. This could be accomplished by measuring
the grain boundary misorientations and plane orientations separately. Once the peaks are
identified the characterization techniques could focus upon the boundary planes at the peaks of
the misorientation distribution and vice versa. This would enable a sufficient amount of data for
statistical reliability to be collected in these regions of the distributions [60]. While this is a
valuable insight, identifying regions of interest is still a challenging task. A stereological
technique is perfectly suited to this task. As it is a relatively simple and inexpensive technique, it
could relatively easily identify regions of interest for boundary or triple junction distributions. In
addition to identifying distribution areas of interest, the twin-dependent triple junction
stereological technique could be applied in parallel with three dimensional approaches. This was
successfully demonstrated by Rohrer who used grain boundary plane stereology to refine his
three-dimensional reconstruction of serial sectioned EBSD data [38]. This was carried out by
comparing initial results to stereological results. When the results differed significantly,
refinements were made to the reconstruction process which brought the results into closer
agreement.
50
CHAPTER 3
EMPIRICAL OPTIMIZATION OF THE TECHNIQUE
3.1 Practical Application Specifics
While all necessary theory for characterizing twin-dependent triple junctions from a
section plane has been provided, there are many practical details which have been briefly
mentioned or excluded. These are necessary for physically applying the technique whether for a
simulated or experimental distribution. CHAPTER 3 seeks to at least briefly summarize the
majority of these application specifics. The information within CHAPTER 3 will provide an
excellent resource for those seeking to apply this technique or to understand how portions of the
code function within the program. In addition, CHAPTER 3 provides understanding and
optimization techniques for those seeking to make modifications or improvements to this method
in the future. CHAPTER 3 principally addresses the method of mapping the distribution space
within the space array as well as optimizing the various distribution generation and stereological
parameters.
3.2 Mapping the Distribution Space
As explained, the distribution space is a subdomain of the full parameter space. This
subdomain has been selected from the parameter space by identifying cell parameters
corresponding to triple junctions with dihedral angles less than 180 degrees. The subdomain
distribution volume consists of 50% of the parameter space volume, though the subdomain
divides cells with disregard to cell boundaries. The distribution space therefore consists of
51
discrete cells and portions of cells. The full parameter space then consists of three classes of
cells, those entirely within the distribution space, those which border the distribution space, and
those outside of the distribution space within the geometrically infeasible region. In addition, all
cells with any volume within the distribution space require a weighting factor which corrects the
inherent sampling biases within the distribution. To simplify the process of generating a triple
junction distribution, the space may first be mapped to determine which parameter cells
correspond to the distribution space and which cells require a weighting factor. After mapping
the distribution, the weighting factors for distribution cells may be generated.
As previously noted, for cells where much of the cell space lies outside of the distribution
space, the weighting can cause these cells to become unstable singular points within the
distribution. This is because few junctions within a uniform random distribution contribute to
these cells causing their values to approach zero. When the cell values are inverted to form
weighting factors, they become extremely large. To control these minor potentially unstable
distribution points, a filtering is applied to remove them from the distribution. Further details of
the process of mapping the space, generating weighting factors, filtering the distribution, and
generating a simulated triple junction distribution will be given. This will guide the reader more
thoroughly through the process and assist one in understanding the functionality and purpose
behind some of the code included within Appendix A.
The parameter space is developed within the software program as a six-dimensional
dynamic array which allows users to change the size of the array according to the desired
resolution. Program functions have been developed to identify cell indices within the array
according to input parameter values. To determine the cells which pertain to the distribution
space, the parameter space is analyzed cell by cell through the full range of indices. Random
52
triple junctions are generated within each cell according to the corresponding cell parameters.
Triple junctions are generated according to cell parameters with disregard to whether the
junction dihedral angles are greater than or less than 180 degrees. For every triple junction
generated with dihedral angles less than 180 degrees, a unit value is added to the selected cell.
Clearly, after analyzing each cell, only cells which border the distribution space or are found
within the distribution space will have values added to them. Cells outside of the distribution
will have zero values associated with them. This method of mapping the space has been plotted
in Figure 3.1.
Figure 3.1 – The A1n planes of random triple junctions generated within the parameter
space at a fixed cos index.
Figure 3.1 consists of the southern hemisphere of the A1n stereographic projection at a
fixed cos index. The index was arbitrarily selected for demonstration purposes and pertains
to the peak index of the simulated distribution within CHAPTER 4. This fixed index is the cell
pertaining to 2582.cos . In the figure, 50 random triple junctions were generated within
each cell and these have been plotted as points in the projection. While 50 junctions per cell are
used in the figure to demonstrate the process, many more junctions per cell are required to
accurately map the space. For cells which border the distribution, the ratio of junctions
53
generated to unit values added to each cell may be used as an estimate of the cell volume inside
and outside of the distribution. As the fixed number of random junctions generated for every cell
increases, the accuracy of this estimate increases.
The weighting factors are generated for all cells which have some volume within the
distribution space. These are created by generating uniform random triple junctions with all
sampling biases and geometries to be expected within a random twin-dependent triple junction
distribution. For every triple junction created, a unit value is added to the corresponding
distribution array cell until the random distribution converges. This typically requires on the
order of 107 triple junctions for a fixed misorientation at 10 degrees resolution. This results in
substantial computational time for the full space. A plot of this converged uniform random
distribution is given in Figure 3.2. This distribution was formed by 71053 . random triple
junctions at a fixed misorientation which is the appropriate number for a resolution of 10
degrees. The distribution is not normalized as the value within every distribution cell is the
cell’s corresponding weighting factor prior to filtering or inversion. Clearly, the cells along the
edge of the distribution have exceptionally small values relative to those at the biased peaks.
Figure 3.2 – The A1n planes at a fixed cos value for a uniform random triple junction
distribution with all expected sampling biases.
54
Both the mapped distribution space data and weighting factors only need to be computed once as
they may be used for any triple junction distribution. For this reason they are written out to a file
to be recalled when generating distributions.
Prior to generating a triple junction distribution the weighting factors must be filtered to
remove singular points. This filtering must increase as the measured distribution data decreases
given the measured distributions contain more scatter. The weighting factors are filtered by
generating or recalling them from a file and removing factors according to size as a fraction of
the distribution average. The smallest values are removed in the process as this is prior to
inverting the factors. The weighting factors are then converted to values of MRD by dividing by
the distribution average. The process of generating the weighting factors is completed by
inverting them. The filtered weighting factors for a resolution of 10 degrees are plotted in their
corresponding cells in Figure 3.3.
Figure 3.3 – Filtered weighting factors within their corresponding cells within the
distribution space.
Notice the inverse relationship between Figure 3.2 and Figure 3.3. A few notable filtered cells
are visible along the edge of the distribution space. All of these cells had much of their volume
outside of the distribution and several of them are so minute they are barely visible in the figure.
55
When forming a simulated distribution, the weighting factors may be recalled from their stored
location and the biased distribution multiplied cell by cell to remove all present biases.
The method outlined above for forming weighting factors is applicable to simulated
distributions. The same method is utilized when forming weighting factors for a stereologically
formed experimental distribution with the exception that the stereological approach is adapted
into the process. This method is briefly described as follows. A biased uniform random
distribution is reduced to experimental data as would appear in the section plane. This data is
then used to reconstruct the distribution using the stereological method. The filtered weighting
factors are then formed from the reconstructed random distribution. In this manner, the slight
differences in bias as introduced by the stereological method are incorporated into the
experimental weighting factors. When implementing the stereological method, in this instance
the background subtraction isn’t needed given the distribution implemented was a uniform
random distribution [66].
3.3 Selecting Optimal Mapping, Distribution, and Stereological Parameters
While the method of mapping, weighting, and filtering the distribution has been
described in moderate detail, one might question how quantitative values are selected for the
many implemented distribution generation parameters? For instance, intuitively the distribution
results tend to improve as the singular points along the edge of the distribution are filtered. In an
equal measure, as the distribution is filtered and cells eliminated, the distribution is being
reduced in volume and accuracy. At what point do the improved results and volumetric error
strike an optimal balance? How are the values of the filtering parameters selected so as to
generate the optimal results? This section will focus on the methods used to find optimal values
56
for all parameters utilized in the generation of twin-dependent triple junction distributions. A
table of distribution generation parameters is given along with basic definitions in Table 3.1.
Generation Parameter Definition
RandCellPtsGeom
The integer number of random triple junctions created in each cell in order to map the
distribution space. As this number increases so does the accuracy of determining
regions of cells inside and outside of the distribution space.
RandTraceVects
The integer number of random triple junctions generated within the distribution space
in order to form weighting factors. The name is derived from the fact that these triple
junctions are first formed from random traces in a section plane in order to create
natural distribution biases.
AvgPtFractionSim
The fraction of the distribution normal below which a cell will be filtered from the
distribution after filling the space with RandTraceVects.
SimDataValues
The integer number of simulated triple junctions within the simulated distribution.
This number also reflects the number of simulated junctions which will be converted
to simulated experimental data for application of the stereological method.
Table 3.1 - Table of parameters necessary for generating triple junction distributions.
The listed parameter names are the variable names as implemented in the program in the
Appendix. These parameters are those used for generating a simulated distribution. As the
experimental portion of the program is so similar in construction to the simulated portion, it is
considered a suitable approximation to use the optimized simulation parameter values for their
experimental parallels.
The stereological method has several parameters which have already been described in
the application of the grain boundary plane stereological approach. These parameters must also
be analyzed so as to find their values which provide the optimal balance of performance and
computational time. These factors and their brief descriptions are given in Table 3.2.
57
Stereological Parameter Definition
Cos111N2Discrt
The integral number of potential 2n planes implemented in finding the 111
direction from the measured plane 2 trace.
CosN1Discrt
The integral number of potential 1n planes implemented in the grain boundary plane
stereology to find the actual 1n orientation.
CosN3Discrt
The integral number of potential 3n planes implemented in finding the 3n
orientation given the potential 1n orientation.
Table 3.2 – Table of parameters necessary for adopting grain boundary plane stereology
to triple junctions.
Given the distribution generation parameters may be applied to a simulated distribution
with no required stereology, these parameters may be optimized independent of the stereological
factors. Once the generation parameters are optimized, the stereological parameters may then be
found at optimal values.
3.3.1 Optimizing the Distribution Generation Parameters
Given the nature of the distribution generation parameters and preliminary experience in
developing them, it was expected that the selected magnitudes of the parameters would have
significant effect on the quality of the distribution. It was also anticipated that a few parameter
interactions would be present as some parameters are interdependent. Given these expectations,
factorial designs were progressively implemented to determine optimal values for the generation
parameters. Quantitative measures of distribution quality had to be developed prior to carrying
out the factorial designs. Three measures may be implemented to quantify distribution quality.
These measures are a difference value, distribution range, and the fraction of the filtered cell
volume. The difference value is formed by adaptation of the relation provided by Morawiec for
comparing smooth orientation functions/distributions. This relation is given by:
58
dOOfOf 212
1
where 1f and 2f are the distributions of interest and O is a given orientation. Given the
normalization of 1f and 2f , the result of this method provides a number between 0 and 1 with 0
corresponding to identical distributions [70]. The technique may be adapted to the discrete twin-
dependent triple junction distribution in an attempt to provide a quantitative measure of
similarity between functions. While this technique should be applied to smooth distributions, the
distributions in this application will be assumed smooth enough. To adapt this method to the
discretized twin-dependent triple junction distribution the following relation may be used:
N
i
iiN 1
212
1 ( 3.1 )
where i1 and i2 are two discrete triple junction distributions at cell i and N is the
number of cells within the distribution space. Identical to the relation given by Morawiec, this
relation provides difference values in the range of 0 to 1. In order to apply this relation in a
factorial design, all distributions should be formed identically and compared to a target ideal
distribution. If a uniform random distribution is selected as the target distribution, it will have
the value of 1 everywhere. Equation ( 3.1 ) may be adapted to this specific application by the
following relation:
N
i
iN 1
12
1
where i is the uniform random twin-dependent triple junction distribution generated at each
run of the factorial design. The difference value as a result of this relation provides a single
scalar value which describes the similarity of the distribution to a random distribution.
59
Experience has shown the relation to be quite sensitive to quantifying distribution similarity. For
a uniform distribution the value provides a nice measure of convergence for the distribution as a
whole, but might not necessarily be sensitive to singular points within the distribution.
To more expressly quantify the presence of singular points within the distribution, the
range of the random distribution will be measured for each factorial run. The range of a
distribution is ideal for recognizing distribution outliers. As a random distribution should have
the value of 1 everywhere, the singular points are cells of uncharacteristically high intensity far
from the average value of 1. Therefore, a large range value will tend to be indicative of singular
points. A large range might also indicate a distribution with significant scatter whereas a smaller
range indicates a converged distribution. The final measure of distribution quality is the fraction
of cell volume filtered from the distribution space. This cell volume is excluded from the
distribution space on account of filtering the singular points from the distribution. While the
fraction of excluded cell volume is typically low, on the order of 1% of the distribution space,
this value should be kept at the minimal possible level as it indicates missing volume from the
distribution. Given these measures are applied to a uniform random distribution, the best quality
distribution would have the lowest possible values of difference, range, and fraction excluded
cell volume. As the fraction excluded cell volume and range and difference values are
competing responses, the factorial designs will allow values of the implemented generation
factors to be identified so as to provide the optimal results.
3.3.1.1 Two-Level Factorial Design
A preliminary two-level factorial design was implemented to analyze the effects and
interactions of the distribution generation parameters. One of the motives for implementing the
60
two-level factorial design was to identify factors with no effect or interactions on the
distribution. These factors could then be excluded in the following designs where optimization
is possible and more runs are necessary. The four distribution generation parameters:
RandCellPtsGeom, RandTraceVects, AvgPtFractionSim, and SimDataValues where
implemented as factors in the design. The generated uniform distribution difference and range
values were implemented as responses. Most of the factorial work was carried out using Minitab
17 statistical software. The high and low factor levels were identified by preliminary experience
with the parameters. Given the computational time per run was relatively short, 8 replicates at
each level of the design was selected. This was assumed to be more than sufficient, but a
retrospective analysis was completed after determination of the responses using the Minitab
Power and Sample Size estimator. The results indicated that with 95% power the design was
capable of reliably determining changes in effect at the sizes of .001 and .0001. Clearly this
number of replicates was ample as the transformed responses were on the order of 110and
010 .
61
Figure 3.4 – Residual plots for difference response
Figure 3.5 – Residual plots for range response
62
Before the Analysis of Variance (ANOVA) procedure may be reliably used to judge the
statistical significance of effects within a factorial design, necessary assumptions must be
satisfied. The essential assumptions for performing an ANOVA is the normal distribution and
equal variance of values for every factor level [85]. After generating the responses at each factor
level for the two-level design, the plots of the residuals clearly indicate issues with both of these
assumptions [86]. If the values at each factor level were normally distributed, the points in the
Normal Probability Plot would follow a straight line.
This is not the case for either the difference or range values. In addition, as the results of
the normal probability plots are at times difficult to quantify, the Anderson-Darling test may be
applied to test the assumption of normality. This test was applied in concordance with the
generation of the normal plot. As evidenced by the p-value to the right of the normal plots in
both Figure 3.4 and Figure 3.5, the Anderson-Darling test indicates that the normality
assumption does not hold for the difference or range values.
The residual plots and statistical tests also indicate that the assumption of equal variance
does not hold for the selected responses. The Versus Fits plots in both Figure 3.4 and Figure 3.5
resemble a megaphone in which the variance is increasing with magnitude. If the assumption of
equal variance held, these plots would have no distinguishable pattern. This conclusion is further
corroborated by plots of the standard deviation of the responses vs. the mean of the responses.
These plots directly demonstrate an increase in variance with magnitude [87].
63
Figure 3.6 – Standard deviation vs. mean for both the range and difference values. These
plots demonstrate the increase in variance with increasing magnitude.
As quantitative statistical tests may be easily performed within Minitab, Leverne’s test and
Multiple Comparisons were applied to assess the equal variance assumption. The range and
difference values also consistently failed these tests.
In order to apply an ANOVA to the two-level factorial, a variance stabilizing
transformation may be applied to the responses such that the necessary assumptions are met.
Conclusions may be drawn about the transformed data in order to find the optimal parameter
values. As a variance stabilizing transformation tends to improve the normality of the data, this
transformation will be applied prior to attempts to address the non-normality of the data.
Montgomery has provided a table for empirically selecting a suitable transformation and a
simple method of empirically estimating the appropriate transformation [86]. Both of these
methods were used to select a transformation for the two-level factorial.
The transformed responses were tested with the Bartlett’s, Leverne’s, and the Multiple
Comparisons test for equal variance to determine if the transformation was successful. The most
successful transformation was identified as that which resulted in the highest p-values for all
three tests. Unsurprisingly, the best transformation identified by empirically trying all possible
transformations was the same transformation identified using the empirical estimation method.
64
This transformation was the reciprocal square root of the responses. After identifying the
reciprocal square root transformation for equal variance, the Anderson-Darling test was applied
to verify if the normality assumption was met by the transformed data. The Anderson-Darling
test indicated that the normality assumption was met and the ANOVA could therefore proceed.
For comparison to Figure 3.4 - Figure 3.6, plots of the standard deviation vs. mean and residuals
of the transformed data are shown in Figure 3.7 - Figure 3.9.
Figure 3.7 - Standard deviation vs. mean for the transformed range and difference values.
These plots demonstrate the result of the equal variance transformation.
65
Figure 3.8 – Residual plots for reciprocal square root range response.
Figure 3.9 – Residual plots for reciprocal square root difference response.
66
The outcomes of the ANOVA on the transformed responses are given in Figure 3.10 -
Figure 3.15 [88]. As apparent in these plots, with good confidence we can conclude that the
parameter RandCellPtsGeom has no effect on the responses. This is indicated by the horizontal
lines on the Main Effect plots. This observation is further supported by the Normal Plots of
Standardized Effects where the significant effects diverge from the plotted red line. For an
unknown reason RandCellPtsGeom was plotted as a significant effect in Figure 3.13 despite its
position on the plotted red line and the absolutely horizontal line in Figure 3.12 which indicate
otherwise. In addition to having no effect on the responses, RandCellPtsGeom has no
interactions with any other parameters as indicated by the consistently parallel lines in Figure
3.14 and Figure 3.15.
In retrospect, the lack of effects and interactions on account of RandCellPtsGeom seems
obvious given the role of the parameter. RandCellPtsGeom is used to map the parameter space
and identify the cells that pertain to the distribution space and those which lie outside of the
distribution space. Large values of RandCellPtsGeom would accurately map the space while
small values would poorly map it and effectively filter out the smallest edge cells. This should be
the role of the following generation parameter AvgPtFraction. Changing values of
RandCellPtsGeom will affect the amount of partial cells filtered by AvgPtFraction, but have
almost no effect on the total volume filtered. This is because AvgPtFraction is filtering much
more volume than RandCellPtsGeom is inadvertently doing through poor mapping. Therefore,
RandCellPtsGeom has no effect on distribution quality since it is followed by the filtering
parameter AvgPtFraction.
67
Figure 3.10 – Main effects for reciprocal square root range.
Figure 3.11 – Normal plot of the standardized effects with the reciprocal square root
range as the response. This plot distinguishes significant from non-significant effects.
68
Figure 3.12 – Main effects for reciprocal square root difference.
Figure 3.13 – Normal plot of the standardized effects with the reciprocal square root
difference as the response. This plot distinguishes significant from non-significant effects.
69
Figure 3.14 – Interactions for reciprocal square root range.
Figure 3.15 – Interactions for reciprocal square root difference.
70
As the value of RandCellPtsGeom has no effect on distribution quality or interactions
with other parameters, a fixed value may be selected for this parameter without concern for
affecting the distribution results. It makes better sense to do a true job of mapping the space
prior to filtering the distributions. The size of the empty geometric region within the parameter
space was plotted as a function of RandCellPtsGeom for both the equal and unequal volume cell
distributions. The plot is shown below in Figure 3.16. As the computational time for this factor
is relatively short and the space requires mapping only once, it made the best sense to select a
value which provided a nicely converged space. The RandCellPtsGeom value of 12,500
sufficiently meets the discussed criteria.
Figure 3.16 - The cells within the empty geometric region of the parameter space as a
function of RandCellPtsGeom
It might be noted that the fraction of the filtered cell volume was not included in this
factorial design as a response, as were the difference and range values. That was because at this
point in the project the fraction of the filtered cell volume had not yet been identified as a key
measure for parameter optimization. Nonetheless, this should not affect the results of this two-
level factorial. The key purpose of this factorial was to exclude parameters which have no effect
on the distribution quality. As RandCellPtsGeom had no effect on the difference or range
71
values, it wouldn’t have effect on the fraction of filtered cell volume. This is because the
AvgPtFraction parameter primarily excludes values from the distribution. It was for this same
reason that the difference and range values were not affected by the RandCellPtsGeom factor.
As the fraction of filtered cell volume and difference and range values are inversely related, it
seems impossible to affect the filtered cell volume without affecting the difference and range.
3.3.1.2 Response Surface Design
After successfully identifying important parameters in the two-level factorial design, a
two-level factorial design with center points was implemented to test for curvature within the
model. If curvature does not exist, the linear model as generated through a two-level factorial
design should be sufficient for optimization. After testing for curvature it was found that
curvature is statistically significant. For this reason a response surface design was implemented
in order to find the optimal values of the remaining distribution generation parameters which
provide the maximum distribution quality.
A response surface design was created using the remaining distribution generation
parameters, RandTraceVects, AvgPtFractionSim, and SimDataValues, as factors. Each factor
was tested at five levels corresponding to two axial points, two cube points, and a center point.
The responses of the design were the range, difference, and the fraction excluded cell volume for
the generated random distributions. Eight replicates were implemented for each run of the
design. As this number of replicates was more than sufficient for the two-level design, it will no
doubt be ample for this design where the factors are decreased and run levels increased.
A similar procedure was followed in this experiment as was followed for the two-level
factorial. Plots of the standard deviation vs. mean for each response indicated a variance
72
stabilizing transformation would be necessary. Variance stabilizing transformations were
empirically estimated and then selected as previously described. The responses were
transformed as follows: the range was transformed with the reciprocal square root
transformation and the difference and fraction excluded cell volume were transformed with a log
transformation. While the equal variance transformations visibly improved the equal variance of
all the responses, the difference transformation was the only transformation which passed all of
the statistical tests for equal variance. Unlike the transformed responses in the two-level
factorial, the equal variance transformation did not sufficiently improve the normality of any of
the responses such that the assumption of normality was met by the Anderson-Darling test.
Because the reciprocal square root range transformation results in a positive response, a Box Cox
normality transformation could be applied until the normality assumption was met for this
response. As Bower noted, an ANOVA works fairly well even if the normality assumption
remains unmet, as long as the distributions are not highly skewed or the variances are very
different [85]. This appears to be the case for these transformations and we will assume we have
met the assumptions sufficiently in this design to proceed with the analysis.
Once the models were fit to the design, the Response Optimizer tool within MINITAB
was utilized to find the parameter values which provided the optimal response. The responses
were all equally weighted within the optimizer and the graph produced by the optimization tool
is given below in Figure 3.17. While the graph shown provides optimal values in red, each
parameter may be individually adjusted and optimal values found for that setting. This was
utilized in order to find optimal values as SimDataValues, or the number of data points within
the distribution, was reduced. As was expected, as SimDataValues is reduced, AvgPtFraction, or
the filtering, had to increase. RandTraceVects, or the number of triple junctions implemented to
73
form the weighting factors, remained constant at the shown optimal level. The change between
SimDataValues and AvgPtFraction was plotted in Excel and a polynomial fit to this relationship.
This fit was then coded into the program in order to identify the level of filtering for a given
quantity of data.
Figure 3.17 – Optimal parameter values for the distribution generation parameters as
produced by the response surface design.
74
Figure 3.18 – The rate of filtering according to the quantity of data.
In summary, factorial designs were implemented in order to find optimal values for the
distribution generation parameters RandCellPtsGeom, RandTraceVects, AvgPtFractionSim, and
SimDataValues. As RandCellPtsGeom was identified as having no effect on the quality of the
distributions, a fixed value was selected where the empty geometric region within the space had
practically converged. The values for the factors RandTraceVects, AvgPtFractionSim, and
SimDataValues were selected using the Minitab response optimizer on the results of a response
surface design. RandTraceVects was optimally selected at 61035 triple junctions and the value
of AvgPtFractionSim varies according to the quantity of SimDataValues. The relationship
between these two parameters was fit with a polynomial and included in the program. The
values identified here were for the equal volume space distribution. As the equal and unequal
volume distributions differ in structure, the method had to be repeated for the unequal volume
space. Optimal parameter values and a relationship between AvgPtFractionSim and
SimDataValues was also identified for the unequal volume distributions and included in that
program. The results here were found for a 10 degree resolution. For another resolution the
distribution generation parameters must be found anew. They might be scaled from these
75
parameters according to the change of cells within the space, but that would likely provide only a
rough estimate of the true values.
3.3.2 Optimizing the Stereological Parameters
As explained in Section 3.3, the distribution generation parameters were generated for a
simulated twin-dependent triple junction distribution in which all parameters of the given triple
junction are known. When generating a twin-dependent triple junction distribution
experimentally, identical generation parameters are necessary as well as several parameters
implemented in the stereological approach. Given the similarity of the structure of the simulated
and experimentally formed distributions, the values of the simulated distribution generation
parameters may be implemented in the experimental portion of the program. This substitution is
approximate in nature, but significantly simplifies the process of finding suitable generation
parameter values and seems to yield good results. The values of the parameters associated with
the stereological portion of the program also require optimization and this section will describe
the methods used in doing so.
3.3.2.1 Selecting a Value for Cos111N2Discrt
As described in Section 2.7.1, after identifying the coherent twins in a section plane,
potential boundary plane normals may be formed over a hemisphere about the twin trace. Given
the boundary is a coherent twin within an FCC material, it is known that the true boundary
normal points in a 111 direction within grain A. The potential normals may be transformed
from the sample reference frame to the crystal frame according to the relation:
22 nn AA g
76
The transformed potential normal closest to a 111 direction may be identified as the true
normal. This procedure was depicted in Figure 2.14c on page 44. The parameter
Cos111N2Discrt is the integral number of potential twin normals formed about a trace to find the
true normal. It might be asked, what is the required quantity of potential normals to successfully
identify the true twin normal?
Potential twin normals were generated about the traces of 10,000 simulated known
coherent twin boundaries at varying levels of Cos111N2Discrt. The reconstructed twin was
tracked and failures in the reconstruction process recorded. The results of this study are shown
in Figure 3.19a. As apparent in the figure, as the number of potential normals increase, the
number of incorrectly reconstructed normals decrease. This relationship follows a power law
and the greatest rate of improvement occurs early in the plot. The failures are likely due to the
hemisphere of potential normals crossing a 111 direction in addition to the true 111 direction.
When the discretization is low, a potential normal is occasionally closer to an incorrect 111
direction than the potential normal nearest the true 111 direction. As the discretization
increases, the likelihood of a potential normal being nearer an incorrect 111 direction than the
potential normal nearest the true 111 direction decreases. The computational time for
increasing values of Cos111N2Discrt is plotted in Figure 3.19b. As visible in the figure, this
relationship follows a linear relationship.
77
Figure 3.19 – (a) The failures in the twin boundary plane reconstruction for 10,000 twin
traces as a function of Cos11N2Discrt. (b) The twin boundary plane reconstruction
computational time for 10,000 twin traces as a function of Cos11N2Discrt.
In an attempt to try to find an optimal balance between the rate of boundary plane
assignation failure and the computational time as a function of Cos111N2Discrt, these
relationships were normalized and equated as shown in Figure 3.20. The intersection of the two
relationships in Figure 3.20a, or the root of the function in Figure 3.20b, was found by Newton’s
method. For a relative error of 6101 the root is 527.01.
Figure 3.20 – (a) The rate of boundary plane assignation failure and computational time
normalized and plotted on the same graph as a function of Cos111N2Discrt. (b) The
equated normalized rates of boundary plane assignation failure and computational time as
a function of Cos111N2Discrt.
78
The root 527 will be treated as a minimal rather than optimal value given the small
penalty in computational time for increased accuracy. This seems especially reasonable when it
is noted that a boundary plane assignation failure results in the diminishing of an experimental
value since the triple junction has been mis-identified and stored in the incorrect location within
the array. In estimating the convergence of the failures vs. discretization in Figure 3.19a, a step
size of one was implemented for the plotted relationship and the error between each progressive
step and the previous step computed. For a relative error of .001 and absolute error of .01 a
value of 1631 was obtained. This value may be utilized as an approximate convergence point for
the Failures vs Cos111N2Discrt relationship. While 527 might be treated as a minimum bound,
1631 could be treated as a maximum bound given there is little improvement in accuracy of
assignation after this point. There is only 6 additional seconds in computational time between
the upper and lower bounds for an improvement in failures from approximately .5% to .09%.
This 6 additional seconds becomes approximately 10 minutes when the 10,000 triple junctions
are scaled to 610 , which is the expected order of magnitude for the required experimental data.
10 minutes is almost negligible compared to the time required for the experimental data
collection, therefore the value of 1631 is utilized in this work. If computational time becomes a
significant problem, it might be reduced for a minute loss in quality by decreasing the value of
Cos111N2Discrt.
3.3.2.2 Optimizing CosN1Discrt and CosN3Discrt
As explained in Section 2.7.1, the stereological method is similar to the twin boundary
plane identification in that potential boundary normals are assigned to the traces of plane 1 and
plane 3 as they appear in the section plane. As opposed to the twin boundary, the correct
79
orientations of A1n and A3n are unknown from the trace alone and therefore all potential normals
are added to the distribution space array. After all potential boundaries are added to the
distribution, the true peaks of the distribution will become apparent and a background subtraction
is applied to remove the effects of the incorrect potential boundaries. CosN1Discrt and
CosN3Discrt are the integral number of potential boundary normals applied to the plane 1 and
plane 3 traces.
CosN1Discrt and CosN3Discrt are utilized not only for the experimental application of
the stereology, but are first implemented in forming the experimental weighting factors. To form
the experimental weighting factors, the stereological method is applied to trace vectors generated
from a highly converged uniform random triple junction distribution. Identical to the method of
forming simulated distributions, these weighting factors are then stored so that they may be
recalled when experimentally forming a distribution through the stereological method. Given the
random distribution utilized to form the experimental weighting factors must be highly
converged, it requires millions of triple junctions at a fixed misorientation. This number of triple
junctions is the experimental equivalent of the simulated parameter RandTraceVects, therefore
for a fixed misorientation at 10 degrees resolution, 61035 triple junctions are utilized. Clearly,
applying large values of CosN1Discrt and CosN3Discrt to this large number of traces greatly
increases the computational time. For this reason, values of CosN1Discrt and CosN3Discrt must
be selected so as to provide the optimal balance of experimental distribution quality for the
minimal amount of computational time.
Similar to the method utilized in optimizing the distribution generation parameters,
factorial designs were progressively implemented in order to find optimal values of CosN1Discrt
80
and CosN3Discrt. While CosN1Discrt and CosN3Discrt were always kept simultaneously at the
same level, the level of CosN1Discrt and CosN3Discrt was tested for generating weighting
factors and the experimental distribution. Therefore there were two factors within the designs
consisting of the value of CosN1Discrt and CosN3Discrt for the weighting factors and the value
of CosN1Discrt and CosN3Discrt for the experimental method. The responses implemented in
these designs were a difference value from 0 to 1 and the computational time. The
stereologically generated distribution was constructed from traces generated from a known
simulated distribution. The known simulated distribution was not a uniform distribution as for
the distribution generation parameters, but had features which the stereological method
attempted to reconstruct. The similarity relation in Equation ( 3.1 ) on page 58 was utilized with
the adaptation that one of the distributions was the simulated distribution while the other was the
stereologically reconstructed distribution. For clarity this relation may be rewritten as:
N
istereosim ii
N 12
1 ( 3.2 )
A two-level factorial design with center points was generated with six replicates at every
run. As before, a retrospective analysis confirmed the number of replicates using the Minitab
Power and Sample Size tool. The preliminary two-level factorial allowed prerequisite testing for
curvature, significance, and sample size prior to the anticipated response surface design. The
high and low levels of CosN1Discrt and CosN3Discrt were 90 and 15. Given experience in
working with the stereological parameters, it was estimated that the optimal values were within
this range. Saylor also indicated there were no changes in results for values down to 15 in the
grain boundary plane stereology [66].
81
After generating the difference and computational time responses, the plots of the
residuals revealed that the difference response likely held true to both the assumption of
normality and equal variance whereas the computational time response did not. The statistical
tests for validity were applied as well. The computational time results failed the Anderson
Darling test for normality while the difference results passed. The difference results passed the
statistical tests for equal variance, or the Bartlett’s, Leverne’s, and the Multiple Comparisons
tests, while the computation time results failed almost all of them. A plot of the standard
deviation vs. mean showed an identical trend of unequal variance for the computational time.
Identical to the factorial design applied to the distribution generation parameters, a
variance stabilizing transformation was empirically estimated in the method suggested by
Montgomery for the computational time response. After applying this transformation, which
was the reciprocal square root transformation, the residual plots greatly improved and the
normality and equal variance assumptions were validated by the previously applied statistical
tests. The Box-Cox transformation for normality was applied to the computational time results
after removing insignificant terms from the model. As curvature was significant within the
design a response surface design was needed to select optimal parameter values.
The response surface design was formed and both the variance stabilizing
transformations and automated Box Cox normalizing transformations applied. The Minitab
response optimizer was applied in order to identify optimal parameter values. As the response
optimizer allows weighting the responses according to importance, several sets of optimal
parameters were generated according to various levels of weighting. These results are shown
below in Table 3.3. The first column in the table indicates the relative weighting of the
responses according to importance. For instance, in the first row the reciprocal square root
82
computational time and difference values are weighted equally in importance. As the emphasis
on the quality of results might be considered more important than the computational time, the
difference is progressively weighted higher in importance in the lower rows. In the last column,
the reciprocal square root computational time is given no importance. The intention of these
rows of data was to look for trends in the parameter values and to be able to consider the effects
of differing levels of relative importance. The parameter values were as provided within the
optimizer with the exception of the last row. In this instance, the values were manually adjusted
as low as possible while still keeping them close to optimal positions within the model.
Table 3.3 – Response surface results from the Minitab Response Optimizer.
After generating the table of results, the parameter values were tested at these levels
within the program. The results of these runs at optimal levels are summarized in Figure 3.21.
The figures require some explanation to clarify what they demonstrate. The pairs of number in
the legend are the sets of parameter levels. The number on the left in the legend is the value of
CosN1Discrt and CosN3Discrt when forming weighting factors. The number on the right in the
legend is the value of CosN1Discrt and CosN3Discrt when forming the experimental distribution
from simulated trace values. The graphs in parts (a) and (b) should be examined together as they
individually show different features of the same parameter pairs. From the figure it is clear that a
small relative increase in the computational time can cause a significant improvement in the
1/sqrt(Comp. Time)
Vs. Difference
Weighting
CosN1Discrt
CosN3Discrt
Weighting Value
CosN1Discrt
CosN3Discrt
Experimental Value
1 to 1 39 18
1 to 2 43 25
1 to 3 46 29
1 to 4 48 33
1 to 5 50 36
0 to 1 60 60
83
difference value. In addition, the amount of time to form the experimental distribution is
miniscule compared to the amount of time required to form weighting factors. Therefore the
values in the right of the legend could be increased to the level of the weighting factor level in
the left for a small penalty in computational time. In addition, it makes more logical sense that a
distribution be weighted with the same CosN1Discrt and CosN3Discrt parameter levels with
which it was formed.
Figure 3.21 – Performance of optimal parameter values within the actual program. (a)
The computational time versus difference for using the selected parameter value in the left
of the legend to generate weighting factors. (b) The computational time versus difference
for using the selected parameter value in the right of the legend to generate the
experimental distribution from simulated trace values.
A set of parameter levels where the weighting values and distributions are formed with
the same level of CosN1Discrt and CosN3Discrt were tested in the program and these results are
demonstrated in Figure 3.22. When comparing these values to those in Figure 3.21, note that
almost all the points in Figure 3.21 have a higher difference value than those in Figure 3.22.
This is occasionally for comparable computational time. Clearly, matching the parameter values
will provide consistently better performance. The key to selecting optimal values from Figure
3.22 is to choose values which are as low and as far left as possible. The values tested at a
84
matched value of 46 for CosN1Discrt and CosN3Discrt standout in that they gave the best
performance for the smallest amount of computational time. Given the first data point appeared
to be an outlier, several more were generated at this level but they appear to consistently
outperform the other levels. These values were selected and implemented in the program.
Figure 3.22 – Performance of parameter values within the actual program where the
parameter values are equally matched when forming the weighting factors and the
experimental distribution.
Section 3.3.2 describes the methods implemented to select optimal values for the
stereological parameters. As the stereological parameters were optimized at a fixed
misorientation, the computational time and other data in Section 3.3.2 should be considered in
that context. Despite selecting the parameter values for a single fixed misorientation, the
parameter values should be applicable to other misorientations and the full space. These results
are for a resolution of 10 degrees and different optimal parameter levels would have to be found
for a change in resolution. The parameter values found in Section 3.3.2 were directly
implemented in the unequal volume solution since it implements the identical stereological
method. This assumption of equivalence has provided good results for unequal volume
distributions.
85
CHAPTER 4
RESULTS
4.1 Validating the Method
The proposed technique of generating twin-dependent triple junctions from a section
plane was validated by applying the method to a known twin-dependent triple junction
distribution. The results between the known and stereologically generated distribution were
compared to assess the accuracy of the procedure. The method of validation employed in this
work is very similar to the approach utilized by Saylor et al. for the grain boundary stereology
[66]. A simulated twin-dependent triple junction distribution was generated and then two-
dimensional EBSD data, as would be collected in a section plane, were generated from this
known distribution. The simulated distribution was produced in the method outlined by
Morawiec for generating non-uniform distributions [70]. An arbitrary peak was selected within
the distribution space at 1211 An , 1112 An , and 1023 An or 104.96 and
2582.cos . The frequency function, which is Gaussian in nature and forms the peak in the
distribution, was adopted from that used by Saylor et al. [66]. The function is given by:
CB
AF
2
exp
Where factors A, B, and C were selected as 10, 15, and 3.5. These factors differ from
those used by Saylor as they were adapted for the change in space. is the average angle
86
between A1n and A3n of the selected peak triple junction and the A1n and A3n planes of a randomly
generated junction. Clearly, values with greater proximity to the peak value result in a larger
frequency value F. A distribution was formed by conditionally accepting randomly generated
junctions. Random twin-dependent triple junctions were formed and a frequency value F
generated for every junction. This F value was then compared to a randomly generated number
within the range [0, Fpeak], where Fpeak is the maximum possible frequency value or where
equals 0. The triple junction was accepted and added to the distribution space if its
corresponding F value was greater than or equal to the randomly generated number. When a
triple junction was added to the space, a unit value was added to the cell within the distribution
space corresponding to the triple junction character.
The experimental data were generated from the simulated distribution by adapting the
method implemented by Saylor [66]. A random orientation Ag was formed and the neighboring
orientation Bg was generated according to a preselected misorientation relationship ABg . Each
accepted junction and associated crystal frame was randomly rotated such that the twin pointed
to a 111 direction. Each junction was then rotated by 1
Ag , the inverse of the crystal reference
frame, so as to rotate the values to the sample reference frame. Trace vectors were then
generated from the triple junction boundary planes. At this point the trace vectors and ABg
appeared as if extracted from section plane EBSD data. This data generated from the simulated
distribution was then characterized by the stereological method. If the experimentally generated
distribution resembled the simulated distribution, the technique could be considered successful.
87
4.1.1 Visual Validation of the Technique
The results of the validation method are produced visually by plotting the simulated and
stereologically generated distributions in Figure 4.1 through 8. The validation was performed for
a fixed misorientation in order to simplify the computational process. The conclusions drawn
from inferring these results to the full space will be discussed within the Conclusions section.
The fixed misorientation was selected as a 20 degree rotation about 952 . Originally this
rotation was selected given it is at the center of the stereographic triangle and not subject to any
special bi-crystal symmetries [34,68,75,76]. Now that the method of weighting the distribution
to remove sampling biases is implemented, bi-crystal symmetries should have no effect and the
misorientation angle/axis selection is arbitrary.
Figure 4.1 depicts a simulated distribution generated in the equal volume cell distribution
space, while Figure 4.3 depicts the same distribution in the unequal volume cell distribution
space. This distribution was generated with an arbitrary peak at 1211 An , 1112 An , and
1023 An as previously mentioned. Figure 4.1a and Figure 4.1b consist of the southern and
northern hemispheres of the stereographic projections of A1n for fixed values of cos at center
cell values. Figure 4.3a and Figure 4.3b consist of the southern and northern hemispheres of the
stereographic projections of A1n for fixed values of at center cell values. Figure 4.1 or Figure
4.3 represent the full distribution boundary space at a fixed misorientation.
88
Figure 4.1 – Simulated distribution generated in the equal volume cell distribution space.
The peak of the distribution is located at 1211 An , 1112 An , and 1023 An or
2582.cos . (a) Southern hemispheres of the stereographic projections of A1n for
fixed values of cos at center cell values. (b) Northern hemispheres of the stereographic
projections of A1n for fixed values of cos at center cell values.
89
Figure 4.2 – Stereologically generated distribution from simulated experimental data
created from the junctions in Figure 4.1. Comparison of Figure 4.1 and Figure 4.2
provide a qualitative visual validation of the implemented stereological method. (a)
Southern hemispheres of the stereographic projections of A1n for fixed values of cos
at center cell values. (b) Northern hemispheres of the stereographic projections of A1n for
fixed values of cos at center cell values.
90
Figure 4.3 – Simulated distribution generated in the unequal volume cell distribution
space. The peak of the distribution is located at 1211 An , 1112 An , and 1023 An
or 104.96 . (a) Southern hemispheres of the stereographic projections of A1n for fixed
values of at center cell values. (b) Northern hemispheres of the stereographic
projections of A1n for fixed values of at center cell values.
91
Figure 4.4 – Stereologically generated distribution from simulated experimental data
created from the junctions in Figure 4.3. Comparison of Figure 4.3 and Figure 4.4
provide a qualitative visual validation of the implemented stereological method. (a)
Southern hemispheres of the stereographic projections of A1n for fixed values of at
center cell values. (b) Northern hemispheres of the stereographic projections of A1n for
fixed values of at center cell values.
92
The white areas of the plots represent the regions of the parameter space pertaining to
thermodynamically or rather geometrically infeasible triple junctions. The distribution space
within the parameter space pertains to the colored areas of the plots. As apparent in the plots, the
distribution discrete cells are plotted directly with no interpolation between cells. This accounts
for the pixel-like colored squares of the projections. While these raw distribution plots are not as
visually appealing as a plot that has been artificially smoothed, the results are true to the actual
distribution. Further details for interpreting these plots were discussed in Section 2.3.3.
The EBSD or stereographic data used to generate the equal volume distribution in Figure
4.2 were created from the triple junctions within the simulated distribution in Figure 4.1.
Likewise, the stereographic data used to generate the unequal volume distribution in Figure 4.4
were created from the triple junctions within the simulated distribution in Figure 4.3. The
experimental distributions in Figure 4.2 and Figure 4.4 were generated from 500,000 triple
junction measurements at a fixed misorientation. The simulated distributions in Figure 4.1 and
Figure 4.3 were generated from approximately 500,000 triple junctions at a fixed misorientation.
The slight difference in triple junctions implemented in the experimental and simulated
distributions is a result of the filtering process.
Visual comparison of the distributions provides a simple analysis of the stereological
technique. As apparent when comparing Figure 4.1 and Figure 4.2 and Figure 4.3 and Figure
4.4, at these high data levels the technique shows excellent visual agreement. The
stereologically produced distributions demonstrate some minor peak broadening as evident in the
northern and southern hemisphere of the distributions. This is a slight artifact of the technique
and the broadening may be anticipated when generating results. The stereologically
93
reconstructed distributions in Figure 4.2 and Figure 4.4 demonstrate good agreement in peak
magnitude. While the peak magnitudes happened to be very close in these instances, there is still
some variance between the simulated and reconstructed magnitudes at this data level. For 12
distributions in both the equal and unequal distribution spaces, the average difference between
the simulated and reconstructed distribution peak magnitudes was .30 and .32. The standard
deviation of these peak difference values was .1787 and .1626.
To demonstrate the performance of the technique over a range of data levels, simulated
and stereologically reconstructed experimental distributions have been generated within the
equal volume cell distribution space for decreasing numbers of triple junctions. For conciseness
and greater visual detail, only the projection containing the distribution peak will be plotted at
each data level. Figure 4.5a – Figure 4.5f contain the simulated distribution peak projections for
distributions composed of approximately 500,000, 250,000, 100,000, 50,000, 25,000, and 10,000
twin-dependent junctions at a fixed misorientation. Figure 4.6a – Figure 4.6f contain the
corresponding stereologically generated distribution peak projections at the same data levels as
those found in Figure 4.5a – Figure 4.5f. For example, Figure 4.5a is the peak projection for a
simulated distribution composed of approximately 500,000 triple junctions. Figure 4.6a is the
stereologically generated distribution formed from 500,000 triple junction measurements
produced from the distribution in Figure 4.5a.
94
Figure 4.5 – Simulated distribution peak projections composed of approximately (a)
500,000 (b) 250,000 (c) 100,000 (d) 50,000 (e) 25,000 (f) 10,000 twin-dependent junctions
at a fixed misorientation.
95
Figure 4.6 – Distribution peak projections stereologically generated from (a) 500,000 (b)
250,000 (c) 100,000 (d) 50,000 (e) 25,000 (f) 10,000 simulated measurements of twin-
dependent junctions at a fixed misorientation.
This comparison at decreasing data levels visually demonstrates the performance of the
stereological technique as well as the distribution convergence behavior. It is apparent that as
the distribution data input decreases, the scatter increases within the distributions. This appears
to occur equally for both the simulated and stereological distributions. The stereologically
generated distributions also tend to perform poorer as the distributions diverge. Thus, the
performance of the stereological technique must be considered in the context of the quantity of
data inputs. From examining the distributions, it is evident that the distribution peak was
identified by the stereological technique all the way down to 25,000 triple junctions. This
demonstrates a degree of robustness within the technique since the peak was identified despite
significant scatter within the distributions. As apparent in the simulated distribution at 10,000
96
triple junctions, this number of junctions was not sufficient to form a peak in the distribution.
Therefore, there was nothing for the stereological technique to reconstruct. While the peaks
were identified down to approximately 25,000 triple junctions, the peak magnitudes were closely
approximated only until 100,000–50,000 triple junctions. Below this point the magnitudes
between the simulated and stereological distributions began to vary significantly. This behavior
indicates that the method can at least provide qualitative identification of distribution peaks at
low levels of data, but care must be taken to ensure sufficient data was measured to reliably form
the distribution character.
If quantitative results are expected from the stereological technique, significant data must
be collected in order to form a reliable distribution. Clearly, significant data is required to form a
reliable distribution even if all parameters were known, as indicated by the simulated
distributions. Further insight into the reliability of the technique as well as the distribution
convergence behavior can be gained by examining several quantitative performance factors.
4.1.2 Quantitative Validation of the Technique
A measure of relative distribution convergence may be created by considering the
number of data inputs per cell within the distribution space. This has been employed previously
when analyzing results from grain boundary distributions [38]. As the number of triple junctions
within each cell increases, the distribution converges and the results become more reliable. A
summary of the triple junctions per cell has been created in Table 4.1.
97
Table 4.1 – Summary of cells at a fixed misorientation, triple junctions per cell, and triple
junctions for the full space for varying levels of fixed misorientation data. (a) Actual data
taken from the simulated distributions in Figure 4.5. (b) Values calculated for a 12.9
degree resolution at the10 degree resolution filtering levels. (c)Values calculated for a 15
degree resolution at the10 degree resolution filtering levels.
This work was performed at 10 degrees resolution and will focus on the results within
Table 4.1a. The first two columns of Table 4.1a indicate the number of triple junctions
98
implemented in the distribution at a fixed misorientation and the number of cells in the grain
boundary space at a fixed misorientation. The change in cells across the rows in the second
column is the result of the distribution filtering. The third column is the number of triple
junctions per cell if the included triple junctions from the first column were randomly dispersed
throughout the distribution space. In this application the distribution was not random; therefore,
the distribution peak cells will have values greater than this number while the valley cells will be
lower. The difference in the triple junctions per cell at the distribution peaks and valleys
depends on the degree of distribution anisotropy. While the number of random triple junctions
per cell does not represent the actual distribution of triple junctions within the space, this value
may still provide a simple method of determining relative convergence. For example, for the
distributions formed at a fixed misorientation with 10,000 triple junctions, a random distribution
would have provided less than two triple junctions per cell. In the anisotropic case, the minimum
values would have been even lower than this. Clearly, this wasn’t nearly enough to form a
distribution. Note that the distributions began converging and the stereological procedure began
reconstructing the peaks accurately from 50,000 – 100,000 triple junctions at a fixed
misorientation. This corresponds to 8.63 – 17.25 random triple junctions per cell.
A better comparison of distribution similarity, to be used for the stereological validation,
is provided by the relation given in Equation ( 3.2 ) on page 80 when18 comparing the simulated
and stereological results within the factorial design. This is the relation adapted from Morawiec
which provides a single scalar value between 0 and 1 according to the similarity of the
distributions over the full distribution space [70]. The value 0 corresponds to identical
distributions while 1 corresponds to opposing distributions. The adapted relation has been
applied to the distributions whose peaks are listed in Figure 4.5 and Figure 4.6. A graph of these
99
results is shown in Figure 4.7. As apparent in the figure, the difference values seem to accurately
describe the similarities of the figures with a quantitative value. Most notable is the rate of
change of the curve’s negative slope. This value begins increasing dramatically below 100,000
triple junctions where the magnitudes of the simulated and stereologically generated distributions
begin diverging. For this simple application, this technique seems to hold good promise in
providing insights into distribution results.
Figure 4.7 – Difference values of similarity between the simulated and stereologically
reconstructed boundaries in Figure 4.5 and Figure 4.6.
The fourth column of Table 4.1a corresponds to the approximate quantity of triple
junctions necessary for expanding the results at a fixed misorientation to the full distribution
space. It is somewhat alarming to note that the reasonable convergence obtained at 50,000 –
100,000 triple junctions at a fixed misorientation corresponds to 16 – 32 million triple junctions
in the full space. In this same column the lowest levels of convergence and stereological
validation, which provided only rough qualitative results, would require measuring anywhere
from 3-8 million triple junctions. This would result in significant experimental time despite
using two-dimensional EBSD measurements on a single section plane. Clearly, the 10^6 triple
junction approximation provided by Bunge is of the correct order of magnitude but on the low
100
end of data requirements [61]. As apparent in the fourth column of Table 4.1a, quantitative
results with better reliability would require data at another order of magnitude which becomes
impractical.
The amount of data required to generate the full distribution with reasonable reliability
may be reduced to practical levels by slightly reducing the distribution resolution. Table 4.1a
indicates that a full distribution with a resolution of 10 degrees requires approximately 3.24
million triple junctions for 1.72 random triple junctions per cell. This data quantity was not
sufficient to form the distribution peak. By reducing the resolution to approximately 12.9
degrees, or 7 cells per 90 degrees, 3.81 million triple junctions provides approximately 9.23
random triple junctions per cell. By comparing the levels of random triple junctions per cell, this
is better relative convergence than could be achieved with 16.2 million triple junctions at 10
degrees resolution. This dramatic improvement in convergence with a slight decrease in
resolution is the nature of a discretized high-dimensional space. Small changes in the numbers
of cells on each level compound across all levels for a large reduction in total numbers of cells.
Table 4.1c is provided as a reference for the data reduction and improved convergence for a
resolution of 15 degrees. While data suggests boundary properties vary above 10 degrees,
reducing the resolution slightly would enable characterizations with much greater reliability [69].
This is a reasonable approach for the current limitations in the speed of experimental
measurements. Despite a loss of resolution, the distributions could be formed reliably and some
conclusions drawn. As automated data collection methods improve, smaller resolutions could be
attempted.
Further improvements in the distribution convergence rates could be achieved without
reducing the resolution. This could be accomplished by implementing more sophisticated array
101
cell assignment functions. In this study triple junctions were assigned to cells with a unit value.
The location of a value within the cell made no difference in assignment. If unit values were
divided between cells according to their proximity to cell borders, the distribution would be
naturally smoothed. For instance, if a value lands practically at a cell border the unit value
should be split between the neighboring cells. If a value lands at the center of a cell the entire
unit value should be assigned to that cell. Anything in between these extremes is divided
between cells according to proximity to the border. This would provide a more converged
distribution for the same quantity of data without interpolation or approximate methods of
smoothing.
102
CHAPTER 5
CONCLUSIONS
The results of this work indicate that this is an effective method for twin-dependent triple
junction characterization on a large scale. Given the sampling biases introduced by the required
geometric and symmetric constraints, distribution values have been weighted by a uniform
random distribution. This weighting correction is not dependent on the features of the
distribution and may be uniformly applied to all biased distributions. The weighting also enables
distributions with unequal volume cells to be produced to assist in identifying distribution
artifacts.
Care must be taken to ensure sufficient data are measured to provide reliable results,
though this is the case with all distributions of microstructural features. The ease and speed of
experimental measurements through automated EBSD on a single section plane enables this
technique to measure the high quantities of data necessary for generating twin-dependent triple
junction distributions. For clarity it should be noted that in the case of highly-textured materials,
analysis on more than one section plane might be necessary in order to randomly sample the
distribution. The removal of the need to reconstruct a three-dimensional polycrystalline
microstructure gives this technique a further advantage in ease and speed over common three-
dimensional approaches. The accessibility of the experimental equipment necessary for this
approach also puts this method into the hands of researchers everywhere and empowers them
with an additional tool. While this method is limited to materials with a high fraction of coherent
103
twin boundaries, it will provide the first experimental look at triple junctions on a large scale.
Despite its limitations, this technique will lead to advances in understanding triple junction
phenomena and the grain boundary network. The experience and framework gained through this
work also prepares the foundation for a generalized approach in the future.
104
CHAPTER 6
FUTURE WORK
6.1 Experimental Application
The validated stereological method and developed reliability measures provide an
excellent foundation for the experimental application of this work. Experimental studies
characterizing twin-dependent triple junctions should now be carried out in a variety of materials
with a high fraction of coherent twin boundaries. This work will provide a first look at triple
junctions and hopefully insight into their significance within the polycrystalline structure.
6.1.1 Decreasing the Weighting Factor Computational Time
Despite the advances of this work, the computational time to form weighting factors
provides a minor obstacle to generating experimental twin-dependent triple junction
distributions. As plotted in Figure 3.22, the computational time to generate the weighting factors
at the selected CosN1Discrt and CosN3Discrt levels of 46 was approximately 39 hours. It
should be noted that these weighting factors were generated at a fixed misorientation. In order to
generate the weighting factors for the full distribution space, substantially more time will be
required.
To estimate the required computing time for the full space, the number of distinct
misorientation cells within the distribution space may be approximated. The domain of the Euler
angles 1 , , 2 is parameterized by 1 , cos , and 2 over 20 1 , 1cos0 , and
105
20 2 . For an approximate 10 degrees resolution the domain is discretized into 9 bins per
90 degrees. Therefore the volume of bins within the misorientation space consists of
29169936 bins. It should be recalled that there exist 9 equivalent misorientations for
every unique misorientation within the space. The conventions utilized for selecting a
fundamental zone identified a single representative misorientation from all equivalent
representations. We may therefore approximate the distribution fundamental zone to be 1/9th
of
the misorientation space. There are then 32492916 unique misorientation cells within the
distribution space. At a rate of 39 hours per cell, 526.5 days of computational time are required
to compute the weighting factors.
While the weighting factors only need to be computed a single time per selected
resolution, this quantity of computational time is still unacceptable. Clearly, substantial work
must be done in developing improved methods of generating weighting factors. Several
strategies for future development will be briefly discussed. The above estimate of computational
time assumed that all work would be done on a single processor. Given the discrete nature of the
space and algorithms implemented, it is assumed that the weighting factors could be generated
using parallel processors. On an advanced cluster the computational time could be reduced to a
small fraction of the approximated time. In addition, the code currently has not been optimized
for speed. Surely strategic changes to the code could have an effect on reducing the
computational time. It is also notable that the computational time listed above was for a
resolution of 10 degrees. In the end of Section 4.1.2, Quantitative Validation of the Technique, it
was noted that it is currently experimentally prohibitive to implement a resolution of 10 degrees.
This was the result of the impractical quantity of data required to generate a 10 degree
106
distribution with statistical reliability. It was advised for a researcher to decrease the resolution
by a few degrees which would allow distributions to be formed with reasonable reliability.
Conclusions could then be reliably made, albeit with less detailed microstructures. A decreased
resolution requires new weighting factors to be computed, but given the reduction in cells, they
may be generated much faster. By using approximate generation parameter values and the
stereological factor levels for a 10 degree resolution, the weighing factors for a 15 degree
resolution were computed in a mere 11.4 hours. Given the reduction of cells, the approximate
computational time for the full space would amount to 45.6 days. If the stereological parameters
were found at optimal levels, this number could be reduced even further. As also noted in
Section 4.1.2, the convergence rates of the distributions could be achieved by implementing
improved array assignment functions. These functions would reduce the computational time for
generating triple junction distributions and the corresponding weighting factors.
Several strategies for reducing the computational time for the requisite weighting factors
are listed above. It should also be emphasized that significant analysis could be performed at
fixed misorientations. When peaks within a distribution are identified, weighting factors could
be formed at fixed misorientations corresponding to those peaks. This would most likely provide
triple junction data corresponding to the most common features within the distribution and also
provide sufficient data for statistical reliability.
6.2 Generating a Generalized Triple Junction Distribution
As already emphasized, the development of the methodology for measuring twin-
dependent triple junction distributions is preparatory to forming generalized triple junction
distributions. The fundamentals developed for twin-dependent distributions have facilitated the
107
development of the basic foundational theory for characterizing triple junctions universally. This
theory will be briefly developed here for future expansion.
6.2.1 Parameters and Conventions of a Generalized Triple Junction Distribution
Now that twin-dependent triple junction distributions have been successfully formed,
their parameters and conventions may be adapted and expanded to a general junction. The twin-
dependent triple junction consists of six independent parameters: the spherical coordinates A1
and A1 of A1n , the dihedral angle between A2n and A3n , and the misorientation ABg . As a
general triple junction does not contain the assumed twin boundary as the twin-dependent
junction, five parameters must be added to the characterization. These parameters are for the
additional plane parameters which in this work consist of two spherical coordinates for the
boundary plane orientation and three for the boundary misorientation. The parameters of a
general triple junction are shown in Figure 6.1.
While there are many variations of triple line or boundary plane parameters which may
be utilized for characterizing the triple junction planes, for now the 11 independent parameters as
given in Figure 6.1 will be utilized. The general triple junction may be characterized by the
minimum junction misorientation ABg , the maximum junction misorientation CAg , the
boundary normals A1n and A3n in terms of spherical coordinates A1 , A1 and A3 , A3 , and a
dihedral angle between A1n and A2n . The misorientations are parameterized by the Euler
angles 1 , , 2 in the Bunge convention [64]. The minimum misorientation boundary is
identified as plane 1 and the maximum misorientation boundary is assigned as plane 2. The
remaining plane defaults to plane 3. The plane parameter spherical coordinates are referenced
108
within the grain A coordinate frame which is identified between planes 1 and 3. Grain B is
assigned between planes 1 and 2 and Grain C between planes 2 and 3. The boundary normals
A1n , A2n , and A3n all point about the triple line in the direction from minimum to maximum
misorientation.
Figure 6.1 - Parameters and conventions of a general triple junction distribution.
Many of the parameters and conventions of the general method are similar to those of the
twin-dependent technique and are adopted for identical reasons. For instance, the convention of
all boundary normals pointing in the direction of minimum to maximum misorientations removes
the inversion symmetry of the system and ensures that a triple junction is characterized
identically whether observed from any direction. This convention also allows the dihedral angles
between planes to be easily calculated. As for the twin-dependent distributions, the crystal
coordinate frame is utilized to reduce the dimensionality of the space. The boundary plane
109
normal parameterization is used for plane characterization as it may enable further adaptation of
the grain boundary plane stereology.
While the assignment of parameters is largely arbitrary, the boundaries adjacent to grain
A were selected given they border the reference frame by which the plane parameters are
characterized. It seems most convenient to assign the distribution parameters to the planes and
misorientations which border the grain where the characterization activity is occurring. In
addition, by choosing the minimum and maximum misorientations for characterization of the
junction, the remaining dependent misorientation exists between these. In some applications
these misorientations might be utilized as upper and lower misorientation bounds.
6.2.2 Selecting a Fundamental Zone
As for the twin-dependent triple junction distribution, crystal symmetries within the
characterized grains provide numerous symmetrically equivalent triple junctions with distinct
and difficult to correlate parameter values. Of all the equivalent regions within the parameter
space, a single fundamental zone must be selected so that every unique triple junction will be
assigned a single set of parameters. A fundamental zone may be selected for the generalized
triple junction by adapting the method used for twin-dependent junctions. The method for twin-
dependent junctions is itself an adaptation of the method of selecting a fundamental zone for
grain boundaries and misorientations [34,65,70–74,89,90].
The relations here will be formed for cubic symmetries. In order to form a fundamental
zone for the general triple junction, the minimum misorientation ABg will first be selected
within a fundamental zone. For misorientation ABg , there exist 576 equivalent misorientations
by the relation: TAjBi
eq
AB gCgCg where iC , jC are the cubic symmetry operators and i , j =
110
1 to 24. As explained by Morawiec for grain boundary distributions, the symmetry operator
applied to the crystal orientation Ag must simultaneously be applied to the boundary A1n , which
is referenced within the Ag frame [70]. This relationship between the symmetry operator and
the orientations of the grains and plane boundary cannot be decoupled. Therefore the equivalent
A1n planes are given by: Aj
eq
A C 11 nn . In the triple junction, the neighboring plane A3n is also
referenced within the Ag frame and equivalent A3n planes are given by: Aj
eq
A C 33 nn . To form a
fundamental zone for a misorientation and associated plane, selection rules must be applied to
the symmetry operators to select a unique misorientation within each equivalent class.
Following the well-established criteria for selecting a fundamental zone for cubic
misorientations, symmetry operators will be selected such that the misorientation has the
minimum possible misorientation angle and a misorientation axis which lies within the
stereographic triangle [70–74,89,90].
The selection of this unique misorientation for ABg and its implications for planes A1n
and A3n may be written as follows:
TAjBi
FZ
AB gCgCg
Aj
FZ
1A C 1nn
Aj
FZ
3A C 3nn
Where iC and jC are the symmetry operators which select ABg within the fundamental
zone or FZ
ABg . Clearly, A1n and A3n are coupled to the symmetry operator jC . For the triple
junction characterization an additional misorientation CAg is required which has equivalent
111
representations by the relationship TCkAj
eq
CA gCgCg . Clearly, when selecting a
fundamental zone for the boundary ABg , jC was already selected. To finish forming the
fundamental zone for the junction, the remaining symmetry operator kC must be selected
according to a consistent criterion. As kC will determine the orientation of the CAg
misorientation axis, kC will be selected such that the misorientation axis lies within the
stereographic triangle. While jC does not provide the minimum misorientation angle for CAg ,
the selection criteria for ABg should provide consistent values of jC which uniquely define
CAg . A single representation for each unique triple junction is the goal of selecting a
fundamental zone and this appears to be satisfied by these conventions.
6.2.3 Stereology and Data Requirements of a Generalized Triple Junction Distribution
Though the potential parameters and a fundamental zone of the generalized triple
junction have been developed in the previous two sections, a stereological method for the
generalized triple junction requires future development. A stereological method is necessary as
only 8 parameters of the triple junction’s 11 independent parameters are measurable from a
section plane. These include the azimuthal angles A1 and A3 of A1n and A3n and the
misorientations ABg and CAg . A stereological method is the characterization method of
choice given the data requirements to form this distribution. As noted previously, the data to
form a distribution may be approximated by 10N measurements, where N is the dimensionality of
the desired feature [61]. According to this guideline, approximately 1011
triple junctions might
be required to form a general triple junction distribution. For the twin-dependent triple junction
112
distribution the 10N measurements approximation was shown to be a little conservative and even
more measurements were required for reasonable reliability. Even if the 1011
approximation is
used, this is far beyond what is possible through two-dimensional measurements. As two-
dimensional measurements consistently outpace what can be done through three-dimensional
methods, it seems logical to pursue a stereological method despite current limitations.
The immeasurable parameters from a section plane are the A1 and A3 polar angles of
A1n and A3n and the dihedral angle between A1n and A2n . If the A1 and A3 angles are
known, the dihedral angle can be found from the trace of plane 2 within the section plane and
the geometric constraints of the triple junction. This method was used for finding for the
twin-dependent triple junction. A reasonable starting point for developing the general triple
junction stereology is to adapt the grain boundary stereology to be applied to both A1n and A3n
[66]. This is a literal expansion of what was applied to the twin-dependent triple junction
distribution and the algorithm would be very similar. A possible obstacle to this adaptation is
that the probabilities of the method go down an order of magnitude given the addition of another
plane. For instance, when applying the grain boundary stereology to a single plane at an
approximate resolution of 10 degrees, the probability of a potential plane being the actual
orientation is 1 over the discretization of the hemisphere or 1/18. If this same technique were
applied to two planes as for the general triple junction, the probability would become
3241181181 / . This might not be problematic after all since the space of the distribution
has increased in dimensionality from 610 to
1110 . In addition, perhaps the geometric constraints
of the triple junction could be leveraged in the process. This was not the case for twin-dependent
113
triple junctions as an almost negligible fraction of potential triple junctions with dihedral angles
greater than 180 degrees were generated during the stereological method.
While the physical capability of measuring a general triple junction distribution in the
section plane might be years away experimentally, there is no reason to delay in developing this
method. Given the great advancements in computing and data storage technology, this
methodology could be developed using simulated microstructures as the twin-dependent method
was. Waiting until experimental data collection speeds have increased appropriately will waste
valuable time during which this method could be developed, adapted, and advanced. Ideally, this
method would be refined using simulations and would be ready for breakthroughs in
experimental techniques. Given the success with the twin-dependent methodology, this future
work holds great potential. In addition, the value of an experimental method for developing
general triple junction distributions is far beyond that of the twin-dependent method in that it is
not restricted to a small field of materials. This method will allow materials engineering to take
a much needed leap from grain boundaries and will surely lead to a more complete
understanding of polycrystalline topology and phenomena.
114
BIBLIOGRAPHY
[1] Hardy GB, Field DP. Metall Mater Trans A 2015;46:2273. With permission of Springer
Science+Business Media
[2] Priester L. Grain Boundaries: From Theory to Engineering, 1st ed. Dordrecht: Springer;
2013.
[3] Rohrer GS. J Am Ceram Soc 2011;94:633.
[4] Kumar M, King WE, Schwartz AJ. Acta Mater 2000;48:2081.
[5] Schuh CA, Kumar M, King WE. Acta Mater 2003;51:687.
[6] Watanabe T. Res Mech 1984;11:47.
[7] Fionova L, Konokenko O, Matveev V, Priester L, Lartigue S, Dupau F. Interface Sci
1994;1:207.
[8] Randle V. Scr Metall Mater 1993;28:889.
[9] Minich RW, Schuh CA, Kumar M. Phys Rev B 2002;66:1.
[10] Schuh CA, Minich RW, Kumar M. Philos Mag 2003;83:711.
[11] Frary M, Schuh CA. Appl Phys Lett 2003;83:3755.
[12] Frary M, Schuh CA. Phys Rev B 2004;69:1.
[13] Frary M, Schuh CA. Philos Mag 2005;85:1123.
[14] Frary M, Schuh CA. Acta Mater 2005;53:4323.
[15] Balogh Z, Stender P, Chellali MR, Schmitz G. Metall Mater Trans A Phys Metall Mater
Sci 2013;44:4487.
[16] Czubayko U, Sursaeva VG, Gottstein G, Shvindlerman LS. Acta Mater 1998;46:5863.
[17] Gottstein G, Shvindlerman LS, Zhao B. Scr Mater 2010;62:914.
[18] Barrales-Mora LA, Gottstein G, Shvindlerman LS. Acta Mater 2012;60:546.
115
[19] Zhao B, Gottstein G, Shvindlerman LS. Acta Mater 2011;59:3510.
[20] Zhao B, Verhasselt JC, Shvindlerman LS, Gottstein G. Acta Mater 2010;58:5646.
[21] Zhao B, Ziemons A, Shvindlerman LS, Gottstein G. Acta Mater 2012;60:811.
[22] Zhao B, Shvindlerman L, Gottstein G. Int J Mater Res 2014;105:1151.
[23] Yin K-M, King AH, Hsieh TE, Chen F-R, Kai JJ, Chang L. Microsc Microanal
1997;3:417.
[24] Bokstein B, Ivanov V, Oreshina O, Peteline A, Peteline S. Mater Sci Eng A 2001;302:151.
[25] King AH. Scr Mater 2010;62:889.
[26] Bollmann W. Philos Mag A 1984;49:73.
[27] Bollmann W. Philos Mag A 1988;57:637.
[28] Bollmann W. Mater Sci Eng A 1989;113:129.
[29] Doni E, Bleris G. Phys status solidi 1988;110:383.
[30] Palumbo G, Aust KT. Scr Metall Mater 1990;24:1771.
[31] Rohrer GS, El Dasher BS, Miller HM, Rollett AD, Saylor DM. Distribution of Grain
Boundary Planes at Coincident Site Lattice Misorientations, in:. MRS Spring Meet. 2004.
[32] Rohrer GS. J Mater Sci 2011;46:5881.
[33] Saylor DM, Morawiec A, Rohrer GS. Commun Am Ceram Soc 2002;85:3081.
[34] Saylor DM, Morawiec A, Rohrer GS. Acta Mater 2003;51:3663.
[35] Saylor DM, Morawiec A, Rohrer GS. Acta Mater 2003;51:3675.
[36] Dillon S, Rohrer G. J Am Ceram Soc 2009;92:1580.
[37] Li J, Dillon SJ, Rohrer GS. Acta Mater 2009;57:4304.
[38] Rohrer GS, Li J, Lee S, Rollett a. D, Groeber M, Uchic MD. Mater Sci Technol
2010;26:661.
[39] Herring C. Surface Tension as a Motivation for Sintering, in:. Phys. Powder Metall. 1951.
116
[40] Morawiec A. Acta Mater 2000;48:3525.
[41] Robertson IM, Schuh C a., Vetrano JS, Browning ND, Field DP, Jensen DJ, Miller MK,
Baker I, Dunand DC, Dunin-Borkowski R, Kabius B, Kelly T, Lozano-Perez S, Misra A,
Rohrer GS, Rollett AD, Taheri ML, Thompson GB, Uchic M, Wang X-L, Was G. J Mater
Res 2011;26:1341.
[42] Uchic MD. Serial Sectioning Methods for Generating 3D Characterization Data of Grain-
and Precipitate-Scale Microstructures, in:. Ghosh S, Dimiduk D (Eds.). Comput. Methods
Microstruct. Relationships. Boston, MA: Springer US; 2011.
[43] Buffiere JY, Cloetens P, Ludwig W, Maire E, Salvo L. MRS Bull 2008;33:611.
[44] Kastner J, Harrer B, Requena G, Brunke O. NDT E Int 2010;43:599.
[45] Poulsen HF, Nielsen SF, Lauridsen EM, Schmidt S, Suter RM, Lienert U, Margulies L,
Lorentzen T, Juul Jensen D. J Appl Crystallogr 2001;34:751.
[46] Larson BC, Yang W, Ice GE, Budai JD, Tischler JZ. Nature 2002;415:887.
[47] Poulsen HF, Jensen DJ, Vaughan GBM. MRS Bull 2004:166.
[48] Ludwig W, King A, Reischig P, Herbig M, Lauridsen EM, Schmidt S, Proudhon H, Forest
S, Cloetens P, Roscoat SR Du, Buffière JY, Marrow TJ, Poulsen HF. Mater Sci Eng A
2009;524:69.
[49] Li SF, Lind J, Hefferan CM, Pokharel R, Lienert U, Rollett a. D, Suter RM. J Appl
Crystallogr 2012;45:1098.
[50] Spanos G, Rowenhorst DJ, Lewis AC, Geltmacher AB. MRS Bull 2008;33:597.
[51] Rowenhorst DJ, Voorhees PW. Annu Rev Mater Res 2012;42:105.
[52] Kubis AJ, Shiflet GJ, Hull R, Dunn DN. Metall Mater Trans A 2004;35:1935.
[53] Uchic MD, Groeber M, Wheeler IV R, Scheltens F, Dimiduk DM. Microsc Microanal
2004;10:1136.
[54] Groeber M a., Haley BK, Uchic MD, Dimiduk DM, Ghosh S. Mater Charact 2006;57:259.
[55] Echlin MP, Mottura A, Torbet CJ, Pollock TM. Rev Sci Instrum 2012;83:023701.
[56] DeHoff RT. J Microsc 1983;131:259.
117
[57] Kral M V., Mangan M a., Spanos G, Rosenberg RO. Mater Charact 2000;45:17.
[58] Alkemper J, Voorhees PW. J Microsc 2001;201:388.
[59] Spowart JE, Mullens HE, Puchala BT. Jom 2003;55:35.
[60] Morawiec A. Mater Sci Forum 2012;702-703:697.
[61] Bunge H-J. Mater Sci Forum 1994;157-162:13.
[62] Russ JC, Dehoff RT. Practical Stereology. 2001.
[63] Handwerker C a., Pollock TM. Jom 2014;66:1321.
[64] Bunge H-J. Texture Analysis in Materials Science, English. London: Butterworths; 1982.
[65] Morawiec A. Symmetries of Grain Boundary Distributions, in:. Grain Growth Polycryst.
Mater. III. 1998.
[66] Saylor DM, El-Dasher BS, Adams BL, Rohrer GS. Metall Mater Trans A 2004;35:1981.
[67] El Dasher B, Sano T, Rohrer GS. J Am Ceram Soc 2004;87:670.
[68] Rohrer GS, Saylor DM, El Dasher B, Adams BL, Rollett AD, Wynblatt P. Int J Mater Res
2004;95:197.
[69] Sutton AP, Balluffi RW. Thermodynamics of Interfaces, in:. Interfaces Cryst. Mater.
Oxford: Clarendon Press; 1996.
[70] Morawiec A. Orientations and Rotations: Computations in Crystallographic Textures, 1st
ed. Berlin: Springer-Verlag; 2004.
[71] Frank FC. Metall Trans A 1988;19:403.
[72] Neumann P. Textures Microstruct 1991;14-18:53.
[73] Heinz A, Neumann P. Acta Crystallogr Sect A Found Crystallogr 1991;47:780.
[74] Morawiec A, Field DP. Philos Mag A 1996;73:1113.
[75] Pond R, Bollmann W. Philos Trans R Soc London 1979;292:449.
[76] Kalonji G, Cahn JW. Le J Phys Colloq 1982;43:C6.
118
[77] Cullity BD. Elements of X-Ray Diffraction, 1st ed. Reading, MA: Addison-Wesley
Publishing Company; 1956.
[78] Glowinski K, Morawiec A. Metall Mater Trans A 2014;45:3189.
[79] Randle V. Scr Mater 2001;44:2789.
[80] Wright SI, Larsen RJ. J Microsc 2002;205:245.
[81] Bennett T a., Kim CS, Rohrer GS, Rollett AD. Mater Sci Forum 2004;467-470:727.
[82] Kim C-S, Hu Y, Rohrer GS, Randle V. Scr Mater 2005;52:633.
[83] Rohrer GS, Randle V, Kim C-S, Hu Y. Acta Mater 2006;54:4489.
[84] Randle V, Rohrer GS, Miller HM, Coleman M, Owen GT. Acta Mater 2008;56:2363.
[85] Bower KM. Sci Comput Instrum 2000;17:64.
[86] Montgomery DC. Design and Analysis of Experiments, 5th ed. New York: John Wilery &
Sons, Inc.; 2001.
[87] Lawson J, Erjavec J. Modern Statistics for Engineering and Quality Improvement.
Duxbury Thomson Learning; 2001.
[88] Sleeper A. Minitab Demystified. New York: McGraw Hill; 2012.
[89] Saylor DM. The Character Dependence of Interfacial Energies in Magnesia. Carnegie
Mellon University, 2001.
[90] Morawiec A. Acta Crystallogr Sect A Found Crystallogr 1997;53:273.
APPENDIX
120
A. PROGRAM CODE EXCERPTS AND DETAILS
As indicated in the body of this work, the method of forming twin-dependent triple
junction distributions was developed in a software format with the intent to automate the
distribution generation process. Separate programs were developed for generating the equal and
unequal volume twin-dependent triple junction distributions. The distinct equal and unequal
volume parameters result in disparate spaces and discretizations between the two methods.
Therefore the individual programs greatly facilitated the program development process.
Components of both programs are incompatible, while others are identical. The key to
the differences between the programs is the interactions of the method with the parameters and
space arrays. Now that the programs are developed and fully functional, it is possible to
combine them into a single program though their distinct algorithms must remain independent.
Joining the programs will require significant effort and attentiveness. If this code and method is
continually advanced and improved, it would be advisable to join the programs. Then a single
program could be improved rather than independently adapting two nearly similar programs.
Each triple junction distribution generation program consists of approximately 12,000
lines of code. While a small fraction of this code has been adapted from Stuart Wright’s
program gshelite, the large majority has been independently created for this project. The source
of adapted code has been credited in the comments preceding the adapted functions. As
inserting all of the source code for just one of the programs would require over 200 pages,
selections from just one of the programs will be inserted with some instructional comments. The
121
full program may be acquired by contacting the author or Dr. David Field. Excerpts from the
equal volume triple junction distribution generation program will be given accompanied by a
brief description of functionality.
A.1 TJDinit()
This function is the triple junction distribution initialization function. It assigns many
important global variables to be used by the other functions within the program. It also
initializes important file streams and assigns essential values for the distribution such as the
resolution and the distribution peak for a simulated distribution. This function also sets values
for distribution generation parameters according to the resolution and quantity of data. In short,
this function contains essentials for forming a distribution or running other functions. It typically
must be run prior to any program function or set of functions.
/* ------------------------------------------------------------------------------------ * The following function is an initialization routine which provides all necessary * values to begin the simulation/experimental analysis * ----------------------------------------------------------------------------------- */ void TJDinit() { char CPath[_MAX_PATH]; string Filename, Filename1; //Assign datafile names datafile = "Experimental_Data.txt"; UniformDatafile = "Uniform_Data.txt"; logfile = "Log_File.txt"; AnalysisFile = "Values_Analysis.txt"; AbsGeomFile10 = "Values_Abs_Geom_Space_10.txt"; AbsGeomFile15 = "Values_Abs_Geom_Space_15.txt"; //Find current directory path _getcwd(CPath, _MAX_PATH); CurrentPath = CPath; Filename = CurrentPath + "\\" + logfile; ofstream outlogfile(Filename.c_str()); if (outlogfile.fail()) {
122
cout << "Error: Couldn't open " << logfile << endl; outlogfile.close(); exit(1); } Filename1 = CurrentPath + "\\" + AnalysisFile; ofstream outAnalysisFile(Filename1.c_str()); if (outAnalysisFile.fail()) { cout << "Error: Couldn't open " << AnalysisFile << endl; outAnalysisFile.close(); exit(1); } //Generate symmetries CubicSymmetries(); //Initialize random seed srand(time(NULL)); /*Initialize values*/ if (verbose) cout << "Initializing parameters and values for equal volume solution\n"; if (verbose) outlogfile << "Initializing parameters and values for equal volume solution\n"; //Set domain of misorientation space (The algorithms using cosPHIRange must be adapted for //values greater than 1) phi1Range = 2*PI; cosPHIRange = 1; phi2Range = PI/2; //Setting resolution and discretization values (Discretization values for CosDiscrt and //CosAlphaDiscrt must be even valued. Otherwise their corresponding alogorithms must be //adapted) Resolution = 10; if (verbose) cout << endl << "Resolution = " << Resolution << endl << endl; if (verbose) outlogfile << endl << "Resolution = " << Resolution << endl << endl; if (Resolution == 15) { Phi1Discrt = 24; CosPHIDiscrt = 6; Phi2Discrt = 6; CosDiscrt = 12; PhiDiscrt = 24; CosAlphaDiscrt = CosDiscrt; //Setting Space mapping values RandCellPtsGeom = 4219; RandTraceVects = 10370370; if (verbose) cout << "Geometric Random Cell Points = " << RandCellPtsGeom << endl;
123
if (verbose) cout << "Space Random Trace Vectors = " << RandTraceVects << endl << endl; if (verbose) outlogfile << "Geometric Random Cell Points = " << RandCellPtsGeom << endl; if (verbose) outlogfile << "Space Random Trace Vectors = " << RandTraceVects << endl << endl; //Setting number of simulated or experimental values SimDataValues = 10370370; if (verbose) cout << "Number of simulated or experimental values = " << SimDataValues << endl << endl; if (verbose) outlogfile << "Number of simulated or experimental values = " << SimDataValues << endl << endl; //Setting average point fractions AvgPtFractionSim = 0; AvgPtFractionExp = AvgPtFractionSim; if (verbose) cout << "Simulated Average Point Fraction = " << AvgPtFractionSim << endl; if (verbose) cout << "Experimental Average Point Fraction = " << AvgPtFractionExp << endl << endl; if (verbose) outlogfile << "Simulated Average Point Fraction = " << AvgPtFractionSim << endl; if (verbose) outlogfile << "Experimental Average Point Fraction = " << AvgPtFractionExp << endl << endl; //Setting stereological discretization Cos111N2Discrt = 1631; CosN1Discrt = 46; CosN3Discrt = 46; if (verbose) cout << "N2 stereological discretization = " << Cos111N2Discrt << endl; if (verbose) cout << "N1 stereological discretization = " << CosN1Discrt << endl; if (verbose) cout << "N3 stereological discretization = " << CosN3Discrt << endl << endl; if (verbose) outlogfile << "N2 stereological discretization = " << Cos111N2Discrt << endl; if (verbose) outlogfile << "N1 stereological discretization = " << CosN1Discrt << endl; if (verbose) outlogfile << "N3 stereological discretization = " << CosN3Discrt << endl << endl; } if (Resolution == 10) { Phi1Discrt = 36; CosPHIDiscrt = 9; Phi2Discrt = 9; CosDiscrt = 18; PhiDiscrt = 36; CosAlphaDiscrt = CosDiscrt;
124
//Setting Space mapping values RandCellPtsGeom = 12500; RandTraceVects = 35E6; if (verbose) cout << "Geometric Random Cell Points = " << RandCellPtsGeom << endl; if (verbose) cout << "Space Random Trace Vectors = " << RandTraceVects << endl << endl; if (verbose) outlogfile << "Geometric Random Cell Points = " << RandCellPtsGeom << endl; if (verbose) outlogfile << "Space Random Trace Vectors = " << RandTraceVects << endl << endl; //Setting number of simulated or experimental values SimDataValues = 500000; if (verbose) cout << "Number of simulated or experimental values = " << SimDataValues << endl << endl; if (verbose) outlogfile << "Number of simulated or experimental values = " << SimDataValues << endl << endl; //Setting average point fractions AvgPtFractionSim = -1.7312E-20*pow((double)SimDataValues,3) + 9.4668E-14*pow((double)SimDataValues,2) - 1.9971E-07*SimDataValues + 2.3492E-01; if (AvgPtFractionSim < 0 || AvgPtFractionSim >= 1) { AvgPtFractionSim = 0; } AvgPtFractionExp = AvgPtFractionSim; if (verbose) cout << "Simulated Average Point Fraction = " << AvgPtFractionSim << endl; if (verbose) cout << "Experimental Average Point Fraction = " << AvgPtFractionExp << endl << endl; if (verbose) outlogfile << "Simulated Average Point Fraction = " << AvgPtFractionSim << endl; if (verbose) outlogfile << "Experimental Average Point Fraction = " << AvgPtFractionExp << endl << endl; //Setting stereological discretization Cos111N2Discrt = 1631; CosN1Discrt = 46; CosN3Discrt = 46; if (verbose) cout << "N2 stereological discretization = " << Cos111N2Discrt << endl; if (verbose) cout << "N1 stereological discretization = " << CosN1Discrt << endl; if (verbose) cout << "N3 stereological discretization = " << CosN3Discrt << endl << endl; if (verbose) outlogfile << "N2 stereological discretization = " << Cos111N2Discrt << endl; if (verbose) outlogfile << "N1 stereological discretization = " << CosN1Discrt << endl;
125
if (verbose) outlogfile << "N3 stereological discretization = " << CosN3Discrt << endl << endl; } //Setting distribution plotting values RandomPlotPts = 500000; //RandomPlotPts = 400000; //RandomPlotPts = 200000; Shemisphere = true; //Setting ideal triple junction values (TJ at [-1 -2 3]) //Peak 1 /*P1[0] = 1; P1[1] = -2; P1[2] = -1; P2[0] = 1; P2[1] = 1; P2[2] = 1; P3[0] = -3; P3[1] = 0; P3[2] = -1;*/ //Peak 2 P1[0] = 1; P1[1] = -2; P1[2] = -1; P2[0] = 1; P2[1] = 1; P2[2] = 1; P3[0] = -2; P3[1] = 1; P3[2] = 0; Vector2ThetaPhi(P1,Ptheta1a,Pphi1a); Palpha = MinAngle(P2,P3); /*Fix a single misorientation*/ //Declare constants double GAB[3][3]; //Define misorientation //FixedMis = 38.94*D2R; FixedMis = 20*D2R; //FixedAxis[0] = 1; FixedAxis[1] = 1; FixedAxis[2] = 0; FixedAxis[0] = 9; FixedAxis[1] = 5; FixedAxis[2] = 2; if (verbose) cout << "Fixed misorientation axis = " << FixedAxis[0] << " " << FixedAxis[1] << " " << FixedAxis[2] << endl; if (verbose) cout << "Fixed misorientation angle = " << FixedMis << endl; if (verbose) outlogfile << "Fixed misorientation axis = " << FixedAxis[0] << " " << FixedAxis[1] << " " << FixedAxis[2] << endl; if (verbose) outlogfile << "Fixed misorientation angle = " << FixedMis << endl; //Find transformation matrix GAB AATogMat(FixedMis,FixedAxis,GAB); //Find GAB within selected fundamental zone FundZoneMis(GAB,GABfm); gMatToEang(GABfm,phi1ABfm,PHIABfm,phi2ABfm); ArrayIndicesEuler(phi1ABfm,PHIABfm,phi2ABfm,ifm,jfm,kfm); if (verbose) cout << "Fixed misorientation = " << phi1ABfm << " " << PHIABfm << " " << phi2ABfm << endl; if (verbose) cout << "Fixed misorientation indices = " << ifm << " " << jfm << " " << kfm << endl << endl; if (verbose) outlogfile << "Fixed misorientation = " << phi1ABfm << " " << PHIABfm << " " << phi2ABfm << endl;
126
if (verbose) outlogfile << "Fixed misorientation indices = " << ifm << " " << jfm << " " << kfm << endl << endl; //Verify misorientation /*EangTogMat(phi1ABfm,PHIABfm,phi2ABfm,GAB); gMatToAxAng(GAB,FixedAxis,FixedMis); if (verbose) cout << "Fixed misorientation axis = " << FixedAxis[0] << " " << FixedAxis[1] << " " << FixedAxis[2] << endl; if (verbose) cout << "Fixed misorientation angle = " << FixedMis << endl;*/ //Set relative and absolute error Epsilon = .001; EpsilonAbs = 1E-8; outlogfile.close(); outAnalysisFile.close(); }
A.2 SpaceGen()
This function is an essential function to forming a simulated or experimental distribution.
In the program the experimental functions may be utilized in the future to form distributions
from experimental EBSD data. Until now they have exclusively used simulated experimental
data and the structure of the program reflects that. SpaceGen() has slowly evolved to its current
state at which it performs several key functions. The function first maps the distribution space
within the parameter space by generating random triple junctions within each cell and recording
the volume of distribution space within each cell. After recording essential information about
the space geometry it then labels cells entirely outside the distribution with a 0 and those within
or bordering the distribution with a 1. These values are then written to the Space.geom array. In
this manner, cells outside the distribution can be entirely avoided while running routines.
After mapping the space, SpaceGen() forms weighting factors for simulated distributions.
As both mapping the space and forming simulated weighting factors are very time consuming, it
writes these values to files so they may be recalled when generating distributions. SpaceGen()
has two user inputs which allows the user the choice whether to map the space or generate
127
simulated weighting factors. If the user already has this information from previous program runs
the user may opt not to recalculate the values but to read them from the files instead.
After either forming weighting factors or reading them from a file, SpaceGen() will filter
these values according to the quantity of simulated values to be used. It then stores the filtered
weighting values in the Space.Sim array to be recalled when generating simulated distributions.
In a brief summary, SpaceGen() generates and stores geometric space data which is necessary for
forming a simulated or experimental distribution. It also generates, filters, and stores simulated
weighting factors for forming a simulated distribution.
/* ------------------------------------------------------------------------------------ * The following function first maps the distribution space and then fills the Space * array with weighted values for all junctions within the fundamental zone. All * junctions outside the of the distribution space or rather within the empty space * within the parameter space receive a zero value. The values are filtered to remove * singular border points. The experimental distribution weighting values are then * assigned to the array. * ----------------------------------------------------------------------------------- */ void SpaceGen(bool CalcAbsGeomSpace, bool CalcSimWeightFactors) { int i, j, k, l, m, q, r, ncellsTJDholeSim, CellDistValues, CellExcludedValues, TotalCellDistValues, TotalCellExcludedValues, TotalValues, ncellsTJDbody, ncellsTJDborder; double costheta1a, phi1a, cosAlpha, N1[3], N2[3], N3[3], Wfactor, Norm, FractionSpaceGeom, Geom, Sim; string Filename, Filename1, Filename2, Filename3, Filename4; Filename = CurrentPath + "\\" + logfile; ofstream outlogfile(Filename.c_str(), ios_base::app); if (outlogfile.fail()) { cout << "Error: Couldn't open " << logfile << endl; outlogfile.close(); exit(1); } Filename1 = CurrentPath + "\\" + AnalysisFile; ofstream outAnalysisFile(Filename1.c_str(), ios_base::app); if (outAnalysisFile.fail()) { cout << "Error: Couldn't open " << AnalysisFile << endl; outAnalysisFile.close(); exit(1);
128
} if (Resolution == 10) { Filename2 = CurrentPath + "\\" + AbsGeomFile10; } else if (Resolution == 15) { Filename2 = CurrentPath + "\\" + AbsGeomFile15; } else { cout << "Resolution value not matched" << endl; exit(1); } if (Resolution == 10) { Filename3 = CurrentPath + "\\" + "WeightFactorsSim10.txt"; } else if (Resolution == 15) { Filename3 = CurrentPath + "\\" + "WeightFactorsSim15.txt"; } else { cout << "Resolution value not matched" << endl; exit(1); } //Allocate space array SpaceAlloc(); //Initialize necessary values N2[0] = 1/sqrt(3.); N2[1] = 1/sqrt(3.); N2[2] = 1/sqrt(3.); ncellsTJDholeSim = 0; Norm = 0; if (CalcAbsGeomSpace == true) { //Initialize necessary values ncellsTJD = 0; ncellsTJDbody = 0; ncellsTJDborder = 0; TotalCellDistValues = 0; TotalCellExcludedValues = 0; /*Determine cells within the absolute geometric space of the distribution*/ if (verbose) cout << "Determining cells within the absolute geometric space of the distribution" << endl << endl; if (verbose) outlogfile << "Determining cells within the absolute geometric space of the distribution" << endl << endl; i = ifm; j = jfm; k = kfm; //for(i=0; i<Phi1Discrt; ++i) for(j=0; j<CosPHIDiscrt; ++j) for(k=0; k<Phi2Discrt; ++k)
129
for(l=0; l<CosDiscrt; ++l) for(m=0; m<PhiDiscrt; ++m) for(q=0; q<CosAlphaDiscrt; ++q) { //Initialize values r = 0; CellDistValues = 0; CellExcludedValues = 0; //Add unit values to each cell within the geometric domain while (r < RandCellPtsGeom) { //Generate random triple junctions within each cell RandomTJVectorDihedralIndices(l,m,q,N1,N3); //Exclude triple junctions where a dihedral angle exceeds 180 degrees if(ExcessiveDihedral(N1,N2,N3)) { ++CellExcludedValues; ++r; continue; } //Add unit value to corresponding cell Space[i][j][k][l][m][q].geom += 1; ++CellDistValues; ++r; } TotalCellDistValues += CellDistValues; TotalCellExcludedValues += CellExcludedValues; } //Zero cells absolutely outside domain and give all cells within domain or on border a unit value i = ifm; j = jfm; k = kfm; //for(i=0; i<Phi1Discrt; ++i) for(j=0; j<CosPHIDiscrt; ++j) for(k=0; k<Phi2Discrt; ++k) for(l=0; l<CosDiscrt; ++l) for(m=0; m<PhiDiscrt; ++m) for(q=0; q<CosAlphaDiscrt; ++q) { if (Space[i][j][k][l][m][q].geom == RandCellPtsGeom) { ncellsTJDbody++; } if (Space[i][j][k][l][m][q].geom != RandCellPtsGeom && Space[i][j][k][l][m][q].geom != 0) { ncellsTJDborder++; } if (Space[i][j][k][l][m][q].geom > 0) { Space[i][j][k][l][m][q].geom = 1; ncellsTJD++; } }
130
if (verbose) cout << "Number of cells within fixed misorientation parameter space = " << PhiDiscrt*CosDiscrt*CosAlphaDiscrt << endl; if (verbose) cout << "Number of cells pertaining to the geometric hole of the distribution = " << PhiDiscrt*CosDiscrt*CosAlphaDiscrt - ncellsTJD << endl; if (verbose) cout << "Number of cells pertaining to the absolute geometric space of the distribution\n= " << ncellsTJD << endl; if (verbose) cout << "Number of cells pertaining to the body of the distribution geometric space\n= " << ncellsTJDbody << endl; if (verbose) cout << "Number of cells pertaining to the border of the distribution geometric space\n= " << ncellsTJDborder << endl << endl; if (verbose) outlogfile << "Number of cells within fixed misorientation parameter space = " << PhiDiscrt*CosDiscrt*CosAlphaDiscrt << endl; if (verbose) outlogfile << "Number of cells pertaining to the geometric hole of the distribution = " << PhiDiscrt*CosDiscrt*CosAlphaDiscrt - ncellsTJD << endl; if (verbose) outlogfile << "Number of cells pertaining to the absolute geometric space of the distribution\n= " << ncellsTJD << endl; if (verbose) outlogfile << "Number of cells pertaining to the body of the distribution geometric space\n= " << ncellsTJDbody << endl; if (verbose) outlogfile << "Number of cells pertaining to the border of the distribution geometric space\n= " << ncellsTJDborder << endl << endl; //Determine fraction of distribution space within included cells TotalValues = TotalCellDistValues + TotalCellExcludedValues; FractionSpaceGeom = (double)TotalCellDistValues/(double)TotalValues; VolumeCellsDistribution = FractionSpaceGeom*PhiDiscrt*CosDiscrt*CosAlphaDiscrt; if (verbose) cout << "Fraction of parameter space within the absolute geometric space = " << FractionSpaceGeom << endl; if (verbose) cout << "Cell volume within the distribution space = " << VolumeCellsDistribution << endl << endl; if (verbose) outlogfile << "Fraction of parameter space within the absolute geometric space = " << FractionSpaceGeom << endl; if (verbose) outlogfile << "Cell volume within the distribution space = " << VolumeCellsDistribution << endl << endl; //Write absolute geometric space data out to file ofstream outAbsGeomFile(Filename2.c_str()); if (outAbsGeomFile.fail()) { cout << "Error: Couldn't open " << Filename2 << endl; outAbsGeomFile.close(); exit(1); } outAbsGeomFile << ncellsTJD << endl << ncellsTJDbody << endl << ncellsTJDborder << endl << FractionSpaceGeom << endl << VolumeCellsDistribution << endl;
131
i = ifm; j = jfm; k = kfm; //for(i=0; i<Phi1Discrt; ++i) for(j=0; j<CosPHIDiscrt; ++j) for(k=0; k<Phi2Discrt; ++k) for(l=0; l<CosDiscrt; ++l) for(m=0; m<PhiDiscrt; ++m) for(q=0; q<CosAlphaDiscrt; ++q) { outAbsGeomFile << Space[i][j][k][l][m][q].geom << endl; } outAbsGeomFile.close(); } else { //Read absolute geometric space data from file if (verbose) cout << "Reading distribution absolute geometric space data from file" << endl << endl; if (verbose) outlogfile << "Reading distribution absolute geometric space data from file" << endl << endl; ifstream infile(Filename2.c_str()); if (infile.fail()) { cout << "Error: Couldn't open " << Filename2 << endl; infile.close(); exit(1); } infile >> ncellsTJD >> ncellsTJDbody >> ncellsTJDborder >> FractionSpaceGeom >> VolumeCellsDistribution; i = ifm; j = jfm; k = kfm; //for(i=0; i<Phi1Discrt; ++i) for(j=0; j<CosPHIDiscrt; ++j) for(k=0; k<Phi2Discrt; ++k) for(l=0; l<CosDiscrt; ++l) for(m=0; m<PhiDiscrt; ++m) for(q=0; q<CosAlphaDiscrt; ++q) { infile >> Space[i][j][k][l][m][q].geom; } infile.close(); if (verbose) cout << "Number of cells within fixed misorientation parameter space = " << PhiDiscrt*CosDiscrt*CosAlphaDiscrt << endl; if (verbose) cout << "Number of cells pertaining to the geometric hole of the distribution = " << PhiDiscrt*CosDiscrt*CosAlphaDiscrt - ncellsTJD << endl; if (verbose) cout << "Number of cells pertaining to the absolute geometric space of the distribution\n= " << ncellsTJD << endl; if (verbose) cout << "Number of cells pertaining to the body of the distribution geometric space\n= " << ncellsTJDbody << endl; if (verbose) cout << "Number of cells pertaining to the border of the distribution geometric space\n= " << ncellsTJDborder << endl << endl; if (verbose) outlogfile << "Number of cells within fixed misorientation parameter space = " << PhiDiscrt*CosDiscrt*CosAlphaDiscrt << endl; if (verbose) outlogfile << "Number of cells pertaining to the geometric hole of the distribution = " << PhiDiscrt*CosDiscrt*CosAlphaDiscrt - ncellsTJD << endl;
132
if (verbose) outlogfile << "Number of cells pertaining to the absolute geometric space of the distribution\n= " << ncellsTJD << endl; if (verbose) outlogfile << "Number of cells pertaining to the body of the distribution geometric space\n= " << ncellsTJDbody << endl; if (verbose) outlogfile << "Number of cells pertaining to the border of the distribution geometric space\n= " << ncellsTJDborder << endl << endl; if (verbose) cout << "Fraction of parameter space within the absolute geometric space = " << FractionSpaceGeom << endl; if (verbose) cout << "Cell volume within the distribution space = " << VolumeCellsDistribution << endl << endl; if (verbose) outlogfile << "Fraction of parameter space within the absolute geometric space = " << FractionSpaceGeom << endl; if (verbose) outlogfile << "Cell volume within the distribution space = " << VolumeCellsDistribution << endl << endl; } if (CalcSimWeightFactors == true) { //Generate simulation weighting factors if (verbose) cout << "Generating simulation weighting factors" << endl << endl; if (verbose) outlogfile << "Generating simulation weighting factors" << endl << endl; //Initialize r r = 0; while (r<RandTraceVects) { //Generate random triple junctions in selected fundamental zone RandomTJ(N1,N3); //Find array indices of each triple junction cosAlpha = cos(MinAngle(N3,N2)); Vector2ArrayIndices(N1,l,m); ArrayIndicesCosAlpha(cosAlpha,q); //Add unit value to each corresponding cell //Exclude cells where a dihedral angle is absolutely greater than 180 degrees //This catches the rare few that slip by given finite values of RandCellPtsGeom if (Space[i][j][k][l][m][q].geom == 0) { continue; } //Add unit value to cell Space[i][j][k][l][m][q].Sim += 1; Norm += 1; //cout << i << " " << j << " " << k << " " << l << " " << m << " " << q << endl;
133
++r; //cout << r << endl << endl; } //Write simulated weighting factors out to file ofstream outSimWeightFile(Filename3.c_str()); if (outSimWeightFile.fail()) { cout << "Error: Couldn't open " << Filename3 << endl; outSimWeightFile.close(); exit(1); } outSimWeightFile << RandTraceVects << endl << Norm << endl; i = ifm; j = jfm; k = kfm; //for(i=0; i<Phi1Discrt; ++i) for(j=0; j<CosPHIDiscrt; ++j) for(k=0; k<Phi2Discrt; ++k) for(l=0; l<CosDiscrt; ++l) for(m=0; m<PhiDiscrt; ++m) for(q=0; q<CosAlphaDiscrt; ++q) { outSimWeightFile << Space[i][j][k][l][m][q].Sim << endl; } outSimWeightFile.close(); } else { //Read simulated weighting factors from file if (verbose) cout << "Reading simulated weighting factors from file" << endl << endl; if (verbose) outlogfile << "Reading simulated weighting factors from file" << endl << endl; ifstream infile1(Filename3.c_str()); if (infile1.fail()) { cout << "Error: Couldn't open " << Filename3 << endl; infile1.close(); exit(1); } infile1 >> RandTraceVects >> Norm; if (verbose) cout << "Simulation weighting factors formed with " << RandTraceVects << " RandTraceVects" << endl; if (verbose) outlogfile << "Simulation weighting factors formed with " << RandTraceVects << " RandTraceVects" << endl; i = ifm; j = jfm; k = kfm; //for(i=0; i<Phi1Discrt; ++i) for(j=0; j<CosPHIDiscrt; ++j) for(k=0; k<Phi2Discrt; ++k) for(l=0; l<CosDiscrt; ++l) for(m=0; m<PhiDiscrt; ++m) for(q=0; q<CosAlphaDiscrt; ++q) { infile1 >> Space[i][j][k][l][m][q].Sim; } infile1.close();
134
//PlotN1VectorsRandom(false,phi1ABfm,PHIABfm,phi2ABfm,-.258199); //For plotting weighting factors } //Finish forming normalization factor Norm = Norm/ncellsTJD; /*Filter simulated distribution according to quantity of data to remove singularities*/ if (verbose) cout << "Filtering data to remove singularities at distribution border cells" << endl << endl; if (verbose) outlogfile << "Filtering data to remove singularities at distribution border cells" << endl << endl; //for(i=0; i<Phi1Discrt; ++i) for(j=0; j<CosPHIDiscrt; ++j) for(k=0; k<Phi2Discrt; ++k) for(l=0; l<CosDiscrt; ++l) for(m=0; m<PhiDiscrt; ++m) for(q=0; q<CosAlphaDiscrt; ++q) { //Exclude cells where a dihedral angle is absolutely greater than 180 degrees if (Space[i][j][k][l][m][q].geom == 0) { continue; } if (Space[i][j][k][l][m][q].Sim < AvgPtFractionSim*Norm) { //cout << i << " " << j << " " << k << " " << l << " " << m << " " << q << endl; Space[i][j][k][l][m][q].Sim = 0; ncellsTJDholeSim++; continue; } } if (verbose) cout << "Number of cells below simulated zero filter = " << ncellsTJDholeSim << endl; ncellsTJDsim = ncellsTJD - ncellsTJDholeSim; if (verbose) cout << "Total number of cells pertaining to the simulated distribution = " << ncellsTJDsim << endl << endl; if (verbose) outlogfile << "Number of cells below simulated zero filter = " << ncellsTJDholeSim << endl; ncellsTJDsim = ncellsTJD - ncellsTJDholeSim; if (verbose) outlogfile << "Total number of cells pertaining to the simulated distribution = " << ncellsTJDsim << endl << endl; /*Regenerate normalization factor*/ Norm = 0; //for(i=0; i<Phi1Discrt; ++i) for(j=0; j<CosPHIDiscrt; ++j) for(k=0; k<Phi2Discrt; ++k) for(l=0; l<CosDiscrt; ++l) for(m=0; m<PhiDiscrt; ++m) for(q=0; q<CosAlphaDiscrt; ++q) { //Exclude cells where a dihedral angle is absolutely greater than 180 degrees if (Space[i][j][k][l][m][q].geom == 0)
135
{ continue; } //Exclude cells within simulated hole of space if (Space[i][j][k][l][m][q].Sim == 0) { continue; } Norm += Space[i][j][k][l][m][q].Sim; } //Finish forming normalization factor Norm = Norm/ncellsTJDsim; /*Convert values in space to MRD values and give all cells in domain a weighted value*/ //i = ifm; j = jfm; k = kfm; //for(i=0; i<Phi1Discrt; ++i) for(j=0; j<CosPHIDiscrt; ++j) for(k=0; k<Phi2Discrt; ++k) for(l=0; l<CosDiscrt; ++l) for(m=0; m<PhiDiscrt; ++m) for(q=0; q<CosAlphaDiscrt; ++q) { //Exclude cells where a dihedral angle is absolutely greater than 180 degrees if (Space[i][j][k][l][m][q].geom == 0) { continue; } //Exclude cells within simulated filtered hole of space if (Space[i][j][k][l][m][q].Sim == 0) { continue; } //Divide every value by normalization coefficient so that the average value of all the cells = 1 Space[i][j][k][l][m][q].Sim = Space[i][j][k][l][m][q].Sim/Norm; //Form weighting factor Space[i][j][k][l][m][q].Sim = 1/Space[i][j][k][l][m][q].Sim; } //PlotN1VectorsRandom(false,phi1ABfm,PHIABfm,phi2ABfm,-.258199); //For plotting weighting factors outAnalysisFile.close(); //Store space values /*Create stream for writing experimental data out to file*/ //Write values out to files if (verbose) cout << "Writing Space data out to file\n" << endl; if (verbose) outlogfile << "Writing Space data out to file\n" << endl; //Combine current directory path with filenames if (Resolution == 10) { Filename4 = CurrentPath + "\\" + "Values_Space_10.txt"; }
136
else if (Resolution == 15) { Filename4 = CurrentPath + "\\" + "Values_Space_15.txt"; } else { cout << "Resolution value not matched" << endl; outlogfile << "Resolution value not matched" << endl; outlogfile.close(); exit(1); } //Open and write to datafile ofstream outfile(Filename4.c_str()); if (outfile.fail()) { if (Resolution == 10) { cout << "Error: Couldn't open " << "Values_Space_10.txt" << endl; outlogfile << "Error: Couldn't open " << "Values_Space_10.txt" << endl; outfile.close(); outlogfile.close(); exit(1); } if (Resolution == 15) { cout << "Error: Couldn't open " << "Values_Space_15.txt" << endl; outlogfile << "Error: Couldn't open " << "Values_Space_15.txt" << endl; outfile.close(); outlogfile.close(); exit(1); } } //Define output format outfile << setprecision(8); outfile << fixed; //Output space calculation parameters outfile << Resolution << endl; outfile << RandCellPtsGeom << endl; outfile << RandTraceVects << endl; outfile << AvgPtFractionSim << endl; outfile << AvgPtFractionExp << endl; //Output absolute geometric data outfile << PhiDiscrt*CosDiscrt*CosAlphaDiscrt << endl; outfile << PhiDiscrt*CosDiscrt*CosAlphaDiscrt - ncellsTJD << endl; outfile << ncellsTJD << endl; outfile << ncellsTJDbody << endl; outfile << ncellsTJDborder << endl; outfile << FractionSpaceGeom << endl; outfile << VolumeCellsDistribution << endl;
137
//Output filtered data outfile << ncellsTJDholeSim << endl; outfile << ncellsTJDsim << endl; outfile << ncellsTJDexp << endl; i = ifm; j = jfm; k = kfm; //for(i=0; i<Phi1Discrt; ++i) for(j=0; j<CosPHIDiscrt; ++j) for(k=0; k<Phi2Discrt; ++k) for(l=0; l<CosDiscrt; ++l) for(m=0; m<PhiDiscrt; ++m) for(q=0; q<CosAlphaDiscrt; ++q) { //Find space characteristics for distributions Geom = Space[i][j][k][l][m][q].geom; Sim = Space[i][j][k][l][m][q].Sim; /*cout << "Geom = " << Geom << endl; cout << "Sim = " << Sim << endl; cout << "Space[" << i << "][" << j << "][" << k << "][" << l << "][" << m << "][" << q << "]" << endl << endl;*/ //Write values out to file outfile << setw(3) << i << setw(3) << j << setw(3) << k << setw(3) << l << setw(3) << m << setw(3) << q << setw(13) << Geom << setw(13) << Sim << endl; } outfile.close(); outlogfile.close(); //Analyze filtered space AnalyzeFilteredSpace(true); }
A.3 RebuildSpace()
As SpaceGen() takes substantial runtime, all values formed while running that function
are written to files. RebuildSpace() may be run to reallocate the Space array and assign stored
Space.geom and Space.Sim array values to the Space array. This should only be done if the
quantity of simulated data will be the same as that used for filtering the stored Space.Sim
distribution weighting values.
/* -------------------------------------------------------------------- * This function rebuilds the Space distribution from stored data. The * function allocates the array and reads the Space array values from the * files Values_Space_10 or Values_Space_15 according to the given * resolution. The function then assigns the values to the arrays. * -------------------------------------------------------------------- */ void RebuildSpace() {
138
int i, j, k, l, m, q, g, Resolution_Space, RandCellPtsGeom_Space, RandTraceVects_Space, CellsFixedMisSpace, CellsGeomHole, ncellsTJDbody, ncellsTJDborder, ncellsTJDholeSim, FilteredCells, s, ncellsTJDholeExp, FilteredCellsExp; double Geom, Sim, Exp, values, AvgPtFractionSim_Space, AvgPtFractionExp_Space, FractionSpaceGeom, FractionSpace, VolumeFilteredCells, FractionDistribution, VolumeCellsDistributionFiltered, data, FractionSpaceExp, VolumeFilteredCellsExp, FractionDistributionExp, VolumeCellsDistributionFilteredExp; string Filename, Filename1; Filename1 = CurrentPath + "\\" + logfile; ofstream outlogfile(Filename1.c_str(), ios_base::app); if (outlogfile.fail()) { cout << "Error: Couldn't open " << logfile << endl; outlogfile.close(); exit(1); } /*Read distribution values in from file*/ //Combine current directory path with filename if (verbose) cout << "Reading Space data from files" << endl << endl; if (verbose) outlogfile << "Reading Space data from files" << endl << endl; if (Resolution == 10) { Filename = CurrentPath + "\\" + "Values_Space_10.txt"; } else if (Resolution == 15) { Filename = CurrentPath + "\\" + "Values_Space_15.txt"; } else { cout << "Resolution value not matched" << endl; outlogfile << "Resolution value not matched" << endl; outlogfile.close(); exit(1); } //Open and read from distribution file to determine number of cells in distributions ifstream infile(Filename.c_str()); if (infile.fail()) { if (Resolution == 10) { cout << "Error: Couldn't open " << "Values_Space_10.txt" << endl; outlogfile << "Error: Couldn't open " << "Values_Space_10.txt" << endl; infile.close(); outlogfile.close(); exit(1);
139
} if (Resolution == 15) { cout << "Error: Couldn't open " << "Values_Space_15.txt" << endl; outlogfile << "Error: Couldn't open " << "Values_Space_15.txt" << endl; infile.close(); outlogfile.close(); exit(1); } } //Input space calculation parameters infile >> Resolution_Space; infile >> RandCellPtsGeom_Space; infile >> RandTraceVects_Space; infile >> AvgPtFractionSim_Space; infile >> AvgPtFractionExp_Space; //Input absolute geometric data infile >> CellsFixedMisSpace; infile >> CellsGeomHole; infile >> ncellsTJD; infile >> ncellsTJDbody; infile >> ncellsTJDborder; infile >> FractionSpaceGeom; infile >> VolumeCellsDistribution; //Input filtered data infile >> ncellsTJDholeSim; infile >> ncellsTJDsim; infile >> ncellsTJDexp; //Allocate arrays SpaceAlloc(); if (verbose) cout << "Assign Space values to array" << endl << endl; if (verbose) outlogfile << "Assign Space values to array" << endl << endl; //Read in measurements from datafile for (g=0; g<CellsFixedMisSpace; ++g) { infile >> i >> j >> k >> l >> m >> q >> Geom >> Sim; /*cout << "Geom = " << Geom << endl; cout << "Sim = " << Sim << endl; cout << "Space[" << i << "][" << j << "][" << k << "][" << l << "][" << m << "][" << q << "]" << endl << endl;*/ //Assign values to arrays Space[i][j][k][l][m][q].geom = Geom; /*cout << "Geom = " << Geom << endl; cout << "Geom = Space[" << i << "][" << j << "][" << k << "][" << l << "][" << m << "][" << q << "]" << endl << endl;*/
140
Space[i][j][k][l][m][q].Sim = Sim; /*cout << "AsymSim = " << AsymSim << endl; cout << "AsymSim = Space[" << i << "][" << j << "][" << k << "][" << l << "][" << m << "][" << q << "]" << endl << endl;*/ } //Input simulated filtered cells data infile >> FilteredCells; infile >> FractionSpace; infile >> VolumeFilteredCells; infile >> FractionDistribution; infile >> VolumeCellsDistributionFiltered; //Input experimental data and experimental filtered cells data if it exists s = 0; while (infile >> data && s <= 6) { if (s == 0) { ncellsTJDholeExp = data; } else if (s == 1) { ncellsTJDexp = data; } else if (s == 2) { FilteredCellsExp = data; } else if (s == 3) { FractionSpaceExp = data; } else if (s == 4) { VolumeFilteredCellsExp = data; } else if (s == 5) { FractionDistributionExp = data; } else if (s == 6) { VolumeCellsDistributionFilteredExp = data; } ++s; } if (s > 6) { for (g=0; g<CellsFixedMisSpace; ++g) { //Assign values to array infile >> i >> j >> k >> l >> m >> q >> Exp; Space[i][j][k][l][m][q].Exp = Exp; /*cout << "Exp = " << Exp << endl;
141
cout << "Exp = Space[" << i << "][" << j << "][" << k << "][" << l << "][" << m << "][" << q << "]" << endl << endl;*/ } } infile.close(); if (s == 0) { if (verbose) cout << endl << "Experimental space values not generated yet" << endl << endl; if (verbose) outlogfile << endl << "Experimental space values not generated yet" << endl << endl; } if (verbose) cout << endl << "Outputting stored Space parameters and properties: " << endl << endl; if (verbose) cout << endl << "Resolution = " << Resolution_Space << endl << endl; if (verbose) cout << "Geometric Random Cell Points = " << RandCellPtsGeom_Space << endl; if (verbose) cout << "Space Random Trace Vectors = " << RandTraceVects_Space << endl; if (verbose) cout << "Simulated Average Point Fraction = " << AvgPtFractionSim_Space << endl; if (verbose) cout << "Experimental Average Point Fraction = " << AvgPtFractionExp_Space << endl << endl; if (verbose) cout << "Number of cells within fixed misorientation parameter space = " << CellsFixedMisSpace << endl; if (verbose) cout << "Number of cells pertaining to the geometric hole of the distribution = " << CellsGeomHole << endl; if (verbose) cout << "Number of cells pertaining to the absolute geometric space of the distribution\n= " << ncellsTJD << endl; if (verbose) cout << "Number of cells pertaining to the body of the distribution geometric space\n= " << ncellsTJDbody << endl; if (verbose) cout << "Number of cells pertaining to the border of the distribution geometric space\n= " << ncellsTJDborder << endl; if (verbose) cout << "Fraction of parameter space within the absolute geometric space = " << FractionSpaceGeom << endl; if (verbose) cout << "Cell volume within the distribution space = " << VolumeCellsDistribution << endl << endl; if (verbose) cout << "Number of cells below simulated zero filter = " << ncellsTJDholeSim << endl; if (verbose) cout << "Total number of cells pertaining to the simulated distribution = " << ncellsTJDsim << endl << endl; if (verbose) cout << "Number of filtered cells = " << FilteredCells << endl; if (verbose) cout << "Fraction of distribution space within filtered cells = " << FractionSpace << endl; if (verbose) cout << "Excluded cell volume within the distribution space = " << VolumeFilteredCells << endl; if (verbose) cout << "Fraction of cell volume filtered from the entire distribution = " << FractionDistribution << endl; if (verbose) cout << "Cell volume within the distribution space after filtering = " << VolumeCellsDistributionFiltered << endl << endl;
142
if (s != 0) { if (verbose) cout << "Number of cells below experimental zero filter = " << ncellsTJDholeExp << endl; if (verbose) cout << "Total number of cells pertaining to the experimental distribution = " << ncellsTJDexp << endl << endl; if (verbose) cout << "Number of filtered cells = " << FilteredCellsExp << endl; if (verbose) cout << "Fraction of distribution space within filtered cells = " << FractionSpaceExp << endl; if (verbose) cout << "Excluded cell volume within the distribution space = " << VolumeFilteredCellsExp << endl; if (verbose) cout << "Fraction of cell volume filtered from the entire distribution = " << FractionDistributionExp << endl; if (verbose) cout << "Cell volume within the distribution space after filtering = " << VolumeCellsDistributionFilteredExp << endl << endl; } if (verbose) outlogfile << endl << "Outputting stored Space parameters and properties: " << endl << endl; if (verbose) outlogfile << endl << "Resolution = " << Resolution_Space << endl << endl; if (verbose) outlogfile << "Geometric Random Cell Points = " << RandCellPtsGeom_Space << endl; if (verbose) outlogfile << "Space Random Trace Vectors = " << RandTraceVects_Space << endl; if (verbose) outlogfile << "Simulated Average Point Fraction = " << AvgPtFractionSim_Space << endl << endl; if (verbose) outlogfile << "Experimental Average Point Fraction = " << AvgPtFractionExp_Space << endl << endl; if (verbose) outlogfile << "Number of cells within fixed misorientation parameter space = " << CellsFixedMisSpace << endl; if (verbose) outlogfile << "Number of cells pertaining to the geometric hole of the distribution = " << CellsGeomHole << endl; if (verbose) outlogfile << "Number of cells pertaining to the absolute geometric space of the distribution\n= " << ncellsTJD << endl; if (verbose) outlogfile << "Number of cells pertaining to the body of the distribution geometric space\n= " << ncellsTJDbody << endl; if (verbose) outlogfile << "Number of cells pertaining to the border of the distribution geometric space\n= " << ncellsTJDborder << endl; if (verbose) outlogfile << "Fraction of parameter space within the absolute geometric space = " << FractionSpaceGeom << endl; if (verbose) outlogfile << "Cell volume within the distribution space = " << VolumeCellsDistribution << endl << endl; if (verbose) outlogfile << "Number of cells below simulated zero filter = " << ncellsTJDholeSim << endl; if (verbose) outlogfile << "Total number of cells pertaining to the simulated distribution = " << ncellsTJDsim << endl << endl; if (verbose) outlogfile << "Number of filtered cells = " << FilteredCells << endl; if (verbose) outlogfile << "Fraction of distribution space within filtered cells = " << FractionSpace << endl;
143
if (verbose) outlogfile << "Excluded cell volume within the distribution space = " << VolumeFilteredCells << endl; if (verbose) outlogfile << "Fraction of cell volume filtered from the entire distribution = " << FractionDistribution << endl; if (verbose) outlogfile << "Cell volume within the distribution space after filtering = " << VolumeCellsDistributionFiltered << endl << endl; if (s != 0) { if (verbose) outlogfile << "Number of cells below experimental zero filter = " << ncellsTJDholeExp << endl; if (verbose) outlogfile << "Total number of cells pertaining to the experimental distribution = " << ncellsTJDexp << endl << endl; if (verbose) outlogfile << "Number of filtered cells = " << FilteredCellsExp << endl; if (verbose) outlogfile << "Fraction of distribution space within filtered cells = " << FractionSpaceExp << endl; if (verbose) outlogfile << "Excluded cell volume within the distribution space = " << VolumeFilteredCellsExp << endl; if (verbose) outlogfile << "Fraction of cell volume filtered from the entire distribution = " << FractionDistributionExp << endl; if (verbose) outlogfile << "Cell volume within the distribution space after filtering = " << VolumeCellsDistributionFilteredExp << endl << endl; } outlogfile.close(); }
A.4 SimDataGen()
This function forms a simulated distribution within the SimData array. Every value it
adds to the simulated distribution it also converts to experimental data as it would appear from an
EBSD scan. It writes this simulated experimental data out to a file so that it may be recalled and
used to form an experimental distribution by the stereological method. In this manner, it
generates simulated experimental data and the actual distribution from which that data was
derived to validate the stereologically formed distribution. The simulated distribution features a
peak intensity according to the frequency function selected within the code. SimDataGen()
contains many lines of code which have been commented out. While they are not necessary for
144
forming the distribution, they were useful for validating the method of selecting a fundamental
zone.
SimDataGen() has a companion function, UniformSimDataGen(), which is identical with
the exception that it forms a uniform random distribution and uniform random simulated
experimental data. This data will be utilized when forming experimental weighting factors.
/* ------------------------------------------------------------------------------------ * The following function simultaneously generates a simulated distribution and * simulated experimental data of that distribution given the assigned frequency * function. It outputs this data to a file for solving with the stereological approach. * ----------------------------------------------------------------------------------- */ void SimDataGen() { int i, j, k, l, m, q, t, u, lP, mP, qP, ExpValues, SimDistPts, lMax, mMax, qMax, lMin, mMin, qMin; double N1[3], N2[3], N3[3], Fpeak, theta1a, costheta1a, phi1a, cosAlpha, alphaN1, alphaN3, alphaN1N3, F, rand, phi1, PHI, phi2, GA[3][3], RRotate[3][3], phi1A, PHIA, phi2A, GS[3][3], N1P[3], N2P[3], N3P[3], L1[3], L2[3], L3[3], GAB[3][3], GB[3][3], GAT[3][3], phi1B, PHIB, phi2B, Norm, alpha, IdealPeak, MaxSim, MinSim, Range; string Filename, Filename1; Filename1 = CurrentPath + "\\" + logfile; ofstream outlogfile(Filename1.c_str(), ios_base::app); if (outlogfile.fail()) { cout << "Error: Couldn't open " << logfile << endl; outlogfile.close(); exit(1); } /*Initialization routine*/ if (!DefaultInputs) { //Determine number of experimental measurements to be generated /*cout << "Enter number of experimental measurements to be generated:" << endl; cin >> ndata; cout << endl;*/ ndata = SimDataValues; } //Allocate the simulated data array SimDataAlloc(); if (verbose) cout << "Generating experimental values" << endl << endl; if (verbose) outlogfile << "Generating experimental values" << endl << endl;
145
//Initialize necessary values //Fpeak = 10*exp(-pow(0.*R2D/15,2)) + 1; Fpeak = 10*exp(-pow(0.*R2D/15,2)) + 3.5; //Frequency function peak /*ArrayIndices(cos(Ptheta1a),Pphi1a,lP,mP); ArrayIndicesCosAlpha(cos(Palpha),qP); */ //Delta peak ExpValues = 0; SimDistPts = 0; Norm = 0; MaxSim = 0; MinSim = 1; /*Create stream for writing experimental data out to file*/ //Combine current directory path with filename Filename = CurrentPath + "\\" + datafile; //Open and write to datafile ofstream outfile(Filename.c_str()); if (outfile.fail()) { cout << "Error: Couldn't open " << datafile << endl; outlogfile << "Error: Couldn't open " << datafile << endl; outfile.close(); exit(1); } /*Generate orientations according to distribution*/ //while (SimDistPts<ndata) //Simulated values mandate generation while (ExpValues<ndata) //Experimental values mandate generation { //Generate random triple junctions within frame N2[0] = 1/sqrt(3.); N2[1] = 1/sqrt(3.); N2[2] = 1/sqrt(3.); RandomTJ(N1,N3); //Generate costheta1a, phi1a, & cosAlpha values from vectors Vector2ThetaPhi(N1,theta1a,phi1a); costheta1a = cos(theta1a); cosAlpha = cos(MinAngle(N3,N2)); //Solve for indices of given vectors ArrayIndices(costheta1a,phi1a,l,m); ArrayIndicesCosAlpha(cosAlpha,q); //Exclude cells where a dihedral angle is absolutely greater than 180 degrees //This catches the rare few that slip by given finite values of RandCellPtsGeom i = ifm; j = jfm; k = kfm; if (Space[i][j][k][l][m][q].geom == 0) { continue; } //Solve for closeness of triple junction to the ideal value alphaN1 = MinAngle(N1,P1);
146
alphaN3 = MinAngle(N3,P3); alphaN1N3 = (alphaN1 + alphaN3)/2; //cout << "alphaN1N3 = " << alphaN1N3*R2D << endl; //Solve for frequency value of junction //F = 10*exp(-pow(alphaN1N3*R2D/15,2)) + 1; F = 10*exp(-pow(alphaN1N3*R2D/15,2)) + 3.5; /*Compare randomly generated number to TJDsim MRD value of the cell corresponding to the randomly generated planes*/ //Generate random number and multiply by the maximum MRD value to provide random //MRD value rand = Random(); rand = rand*Fpeak; //Compare TJDsim MRD value //cout << "TJDsim[" << i << "][" << j << "][" << k << "][" << l //<< "][" << m << "][" << q << "] = " << TJDsim[i][j][k][l][m][q] << endl //<< endl; //if (l == lP && m == mP && q == qP) //Delta peak if (rand <= F) //Frequency function peak { //cout << "Accepted value" << endl; /*cout << "N1 = " << N1[0] << " " << N1[1] << " " << N1[2] << endl; cout << "N2 = " << N2[0] << " " << N2[1] << " " << N2[2] << endl; cout << "N3 = " << N3[0] << " " << N3[1] << " " << N3[2] << endl;*/ /*Generate Experimental data and validate fundamental zone*/ //Generate random crystal orientation GA RandomEulerAngles(phi1,PHI,phi2); EangTogMat(phi1,PHI,phi2,GA); //Check Values /*cout << "GA = " << endl; for (t=0; t<3; ++t) { for (u=0; u<3; ++u) { cout << GA[t][u] << " " ; } cout << endl; }*/ //Find orientation GB given GABfm and GA MultMatrix(GABfm,GA,GB); //Check values /*cout << "GB = " << endl; for (t=0; t<3; ++t) { for (u=0; u<3; ++u) {
147
cout << GB[t][u] << " " ; } cout << endl; } cout << endl;*/ //Generate a random rotation from the [111] direction to a symmmetrical equivalent Random111Rotation(RRotate); //Randomly rotate GA, GB, and triple junction away for experimental data and validation MultMatrix(RRotate,GA,GA); MultMatrix(RRotate,GB,GB); MultMatVect(RRotate,N1,N1); MultMatVect(RRotate,N2,N2); MultMatVect(RRotate,N3,N3); /*cout << "N1R = " << N1[0] << " " << N1[1] << " " << N1[2] << endl; cout << "N2R = " << N2[0] << " " << N2[1] << " " << N2[2] << endl; cout << "N3R = " << N3[0] << " " << N3[1] << " " << N3[2] << endl;*/ //Check Values /*cout << "GAR = " << endl; for (t=0; t<3; ++t) { for (u=0; u<3; ++u) { cout << GA[t][u] << " " ; } cout << endl; } cout << "GBR = " << endl; for (t=0; t<3; ++t) { for (u=0; u<3; ++u) { cout << GB[t][u] << " " ; } cout << endl; } cout << endl;*/ //Find Euler angles of GA & GB gMatToEang(GA,phi1A,PHIA,phi2A); gMatToEang(GB,phi1B,PHIB,phi2B); //Rotate rotated vectors by inverse of GA Transpose(GA,GAT); MultMatVect(GAT,N1,N1P); MultMatVect(GAT,N2,N2P);
148
MultMatVect(GAT,N3,N3P); //Calculate trace vectors from Nprime values TraceCalc(N1P,N2P,N1P,L1); TraceCalc(N1P,N2P,N2P,L2); TraceCalc(N1P,N2P,N3P,L3); //cout << "Sample: " << N2P[0] << " " << N2P[1] << " " << N2P[2] << endl; //cout << L2[0] << " " << L2[1] << " " << L2[2] << endl; //Given GA and random triple junction find values within fundamental zone //RotateGAGB111(N1,N2,N3,GA,GB,N1,N2,N3,GA,GB); /*cout << "N1[111] = " << N1[0] << " " << N1[1] << " " << N1[2] << endl; cout << "N2[111] = " << N2[0] << " " << N2[1] << " " << N2[2] << endl; cout << "N3[111] = " << N3[0] << " " << N3[1] << " " << N3[2] << endl;*/ //Check Values /*cout << "GA[111] = " << endl; for (t=0; t<3; ++t) { for (u=0; u<3; ++u) { cout << GA[t][u] << " " ; } cout << endl; } cout << "GB Post [111] = " << endl; for (t=0; t<3; ++t) { for (u=0; u<3; ++u) { cout << GB[t][u] << " " ; } cout << endl; } cout << endl;*/ //FundZoneGAGBTJ(N1,N3,GA,GB,N1,N3,GA,GB); /*cout << "N1 = " << N1[0] << " " << N1[1] << " " << N1[2] << endl; cout << "N2 = " << N2[0] << " " << N2[1] << " " << N2[2] << endl; cout << "N3 = " << N3[0] << " " << N3[1] << " " << N3[2] << endl;*/ //Check Values /*cout << "GA = " << endl; for (t=0; t<3; ++t) { for (u=0; u<3; ++u) { cout << GA[t][u] << " " ;
149
} cout << endl; } cout << "GB = " << endl; for (t=0; t<3; ++t) { for (u=0; u<3; ++u) { cout << GB[t][u] << " " ; } cout << endl; } cout << endl;*/ //Write experimental values out to a file outfile << setprecision(5); outfile << fixed; outfile << setw(9) << phi1A << setw(9) << PHIA << setw(9) << phi2A << setw(9) << phi1B << setw(9) << PHIB << setw(9) << phi2B << setw(9) << L1[0] << setw(9) << L1[1] << setw(9) << L2[0] << setw(9) << L2[1] << setw(9) << L3[0] << setw(9) << L3[1] << endl; //Generate costheta1a, phi1a, & cosAlpha values from vectors /*Vector2ThetaPhi(N1,theta1a,phi1a); costheta1a = cos(theta1a); cosAlpha = cos(MinAngle(N3,N2));*/ //Solve for indices of given vectors /*ArrayIndices(costheta1a,phi1a,l,m); ArrayIndicesCosAlpha(cosAlpha,q);*/ //Exclude cells which lie within the simulated filtered hole of space if (Space[i][j][k][l][m][q].Sim != 0) { SimData[i][j][k][l][m][q] += 1; SimDistPts++; } //cout << ExpValues << endl << endl; ExpValues++; } //cout << "Conditionally rejected" << endl << endl; } outfile.close(); /*Move through every cell applying weighting factors*/ i = ifm; j = jfm; k = kfm;
150
//for(i=0; i<Phi1Discrt; ++i) for(j=0; j<CosPHIDiscrt; ++j) for(k=0; k<Phi2Discrt; ++k) for(l=0; l<CosDiscrt; ++l) for(m=0; m<PhiDiscrt; ++m) for (q=0; q<CosAlphaDiscrt; ++q) { //Exclude cells where a dihedral angle is absolutely greater than 180 degrees if (Space[i][j][k][l][m][q].geom == 0) { continue; } //Exclude cells within filtered hole of space if (Space[i][j][k][l][m][q].Sim == 0) { continue; } //Apply weighting factors SimData[i][j][k][l][m][q] = SimData[i][j][k][l][m][q]*Space[i][j][k][l][m][q].Sim; Norm += SimData[i][j][k][l][m][q]; /*cout << "Space[" << i << "][" << j << "][" << k << "][" << l << "][" << m << "][" << q << "].asym = " << Space[i][j][k][l][m][q].Sim << endl << endl;*/ } //Finish forming normalization coefficient by dividing by number of cells in distribution Norm = Norm/ncellsTJDsim; /*Convert values to MRD values*/ //i = ifm; j = jfm; k = kfm; //for(i=0; i<Phi1Discrt; ++i) for(j=0; j<CosPHIDiscrt; ++j) for(k=0; k<Phi2Discrt; ++k) for(l=0; l<CosDiscrt; ++l) for(m=0; m<PhiDiscrt; ++m) for(q=0; q<CosAlphaDiscrt; ++q) { //Exclude cells where a dihedral angle is absolutely greater than 180 degrees if (Space[i][j][k][l][m][q].geom == 0) { continue; } //Exclude cells within asymmetric hole of space if (Space[i][j][k][l][m][q].Sim == 0) { continue; } //Divide every value by normalization coefficient so that the average value of all the cells = 1 SimData[i][j][k][l][m][q] = SimData[i][j][k][l][m][q]/Norm; /*cout << "SimData[" << i << "][" << j << "][" << k << "][" << l
151
<< "][" << m << "][" << q << "] = " << SimData[i][j][k][l][m][q] << endl << endl;*/ //Find maximum and minimum distribution values if (SimData[i][j][k][l][m][q] > MaxSim) { MaxSim = SimData[i][j][k][l][m][q]; lMax = l; mMax = m; qMax = q; } if (SimData[i][j][k][l][m][q] < MinSim) { MinSim = SimData[i][j][k][l][m][q]; lMin = l; mMin = m; qMin = q; } } //Output number of data points in simulated distribution if (verbose) cout << "Number of data points in simulated distribution = " << SimDistPts << endl; if (verbose) cout << "Number of experimental values generated = " << ExpValues << endl << endl; if (verbose) outlogfile << "Number of data points in simulated distribution = " << SimDistPts << endl; if (verbose) outlogfile << "Number of experimental values generated = " << ExpValues << endl << endl; /*Examine peaks in distribution*/ //Output maximum and minimum distribution values if (verbose) cout << "Maximum distribution value = " << MaxSim << endl << "Maximum value = SimData[" << i << "][" << j << "][" << k << "][" << lMax << "][" << mMax << "][" << qMax << "]" << endl << endl; if (verbose) cout << "Minimum distribution value = " << MinSim << endl << "Minimum value = SimData[" << i << "][" << j << "][" << k << "][" << lMin << "][" << mMin << "][" << qMin << "]" << endl << endl; if (verbose) outlogfile << "Maximum distribution value = " << MaxSim << endl << "Maximum value = SimData[" << i << "][" << j << "][" << k << "][" << lMax << "][" << mMax << "][" << qMax << "]" << endl << endl; if (verbose) outlogfile << "Minimum distribution value = " << MinSim << endl << "Minimum value = SimData[" << i << "][" << j << "][" << k << "][" << lMin << "][" << mMin << "][" << qMin << "]" << endl << endl; //Find array indices of Planes 1 and 3 Vector2ArrayIndices(P1,l,m); alpha = MinAngle(P2,P3); cosAlpha = cos(alpha); ArrayIndicesCosAlpha(cosAlpha,q); IdealPeak = SimData[i][j][k][l][m][q]; if (verbose) cout << "Ideal Peak = " << IdealPeak << endl << "Ideal Peak = SimData[" << i << "][" << j << "][" << k << "][" << l
152
<< "][" << m << "][" << q << "]" << endl << endl; if (verbose) outlogfile << "Ideal Peak = " << IdealPeak << endl << "Ideal Peak = SimData[" << i << "][" << j << "][" << k << "][" << l << "][" << m << "][" << q << "]" << endl << endl; Range = MaxSim - MinSim; cout << "Range = " << Range << endl << endl; outlogfile << "Range = " << Range << endl << endl; outlogfile.close(); }
A.5 SpaceTJDexpGen()
This function is the experimental equivalent of SpaceGen() in that it forms weighting
factors and filters these factors according to the quantity of experimental data. It then stores the
filtered weighting values in the Space.Exp array to be recalled when generating experimental
distributions. Like SpaceGen(), these factors are written out to a file so that they may be recalled
and filtered without regeneration if the user desires. This feature is exceptionally useful as
forming the experimental weighting factors is the most time consuming component of the code.
Unlike SpaceGen(), it doesn’t map the space for geometry as this was already accomplished by
SpaceGen().
SpaceTJDexpGen() inputs uniform simulated experimental data in order to form
weighting factors. As these factors are applied to stereologically generated distributions, they
must be formed while implementing the stereological method on random data. The Space.Exp
array values are added to the file containing the Space array data so that RebuildSpace() may be
utilized to rebuild the Space array. This removes the need to regenerate and filter values when
equivalent quantities of experimental data are being utilized.
/* ------------------------------------------------------------------------------------ * The following function reads in the uniform experimental data and generates the TJD * in the six-dimensional TJDexp accumulator array using Saylor's stereological * approach. It then generates the corresponding experimental weighting factors and
153
* writes these out to the Space array. * ----------------------------------------------------------------------------------- */ void SpaceTJDexpGen(bool CalcExpWeightFactors) { int g, h, i, j, k, l, m, q, r, s, w, x, Ndata, ndataExp, numberpts, lMax, mMax, qMax, lMin, mMin, qMin, ZeroTJDexp, IndexImproper, IndexProper, ncellsTJDholeExp, ExcessiveD, NormalD, A; double data, phi1A, PHIA, phi2A, phi1B, PHIB, phi2B, L1[3], L2[3], L3[3], N1P[3], N2P[3], N3P[3], GA[3][3], GB[3][3], N2PD[3], N2D[3], thetaN2P, phiN2P, costhetaN2P, MinError, Error, N2i[3], N2[3], Rotate111[3][3], GAT[3][3], GAB[3][3], phi1AB, PHIAB, phi2AB, thetaN1P, phiN1P, costhetaN1P, N1PD[3], N1D[3], TL[3], thetaN3P, phiN3P, costhetaN3P, N3PD[3], N3D[3], Pangle, MinN3Error, N3Error, N3[3], cosAlpha, Norm, Exp, TimeInSeconds, TimeInMinutes, TimeInHours; string Filename, Filename1, Filename2, Filename3, ans; clock_t Time; Filename1 = CurrentPath + "\\" + logfile; ofstream outlogfile(Filename1.c_str(), ios_base::app); if (outlogfile.fail()) { cout << "Error: Couldn't open " << logfile << endl; outlogfile.close(); exit(1); } if (Resolution == 10) { Filename2 = CurrentPath + "\\" + "WeightFactorsExp10.txt"; } else if (Resolution == 15) { Filename2 = CurrentPath + "\\" + "WeightFactorsExp15.txt"; } else { cout << "Resolution value not matched" << endl; exit(1); } //Combine current directory path with filenames if (Resolution == 10) { Filename3 = CurrentPath + "\\" + "Values_Space_10.txt"; } else if (Resolution == 15) { Filename3 = CurrentPath + "\\" + "Values_Space_15.txt"; } else { cout << "Resolution value not matched" << endl;
154
outlogfile << "Resolution value not matched" << endl; outlogfile.close(); exit(1); } //Open and write to datafile ofstream outfile(Filename3.c_str(), ios_base::app); if (outfile.fail()) { if (Resolution == 10) { cout << "Error: Couldn't open " << "Values_Space_10.txt" << endl; outlogfile << "Error: Couldn't open " << "Values_Space_10.txt" << endl; outfile.close(); outlogfile.close(); exit(1); } if (Resolution == 15) { cout << "Error: Couldn't open " << "Values_Space_15.txt" << endl; outlogfile << "Error: Couldn't open " << "Values_Space_15.txt" << endl; outfile.close(); outlogfile.close(); exit(1); } } //Allocate the TJD experimental array TJDexpAlloc(); //Initialize necessary values Norm = 0; N2[0] = 1/sqrt(3.); N2[1] = 1/sqrt(3.); N2[2] = 1/sqrt(3.); IndexImproper = 0; IndexProper = 0; ncellsTJDholeExp = 0; ExcessiveD = 0; NormalD = 0; if(CalcExpWeightFactors == true) { /*Read experimental data in from file*/ //Combine current directory path with filename if (verbose) cout << "Reading experimental values" << endl; if (verbose) outlogfile << "Reading experimental values" << endl; Filename = CurrentPath + "\\" + UniformDatafile; //Open and read from datafile to determine number of rows in data ifstream infile(Filename.c_str()); if (infile.fail()) { cout << "Error: Couldn't open " << UniformDatafile << endl; infile.close();
155
exit(1); } Ndata = 0; while(infile >> data) { Ndata++; } ndataExp = Ndata/12; cout << "Number of triple junctions in dataset = " << ndataExp << endl << endl; outlogfile << "Number of triple junctions in dataset = " << ndataExp << endl << endl; if (!DefaultInputs) { ////Number of triple junction measurements to be used //cout << "Use all triple junction measurements?\n"; //cin >> ans; cout << endl; //if((ans == "No")||(ans == "NO")||(ans == "no")||(ans == "N")||(ans == "n")) //{ // cout << "Enter number of measurements to be used in analysis:" << endl; // cin >> numberpts; // ndataExp = numberpts; //} //else if((ans == "Yes")||(ans == "YES")||(ans == "yes")||(ans == "Y")||(ans == "y")) //{ //} //else //{ // cout << "Invalid input" << endl; // exit(1); //} /*numberpts = 500000; ndataExp = numberpts; cout << "Using " << ndataExp << " triple junction measurements" << endl << endl;*/ cout << "Using all triple junction measurements" << endl << endl; outlogfile << "Using all triple junction measurements" << endl << endl; } if (verbose) cout << "Generating experimental distribution" << endl << endl; if (verbose) outlogfile << "Generating experimental distribution" << endl << endl; //Return to the beginning of file infile.clear(); infile.seekg(0, ios_base::beg); //Start timer Time = clock(); //Read in measurements from UniformDatafile
156
for (g=0; g<ndataExp; ++g) { infile >> phi1A; if (infile.eof() == true) { cout << "Error: End of file reached" << endl; infile.close(); exit(1); } infile >> PHIA >> phi2A >> phi1B >> PHIB >> phi2B >> L1[0] >> L1[1] >> L2[0] >> L2[1] >> L3[0] >> L3[1]; //Check values /*cout << setprecision(5); cout << fixed; cout << left; cout << setw(9) << phi1 << setw(9) << PHI << setw(9) << phi2 << setw(9) << phi1B << setw(9) << PHIB << setw(9) << phi2B << setw(9) << L1[0] << setw(9) << L1[1] << setw(9) << L2[0] << setw(9) << L2[1] << setw(9) << L3[0] << setw(9) << L3[1] << endl;*/ //Convert traces to plane normals in x-y plane L1[2] = 0; L2[2] = 0; L3[2] = 0; ConvertTrace2NVector(L1,L2,L1,N1P); ConvertTrace2NVector(L1,L2,L2,N2P); ConvertTrace2NVector(L1,L2,L3,N3P); //Generate GA and GB EangTogMat(phi1A,PHIA,phi2A,GA); EangTogMat(phi1B,PHIB,phi2B,GB); /*Find rotation which transforms N2 to the [111] direction*/ //Generate theta and phi Vector2ThetaPhi(N2P,thetaN2P,phiN2P); //Generate all possible values of thetaN2P MinError = .01; for (h=1; h<=Cos111N2Discrt; ++h) { costhetaN2P = 1 - (2./Cos111N2Discrt*h - 2./Cos111N2Discrt/2); thetaN2P = acos(costhetaN2P); ThetaPhi2Vector(thetaN2P,phiN2P,N2PD); MultMatVect(GA,N2PD,N2D); MultScalVect(sqrt(3.),N2D); //cout << N2D[0] << " " << N2D[1] << " " << N2D[2] << endl; //Extract value closest to <111> Error = CalcVect111Error(N2D); if (Error < MinError) {
157
MinError = Error; N2i[0] = N2D[0]; N2i[1] = N2D[1]; N2i[2] = N2D[2]; } if (MinError == 0.1) { cout << "Error: MinError = .1" << endl; } } //cout << N2i[0] << " " << N2i[1] << " " << N2i[2] << endl; //Extract signs of value closest to <111> q = Sign(N2i[0]); r = Sign(N2i[1]); s = Sign(N2i[2]); //cout << "Reconstructed: " << q << " " << r << " " << s << " " << endl; //Find GA minimum angle and [111] direction Rotation111(q,r,s,GA,Rotate111); //Rotate GA and GB MultMatrix(Rotate111,GA,GA); MultMatrix(Rotate111,GB,GB); //Generate GAB Transpose(GA,GAT); MultMatrix(GB,GAT,GAB); //Find misorientation within fundamental zone and identify symmetry operator FundZoneMisSymOp(GAB,GAB,A); //Extract Euler angles gMatToEang(GAB,phi1AB,PHIAB,phi2AB); ArrayIndicesEuler(phi1AB,PHIAB,phi2AB,i,j,k); //Count incorrectly assigned misorientations if (i != ifm || j != jfm || k != kfm) { IndexImproper++; } else { IndexProper++; } /*Given the plane normals in the x-y plane find all possible values of the N1 and associated N3 planes and assign them to their corresponding cells*/ //Generate theta and phi Vector2ThetaPhi(N1P,thetaN1P,phiN1P); Vector2ThetaPhi(N3P,thetaN3P,phiN3P); /*cout << "phiN1P = " << phiN1P << endl; cout << "phiN3P = " << phiN3P << endl;*/
158
//Generate all possible values of thetaN1P for (w=1; w<=CosN1Discrt; ++w) { costhetaN1P = 1 - (2./CosN1Discrt*w - 2./CosN1Discrt/2); //cout << costhetaN1P << endl; thetaN1P = acos(costhetaN1P); //cout << "thetaN1P = " << thetaN1P << endl; ThetaPhi2Vector(thetaN1P,phiN1P,N1PD); //cout << "N1P = " << N1PD[0] << " " << N1PD[1] << " " << N1PD[2] << endl; MultMatVect(GA,N1PD,N1D); //MultScalVect(sqrt(3.),N1D); //cout << "N1 = " << N1D[0] << " " << N1D[1] << " " << N1D[2] << endl; //Solve for triple line direction given N1D and N2 if(Clockwise(N1D,N2)) { //cout << "N1 clockwise from N2" << endl; CrossProduct(N1D,N2,TL); } else { //cout << "N1 counterclockwise from N2" << endl; CrossProduct(N2,N1D,TL); } //Generate all possible values of thetaN3P and select N3 MinN3Error = 1; for (x=1; x<=CosN3Discrt; ++x) { costhetaN3P = 1 - (2./CosN3Discrt*x - 2./CosN3Discrt/2); //cout << costhetaN3P << endl; thetaN3P = acos(costhetaN3P); ThetaPhi2Vector(thetaN3P,phiN3P,N3PD); MultMatVect(GA,N3PD,N3D); //MultScalVect(sqrt(3.),N3D); //cout << N3D[0] << " " << N3D[1] << " " << N3D[2] << endl; //Solve for N3D most nearly perpendicular to TL Pangle = MinAngle(N3D,TL); //cout << "Pangle = " << Pangle << endl; N3Error = RelError(PI/2,Pangle); if(N3Error < MinN3Error) { MinN3Error = N3Error; //cout << "MinN3Error = " << MinN3Error << endl << endl; VectorCopy(N3D,N3); } }
159
//cout << "N3 = " << N3[0] << " " << N3[1] << " " << N3[2] << endl; //cout << "MinN3Error Selected = " << MinN3Error << endl << endl; //Exclude cells where a dihedral angle exceeds 180 degrees if (ExcessiveDihedral(N1D,N2,N3)) { //cout << "Shouldn't happen" << endl; ExcessiveD++; continue; } NormalD++; //Find values within fundamental zone SymmetriesMultMatVect(A,N1D,N1D); SymmetriesMultMatVect(A,N3,N3); //Solve for dihedral angle alpha cosAlpha = cos(MinAngle(N2,N3)); //Solve for indices of potential vectors Vector2ArrayIndices(N1D,l,m); ArrayIndicesCosAlpha(cosAlpha,q); //Exclude cells where a dihedral angle is absolutely greater than 180 degrees //This catches the rare few that slip by given finite values of RandCellPtsGeom if (Space[i][j][k][l][m][q].geom == 0) { continue; } //Add values to cell TJDexp[i][j][k][l][m][q] += 1; Norm++; } } infile.close(); //End timer and calculate time Time = clock() - Time; TimeInSeconds = Time/(double) CLOCKS_PER_SEC; TimeInMinutes = TimeInSeconds/60; TimeInHours = TimeInMinutes/60; cout << "Elapsed time = " << TimeInMinutes << " minutes" << endl << endl; cout << "Elapsed time = " << TimeInHours << " hours" << endl << endl; outlogfile << "Elapsed time = " << TimeInMinutes << " minutes" << endl << endl; outlogfile << "Elapsed time = " << TimeInHours << " hours" << endl << endl; if (verbose) cout << "Misorientation properly indexed = " << IndexProper << endl;
160
if (verbose) cout << "Misorientation improperly indexed = " << IndexImproper << endl << endl; if (verbose) cout << "Normal dihedral angles = " << NormalD << endl; if (verbose) cout << "Excessive dihedral angles = " << ExcessiveD << endl; if (verbose) outlogfile << "Misorientation properly indexed = " << IndexProper << endl; if (verbose) outlogfile << "Misorientation improperly indexed = " << IndexImproper << endl << endl; if (verbose) outlogfile << "Normal dihedral angles = " << NormalD << endl; if (verbose) outlogfile << "Excessive dihedral angles = " << ExcessiveD << endl; //Write experimental weighting factors out to file ofstream outExpWeightFile(Filename2.c_str()); if (outExpWeightFile.fail()) { cout << "Error: Couldn't open " << Filename2 << endl; outExpWeightFile.close(); exit(1); } outExpWeightFile << ndataExp << endl << IndexProper << endl << IndexImproper << endl << NormalD << endl << ExcessiveD << endl << Norm << endl; i = ifm; j = jfm; k = kfm; //for(i=0; i<Phi1Discrt; ++i) for(j=0; j<CosPHIDiscrt; ++j) for(k=0; k<Phi2Discrt; ++k) for(l=0; l<CosDiscrt; ++l) for(m=0; m<PhiDiscrt; ++m) for(q=0; q<CosAlphaDiscrt; ++q) { outExpWeightFile << TJDexp[i][j][k][l][m][q] << endl; } outExpWeightFile.close(); } else { //Read experimental weighting factors from file if (verbose) cout << "Reading experimental weighting factors from file" << endl << endl; if (verbose) outlogfile << "Reading experimental weighting factors from file" << endl << endl; ifstream infile1(Filename2.c_str()); if (infile1.fail()) { cout << "Error: Couldn't open " << Filename2 << endl; infile1.close(); exit(1); } infile1 >> ndataExp >> IndexProper >> IndexImproper >> NormalD >> ExcessiveD >> Norm; if (verbose) cout << "Misorientation properly indexed = " << IndexProper << endl;
161
if (verbose) cout << "Misorientation improperly indexed = " << IndexImproper << endl << endl; if (verbose) cout << "Normal dihedral angles = " << NormalD << endl; if (verbose) cout << "Excessive dihedral angles = " << ExcessiveD << endl; if (verbose) outlogfile << "Misorientation properly indexed = " << IndexProper << endl; if (verbose) outlogfile << "Misorientation improperly indexed = " << IndexImproper << endl << endl; if (verbose) outlogfile << "Normal dihedral angles = " << NormalD << endl; if (verbose) outlogfile << "Excessive dihedral angles = " << ExcessiveD << endl; i = ifm; j = jfm; k = kfm; //for(i=0; i<Phi1Discrt; ++i) for(j=0; j<CosPHIDiscrt; ++j) for(k=0; k<Phi2Discrt; ++k) for(l=0; l<CosDiscrt; ++l) for(m=0; m<PhiDiscrt; ++m) for(q=0; q<CosAlphaDiscrt; ++q) { infile1 >> TJDexp[i][j][k][l][m][q]; } infile1.close(); } //Finish forming normalization factor Norm = Norm/ncellsTJD; /*Filter data to remove singularities*/ if (verbose) cout << "Filtering data to remove singularities at distribution border cells" << endl << endl; if (verbose) outlogfile << "Filtering data to remove singularities at distribution border cells" << endl << endl; //for(i=0; i<Phi1Discrt; ++i) for(j=0; j<CosPHIDiscrt; ++j) for(k=0; k<Phi2Discrt; ++k) for(l=0; l<CosDiscrt; ++l) for(m=0; m<PhiDiscrt; ++m) for(q=0; q<CosAlphaDiscrt; ++q) { //Exclude cells where a dihedral angle is absolutely greater than 180 degrees if (Space[i][j][k][l][m][q].geom == 0) { continue; } if (TJDexp[i][j][k][l][m][q] < AvgPtFractionExp*Norm) { //cout << i << " " << j << " " << k << " " << l << " " << m << " " << q << endl; TJDexp[i][j][k][l][m][q] = 0; ncellsTJDholeExp++; continue; } } if (verbose) cout << "Number of cells below experimental zero filter = " << ncellsTJDholeExp << endl; ncellsTJDexp = ncellsTJD - ncellsTJDholeExp;
162
if (verbose) cout << "Total number of cells within the experimental distribution = " << ncellsTJDexp << endl << endl; if (verbose) outlogfile << "Number of cells below experimental zero filter = " << ncellsTJDholeExp << endl; ncellsTJDexp = ncellsTJD - ncellsTJDholeExp; if (verbose) outlogfile << "Total number of cells within the experimental distribution = " << ncellsTJDexp << endl << endl; //Store values in space file //Define output format outfile << setprecision(8); outfile << fixed; outfile << ncellsTJDholeExp << endl; outfile << ncellsTJDexp << endl; /*Regenerate normalization factor*/ //for(i=0; i<Phi1Discrt; ++i) for(j=0; j<CosPHIDiscrt; ++j) for(k=0; k<Phi2Discrt; ++k) Norm = 0; for(l=0; l<CosDiscrt; ++l) for(m=0; m<PhiDiscrt; ++m) for(q=0; q<CosAlphaDiscrt; ++q) { //Exclude cells where a dihedral angle is absolutely greater than 180 degrees if (Space[i][j][k][l][m][q].geom == 0) { continue; } //Exclude cells within filtered experimental hole of space if (TJDexp[i][j][k][l][m][q] == 0) { continue; } Norm += TJDexp[i][j][k][l][m][q]; } //Finish forming normalization factor Norm = Norm/ncellsTJDexp; /*Write uniform distribution weighting factors to Space array*/ if (verbose) cout << "Writing experimental distribution weighting factors to space array and to file" << endl << endl; if (verbose) outlogfile << "Writing experimental distribution weighting factors to space array and to file" << endl << endl; //Convert values to multiples of random distribution //Divide every value by normalization coefficient so that the average value of all the cells = 1 i = ifm; j = jfm; k = kfm; //for(i=0; i<Phi1Discrt; ++i) for(j=0; j<CosPHIDiscrt; ++j) for(k=0; k<Phi2Discrt; ++k) for(l=0; l<CosDiscrt; ++l) for(m=0; m<PhiDiscrt; ++m) for (q=0; q<CosAlphaDiscrt; ++q) {
163
//Exclude cells where a dihedral angle is absolutely greater than 180 degrees if (Space[i][j][k][l][m][q].geom == 0) { continue; } //Exclude cells within filtered experimental hole of space if (TJDexp[i][j][k][l][m][q] == 0) { continue; } TJDexp[i][j][k][l][m][q] = TJDexp[i][j][k][l][m][q]/Norm; //Form and write weighting factors to Space Space[i][j][k][l][m][q].Exp = 1/TJDexp[i][j][k][l][m][q]; } //Analyze filtered space AnalyzeFilteredSpace(false); //Write values out to file i = ifm; j = jfm; k = kfm; //for(i=0; i<Phi1Discrt; ++i) for(j=0; j<CosPHIDiscrt; ++j) for(k=0; k<Phi2Discrt; ++k) for(l=0; l<CosDiscrt; ++l) for(m=0; m<PhiDiscrt; ++m) for(q=0; q<CosAlphaDiscrt; ++q) { //Find space characteristics for distribution Exp = Space[i][j][k][l][m][q].Exp; /*cout << "Exp = " << Exp << endl; cout << "Exp = Space[" << i << "][" << j << "][" << k << "][" << l << "][" << m << "][" << q << "]" << endl << endl;*/ //Write values out to file outfile << setw(3) << i << setw(3) << j << setw(3) << k << setw(3) << l << setw(3) << m << setw(3) << q << setw(13) << Exp << endl; } outfile.close(); outlogfile.close(); }
A.6 TJDexpGen()
This function generates the twin-dependent triple junction distribution from EBSD
section plane measurements using the adopted stereological method. It generates the distribution
within the TJDexp array.
/* ------------------------------------------------------------------------------------ * The following function reads in the experimental data and generates the TJD in the * six-dimensional TJDexp accumulator array using Saylor's stereological approach.
164
* ----------------------------------------------------------------------------------- */ void TJDexpGen() { int g, h, i, j, k, l, m, q, r, s, w, x, Ndata, ndataExp, numberpts, lMax, mMax, qMax, lMin, mMin, qMin, ZeroTJDexp, IndexImproper, IndexProper, ExcessiveD, NormalD, A; double data, phi1A, PHIA, phi2A, phi1B, PHIB, phi2B, L1[3], L2[3], L3[3], N1P[3], N2P[3], N3P[3], GA[3][3], GB[3][3], N2PD[3], N2D[3], thetaN2P, phiN2P, costhetaN2P, MinError, Error, N2i[3], N2[3], Rotate111[3][3], GAT[3][3], GAB[3][3], phi1AB, PHIAB, phi2AB, thetaN1P, phiN1P, costhetaN1P, N1PD[3], N1D[3], TL[3], thetaN3P, phiN3P, costhetaN3P, N3PD[3], N3D[3], Pangle, MinN3Error, N3Error, N3[3], cosAlpha, Norm, MRDaverage, D, Z, temp, MaxExp, MinExp, IdealPeak, alpha, TimeInSeconds, TimeInMinutes, TimeInHours; string Filename, Filename1, Filename2, ans; clock_t Time; Filename1 = CurrentPath + "\\" + logfile; ofstream outlogfile(Filename1.c_str(), ios_base::app); if (outlogfile.fail()) { cout << "Error: Couldn't open " << logfile << endl; outlogfile.close(); exit(1); } Filename2 = CurrentPath + "\\" + AnalysisFile; ofstream outAnalysisFile(Filename2.c_str(), ios_base::app); if (outAnalysisFile.fail()) { cout << "Error: Couldn't open " << AnalysisFile << endl; outAnalysisFile.close(); exit(1); } //Allocate the TJD experimental array TJDexpAlloc(); //Initialize necessary values Norm = 0; N2[0] = 1/sqrt(3.); N2[1] = 1/sqrt(3.); N2[2] = 1/sqrt(3.); IndexImproper = 0; IndexProper = 0; ExcessiveD = 0; NormalD = 0; MaxExp = 0; MinExp = 1; /*Read experimental data in from file*/ //Combine current directory path with filename if (verbose) cout << "Reading experimental values" << endl;
165
if (verbose) outlogfile << "Reading experimental values" << endl; Filename = CurrentPath + "\\" + datafile; //Open and read from datafile to determine number of rows in data ifstream infile(Filename.c_str()); if (infile.fail()) { cout << "Error: Couldn't open " << datafile << endl; outlogfile << "Error: Couldn't open " << datafile << endl; infile.close(); exit(1); } Ndata = 0; while(infile >> data) { Ndata++; } ndataExp = Ndata/12; cout << "Number of triple junctions in dataset = " << ndataExp << endl << endl; outlogfile << "Number of triple junctions in dataset = " << ndataExp << endl << endl; if (!DefaultInputs) { //Number of triple junction measurements to be used /*cout << "Use all triple junction measurements?\n"; cin >> ans; cout << endl; if((ans == "No")||(ans == "NO")||(ans == "no")||(ans == "N")||(ans == "n")) { cout << "Enter number of measurements to be used in analysis:" << endl; cin >> numberpts; ndataExp = numberpts; } else if((ans == "Yes")||(ans == "YES")||(ans == "yes")||(ans == "Y")||(ans == "y")) { } else { cout << "Invalid input" << endl; exit(1); }*/ cout << "Using all triple junction measurements" << endl << endl; outlogfile << "Using all triple junction measurements" << endl << endl; } if (verbose) cout << "Generating experimental distribution" << endl << endl; if (verbose) outlogfile << "Generating experimental distribution" << endl << endl; //Return to the beginning of file infile.clear(); infile.seekg(0, ios_base::beg); //Start timer Time = clock();
166
//Read in measurements from datafile for (g=0; g<ndataExp; ++g) { infile >> phi1A; if (infile.eof() == true) { cout << "Error: End of file reached" << endl; outlogfile << "Error: End of file reached" << endl; infile.close(); exit(1); } infile >> PHIA >> phi2A >> phi1B >> PHIB >> phi2B >> L1[0] >> L1[1] >> L2[0] >> L2[1] >> L3[0] >> L3[1]; //Check values /*cout << setprecision(5); cout << fixed; cout << left; cout << setw(9) << phi1 << setw(9) << PHI << setw(9) << phi2 << setw(9) << phi1B << setw(9) << PHIB << setw(9) << phi2B << setw(9) << L1[0] << setw(9) << L1[1] << setw(9) << L2[0] << setw(9) << L2[1] << setw(9) << L3[0] << setw(9) << L3[1] << endl;*/ //Convert traces to plane normals in x-y plane L1[2] = 0; L2[2] = 0; L3[2] = 0; ConvertTrace2NVector(L1,L2,L1,N1P); ConvertTrace2NVector(L1,L2,L2,N2P); ConvertTrace2NVector(L1,L2,L3,N3P); //Generate GA and GB EangTogMat(phi1A,PHIA,phi2A,GA); EangTogMat(phi1B,PHIB,phi2B,GB); /*Find rotation which transforms N2 to the [111] direction*/ //Generate theta and phi Vector2ThetaPhi(N2P,thetaN2P,phiN2P); //Generate all possible values of thetaN2P MinError = .01; for (h=1; h<=Cos111N2Discrt; ++h) { costhetaN2P = 1 - (2./Cos111N2Discrt*h - 2./Cos111N2Discrt/2); thetaN2P = acos(costhetaN2P); ThetaPhi2Vector(thetaN2P,phiN2P,N2PD); MultMatVect(GA,N2PD,N2D); MultScalVect(sqrt(3.),N2D); //cout << N2D[0] << " " << N2D[1] << " " << N2D[2] << endl; //Extract value closest to <111>
167
Error = CalcVect111Error(N2D); if (Error < MinError) { MinError = Error; N2i[0] = N2D[0]; N2i[1] = N2D[1]; N2i[2] = N2D[2]; } if (MinError == 0.1) { cout << "Error: MinError = .1" << endl; outlogfile << "Error: MinError = .1" << endl; } } //cout << N2i[0] << " " << N2i[1] << " " << N2i[2] << endl; //Extract signs of value closest to <111> q = Sign(N2i[0]); r = Sign(N2i[1]); s = Sign(N2i[2]); //cout << "Reconstructed: " << q << " " << r << " " << s << " " << endl; //Find GA minimum angle and [111] direction Rotation111(q,r,s,GA,Rotate111); //Rotate GA and GB MultMatrix(Rotate111,GA,GA); MultMatrix(Rotate111,GB,GB); //Generate GAB Transpose(GA,GAT); MultMatrix(GB,GAT,GAB); //Find misorientation within fundamental zone and identify symmetry operator FundZoneMisSymOp(GAB,GAB,A); //Extract Euler angles gMatToEang(GAB,phi1AB,PHIAB,phi2AB); ArrayIndicesEuler(phi1AB,PHIAB,phi2AB,i,j,k); //Count incorrectly assigned misorientations if (i != ifm || j != jfm || k != kfm) { IndexImproper++; } else { IndexProper++; } /*Given the plane normals in the x-y plane find all possible values of the N1 and associated N3 planes and assign them to their corresponding cells*/ //Generate theta and phi Vector2ThetaPhi(N1P,thetaN1P,phiN1P); Vector2ThetaPhi(N3P,thetaN3P,phiN3P);
168
//cout << "N1P = " << N1P[0] << " " << N1P[1] << " " << N1P[2] << endl; //cout << "N3P = " << N3P[0] << " " << N3P[1] << " " << N3P[2] << endl << endl; /*cout << "phiN1P = " << phiN1P << endl; cout << "phiN3P = " << phiN3P << endl;*/ //Generate all possible values of thetaN1P for (w=1; w<=CosN1Discrt; ++w) { costhetaN1P = 1 - (2./CosN1Discrt*w - 2./CosN1Discrt/2); //cout << costhetaN1P << endl; thetaN1P = acos(costhetaN1P); //cout << "thetaN1P = " << thetaN1P << endl; ThetaPhi2Vector(thetaN1P,phiN1P,N1PD); //cout << "N1P = " << N1PD[0] << " " << N1PD[1] << " " << N1PD[2] << endl; MultMatVect(GA,N1PD,N1D); //MultScalVect(sqrt(3.),N1D); //cout << "N1 = " << N1D[0] << " " << N1D[1] << " " << N1D[2] << endl; //Solve for triple line direction given N1D and N2 if(Clockwise(N1D,N2)) { //cout << "N1 clockwise from N2" << endl; CrossProduct(N1D,N2,TL); } else { //cout << "N1 counterclockwise from N2" << endl; CrossProduct(N2,N1D,TL); } //Generate all possible values of thetaN3P and select N3 MinN3Error = 1; for (x=1; x<=CosN3Discrt; ++x) { costhetaN3P = 1 - (2./CosN3Discrt*x - 2./CosN3Discrt/2); //cout << costhetaN3P << endl; thetaN3P = acos(costhetaN3P); ThetaPhi2Vector(thetaN3P,phiN3P,N3PD); MultMatVect(GA,N3PD,N3D); //MultScalVect(sqrt(3.),N3D); //cout << N3D[0] << " " << N3D[1] << " " << N3D[2] << endl; //Solve for N3D most nearly perpendicular to TL Pangle = MinAngle(N3D,TL); //cout << "Pangle = " << Pangle << endl; N3Error = RelError(PI/2,Pangle); if(N3Error < MinN3Error) { MinN3Error = N3Error; //cout << "MinN3Error = " << MinN3Error << endl << endl; VectorCopy(N3D,N3);
169
} } //cout << "N3 = " << N3[0] << " " << N3[1] << " " << N3[2] << endl << endl; //cout << "MinN3Error Selected = " << MinN3Error << endl << endl; //Exclude cells where a dihedral angle exceeds 180 degrees if (ExcessiveDihedral(N1D,N2,N3)) { //cout << "Shouldn't happen" << endl; ExcessiveD++; continue; } NormalD++; //Find values within fundamental zone SymmetriesMultMatVect(A,N1D,N1D); SymmetriesMultMatVect(A,N3,N3); //Solve for dihedral angle alpha cosAlpha = cos(MinAngle(N2,N3)); //Solve for indices of potential vectors Vector2ArrayIndices(N1D,l,m); ArrayIndicesCosAlpha(cosAlpha,q); //Exclude cells where a dihedral angle is absolutely greater than 180 degrees //This catches the rare few that slip by given finite values of RandCellPtsGeom if (Space[i][j][k][l][m][q].geom == 0) { continue; } //Exclude cells which lie within the asymmetric hole of space //This catches the rare few that slip by given finite values of RandCellPts if (Space[i][j][k][l][m][q].Exp == 0) { continue; } //Add values to cell TJDexp[i][j][k][l][m][q] += 1; } } infile.close(); //End timer and calculate time Time = clock() - Time; TimeInSeconds = Time/(double) CLOCKS_PER_SEC; TimeInMinutes = TimeInSeconds/60; TimeInHours = TimeInMinutes/60;
170
cout << "Elapsed time = " << TimeInMinutes << " minutes" << endl; cout << "Elapsed time = " << TimeInHours << " hours" << endl << endl; outlogfile << "Elapsed time = " << TimeInMinutes << " minutes" << endl; outlogfile << "Elapsed time = " << TimeInHours << " hours" << endl << endl; outAnalysisFile << TimeInMinutes << endl; if (verbose) cout << "Misorientation properly indexed = " << IndexProper << endl; if (verbose) cout << "Misorientation improperly indexed = " << IndexImproper << endl << endl; if (verbose) cout << "Normal dihedral angles = " << NormalD << endl; if (verbose) cout << "Excessive dihedral angles = " << ExcessiveD << endl; if (verbose) outlogfile << "Misorientation properly indexed = " << IndexProper << endl; if (verbose) outlogfile << "Misorientation improperly indexed = " << IndexImproper << endl << endl; if (verbose) outlogfile << "Normal dihedral angles = " << NormalD << endl; if (verbose) outlogfile << "Excessive dihedral angles = " << ExcessiveD << endl; /*Move through every cell applying weighting factors*/ i = ifm; j = jfm; k = kfm; //for(i=0; i<Phi1Discrt; ++i) for(j=0; j<CosPHIDiscrt; ++j) for(k=0; k<Phi2Discrt; ++k) for(l=0; l<CosDiscrt; ++l) for(m=0; m<PhiDiscrt; ++m) for (q=0; q<CosAlphaDiscrt; ++q) { //Exclude cells where a dihedral angle is greater than 180 degrees if (Space[i][j][k][l][m][q].geom == 0) { continue; } //Exclude cells which lie within the asymmetric hole of space if (Space[i][j][k][l][m][q].Exp == 0) { continue; } //Apply weighting factors TJDexp[i][j][k][l][m][q] = TJDexp[i][j][k][l][m][q]*Space[i][j][k][l][m][q].Exp; Norm += TJDexp[i][j][k][l][m][q]; } /*Perform background subtraction*/ if (verbose) cout << "Applying background subtraction" << endl; if (verbose) outlogfile << "Applying background subtraction" << endl; //Find average of all cells //cout << "Normaliztion factor = " << Norm << endl; Norm = Norm/ncellsTJDexp; //cout << "Average = " << Norm << endl; //Define necessary values D = CosDiscrt;
171
//D = D/3.; Z = 2./D; MRDaverage = 0; Peakexp = 0; ZeroTJDexp = 0; //double pnc=(2.0*CosDiscrt-1.0)/(2.0*CosDiscrt); //OIM BGS //double f=(1.0/CosDiscrt)*(pnc/(1.0-pnc)); //OIM BGS //Loop through every cell and subtract background i = ifm; j = jfm; k = kfm; //for(i=0; i<Phi1Discrt; ++i) for(j=0; j<CosPHIDiscrt; ++j) for(k=0; k<Phi2Discrt; ++k) for(l=0; l<CosDiscrt; ++l) for(m=0; m<PhiDiscrt; ++m) for (q=0; q<CosAlphaDiscrt; ++q) { //Exclude cells where a dihedral angle is greater than 180 degrees if (Space[i][j][k][l][m][q].geom == 0) { continue; } //Exclude cells within hole of space if (Space[i][j][k][l][m][q].Exp == 0) { continue; } temp = TJDexp[i][j][k][l][m][q]; temp = (temp + Norm*(Z - 1)*(D - 1)/(D))/(1 + Z*(D - 1)); //temp = (temp - Norm*(pnc-f + f*pnc))/(1+f); //OIM BGS if (temp > 0) { TJDexp[i][j][k][l][m][q] = temp; MRDaverage += temp; } else { TJDexp[i][j][k][l][m][q] = 0; ZeroTJDexp++; } } if (verbose) cout << "Number of zeroed cells within TJDexp distribution = " << ZeroTJDexp << endl << endl; if (verbose) outlogfile << "Number of zeroed cells within TJDexp distribution = " << ZeroTJDexp << endl << endl; //Find average of all used cells MRDaverage = MRDaverage/ncellsTJDexp; /*Convert values to multiples of random distribution*/ //Divide every value by normalization coefficient so that the average value of all the cells = 1 i = ifm; j = jfm; k = kfm; //for(i=0; i<Phi1Discrt; ++i) for(j=0; j<CosPHIDiscrt; ++j) for(k=0; k<Phi2Discrt; ++k)
172
for(l=0; l<CosDiscrt; ++l) for(m=0; m<PhiDiscrt; ++m) for (q=0; q<CosAlphaDiscrt; ++q) { //Exclude cells where a dihedral angle is greater than 180 degrees if (Space[i][j][k][l][m][q].geom == 0) { continue; } //Exclude cells within hole of distribution if (Space[i][j][k][l][m][q].Exp == 0) { continue; } TJDexp[i][j][k][l][m][q] = TJDexp[i][j][k][l][m][q]/MRDaverage; //Find maximum and minimum distribution values if (TJDexp[i][j][k][l][m][q] > MaxExp) { MaxExp = TJDexp[i][j][k][l][m][q]; lMax = l; mMax = m; qMax = q; } if (TJDexp[i][j][k][l][m][q] < MinExp) { MinExp = TJDexp[i][j][k][l][m][q]; lMin = l; mMin = m; qMin = q; } } /*Examine peaks in distribution*/ //Output maximum and minimum distribution values if (verbose) cout << "Maximum distribution value = " << MaxExp << endl << "Maximum value = TJDexp[" << i << "][" << j << "][" << k << "][" << lMax << "][" << mMax << "][" << qMax << "]" << endl << endl; if (verbose) cout << "Minimum distribution value = " << MinExp << endl << "Minimum value = TJDexp[" << i << "][" << j << "][" << k << "][" << lMin << "][" << mMin << "][" << qMin << "]" << endl << endl; if (verbose) outlogfile << "Maximum distribution value = " << MaxExp << endl << "Maximum value = TJDexp[" << i << "][" << j << "][" << k << "][" << lMax << "][" << mMax << "][" << qMax << "]" << endl << endl; if (verbose) outlogfile << "Minimum distribution value = " << MinExp << endl << "Minimum value = TJDexp[" << i << "][" << j << "][" << k << "][" << lMin << "][" << mMin << "][" << qMin << "]" << endl << endl; //Find array indices of Planes 1 and 3 Vector2ArrayIndices(P1,l,m); alpha = MinAngle(P2,P3); cosAlpha = cos(alpha); ArrayIndicesCosAlpha(cosAlpha,q); IdealPeak = TJDexp[i][j][k][l][m][q];
173
if (verbose) cout << "Ideal Peak = " << IdealPeak << endl << "Ideal Peak = TJDexp[" << i << "][" << j << "][" << k << "][" << l << "][" << m << "][" << q << "]" << endl << endl; if (verbose) outlogfile << "Ideal Peak = " << IdealPeak << endl << "Ideal Peak = TJDexp[" << i << "][" << j << "][" << k << "][" << l << "][" << m << "][" << q << "]" << endl << endl; double Difference = SimExpDistDifference(); cout << "Difference = " << Difference << endl << endl; outlogfile << "Difference = " << Difference << endl << endl; outAnalysisFile.close(); outlogfile.close(); }
A.7 StoreDists()
There are three main arrays within the program. These are the Space array, the SimData
array, and the TJDexp array. The SimData and TJDexp arrays contain the simulated and
experimental distributions. The Space array has three components: Space.geom, Space.Sim, and
Space.Exp. As explained, the Space.geom array holds the geometric data or the cells which
pertain to the distribution space within the parameter space. Space.Sim contains the filtered
weighting factors for the simulated distribution and Space.Exp contains the filtered weighting
factors for the experimental distribution. The space values are placed in arrays as each array cell
has a corresponding cell in the simulated or experimental distributions. In other words, the space
values are placed in the distribution space in the cells to which they correspond. This greatly
simplifies the application of space values. The function StoreDists() writes all arrays within the
program out to a file. In this manner, any distribution can be easily stored for future analysis and
all pertinent information to the distributions can be retrieved from the file by reconstructing the
arrays.
/* -------------------------------------------------------------------- * This function writes the Space, Simdata, and TJDexp array values out * to the file Values_Dist. This file effectively stores the * distributions for later use.
174
* -------------------------------------------------------------------- */ void StoreDists() { int i, j, k, l, m, q; double Geom, Sim, Exp, Intensity1, Intensity2; string Filename; /*Create stream for writing experimental data out to file*/ //Write values out to files if (verbose) cout << "Writing Distribution data out to file\n" << endl; //Combine current directory path with filenames Filename = CurrentPath + "\\" + "Values_Dist.txt"; //Open and write to datafile ofstream outfile(Filename.c_str()); if (outfile.fail()) { cout << "Error: Couldn't open " << "Values_Dist.txt" << endl; outfile.close(); exit(1); } //Output resolution outfile << setprecision(5); outfile << fixed; outfile << setw(3) << Resolution << endl; i = ifm; j = jfm; k = kfm; //for(i=0; i<Phi1Discrt; ++i) for(j=0; j<CosPHIDiscrt; ++j) for(k=0; k<Phi2Discrt; ++k) for(l=0; l<CosDiscrt; ++l) for(m=0; m<PhiDiscrt; ++m) for(q=0; q<CosAlphaDiscrt; ++q) { //Find space characteristics for distributions Geom = Space[i][j][k][l][m][q].geom; Sim = Space[i][j][k][l][m][q].Sim; Exp = Space[i][j][k][l][m][q].Exp; //Find intensity values for distributions if (SimDistAlloc) { Intensity1 = SimData[i][j][k][l][m][q]; } else { Intensity1 = 0; } if (ExpDistAlloc) { Intensity2 = TJDexp[i][j][k][l][m][q]; } else { Intensity2 = 0; }
175
//Write values out to file outfile << setw(3) << i << setw(3) << j << setw(3) << k << setw(3) << l << setw(3) << m << setw(3) << q << setw(10) << Geom << setw(10) << Sim << setw(10) << Exp << setw(10) << Intensity1 << setw(10) << Intensity2 << endl; } outfile.close(); }
A.8 RebuildDists()
The function allocates and fills the Space, SimData, and TJDexp arrays from the data
written out to a file by StoreDists(). In effect a distribution can be stored and saved by
StoreDists() and recalled by RebuildDists(). This function is especially useful for plotting
distributions.
/* -------------------------------------------------------------------- * This function rebuilds the Space, SimData, and TJDexp distributions * from stored data. The function allocates the arrays and reads the * Space, Simdata, and TJDexp array values from the file Values_Dist. * The function then assigns the values to the arrays. * -------------------------------------------------------------------- */ void RebuildDists() { int i, j, k, l, m, q, nvalues, ncells, g; double Geom, Sim, Exp, Intensity1, Intensity2, values; string Filename; //Initialize necessary values nvalues = 0; /*Read distribution values in from file*/ //Combine current directory path with filename if (verbose) cout << "Reading SimData and TJDexp data from files" << endl; Filename = CurrentPath + "\\" + "Values_Dist.txt"; //Open and read from distribution file to determine number of cells in distributions ifstream infile(Filename.c_str()); if (infile.fail()) { cout << "Error: Couldn't open " << "Values_Dist.txt" << endl; infile.close(); exit(1); } //Find resolution of file values infile >> Resolution; if (verbose) cout << "Resolution of distribution = " << Resolution << endl;
176
if (Resolution == 15) { Phi1Discrt = 24; //12 //24 //36 CosPHIDiscrt = 6; //3 //6 //9 Phi2Discrt = 6; //3 //6 //9 CosDiscrt = 12; //9 //12 //18 PhiDiscrt = 24; //18 //24 //36 CosAlphaDiscrt = CosDiscrt; } if (Resolution == 10) { Phi1Discrt = 36; //12 //24 //36 CosPHIDiscrt = 9; //3 //6 //9 Phi2Discrt = 9; //3 //6 //9 CosDiscrt = 18; //9 //12 //18 PhiDiscrt = 36; //18 //24 //36 CosAlphaDiscrt = CosDiscrt; } nvalues = 0; while(infile >> values) { nvalues++; } ncells = nvalues/11; cout << "Number of cells in parameter space of distributions = " << ncells << endl << endl; //Allocate arrays SpaceAlloc(); SimDataAlloc(); TJDexpAlloc(); if (verbose) cout << "Assign distribution values to arrays" << endl << endl; //Return to the beginning of file infile.clear(); infile.seekg(0, ios_base::beg); infile >> Resolution; //Read in measurements from datafile for (g=0; g<ncells; ++g) { infile >> i >> j >> k >> l >> m >> q >> Geom >> Sim >> Exp >> Intensity1 >> Intensity2; //Assign values to arrays Space[i][j][k][l][m][q].geom = Geom; /*cout << "Geom = " << Geom << endl; cout << "Geom = Space[" << i << "][" << j << "][" << k << "][" << l << "][" << m << "][" << q << "]" << endl << endl;*/ Space[i][j][k][l][m][q].Sim = Sim;
177
/*cout << "AsymSim = " << AsymSim << endl; cout << "AsymSim = Space[" << i << "][" << j << "][" << k << "][" << l << "][" << m << "][" << q << "]" << endl << endl;*/ Space[i][j][k][l][m][q].Exp = Exp; /*cout << "AsymExp = " << AsymExp << endl; cout << "AsymExp = Space[" << i << "][" << j << "][" << k << "][" << l << "][" << m << "][" << q << "]" << endl << endl;*/ SimData[i][j][k][l][m][q] = Intensity1; /*cout << "Intensity1 = " << Intensity1 << endl; cout << "Intensity1 = SimData[" << i << "][" << j << "][" << k << "][" << l << "][" << m << "][" << q << "]" << endl << endl;*/ TJDexp[i][j][k][l][m][q] = Intensity2; /*cout << "Intensity2 = " << Intensity2 << endl; cout << "Intensity2 = TJDexp[" << i << "][" << j << "][" << k << "][" << l << "][" << m << "][" << q << "]" << endl << endl;*/ } infile.close(); }
178
B. TWIN-DEPENDENT TRIPLE JUNCTION DISTRIBUTION FUNCTION
B.1 Motivation
In the body of this work, the continuous triple junction distribution was approximated by
discrete cells within the distribution space. If a mathematical representation of the distribution is
desired, the discrete distribution may be expanded in a Fourier series. This appendix details the
mathematical representation of the distribution and demonstrates the method of solving for the
series coefficients. Given the dimensionality of the distribution, even a moderate series
expansion rank would require a vast quantity of coefficients. While the mathematical
representation of the distribution is significantly more complex than the discrete representation,
it may be of value to future modeling efforts. The distribution function might even have a
positive effect on the results of the discrete distribution given the inherent smoothing of the
technique. Given the possible applications of a twin-dependent triple junction distribution
function, this appendix has been included as a resource to future researchers.
B.2 Definition of the Function
Let the triple junction distribution function be given by ABAA g ,,, 11 which
provides the frequency of occurrence of triple junctions with parameters A1cos , A1 , cos ,
ABg in values of MRD. The function may be formally defined by:
ABAAAABAA gddddgd
1113118
1sinsin,,,
179
Where d is the MRD triple junction occurrence with parameters A1cos , A1 , cos ,
ABg within the subspace of ABAAA gdddd ,sin,,sin 111 . The function has been
normalized over the space of the distribution such that:
1
8
1111311 ABAAAABAA gddddg
sinsin,,, ( B.1 )
B.3 Series Expansion
The function may be expanded in a Fourier series:
0 0 01111
q
q
qr u l
l
lm
l
lnAB
mn
luAA
r
q
mn
l
u
qrABAA gTPKSg cos,,,, ( B.2 )
Where r
qK are the normalized spherical surface harmonics, uP are the Legendre
polynomials, mn
lT are the generalized spherical harmonics and mn
l
u
qr S are the coefficients of the
expansion. The expansion may be truncated to the desired order and as the discretized
distribution has already been reduced to a fundamental zone, no symmetry effects need be
addressed with symmetrized functions.
The coefficients of the expansion may be found by employing the orthogonal properties
of the base functions. For AA
r
qK 11 , , cosuP , and )( AB
mn
l gT the following is true:
''
'*
' sin,, rrqqAAAAA
r
qAA
r
q ddKK 1111111 ( B.3 )
''
12
2sincoscos uuuu
udPP
( B.4 )
nnmmllABAB
nm
lAB
mn
ll
gdgTgT
12
1)()( ( B.5 )
180
Where denotes the complex conjugate and the Kronecker delta. In equation (2) the
indices may be substituted by ',',',',',' nmlurq and both sides may be multiplied by AA
r
qK 11 ,*,
cosuP , and )( AB
mn
l gT . Integrating over the space of the distribution provides:
ABAAAAB
mn
lAB
nm
luuAA
r
qAA
r
q
q
q
qr u l
l
lm
l
ln
nm
l
u
rq
ABAAAAB
mn
luAA
r
qABAA
gddddgTgTPPKK
S
gddddgTPKg
1111111
0 0 0
1111111
sinsin)(coscos,,
sinsin)(cos,,,,
''
''
*'
'
'
'
'' ' '
'
''
'
''
''
'
'
''
*
Substituting from ( B.3 ), ( B.4 ), and ( B.5 ) gives:
ABAAAAB
mn
luAA
r
qABAA
mn
l
u
qr
gddddgTPKg
luS
1111111
2
1212
sinsin)(cos,,,, *
The function ABAA g ,,, 11 is not continuous but rather consists of discrete peaks
over the distribution space. The method and presentation of Bunge for generating coefficients
from discrete measurements will be followed [64]. For a single discrete peak the coefficients
would be given by:
ABAAAABAAAB
mn
luAA
r
q
mn
l
u
qr
gddddggTPK
luS
11111
000
1
0
1
2
1212
sinsin,,,)(cos,*
Where 000
1
0
1 ABAA g,,, pertain to the single triple junction orientation of the distribution.
Substituting from ( B.1 ) gives:
)(cos,* 000
1
0
12
1212AB
mn
luAA
r
q
mn
l
u
qr gTPKlu
S
For many different triple junction orientations i, the coefficients would be given by the
average of all measured triple junctions:
181
N
i
i
AB
mn
l
i
u
i
A
i
A
r
qmn
l
u
qrN
gTPKluS
1
11
2
1212 )(cos,*
Where N is the total number of measured triple junctions. In the case of the discrete
distribution, N is the number of discrete cells and i is determined at each cell. As demonstrated
by Bunge, the effect of truncation errors from finite expansion values can be mitigated by
utilizing Gauss functions in place of Dirac Delta functions [64]. The coefficients are then given
by:
N
i
i
AB
mn
l
i
u
i
A
i
A
r
q
mn
l
u
qr gTPKN
VS
111 )(cos,* ( B.6 )
Where V is given by:
2
lWuWV
4exp1
41exp
4exp
2
22
22
xx
xW
Where is the half-width of the Guassian peaks. The coefficients in ( B.6 ) are
complex and may be broken into real and imaginary components:
N
i
i
u
i
AB
mn
l
i
AB
mn
l
i
A
i
A
r
q
i
A
i
A
r
q
mn
l
u
qr PgTigTKiKN
VS
11111 cos)(Im)(Re,Im,Re
N
i
i
ui
AB
mn
l
i
A
i
A
r
q
i
AB
mn
l
i
A
i
A
r
q
i
AB
mn
l
i
A
i
A
r
q
i
AB
mn
l
i
A
i
A
r
qmn
l
u
qr PgTKigTKi
gTKgTK
N
VS
11111
1111
cos
)(Im,Re)(Re,Im
)(Im,Im)(Re,Re
N
i
i
u
i
AB
mn
l
i
A
i
A
r
q
i
AB
mn
l
i
A
i
A
r
q
mn
l
u
qr PgTKgTKN
VS
11111 cos)(Im,Im)(Re,ReRe
N
i
i
u
i
AB
mn
l
i
A
i
A
r
q
i
AB
mn
l
i
A
i
A
r
q
mn
l
u
qr PgTKgTKN
VS
11111 cos)(Im,Re)(Re,ImIm
182
B.4 Definitions
The spherical surface harmonics are given by:
A
r
qAAA
r
q PirK 11112
1
cosexp,
A
r
qAAAA
r
q PrirK 111112
1
cossincos,
A
r
qAAA
r
q PrK 11112
1
coscos,Re
A
r
qAAA
r
q PrK 11112
1
cossin,Im