diff --git a/chains/chain_simple.xml b/chains/chain_simple.xml
index 345da2237d..c2e50a370f 100644
--- a/chains/chain_simple.xml
+++ b/chains/chain_simple.xml
@@ -1,23 +1,23 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
2.53000e-02
@@ -25,9 +25,9 @@
1.093250e-04 2.087260e-04 2.780820e-02 6.759540e-03 2.392300e-02 4.356330e-05
-
-
-
+
+
+
2.53000e-02
@@ -35,9 +35,9 @@
6.142710e-5 1.483250e-04 0.0292737 0.002566345 0.0219242 4.9097e-6
-
-
-
+
+
+
2.53000e-02
@@ -45,5 +45,5 @@
4.141120e-04 7.605360e-04 0.0135457 0.00026864 0.0024432 3.7100E-07
-
-
+
+
diff --git a/chains/chain_test.xml b/chains/chain_test.xml
index 5985704063..c8c75ad7b3 100644
--- a/chains/chain_test.xml
+++ b/chains/chain_test.xml
@@ -1,17 +1,17 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
0.0253
@@ -19,5 +19,5 @@
0.0292737 0.002566345
-
-
+
+
diff --git a/docs/source/io_formats/depletion_chain.rst b/docs/source/io_formats/depletion_chain.rst
new file mode 100644
index 0000000000..00d95bdf58
--- /dev/null
+++ b/docs/source/io_formats/depletion_chain.rst
@@ -0,0 +1,102 @@
+.. _io_chain:
+
+============================
+Depletion Chain -- chain.xml
+============================
+
+A depletion chain file has a ```` root element with one or more
+```` child elements. The decay, reaction, and fission product data for
+each nuclide appears as child elements of ````.
+
+---------------------
+```` Element
+---------------------
+
+The ```` element contains information on the decay modes, reactions,
+and fission product yields for a given nuclide in the depletion chain. This
+element may have the following attributes:
+
+ :name:
+ Name of the nuclide
+
+ :half_life:
+ Half-life of the nuclide in [s]
+
+ :decay_modes:
+ Number of decay modes present
+
+ :decay_energy:
+ Decay energy released in [eV]
+
+ :reactions:
+ Number of reactions present
+
+For each decay mode, a :ref:`io_chain_decay` appears as a child of
+````. For each reaction present, a :ref:`io_chain_reaction` appears as
+a child of ````. If the nuclide is fissionable, a :ref:`io_chain_nfy`
+appears as well.
+
+.. _io_chain_decay:
+
+-------------------
+```` Element
+-------------------
+
+The ```` element represents a single decay mode and has the following
+attributes:
+
+ :type:
+ The type of the decay, e.g. 'ec/beta+'
+
+ :target:
+ The daughter nuclide produced from the decay
+
+ :branching_ratio:
+ The branching ratio for this decay mode
+
+.. _io_chain_reaction:
+
+----------------------
+```` Element
+----------------------
+
+The ```` element represents a single transmutation reaction. This
+element has the following attributes:
+
+ :type:
+ The type of the reaction, e.g., '(n,gamma)'
+
+ :Q:
+ The Q value of the reaction in [eV]
+
+ :target:
+ The nuclide produced in the reaction (absent if the type is 'fission')
+
+ :branching_ratio:
+ The branching ratio for the reaction
+
+.. _io_chain_nfy:
+
+------------------------------------
+```` Element
+------------------------------------
+
+The ```` element provides yields of fission products for
+fissionable nuclides. It has the follow sub-elements:
+
+ :energies:
+ Energies in [eV] at which yields for products are tabulated
+
+ :fission_yields:
+
+ Fission product yields for a single energy point. This element itself has a
+ number of attributes/sub-elements:
+
+ :energy:
+ Energy in [eV] at which yields are tabulated
+
+ :products:
+ Names of fission products
+
+ :data:
+ Independent yields for each fission product
diff --git a/docs/source/io_formats/index.rst b/docs/source/io_formats/index.rst
index f3eea21def..1068973332 100644
--- a/docs/source/io_formats/index.rst
+++ b/docs/source/io_formats/index.rst
@@ -30,6 +30,7 @@ Data Files
:maxdepth: 2
cross_sections
+ depletion_chain
nuclear_data
mgxs_library
data_wmp
diff --git a/openmc/deplete/chain.py b/openmc/deplete/chain.py
index 348103ea94..0cd3fb0d7e 100644
--- a/openmc/deplete/chain.py
+++ b/openmc/deplete/chain.py
@@ -327,7 +327,7 @@ class Chain(object):
# Load XML tree
root = ET.parse(str(filename))
- for i, nuclide_elem in enumerate(root.findall('nuclide_table')):
+ for i, nuclide_elem in enumerate(root.findall('nuclide')):
nuc = Nuclide.from_xml(nuclide_elem)
chain.nuclide_dict[nuc.name] = i
@@ -350,7 +350,7 @@ class Chain(object):
"""
- root_elem = ET.Element('depletion')
+ root_elem = ET.Element('depletion_chain')
for nuclide in self.nuclides:
root_elem.append(nuclide.to_xml_element())
diff --git a/openmc/deplete/nuclide.py b/openmc/deplete/nuclide.py
index 17cf4d9b8f..4a7b86f029 100644
--- a/openmc/deplete/nuclide.py
+++ b/openmc/deplete/nuclide.py
@@ -23,9 +23,9 @@ class Nuclide(object):
name : str
Name of nuclide.
half_life : float
- Half life of nuclide in s^-1.
+ Half life of nuclide in [s].
decay_energy : float
- Energy deposited from decay in eV.
+ Energy deposited from decay in [eV].
n_decay_modes : int
Number of decay pathways.
decay_modes : list of DecayTuple
@@ -94,14 +94,14 @@ class Nuclide(object):
nuc.decay_energy = float(element.get('decay_energy', '0'))
# Check for decay paths
- for decay_elem in element.iter('decay_type'):
+ for decay_elem in element.iter('decay'):
d_type = decay_elem.get('type')
target = decay_elem.get('target')
branching_ratio = float(decay_elem.get('branching_ratio'))
nuc.decay_modes.append(DecayTuple(d_type, target, branching_ratio))
# Check for reaction paths
- for reaction_elem in element.iter('reaction_type'):
+ for reaction_elem in element.iter('reaction'):
r_type = reaction_elem.get('type')
Q = float(reaction_elem.get('Q', '0'))
branching_ratio = float(reaction_elem.get('branching_ratio', '1'))
@@ -138,7 +138,7 @@ class Nuclide(object):
XML element to write nuclide data to
"""
- elem = ET.Element('nuclide_table')
+ elem = ET.Element('nuclide')
elem.set('name', self.name)
if self.half_life is not None:
@@ -146,14 +146,14 @@ class Nuclide(object):
elem.set('decay_modes', str(len(self.decay_modes)))
elem.set('decay_energy', str(self.decay_energy))
for mode, daughter, br in self.decay_modes:
- mode_elem = ET.SubElement(elem, 'decay_type')
+ mode_elem = ET.SubElement(elem, 'decay')
mode_elem.set('type', mode)
mode_elem.set('target', daughter)
mode_elem.set('branching_ratio', str(br))
elem.set('reactions', str(len(self.reactions)))
for rx, daughter, Q, br in self.reactions:
- rx_elem = ET.SubElement(elem, 'reaction_type')
+ rx_elem = ET.SubElement(elem, 'reaction')
rx_elem.set('type', rx)
rx_elem.set('Q', str(Q))
if rx != 'fission':
diff --git a/tests/unit_tests/test_deplete_nuclide.py b/tests/unit_tests/test_deplete_nuclide.py
index 2add13f866..f2a101d2a9 100644
--- a/tests/unit_tests/test_deplete_nuclide.py
+++ b/tests/unit_tests/test_deplete_nuclide.py
@@ -37,14 +37,14 @@ def test_from_xml():
"""Test reading nuclide data from an XML element."""
data = """
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
0.0253
@@ -52,7 +52,7 @@ def test_from_xml():
0.062155 0.0497641 0.0481413
-
+
"""
element = ET.fromstring(data)
@@ -96,7 +96,7 @@ def test_to_xml_element():
assert element.get("half_life") == "0.123"
- decay_elems = element.findall("decay_type")
+ decay_elems = element.findall("decay")
assert len(decay_elems) == 2
assert decay_elems[0].get("type") == "beta-"
assert decay_elems[0].get("target") == "B"
@@ -105,7 +105,7 @@ def test_to_xml_element():
assert decay_elems[1].get("target") == "D"
assert decay_elems[1].get("branching_ratio") == "0.01"
- rx_elems = element.findall("reaction_type")
+ rx_elems = element.findall("reaction")
assert len(rx_elems) == 2
assert rx_elems[0].get("type") == "fission"
assert float(rx_elems[0].get("Q")) == 2.0e8