Upload
others
View
1
Download
0
Embed Size (px)
Citation preview
DEVELOPING A BUBBLE NUMBER DENSITY TREND FOR BISON
by
Tyler J. Miller
A senior thesis submitted to the faculty of
Brigham Young University - Idaho
in partial fulfillment of the requirements for the degree of
Bachelor of Science
Department of Physics
Brigham Young University - Idaho
December 2019
Copyright c© 2019 Tyler J. Miller
All Rights Reserved
BRIGHAM YOUNG UNIVERSITY - IDAHO
DEPARTMENT APPROVAL
of a senior thesis submitted by
Tyler J. Miller
This thesis has been reviewed by the research committee, senior thesis coor-dinator, and department chair and has been found to be satisfactory.
Date Kevin Kelley, Advisor
Date David Oliphant, Senior Thesis Coordinator
Date Evan Hansen, Committee Member
Date Todd Lines, Chair
ABSTRACT
DEVELOPING A BUBBLE NUMBER DENSITY TREND FOR BISON
Tyler J. Miller
Department of Physics
Bachelor of Science
Idaho National Laboratory’s BISON team currently models various nuclear
fuels. The interest in metallic fuels for advanced sodium fast reactors (SFR)
has recently increased due to both commercial and research applications. In
preparation for SFR, the BISON team is improving its metallic fuel modeling
and simulations. One improvement to the BISON code was developing a model
for bubble number density as it correlates with metallic fuel swelling. The
process that we used to create such a model was by image analysis of old
Experimental Breeder Reactor II micrographs from various experiments. We
used ImageJ and Python to automate our process to collect the number of
bubble counts in each image. Along with the counts, we used the burnup
values that correlated with the images to create our bubble number density
model. The creation of our model has upgraded the previous metallic fuel
swelling model from a constant value to what researchers expected it to be.
ACKNOWLEDGMENTS
I would like to thank the entire Idaho National Laboratory’s BISON Team;
especially, Albert Casagranda, Dylan McDowell, Stephen Novascone, Adam
Zabriskie, and Russell Gardner who helped me develop the Bubble Number
Density model. I want to thank the Brigham Young University Idaho pro-
fessors Todd Lines, Jon Johnson, and Lance Nelson who wrote me letters of
recommendation. Also, I want to thank Kevin Kelley, Evan Hansen, and David
Oliphant for being a part of my senior thesis committee.
Contents
Table of Contents xi
List of Figures xiii
1 Introduction 11.1 Nuclear Power Plants and Metallic Fuel . . . . . . . . . . . . . . . . . 1
1.1.1 Background . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21.1.2 Coalescing Phenomenon . . . . . . . . . . . . . . . . . . . . . 4
1.2 BISON: Modeling and Simulation . . . . . . . . . . . . . . . . . . . . 51.2.1 Bubble Number Density Modeling Project . . . . . . . . . . . 9
2 Image Analysis Procedure 112.1 EBR-II Images . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.1.1 Selecting the Images . . . . . . . . . . . . . . . . . . . . . . . 132.2 ImageJ and Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142.3 Discussion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.3.1 Scaling issues . . . . . . . . . . . . . . . . . . . . . . . . . . . 152.3.2 To be a Bubble or not to be a Bubble . . . . . . . . . . . . . . 172.3.3 Assumptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182.3.4 Initial testing . . . . . . . . . . . . . . . . . . . . . . . . . . . 192.3.5 Automated Process . . . . . . . . . . . . . . . . . . . . . . . . 21
2.4 Analyzing the Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
3 Results 253.1 Image Analysis Model . . . . . . . . . . . . . . . . . . . . . . . . . . 25
4 Conclusion 29
Bibliography 31
A Bubble Number Density Automated Process 33
B Codes 41
xi
List of Figures
1.1 Gaseous fission products travels through the bubbles to the plenum [2]. 31.2 Cross-sectional metallography of U-22Pu-10Zr fuel [3]. . . . . . . . . . 41.3 Finite element method application for a bridge [6]. . . . . . . . . . . . 7
3.1 Our Bubble Number Density model. . . . . . . . . . . . . . . . . . . 263.2 Our Bubble Number Density model with the y-axis being set to a
logarithmic scale to help show the spread of each burnup. . . . . . . . 26
A.1 Threshold check in comparison to grayscale image . . . . . . . . . . . 35A.2 Adjusting the scale factor . . . . . . . . . . . . . . . . . . . . . . . . 36A.3 Adjusting the threshold method . . . . . . . . . . . . . . . . . . . . . 37A.4 Main function, “run.” . . . . . . . . . . . . . . . . . . . . . . . . . . . 37A.5 ImageJ’s Python editor. . . . . . . . . . . . . . . . . . . . . . . . . . 38
B.1 Python code for processing Futurix images . . . . . . . . . . . . . . . 42B.2 FP2 code. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
xiii
Chapter 1
Introduction
Under the sponsorship of the Department of Energy (DOE) and Battelle Energy
Alliance (BEA), I was employed as an intern at Idaho National Laboratory (INL).
During my internship, I worked on developing a temporary model for bubble number
density in metallic fuels to be inserted into INL’s BISON code. This chapter will
introduce fission reactors, BISON, and metallic fuels.
1.1 Nuclear Power Plants and Metallic Fuel
Nuclear power plants generate electricity through the heat released from fission. Since
the 1950s, scientists and engineers have been developing various designs of reactors
to more safely and effectively produce electricity. In these designs, the fuel that the
reactors use fall into several categories (e.g., oxide, metal, and ceramic). For the
project that I worked on, I helped the INL’s BISON team improve their metallic fuel
modeling and simulation.
1
2 Chapter 1 Introduction
1.1.1 Background
Metallic fuels were some of the first fuels used in nuclear power plants, beginning
around the 1940s. They were favored because they could be used to operate the
power plant while breeding more fuel, simultaneously. A well-known reactor that
used metal fuels is the Experimental Breeder Reactor (EBR-I), as it was the first
nuclear power plant to produce enough electricity to light up four light bulbs, then
later the building itself in 1951. It was thought that metal fuels with their fuel
breeding capabilities would be the nuclear fuel of choice; however, they could not
reach sufficiently high burnup.
Burnup is the amount of heavy metal that has undergone fission. When a per-
centage of the initial amount has been used, the fuel is at that percentage of burnup.
One unit that is used for burnup is %FIMA, which stands for “fissions per initial
metal atom” and noted as ‘at. %.’ Additionally, to help others understand burnup,
the Nuclear Regulatory Commission [1] (NRC) wrote:
[I]t helps to know more about the uranium that fuels a reactor. Before
it is made into fuel, uranium is processed to increase the concentration
of atoms that can split in a controlled chain reaction in the reactor. The
atoms release energy as they split.
The NRC used uranium as an example in this explanation; however, you can replace
uranium with any fissile isotope. The energy released from fission is first converted
into thermal energy then into mechanical energy that produces electricity. To achieve
higher burnups requires a fuel that has higher concentrations of fissile atoms to help
sustain a chain reaction. A stable chain reaction means the fuel can remain in the
reactor for extended periods without being replaced.
Many of the commercial reactors replaced metal fuels with fuels that could obtain
1.1 Nuclear Power Plants and Metallic Fuel 3
higher burnups to have longer-lasting fuel because it is cost-effective. However, those
reactors that continued with metal fuel discovered that there were bubbles of fission
products forming in the fuel causing it to swell. This swelling was the cause for
lower max burnups and an increase in cladding issues (e.g., cracking in the cladding,
warping of the cladding, changes in the thermal properties in the cladding) due to
the stress it applies to the cladding. To improve the performance of the fuel a void
at the top of the fuel rod, called the plenum, was added to the design and a sodium
bond was inserted between the cladding and the fuel pellets (see Figure 1.1).
Figure 1.1 Gaseous fission products travels through the bubbles to theplenum [2].
This alteration in fuel rod design allowed metallic fuels to reach higher burnups,
longer fuel life, and more energy output. With metal fuels able to compete with
other fuels, interest in further research and usage has grown. One reason interest has
grown is that metal fuel can potentially be a cheaper option for fuel without making
any sacrifices in burnup or energy production.
4 Chapter 1 Introduction
1.1.2 Coalescing Phenomenon
The bubbles in metallic fuels are formed when U-235 is struck by a neutron causing
the atom to split into fission products. The fission products from U-235 are gaseous
and have an increase in volume that pushes the fuel outwards creating a bubble. When
the fuel swells, it pushes the sodium bond that surrounds the fuel pellets upwards to
moderate the stress and temperature increase being applied to the cladding. These
fission products travel through the bubbles upwards to the plenum to be stored, as in
Figure 1.1; this event gives relief to the cladding by decreasing the amount of swelling.
Eventually, at higher burnups, the bubbles start coalescing together as the con-
stituents in binary and ternary fuels begin to separate. The zirconium moves towards
the cladding and the radial center of the fuel rod, while the uranium and plutonium
are in the area between the zirconium regions (See Figure 1.2).
Figure 1.2 Cross-sectional metallography of U-22Pu-10Zr fuel [3].
This coalescing phenomenon causes alterations in the atomic structure of the fuel
along with its thermal properties. Thus, it is crucial to understand the characteristics
of bubbles and the coalescing in metal fuels.
1.2 BISON: Modeling and Simulation 5
1.2 BISON: Modeling and Simulation
BISON is a finite-element based nuclear fuel performance code that implements multi-
physics and nuclear thermodynamics [4] to simulate various fuels and cladding. With
nuclear power plants being expensive to build, operate, and maintain, it is important
to make sure they are efficient and productive. To do this, accurate and precise
simulations and modeling provides a reassurance that a reactor, fuel, and/or setup
is worth the money. Programmers go through great lengths to verify, validate, and
document their codes.
“Verification and validation” means that the codes are developed using correct
methods and equations, and the simulations that are produced are comparable to
actual results. Years of research and studies are used to develop models for phenomena
common to nuclear plants, whether they are accidental or part of the operation.
These models are then implemented into BISON and stitched together with multi-
dimensional physics.
Nuclear Power Plants Funding
Modeling and simulations are a crucial part of decreasing the cost of overall con-
struction, operating, and research for new nuclear power plants. The International
Atomic Energy Association has stated that “new nuclear power plants need suffi-
cient funding - usually the responsibility of the government - and financing, which
is the responsibility of the plant’s owner or operator [5].” The funding for these new
plants may be the government’s responsibility; however, it is the state government
who will consider raising state taxes to pay the bill. Thankfully, by modeling and
simulating, cost-effective nuclear power plants can be constructed without hindering
the surrounding population or the government.
6 Chapter 1 Introduction
Scientists, engineers, and government officials can run thousands of tests to design
the best nuclear reactor and its fuel for specific applications; this makes the plants
more cost-effective. In these tests, they can test how the geographical features will
influence particular reactor designs and choose the optimal reactor. After selecting a
reactor, the plant needs to obtain the cheapest fuel with little to no sacrifice to the
overall performance of the plant.
Even though the reactor and fuel are cost-effective with little to no performance
sacrifices, new nuclear power plants are still expensive to construct. Thankfully, the
initial building cost is the only expense to worry about unless there is an accident.
Accidents are always a possibility; however, modeling and simulations can take into
account the cost of an accident. This expense can be added to the final cost before the
decision to construct a new plant is made. The cost will be distributed throughout
several years, making the construction of new nuclear power plants an appealing
energy option.
BISON and MOOSE
As stated earlier, BISON is a nuclear fuel performance code that implements multi-
physics, multi-time, and multi-space to compute nuclear thermodynamics and me-
chanical properties by parallel, finite element-based software. To understand this
process better, some key concepts need explanation.
Finite element method (FEM) is a numerical method that solves one-, two-, and
three-dimensional partial differential equations (PDE) by breaking the system into
smaller parts. Imagine a bridge (See Figure 1.3) as our system and break it into
smaller geometric shapes with connecting boundaries. Each shape represents a matrix
whose entries are describing a physical property. As one matrix changes its surround-
ing matrices that share boundaries are affected causing a domino effect throughout
1.2 BISON: Modeling and Simulation 7
all the other matrices in the system.
Figure 1.3 Finite element method application for a bridge [6].
FEM solves one matrix at a time while updating the surrounding matrices and repeats
this process over time intervals until the entire system has been solved. BISON uses
this to solve how physical and chemical properties propagate through the fuel and
rod1. With BISON being fully-coupled, it can simultaneously solve several different
properties that are affecting the fuel through FEM and running in parallel.
To be running in parallel means that the software has the option of using one
or many processors to perform one or many operations. It is left to the user to
decided how many processors will be used for the operation(s). When you need to
simultaneously perform many operations, it is ideal to use more processors as they
will provide quicker run times. This capability is utilized when one unknown variable
depends on the other two variables. For example, the one-dimensional heat equation
depends on position x and time t, as shown below:
∂u
∂t= k
∂2u
∂x2
1Visit https://BISON.inl.gov/SitePages/Home.aspx and watch their video on a fuel pellet missing
a surface. It demonstrates how BISON uses FEM.
8 Chapter 1 Introduction
By x and t being fully-coupled, these variables will help update each other until a
solution is converged upon. As the software runs in parallel, it can solve both sides of
the equation to converge upon an answer for u. BISON uses this feature, along with
FEM, to solve complex and nonlinear system of equations that represent real world
phenomena occurring in the fuel and rod. BISON can solve these types of problems
along with other kinds because it was built upon MOOSE.
MOOSE stands for “Multiphysics Object-Oriented Simulation Environment.” It
is a base software that many applications at INL are built upon. The advantage to
using MOOSE is that it allows scientists who may not be fluent in computer science
to develop an application that they can “plug and play” into the MOOSE simulation
platform [7]. By using MOOSE, scientists do not need to start from scratch when
developing an application. Your application will only need to be specific to your field
of study and can reference modules in MOOSE when necessary. This functionality
allows for new simulation capabilities. BISON utilizes MOOSE’s capabilities and
adds to them with models pertaining to nuclear fuels. To help make sure that the
BISON code is modeling and simulating correctly, the code is verified and validated.
Verification and validation both play important roles in modeling and simulation.
The BISON team puts both of these process into action when modifying and testing
their code to ensure accurate and precise results. It is crucial to understand the differ-
ence between verification and validation as they help the BISON team develop better
programs for nuclear fuel performance. BISON team member Jason Hales has stated
that “[v]erification is the process of determining whether a software implementation
of a mathematical model accurately represents that model,” and that “[v]alidation is
comparing computed results to experimental data [8].” In other words, verification
is developing the product the correct way while validation is developing the correct
product.
1.2 BISON: Modeling and Simulation 9
1.2.1 Bubble Number Density Modeling Project
The research that I performed at INL under the direction of the BISON team was
using image analysis software to count bubbles in metal fuel micrographs from old Ex-
perimental Breeder Reactor II (EBR-II) experiments. I used those counts to develop
a density model that has replaced BISON’s previous bubble number density model.
With this replacement, there has been an improvement in the BISON code’s fuel
swelling simulations because previously BISON used a constant value for its model.
(The constant value was intended to be a temporary model.) For our model to work
in the BISON code, it needed to provide the number of bubble counts per cubic meter.
A trend of previous research suggested that the bubble number density follow
y = cx−a, where c and a were empirical constants depending on the blend of the
metal fuel, x was the burnup of the fuel, and y was the bubble number density. We
used this trend as a baseline to verify our model. Along with research expectations,
our model’s bubble counts decreased greatly when the fuel approaches 2% burnup
and began to level out afterward. The reason for the decrease in bubble counts was
because the bubbles start to coalesce at higher burnups and eventually stop coalescing
once the bubbles grow large enough to handle the gaseous fission products. Those
fission products later escaped to the plenum of the fuel rod leaving the bubbles to
continue filling up with newly produced fission products as the fuel was spent. There
is ongoing research, outside of this project, that will describe metal fuel’s properties
even better in preparation for advanced sodium fast reactors (SFR).
10 Chapter 1 Introduction
Chapter 2
Image Analysis Procedure
This chapter will discuss the method we used to develop our bubble number density
model. The discussion includes how we selected the images that we collected our
bubble counts from, the assumptions we made, how to determine what a bubble is
in our images, our initial testing of our automated process with ImageJ (an image
analysis software) and Python, and ending with an analysis of the data. Results are
presented in chapter three, and a step-by-step procedure is found in Appendix B.
2.1 EBR-II Images
The model for bubble number density that we are developing is through image anal-
ysis. The images used to develop our model were metal fuel micrographs that were
first documented in various EBR-II experiments that took place from the 1960s to
the 1990s. The rationale to use images from these EBR-II experiments is that they
are available for us to use without cost. Since the model we developed was going to
be temporary, it was sufficient to use the old EBR-II images as a base for creating
our model.
11
12 Chapter 2 Image Analysis Procedure
While searching the EBR-II’s experimental documentation for images, we also
searched for the corresponding burnup values that coincide with them. The burnup
values were occasionally in the caption of the images; however, quite often we had to
search the experimental reports for the burnup values instead. It was important to us
to find these burnup values, as our model was dependent on them. In our model, we
found a general trend for bubble number density as the burnup increases. Therefore,
when we found images without their burnup value, we could not use them.
Many of the experiments’ fuel compositions differed. This change in parameter
causes variations in the bubble count for the images that have the same burnup, yet
come from different experiments (See Table 2.1).
Experiment Element Burnup (FIMA) Fuel Composition
X421 T108 10 U-19Pu-10Zr
X423a T332 1 U-10Zr
X423b T308 2 U-3Pu-10Zr
X423b T345 2 U-19Pu-10Zr
X423c T325 5 U-8Pu-10Zr
X423c T330 5 U-22Pu-10Zr
X428 J475 2.5 U-19Pu-10Zr
X501 MNT49A 5.75 U-20.2Pu-10Zr-1.3Np-1.2Am
X501 MNT52A 6 U-20.2Pu-10Zr-1.3Np-1.2Am
X501 MNT55A 4.25 U-20.2Pu-10Zr-1.3Np-1.2Am
Table 2.1 EBR-II Experiments and their corresponding fuel compositions.
We recognized this issue and assumed that all fuel compositions provided the same
bubble production rate. This assumption lessened the quality of our model, but it is
still an improvement compared to the previous models in the BISON code and will
2.1 EBR-II Images 13
be temporary until a better model can be developed.
2.1.1 Selecting the Images
In selecting the images, three requirements had to be met. These requirements were
set in place to ensure precise data from each image. So even though there were around
a hundred images to choose from in the EBR-II documentation, we were not able to
collect data from most of them. The reason for not being able to use those images
was due to either an excess of noise, the burnup values were unknown, and/or we did
not know what the cladding thicknesses were. Images that did not have these issues,
were collected into our image bank and used to develop our model.
The first requirement was that the image must have cladding in the image itself
to create a scale factor. In other words, the image must have its cladding thickness
documented either by the image or in the experiment report. The scale factors were
used to ensure that the data collected from the images had the same units for area. An
exception to this requirement is allowed when an image is from the same experiment,
fuel pin, position, and zoom, thus certifying that its scale factor will be the same as
an image with cladding in it. We were able to stitch together those images that did
not have cladding in them with those images that have cladding. This was possible
with the image stitching ability that we added to ImageJ. However, not all images
without cladding in them were able to be stitched together to those with cladding
but were still used to collect data.
The next requirement was that an image must be of decent quality. The amount
of noise found in an image must be minimal or non-existent so that ImageJ’s particle
analysis did not count the noise as a bubble. Since we used images that came from
old micrographs, the quality of the images were not always ideal. However, we used
a bootstrapping-like technique to increase our sample size, which will be explained
14 Chapter 2 Image Analysis Procedure
in section 2.2.1. By using this technique, we were able to increase the overall quality
and quantity of our data without making any sacrifices.
Finally, the last requirement to ensure quality data was that the burnup for the
fuel pin must be provided somewhere in the EBR-II documentation. Without the
burnup, our model cannot accurately describe how the bubble number density acts
when there is a change in burnup.
2.2 ImageJ and Python
To find a general trend for the bubble number density, we used ImageJ and Python
to process and analyze our images. ImageJ is a Java image processing program that
allows users to add codes and features. This flexibility allowed us to add the BioVexxal
plug-in that provided better thresholding capabilities, which gave us clarity of what
was a bubble and what was not. We used a version of ImageJ called Fiji1, which has
many other packages (e.g., image stitching [9]) pre-installed. This greatly increased
the functionality of ImageJ compared to other versions.
The ImageJ developers have made it possible for everyone to use different com-
puter programming languages to use ImageJ’s functionality. This idea allowed us to
combine our knowledge of Python with the functionality of ImageJ to automate the
image handling process, which will be discussed in section 2.2.2. However, ImageJ
does have its limitations when communicating with other languages, such as not be-
ing able to use Python’s Panda and Numpy libraries. With Python, we used a few
functions to define and set the various thresholds to their corresponding images. We
were also able to apply the correct scaling factor to that image. Finally, the main
function in the Python script can create many samples from just one image. These
1Fiji can be found at https://imagej.net/Fiji
2.3 Discussion 15
functions helped us automate our data-collecting process.
2.3 Discussion
This section will cover the scaling issues that occurred, how we determined what a
bubble is, and the assumptions that we made. Additionally, I will briefly discuss how
we collaborated with another team who was also approaching bubble number density.
2.3.1 Scaling issues
We knew that determining the correct scaling for each image was going to be difficult
because these images were coming from various experiments that were held between
the 1960s and 1990s. Due to technological limitations, the image quality of the
fuel micrographs was low, the images did not receive scale bars on them, the images
received additional scaling when they were scanned and saved onto the computer, and
the images contained noise that could be misinterpreted as bubbles by ImageJ. There
has been a massive technological growth since the 1960s, meaning those technological
limitations have been resolved. For example, there are higher quality microscopes
that can take a picture of what is being viewed, add a scale bar to it, and directly
save the image to the computer without adding additional scaling.
Another scaling issue that we encountered was the lack of a scale bar on some of
the images. All that was available to us, to figure out a possible scale factor, was
a number provided at the bottom of the page the image was scanned to. Thus, we
took the ratio between the cladding thickness and the number of pixels to span that
length to be our relative scale factor for images. We figured out what the scale factor
was for every image and recorded them into our Python script.
By having the relative scale factors, we attempted to restore the images to their
16 Chapter 2 Image Analysis Procedure
original dimensions. We are uncertain if we were able to accomplish the restoration;
however, we found the shape that the bubble number density follows. Along with
the attempted restoration, we were able to compare one image’s bubble counts with
another’s bubble counts, and it took care of any additional scaling that could have
gone on during scanning or archiving of the image.
Alternative routes to modeling Bubble Number Density
There is another team at INL, that is developing a bubble number density model.
They have access to images that are more recent and have correct scaling to them.
These images provide them with more information on what a bubble is and how
to scale the images, which enables them to have more accurate and precise bubble
counts. They used a different method in developing their model. A MATLAB code
that they created analyzed the images and computed several nuclear fuel parameters
from which they could find the bubble number density. Also, they were kind enough
to share a few of their images and results from their model with us, which helped us
to validate our results.
When we compared our results, we found that they were proportional, however,
we wanted to know how the scaling factor from our results differed from theirs. Based
on our comparisons, we learned that our scale factors were three orders of magnitude
lower. Their results yielded counts much higher than ours. We decided to use their
scaling factor and the images they provided us with to see if we could get similar
results. After we applied our method to them, our counts were similar to theirs.
With this finding, we believed that their results were more accurate in determining
the bubble number density so we found a common scale factor function and applied
it to our method.
The reason we created our model instead of using theirs was because the BISON
2.3 Discussion 17
team wanted a temporary model to place into their code while the other team could
take their time developing a better model. Also, having multiple teams working,
separately, on modeling bubble number density enabled both teams to compare their
findings.
2.3.2 To be a Bubble or not to be a Bubble
There were a few complications that arose when deciding what was considered a
bubble in the images, because: (1) The noise in the images can occasionally be large
enough to be mistaken as a bubble, (2) When applying ImageJ’s many thresholding
methods to the images, some methods select pixels that are not a bubble while other
methods do not selects pixels that are indeed bubbles, and (3) As the metal fuel is
coalescing the crystal structure of uranium goes through phases, one being the alpha
phase. This phase can be mistaken for a bubble as it looks very similar to an untrained
human eye. To overcome these complications, I spent hours looking over the images
to train my brain to decipher what was a bubble by comparing the threshold images
with the originals. By comparing the threshold images with their originals, I learned
how the thresholding affected the bubble counts. After I learned this I could find the
threshold methods that best represented the original, thus eliminating most of the
noise. The comparison between images also helped sort out the alpha phases as well.
Many of the alpha phases overlap on some of the bubbles near the center of the fuel.
In the end, we decided that ImageJ was merging them with the bubbles they are on
top of, therefore, ImageJ was not counting the alpha phases and bubbles separately,
but as one count. We have accounted for many of the imperfections in the images but
there are still a few counts that are from noise and alpha phases. Since we trained
a human brain to look for all the imperfections, it was reasonable to assume that
if we trained a different person, we will get slightly different results for our model.
18 Chapter 2 Image Analysis Procedure
However, any results that would come from training another person should fall in the
same uncertainty range that was in our model.
2.3.3 Assumptions
As with most models, assumptions are made to help the model function properly.
For the bubble number density model we created, some assumptions deal with fuel
composition, burnup, and ImageJ. The assumption made for the fuel composition was
that all fuel compositions form the same amount of bubbles per burnup. Therefore,
we did not need to account for the fuel compositions used. This assumption helped
us since the number of usable images available to us was limited.
Burnup
Burnup in a fuel rod varies as you move away from the spade (bottom of the fuel
rod) and head towards the top. It was around the middle portion of the fuel rod that
received the highest burnup values relative to the rest of the fuel rod. Thankfully,
the documentation that we took our images from included the general area the image
comes from and a burnup value. Since the documentation did not specifically state
which burnup it was and all the people who originally worked on this EBR-II exper-
iment have moved on and are no longer in contact, we do not know if this burnup
value was the max burnup value, an average burnup value, or the burnup when the
rod was taken out of the reactor. We assumed that any value that we use was the
specific burnup for that position.
ImageJ
The assumptions about ImageJ are straight-forward. During the stitching process, we
assumed that there were no additional bubbles or noise created. Furthermore, when
2.3 Discussion 19
the boundary of two bubbles overlapped, they were considered to be one bubble by
ImageJ instead of the two bubbles. Also, if two bubbles were in a specified radius
of each other, they were considered to be one bubble, as some threshold methods in
ImageJ combined them. To get a more accurate count of bubbles, we used several
thresholding methods and found averages between them for each image.
2.3.4 Initial testing
Initially, we tested ImageJ’s ability to count the bubbles in a sample from one image.
We tried out many methods, ranging from trying thresholding only techniques on the
sample to testing preconditioning techniques along with thresholding. By learning
what ImageJ was doing to count the bubbles in the image under various conditions,
we were able to decipher the best method to use to collect our data.
In our first approach to learn ImageJ, a sample from one image was investigated.
We applied various thresholds, one at a time, along with the image’s corresponding
scale factor to learn their effects on the bubble count. After this application of
thresholds, we ran ImageJ’s particle analyzer to count the bubbles we found which
methods yielded the highest and lowest counts. By knowing which methods produced
the highest and lowest counts, we were able to assess that each image required specific
thresholds. On the occasion that the best threshold for an image could not be decided
on, the image would be used a few times with one image having a low count threshold,
another with a high count threshold, and the last with an average count threshold.
After collecting the counts on such an occasion, we averaged the counts for that
image. Also, we found that the counts could be following the known distribution of
inverse gamma or beta.
To explain what thresholds do to an image, we will use the high count threshold,
as an example. It is called “Phansalkar2” and uses the following equation [10] to
20 Chapter 2 Image Analysis Procedure
determine the threshold value t:
t = mean× (1 + p× exp(−q ×mean) + k × ((stdev/r)− 1)), (2.1)
where mean and stdev are the local pixel mean and pixel standard deviation, respec-
tively. The values p = 2 and q = 10 are fixed, while k and r are parameters. To
understand how the Phansalkar method affects the rest of the image that the sample
was taken from, we applied a method similar to statistical bootstrapping.
In examining the effects of the Phansalkar threshold, we applied a random sam-
pling with a replacement technique that would allow us to create an estimator distri-
bution. This distribution provided us with the average, median, variance, maximum,
and minimum bubble count in the image using the Phansalkar threshold. We accom-
plished this by setting the image up the same way, where the image had its scale
factor defined and the Phansalkar threshold applied before taking a sample from it.
Once the sample was taken, it would be run through the ImageJ particle analysis
to count the bubbles and store the information in a CSV file. The sample was then
closed by ImageJ, the preset image was re-opened to take another sample, saving that
sample’s bubble count to the same CSV file as the previous sample. Once we found
the distribution for this image, we moved onto another image with a different burnup
and found that the Phansalkar threshold did not work for it.
Preparing for the Automated Process
Since one threshold method did not work for all the images in our collection, we needed
to have a human examine each image to decipher which threshold was the best for
that image. This threshold was noted for the image and then implemented into the
2This thresholding method is named after N. Phansalkar as it uses information based on
Phansalkar’s paper “Adaptive local thresholding for detection of nuclei in diversity stained cytology
images.”
2.3 Discussion 21
Python code to help automate the process of computing the number of bubbles in
each image. Another preparation needed for the automated process to work was that
the scale factor for each image needed to be inserted into the Python code so that
Python can apply the correct scale factor to its corresponding image.
To determine what the scale factor was for a specific image, normally a scale bar
is utilized. However, because our images did not have those scale bars, we used the
cladding thickness and related it to a specific number of pixels to determine their scale
factors. This relationship allowed us to convert pixels to other SI units; particularly,
we used square meters in the data collecting process. By applying the scale factor,
we knew the data we collected was in counts per square meter.
These counts per square meter were later converted into counts per cubic meter
making the data a volumetric density. Though it would have been ideal to use the
Python code for the conversion, unfortunately, ImageJ limits the mathematical func-
tionality of Python. This issue caused us to use other means to do the calculations
for bubble number density. We used a spreadsheet to do the repetitive math that was
needed with our data and is further discussed in section 2.3. In hindsight, we could
have used another Python script to read the CSV and do the conversion.
2.3.5 Automated Process
There are several Python codes that were used during data collection as we refined the
automated process. Thankfully, they all shared the general form of having a function
for scaling the images, a function for applying the threshold, and the main function
that operated the code. For full access to the codes that we used in our automated
process, please see Appendix B.
The main function called “run” did some operations in the code, such as, (1) set-
ting up the working directories to load images and save data into the appropriate CSV
22 Chapter 2 Image Analysis Procedure
files, (2) calling functions to perform scaling and threshold, and (3) pre-conditioning
the image. Setting up the file paths allowed us to use a FOR loop to iterate through
the image directory, selecting one image at a time, and saving a bubble count data
in the data directory as a CSV file. With this setup, it allowed us to apply any pre-
conditioning, scaling, and thresholding needed for any image. The pre-conditioning
that was done to each image was converting it to 8-bit then we cropped a sample out
of the image at a randomly chosen position. The pre-conditioning was the scaling and
thresholding applications; which was done to every sample. Each image was sampled
500 times and saved to the same CSV file before moving onto the next image.
The scaling and threshold functions applied the same method to correctly assign
each image to their corresponding scale factor and threshold. These functions read
in the image file name and sent it through a series of conditional statements. When
a condition was met in the functions, the scale factor and threshold was applied to
the image so that the main function can continue. This process continues until all
the images have been ran through the main function. When the process stopped we
applied a mathematical transformation on the data we collected to extract the bubble
number density from each sample. With the bubble number density extracted, we
ran an analysis of the values to test the quality of our data.
2.4 Analyzing the Data
Analyzing the counts from the images to figure out the distribution for each burnup
was vital to creating our model to study how burnup affects the bubble number
density. To do this with the counts that we collected for various burnups, we kept
a record of the area (in square micrometers) for each sample. Thus, we have counts
per squared micrometer that is easily converted into a density using the following
2.4 Analyzing the Data 23
transformation:
Bubble Number Density for one sample =
(counts
sample area× 1012
)3/2
, (2.2)
where multiplying by 1012 is to convert the sample area from square micrometers to
square meters. To apply the transformation to all samples, we combined all the CSV
files to make one large database. While doing this, we kept note of which samples
were taken from which image along with their burnups and sample area.
After collecting over 40,000 samples, we needed a way to filter the data to in-
crease the model’s accuracy by reducing the uncertainties. We did this by looking at
each burnup’s sample distribution and then color-coordinated the samples with the
images they came from. Images producing a large scatter within the distribution are
either counting noise or not counting the bubbles. By eliminating those images, the
remaining data was ready to be analyzed and formed into a model.
24 Chapter 2 Image Analysis Procedure
Chapter 3
Results
3.1 Image Analysis Model
After analyzing the collected data, we were able to compile a plot containing all the
images whose data we decided to use. The reason we decided not to use some images
was because their spread was too large and yielded no definitive information about
the trend that the bubble number density has. After applying a best-fit line to our
plot, it produced our model for bubble number density which was,
ρ = (6 · 1017)x−1.868,
where ρ represents the bubble number density in counts per cubic meter and x rep-
resents the burnup in at. %. Our model was near what research on bubble number
density said it should be. A difference we found between our model and previous
research was that when the fuel approached 2% burnup, the bubbles were expected
to have leveled out. However, our model did not level out until around 4% burnup,
as in Figure 3.1.
25
26 Chapter 3 Results
Figure 3.1 Our Bubble Number Density model.
We are not certain what caused this difference. However, possible causes could be
the differences in the fuel compositions and the positions in the fuel rods amongst
the images that we took our data from. We noted this possibility and assumed that
fuel composition and position in the fuel rod would not greatly affect our model.
Figure 3.2 demonstrates the spread of the counts from the images that we have
selected to use in our model because Figure 3.1 was not the best representation to
demonstrate our data’s spread.
Figure 3.2 Our Bubble Number Density model with the y-axis being setto a logarithmic scale to help show the spread of each burnup.
As noted, the spreads at 4.5%, 9%, and 10% burnup were large. The cause for the
large spreads was the imperfections in the images used. We would have preferred
3.1 Image Analysis Model 27
to use other images; however, we did not have any images better than the ones we
used. We needed at least a few images per burnup to learn more about the trend
that bubble number density has as it approached higher burnups.
Our model was sufficient for the improvement of the BISON code because it defines
the bubble number density better than the constant value did. With the trend we
found, the fuel swelling simulations can be more precise because the BISON code will
input a better representation of the bubble number density into its calculations.
28 Chapter 3 Results
Chapter 4
Conclusion
In conclusion, our model has provided a starting place for future research on the
bubble number density of metallic fuels. Though our model was temporary, it was
better than using a constant value. We learned from previous research that the
bubble number density was not a constant. The performance of the BISON code was
enhanced when we implemented our temporary model into it.
As the United States tries to regain the lead in advanced test reactors, they are
looking into metal fuels as a possible solution. That was why the BISON team was
eagerly trying to implement metallic fuel models into their program. As the BISON
code improves by adding better metallic fuel models, the accuracy and the precision
of its simulation increases.
29
30 Chapter 4 Conclusion
Bibliography
[1] Backgrounder on High Burnup Spent Nuclear Fuel. (n.d.). Retrieved Novem-
ber 6, 2019, from https://www.nrc.gov/reading-rm/doc-collections/fact-sheets/
bg-high-burnup-spent-fuel.html.
[2] Nuclear Metal Fuel: Characteristics, Design, Manufacturing, Testing, and Oper-
ating History. (June 2018). Retrieved December 1, 2019, from https://www.nrc.
gov/docs/ML1816/ML18165A249.pdf. Note: Used their Figures 1 and 3.
[3] Porter, D. L., Lahm, C. E., & Pahl, R. G. (1990). “Fuel constituent redistribution
during the early stages of U-Pu-Zr irradiation.” Metallurgical Transactions A,
21(7), 1871-1876. doi: 10.1007/bf02647234. Note: Used their Figures 1 and 4.
[4] BISON. (n.d.). Retrieved December 2, 2019, from https://BISON.inl.gov/
SitePages/Manuals.aspx.
[5] Funding and finance. (2016, April 13). Retrieved December 1, 2019, from https:
//www.iaea.org/topics/funding-and-finance.
[6] Reconstruction of small stone arch bridges in Dalmatian Hinterland. (July,
2011). Retrieved December 2, 2019, from https://www.researchgate.net/figure/
Numerical-model-of-the-stone-structure-of-the-bridge-over-Zrmanja-River fig7
259609998.
31
32 BIBLIOGRAPHY
[7] MOOSE. (n.d.). Retrieved December 2, 2019, from https://moose.inl.gov/
SitePages/Home.aspx.
[8] Note: Use of their figure. Hales, J., Novascone, S., Spencer, B., Williamson, R.,
Pastore, G., & Perez, D. (2014). “Verification of the BISON fuel performance
code.” Annals of Nuclear Energy, 71, 81-90. doi: 10.1016/j.anucene.2014.03.027
[9] Preibisch, S., Saalfeld, S., & Tomancak, P. (2009). “Globally optimal stitching
of tiled 3D microscopic image acquistions.” Bioinformatics, 25(11), 1463-1465.
doi: 10.1093/bioinformatics/btp184
[10] Auto Local Threshold. (n.d.). Retrieved December 1, 2019, from https://imagej.
net/Auto Local Threshold.
Appendix A
Bubble Number Density
Automated Process
Image Analysis with ImageJ/Fiji
You will need to have the BioVoxxel plug-in installed. The download information
can be found at: https://imagej.net/BioVoxxel Toolbox.
Process
ImageJ/Fiji
1. Open ImageJ software.
2. Open micrograph file.
File → Open then navigate to file location.
3. Set measurement scale. Use the line tool, draw a line over the scale on the
image. If scale on image is not provided then draw over the cladding provided
you know what the cladding thickness is.
33
34 Chapter A Bubble Number Density Automated Process
Analyze → Set Scale.
In the Set Scale window enter the distance of the ruler or known cladding
thickness in the “Known distance” box and change the units in the “Unit of
length” box to be consistent and then check the “global” option and click OK.
4. Crop image to exclude the cladding, ruler and/or any blemishes. Draw rectangle
around the part of the image to be retained.
Image → Crop. (Shortcut: SHIFT + command + x)
5. Convert image to grayscale.
Image → Type → 8-bit
6. Save the image with File → Save As → Tiff.... This way your original image
will be reusable if needed. This is helpful if you need to stitch your original
with something else or crop it into smaller pieces. You might need to crop into
smaller pieces if there are blemishes in the middle of the image or elsewhere.
7. If you do not have BioVoxxel Toolbox installed please visit the URL provided
above. To be able to use BioVoxxel Toolbox after installation click on the dou-
ble arrow of the ImageJ/Fiji toolbar and select BioVoxxel Toolbox. A green
cube will now appear in the toolbar. Click on the green cube and select Thresh-
old check. In the window, unselect “bright objects on dark background” and
select “include local thresholds” and insert your desired radius and parameters.
Normally, do a radius of 2 and again with 10 as the threshold images will differ
greatly. There is a horizontal scroll bar on the threshold check window for you
to look at what each threshold would choose once applied. The blue and light
blue will not be selected while the yellow, orange, and red areas will be selected.
35
Figure A.1 Threshold check in comparison to grayscale image
Try to select a few threshold methods that would best represent the original
image. There is no best-fit threshold method so select a few; one that captures
the smaller pores well, one that captures the bigger pores well, and one that is
in between the other two methods.
8. (Check) Test the selected threshold methods by applying them to separate im-
ages of the same image and comparing the threshold image with the original.
The threshold images should be what you expected. For example, if you expect
the image to represent the larger pores better then it should otherwise select a
different threshold method.
9. (Check) You will want to get an idea of how many pores will be counted from
the image before you insert the non-threshold image into the directory that will
be further processed by the python script. With the threshold image click:
36 Chapter A Bubble Number Density Automated Process
Analyze → Analyze Particles...
A window will appear and the only two boxes that should be selected are “Sum-
marize” and “Include holes” then click Ok. Don’t close the summary window
yet. You will repeat this step until all the threshold images that you are check-
ing have been analyzed. Typically, you will see that one image will be a high
count, one low count, and one in the middle. Occasionally, you will find that
they have similar counts and that simply means that you will not have a large
spread when the python code has processed the images.
10. After selecting the thresholds for each image place the images all into the same
directory. Make sure each image’s name ends with “ test.tif”. Next is using the
python script with ImageJ/Fiji.
Python
1. Open your Python script.
2. Check the path notations within the code to match your directories. You should
have a directory that has the images that you will be using and another to store
the summary CSV files in.
3. Change the scale factor for each image. You have these from step #3 under the
ImageJ/Fiji subsection. In the figure below you see “50x” and “100x”, please
change these to part of the name of each image so that the code can differentiate
between the images. If you are using Atom, you can simply replace all of these
with the replace all function.
Figure A.2 Adjusting the scale factor
37
The scale factors are inserted for the values found after “distance=”. Everything
else can be left the same.
4. You will be inserting the threshold method(s) for each image as well.
Figure A.3 Adjusting the threshold method
The method can be changed by simply typing the method in where it says
“method=”.
5. (Check) You will need to check what the dimensions of each images are. You can
do this by inserting “print imp.title”, “print imp.width”, and “print imp.height”
as shown in the figure below.
Figure A.4 Main function, “run.”
38 Chapter A Bubble Number Density Automated Process
Be sure that the “SAMPLE SIZE” equals one and the method function is com-
mented out for this check.
6. Open ImageJ/Fiji and push the ‘[’ key to open the window that you will be
running your python code in.
Figure A.5 ImageJ’s Python editor.
7. Navigate through the directory on the left to where your python script is and
load it. Then click the “Run” button. You will learn the dimensions of each
image. Store these values. The order of the images corresponds with the sum-
mary number of the summary CSV files that will be saved to the directory you
specified in the python script.
8. Now that you know the dimensions of each image (in pixels) you may remove
those lines of code and set the “SAMPLE SIZE” to how many samples you
want. 150 samples for each image is sufficient. Also, un-comment the method
function in the code.
39
9. When the code is running you will see many summary windows opening and
blinking as they are updated. Look at the terminal section of the ImageJ/Fiji
window to know when the code is done. The word “Finished” will be printed
there.
10. Congrats you have finished collecting the data. Now use excel to analyze the
data.
40 Chapter A Bubble Number Density Automated Process
Appendix B
Codes
The codes given below are some of the codes we used to figure out a general trend for
bubble number density. Each code follows from a template that I wrote. The basic
template has a method function, scaling function, and a run function.
The Futurix Code (See Figure B.1) was created for the purpose of applying our
team’s image analysis process to the images that the Marmot team provided us with.
With these images we were able to compare our results from our respective processes.
This code helped us realize that there was a scaling difference. The Futurix images
are from recent metal fuel micrographs with the scale factor already determined for
them by the Marmot team.
The Filtered Process 2 (FP2) code (See Figure B.2) was the code that we settled
on when collecting the counts for our model. The code includes the scaling for each
image that were using and the threshold methods that corresponded with them. We
later lowered the sample size to 125 because ImageJ was throwing up warnings and
errors that we could not fix, yet did seized after lowering the sample size.
41
42 Chapter B Codes
Figure B.1 Python code for processing Futurix images
43
Figure B.2 FP2 code.
44 Chapter B Codes