Skip to content

Commit

Permalink
Merge pull request #346 from dschwen/docs2_213
Browse files Browse the repository at this point in the history
Add additional documentation
  • Loading branch information
snschune authored Aug 21, 2018
2 parents acc6f89 + d3891c8 commit b891718
Show file tree
Hide file tree
Showing 61 changed files with 833 additions and 533 deletions.
17 changes: 9 additions & 8 deletions doc/content/source/mesh/MyTRIMMesh.md
Original file line number Diff line number Diff line change
@@ -1,15 +1,16 @@
<!-- MOOSE Documentation Stub: Remove this when content is added. -->

# MyTRIMMesh

!alert construction title=Undocumented Class
The MyTRIMMesh has not been documented, if you would like to contribute to MOOSE by
writing documentation, please see [/generate.md]. The content contained on this page explains
the typical documentation associated with a MooseObject; however, what is contained is ultimately
determined by what is necessary to make the documentation clear for users.

!syntax description /Mesh/MyTRIMMesh

Restricted regular orthogonal [GeneratedMesh](/GeneratedMesh.md) with equal size
level 0 elements (no bias) and EDGE2, QUAD4, or HEX8 elements only. These
restrictions allow the use of a custom super fast point locator to find elements
based on spatial locations (required for fast material property lookup in the
Binary Collision Monte Carlo stage). This mesh is also recommended for use with
the [FourierTransform](/FourierTransform.md) user object.

The use of adaptivity is fully supported.

!syntax parameters /Mesh/MyTRIMMesh

!syntax inputs /Mesh/MyTRIMMesh
Expand Down
93 changes: 61 additions & 32 deletions doc/content/source/userobjects/MyTRIMRasterizer.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,62 +7,91 @@ provided by MooseVariables specified in parameter `var` to prepare a rasterized
domain on which binary collision Monte Carlo is performed. Rasterization is the
process of averaging smoothly varying compositional data over each FEM mesh element.

The entries in of the `var`, `M`, and `Z` parameters are paired; we index them as $\gamma_j(\vec{r})$, $M_j$, and $Z_j$, respectively.
Loosely speaking $\gamma_j(\vec{r})$ represents the number density of isotope $j$ at point $\vec{r}$, $M_j$ is the atomic mass, and
$Z_j$ is the charge in units of $e$.
The entries in of the `var`, `M`, and `Z` parameters are paired; we index them
as $\gamma_j(\vec{r})$, $M_j$, and $Z_j$, respectively. Loosely speaking
$\gamma_j(\vec{r})$ represents the number density of isotope $j$ at point
$\vec{r}$, $M_j$ is the atomic mass, and $Z_j$ is the charge in units of $e$.

The physical meaning of the `var` argument depends on what the user provides for
the `site_volume` parameter. `site_volume` is a material property and can vary
with space; it is denoted by $\Omega(\vec{r})$. MyTRIM computes the mass density
$\rho$ of the material by:

The physical meaning of the `var` argument depends on what the user provides for the
`site_volume` parameter. `site_volume` is a material property and can vary with space;
it is denoted by $\Omega(\vec{r})$. MyTRIM computes the mass density $\rho$ of the material by:
\begin{equation}
\rho = \sum\limits_{j=1}^J \frac{\gamma_j(\vec{r}) M_j}{N_A \Omega(\vec{r})},
\end{equation}
where $N_A$ is Avogadro's number. We identify $\gamma_j / \Omega$ as the number density $N_j$ defined
as the number of atoms of species $j$ per unit volume. The following choices for $\Omega$ may be usage
of the `site_volume` parameter:

$\Omega = 1$: $\gamma_j = N_j$ so that the user should store number densities in the variables specified
in `var`.
where $N_A$ is Avogadro's number. We identify $\gamma_j / \Omega$ as the number
density $N_j$ defined as the number of atoms of species $j$ per unit volume. The
following choices for $\Omega$ may be usage of the `site_volume` parameter:

$\Omega = 1$: $\gamma_j = N_j$ so that the user should store number densities in
the variables specified in `var`.

$\Omega \equiv \text{compound volume, e.g. volume of UO}_2$: $\gamma_j$ should be the stoichiometric content of species $j$. Using the $\text{UO}_2$ example:
$\Omega \equiv \text{compound volume, e.g. volume of UO}_2$: $\gamma_j$ should
be the stoichiometric content of species $j$. Using the $\text{UO}_2$ example:
$\gamma_U = 1$, $\gamma_O=2$.

