diff --git a/docs/source/_images/uniongrid.svg b/docs/source/_images/uniongrid.svg
deleted file mode 100644
index 27c3922fdf..0000000000
--- a/docs/source/_images/uniongrid.svg
+++ /dev/null
@@ -1,792 +0,0 @@
-
-
-
-
diff --git a/docs/source/methods/cross_sections.rst b/docs/source/methods/cross_sections.rst
index a193dde96d..ae1c4449e2 100644
--- a/docs/source/methods/cross_sections.rst
+++ b/docs/source/methods/cross_sections.rst
@@ -47,45 +47,30 @@ there would be for burnup calculations. Thus, there is a strong motive to
implement a method of reducing the number of energy grid searches in order to
speed up the calculation.
-Unionized Energy Grid
----------------------
+-------------------
+Logarithmic Mapping
+-------------------
-The most naïve method to reduce the number of energy grid searches is to
-construct a new energy grid that consists of the union of the energy points of
-each nuclide and use this energy grid for all nuclides. This method is
-computationally very efficient as it only requires one energy grid search at
-each collision as well as one interpolation between cross section values since
-the interpolation factor can be used for all nuclides. However, it requires
-redundant storage of cross section values at points which were added to each
-nuclide grid. This additional burden on memory storage can become quite
-prohibitive. To lessen that burden, the unionized energy grid can be thinned
-with cross sections reconstructed on the thinned energy grid. This method is
-currently used by default in the Serpent Monte Carlo code.
+To speed up energy grid searches, OpenMC uses logarithmic mapping technique
+[Brown]_ to limit the range of energies that must be searched for each
+nuclide. The entire energy range is divided up into equal-lethargy segments, and
+the bounding energies of each segment are mapped to bounding indices on each of
+the nuclide energy grids. By default, OpenMC uses 8000 equal-lethargy segments
+as recommended by Brown.
-Unionized Energy Grid with Nuclide Pointers
--------------------------------------------
+-------------
+Other Methods
+-------------
-While having a unionized grid that is used for all nuclides allows for very fast
-lookup of cross sections, the burden on memory is in many circumstances
-unacceptable. The OpenMC Monte Carlo code utilizes a method that allows for a
-single energy grid search to be performed at every collision while avoiding the
-redundant storage of cross section values. Instead of using the unionized grid
-for every nuclide, the original energy grid of each nuclide is kept and a list
-of pointers (of the same length as the unionized energy grid) is constructed for
-each nuclide that gives the corresponding grid index on the nuclide grid for a
-given grid index on the unionized grid. One must still interpolate on cross
-section values for each nuclide since the interpolation factors will generally
-be different. The figure below illustrates this method. All values within the
-dashed box would need to be stored on a per-nuclide basis, and the union grid
-would need to be stored once. This method is also referred to as *double
-indexing* and is available as an option in Serpent (see paper by Leppanen_).
+A good survey of other energy grid techniques, including unionized energy grids,
+can be found in a paper by Leppanen_.
-.. figure:: ../_images/uniongrid.*
- :width: 600px
- :align: center
- :figclass: align-center
+----------
+References
+----------
- Mapping of union energy grid to nuclide energy grid through pointers.
+.. [Brown] Forrest B. Brown, "New Hash-based Energy Lookup Algorithm for Monte
+ Carlo codes," LA-UR-14-24530, Los Alamos National Laboratory (2014).
.. _MCNP: http://mcnp.lanl.gov
.. _Serpent: http://montecarlo.vtt.fi
diff --git a/docs/source/usersguide/input.rst b/docs/source/usersguide/input.rst
index 0e92581890..c25a9f1468 100644
--- a/docs/source/usersguide/input.rst
+++ b/docs/source/usersguide/input.rst
@@ -134,13 +134,11 @@ should be performed. It has the following attributes/sub-elements:
-------------------------
The ```` element determines the treatment of the energy grid during
-a simulation. The valid options are "nuclide", "union", and "logarithm". Setting
-this element to "nuclide" will cause OpenMC to use a nuclide's energy grid when
+a simulation. The valid options are "nuclide" and "logarithm". Setting this
+element to "nuclide" will cause OpenMC to use a nuclide's energy grid when
determining what points to interpolate between for determining cross sections
-(i.e. non-unionized energy grid). Setting this element to "union" results in a
-unionized energy grid with pointers to nuclide grids. Setting this element to
-"logarithm" causes OpenMC to use a logarithmic mapping technique described in
-LA-UR-14-24530_.
+(i.e. non-unionized energy grid). Setting this element to "logarithm" causes
+OpenMC to use a logarithmic mapping technique described in LA-UR-14-24530_.
*Default*: logarithm
diff --git a/src/relaxng/settings.rnc b/src/relaxng/settings.rnc
index 458946562b..5f793b316f 100644
--- a/src/relaxng/settings.rnc
+++ b/src/relaxng/settings.rnc
@@ -3,19 +3,19 @@ element settings {
(
element eigenvalue {
- (element batches { xsd:positiveInteger } |
+ (element batches { xsd:positiveInteger } |
attribute batches { xsd:positiveInteger }) &
- (element inactive { xsd:nonNegativeInteger } |
+ (element inactive { xsd:nonNegativeInteger } |
attribute inactive { xsd:nonNegativeInteger }) &
- (element particles { xsd:positiveInteger } |
+ (element particles { xsd:positiveInteger } |
attribute particles { xsd:positiveInteger }) &
- (element generations_per_batch { xsd:positiveInteger } |
+ (element generations_per_batch { xsd:positiveInteger } |
attribute generations_per_batch { xsd:positiveInteger })?
} |
element fixed_source {
- (element batches { xsd:positiveInteger } |
+ (element batches { xsd:positiveInteger } |
attribute batches { xsd:positiveInteger }) &
- (element particles { xsd:positiveInteger } |
+ (element particles { xsd:positiveInteger } |
attribute particles { xsd:positiveInteger })
}
) &
@@ -27,15 +27,14 @@ element settings {
(element weight_avg { xsd:double } | attribute weight_avg { xsd:double })?
}? &
- element energy_grid { ( "nuclide" | "union" | "log" |
- "logarithm" | "logarithmic" ) }? &
+ element energy_grid { ( "nuclide" | "log" | "logarithm" | "logarithmic" ) }? &
element entropy {
- (element dimension { list { xsd:int+ } } |
+ (element dimension { list { xsd:int+ } } |
attribute dimension { list { xsd:int+ } })? &
- (element lower_left { list { xsd:double+ } } |
+ (element lower_left { list { xsd:double+ } } |
attribute lower_left { list { xsd:double+ } }) &
- (element upper_right { list { xsd:double+ } } |
+ (element upper_right { list { xsd:double+ } } |
attribute upper_right { list { xsd:double+ } })
}? &
@@ -94,7 +93,7 @@ element settings {
(
(element batches { list { xsd:positiveInteger+ } } |
attribute batches { list { xsd:positiveInteger+ } }) |
- (element interval { xsd:positiveInteger } |
+ (element interval { xsd:positiveInteger } |
attribute interval { xsd:positiveInteger })
)
}? &
@@ -103,12 +102,12 @@ element settings {
(
(element batches { list { xsd:positiveInteger+ } } |
attribute batches { list { xsd:positiveInteger+ } }) |
- (element interval { xsd:positiveInteger } |
+ (element interval { xsd:positiveInteger } |
attribute interval { xsd:positiveInteger })
)? &
- (element separate { xsd:boolean } |
+ (element separate { xsd:boolean } |
attribute separate { xsd:boolean })? &
- (element write { xsd:boolean } |
+ (element write { xsd:boolean } |
attribute write { xsd:boolean })? &
(element overwrite_latest { xsd:boolean} |
attribute overwrite_latest {xsd:boolean})?
@@ -125,11 +124,11 @@ element settings {
element verbosity { xsd:positiveInteger }? &
element uniform_fs{
- (element dimension { list { xsd:positiveInteger+ } } |
+ (element dimension { list { xsd:positiveInteger+ } } |
attribute dimension { list { xsd:positiveInteger+ } }) &
- (element lower_left { list { xsd:double+ } } |
+ (element lower_left { list { xsd:double+ } } |
attribute lower_left { list { xsd:double+ } }) &
- (element upper_right { list { xsd:double+ } } |
+ (element upper_right { list { xsd:double+ } } |
attribute upper_right { list { xsd:double+ } })
}? &