$\Omega \equiv \text{average volume per atoms, i.e. } \frac{\text{volume}}{\text{number of atoms}}$: $\gamma_j$ should be the number fraction. In this case $\sum\limits_{j=1}^J \gamma_j=1$.
$\Omega \equiv \text{average volume per atoms, i.e. }
\frac{\text{volume}}{\text{number of atoms}}$: $\gamma_j$ should be the number
fraction. In this case $\sum\limits_{j=1}^J \gamma_j=1$.

## Computing the PKA list

Before performing damage cascades, the rasterizer computes the number of primary knock-on atoms (PKA) $n_{\text{PKA,l, M, Z}$ for each mesh element $l$, mass $M$ and atomic number $Z$ by:
Before performing damage cascades, the rasterizer computes the number of primary
knock-on atoms (PKA) $n_{\text{PKA,l, M, Z}$ for each mesh element $l$, mass $M$
and atomic number $Z$ by:

\begin{equation}
n_{\text{PKA},l,M,Z} = \Delta t \sum\limits_{k=1}^K p_k(A,Z) \int\limits_{V_l} dV R_k(\vec{r}),
\end{equation}
where $\Delta t$ is the current time step, $k$ indexes the `PKAGenerator` objects provided in the `pka_generator` parameter, $p_k(M,Z)$ is the probability
that `PKAGenerator` $k$ produces a PKA with mass $M$ and atomic number $Z$, and $R_k(\vec{r})$ is the recoil rate of `PKAGenerator` $k$ that may depend on space.
$n_{\text{PKA},l,M,Z}$ is an integer number so it is rounded to the next higher value with a probability proportional to its truncated integer complement ($1.4$ would be $2$ with a probability of $0.4$, and $1$ with a probability of $0.6$).
The total number of PKAs is given by $n_{\text{PKA}} = \sum\limits_{l,M,Z} n_{\text{PKA},l,M,Z}$.

where $\Delta t$ is the current time step, $k$ indexes the `PKAGenerator`
objects provided in the `pka_generator` parameter, $p_k(M,Z)$ is the probability
that `PKAGenerator` $k$ produces a PKA with mass $M$ and atomic number $Z$, and
$R_k(\vec{r})$ is the recoil rate of `PKAGenerator` $k$ that may depend on
space. $n_{\text{PKA},l,M,Z}$ is an integer number so it is rounded to the next
higher value with a probability proportional to its truncated integer complement
($1.4$ would be $2$ with a probability of $0.4$, and $1$ with a probability of
$0.6$). The total number of PKAs is given by $n_{\text{PKA}} =
\sum\limits_{l,M,Z} n_{\text{PKA},l,M,Z}$.

## Scaling PKA rates

The rasterizer provides two parameters for modifying the number of simulated PKAs without biasing the results. The parameter `max_pka_count`
limits the number of PKAs roughly to the provided integer number denoted by $n$. If the number of computed PKAs is smaller than or equal to `max_pka_count`, the parameter is ignored. If the
number of PKAs is larger than `max_pka_count`, PKAs are accepted with a probability of $n/n_{\text{PKA}}$. The actual number of PKAs is usually not identical to $n$ and is denoted by $n'$.
Any tallied result is, e.g. vacancy or interstitial densities or energy deposition, are multiplied by $n_{\text{PKA}/n'$.
The rasterizer provides two parameters for modifying the number of simulated
PKAs without biasing the results. The parameter `max_pka_count` limits the
number of PKAs roughly to the provided integer number denoted by $n$. If the
number of computed PKAs is smaller than or equal to `max_pka_count`, the
parameter is ignored. If the number of PKAs is larger than `max_pka_count`, PKAs
are accepted with a probability of $n/n_{\text{PKA}}$. The actual number of PKAs
is usually not identical to $n$ and is denoted by $n'$. Any tallied result is,
e.g. vacancy or interstitial densities or energy deposition, are multiplied by
$n_{\text{PKA}/n'$.

The parameter `recoil_rate_scaling` is a real number that is multiplied to the recoil rate $R_k(\vec{r})$. All tallied results are divided by `recoil_rate_scaling`.
The parameter `recoil_rate_scaling` is a real number that is multiplied to the
recoil rate $R_k(\vec{r})$. All tallied results are divided by
`recoil_rate_scaling`.

## Recombination

A simple model for recombination *within* damage cascades is currently implemented. A vacancy-interstitial pair is annihilated if their distance
is less than `r_rec`. Note that `r_rec` must be given in Angstrom. Recombination within damage cascades typically occurs within thermal spike areas
where sufficient energy has been deposited to displace virtually all contained atoms. In thermal spike areas the atoms are effectively in a liquid state.
Recrystallization takes place when energy has been dissipated from the thermal spike area and most Frenkel pairs annihilate. Surviving Frenkel pairs
have usually been transported out of the melted zone through collision sequences along closely packed directions. The current recombination model
does not accurately describe this physics.
A simple model for recombination *within* damage cascades is currently
implemented. A vacancy-interstitial pair is annihilated if their distance is
less than `r_rec`. Note that `r_rec` must be given in Angstrom. Recombination
within damage cascades typically occurs within thermal spike areas where
sufficient energy has been deposited to displace virtually all contained atoms.
In thermal spike areas the atoms are effectively in a liquid state.
Recrystallization takes place when energy has been dissipated from the thermal
spike area and most Frenkel pairs annihilate. Surviving Frenkel pairs have
usually been transported out of the melted zone through collision sequences
along closely packed directions. The current recombination model does not
accurately describe this physics.

## Periodic variables

If all variables in the `var` parameters are auxiliary variables, the rasterizer has to be made
aware of periodic boundaries. The user needs to provide a nonlinear variable that the desired periodic
variable apply to in the `periodic_var` parameter.
If all variables in the `var` parameters are auxiliary variables, the rasterizer
has to be made aware of periodic boundaries. The user needs to provide a
nonlinear variable that the desired periodic variable apply to in the
`periodic_var` parameter.

!syntax parameters /UserObjects/MyTRIMRasterizer

Expand Down
11 changes: 3 additions & 8 deletions doc/content/source/userobjects/PKAConstant.md
Original file line number Diff line number Diff line change
@@ -1,15 +1,10 @@
<!-- MOOSE Documentation Stub: Remove this when content is added. -->

# PKAConstant

!alert construction title=Undocumented Class
The PKAConstant has not been documented, if you would like to contribute to MOOSE by
writing documentation, please see [/generate.md]. The content contained on this page explains
the typical documentation associated with a MooseObject; however, what is contained is ultimately
determined by what is necessary to make the documentation clear for users.

!syntax description /UserObjects/PKAConstant

This generator will place PKAs uniformly in the domain with a random direction.
The mass, charge, and energy are constants given by the user.

!syntax parameters /UserObjects/PKAConstant

!syntax inputs /UserObjects/PKAConstant
Expand Down
11 changes: 3 additions & 8 deletions doc/content/source/userobjects/PKAFissionFragmentEmpirical.md
Original file line number Diff line number Diff line change
@@ -1,15 +1,10 @@
<!-- MOOSE Documentation Stub: Remove this when content is added. -->

# PKAFissionFragmentEmpirical

!alert construction title=Undocumented Class
The PKAFissionFragmentEmpirical has not been documented, if you would like to contribute to MOOSE by
writing documentation, please see [/generate.md]. The content contained on this page explains
the typical documentation associated with a MooseObject; however, what is contained is ultimately
determined by what is necessary to make the documentation clear for users.

!syntax description /UserObjects/PKAFissionFragmentEmpirical

Samples an empirical distribution using the MyTRIM MassInverter and EnergyInverter.
These distributions are parameterized from `insert citation here`.

!syntax parameters /UserObjects/PKAFissionFragmentEmpirical

!syntax inputs /UserObjects/PKAFissionFragmentEmpirical
Expand Down
47 changes: 32 additions & 15 deletions doc/content/source/userobjects/PKAFissionFragmentNeutronics.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,46 +12,63 @@ It is computed by:
F_i(\vec{r}, \vec{\rho}) = \sum\limits_{g=1}^G N_i(\vec{r},\vec{\rho})\sigma_{f,g,i} \phi_g(\vec{r}),
\end{equation}

where $\vec{r}$ is the location in the macroscopic, neutronics domain and $\vec{\rho}$
is the location in the microscopic domain. These two locations are separated because their
scale is significantly separated by 3-4 orders of magnitude. Changes with $\vec{r}$ are
understood to be smooth changes of the average composition of the microscopic domain (orders of centimeters), while changes with $\vec{\rho}$ captures compositional changes between grains on the microscopic domain, i.e. on the orders of micro-meters. The notation of separating the spatial dependence into two scales follows homogenization theory. $N_i$ is the number density of isotope $i$, $\sigma_{f,g,i}$ is the microscopic fission cross section of isotope $i$ in group $g$, and $\phi_g$ is the scalar flux in group $g$.
where $\vec{r}$ is the location in the macroscopic, neutronics domain and
$\vec{\rho}$ is the location in the microscopic domain. These two locations are
separated because their scale is significantly separated by 3-4 orders of
magnitude. Changes with $\vec{r}$ are understood to be smooth changes of the
average composition of the microscopic domain (orders of centimeters), while
changes with $\vec{\rho}$ captures compositional changes between grains on the
microscopic domain, i.e. on the orders of micro-meters. The notation of
separating the spatial dependence into two scales follows homogenization theory.
$N_i$ is the number density of isotope $i$, $\sigma_{f,g,i}$ is the microscopic
fission cross section of isotope $i$ in group $g$, and $\phi_g$ is the scalar
flux in group $g$.

Denoting the microscopic domain as $\Theta_m$ located at $\vec{r}_m$, we can define a slowly varying average of the number densities:

\begin{equation}
N_i(\vec{r}) = \frac{1}{\Theta_m} \int_{\Theta_m} N_i(\vec{r},\vec{\rho}) d\vec{\rho}.
\end{equation}

$N_i(\vec{r})$ is the number density provided to neutronics calculations. The nuclide fission rates computed by the neutronics calculation is consequently the slowly varying average
given by:
$N_i(\vec{r})$ is the number density provided to neutronics calculations. The
nuclide fission rates computed by the neutronics calculation is consequently the
slowly varying average given by:

\begin{equation}
F_i (\vec{r}) = \sum\limits_{g=1}^G N_i(\vec{r})\sigma_{f,g,i}.
\end{equation}

The `PKAFissionFragmentNeutronics` accepts the values of $F_i (\vec{r}_m)$ as the `partial_reaction_rates` parameter.
The fission rate density in the microscopic domain is computed by:
The `PKAFissionFragmentNeutronics` accepts the values of $F_i (\vec{r}_m)$ as
the `partial_reaction_rates` parameter. The fission rate density in the
microscopic domain is computed by:

\begin{equation}
F_i (\vec{r}_m, \vec{\rho}) = \frac{N_i(\vec{r}_m, \vec{\rho})}{N_i(\vec{r}_m)} F_i(\vec{r}_m),
\end{equation}
where $N_i(\vec{r}_m, \vec{\rho}) = \gamma_i(\vec{\rho}) / \Omega(\vec{\rho})$, $\Omega(\vec{\rho})$ is the site volume
that is provided to the `MyTRIMRasterizer` and $\gamma_i$ is the $i$-th variable provided to the `MyTRIMRasterizer's` `var`
parameter. Hence, we have:

where $N_i(\vec{r}_m, \vec{\rho}) = \gamma_i(\vec{\rho}) / \Omega(\vec{\rho})$,
$\Omega(\vec{\rho})$ is the site volume that is provided to the
`MyTRIMRasterizer` and $\gamma_i$ is the $i$-th variable provided to the
`MyTRIMRasterizer's` `var` parameter. Hence, we have:

\begin{equation}
F_i (\vec{r}_m, \vec{\rho}) = \frac{\gamma_i(\vec{\rho})}{\Omega(\vec{r}) N_i(\vec{r}_m)} F_i(\vec{r}_m),
\end{equation}

`PKAFissionFragmentNeutronics` accepts the values of $N_i(\vec{r}_m)$ in the `averaged_number_densities` parameter.
`PKAFissionFragmentNeutronics` accepts the values of $N_i(\vec{r}_m)$ in the
`averaged_number_densities` parameter.

The expected number of fissions in a mesh element with index $j$ and volume $V_j$ is given by:
The expected number of fissions in a mesh element with index $j$ and volume
$V_j$ is given by:

\begin{equation}
C_i = \Delta t \int_{V_j} F_i (\vec{r}_m, \vec{\rho}) d\vec{\rho}.
\end{equation}

Non-integer results are rounded up with a probability of the $C_i - \text{int}(C_i)$; otherwise
rounded down. Two PKAs are created from each fission event. The algorithm for sampling their type, energy, and direction of motion is described in [cite:SchunertTREATHeatSource].
Non-integer results are rounded up with a probability of the $C_i -
\text{int}(C_i)$; otherwise rounded down. Two PKAs are created from each fission
event. The algorithm for sampling their type, energy, and direction of motion is
described in [cite:SchunertTREATHeatSource].

!syntax parameters /UserObjects/PKAFissionFragmentNeutronics

Expand Down
17 changes: 9 additions & 8 deletions doc/content/source/userobjects/PKAFixedPointGenerator.md
Original file line number Diff line number Diff line change
@@ -1,15 +1,16 @@
<!-- MOOSE Documentation Stub: Remove this when content is added. -->

# PKAFixedPointGenerator

!alert construction title=Undocumented Class
The PKAFixedPointGenerator has not been documented, if you would like to contribute to MOOSE by
writing documentation, please see [/generate.md]. The content contained on this page explains
the typical documentation associated with a MooseObject; however, what is contained is ultimately
determined by what is necessary to make the documentation clear for users.

!syntax description /UserObjects/PKAFixedPointGenerator

Launches a given *number* of PKAs from a specified point. Each PKA is assigned a
random direction. For a generator with a uniform spatial distribution see
[PKAConstant](/PKAConstant.md).

!alert note
The number of PKAs inserted by this generator is *independent* of the simulation timestep!

For a generator with a specified PKA direction see [PKAGun](/PKAGun.md).

!syntax parameters /UserObjects/PKAFixedPointGenerator

!syntax inputs /UserObjects/PKAFixedPointGenerator
Expand Down
12 changes: 4 additions & 8 deletions doc/content/source/userobjects/PKAFunction.md
Original file line number Diff line number Diff line change
@@ -1,15 +1,11 @@
<!-- MOOSE Documentation Stub: Remove this when content is added. -->

# PKAFunction

!alert construction title=Undocumented Class
The PKAFunction has not been documented, if you would like to contribute to MOOSE by
writing documentation, please see [/generate.md]. The content contained on this page explains
the typical documentation associated with a MooseObject; however, what is contained is ultimately
determined by what is necessary to make the documentation clear for users.

!syntax description /UserObjects/PKAFunction

This generator performs similarly to [PKkAConstant](/PKAConstant.md), except
that each parameter can be a MOOOSE Function. Currently only the time variable
`t` can be used in the function expressions.

!syntax parameters /UserObjects/PKAFunction

!syntax inputs /UserObjects/PKAFunction
Expand Down
8 changes: 0 additions & 8 deletions doc/content/source/userobjects/PKAGeneratorAlphaDecay.md
Original file line number Diff line number Diff line change
@@ -1,13 +1,5 @@
<!-- MOOSE Documentation Stub: Remove this when content is added. -->

# PKAGeneratorAlphaDecay

!alert construction title=Undocumented Class
The PKAGeneratorAlphaDecay has not been documented, if you would like to contribute to MOOSE by
writing documentation, please see [/generate.md]. The content contained on this page explains
the typical documentation associated with a MooseObject; however, what is contained is ultimately
determined by what is necessary to make the documentation clear for users.

!syntax description /UserObjects/PKAGeneratorAlphaDecay

!syntax parameters /UserObjects/PKAGeneratorAlphaDecay
Expand Down
13 changes: 5 additions & 8 deletions doc/content/source/userobjects/PKAGeneratorRecoil.md
Original file line number Diff line number Diff line change
@@ -1,15 +1,12 @@
<!-- MOOSE Documentation Stub: Remove this when content is added. -->

# PKAGeneratorRecoil

!alert construction title=Undocumented Class
The PKAGeneratorRecoil has not been documented, if you would like to contribute to MOOSE by
writing documentation, please see [/generate.md]. The content contained on this page explains
the typical documentation associated with a MooseObject; however, what is contained is ultimately
determined by what is necessary to make the documentation clear for users.

!syntax description /UserObjects/PKAGeneratorRecoil

This generator will receive a multidimensional probability distribution from a
[MultiAppNeutronicsSpectrumTransfer](/MultiAppNeutronicsSpectrumTransfer.md).
This probability distribution is sampled to insert PKAs with the right mass,
energy, and direction distribution.

!syntax parameters /UserObjects/PKAGeneratorRecoil

!syntax inputs /UserObjects/PKAGeneratorRecoil
Expand Down
Loading

0 comments on commit b891718

Please sign in to comment.