Merge branch 'develop' into ccfe-spp-2

This commit is contained in:
Paul Romano 2020-09-10 06:34:37 -05:00
commit 13dadf9c24
69 changed files with 3379 additions and 3973 deletions

16
.gitignore vendored
View file

@ -101,14 +101,18 @@ examples/jupyter/plots
.coverage
htmlcov
#macOS
# macOS
*.DS_Store
#Dynamic Library
# Dynamic Library
*.dylib
*.lib
*.dll
#Visual Studio CMake Project
/.vs/
# Visual Studio CMake project
.vs/
out/
CMakeSettings.json
/out/
/openmc/lib/*.lib
# Visual Studio Code configuration files
.vscode/

View file

@ -12,9 +12,7 @@ project started under the Computational Reactor Physics Group at MIT.
Complete documentation on the usage of OpenMC is hosted on Read the Docs (both
for the [latest release](http://openmc.readthedocs.io/en/stable/) and
[developmental](http://openmc.readthedocs.io/en/latest/) version). If you are
interested in the project or would like to help and contribute, please send a
message to the OpenMC User's Group [mailing
list](https://groups.google.com/forum/?fromgroups=#!forum/openmc-users).
interested in the project, or would like to help and contribute, please get in touch on the OpenMC [discussion forum](https://openmc.discourse.group/).
## Installation
@ -35,11 +33,9 @@ citing the following publication:
## Troubleshooting
If you run into problems compiling, installing, or running OpenMC, first check
the [Troubleshooting
section](http://openmc.readthedocs.io/en/stable/usersguide/troubleshoot.html) in
the [Troubleshooting section](http://openmc.readthedocs.io/en/stable/usersguide/troubleshoot.html) in
the User's Guide. If you are not able to find a solution to your problem there,
please send a message to the User's Group [mailing
list](https://groups.google.com/forum/?fromgroups=#!forum/openmc-users).
please post to the [discussion forum](https://openmc.discourse.group/).
## Reporting Bugs

View file

@ -15,8 +15,8 @@ OpenMC was originally developed by members of the `Computational Reactor Physics
Group <http://crpg.mit.edu>`_ at the `Massachusetts Institute of Technology
<http://web.mit.edu>`_ starting in 2011. Various universities, laboratories, and
other organizations now contribute to the development of OpenMC. For more
information on OpenMC, feel free to send a message to the User's Group `mailing
list <https://groups.google.com/forum/?fromgroups=#!forum/openmc-users>`_.
information on OpenMC, feel free to post a message on the `OpenMC Discourse
Forum <https://openmc.discourse.group/>`_.
.. admonition:: Recommended publication for citing
:class: tip

View file

@ -462,9 +462,23 @@ attributes/sub-elements:
:library:
If this attribute is given, it indicates that the source is to be
instantiated from an externally compiled source function. This source can be
as complex as is required to define the source for your problem. The only
requirement is that there is a function called ``sample_source()``. More
documentation on how to build sources can be found in :ref:`custom_source`.
as complex as is required to define the source for your problem. The library
has a few basic requirements:
* It must contain a class that inherits from ``openmc::CustomSource``;
* The class must implement a function called ``sample()``;
* There must be an ``openmc_create_source()`` function that creates the source
as a unique pointer. This function can be used to pass parameters through to
the source from the XML, if needed.
More documentation on how to build sources can be found in :ref:`custom_source`.
*Default*: None
:parameters:
If this attribute is given, it provides the parameters to pass through to the
class generated using the ``library`` parameter . More documentation on how to
build parametrized sources can be found in :ref:`parameterized_custom_source`.
*Default*: None

View file

@ -81,7 +81,7 @@ Coupling and Multi-physics
264-274 (2017).
- Tianliang Hu, Liangzhu Cao, Hongchun Wu, Xianan Du, and Mingtao He, "`Coupled
neutrons and thermal-hydraulics simulation of molten salt reactors based on
neutronics and thermal-hydraulics simulation of molten salt reactors based on
OpenMC/TANSY <https://doi.org/10.1016/j.anucene.2017.05.002>`_,"
*Ann. Nucl. Energy*, **109**, 260-276 (2017).

View file

@ -60,8 +60,10 @@ Core Functions
:template: myfunction.rst
atomic_mass
atomic_weight
dose_coefficients
gnd_name
isotopes
linearize
thin
water_density

View file

@ -33,6 +33,7 @@ Multi-group Cross Sections
openmc.mgxs.AbsorptionXS
openmc.mgxs.CaptureXS
openmc.mgxs.Chi
openmc.mgxs.Current
openmc.mgxs.FissionXS
openmc.mgxs.InverseVelocity
openmc.mgxs.KappaFissionXS

View file

@ -12,33 +12,35 @@ Installation and Configuration
Installing on Linux/Mac with conda-forge
----------------------------------------
Conda_ is an open source package management system and environment management
system for installing multiple versions of software packages and their
dependencies and switching easily between them. `conda-forge
<https://conda-forge.github.io/>`_ is a community-led conda channel of
installable packages. For instructions on installing conda, please consult their
`documentation
<https://docs.conda.io/projects/conda/en/latest/user-guide/install/>`_.
Once you have `conda` installed on your system, add the `conda-forge` channel to
your configuration with:
`Conda <http://conda.pydata.org/docs/>`_ is an open source package management
system and environment management system for installing multiple versions of
software packages and their dependencies and switching easily between them. If
you have `conda` installed on your system, OpenMC can be installed via the
`conda-forge` channel. First, add the `conda-forge` channel with:
.. code-block:: sh
conda config --add channels conda-forge
Once the `conda-forge` channel has been enabled, OpenMC can then be installed
with:
To list the versions of OpenMC that are available on the `conda-forge` channel,
in your terminal window or an Anaconda Prompt run:
.. code-block:: sh
conda search openmc
OpenMC can then be installed with:
.. code-block:: sh
conda install openmc
It is possible to list all of the versions of OpenMC available on your platform with:
conda create -n openmc-env openmc
This will install OpenMC in a conda environment called `openmc-env`. To activate
the environment, run:
.. code-block:: sh
conda search openmc --channel conda-forge
conda activate openmc-env
.. _install_ppa:

View file

@ -182,42 +182,56 @@ Custom Sources
It is often the case that one may wish to simulate a complex source distribution
that is not possible to represent with the classes described above. For these
situations, it is possible to define a complex source with an externally defined
source function that is loaded at runtime. A simple example source is shown
situations, it is possible to define a complex source class containing an externally
defined source function that is loaded at runtime. A simple example source is shown
below.
.. code-block:: c++
#include "openmc/random_lcg.h"
#include "openmc/source.h"
#include "openmc/particle.h"
#include <memory> // for unique_ptr
// you must have external C linkage here
extern "C" openmc::Particle::Bank sample_source(uint64_t* seed) {
openmc::Particle::Bank particle;
// weight
particle.particle = openmc::Particle::Type::neutron;
particle.wgt = 1.0;
// position
double angle = 2.0 * M_PI * openmc::prn(seed);
double radius = 3.0;
particle.r.x = radius * std::cos(angle);
particle.r.y = radius * std::sin(angle);
particle.r.z = 0.0;
// angle
particle.u = {1.0, 0.0, 0.0};
particle.E = 14.08e6;
particle.delayed_group = 0;
return particle;
#include "openmc/random_lcg.h"
#include "openmc/source.h"
#include "openmc/particle.h"
class Source : public openmc::CustomSource
{
openmc::Particle::Bank sample(uint64_t* seed)
{
openmc::Particle::Bank particle;
// weight
particle.particle = openmc::Particle::Type::neutron;
particle.wgt = 1.0;
// position
double angle = 2.0 * M_PI * openmc::prn(seed);
double radius = 3.0;
particle.r.x = radius * std::cos(angle);
particle.r.y = radius * std::sin(angle);
particle.r.z = 0.0;
// angle
particle.u = {1.0, 0.0, 0.0};
particle.E = 14.08e6;
particle.delayed_group = 0;
return particle;
}
};
extern "C" std::unique_ptr<Source> openmc_create_source(std::string parameters)
{
return std::make_unique<Source>();
}
The above source creates monodirectional 14.08 MeV neutrons that are distributed
in a ring with a 3 cm radius. This routine is not particularly complex, but
should serve as an example upon which to build more complicated sources.
.. note:: The function signature must be declared ``extern "C"``.
.. note:: The source class must inherit from ``openmc::CustomSource`` and
implement a ``sample()`` function.
.. note:: You should only use the openmc::prn() random number generator
.. note:: The ``openmc_create_source()`` function signature must be declared
``extern "C"``.
.. note:: You should only use the ``openmc::prn()`` random number generator.
In order to build your external source, you will need to link it against the
OpenMC shared library. This can be done by writing a CMakeLists.txt file:
@ -235,6 +249,58 @@ file in your build directory. Setting the :attr:`openmc.Source.library`
attribute to the path of this shared library will indicate that it should be
used for sampling source particles at runtime.
.. _parameterized_custom_source:
Custom Parameterized Sources
----------------------------
Some custom sources may have values (parameters) that can be changed between
runs. This is supported by using the ``openmc_create_source()`` function to
pass parameters defined in the :attr:`openmc.Source.parameters` attribute to
the source class when it is created:
.. code-block:: c++
#include <memory> // for unique_ptr
#include "openmc/source.h"
#include "openmc/particle.h"
class Source : public openmc::CustomSource {
public:
Source(double energy) : energy_{energy} { }
// Samples from an instance of this class.
openmc::Particle::Bank sample(uint64_t* seed)
{
openmc::Particle::Bank particle;
// weight
particle.particle = openmc::Particle::Type::neutron;
particle.wgt = 1.0;
// position
particle.r.x = 0.0;
particle.r.y = 0.0;
particle.r.z = 0.0;
// angle
particle.u = {1.0, 0.0, 0.0};
particle.E = this->energy_;
particle.delayed_group = 0;
return particle;
}
private:
double energy_;
};
extern "C" std::unique_ptr<Source> openmc_create_source(std::string parameter) {
double energy = std::stod(parameter);
return std::make_unique<Source>(energy);
}
As with the basic custom source functionality, the custom source library
location must be provided in the :attr:`openmc.Source.library` attribute.
---------------
Shannon Entropy
---------------

View file

@ -31,7 +31,8 @@ on. Create a new build directory and type the following commands:
Now when you re-run your problem, it should report exactly where the program
failed. If after reading the debug output, you are still unsure why the program
failed, send an email to the OpenMC User's Group `mailing list`_.
failed, post a message on the `OpenMC Discourse Forum
<https://openmc.discourse.group/>`_.
ERROR: No cross_sections.xml file was specified in settings.xml or in the OPENMC_CROSS_SECTIONS environment variable.
*********************************************************************************************************************
@ -97,8 +98,8 @@ has a collision. For example, if you received this error at cycle 5, generation
<trace>5 1 4032</trace>
For large runs it is often advantageous to run only the offending particle by
using particle restart mode with the ``-s``, ``-particle``, or ``--particle``
command-line options in conjunction with the particle restart files that are
created when particles are lost with this error.
using particle restart mode with the ``-r`` command-line option in conjunction
with the particle restart files that are created when particles are lost with
this error.
.. _mailing list: https://groups.google.com/forum/?fromgroups=#!forum/openmc-users

View file

@ -1,26 +1,36 @@
#include <cmath> // for M_PI
#include <memory> // for unique_ptr
#include "openmc/random_lcg.h"
#include "openmc/source.h"
#include "openmc/particle.h"
// you must have external C linkage here otherwise
// dlopen will not find the file
extern "C" openmc::Particle::Bank sample_source(uint64_t* seed)
class Source : public openmc::CustomSource
{
openmc::Particle::Bank particle;
// wgt
particle.particle = openmc::Particle::Type::neutron;
particle.wgt = 1.0;
// position
double angle = 2. * M_PI * openmc::prn(seed);
double radius = 3.0;
particle.r.x = radius * std::cos(angle);
particle.r.y = radius * std::sin(angle);
particle.r.z = 0.0;
// angle
particle.u = {1.0, 0.0, 0.0};
particle.E = 14.08e6;
particle.delayed_group = 0;
return particle;
openmc::Particle::Bank sample(uint64_t* seed)
{
openmc::Particle::Bank particle;
// wgt
particle.particle = openmc::Particle::Type::neutron;
particle.wgt = 1.0;
// position
double angle = 2.0 * M_PI * openmc::prn(seed);
double radius = 3.0;
particle.r.x = radius * std::cos(angle);
particle.r.y = radius * std::sin(angle);
particle.r.z = 0.0;
// angle
particle.u = {1.0, 0.0, 0.0};
particle.E = 14.08e6;
particle.delayed_group = 0;
return particle;
}
};
// A function to create a unique pointer to an instance of this class when generated
// via a plugin call using dlopen/dlsym.
// You must have external C linkage here otherwise dlopen will not find the file
extern "C" std::unique_ptr<Source> openmc_create_source(std::string parameters)
{
return std::make_unique<Source>();
}

View file

@ -304,11 +304,11 @@
"metadata": {},
"outputs": [],
"source": [
"geom = openmc.Geometry(root_universe)\n",
"geom.export_to_xml()\n",
"geometry = openmc.Geometry(root_universe)\n",
"geometry.export_to_xml()\n",
"\n",
"mats = openmc.Materials(geom.get_all_materials().values())\n",
"mats.export_to_xml()"
"materials = openmc.Materials(geometry.get_all_materials().values())\n",
"materials.export_to_xml()"
]
},
{
@ -329,14 +329,14 @@
}
],
"source": [
"p = openmc.Plot.from_geometry(geom)\n",
"p.color_by = 'material'\n",
"p.colors = {\n",
"plot = openmc.Plot.from_geometry(geometry)\n",
"plot.color_by = 'material'\n",
"plot.colors = {\n",
" fuel: 'black',\n",
" clad: 'silver',\n",
" heavy_water: 'blue'\n",
"}\n",
"p.to_ipython_image()"
"plot.to_ipython_image()"
]
},
{
@ -1078,8 +1078,8 @@
}
],
"source": [
"t = sp.get_tally()\n",
"t.get_pandas_dataframe()"
"output_tally = sp.get_tally()\n",
"output_tally.get_pandas_dataframe()"
]
},
{
@ -1107,7 +1107,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.7.0"
"version": "3.8.5"
}
},
"nbformat": 4,

View file

@ -36,8 +36,8 @@
"water.add_nuclide('O16', 1.0)\n",
"water.set_density('g/cm3', 1.0)\n",
"\n",
"mats = openmc.Materials((fuel, fuel2, water))\n",
"mats.export_to_xml()"
"materials = openmc.Materials((fuel, fuel2, water))\n",
"materials.export_to_xml()"
]
},
{
@ -80,7 +80,7 @@
"metadata": {},
"outputs": [],
"source": [
"lat = openmc.HexLattice()"
"lattice = openmc.HexLattice()"
]
},
{
@ -96,9 +96,9 @@
"metadata": {},
"outputs": [],
"source": [
"lat.center = (0., 0.)\n",
"lat.pitch = (1.25,)\n",
"lat.outer = outer_universe"
"lattice.center = (0., 0.)\n",
"lattice.pitch = (1.25,)\n",
"lattice.outer = outer_universe"
]
},
{
@ -117,33 +117,63 @@
"name": "stdout",
"output_type": "stream",
"text": [
" (0, 0)\n",
" (0,11) (0, 1)\n",
"(0,10) (1, 0) (0, 2)\n",
" (1, 5) (1, 1)\n",
"(0, 9) (2, 0) (0, 3)\n",
" (1, 4) (1, 2)\n",
"(0, 8) (1, 3) (0, 4)\n",
" (0, 7) (0, 5)\n",
" (0, 6)\n"
" (0, 0)\n",
" (0,17) (0, 1)\n",
" (0,16) (1, 0) (0, 2)\n",
"(0,15) (1,11) (1, 1) (0, 3)\n",
" (1,10) (2, 0) (1, 2)\n",
"(0,14) (2, 5) (2, 1) (0, 4)\n",
" (1, 9) (3, 0) (1, 3)\n",
"(0,13) (2, 4) (2, 2) (0, 5)\n",
" (1, 8) (2, 3) (1, 4)\n",
"(0,12) (1, 7) (1, 5) (0, 6)\n",
" (0,11) (1, 6) (0, 7)\n",
" (0,10) (0, 8)\n",
" (0, 9)\n"
]
}
],
"source": [
"print(lat.show_indices(num_rings=3))"
"print(lattice.show_indices(num_rings=4))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let's set up a lattice where the first element in each ring is the big pin universe and all other elements are regular pin universes. From the diagram above, we see that the outer ring has 12 elements, the middle ring has 6, and the innermost degenerate ring has a single element."
"Let's set up a lattice where the first element in each ring is the big pin universe and all other elements are regular pin universes. \n",
"\n",
"From the diagram above, we see that the outer ring has 18 elements, the first ring has 12, and the second ring has 6 elements. The innermost ring of any hexagonal lattice will have only a single element. \n",
"\n",
"We build these rings through 'list concatenation' as follows: "
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [],
"source": [
"outer_ring = [big_pin_universe] + [pin_universe]*17 # Adds up to 18\n",
"\n",
"ring_1 = [big_pin_universe] + [pin_universe]*11 # Adds up to 12\n",
"\n",
"ring_2 = [big_pin_universe] + [pin_universe]*5 # Adds up to 6\n",
"\n",
"inner_ring = [big_pin_universe]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We can now assign the rings (and the universes they contain) to our lattice. "
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"name": "stdout",
@ -153,30 +183,34 @@
"\tID =\t4\n",
"\tName =\t\n",
"\tOrientation =\ty\n",
"\t# Rings =\t3\n",
"\t# Rings =\t4\n",
"\t# Axial =\tNone\n",
"\tCenter =\t(0.0, 0.0)\n",
"\tPitch =\t(1.25,)\n",
"\tOuter =\t3\n",
"\tUniverses \n",
" 2\n",
" 1 1\n",
"1 2 1\n",
" 1 1\n",
"1 2 1\n",
" 1 1\n",
"1 1 1\n",
" 1 1\n",
" 1\n"
" 2\n",
" 1 1\n",
" 1 2 1\n",
"1 1 1 1\n",
" 1 2 1\n",
"1 1 1 1\n",
" 1 2 1\n",
"1 1 1 1\n",
" 1 1 1\n",
"1 1 1 1\n",
" 1 1 1\n",
" 1 1\n",
" 1\n"
]
}
],
"source": [
"outer_ring = [big_pin_universe] + [pin_universe]*11\n",
"middle_ring = [big_pin_universe] + [pin_universe]*5\n",
"inner_ring = [big_pin_universe]\n",
"lat.universes = [outer_ring, middle_ring, inner_ring]\n",
"print(lat)"
"lattice.universes = [outer_ring, \n",
" ring_1, \n",
" ring_2,\n",
" inner_ring]\n",
"print(lattice)"
]
},
{
@ -188,14 +222,14 @@
},
{
"cell_type": "code",
"execution_count": 8,
"execution_count": 9,
"metadata": {},
"outputs": [],
"source": [
"outer_surface = openmc.ZCylinder(r=4.0, boundary_type='vacuum')\n",
"main_cell = openmc.Cell(fill=lat, region=-outer_surface)\n",
"geom = openmc.Geometry([main_cell])\n",
"geom.export_to_xml()"
"outer_surface = openmc.ZCylinder(r=5.0, boundary_type='vacuum')\n",
"main_cell = openmc.Cell(fill=lattice, region=-outer_surface)\n",
"geometry = openmc.Geometry([main_cell])\n",
"geometry.export_to_xml()"
]
},
{
@ -207,30 +241,30 @@
},
{
"cell_type": "code",
"execution_count": 9,
"execution_count": 10,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"image/png": "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\n",
"text/plain": [
"<IPython.core.display.Image object>"
]
},
"execution_count": 9,
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"p = openmc.Plot.from_geometry(geom)\n",
"p.color_by = 'material'\n",
"p.colors = colors = {\n",
"plot = openmc.Plot.from_geometry(geometry)\n",
"plot.color_by = 'material'\n",
"plot.colors = colors = {\n",
" water: 'blue',\n",
" fuel: 'olive',\n",
" fuel2: 'yellow'\n",
"}\n",
"p.to_ipython_image()"
"plot.to_ipython_image()"
]
},
{
@ -251,28 +285,28 @@
},
{
"cell_type": "code",
"execution_count": 10,
"execution_count": 11,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"image/png": "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\n",
"text/plain": [
"<IPython.core.display.Image object>"
]
},
"execution_count": 10,
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Change the orientation of the lattice and re-export the geometry\n",
"lat.orientation = 'x'\n",
"geom.export_to_xml()\n",
"lattice.orientation = 'x'\n",
"geometry.export_to_xml()\n",
"\n",
"# Run OpenMC in plotting mode\n",
"p.to_ipython_image()"
"plot.to_ipython_image()"
]
},
{
@ -284,27 +318,31 @@
},
{
"cell_type": "code",
"execution_count": 11,
"execution_count": 12,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" (0, 8) (0, 9) (0,10)\n",
" (0,12) (0,13) (0,14) (0,15)\n",
"\n",
" (0, 7) (1, 4) (1, 5) (0,11)\n",
" (0,11) (1, 8) (1, 9) (1,10) (0,16)\n",
"\n",
"(0, 6) (1, 3) (2, 0) (1, 0) (0, 0)\n",
" (0,10) (1, 7) (2, 4) (2, 5) (1,11) (0,17)\n",
"\n",
" (0, 5) (1, 2) (1, 1) (0, 1)\n",
"(0, 9) (1, 6) (2, 3) (3, 0) (2, 0) (1, 0) (0, 0)\n",
"\n",
" (0, 4) (0, 3) (0, 2)\n"
" (0, 8) (1, 5) (2, 2) (2, 1) (1, 1) (0, 1)\n",
"\n",
" (0, 7) (1, 4) (1, 3) (1, 2) (0, 2)\n",
"\n",
" (0, 6) (0, 5) (0, 4) (0, 3)\n"
]
}
],
"source": [
"print(lat.show_indices(3, orientation='x'))"
"print(lattice.show_indices(4, orientation='x'))"
]
},
{
@ -318,32 +356,32 @@
},
{
"cell_type": "code",
"execution_count": 12,
"execution_count": 13,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"image/png": "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\n",
"text/plain": [
"<IPython.core.display.Image object>"
]
},
"execution_count": 12,
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"main_cell.region = openmc.model.hexagonal_prism(\n",
" edge_length=3*lat.pitch[0],\n",
" edge_length=4*lattice.pitch[0],\n",
" orientation='x',\n",
" boundary_type='vacuum'\n",
")\n",
"geom.export_to_xml()\n",
"geometry.export_to_xml()\n",
"\n",
"# Run OpenMC in plotting mode\n",
"p.color_by = 'cell'\n",
"p.to_ipython_image()"
"plot.color_by = 'cell'\n",
"plot.to_ipython_image()"
]
}
],
@ -364,7 +402,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.7.0"
"version": "3.8.5"
}
},
"nbformat": 4,

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -17,7 +17,6 @@
"from IPython.display import Image\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"\n",
"import openmc"
]
},
@ -75,10 +74,10 @@
"outputs": [],
"source": [
"# Instantiate a Materials collection\n",
"materials_file = openmc.Materials([fuel, water, zircaloy])\n",
"materials = openmc.Materials([fuel, water, zircaloy])\n",
"\n",
"# Export to \"materials.xml\"\n",
"materials_file.export_to_xml()"
"materials.export_to_xml()"
]
},
{
@ -208,23 +207,18 @@
"outputs": [],
"source": [
"# OpenMC simulation parameters\n",
"batches = 100\n",
"inactive = 10\n",
"particles = 5000\n",
"\n",
"# Instantiate a Settings object\n",
"settings_file = openmc.Settings()\n",
"settings_file.batches = batches\n",
"settings_file.inactive = inactive\n",
"settings_file.particles = particles\n",
"settings = openmc.Settings()\n",
"settings.batches = 100\n",
"settings.inactive = 10\n",
"settings.particles = 5000\n",
"\n",
"# Create an initial uniform spatial source distribution over fissionable zones\n",
"bounds = [-0.63, -0.63, -0.63, 0.63, 0.63, 0.63]\n",
"uniform_dist = openmc.stats.Box(bounds[:3], bounds[3:], only_fissionable=True)\n",
"settings_file.source = openmc.Source(space=uniform_dist)\n",
"settings.source = openmc.Source(space=uniform_dist)\n",
"\n",
"# Export to \"settings.xml\"\n",
"settings_file.export_to_xml()"
"settings.export_to_xml()"
]
},
{
@ -271,7 +265,7 @@
"outputs": [],
"source": [
"# Instantiate an empty Tallies object\n",
"tallies_file = openmc.Tallies()"
"tallies = openmc.Tallies()"
]
},
{
@ -293,7 +287,7 @@
"tally = openmc.Tally(name='flux')\n",
"tally.filters = [mesh_filter]\n",
"tally.scores = ['flux', 'fission']\n",
"tallies_file.append(tally)"
"tallies.append(tally)"
]
},
{
@ -303,7 +297,7 @@
"outputs": [],
"source": [
"# Export to \"tallies.xml\"\n",
"tallies_file.export_to_xml()"
"tallies.export_to_xml()"
]
},
{
@ -977,7 +971,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.7.0"
"version": "3.8.5"
}
},
"nbformat": 4,

File diff suppressed because one or more lines are too long

View file

@ -143,7 +143,7 @@
"metadata": {},
"outputs": [],
"source": [
"trisos = [openmc.model.TRISO(outer_radius, triso_univ, c) for c in centers]"
"trisos = [openmc.model.TRISO(outer_radius, triso_univ, center) for center in centers]"
]
},
{
@ -199,7 +199,7 @@
}
],
"source": [
"centers = np.vstack([t.center for t in trisos])\n",
"centers = np.vstack([triso.center for triso in trisos])\n",
"print(centers.min(axis=0))\n",
"print(centers.max(axis=0))"
]
@ -293,20 +293,20 @@
}
],
"source": [
"univ = openmc.Universe(cells=[box])\n",
"universe = openmc.Universe(cells=[box])\n",
"\n",
"geom = openmc.Geometry(univ)\n",
"geom.export_to_xml()\n",
"geometry = openmc.Geometry(universe)\n",
"geometry.export_to_xml()\n",
"\n",
"mats = list(geom.get_all_materials().values())\n",
"openmc.Materials(mats).export_to_xml()\n",
"materials = list(geometry.get_all_materials().values())\n",
"openmc.Materials(materials).export_to_xml()\n",
"\n",
"settings = openmc.Settings()\n",
"settings.run_mode = 'plot'\n",
"settings.export_to_xml()\n",
"\n",
"p = openmc.Plot.from_geometry(geom)\n",
"p.to_ipython_image()"
"plot = openmc.Plot.from_geometry(geometry)\n",
"plot.to_ipython_image()"
]
},
{
@ -334,9 +334,9 @@
}
],
"source": [
"p.color_by = 'material'\n",
"p.colors = {graphite: 'gray'}\n",
"p.to_ipython_image()"
"plot.color_by = 'material'\n",
"plot.colors = {graphite: 'gray'}\n",
"plot.to_ipython_image()"
]
}
],
@ -357,7 +357,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.7.0"
"version": "3.8.5"
}
},
"nbformat": 4,

View file

@ -0,0 +1,8 @@
cmake_minimum_required(VERSION 3.3 FATAL_ERROR)
project(openmc_sources CXX)
add_library(parameterized_source SHARED parameterized_source_ring.cpp)
find_package(OpenMC REQUIRED)
if (OpenMC_FOUND)
message(STATUS "Found OpenMC: ${OpenMC_DIR}")
endif()
target_link_libraries(parameterized_source OpenMC::libopenmc)

View file

@ -0,0 +1,23 @@
# Building a Parameterized Custom Source
To run this example, you first need to compile the custom source library, which
requires headers from OpenMC. A CMakeLists.txt file has been set up for you that
will search for OpenMC and build the custom library. To build the source
library, you can run:
mkdir build && cd build
OPENMC_ROOT=<path_to_openmc_install> cmake ..
make
After this, you can build the model by running `python build_xml.py`. In the XML
files that are created, you should see a reference to build/libparameterized_source.so,
the custom source library that was built by CMake, and values in the parameters
attribute. The model is also set up with a mesh tally of the flux, so once you run
`openmc`, you will get a statepoint file with the tally results in it. Running
`python show_flux.py` will pull in the results from the statepoint file and display
them. If all worked well, you should see a ring "imprint" as well as a higher flux to
the right side (since the custom source has all particles moving in the positive x
direction).
Once built, you can edit the parameters attribute on the source to change the radius of
the sampled ring or the energy of the sampled particles.

View file

@ -0,0 +1,37 @@
import openmc
# Create a single material
iron = openmc.Material()
iron.set_density('g/cm3', 5.0)
iron.add_element('Fe', 1.0)
mats = openmc.Materials([iron])
mats.export_to_xml()
# Create a 5 cm x 5 cm box filled with iron
box = openmc.model.rectangular_prism(10.0, 10.0, boundary_type='vacuum')
cell = openmc.Cell(fill=iron, region=box)
geometry = openmc.Geometry([cell])
geometry.export_to_xml()
# Tell OpenMC we're going to use our custom source
settings = openmc.Settings()
settings.run_mode = 'fixed source'
settings.batches = 10
settings.particles = 1000
source = openmc.Source()
source.library = 'build/libparameterized_source.so'
source.parameters = 'radius=3.0, energy=14.08e6'
settings.source = source
settings.export_to_xml()
# Finally, define a mesh tally so that we can see the resulting flux
mesh = openmc.RegularMesh()
mesh.lower_left = (-5.0, -5.0)
mesh.upper_right = (5.0, 5.0)
mesh.dimension = (50, 50)
tally = openmc.Tally()
tally.filters = [openmc.MeshFilter(mesh)]
tally.scores = ['flux']
tallies = openmc.Tallies([tally])
tallies.export_to_xml()

View file

@ -0,0 +1,66 @@
#include <cmath> // for M_PI
#include <memory> // for unique_ptr
#include <unordered_map>
#include "openmc/random_lcg.h"
#include "openmc/source.h"
#include "openmc/particle.h"
class Source : public openmc::CustomSource
{
public:
Source(double radius, double energy) : radius_(radius), energy_(energy) { }
// Defines a function that can create a unique pointer to a new instance of this class
// by extracting the parameters from the provided string.
static std::unique_ptr<Source> from_string(std::string parameters)
{
std::unordered_map<std::string, std::string> parameter_mapping;
std::stringstream ss(parameters);
std::string parameter;
while (std::getline(ss, parameter, ',')) {
parameter.erase(0, parameter.find_first_not_of(' '));
std::string key = parameter.substr(0, parameter.find_first_of('='));
std::string value = parameter.substr(parameter.find_first_of('=') + 1, parameter.length());
parameter_mapping[key] = value;
}
double radius = std::stod(parameter_mapping["radius"]);
double energy = std::stod(parameter_mapping["energy"]);
return std::make_unique<Source>(radius, energy);
}
// Samples from an instance of this class.
openmc::Particle::Bank sample(uint64_t* seed)
{
openmc::Particle::Bank particle;
// wgt
particle.particle = openmc::Particle::Type::neutron;
particle.wgt = 1.0;
// position
double angle = 2.0 * M_PI * openmc::prn(seed);
double radius = this->radius_;
particle.r.x = radius * std::cos(angle);
particle.r.y = radius * std::sin(angle);
particle.r.z = 0.0;
// angle
particle.u = {1.0, 0.0, 0.0};
particle.E = this->energy_;
particle.delayed_group = 0;
return particle;
}
private:
double radius_;
double energy_;
};
// A function to create a unique pointer to an instance of this class when generated
// via a plugin call using dlopen/dlsym.
// You must have external C linkage here otherwise dlopen will not find the file
extern "C" std::unique_ptr<Source> openmc_create_source(std::string parameters)
{
return Source::from_string(parameters);
}

View file

@ -0,0 +1,14 @@
import matplotlib.pyplot as plt
import openmc
# Get the flux from the statepoint
with openmc.StatePoint('statepoint.10.h5') as sp:
flux = sp.tallies[1].mean
flux.shape = (50, 50)
# Plot the flux
fig, ax = plt.subplots()
ax.imshow(flux, origin='lower', extent=(-5.0, 5.0, -5.0, 5.0))
ax.set_xlabel('x [cm]')
ax.set_ylabel('y [cm]')
plt.show()

View file

@ -18,7 +18,7 @@ namespace openmc {
namespace model {
extern int root_universe; //!< Index of root universe
extern int n_coord_levels; //!< Number of CSG coordinate levels
extern "C" int n_coord_levels; //!< Number of CSG coordinate levels
extern std::vector<int64_t> overlap_check_count;

View file

@ -298,6 +298,9 @@ public:
//! Add a score to the mesh instance
void add_score(std::string score) const;
//! Remove a score from the mesh instance
void remove_score(std::string score) const;
//! Set data for a score
void set_score_data(const std::string& score,
std::vector<double> values,

View file

@ -184,7 +184,7 @@ T PlotBase::get_map() const {
// local variables
bool found_cell = find_cell(p, 0);
j = p.n_coord_ - 1;
if (level >=0) {j = level + 1;}
if (level >= 0) { j = level; }
if (found_cell) {
data.set_value(y, x, p, j);
}

View file

@ -63,6 +63,11 @@ struct Position {
return std::sqrt(x*x + y*y + z*z);
}
//! Reflect a direction across a normal vector
//! \param[in] other Vector to reflect across
//! \result Reflected vector
Position reflect(Position n) const;
//! Rotate the position based on a rotation matrix
Position rotate(const std::vector<double>& rotation) const;
@ -89,6 +94,13 @@ inline Position operator/(Position a, Position b) { return a /= b; }
inline Position operator/(Position a, double b) { return a /= b; }
inline Position operator/(double a, Position b) { return b /= a; }
inline Position Position::reflect(Position n) const {
const double projection = n.dot(*this);
const double magnitude = n.dot(n);
n *= (2.0 * projection / magnitude);
return *this - n;
}
inline bool operator==(Position a, Position b)
{return a.x == b.x && a.y == b.y && a.z == b.z;}

View file

@ -44,8 +44,18 @@ public:
// Non-member functions
//==============================================================================
//! Return reaction name given an ENDF MT value
//
//! \param[in] mt ENDF MT value
//! \return Name of the corresponding reaction
std::string reaction_name(int mt);
//! Return reaction type (MT value) given a reaction name
//
//! \param[in] name Reaction name
//! \return Corresponding reaction type (MT value)
int reaction_type(std::string name);
} // namespace openmc
#endif // OPENMC_REACTION_H

View file

@ -59,6 +59,15 @@ private:
UPtrDist energy_; //!< Energy distribution
};
class CustomSource {
public:
virtual ~CustomSource() {}
virtual Particle::Bank sample(uint64_t* seed) = 0;
};
typedef std::unique_ptr<CustomSource> create_custom_source_t(std::string parameters);
//==============================================================================
// Functions
//==============================================================================

View file

@ -236,10 +236,8 @@ def atomic_mass(isotope):
for element in ['C', 'Zn', 'Pt', 'Os', 'Tl']:
isotope_zero = element.lower() + '0'
_ATOMIC_MASS[isotope_zero] = 0.
for iso, abundance in NATURAL_ABUNDANCE.items():
if re.match(r'{}\d+'.format(element), iso):
_ATOMIC_MASS[isotope_zero] += abundance * \
_ATOMIC_MASS[iso.lower()]
for iso, abundance in isotopes(element):
_ATOMIC_MASS[isotope_zero] += abundance * _ATOMIC_MASS[iso.lower()]
# Get rid of metastable information
if '_' in isotope:
@ -257,7 +255,7 @@ def atomic_weight(element):
Parameters
----------
element : str
Name of element, e.g. 'H', 'U'
Element symbol (e.g., 'H') or name (e.g., 'helium')
Returns
-------
@ -266,9 +264,8 @@ def atomic_weight(element):
"""
weight = 0.
for nuclide, abundance in NATURAL_ABUNDANCE.items():
if re.match(r'{}\d+'.format(element), nuclide):
weight += atomic_mass(nuclide) * abundance
for nuclide, abundance in isotopes(element):
weight += atomic_mass(nuclide) * abundance
if weight > 0.:
return weight
else:
@ -404,6 +401,41 @@ def gnd_name(Z, A, m=0):
return '{}{}'.format(ATOMIC_SYMBOL[Z], A)
def isotopes(element):
"""Return naturally-occurring isotopes and their abundances
Parameters
----------
element : str
Element symbol (e.g., 'H') or name (e.g., 'helium')
Returns
-------
list
A list of tuples of (isotope, abundance)
Raises
------
ValueError
If the element name is not recognized
"""
# Convert name to symbol if needed
if len(element) > 2:
symbol = ELEMENT_SYMBOL.get(element.lower())
if symbol is None:
raise ValueError('Element name "{}" not recognised'.format(element))
element = symbol
# Get the nuclides present in nature
result = []
for kv in sorted(NATURAL_ABUNDANCE.items()):
if re.match(r'{}\d+'.format(element), kv[0]):
result.append(kv)
return result
def zam(name):
"""Return tuple of (atomic number, mass number, metastable state)

View file

@ -16,7 +16,7 @@ import openmc.checkvalue as cv
from openmc.mixin import EqualityMixin
from openmc.stats import Discrete, Tabular
from . import HDF5_VERSION, HDF5_VERSION_MAJOR, endf
from .data import K_BOLTZMANN, ATOMIC_SYMBOL, EV_PER_MEV, NATURAL_ABUNDANCE
from .data import K_BOLTZMANN, ATOMIC_SYMBOL, EV_PER_MEV, isotopes
from .ace import Table, get_table, Library
from .angle_energy import AngleEnergy
from .function import Tabulated1D, Function1D
@ -29,14 +29,14 @@ from .thermal_angle_energy import (CoherentElasticAE, IncoherentElasticAE,
_THERMAL_NAMES = {
'c_Al27': ('al', 'al27', 'al-27'),
'c_Al_in_Sapphire': ('asap00',),
'c_Al_in_Sapphire': ('asap00', 'asap'),
'c_Be': ('be', 'be-metal', 'be-met', 'be00'),
'c_BeO': ('beo',),
'c_Be_in_BeO': ('bebeo', 'be-beo', 'be-o', 'be/o', 'bbeo00'),
'c_Be_in_Be2C': ('bebe2c',),
'c_C6H6': ('benz', 'c6h6'),
'c_C_in_SiC': ('csic', 'c-sic'),
'c_Ca_in_CaH2': ('cah', 'cah00'),
'c_Ca_in_CaH2': ('cah', 'cah00', 'cacah2'),
'c_D_in_D2O': ('dd2o', 'd-d2o', 'hwtr', 'hw', 'dhw00'),
'c_D_in_D2O_ice': ('dice',),
'c_Fe56': ('fe', 'fe56', 'fe-56'),
@ -51,20 +51,20 @@ _THERMAL_NAMES = {
'c_H_in_H2O': ('hh2o', 'h-h2o', 'lwtr', 'lw', 'lw00'),
'c_H_in_H2O_solid': ('hice', 'h-ice', 'ice00'),
'c_H_in_C5O2H8': ('lucite', 'c5o2h8', 'h-luci'),
'c_H_in_Mesitylene': ('mesi00',),
'c_H_in_Toluene': ('tol00',),
'c_H_in_Mesitylene': ('mesi00', 'mesi'),
'c_H_in_Toluene': ('tol00', 'tol'),
'c_H_in_YH2': ('hyh2', 'h-yh2'),
'c_H_in_ZrH': ('hzrh', 'h-zrh', 'h-zr', 'h/zr', 'hzr', 'hzr00'),
'c_Mg24': ('mg', 'mg24', 'mg00'),
'c_O_in_Sapphire': ('osap00',),
'c_O_in_Sapphire': ('osap00', 'osap'),
'c_O_in_BeO': ('obeo', 'o-beo', 'o-be', 'o/be', 'obeo00'),
'c_O_in_D2O': ('od2o', 'o-d2o', 'ohw00'),
'c_O_in_H2O_ice': ('oice', 'o-ice'),
'c_O_in_UO2': ('ouo2', 'o-uo2', 'o2-u', 'o2/u', 'ouo200'),
'c_N_in_UN': ('n-un',),
'c_ortho_D': ('orthod', 'orthoD', 'dortho', 'od200'),
'c_ortho_H': ('orthoh', 'orthoH', 'hortho', 'oh200'),
'c_Si28': ('si00',),
'c_ortho_D': ('orthod', 'orthoD', 'dortho', 'od200', 'ortod'),
'c_ortho_H': ('orthoh', 'orthoH', 'hortho', 'oh200', 'ortoh'),
'c_Si28': ('si00', 'sili'),
'c_Si_in_SiC': ('sisic', 'si-sic'),
'c_SiO2_alpha': ('sio2', 'sio2a'),
'c_SiO2_beta': ('sio2b',),
@ -722,10 +722,9 @@ class ThermalScattering(EqualityMixin):
else:
if element + '0' not in table.nuclides:
table.nuclides.append(element + '0')
for isotope in sorted(NATURAL_ABUNDANCE):
if re.match(r'{}\d+'.format(element), isotope):
if isotope not in table.nuclides:
table.nuclides.append(isotope)
for isotope, _ in isotopes(element):
if isotope not in table.nuclides:
table.nuclides.append(isotope)
return table

View file

@ -147,9 +147,9 @@ def replace_missing(product, decay_data):
Z, A, state = openmc.data.zam(product)
symbol = openmc.data.ATOMIC_SYMBOL[Z]
# Replace neutron with proton
if Z == 0 and A == 1:
return 'H1'
# Replace neutron with nothing
if Z == 0:
return None
# First check if ground state is available
if state:

View file

@ -4,7 +4,8 @@ import re
from xml.etree import ElementTree as ET
import openmc.checkvalue as cv
from openmc.data import NATURAL_ABUNDANCE, atomic_mass
from openmc.data import NATURAL_ABUNDANCE, atomic_mass, \
isotopes as natural_isotopes
class Element(str):
@ -119,10 +120,7 @@ class Element(str):
cv.check_greater_than('enrichment', enrichment, 0., equality=True)
# Get the nuclides present in nature
natural_nuclides = set()
for nuclide in sorted(NATURAL_ABUNDANCE.keys()):
if re.match(r'{}\d+'.format(self), nuclide):
natural_nuclides.add(nuclide)
natural_nuclides = {name for name, abundance in natural_isotopes(self)}
# Create dict to store the expanded nuclides and abundances
abundances = OrderedDict()

View file

@ -568,7 +568,8 @@ class Geometry:
# Iterate through all cells contained in the geometry
for cell in self.get_all_cells().values():
# Recursively remove redundant surfaces from regions
cell.region.remove_redundant_surfaces(redundant_surfaces)
if cell.region:
cell.region.remove_redundant_surfaces(redundant_surfaces)
def determine_paths(self, instances_only=False):
"""Determine paths through CSG tree for cells and materials.

View file

@ -12,7 +12,7 @@ functions or objects in :mod:`openmc.lib`, for example:
"""
from ctypes import CDLL, c_bool
from ctypes import CDLL, c_bool, c_int
import os
import sys
@ -42,6 +42,9 @@ else:
def _dagmc_enabled():
return c_bool.in_dll(_dll, "dagmc_enabled").value
def _coord_levels():
return c_int.in_dll(_dll, "n_coord_levels").value
from .error import *
from .core import *
from .nuclide import *

View file

@ -1079,6 +1079,10 @@ class Material(IDManagerMixin):
new_density = np.sum([dens for dens in mass_per_cc.values()])
new_mat.set_density('g/cm3', new_density)
# If any of the involved materials is depletable, the new material is
# depletable
new_mat.depletable = any(mat.depletable for mat in materials)
return new_mat
@classmethod

View file

@ -412,7 +412,7 @@ class Library:
if self.correction == 'P0' and legendre_order > 0:
msg = 'The P0 correction will be ignored since the ' \
'scattering order {} is greater than '\
'zero'.format(self.legendre_order)
'zero'.format(legendre_order)
warn(msg, RuntimeWarning)
self.correction = None
elif self.scatter_format == 'histogram':
@ -1090,7 +1090,7 @@ class Library:
subdomain=subdomain)
if 'beta' in self.mgxs_types:
mymgxs = self.get_mgxs(domain, 'nu-fission')
mymgxs = self.get_mgxs(domain, 'beta')
xsdata.set_beta_mgxs(mymgxs, xs_type=xs_type, nuclide=[nuclide],
subdomain=subdomain)
@ -1402,11 +1402,15 @@ class Library:
if self.domain_type == 'material':
# Fill all appropriate Cells with new Material
for cell in all_cells:
if cell.fill.id == domain.id:
if isinstance(cell.fill, openmc.Material) and cell.fill.id == domain.id:
cell.fill = material
elif self.domain_type == 'cell':
for cell in all_cells:
if not isinstance(cell.fill, openmc.Material):
warn('If the library domain includes a lattice or universe cell '
'in conjunction with a consituent cell of that lattice/universe, '
'the multi-group simulation will fail')
if cell.id == domain.id:
cell.fill = material

View file

@ -36,7 +36,8 @@ MGXS_TYPES = (
'chi-prompt',
'inverse-velocity',
'prompt-nu-fission',
'prompt-nu-fission matrix'
'prompt-nu-fission matrix',
'current'
)
# Supported domain types
@ -507,7 +508,8 @@ class MGXS:
self._tallies[key] = openmc.Tally(name=self.name)
self._tallies[key].scores = [score]
self._tallies[key].estimator = estimator
self._tallies[key].filters = [domain_filter]
if score != 'current':
self._tallies[key].filters = [domain_filter]
# If a tally trigger was specified, add it to each tally
if self.tally_trigger:
@ -558,7 +560,10 @@ class MGXS:
domain_type = self.domain_type[4:-1]
else:
domain_type = self.domain_type
filter_type = _DOMAIN_TO_FILTER[domain_type]
if self._rxn_type == 'current':
filter_type = openmc.MeshSurfaceFilter
else:
filter_type = _DOMAIN_TO_FILTER[domain_type]
domain_filter = self.xs_tally.find_filter(filter_type)
return domain_filter.num_bins
@ -691,7 +696,7 @@ class MGXS:
Parameters
----------
mgxs_type : {'total', 'transport', 'nu-transport', 'absorption', 'capture', 'fission', 'nu-fission', 'kappa-fission', 'scatter', 'nu-scatter', 'scatter matrix', 'nu-scatter matrix', 'multiplicity matrix', 'nu-fission matrix', 'chi', 'chi-prompt', 'inverse-velocity', 'prompt-nu-fission', 'prompt-nu-fission matrix'}
mgxs_type : {'total', 'transport', 'nu-transport', 'absorption', 'capture', 'fission', 'nu-fission', 'kappa-fission', 'scatter', 'nu-scatter', 'scatter matrix', 'nu-scatter matrix', 'multiplicity matrix', 'nu-fission matrix', 'chi', 'chi-prompt', 'inverse-velocity', 'prompt-nu-fission', 'prompt-nu-fission matrix', 'current'}
The type of multi-group cross section object to return
domain : openmc.Material or openmc.Cell or openmc.Universe or openmc.RegularMesh
The domain for spatial homogenization
@ -769,6 +774,8 @@ class MGXS:
elif mgxs_type == 'prompt-nu-fission matrix':
mgxs = NuFissionMatrixXS(domain, domain_type, energy_groups,
prompt=True)
elif mgxs_type == 'current':
mgxs = Current(domain, domain_type, energy_groups)
mgxs.by_nuclide = by_nuclide
mgxs.name = name
@ -4153,7 +4160,7 @@ class ScatterMatrixXS(MatrixMGXS):
if self.correction == 'P0' and legendre_order > 0:
msg = 'The P0 correction will be ignored since the ' \
'scattering order {} is greater than '\
'zero'.format(self.legendre_order)
'zero'.format(legendre_order)
warnings.warn(msg, RuntimeWarning)
self.correction = None
elif self.scatter_format == SCATTER_HISTOGRAM:
@ -5891,3 +5898,472 @@ class InverseVelocity(MGXS):
else:
raise ValueError('Unable to return the units of InverseVelocity'
' for xs_type other than "macro"')
class MeshSurfaceMGXS(MGXS):
"""An abstract multi-group cross section for some energy group structure
on the surfaces of a mesh domain.
This class can be used for both OpenMC input generation and tally data
post-processing to compute surface- and energy-integrated multi-group cross
sections for multi-group neutronics calculations.
.. note:: Users should instantiate the subclasses of this abstract class.
Parameters
----------
domain : openmc.RegularMesh
The domain for spatial homogenization
domain_type : {'mesh'}
The domain type for spatial homogenization
energy_groups : openmc.mgxs.EnergyGroups
The energy group structure for energy condensation
by_nuclide : bool
Unused in MeshSurfaceMGXS
name : str, optional
Name of the multi-group cross section. Used as a label to identify
tallies in OpenMC 'tallies.xml' file.
Attributes
----------
name : str, optional
Name of the multi-group cross section
rxn_type : str
Reaction type (e.g., 'total', 'nu-fission', etc.)
by_nuclide : bool
Unused in MeshSurfaceMGXS
domain : Mesh
Domain for spatial homogenization
domain_type : {'mesh'}
Domain type for spatial homogenization
energy_groups : openmc.mgxs.EnergyGroups
Energy group structure for energy condensation
tally_trigger : openmc.Trigger
An (optional) tally precision trigger given to each tally used to
compute the cross section
scores : list of str
The scores in each tally used to compute the multi-group cross section
filters : list of openmc.Filter
The filters in each tally used to compute the multi-group cross section
tally_keys : list of str
The keys into the tallies dictionary for each tally used to compute
the multi-group cross section
estimator : {'analog'}
The tally estimator used to compute the multi-group cross section
tallies : collections.OrderedDict
OpenMC tallies needed to compute the multi-group cross section
rxn_rate_tally : openmc.Tally
Derived tally for the reaction rate tally used in the numerator to
compute the multi-group cross section. This attribute is None
unless the multi-group cross section has been computed.
xs_tally : openmc.Tally
Derived tally for the multi-group cross section. This attribute
is None unless the multi-group cross section has been computed.
num_subdomains : int
The number of subdomains is equal to the number of mesh surfaces times
two to account for both the incoming and outgoing current from the
mesh cell surfaces.
num_nuclides : int
Unused in MeshSurfaceMGXS
nuclides : Iterable of str or 'sum'
Unused in MeshSurfaceMGXS
sparse : bool
Whether or not the MGXS' tallies use SciPy's LIL sparse matrix format
for compressed data storage
loaded_sp : bool
Whether or not a statepoint file has been loaded with tally data
derived : bool
Whether or not the MGXS is merged from one or more other MGXS
hdf5_key : str
The key used to index multi-group cross sections in an HDF5 data store
"""
def __init__(self, domain=None, domain_type=None, energy_groups=None,
by_nuclide=False, name=''):
super(MeshSurfaceMGXS, self).__init__(domain, domain_type, energy_groups,
by_nuclide, name)
self._estimator = ['analog']
self._valid_estimators = ['analog']
@property
def scores(self):
return [self.rxn_type]
@property
def domain(self):
return self._domain
@property
def domain_type(self):
return self._domain_type
@domain.setter
def domain(self, domain):
cv.check_type('domain', domain, openmc.RegularMesh)
self._domain = domain
# Assign a domain type
if self.domain_type is None:
self._domain_type = 'mesh'
@domain_type.setter
def domain_type(self, domain_type):
cv.check_value('domain type', domain_type, 'mesh')
self._domain_type = domain_type
@property
def filters(self):
group_edges = self.energy_groups.group_edges
energy_filter = openmc.EnergyFilter(group_edges)
mesh = _DOMAIN_TO_FILTER[self.domain_type](self.domain).mesh
meshsurface_filter = openmc.MeshSurfaceFilter(mesh)
filters = [[meshsurface_filter, energy_filter]]
return self._add_angle_filters(filters)
@property
def xs_tally(self):
if self._xs_tally is None:
if self.tallies is None:
msg = 'Unable to get xs_tally since tallies have ' \
'not been loaded from a statepoint'
raise ValueError(msg)
self._xs_tally = self.rxn_rate_tally
self._compute_xs()
return self._xs_tally
def load_from_statepoint(self, statepoint):
"""Extracts tallies in an OpenMC StatePoint with the data needed to
compute multi-group cross sections.
This method is needed to compute cross section data from tallies
in an OpenMC StatePoint object.
.. note:: The statepoint must first be linked with a :class:`openmc.Summary`
object.
Parameters
----------
statepoint : openmc.StatePoint
An OpenMC StatePoint object with tally data
Raises
------
ValueError
When this method is called with a statepoint that has not been
linked with a summary object.
"""
cv.check_type('statepoint', statepoint, openmc.statepoint.StatePoint)
if statepoint.summary is None:
msg = 'Unable to load data from a statepoint which has not been ' \
'linked with a summary file'
raise ValueError(msg)
filters= []
filter_bins = []
# Clear any tallies previously loaded from a statepoint
if self.loaded_sp:
self._tallies = None
self._xs_tally = None
self._rxn_rate_tally = None
self._loaded_sp = False
# Find, slice and store Tallies from StatePoint
# The tally slicing is needed if tally merging was used
for tally_type, tally in self.tallies.items():
sp_tally = statepoint.get_tally(
tally.scores, tally.filters, tally.nuclides,
estimator=tally.estimator, exact_filters=True)
sp_tally = sp_tally.get_slice(
tally.scores, filters, filter_bins, tally.nuclides)
sp_tally.sparse = self.sparse
self.tallies[tally_type] = sp_tally
self._loaded_sp = True
def get_xs(self, groups='all', subdomains='all', nuclides='all',
xs_type='macro', order_groups='increasing',
value='mean', squeeze=True, **kwargs):
r"""Returns an array of multi-group cross sections.
This method constructs a 3D NumPy array for the requested
multi-group cross section data for one or more subdomains
(1st dimension), energy groups (2nd dimension), and nuclides
(3rd dimension).
Parameters
----------
groups : Iterable of Integral or 'all'
Energy groups of interest. Defaults to 'all'.
subdomains : Iterable of Integral or 'all'
Subdomain IDs of interest. Defaults to 'all'.
nuclides : Iterable of str or 'all' or 'sum'
Unused in MeshSurfaceMGXS, its value will be ignored. The nuclides
dimension of the resultant array will always have a length of 1.
xs_type: {'macro'}
The 'macro'/'micro' distinction does not apply to MeshSurfaceMGXS.
The calculation of a 'micro' xs_type is omited in this class.
order_groups: {'increasing', 'decreasing'}
Return the cross section indexed according to increasing or
decreasing energy groups (decreasing or increasing energies).
Defaults to 'increasing'.
value : {'mean', 'std_dev', 'rel_err'}
A string for the type of value to return. Defaults to 'mean'.
squeeze : bool
A boolean representing whether to eliminate the extra dimensions
of the multi-dimensional array to be returned. Defaults to True.
Returns
-------
numpy.ndarray
A NumPy array of the multi-group cross section indexed in the order
each group, subdomain and nuclide is listed in the parameters.
Raises
------
ValueError
When this method is called before the multi-group cross section is
computed from tally data.
"""
cv.check_value('value', value, ['mean', 'std_dev', 'rel_err'])
cv.check_value('xs_type', xs_type, ['macro'])
filters = []
filter_bins = []
# Construct a collection of the domain filter bins
if not isinstance(subdomains, str):
cv.check_iterable_type('subdomains', subdomains, Integral,
max_depth=3)
filters.append(_DOMAIN_TO_FILTER[self.domain_type])
subdomain_bins = []
for subdomain in subdomains:
subdomain_bins.append(subdomain)
filter_bins.append(tuple(subdomain_bins))
xs = self.xs_tally.get_values(filters=filters,
filter_bins=filter_bins, value=value)
# Construct list of energy group bounds tuples for all requested groups
if not isinstance(groups, str):
cv.check_iterable_type('groups', groups, Integral)
filters.append(openmc.EnergyFilter)
energy_bins = []
for group in groups:
energy_bins.append(
(self.energy_groups.get_group_bounds(group),))
filter_bins.append(tuple(energy_bins))
# Eliminate the trivial score dimension
xs = np.squeeze(xs, axis=len(xs.shape) - 1)
xs = np.nan_to_num(xs)
if groups == 'all':
num_groups = self.num_groups
else:
num_groups = len(groups)
# Reshape tally data array with separate axes for domain and energy
# Accomodate the polar and azimuthal bins if needed
num_surfaces = 4 * self.domain.n_dimension
num_subdomains = int(xs.shape[0] / (num_groups * self.num_polar *
self.num_azimuthal * num_surfaces))
if self.num_polar > 1 or self.num_azimuthal > 1:
new_shape = (self.num_polar, self.num_azimuthal, num_subdomains,
num_groups, num_surfaces)
else:
new_shape = (num_subdomains, num_groups, num_surfaces)
new_shape += xs.shape[1:]
new_xs = np.zeros(new_shape)
for cell in range(num_subdomains):
for g in range(num_groups):
for s in range(num_surfaces):
new_xs[cell,g,s] = \
xs[cell*num_surfaces*num_groups+s*num_groups+g]
xs = new_xs
# Reverse data if user requested increasing energy groups since
# tally data is stored in order of increasing energies
if order_groups == 'increasing':
xs = xs[..., ::-1, :, :]
if squeeze:
# We want to squeeze out everything but the polar, azimuthal,
# and energy group data.
xs = self._squeeze_xs(xs)
return xs
def get_pandas_dataframe(self, groups='all', nuclides='all',
xs_type='macro', paths=True):
"""Build a Pandas DataFrame for the MGXS data.
This method leverages :meth:`openmc.Tally.get_pandas_dataframe`, but
renames the columns with terminology appropriate for cross section data.
Parameters
----------
groups : Iterable of Integral or 'all'
Energy groups of interest. Defaults to 'all'.
nuclides : Iterable of str or 'all' or 'sum'
Unused in MeshSurfaceMGXS, its value will be ignored. The nuclides
dimension of the resultant array will always have a length of 1.
xs_type: {'macro'}
'micro' unused in MeshSurfaceMGXS.
paths : bool, optional
Construct columns for distribcell tally filters (default is True).
The geometric information in the Summary object is embedded into
a Multi-index column with a geometric "path" to each distribcell
instance.
Returns
-------
pandas.DataFrame
A Pandas DataFrame for the cross section data.
Raises
------
ValueError
When this method is called before the multi-group cross section is
computed from tally data.
"""
if not isinstance(groups, str):
cv.check_iterable_type('groups', groups, Integral)
cv.check_value('xs_type', xs_type, ['macro'])
df = self.xs_tally.get_pandas_dataframe(paths=paths)
# Remove the score column since it is homogeneous and redundant
df = df.drop('score', axis=1, level=0)
# Convert azimuthal, polar, energy in and energy out bin values in to
# bin indices
columns = self._df_convert_columns_to_bins(df)
# Select out those groups the user requested
if not isinstance(groups, str):
if 'group in' in df:
df = df[df['group in'].isin(groups)]
if 'group out' in df:
df = df[df['group out'].isin(groups)]
mesh_str = 'mesh {0}'.format(self.domain.id)
col_key = (mesh_str, 'surf')
surfaces = df.pop(col_key)
df.insert(len(self.domain.dimension), col_key, surfaces)
if len(self.domain.dimension) == 1:
df.sort_values(by=[(mesh_str, 'x'), (mesh_str, 'surf')]
+ columns, inplace=True)
elif len(self.domain.dimension) == 2:
df.sort_values(by=[(mesh_str, 'x'), (mesh_str, 'y'),
(mesh_str, 'surf')] + columns, inplace=True)
elif len(self.domain.dimension) == 3:
df.sort_values(by=[(mesh_str, 'x'), (mesh_str, 'y'),
(mesh_str, 'z'), (mesh_str, 'surf')] + columns, inplace=True)
return df
class Current(MeshSurfaceMGXS):
r"""A current multi-group cross section.
This class can be used for both OpenMC input generation and tally data
post-processing to compute surface- and energy-integrated
multi-group current cross sections for multi-group neutronics calculations. At
a minimum, one needs to set the :attr:`Current.energy_groups` and
:attr:`Current.domain` properties. Tallies for the appropriate
reaction rates over the specified domain are generated automatically via the
:attr:`Current.tallies` property, which can then be appended to a
:class:`openmc.Tallies` instance.
For post-processing, the :meth:`MGXS.load_from_statepoint` will pull in the
necessary data to compute multi-group cross sections from a
:class:`openmc.StatePoint` instance. The derived multi-group cross section
can then be obtained from the :attr:`Current.xs_tally` property.
For a spatial domain :math:`S` and energy group :math:`[E_g,E_{g-1}]`, the
total cross section is calculated as:
.. math::
\frac{\int_{r \in S} dS \int_{E_g}^{E_{g-1}} dE \;
J(r, E)}{\int_{r \in S} dS \int_{E_g}^{E_{g-1}} dE}.
Parameters
----------
domain : openmc.RegularMesh
The domain for spatial homogenization
domain_type : ('mesh'}
The domain type for spatial homogenization
groups : openmc.mgxs.EnergyGroups
The energy group structure for energy condensation
by_nuclide : bool
Unused in MeshSurfaceMGXS
name : str, optional
Name of the multi-group cross section. Used as a label to identify
tallies in OpenMC 'tallies.xml' file.
Attributes
----------
name : str, optional
Name of the multi-group cross section
rxn_type : str
Reaction type (e.g., 'total', 'nu-fission', etc.)
by_nuclide : bool
Unused in MeshSurfaceMGXS
domain : openmc.RegularMesh
Domain for spatial homogenization
domain_type : {'mesh'}
Domain type for spatial homogenization
energy_groups : openmc.mgxs.EnergyGroups
Energy group structure for energy condensation
tally_trigger : openmc.Trigger
An (optional) tally precision trigger given to each tally used to
compute the cross section
scores : list of str
The scores in each tally used to compute the multi-group cross section
filters : list of openmc.Filter
The filters in each tally used to compute the multi-group cross section
tally_keys : list of str
The keys into the tallies dictionary for each tally used to compute
the multi-group cross section
estimator : {'analog'}
The tally estimator used to compute the multi-group cross section
tallies : collections.OrderedDict
OpenMC tallies needed to compute the multi-group cross section. The keys
are strings listed in the :attr:`TotalXS.tally_keys` property and values
are instances of :class:`openmc.Tally`.
rxn_rate_tally : openmc.Tally
Derived tally for the reaction rate tally used in the numerator to
compute the multi-group cross section. This attribute is None
unless the multi-group cross section has been computed.
xs_tally : openmc.Tally
Derived tally for the multi-group cross section. This attribute
is None unless the multi-group cross section has been computed.
num_subdomains : int
The number of subdomains is equal to the number of mesh surfaces times
two to account for both the incoming and outgoing current from the
mesh cell surfaces.
num_nuclides : int
Unused in MeshSurfaceMGXS
nuclides : Iterable of str or 'sum'
Unused in MeshSurfaceMGXS
sparse : bool
Whether or not the MGXS' tallies use SciPy's LIL sparse matrix format
for compressed data storage
loaded_sp : bool
Whether or not a statepoint file has been loaded with tally data
derived : bool
Whether or not the MGXS is merged from one or more other MGXS
hdf5_key : str
The key used to index multi-group cross sections in an HDF5 data store
"""
def __init__(self, domain=None, domain_type=None,
groups=None, by_nuclide=False, name=''):
super(Current, self).__init__(domain, domain_type,
groups, by_nuclide, name)
self._rxn_type = 'current'

View file

@ -349,6 +349,18 @@ class XSdata:
def chi_delayed(self):
return self._chi_delayed
@property
def beta(self):
return self._beta
@property
def decay_rate(self):
return self._decay_rate
@property
def inverse_velocity(self):
return self._inverse_velocity
@property
def num_orders(self):
if self._order is None:

View file

@ -22,6 +22,8 @@ class Source:
Source file from which sites should be sampled
library : str
Path to a custom source library
parameters : str
Parameters to be provided to the custom source library
.. versionadded:: 0.12
strength : float
@ -41,6 +43,8 @@ class Source:
Source file from which sites should be sampled
library : str or None
Path to a custom source library
parameters : str
Parameters to be provided to the custom source library
strength : float
Strength of the source
particle : {'neutron', 'photon'}
@ -49,12 +53,13 @@ class Source:
"""
def __init__(self, space=None, angle=None, energy=None, filename=None,
library=None, strength=1.0, particle='neutron'):
library=None, parameters=None, strength=1.0, particle='neutron'):
self._space = None
self._angle = None
self._energy = None
self._file = None
self._library = None
self._parameters = None
if space is not None:
self.space = space
@ -66,6 +71,8 @@ class Source:
self.file = filename
if library is not None:
self.library = library
if parameters is not None:
self.parameters = parameters
self.strength = strength
self.particle = particle
@ -77,6 +84,10 @@ class Source:
def library(self):
return self._library
@property
def parameters(self):
return self._parameters
@property
def space(self):
return self._space
@ -107,6 +118,11 @@ class Source:
cv.check_type('library', library_name, str)
self._library = library_name
@parameters.setter
def parameters(self, parameters_path):
cv.check_type('parameters', parameters_path, str)
self._parameters = parameters_path
@space.setter
def space(self, space):
cv.check_type('spatial distribution', space, Spatial)
@ -150,6 +166,8 @@ class Source:
element.set("file", self.file)
if self.library is not None:
element.set("library", self.library)
if self.parameters is not None:
element.set("parameters", self.parameters)
if self.space is not None:
element.append(self.space.to_xml_element())
if self.angle is not None:
@ -191,6 +209,10 @@ class Source:
if library is not None:
source.library = library
parameters = get_text(elem, 'parameters')
if parameters is not None:
source.parameters = parameters
space = elem.find('space')
if space is not None:
source.space = Spatial.from_xml_element(space)

View file

@ -26,7 +26,7 @@ _COMBOBOX_SELECTED = '<<ComboboxSelected>>'
class MeshPlotter(tk.Frame):
def __init__(self, parent, filename):
super().__init__(self, parent)
super().__init__(parent)
self.labels = {
'Cell': 'Cell:',

View file

@ -779,7 +779,7 @@ CSGCell::contains_complex(Position r, Direction u, int32_t on_surface) const
// DAGMC Cell implementation
//==============================================================================
#ifdef DAGMC
DAGCell::DAGCell() : Cell{} {};
DAGCell::DAGCell() : Cell{} { simple_ = true; };
std::pair<double, int32_t>
DAGCell::distance(Position r, Direction u, int32_t on_surface, Particle* p) const

View file

@ -2015,6 +2015,34 @@ UnstructuredMesh::add_score(std::string score) const {
auto score_tags = this->get_score_tags(score);
}
void UnstructuredMesh::remove_score(std::string score) const {
auto value_name = score + "_mean";
moab::Tag tag;
moab::ErrorCode rval = mbi_->tag_get_handle(value_name.c_str(), tag);
if (rval != moab::MB_SUCCESS) return;
rval = mbi_->tag_delete(tag);
if (rval != moab::MB_SUCCESS) {
auto msg = fmt::format("Failed to delete mesh tag for the score {}"
" on unstructured mesh {}", score, id_);
fatal_error(msg);
}
auto std_dev_name = score + "_std_dev";
rval = mbi_->tag_get_handle(std_dev_name.c_str(), tag);
if (rval != moab::MB_SUCCESS) {
auto msg = fmt::format("Std. Dev. mesh tag does not exist for the score {}"
" on unstructured mesh {}", score, id_);
}
rval = mbi_->tag_delete(tag);
if (rval != moab::MB_SUCCESS) {
auto msg = fmt::format("Failed to delete mesh tag for the score {}"
" on unstructured mesh {}", score, id_);
fatal_error(msg);
}
}
void
UnstructuredMesh::set_score_data(const std::string& score,
std::vector<double> values,

View file

@ -237,6 +237,16 @@ Nuclide::Nuclide(hid_t group, const std::vector<double>& temperature)
// section should be determined from a normal reaction cross section, we
// need to get the index of the reaction.
if (temps_to_read.size() > 0) {
// Make sure inelastic flags are consistent for different temperatures
for (int i = 0; i < urr_data_.size() - 1; ++i) {
if (urr_data_[i].inelastic_flag_ != urr_data_[i+1].inelastic_flag_) {
fatal_error(fmt::format("URR inelastic flag is not consistent for "
"multiple temperatures in nuclide {}. This most likely indicates "
"a problem in how the data was processed.", name_));
}
}
if (urr_data_[0].inelastic_flag_ > 0) {
for (int i = 0; i < reactions_.size(); i++) {
if (reactions_[i]->mt_ == urr_data_[0].inelastic_flag_) {

View file

@ -410,7 +410,7 @@ Particle::cross_surface()
// TODO: off-by-one
const auto& surf {model::surfaces[i_surface - 1].get()};
if (settings::verbosity >= 10 || trace_) {
write_message(" Crossing surface {}", surf->id_);
write_message(1, " Crossing surface {}", surf->id_);
}
if (surf->bc_ == Surface::BoundaryType::VACUUM && (settings::run_mode != RunMode::PLOTTING)) {
@ -437,7 +437,7 @@ Particle::cross_surface()
// Display message
if (settings::verbosity >= 10 || trace_) {
write_message(" Leaked out of surface {}", surf->id_);
write_message(1, " Leaked out of surface {}", surf->id_);
}
return;
@ -502,7 +502,7 @@ Particle::cross_surface()
// Diagnostic message
if (settings::verbosity >= 10 || trace_) {
write_message(" Reflected from surface {}", surf->id_);
write_message(1, " Reflected from surface {}", surf->id_);
}
return;
@ -556,7 +556,7 @@ Particle::cross_surface()
// Diagnostic message
if (settings::verbosity >= 10 || trace_) {
write_message(" Hit periodic boundary on surface {}", surf->id_);
write_message(1, " Hit periodic boundary on surface {}", surf->id_);
}
return;
}

View file

@ -41,14 +41,21 @@ IdData::IdData(size_t h_res, size_t v_res)
void
IdData::set_value(size_t y, size_t x, const Particle& p, int level) {
Cell* c = model::cells[p.coord_[level].cell].get();
data_(y,x,0) = c->id_;
// set cell data
if (p.n_coord_ <= level) {
data_(y, x, 0) = NOT_FOUND;
} else {
data_(y, x, 0) = model::cells.at(p.coord_.at(level).cell)->id_;
}
// set material data
Cell* c = model::cells.at(p.coord_.at(p.n_coord_ - 1).cell).get();
if (p.material_ == MATERIAL_VOID) {
data_(y,x,1) = MATERIAL_VOID;
data_(y, x, 1) = MATERIAL_VOID;
return;
} else if (c->type_ != Fill::UNIVERSE) {
Material* m = model::materials[p.material_].get();
data_(y,x,1) = m->id_;
} else if (c->type_ == Fill::MATERIAL) {
Material* m = model::materials.at(p.material_).get();
data_(y, x, 1) = m->id_;
}
}
@ -62,10 +69,10 @@ PropertyData::PropertyData(size_t h_res, size_t v_res)
void
PropertyData::set_value(size_t y, size_t x, const Particle& p, int level) {
Cell* c = model::cells[p.coord_[level].cell].get();
Cell* c = model::cells.at(p.coord_.at(p.n_coord_ - 1).cell).get();
data_(y,x,0) = (p.sqrtkT_ * p.sqrtkT_) / K_BOLTZMANN;
if (c->type_ != Fill::UNIVERSE && p.material_ != MATERIAL_VOID) {
Material* m = model::materials[p.material_].get();
Material* m = model::materials.at(p.material_).get();
data_(y,x,1) = m->density_gpcc_;
}
}

View file

@ -87,7 +87,7 @@ Reaction::Reaction(hid_t group, const std::vector<int>& temperatures)
// Non-member functions
//==============================================================================
const std::unordered_map<int, std::string> REACTION_NAME_MAP {
std::unordered_map<int, std::string> REACTION_NAME_MAP {
{SCORE_FLUX, "flux"},
{SCORE_TOTAL, "total"},
{SCORE_SCATTER, "scatter"},
@ -150,6 +150,55 @@ const std::unordered_map<int, std::string> REACTION_NAME_MAP {
{N_PD, "(n,pd)"},
{N_PT, "(n,pt)"},
{N_DA, "(n,da)"},
{N_5N, "(n,5n)"},
{N_6N, "(n,6n)"},
{N_2NT, "(n,2nt)"},
{N_TA, "(n,ta)"},
{N_4NP, "(n,4np)"},
{N_3ND, "(n,3nd)"},
{N_NDA, "(n,nda)"},
{N_2NPA, "(n,2npa)"},
{N_7N, "(n,7n)"},
{N_8N, "(n,8n)"},
{N_5NP, "(n,5np)"},
{N_6NP, "(n,6np)"},
{N_7NP, "(n,7np)"},
{N_4NA, "(n,4na)"},
{N_5NA, "(n,5na)"},
{N_6NA, "(n,6na)"},
{N_7NA, "(n,7na)"},
{N_4ND, "(n,4nd)"},
{N_5ND, "(n,5nd)"},
{N_6ND, "(n,6nd)"},
{N_3NT, "(n,3nt)"},
{N_4NT, "(n,4nt)"},
{N_5NT, "(n,5nt)"},
{N_6NT, "(n,6nt)"},
{N_2N3HE, "(n,2n3He)"},
{N_3N3HE, "(n,3n3He)"},
{N_4N3HE, "(n,4n3He)"},
{N_3N2P, "(n,3n2p)"},
{N_3N3A, "(n,3n3a)"},
{N_3NPA, "(n,3npa)"},
{N_DT, "(n,dt)"},
{N_NPD, "(n,npd)"},
{N_NPT, "(n,npt)"},
{N_NDT, "(n,ndt)"},
{N_NP3HE, "(n,np3He)"},
{N_ND3HE, "(n,nd3He)"},
{N_NT3HE, "(n,nt3He)"},
{N_NTA, "(n,nta)"},
{N_2N2P, "(n,2n2p)"},
{N_P3HE, "(n,p3He)"},
{N_D3HE, "(n,d3He)"},
{N_3HEA, "(n,3Hea)"},
{N_4N2P, "(n,4n2p)"},
{N_4N2A, "(n,4n2a)"},
{N_4NPA, "(n,4npa)"},
{N_3P, "(n,3p)"},
{N_N3P, "(n,n3p)"},
{N_3N2PA, "(n,3n2pa)"},
{N_5N2P, "(n,5n2p)"},
{201, "(n,Xn)"},
{202, "(n,Xgamma)"},
{N_XP, "(n,Xp)"},
@ -174,32 +223,100 @@ const std::unordered_map<int, std::string> REACTION_NAME_MAP {
{HEATING_LOCAL, "heating-local"},
};
std::string reaction_name(int mt)
std::unordered_map<std::string, int> REACTION_TYPE_MAP;
void initialize_maps()
{
if (N_N1 <= mt && mt <= N_N40) {
return fmt::format("(n,n{})", mt - 50);
} else if (534 <= mt && mt <= 572) {
return fmt::format("photoelectric, {} subshell", SUBSHELLS[mt - 534]);
} else if (N_P0 <= mt && mt < N_PC) {
return fmt::format("(n,p{})", mt - N_P0);
} else if (N_D0 <= mt && mt < N_DC) {
return fmt::format("(n,d{})", mt - N_D0);
} else if (N_T0 <= mt && mt < N_TC) {
return fmt::format("(n,t{})", mt - N_T0);
} else if (N_3HE0 <= mt && mt < N_3HEC) {
return fmt::format("(n,3He{})", mt - N_3HE0);
} else if (N_A0 <= mt && mt < N_AC) {
return fmt::format("(n,a{})", mt - N_A0);
} else if (N_2N0 <= mt && mt < N_2NC) {
return fmt::format("(n,2n{})", mt - N_2N0);
} else {
auto it = REACTION_NAME_MAP.find(mt);
if (it != REACTION_NAME_MAP.end()) {
return it->second;
} else {
return fmt::format("MT={}", mt);
// Add level reactions to name map
for (int level = 0; level <= 48; ++level) {
if (level >= 1 && level <= 40) {
REACTION_NAME_MAP[50 + level] = fmt::format("(n,n{})", level);
}
REACTION_NAME_MAP[600 + level] = fmt::format("(n,p{})", level);
REACTION_NAME_MAP[650 + level] = fmt::format("(n,d{})", level);
REACTION_NAME_MAP[700 + level] = fmt::format("(n,t{})", level);
REACTION_NAME_MAP[750 + level] = fmt::format("(n,3He{})", level);
REACTION_NAME_MAP[800 + level] = fmt::format("(n,a{})", level);
if (level <= 15) {
REACTION_NAME_MAP[875 + level] = fmt::format("(n,2n{})", level);
}
}
// Create photoelectric subshells
for (int mt = 534; mt <= 572; ++mt) {
REACTION_NAME_MAP[mt] = fmt::format("photoelectric, {} subshell",
SUBSHELLS[mt - 534]);
}
// Invert name map to create type map
for (const auto& kv : REACTION_NAME_MAP) {
REACTION_TYPE_MAP[kv.second] = kv.first;
}
}
std::string reaction_name(int mt)
{
// Initialize remainder of name map and all of type map
if (REACTION_TYPE_MAP.empty()) initialize_maps();
// Get reaction name from map
auto it = REACTION_NAME_MAP.find(mt);
if (it != REACTION_NAME_MAP.end()) {
return it->second;
} else {
return fmt::format("MT={}", mt);
}
}
int reaction_type(std::string name)
{
// Initialize remainder of name map and all of type map
if (REACTION_TYPE_MAP.empty()) initialize_maps();
// (n,total) exists in REACTION_TYPE_MAP for MT=1, but we need this to return
// the special SCORE_TOTAL score
if (name == "(n,total)") return SCORE_TOTAL;
// Check if type map has an entry for this reaction name
auto it = REACTION_TYPE_MAP.find(name);
if (it != REACTION_TYPE_MAP.end()) {
return it->second;
}
// Alternate names for several reactions
if (name == "elastic") {
return ELASTIC;
} else if (name == "n2n") {
return N_2N;
} else if (name == "n3n") {
return N_3N;
} else if (name == "n4n") {
return N_4N;
} else if (name == "H1-production") {
return N_XP;
} else if (name == "H2-production") {
return N_XD;
} else if (name == "H3-production") {
return N_XT;
} else if (name == "He3-production") {
return N_X3HE;
} else if (name == "He4-production") {
return N_XA;
}
// Assume the given string is a reaction MT number. Make sure it's a natural
// number then return.
int MT = 0;
try {
MT = std::stoi(name);
} catch (const std::invalid_argument& ex) {
throw std::invalid_argument("Invalid tally score \"" + name + "\". See the docs "
"for details: https://docs.openmc.org/en/stable/usersguide/tallies.html#scores");
}
if (MT < 1)
throw std::invalid_argument("Invalid tally score \"" + name + "\". See the docs "
"for details: https://docs.openmc.org/en/stable/usersguide/tallies.html#scores");
return MT;
}
} // namespace openmc

View file

@ -5,6 +5,7 @@
#endif
#include <algorithm> // for move
#include <memory> // for unique_ptr
#ifdef HAS_DYNAMIC_LINKING
#include <dlfcn.h> // for dlopen, dlsym, dlclose, dlerror
@ -44,9 +45,9 @@ std::vector<SourceDistribution> external_sources;
namespace {
using sample_t = Particle::Bank (*)(uint64_t* seed);
sample_t custom_source_function;
void* custom_source_library;
std::string custom_source_parameters;
std::unique_ptr<CustomSource> custom_source;
}
@ -94,6 +95,10 @@ SourceDistribution::SourceDistribution(pugi::xml_node node)
fatal_error(fmt::format("Source library '{}' does not exist.",
settings::path_source_library));
}
if (check_for_node(node, "parameters")) {
custom_source_parameters = get_node_value(node, "parameters", false, true);
}
} else {
// Spatial distribution for external source
@ -366,17 +371,21 @@ void load_custom_source_library()
// reset errors
dlerror();
// get the function from the library
using sample_t = Particle::Bank (*)(uint64_t* seed);
custom_source_function = reinterpret_cast<sample_t>(dlsym(custom_source_library, "sample_source"));
// get the function to create the CustomSource from the library
auto create_custom_source = reinterpret_cast<create_custom_source_t*>(
dlsym(custom_source_library, "openmc_create_source"));
// check for any dlsym errors
auto dlsym_error = dlerror();
if (dlsym_error) {
std::string error_msg = fmt::format("Couldn't open the openmc_create_source symbol: {}", dlsym_error);
dlclose(custom_source_library);
fatal_error(fmt::format("Couldn't open the sample_source symbol: {}", dlsym_error));
fatal_error(error_msg);
}
// create a pointer to an instance of the CustomSource
custom_source = create_custom_source(custom_source_parameters);
#else
fatal_error("Custom source libraries have not yet been implemented for "
"non-POSIX systems");
@ -385,6 +394,11 @@ void load_custom_source_library()
void close_custom_source_library()
{
if (custom_source.get()) {
// Make sure the custom source is destroyed before we close it's libary.
custom_source.reset();
}
#ifdef HAS_DYNAMIC_LINKING
dlclose(custom_source_library);
#else
@ -395,7 +409,8 @@ void close_custom_source_library()
Particle::Bank sample_custom_source_library(uint64_t* seed)
{
return custom_source_function(seed);
// sample from the instance of the CustomSource
return custom_source->sample(seed);
}
void fill_source_bank_custom_source()

View file

@ -687,6 +687,8 @@ void read_source_bank(hid_t group_id)
void write_unstructured_mesh_results() {
for (auto& tally : model::tallies) {
std::vector<std::string> tally_scores;
for (auto filter_idx : tally->filters()) {
auto& filter = model::tally_filters[filter_idx];
if (filter->type() != "mesh") continue;
@ -741,6 +743,7 @@ void write_unstructured_mesh_results() {
std::string score_name = tally->score_name(i_score);
auto score_str = fmt::format("{}_{}", score_name, nuclide_name);
tally_scores.push_back(score_str);
umesh->set_score_data(score_str, mean_vec, std_dev_vec);
}
}
@ -754,6 +757,8 @@ void write_unstructured_mesh_results() {
w);
// Write the unstructured mesh and data to file
umesh->write(filename);
for (const auto& score : tally_scores) { umesh->remove_score(score); }
}
}
}

View file

@ -172,11 +172,9 @@ Surface::reflect(Position r, Direction u, Particle* p) const
// Determine projection of direction onto normal and squared magnitude of
// normal.
Direction n = normal(r);
const double projection = n.dot(u);
const double magnitude = n.dot(n);
// Reflect direction according to normal.
return u -= (2.0 * projection / magnitude) * n;
return u.reflect(n);
}
Direction
@ -279,7 +277,13 @@ Direction DAGSurface::reflect(Position r, Direction u, Particle* p) const
{
Expects(p);
p->history_.reset_to_last_intersection();
p->last_dir_ = Surface::reflect(r, u, p);
moab::ErrorCode rval;
moab::EntityHandle surf = dagmc_ptr_->entity_by_index(2, dag_index_);
double pnt[3] = {r.x, r.y, r.z};
double dir[3];
rval = dagmc_ptr_->get_angle(surf, pnt, dir, &p->history_);
MB_CHK_ERR_CONT(rval);
p->last_dir_ = u.reflect(dir);
return p->last_dir_;
}

View file

@ -65,189 +65,6 @@ double global_tally_collision;
double global_tally_tracklength;
double global_tally_leakage;
int
score_str_to_int(std::string score_str)
{
if (score_str == "flux")
return SCORE_FLUX;
if (score_str == "total" || score_str == "(n,total)")
return SCORE_TOTAL;
if (score_str == "scatter")
return SCORE_SCATTER;
if (score_str == "nu-scatter")
return SCORE_NU_SCATTER;
if (score_str == "absorption")
return SCORE_ABSORPTION;
if (score_str == "fission" || score_str == "18")
return SCORE_FISSION;
if (score_str == "nu-fission")
return SCORE_NU_FISSION;
if (score_str == "decay-rate")
return SCORE_DECAY_RATE;
if (score_str == "delayed-nu-fission")
return SCORE_DELAYED_NU_FISSION;
if (score_str == "prompt-nu-fission")
return SCORE_PROMPT_NU_FISSION;
if (score_str == "kappa-fission")
return SCORE_KAPPA_FISSION;
if (score_str == "inverse-velocity")
return SCORE_INVERSE_VELOCITY;
if (score_str == "fission-q-prompt")
return SCORE_FISS_Q_PROMPT;
if (score_str == "fission-q-recoverable")
return SCORE_FISS_Q_RECOV;
if (score_str == "heating")
return HEATING;
if (score_str == "heating-local")
return HEATING_LOCAL;
if (score_str == "current")
return SCORE_CURRENT;
if (score_str == "events")
return SCORE_EVENTS;
if (score_str == "elastic" || score_str == "(n,elastic)")
return ELASTIC;
if (score_str == "n2n" || score_str == "(n,2n)")
return N_2N;
if (score_str == "n3n" || score_str == "(n,3n)")
return N_3N;
if (score_str == "n4n" || score_str == "(n,4n)")
return N_4N;
if (score_str == "(n,2nd)")
return N_2ND;
if (score_str == "(n,na)")
return N_NA;
if (score_str == "(n,n3a)")
return N_N3A;
if (score_str == "(n,2na)")
return N_2NA;
if (score_str == "(n,3na)")
return N_3NA;
if (score_str == "(n,np)")
return N_NP;
if (score_str == "(n,n2a)")
return N_N2A;
if (score_str == "(n,2n2a)")
return N_2N2A;
if (score_str == "(n,nd)")
return N_ND;
if (score_str == "(n,nt)")
return N_NT;
if (score_str == "(n,n3He)")
return N_N3HE;
if (score_str == "(n,nd2a)")
return N_ND2A;
if (score_str == "(n,nt2a)")
return N_NT2A;
if (score_str == "(n,3nf)")
return N_3NF;
if (score_str == "(n,2np)")
return N_2NP;
if (score_str == "(n,3np)")
return N_3NP;
if (score_str == "(n,n2p)")
return N_N2P;
if (score_str == "(n,npa)")
return N_NPA;
if (score_str == "(n,n1)")
return N_N1;
if (score_str == "(n,nc)")
return N_NC;
if (score_str == "(n,gamma)")
return N_GAMMA;
if (score_str == "(n,p)")
return N_P;
if (score_str == "(n,d)")
return N_D;
if (score_str == "(n,t)")
return N_T;
if (score_str == "(n,3He)")
return N_3HE;
if (score_str == "(n,a)")
return N_A;
if (score_str == "(n,2a)")
return N_2A;
if (score_str == "(n,3a)")
return N_3A;
if (score_str == "(n,2p)")
return N_2P;
if (score_str == "(n,pa)")
return N_PA;
if (score_str == "(n,t2a)")
return N_T2A;
if (score_str == "(n,d2a)")
return N_D2A;
if (score_str == "(n,pd)")
return N_PD;
if (score_str == "(n,pt)")
return N_PT;
if (score_str == "(n,da)")
return N_DA;
if (score_str == "(n,Xp)" || score_str == "H1-production")
return N_XP;
if (score_str == "(n,Xd)" || score_str == "H2-production")
return N_XD;
if (score_str == "(n,Xt)" || score_str == "H3-production")
return N_XT;
if (score_str == "(n,X3He)" || score_str == "He3-production")
return N_X3HE;
if (score_str == "(n,Xa)" || score_str == "He4-production")
return N_XA;
if (score_str == "damage-energy")
return DAMAGE_ENERGY;
if (score_str == "coherent-scatter")
return COHERENT;
if (score_str == "incoherent-scatter")
return INCOHERENT;
if (score_str == "pair-production")
return PAIR_PROD;
if (score_str == "photoelectric")
return PHOTOELECTRIC;
// So far we have not identified this score string. Check to see if it is a
// deprecated score.
if (score_str.rfind("scatter-", 0) == 0
|| score_str.rfind("nu-scatter-", 0) == 0
|| score_str.rfind("total-y", 0) == 0
|| score_str.rfind("flux-y", 0) == 0)
fatal_error(score_str + " is no longer an available score");
// Assume the given string is a reaction MT number. Make sure it's a natural
// number then return.
int MT;
try {
MT = std::stoi(score_str);
} catch (const std::invalid_argument& ex) {
throw std::invalid_argument("Invalid tally score \"" + score_str + "\". See the docs "
"for details: https://docs.openmc.org/en/stable/usersguide/tallies.html#scores");
}
if (MT < 1)
throw std::invalid_argument("Invalid tally score \"" + score_str + "\". See the docs "
"for details: https://docs.openmc.org/en/stable/usersguide/tallies.html#scores");
return MT;
}
//==============================================================================
// Tally object implementation
//==============================================================================
@ -593,7 +410,8 @@ Tally::set_scores(const std::vector<std::string>& scores)
fatal_error("Cannot tally " + score_str + "with a delayedgroup filter");
}
auto score = score_str_to_int(score_str);
// Determine integer code for score
int score = reaction_type(score_str);
switch (score) {
case SCORE_FLUX:

View file

@ -50,7 +50,12 @@
</settings>
<?xml version='1.0' encoding='utf-8'?>
<tallies>
<filter id="1" type="material">
<mesh id="1">
<dimension>2 2</dimension>
<lower_left>-100.0 -100.0</lower_left>
<width>100.0 100.0</width>
</mesh>
<filter id="1" type="mesh">
<bins>1</bins>
</filter>
<filter id="2" type="energy">
@ -68,15 +73,12 @@
<filter id="52" type="energy">
<bins>0.0 20000000.0</bins>
</filter>
<filter id="65" type="delayedgroup">
<filter id="66" type="meshsurface">
<bins>1</bins>
</filter>
<filter id="69" type="delayedgroup">
<bins>1 2 3 4 5 6</bins>
</filter>
<filter id="80" type="material">
<bins>2</bins>
</filter>
<filter id="159" type="material">
<bins>3</bins>
</filter>
<tally id="1">
<filters>1 2</filters>
<nuclides>total</nuclides>
@ -384,793 +386,67 @@
<estimator>analog</estimator>
</tally>
<tally id="52">
<filters>66 2</filters>
<nuclides>total</nuclides>
<scores>current</scores>
<estimator>analog</estimator>
</tally>
<tally id="53">
<filters>1 2</filters>
<nuclides>total</nuclides>
<scores>flux</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="53">
<filters>1 65 2</filters>
<tally id="54">
<filters>1 69 2</filters>
<nuclides>total</nuclides>
<scores>delayed-nu-fission</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="54">
<filters>1 65 52</filters>
<nuclides>total</nuclides>
<scores>delayed-nu-fission</scores>
<estimator>analog</estimator>
</tally>
<tally id="55">
<filters>1 65 5</filters>
<filters>1 69 52</filters>
<nuclides>total</nuclides>
<scores>delayed-nu-fission</scores>
<estimator>analog</estimator>
</tally>
<tally id="56">
<filters>1 69 5</filters>
<nuclides>total</nuclides>
<scores>delayed-nu-fission</scores>
<estimator>analog</estimator>
</tally>
<tally id="57">
<filters>1 2</filters>
<nuclides>total</nuclides>
<scores>nu-fission</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="57">
<filters>1 65 2</filters>
<nuclides>total</nuclides>
<scores>delayed-nu-fission</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="58">
<filters>1 65 2</filters>
<filters>1 69 2</filters>
<nuclides>total</nuclides>
<scores>delayed-nu-fission</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="59">
<filters>1 65 2</filters>
<filters>1 69 2</filters>
<nuclides>total</nuclides>
<scores>delayed-nu-fission</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="60">
<filters>1 69 2</filters>
<nuclides>total</nuclides>
<scores>decay-rate</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="60">
<tally id="61">
<filters>1 2</filters>
<nuclides>total</nuclides>
<scores>flux</scores>
<estimator>analog</estimator>
</tally>
<tally id="61">
<filters>1 65 2 5</filters>
<nuclides>total</nuclides>
<scores>delayed-nu-fission</scores>
<estimator>analog</estimator>
</tally>
<tally id="62">
<filters>80 2</filters>
<nuclides>total</nuclides>
<scores>flux</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="63">
<filters>80 2</filters>
<nuclides>total</nuclides>
<scores>total</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="64">
<filters>80 2</filters>
<nuclides>total</nuclides>
<scores>flux</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="65">
<filters>80 2</filters>
<nuclides>total</nuclides>
<scores>total</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="66">
<filters>80 2</filters>
<nuclides>total</nuclides>
<scores>flux</scores>
<estimator>analog</estimator>
</tally>
<tally id="67">
<filters>80 5 6</filters>
<nuclides>total</nuclides>
<scores>scatter</scores>
<estimator>analog</estimator>
</tally>
<tally id="68">
<filters>80 2</filters>
<nuclides>total</nuclides>
<scores>flux</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="69">
<filters>80 2</filters>
<nuclides>total</nuclides>
<scores>total</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="70">
<filters>80 2</filters>
<nuclides>total</nuclides>
<scores>flux</scores>
<estimator>analog</estimator>
</tally>
<tally id="71">
<filters>80 5 6</filters>
<nuclides>total</nuclides>
<scores>nu-scatter</scores>
<estimator>analog</estimator>
</tally>
<tally id="72">
<filters>80 2</filters>
<nuclides>total</nuclides>
<scores>flux</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="73">
<filters>80 2</filters>
<nuclides>total</nuclides>
<scores>absorption</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="74">
<filters>80 2</filters>
<nuclides>total</nuclides>
<scores>flux</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="75">
<filters>80 2</filters>
<nuclides>total</nuclides>
<scores>absorption</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="76">
<filters>80 2</filters>
<nuclides>total</nuclides>
<scores>fission</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="77">
<filters>80 2</filters>
<nuclides>total</nuclides>
<scores>flux</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="78">
<filters>80 2</filters>
<nuclides>total</nuclides>
<scores>fission</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="79">
<filters>80 2</filters>
<nuclides>total</nuclides>
<scores>flux</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="80">
<filters>80 2</filters>
<nuclides>total</nuclides>
<scores>nu-fission</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="81">
<filters>80 2</filters>
<nuclides>total</nuclides>
<scores>flux</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="82">
<filters>80 2</filters>
<nuclides>total</nuclides>
<scores>kappa-fission</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="83">
<filters>80 2</filters>
<nuclides>total</nuclides>
<scores>flux</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="84">
<filters>80 2</filters>
<nuclides>total</nuclides>
<scores>scatter</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="85">
<filters>80 2</filters>
<nuclides>total</nuclides>
<scores>flux</scores>
<estimator>analog</estimator>
</tally>
<tally id="86">
<filters>80 2</filters>
<nuclides>total</nuclides>
<scores>nu-scatter</scores>
<estimator>analog</estimator>
</tally>
<tally id="87">
<filters>80 2</filters>
<nuclides>total</nuclides>
<scores>flux</scores>
<estimator>analog</estimator>
</tally>
<tally id="88">
<filters>80 2 5 28</filters>
<nuclides>total</nuclides>
<scores>scatter</scores>
<estimator>analog</estimator>
</tally>
<tally id="89">
<filters>80 2</filters>
<nuclides>total</nuclides>
<scores>flux</scores>
<estimator>analog</estimator>
</tally>
<tally id="90">
<filters>80 2 5 28</filters>
<nuclides>total</nuclides>
<scores>nu-scatter</scores>
<estimator>analog</estimator>
</tally>
<tally id="91">
<filters>80 2 5</filters>
<nuclides>total</nuclides>
<scores>nu-scatter</scores>
<estimator>analog</estimator>
</tally>
<tally id="92">
<filters>80 2 5</filters>
<nuclides>total</nuclides>
<scores>scatter</scores>
<estimator>analog</estimator>
</tally>
<tally id="93">
<filters>80 2</filters>
<nuclides>total</nuclides>
<scores>flux</scores>
<estimator>analog</estimator>
</tally>
<tally id="94">
<filters>80 2 5</filters>
<nuclides>total</nuclides>
<scores>nu-fission</scores>
<estimator>analog</estimator>
</tally>
<tally id="95">
<filters>80 2 5</filters>
<nuclides>total</nuclides>
<scores>scatter</scores>
<estimator>analog</estimator>
</tally>
<tally id="96">
<filters>80 2</filters>
<nuclides>total</nuclides>
<scores>flux</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="97">
<filters>80 2</filters>
<nuclides>total</nuclides>
<scores>scatter</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="98">
<filters>80 2 5 28</filters>
<nuclides>total</nuclides>
<scores>scatter</scores>
<estimator>analog</estimator>
</tally>
<tally id="99">
<filters>80 2</filters>
<nuclides>total</nuclides>
<scores>flux</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="100">
<filters>80 2</filters>
<nuclides>total</nuclides>
<scores>scatter</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="101">
<filters>80 2 5 28</filters>
<nuclides>total</nuclides>
<scores>scatter</scores>
<estimator>analog</estimator>
</tally>
<tally id="102">
<filters>80 2 5</filters>
<nuclides>total</nuclides>
<scores>nu-scatter</scores>
<estimator>analog</estimator>
</tally>
<tally id="103">
<filters>80 52</filters>
<nuclides>total</nuclides>
<scores>nu-fission</scores>
<estimator>analog</estimator>
</tally>
<tally id="104">
<filters>80 5</filters>
<nuclides>total</nuclides>
<scores>nu-fission</scores>
<estimator>analog</estimator>
</tally>
<tally id="105">
<filters>80 52</filters>
<nuclides>total</nuclides>
<scores>prompt-nu-fission</scores>
<estimator>analog</estimator>
</tally>
<tally id="106">
<filters>80 5</filters>
<nuclides>total</nuclides>
<scores>prompt-nu-fission</scores>
<estimator>analog</estimator>
</tally>
<tally id="107">
<filters>80 2</filters>
<nuclides>total</nuclides>
<scores>flux</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="108">
<filters>80 2</filters>
<nuclides>total</nuclides>
<scores>inverse-velocity</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="109">
<filters>80 2</filters>
<nuclides>total</nuclides>
<scores>flux</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="110">
<filters>80 2</filters>
<nuclides>total</nuclides>
<scores>prompt-nu-fission</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="111">
<filters>80 2</filters>
<nuclides>total</nuclides>
<scores>flux</scores>
<estimator>analog</estimator>
</tally>
<tally id="112">
<filters>80 2 5</filters>
<nuclides>total</nuclides>
<scores>prompt-nu-fission</scores>
<estimator>analog</estimator>
</tally>
<tally id="113">
<filters>80 2</filters>
<nuclides>total</nuclides>
<scores>flux</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="114">
<filters>80 65 2</filters>
<nuclides>total</nuclides>
<scores>delayed-nu-fission</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="115">
<filters>80 65 52</filters>
<nuclides>total</nuclides>
<scores>delayed-nu-fission</scores>
<estimator>analog</estimator>
</tally>
<tally id="116">
<filters>80 65 5</filters>
<nuclides>total</nuclides>
<scores>delayed-nu-fission</scores>
<estimator>analog</estimator>
</tally>
<tally id="117">
<filters>80 2</filters>
<nuclides>total</nuclides>
<scores>nu-fission</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="118">
<filters>80 65 2</filters>
<nuclides>total</nuclides>
<scores>delayed-nu-fission</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="119">
<filters>80 65 2</filters>
<nuclides>total</nuclides>
<scores>delayed-nu-fission</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="120">
<filters>80 65 2</filters>
<nuclides>total</nuclides>
<scores>decay-rate</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="121">
<filters>80 2</filters>
<nuclides>total</nuclides>
<scores>flux</scores>
<estimator>analog</estimator>
</tally>
<tally id="122">
<filters>80 65 2 5</filters>
<nuclides>total</nuclides>
<scores>delayed-nu-fission</scores>
<estimator>analog</estimator>
</tally>
<tally id="123">
<filters>159 2</filters>
<nuclides>total</nuclides>
<scores>flux</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="124">
<filters>159 2</filters>
<nuclides>total</nuclides>
<scores>total</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="125">
<filters>159 2</filters>
<nuclides>total</nuclides>
<scores>flux</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="126">
<filters>159 2</filters>
<nuclides>total</nuclides>
<scores>total</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="127">
<filters>159 2</filters>
<nuclides>total</nuclides>
<scores>flux</scores>
<estimator>analog</estimator>
</tally>
<tally id="128">
<filters>159 5 6</filters>
<nuclides>total</nuclides>
<scores>scatter</scores>
<estimator>analog</estimator>
</tally>
<tally id="129">
<filters>159 2</filters>
<nuclides>total</nuclides>
<scores>flux</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="130">
<filters>159 2</filters>
<nuclides>total</nuclides>
<scores>total</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="131">
<filters>159 2</filters>
<nuclides>total</nuclides>
<scores>flux</scores>
<estimator>analog</estimator>
</tally>
<tally id="132">
<filters>159 5 6</filters>
<nuclides>total</nuclides>
<scores>nu-scatter</scores>
<estimator>analog</estimator>
</tally>
<tally id="133">
<filters>159 2</filters>
<nuclides>total</nuclides>
<scores>flux</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="134">
<filters>159 2</filters>
<nuclides>total</nuclides>
<scores>absorption</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="135">
<filters>159 2</filters>
<nuclides>total</nuclides>
<scores>flux</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="136">
<filters>159 2</filters>
<nuclides>total</nuclides>
<scores>absorption</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="137">
<filters>159 2</filters>
<nuclides>total</nuclides>
<scores>fission</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="138">
<filters>159 2</filters>
<nuclides>total</nuclides>
<scores>flux</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="139">
<filters>159 2</filters>
<nuclides>total</nuclides>
<scores>fission</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="140">
<filters>159 2</filters>
<nuclides>total</nuclides>
<scores>flux</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="141">
<filters>159 2</filters>
<nuclides>total</nuclides>
<scores>nu-fission</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="142">
<filters>159 2</filters>
<nuclides>total</nuclides>
<scores>flux</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="143">
<filters>159 2</filters>
<nuclides>total</nuclides>
<scores>kappa-fission</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="144">
<filters>159 2</filters>
<nuclides>total</nuclides>
<scores>flux</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="145">
<filters>159 2</filters>
<nuclides>total</nuclides>
<scores>scatter</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="146">
<filters>159 2</filters>
<nuclides>total</nuclides>
<scores>flux</scores>
<estimator>analog</estimator>
</tally>
<tally id="147">
<filters>159 2</filters>
<nuclides>total</nuclides>
<scores>nu-scatter</scores>
<estimator>analog</estimator>
</tally>
<tally id="148">
<filters>159 2</filters>
<nuclides>total</nuclides>
<scores>flux</scores>
<estimator>analog</estimator>
</tally>
<tally id="149">
<filters>159 2 5 28</filters>
<nuclides>total</nuclides>
<scores>scatter</scores>
<estimator>analog</estimator>
</tally>
<tally id="150">
<filters>159 2</filters>
<nuclides>total</nuclides>
<scores>flux</scores>
<estimator>analog</estimator>
</tally>
<tally id="151">
<filters>159 2 5 28</filters>
<nuclides>total</nuclides>
<scores>nu-scatter</scores>
<estimator>analog</estimator>
</tally>
<tally id="152">
<filters>159 2 5</filters>
<nuclides>total</nuclides>
<scores>nu-scatter</scores>
<estimator>analog</estimator>
</tally>
<tally id="153">
<filters>159 2 5</filters>
<nuclides>total</nuclides>
<scores>scatter</scores>
<estimator>analog</estimator>
</tally>
<tally id="154">
<filters>159 2</filters>
<nuclides>total</nuclides>
<scores>flux</scores>
<estimator>analog</estimator>
</tally>
<tally id="155">
<filters>159 2 5</filters>
<nuclides>total</nuclides>
<scores>nu-fission</scores>
<estimator>analog</estimator>
</tally>
<tally id="156">
<filters>159 2 5</filters>
<nuclides>total</nuclides>
<scores>scatter</scores>
<estimator>analog</estimator>
</tally>
<tally id="157">
<filters>159 2</filters>
<nuclides>total</nuclides>
<scores>flux</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="158">
<filters>159 2</filters>
<nuclides>total</nuclides>
<scores>scatter</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="159">
<filters>159 2 5 28</filters>
<nuclides>total</nuclides>
<scores>scatter</scores>
<estimator>analog</estimator>
</tally>
<tally id="160">
<filters>159 2</filters>
<nuclides>total</nuclides>
<scores>flux</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="161">
<filters>159 2</filters>
<nuclides>total</nuclides>
<scores>scatter</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="162">
<filters>159 2 5 28</filters>
<nuclides>total</nuclides>
<scores>scatter</scores>
<estimator>analog</estimator>
</tally>
<tally id="163">
<filters>159 2 5</filters>
<nuclides>total</nuclides>
<scores>nu-scatter</scores>
<estimator>analog</estimator>
</tally>
<tally id="164">
<filters>159 52</filters>
<nuclides>total</nuclides>
<scores>nu-fission</scores>
<estimator>analog</estimator>
</tally>
<tally id="165">
<filters>159 5</filters>
<nuclides>total</nuclides>
<scores>nu-fission</scores>
<estimator>analog</estimator>
</tally>
<tally id="166">
<filters>159 52</filters>
<nuclides>total</nuclides>
<scores>prompt-nu-fission</scores>
<estimator>analog</estimator>
</tally>
<tally id="167">
<filters>159 5</filters>
<nuclides>total</nuclides>
<scores>prompt-nu-fission</scores>
<estimator>analog</estimator>
</tally>
<tally id="168">
<filters>159 2</filters>
<nuclides>total</nuclides>
<scores>flux</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="169">
<filters>159 2</filters>
<nuclides>total</nuclides>
<scores>inverse-velocity</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="170">
<filters>159 2</filters>
<nuclides>total</nuclides>
<scores>flux</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="171">
<filters>159 2</filters>
<nuclides>total</nuclides>
<scores>prompt-nu-fission</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="172">
<filters>159 2</filters>
<nuclides>total</nuclides>
<scores>flux</scores>
<estimator>analog</estimator>
</tally>
<tally id="173">
<filters>159 2 5</filters>
<nuclides>total</nuclides>
<scores>prompt-nu-fission</scores>
<estimator>analog</estimator>
</tally>
<tally id="174">
<filters>159 2</filters>
<nuclides>total</nuclides>
<scores>flux</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="175">
<filters>159 65 2</filters>
<nuclides>total</nuclides>
<scores>delayed-nu-fission</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="176">
<filters>159 65 52</filters>
<nuclides>total</nuclides>
<scores>delayed-nu-fission</scores>
<estimator>analog</estimator>
</tally>
<tally id="177">
<filters>159 65 5</filters>
<nuclides>total</nuclides>
<scores>delayed-nu-fission</scores>
<estimator>analog</estimator>
</tally>
<tally id="178">
<filters>159 2</filters>
<nuclides>total</nuclides>
<scores>nu-fission</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="179">
<filters>159 65 2</filters>
<nuclides>total</nuclides>
<scores>delayed-nu-fission</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="180">
<filters>159 65 2</filters>
<nuclides>total</nuclides>
<scores>delayed-nu-fission</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="181">
<filters>159 65 2</filters>
<nuclides>total</nuclides>
<scores>decay-rate</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="182">
<filters>159 2</filters>
<nuclides>total</nuclides>
<scores>flux</scores>
<estimator>analog</estimator>
</tally>
<tally id="183">
<filters>159 65 2 5</filters>
<filters>1 69 2 5</filters>
<nuclides>total</nuclides>
<scores>delayed-nu-fission</scores>
<estimator>analog</estimator>

View file

@ -1,273 +1,344 @@
material group in nuclide mean std. dev.
0 1 1 total 0.453624 0.021053
material group in nuclide mean std. dev.
0 1 1 total 0.4074 0.021863
material group in nuclide mean std. dev.
0 1 1 total 0.4074 0.021863
material group in nuclide mean std. dev.
0 1 1 total 0.064903 0.004313
material group in nuclide mean std. dev.
0 1 1 total 0.028048 0.00458
material group in nuclide mean std. dev.
0 1 1 total 0.036855 0.002622
material group in nuclide mean std. dev.
0 1 1 total 0.090649 0.00641
material group in nuclide mean std. dev.
0 1 1 total 7.137954e+06 507363.467231
material group in nuclide mean std. dev.
0 1 1 total 0.388721 0.01783
material group in nuclide mean std. dev.
0 1 1 total 0.389304 0.023076
material group in group out legendre nuclide mean std. dev.
0 1 1 1 P0 total 0.389304 0.023146
1 1 1 1 P1 total 0.046224 0.005907
2 1 1 1 P2 total 0.017984 0.002883
3 1 1 1 P3 total 0.006628 0.002457
material group in group out legendre nuclide mean std. dev.
0 1 1 1 P0 total 0.389304 0.023146
1 1 1 1 P1 total 0.046224 0.005907
2 1 1 1 P2 total 0.017984 0.002883
3 1 1 1 P3 total 0.006628 0.002457
material group in group out nuclide mean std. dev.
0 1 1 1 total 1.0 0.066111
material group in group out nuclide mean std. dev.
0 1 1 1 total 0.085835 0.005592
material group in group out nuclide mean std. dev.
0 1 1 1 total 1.0 0.066111
material group in group out legendre nuclide mean std. dev.
0 1 1 1 P0 total 0.388721 0.031279
1 1 1 1 P1 total 0.046155 0.006407
2 1 1 1 P2 total 0.017957 0.003039
3 1 1 1 P3 total 0.006618 0.002480
material group in group out legendre nuclide mean std. dev.
0 1 1 1 P0 total 0.388721 0.040482
1 1 1 1 P1 total 0.046155 0.007097
2 1 1 1 P2 total 0.017957 0.003262
3 1 1 1 P3 total 0.006618 0.002518
material group out nuclide mean std. dev.
0 1 1 total 1.0 0.046071
material group out nuclide mean std. dev.
0 1 1 total 1.0 0.051471
material group in nuclide mean std. dev.
0 1 1 total 4.996730e-07 3.650633e-08
material group in nuclide mean std. dev.
0 1 1 total 0.090004 0.006367
material group in group out nuclide mean std. dev.
0 1 1 1 total 0.084542 0.005716
material delayedgroup group in nuclide mean std. dev.
0 1 1 1 total 0.000021 0.000001
1 1 2 1 total 0.000110 0.000008
2 1 3 1 total 0.000107 0.000007
3 1 4 1 total 0.000249 0.000017
4 1 5 1 total 0.000112 0.000007
5 1 6 1 total 0.000046 0.000003
material delayedgroup group out nuclide mean std. dev.
0 1 1 1 total 0.0 0.000000
1 1 2 1 total 1.0 0.869128
2 1 3 1 total 1.0 1.414214
3 1 4 1 total 1.0 0.360359
4 1 5 1 total 0.0 0.000000
5 1 6 1 total 0.0 0.000000
material delayedgroup group in nuclide mean std. dev.
0 1 1 1 total 0.000227 0.000020
1 1 2 1 total 0.001214 0.000108
2 1 3 1 total 0.001184 0.000104
3 1 4 1 total 0.002752 0.000240
4 1 5 1 total 0.001231 0.000105
5 1 6 1 total 0.000512 0.000044
material delayedgroup group in nuclide mean std. dev.
0 1 1 1 total 0.013355 0.001207
1 1 2 1 total 0.032600 0.002866
2 1 3 1 total 0.121083 0.010442
3 1 4 1 total 0.305910 0.025627
4 1 5 1 total 0.861934 0.068281
5 1 6 1 total 2.895065 0.230223
material delayedgroup group in group out nuclide mean std. dev.
0 1 1 1 1 total 0.000000 0.000000
1 1 2 1 1 total 0.000384 0.000236
2 1 3 1 1 total 0.000179 0.000180
3 1 4 1 1 total 0.000730 0.000188
4 1 5 1 1 total 0.000000 0.000000
5 1 6 1 1 total 0.000000 0.000000
material group in nuclide mean std. dev.
0 2 1 total 0.311594 0.013793
material group in nuclide mean std. dev.
0 2 1 total 0.280977 0.015683
material group in nuclide mean std. dev.
0 2 1 total 0.280977 0.015683
material group in nuclide mean std. dev.
0 2 1 total 0.00221 0.000286
material group in nuclide mean std. dev.
0 2 1 total 0.00221 0.000286
material group in nuclide mean std. dev.
0 2 1 total 0.0 0.0
material group in nuclide mean std. dev.
0 2 1 total 0.0 0.0
material group in nuclide mean std. dev.
0 2 1 total 0.0 0.0
material group in nuclide mean std. dev.
0 2 1 total 0.309384 0.013551
material group in nuclide mean std. dev.
0 2 1 total 0.307987 0.029308
material group in group out legendre nuclide mean std. dev.
0 2 1 1 P0 total 0.307987 0.029308
1 2 1 1 P1 total 0.030617 0.007464
2 2 1 1 P2 total 0.018911 0.004323
3 2 1 1 P3 total 0.006235 0.003338
material group in group out legendre nuclide mean std. dev.
0 2 1 1 P0 total 0.307987 0.029308
1 2 1 1 P1 total 0.030617 0.007464
2 2 1 1 P2 total 0.018911 0.004323
3 2 1 1 P3 total 0.006235 0.003338
material group in group out nuclide mean std. dev.
0 2 1 1 total 1.0 0.095039
material group in group out nuclide mean std. dev.
0 2 1 1 total 0.0 0.0
material group in group out nuclide mean std. dev.
0 2 1 1 total 1.0 0.095039
material group in group out legendre nuclide mean std. dev.
0 2 1 1 P0 total 0.309384 0.032376
1 2 1 1 P1 total 0.030756 0.007617
2 2 1 1 P2 total 0.018997 0.004420
3 2 1 1 P3 total 0.006263 0.003364
material group in group out legendre nuclide mean std. dev.
0 2 1 1 P0 total 0.309384 0.043735
1 2 1 1 P1 total 0.030756 0.008159
2 2 1 1 P2 total 0.018997 0.004775
3 2 1 1 P3 total 0.006263 0.003417
material group out nuclide mean std. dev.
0 2 1 total 0.0 0.0
material group out nuclide mean std. dev.
0 2 1 total 0.0 0.0
material group in nuclide mean std. dev.
0 2 1 total 5.454762e-07 4.949807e-08
material group in nuclide mean std. dev.
0 2 1 total 0.0 0.0
material group in group out nuclide mean std. dev.
0 2 1 1 total 0.0 0.0
material delayedgroup group in nuclide mean std. dev.
0 2 1 1 total 0.0 0.0
1 2 2 1 total 0.0 0.0
2 2 3 1 total 0.0 0.0
3 2 4 1 total 0.0 0.0
4 2 5 1 total 0.0 0.0
5 2 6 1 total 0.0 0.0
material delayedgroup group out nuclide mean std. dev.
0 2 1 1 total 0.0 0.0
1 2 2 1 total 0.0 0.0
2 2 3 1 total 0.0 0.0
3 2 4 1 total 0.0 0.0
4 2 5 1 total 0.0 0.0
5 2 6 1 total 0.0 0.0
material delayedgroup group in nuclide mean std. dev.
0 2 1 1 total 0.0 0.0
1 2 2 1 total 0.0 0.0
2 2 3 1 total 0.0 0.0
3 2 4 1 total 0.0 0.0
4 2 5 1 total 0.0 0.0
5 2 6 1 total 0.0 0.0
material delayedgroup group in nuclide mean std. dev.
0 2 1 1 total 0.0 0.0
1 2 2 1 total 0.0 0.0
2 2 3 1 total 0.0 0.0
3 2 4 1 total 0.0 0.0
4 2 5 1 total 0.0 0.0
5 2 6 1 total 0.0 0.0
material delayedgroup group in group out nuclide mean std. dev.
0 2 1 1 1 total 0.0 0.0
1 2 2 1 1 total 0.0 0.0
2 2 3 1 1 total 0.0 0.0
3 2 4 1 1 total 0.0 0.0
4 2 5 1 1 total 0.0 0.0
5 2 6 1 1 total 0.0 0.0
material group in nuclide mean std. dev.
0 3 1 total 0.904999 0.043964
material group in nuclide mean std. dev.
0 3 1 total 0.494581 0.046763
material group in nuclide mean std. dev.
0 3 1 total 0.494581 0.046763
material group in nuclide mean std. dev.
0 3 1 total 0.00606 0.000555
material group in nuclide mean std. dev.
0 3 1 total 0.00606 0.000555
material group in nuclide mean std. dev.
0 3 1 total 0.0 0.0
material group in nuclide mean std. dev.
0 3 1 total 0.0 0.0
material group in nuclide mean std. dev.
0 3 1 total 0.0 0.0
material group in nuclide mean std. dev.
0 3 1 total 0.898938 0.043493
material group in nuclide mean std. dev.
0 3 1 total 0.903415 0.043959
material group in group out legendre nuclide mean std. dev.
0 3 1 1 P0 total 0.903415 0.043586
1 3 1 1 P1 total 0.410417 0.015877
2 3 1 1 P2 total 0.143301 0.007187
3 3 1 1 P3 total 0.008739 0.003571
material group in group out legendre nuclide mean std. dev.
0 3 1 1 P0 total 0.903415 0.043586
1 3 1 1 P1 total 0.410417 0.015877
2 3 1 1 P2 total 0.143301 0.007187
3 3 1 1 P3 total 0.008739 0.003571
material group in group out nuclide mean std. dev.
0 3 1 1 total 1.0 0.056867
material group in group out nuclide mean std. dev.
0 3 1 1 total 0.0 0.0
material group in group out nuclide mean std. dev.
0 3 1 1 total 1.0 0.056867
material group in group out legendre nuclide mean std. dev.
0 3 1 1 P0 total 0.898938 0.067118
1 3 1 1 P1 total 0.408384 0.028127
2 3 1 1 P2 total 0.142591 0.010824
3 3 1 1 P3 total 0.008696 0.003588
material group in group out legendre nuclide mean std. dev.
0 3 1 1 P0 total 0.898938 0.084369
1 3 1 1 P1 total 0.408384 0.036475
2 3 1 1 P2 total 0.142591 0.013525
3 3 1 1 P3 total 0.008696 0.003622
material group out nuclide mean std. dev.
0 3 1 total 0.0 0.0
material group out nuclide mean std. dev.
0 3 1 total 0.0 0.0
material group in nuclide mean std. dev.
0 3 1 total 5.773007e-07 5.322133e-08
material group in nuclide mean std. dev.
0 3 1 total 0.0 0.0
material group in group out nuclide mean std. dev.
0 3 1 1 total 0.0 0.0
material delayedgroup group in nuclide mean std. dev.
0 3 1 1 total 0.0 0.0
1 3 2 1 total 0.0 0.0
2 3 3 1 total 0.0 0.0
3 3 4 1 total 0.0 0.0
4 3 5 1 total 0.0 0.0
5 3 6 1 total 0.0 0.0
material delayedgroup group out nuclide mean std. dev.
0 3 1 1 total 0.0 0.0
1 3 2 1 total 0.0 0.0
2 3 3 1 total 0.0 0.0
3 3 4 1 total 0.0 0.0
4 3 5 1 total 0.0 0.0
5 3 6 1 total 0.0 0.0
material delayedgroup group in nuclide mean std. dev.
0 3 1 1 total 0.0 0.0
1 3 2 1 total 0.0 0.0
2 3 3 1 total 0.0 0.0
3 3 4 1 total 0.0 0.0
4 3 5 1 total 0.0 0.0
5 3 6 1 total 0.0 0.0
material delayedgroup group in nuclide mean std. dev.
0 3 1 1 total 0.0 0.0
1 3 2 1 total 0.0 0.0
2 3 3 1 total 0.0 0.0
3 3 4 1 total 0.0 0.0
4 3 5 1 total 0.0 0.0
5 3 6 1 total 0.0 0.0
material delayedgroup group in group out nuclide mean std. dev.
0 3 1 1 1 total 0.0 0.0
1 3 2 1 1 total 0.0 0.0
2 3 3 1 1 total 0.0 0.0
3 3 4 1 1 total 0.0 0.0
4 3 5 1 1 total 0.0 0.0
5 3 6 1 1 total 0.0 0.0
mesh 1 group in nuclide mean std. dev.
x y z
0 1 1 1 1 total 0.689569 0.031419
2 1 2 1 1 total 0.699649 0.037450
1 2 1 1 1 total 0.714582 0.039410
3 2 2 1 1 total 0.703950 0.032472
mesh 1 group in nuclide mean std. dev.
x y z
0 1 1 1 1 total 0.439891 0.034895
2 1 2 1 1 total 0.439954 0.039793
1 2 1 1 1 total 0.464255 0.041680
3 2 2 1 1 total 0.448543 0.035418
mesh 1 group in nuclide mean std. dev.
x y z
0 1 1 1 1 total 0.439891 0.034895
2 1 2 1 1 total 0.439954 0.039793
1 2 1 1 1 total 0.464255 0.041680
3 2 2 1 1 total 0.448543 0.035418
mesh 1 group in nuclide mean std. dev.
x y z
0 1 1 1 1 total 0.022628 0.001277
2 1 2 1 1 total 0.023156 0.001846
1 2 1 1 1 total 0.025056 0.002068
3 2 2 1 1 total 0.023894 0.001806
mesh 1 group in nuclide mean std. dev.
x y z
0 1 1 1 1 total 0.011639 0.001313
2 1 2 1 1 total 0.011902 0.001887
1 2 1 1 1 total 0.013610 0.002138
3 2 2 1 1 total 0.012379 0.001964
mesh 1 group in nuclide mean std. dev.
x y z
0 1 1 1 1 total 0.010989 0.000600
2 1 2 1 1 total 0.011254 0.000888
1 2 1 1 1 total 0.011446 0.000917
3 2 2 1 1 total 0.011515 0.001091
mesh 1 group in nuclide mean std. dev.
x y z
0 1 1 1 1 total 0.027048 0.001467
2 1 2 1 1 total 0.027679 0.002173
1 2 1 1 1 total 0.028152 0.002239
3 2 2 1 1 total 0.028305 0.002664
mesh 1 group in nuclide mean std. dev.
x y z
0 1 1 1 1 total 2.128551e+06 116174.136443
2 1 2 1 1 total 2.179625e+06 171863.153028
1 2 1 1 1 total 2.216815e+06 177355.380518
3 2 2 1 1 total 2.229909e+06 211056.365380
mesh 1 group in nuclide mean std. dev.
x y z
0 1 1 1 1 total 0.666941 0.030331
2 1 2 1 1 total 0.676493 0.035733
1 2 1 1 1 total 0.689526 0.037499
3 2 2 1 1 total 0.680056 0.031192
mesh 1 group in nuclide mean std. dev.
x y z
0 1 1 1 1 total 0.666776 0.041465
2 1 2 1 1 total 0.681119 0.037897
1 2 1 1 1 total 0.680135 0.040329
3 2 2 1 1 total 0.673685 0.034317
mesh 1 group in group out legendre nuclide mean std. dev.
x y z
0 1 1 1 1 1 P0 total 0.666776 0.040502
1 1 1 1 1 1 P1 total 0.249678 0.015165
2 1 1 1 1 1 P2 total 0.084904 0.007439
3 1 1 1 1 1 P3 total 0.004671 0.003362
8 1 2 1 1 1 P0 total 0.681119 0.037746
9 1 2 1 1 1 P1 total 0.259694 0.013458
10 1 2 1 1 1 P2 total 0.093376 0.006988
11 1 2 1 1 1 P3 total 0.009055 0.004266
4 2 1 1 1 1 P0 total 0.680135 0.039913
5 2 1 1 1 1 P1 total 0.250326 0.013593
6 2 1 1 1 1 P2 total 0.094891 0.008015
7 2 1 1 1 1 P3 total 0.012214 0.002309
12 2 2 1 1 1 P0 total 0.673685 0.034716
13 2 2 1 1 1 P1 total 0.255408 0.014000
14 2 2 1 1 1 P2 total 0.087139 0.006220
15 2 2 1 1 1 P3 total 0.005092 0.005661
mesh 1 group in group out legendre nuclide mean std. dev.
x y z
0 1 1 1 1 1 P0 total 0.666776 0.040502
1 1 1 1 1 1 P1 total 0.249678 0.015165
2 1 1 1 1 1 P2 total 0.084904 0.007439
3 1 1 1 1 1 P3 total 0.004671 0.003362
8 1 2 1 1 1 P0 total 0.681119 0.037746
9 1 2 1 1 1 P1 total 0.259694 0.013458
10 1 2 1 1 1 P2 total 0.093376 0.006988
11 1 2 1 1 1 P3 total 0.009055 0.004266
4 2 1 1 1 1 P0 total 0.680135 0.039913
5 2 1 1 1 1 P1 total 0.250326 0.013593
6 2 1 1 1 1 P2 total 0.094891 0.008015
7 2 1 1 1 1 P3 total 0.012214 0.002309
12 2 2 1 1 1 P0 total 0.673685 0.034716
13 2 2 1 1 1 P1 total 0.255408 0.014000
14 2 2 1 1 1 P2 total 0.087139 0.006220
15 2 2 1 1 1 P3 total 0.005092 0.005661
mesh 1 group in group out nuclide mean std. dev.
x y z
0 1 1 1 1 1 total 1.0 0.070099
2 1 2 1 1 1 total 1.0 0.062344
1 2 1 1 1 1 total 1.0 0.062771
3 2 2 1 1 1 total 1.0 0.049705
mesh 1 group in group out nuclide mean std. dev.
x y z
0 1 1 1 1 1 total 0.028673 0.004228
2 1 2 1 1 1 total 0.026964 0.003732
1 2 1 1 1 1 total 0.026070 0.003550
3 2 2 1 1 1 total 0.024753 0.003145
mesh 1 group in group out nuclide mean std. dev.
x y z
0 1 1 1 1 1 total 1.0 0.070099
2 1 2 1 1 1 total 1.0 0.062344
1 2 1 1 1 1 total 1.0 0.062771
3 2 2 1 1 1 total 1.0 0.049705
mesh 1 group in group out legendre nuclide mean std. dev.
x y z
0 1 1 1 1 1 P0 total 0.666941 0.055729
1 1 1 1 1 1 P1 total 0.249740 0.020867
2 1 1 1 1 1 P2 total 0.084925 0.008895
3 1 1 1 1 1 P3 total 0.004673 0.003374
8 1 2 1 1 1 P0 total 0.676493 0.055277
9 1 2 1 1 1 P1 total 0.257931 0.020458
10 1 2 1 1 1 P2 total 0.092742 0.008898
11 1 2 1 1 1 P3 total 0.008994 0.004272
4 2 1 1 1 1 P0 total 0.689526 0.057267
5 2 1 1 1 1 P1 total 0.253783 0.020306
6 2 1 1 1 1 P2 total 0.096202 0.009899
7 2 1 1 1 1 P3 total 0.012383 0.002451
12 2 2 1 1 1 P0 total 0.680056 0.045995
13 2 2 1 1 1 P1 total 0.257823 0.018090
14 2 2 1 1 1 P2 total 0.087963 0.007367
15 2 2 1 1 1 P3 total 0.005140 0.005719
mesh 1 group in group out legendre nuclide mean std. dev.
x y z
0 1 1 1 1 1 P0 total 0.666941 0.072742
1 1 1 1 1 1 P1 total 0.249740 0.027238
2 1 1 1 1 1 P2 total 0.084925 0.010703
3 1 1 1 1 1 P3 total 0.004673 0.003390
8 1 2 1 1 1 P0 total 0.676493 0.069529
9 1 2 1 1 1 P1 total 0.257931 0.026022
10 1 2 1 1 1 P2 total 0.092742 0.010612
11 1 2 1 1 1 P3 total 0.008994 0.004308
4 2 1 1 1 1 P0 total 0.689526 0.071784
5 2 1 1 1 1 P1 total 0.253783 0.025809
6 2 1 1 1 1 P2 total 0.096202 0.011596
7 2 1 1 1 1 P3 total 0.012383 0.002571
12 2 2 1 1 1 P0 total 0.680056 0.057080
13 2 2 1 1 1 P1 total 0.257823 0.022170
14 2 2 1 1 1 P2 total 0.087963 0.008567
15 2 2 1 1 1 P3 total 0.005140 0.005725
mesh 1 group out nuclide mean std. dev.
x y z
0 1 1 1 1 total 1.0 0.121554
2 1 2 1 1 total 1.0 0.216579
1 2 1 1 1 total 1.0 0.183339
3 2 2 1 1 total 1.0 0.153219
mesh 1 group out nuclide mean std. dev.
x y z
0 1 1 1 1 total 1.0 0.115075
2 1 2 1 1 total 1.0 0.214629
1 2 1 1 1 total 1.0 0.193610
3 2 2 1 1 total 1.0 0.149674
mesh 1 group in nuclide mean std. dev.
x y z
0 1 1 1 1 total 5.326584e-07 4.351904e-08
2 1 2 1 1 total 5.450392e-07 5.612731e-08
1 2 1 1 1 total 5.715661e-07 6.214803e-08
3 2 2 1 1 total 5.509404e-07 4.361226e-08
mesh 1 group in nuclide mean std. dev.
x y z
0 1 1 1 1 total 0.026854 0.001457
2 1 2 1 1 total 0.027482 0.002158
1 2 1 1 1 total 0.027951 0.002224
3 2 2 1 1 total 0.028105 0.002647
mesh 1 group in group out nuclide mean std. dev.
x y z
0 1 1 1 1 1 total 0.028472 0.004077
2 1 2 1 1 1 total 0.026236 0.003570
1 2 1 1 1 1 total 0.025851 0.003683
3 2 2 1 1 1 total 0.024301 0.002974
mesh 1 group in nuclide mean std. dev.
x y surf
3 1 1 x-max in 1 total 4.570 0.073566
2 1 1 x-max out 1 total 4.566 0.097365
1 1 1 x-min in 1 total 0.000 0.000000
0 1 1 x-min out 1 total 0.000 0.000000
7 1 1 y-max in 1 total 4.544 0.163303
6 1 1 y-max out 1 total 4.524 0.143457
5 1 1 y-min in 1 total 0.000 0.000000
4 1 1 y-min out 1 total 0.000 0.000000
19 1 2 x-max in 1 total 4.446 0.192083
18 1 2 x-max out 1 total 4.448 0.134907
17 1 2 x-min in 1 total 0.000 0.000000
16 1 2 x-min out 1 total 0.000 0.000000
23 1 2 y-max in 1 total 0.000 0.000000
22 1 2 y-max out 1 total 0.000 0.000000
21 1 2 y-min in 1 total 4.524 0.143457
20 1 2 y-min out 1 total 4.544 0.163303
11 2 1 x-max in 1 total 0.000 0.000000
10 2 1 x-max out 1 total 0.000 0.000000
9 2 1 x-min in 1 total 4.566 0.097365
8 2 1 x-min out 1 total 4.570 0.073566
15 2 1 y-max in 1 total 4.422 0.100270
14 2 1 y-max out 1 total 4.424 0.145141
13 2 1 y-min in 1 total 0.000 0.000000
12 2 1 y-min out 1 total 0.000 0.000000
27 2 2 x-max in 1 total 0.000 0.000000
26 2 2 x-max out 1 total 0.000 0.000000
25 2 2 x-min in 1 total 4.448 0.134907
24 2 2 x-min out 1 total 4.446 0.192083
31 2 2 y-max in 1 total 0.000 0.000000
30 2 2 y-max out 1 total 0.000 0.000000
29 2 2 y-min in 1 total 4.424 0.145141
28 2 2 y-min out 1 total 4.422 0.100270
mesh 1 delayedgroup group in nuclide mean std. dev.
x y z
0 1 1 1 1 1 total 0.000006 3.337014e-07
1 1 1 1 2 1 total 0.000033 1.744448e-06
2 1 1 1 3 1 total 0.000032 1.680053e-06
3 1 1 1 4 1 total 0.000075 3.832256e-06
4 1 1 1 5 1 total 0.000034 1.657860e-06
5 1 1 1 6 1 total 0.000014 6.911218e-07
12 1 2 1 1 1 total 0.000006 4.935854e-07
13 1 2 1 2 1 total 0.000034 2.586377e-06
14 1 2 1 3 1 total 0.000033 2.493442e-06
15 1 2 1 4 1 total 0.000076 5.693867e-06
16 1 2 1 5 1 total 0.000034 2.461606e-06
17 1 2 1 6 1 total 0.000014 1.026406e-06
6 2 1 1 1 1 total 0.000006 5.092712e-07
7 2 1 1 2 1 total 0.000034 2.652677e-06
8 2 1 1 3 1 total 0.000033 2.547698e-06
9 2 1 1 4 1 total 0.000077 5.777683e-06
10 2 1 1 5 1 total 0.000035 2.451184e-06
11 2 1 1 6 1 total 0.000014 1.023674e-06
18 2 2 1 1 1 total 0.000006 6.058589e-07
19 2 2 1 2 1 total 0.000034 3.154428e-06
20 2 2 1 3 1 total 0.000033 3.028038e-06
21 2 2 1 4 1 total 0.000077 6.857868e-06
22 2 2 1 5 1 total 0.000034 2.893043e-06
23 2 2 1 6 1 total 0.000014 1.208895e-06
mesh 1 delayedgroup group out nuclide mean std. dev.
x y z
0 1 1 1 1 1 total 0.0 0.000000
1 1 1 1 2 1 total 0.0 0.000000
2 1 1 1 3 1 total 0.0 0.000000
3 1 1 1 4 1 total 1.0 1.414214
4 1 1 1 5 1 total 0.0 0.000000
5 1 1 1 6 1 total 0.0 0.000000
12 1 2 1 1 1 total 0.0 0.000000
13 1 2 1 2 1 total 1.0 1.414214
14 1 2 1 3 1 total 0.0 0.000000
15 1 2 1 4 1 total 1.0 0.867638
16 1 2 1 5 1 total 0.0 0.000000
17 1 2 1 6 1 total 0.0 0.000000
6 2 1 1 1 1 total 0.0 0.000000
7 2 1 1 2 1 total 0.0 0.000000
8 2 1 1 3 1 total 1.0 1.414214
9 2 1 1 4 1 total 0.0 0.000000
10 2 1 1 5 1 total 0.0 0.000000
11 2 1 1 6 1 total 0.0 0.000000
18 2 2 1 1 1 total 0.0 0.000000
19 2 2 1 2 1 total 1.0 1.414214
20 2 2 1 3 1 total 0.0 0.000000
21 2 2 1 4 1 total 1.0 1.414214
22 2 2 1 5 1 total 0.0 0.000000
23 2 2 1 6 1 total 0.0 0.000000
mesh 1 delayedgroup group in nuclide mean std. dev.
x y z
0 1 1 1 1 1 total 0.000227 0.000016
1 1 1 1 2 1 total 0.001217 0.000083
2 1 1 1 3 1 total 0.001189 0.000081
3 1 1 1 4 1 total 0.002771 0.000185
4 1 1 1 5 1 total 0.001247 0.000082
5 1 1 1 6 1 total 0.000518 0.000034
12 1 2 1 1 1 total 0.000227 0.000023
13 1 2 1 2 1 total 0.001215 0.000119
14 1 2 1 3 1 total 0.001185 0.000115
15 1 2 1 4 1 total 0.002755 0.000266
16 1 2 1 5 1 total 0.001234 0.000117
17 1 2 1 6 1 total 0.000513 0.000049
6 2 1 1 1 1 total 0.000227 0.000024
7 2 1 1 2 1 total 0.001213 0.000124
8 2 1 1 3 1 total 0.001183 0.000120
9 2 1 1 4 1 total 0.002748 0.000275
10 2 1 1 5 1 total 0.001228 0.000119
11 2 1 1 6 1 total 0.000511 0.000050
18 2 2 1 1 1 total 0.000227 0.000028
19 2 2 1 2 1 total 0.001210 0.000149
20 2 2 1 3 1 total 0.001179 0.000144
21 2 2 1 4 1 total 0.002732 0.000330
22 2 2 1 5 1 total 0.001214 0.000143
23 2 2 1 6 1 total 0.000505 0.000059
mesh 1 delayedgroup group in nuclide mean std. dev.
x y z
0 1 1 1 1 1 total 0.013357 0.000929
1 1 1 1 2 1 total 0.032589 0.002199
2 1 1 1 3 1 total 0.121106 0.008007
3 1 1 1 4 1 total 0.306140 0.019650
4 1 1 1 5 1 total 0.862764 0.052685
5 1 1 1 6 1 total 2.897892 0.177498
12 1 2 1 1 1 total 0.013356 0.001330
13 1 2 1 2 1 total 0.032598 0.003165
14 1 2 1 3 1 total 0.121086 0.011554
15 1 2 1 4 1 total 0.305948 0.028460
16 1 2 1 5 1 total 0.862070 0.076649
17 1 2 1 6 1 total 2.895530 0.258195
6 2 1 1 1 1 total 0.013355 0.001389
7 2 1 1 2 1 total 0.032601 0.003293
8 2 1 1 3 1 total 0.121079 0.011980
9 2 1 1 4 1 total 0.305874 0.029310
10 2 1 1 5 1 total 0.861802 0.077464
11 2 1 1 6 1 total 2.894617 0.261360
18 2 2 1 1 1 total 0.013354 0.001670
19 2 2 1 2 1 total 0.032610 0.003972
20 2 2 1 3 1 total 0.121059 0.014468
21 2 2 1 4 1 total 0.305680 0.035462
22 2 2 1 5 1 total 0.861087 0.093863
23 2 2 1 6 1 total 2.892185 0.316700
mesh 1 delayedgroup group in group out nuclide mean std. dev.
x y z
0 1 1 1 1 1 1 total 0.000000 0.000000
1 1 1 1 2 1 1 total 0.000000 0.000000
2 1 1 1 3 1 1 total 0.000000 0.000000
3 1 1 1 4 1 1 total 0.000201 0.000201
4 1 1 1 5 1 1 total 0.000000 0.000000
5 1 1 1 6 1 1 total 0.000000 0.000000
12 1 2 1 1 1 1 total 0.000000 0.000000
13 1 2 1 2 1 1 total 0.000250 0.000250
14 1 2 1 3 1 1 total 0.000000 0.000000
15 1 2 1 4 1 1 total 0.000477 0.000293
16 1 2 1 5 1 1 total 0.000000 0.000000
17 1 2 1 6 1 1 total 0.000000 0.000000
6 2 1 1 1 1 1 total 0.000000 0.000000
7 2 1 1 2 1 1 total 0.000000 0.000000
8 2 1 1 3 1 1 total 0.000220 0.000220
9 2 1 1 4 1 1 total 0.000000 0.000000
10 2 1 1 5 1 1 total 0.000000 0.000000
11 2 1 1 6 1 1 total 0.000000 0.000000
18 2 2 1 1 1 1 total 0.000000 0.000000
19 2 2 1 2 1 1 total 0.000226 0.000226
20 2 2 1 3 1 1 total 0.000000 0.000000
21 2 2 1 4 1 1 total 0.000226 0.000226
22 2 2 1 5 1 1 total 0.000000 0.000000
23 2 2 1 6 1 1 total 0.000000 0.000000

View file

@ -24,7 +24,15 @@ class MGXSTestHarness(PyAPITestHarness):
self.mgxs_lib.energy_groups = energy_groups
self.mgxs_lib.num_delayed_groups = 6
self.mgxs_lib.legendre_order = 3
self.mgxs_lib.domain_type = 'material'
self.mgxs_lib.domain_type = 'mesh'
# Instantiate a tally mesh
mesh = openmc.RegularMesh(mesh_id=1)
mesh.dimension = [2, 2]
mesh.lower_left = [-100., -100.]
mesh.width = [100., 100.]
self.mgxs_lib.domains = [mesh]
self.mgxs_lib.build_library()
# Add tallies

View file

@ -22,8 +22,10 @@ class MGXSTestHarness(PyAPITestHarness):
self.mgxs_lib = openmc.mgxs.Library(self._model.geometry)
self.mgxs_lib.by_nuclide = False
# Test all MGXS types
self.mgxs_lib.mgxs_types = openmc.mgxs.MGXS_TYPES + \
# Test all relevant MGXS types
relevant_MGXS_TYPES = [item for item in openmc.mgxs.MGXS_TYPES
if item != 'current']
self.mgxs_lib.mgxs_types = tuple(relevant_MGXS_TYPES) + \
openmc.mgxs.MDGXS_TYPES
self.mgxs_lib.energy_groups = energy_groups
self.mgxs_lib.num_delayed_groups = 6

View file

@ -50,7 +50,12 @@
</settings>
<?xml version='1.0' encoding='utf-8'?>
<tallies>
<filter id="1" type="material">
<mesh id="1">
<dimension>2 2</dimension>
<lower_left>-100.0 -100.0</lower_left>
<width>100.0 100.0</width>
</mesh>
<filter id="1" type="mesh">
<bins>1</bins>
</filter>
<filter id="2" type="energy">
@ -68,15 +73,12 @@
<filter id="52" type="energy">
<bins>0.0 20000000.0</bins>
</filter>
<filter id="65" type="delayedgroup">
<filter id="66" type="meshsurface">
<bins>1</bins>
</filter>
<filter id="69" type="delayedgroup">
<bins>1 2 3 4 5 6</bins>
</filter>
<filter id="80" type="material">
<bins>2</bins>
</filter>
<filter id="159" type="material">
<bins>3</bins>
</filter>
<tally id="1">
<filters>1 2</filters>
<nuclides>total</nuclides>
@ -384,793 +386,67 @@
<estimator>analog</estimator>
</tally>
<tally id="52">
<filters>66 2</filters>
<nuclides>total</nuclides>
<scores>current</scores>
<estimator>analog</estimator>
</tally>
<tally id="53">
<filters>1 2</filters>
<nuclides>total</nuclides>
<scores>flux</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="53">
<filters>1 65 2</filters>
<tally id="54">
<filters>1 69 2</filters>
<nuclides>total</nuclides>
<scores>delayed-nu-fission</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="54">
<filters>1 65 52</filters>
<nuclides>total</nuclides>
<scores>delayed-nu-fission</scores>
<estimator>analog</estimator>
</tally>
<tally id="55">
<filters>1 65 5</filters>
<filters>1 69 52</filters>
<nuclides>total</nuclides>
<scores>delayed-nu-fission</scores>
<estimator>analog</estimator>
</tally>
<tally id="56">
<filters>1 69 5</filters>
<nuclides>total</nuclides>
<scores>delayed-nu-fission</scores>
<estimator>analog</estimator>
</tally>
<tally id="57">
<filters>1 2</filters>
<nuclides>total</nuclides>
<scores>nu-fission</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="57">
<filters>1 65 2</filters>
<nuclides>total</nuclides>
<scores>delayed-nu-fission</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="58">
<filters>1 65 2</filters>
<filters>1 69 2</filters>
<nuclides>total</nuclides>
<scores>delayed-nu-fission</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="59">
<filters>1 65 2</filters>
<filters>1 69 2</filters>
<nuclides>total</nuclides>
<scores>delayed-nu-fission</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="60">
<filters>1 69 2</filters>
<nuclides>total</nuclides>
<scores>decay-rate</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="60">
<tally id="61">
<filters>1 2</filters>
<nuclides>total</nuclides>
<scores>flux</scores>
<estimator>analog</estimator>
</tally>
<tally id="61">
<filters>1 65 2 5</filters>
<nuclides>total</nuclides>
<scores>delayed-nu-fission</scores>
<estimator>analog</estimator>
</tally>
<tally id="62">
<filters>80 2</filters>
<nuclides>total</nuclides>
<scores>flux</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="63">
<filters>80 2</filters>
<nuclides>total</nuclides>
<scores>total</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="64">
<filters>80 2</filters>
<nuclides>total</nuclides>
<scores>flux</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="65">
<filters>80 2</filters>
<nuclides>total</nuclides>
<scores>total</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="66">
<filters>80 2</filters>
<nuclides>total</nuclides>
<scores>flux</scores>
<estimator>analog</estimator>
</tally>
<tally id="67">
<filters>80 5 6</filters>
<nuclides>total</nuclides>
<scores>scatter</scores>
<estimator>analog</estimator>
</tally>
<tally id="68">
<filters>80 2</filters>
<nuclides>total</nuclides>
<scores>flux</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="69">
<filters>80 2</filters>
<nuclides>total</nuclides>
<scores>total</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="70">
<filters>80 2</filters>
<nuclides>total</nuclides>
<scores>flux</scores>
<estimator>analog</estimator>
</tally>
<tally id="71">
<filters>80 5 6</filters>
<nuclides>total</nuclides>
<scores>nu-scatter</scores>
<estimator>analog</estimator>
</tally>
<tally id="72">
<filters>80 2</filters>
<nuclides>total</nuclides>
<scores>flux</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="73">
<filters>80 2</filters>
<nuclides>total</nuclides>
<scores>absorption</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="74">
<filters>80 2</filters>
<nuclides>total</nuclides>
<scores>flux</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="75">
<filters>80 2</filters>
<nuclides>total</nuclides>
<scores>absorption</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="76">
<filters>80 2</filters>
<nuclides>total</nuclides>
<scores>fission</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="77">
<filters>80 2</filters>
<nuclides>total</nuclides>
<scores>flux</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="78">
<filters>80 2</filters>
<nuclides>total</nuclides>
<scores>fission</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="79">
<filters>80 2</filters>
<nuclides>total</nuclides>
<scores>flux</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="80">
<filters>80 2</filters>
<nuclides>total</nuclides>
<scores>nu-fission</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="81">
<filters>80 2</filters>
<nuclides>total</nuclides>
<scores>flux</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="82">
<filters>80 2</filters>
<nuclides>total</nuclides>
<scores>kappa-fission</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="83">
<filters>80 2</filters>
<nuclides>total</nuclides>
<scores>flux</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="84">
<filters>80 2</filters>
<nuclides>total</nuclides>
<scores>scatter</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="85">
<filters>80 2</filters>
<nuclides>total</nuclides>
<scores>flux</scores>
<estimator>analog</estimator>
</tally>
<tally id="86">
<filters>80 2</filters>
<nuclides>total</nuclides>
<scores>nu-scatter</scores>
<estimator>analog</estimator>
</tally>
<tally id="87">
<filters>80 2</filters>
<nuclides>total</nuclides>
<scores>flux</scores>
<estimator>analog</estimator>
</tally>
<tally id="88">
<filters>80 2 5 28</filters>
<nuclides>total</nuclides>
<scores>scatter</scores>
<estimator>analog</estimator>
</tally>
<tally id="89">
<filters>80 2</filters>
<nuclides>total</nuclides>
<scores>flux</scores>
<estimator>analog</estimator>
</tally>
<tally id="90">
<filters>80 2 5 28</filters>
<nuclides>total</nuclides>
<scores>nu-scatter</scores>
<estimator>analog</estimator>
</tally>
<tally id="91">
<filters>80 2 5</filters>
<nuclides>total</nuclides>
<scores>nu-scatter</scores>
<estimator>analog</estimator>
</tally>
<tally id="92">
<filters>80 2 5</filters>
<nuclides>total</nuclides>
<scores>scatter</scores>
<estimator>analog</estimator>
</tally>
<tally id="93">
<filters>80 2</filters>
<nuclides>total</nuclides>
<scores>flux</scores>
<estimator>analog</estimator>
</tally>
<tally id="94">
<filters>80 2 5</filters>
<nuclides>total</nuclides>
<scores>nu-fission</scores>
<estimator>analog</estimator>
</tally>
<tally id="95">
<filters>80 2 5</filters>
<nuclides>total</nuclides>
<scores>scatter</scores>
<estimator>analog</estimator>
</tally>
<tally id="96">
<filters>80 2</filters>
<nuclides>total</nuclides>
<scores>flux</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="97">
<filters>80 2</filters>
<nuclides>total</nuclides>
<scores>scatter</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="98">
<filters>80 2 5 28</filters>
<nuclides>total</nuclides>
<scores>scatter</scores>
<estimator>analog</estimator>
</tally>
<tally id="99">
<filters>80 2</filters>
<nuclides>total</nuclides>
<scores>flux</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="100">
<filters>80 2</filters>
<nuclides>total</nuclides>
<scores>scatter</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="101">
<filters>80 2 5 28</filters>
<nuclides>total</nuclides>
<scores>scatter</scores>
<estimator>analog</estimator>
</tally>
<tally id="102">
<filters>80 2 5</filters>
<nuclides>total</nuclides>
<scores>nu-scatter</scores>
<estimator>analog</estimator>
</tally>
<tally id="103">
<filters>80 52</filters>
<nuclides>total</nuclides>
<scores>nu-fission</scores>
<estimator>analog</estimator>
</tally>
<tally id="104">
<filters>80 5</filters>
<nuclides>total</nuclides>
<scores>nu-fission</scores>
<estimator>analog</estimator>
</tally>
<tally id="105">
<filters>80 52</filters>
<nuclides>total</nuclides>
<scores>prompt-nu-fission</scores>
<estimator>analog</estimator>
</tally>
<tally id="106">
<filters>80 5</filters>
<nuclides>total</nuclides>
<scores>prompt-nu-fission</scores>
<estimator>analog</estimator>
</tally>
<tally id="107">
<filters>80 2</filters>
<nuclides>total</nuclides>
<scores>flux</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="108">
<filters>80 2</filters>
<nuclides>total</nuclides>
<scores>inverse-velocity</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="109">
<filters>80 2</filters>
<nuclides>total</nuclides>
<scores>flux</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="110">
<filters>80 2</filters>
<nuclides>total</nuclides>
<scores>prompt-nu-fission</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="111">
<filters>80 2</filters>
<nuclides>total</nuclides>
<scores>flux</scores>
<estimator>analog</estimator>
</tally>
<tally id="112">
<filters>80 2 5</filters>
<nuclides>total</nuclides>
<scores>prompt-nu-fission</scores>
<estimator>analog</estimator>
</tally>
<tally id="113">
<filters>80 2</filters>
<nuclides>total</nuclides>
<scores>flux</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="114">
<filters>80 65 2</filters>
<nuclides>total</nuclides>
<scores>delayed-nu-fission</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="115">
<filters>80 65 52</filters>
<nuclides>total</nuclides>
<scores>delayed-nu-fission</scores>
<estimator>analog</estimator>
</tally>
<tally id="116">
<filters>80 65 5</filters>
<nuclides>total</nuclides>
<scores>delayed-nu-fission</scores>
<estimator>analog</estimator>
</tally>
<tally id="117">
<filters>80 2</filters>
<nuclides>total</nuclides>
<scores>nu-fission</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="118">
<filters>80 65 2</filters>
<nuclides>total</nuclides>
<scores>delayed-nu-fission</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="119">
<filters>80 65 2</filters>
<nuclides>total</nuclides>
<scores>delayed-nu-fission</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="120">
<filters>80 65 2</filters>
<nuclides>total</nuclides>
<scores>decay-rate</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="121">
<filters>80 2</filters>
<nuclides>total</nuclides>
<scores>flux</scores>
<estimator>analog</estimator>
</tally>
<tally id="122">
<filters>80 65 2 5</filters>
<nuclides>total</nuclides>
<scores>delayed-nu-fission</scores>
<estimator>analog</estimator>
</tally>
<tally id="123">
<filters>159 2</filters>
<nuclides>total</nuclides>
<scores>flux</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="124">
<filters>159 2</filters>
<nuclides>total</nuclides>
<scores>total</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="125">
<filters>159 2</filters>
<nuclides>total</nuclides>
<scores>flux</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="126">
<filters>159 2</filters>
<nuclides>total</nuclides>
<scores>total</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="127">
<filters>159 2</filters>
<nuclides>total</nuclides>
<scores>flux</scores>
<estimator>analog</estimator>
</tally>
<tally id="128">
<filters>159 5 6</filters>
<nuclides>total</nuclides>
<scores>scatter</scores>
<estimator>analog</estimator>
</tally>
<tally id="129">
<filters>159 2</filters>
<nuclides>total</nuclides>
<scores>flux</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="130">
<filters>159 2</filters>
<nuclides>total</nuclides>
<scores>total</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="131">
<filters>159 2</filters>
<nuclides>total</nuclides>
<scores>flux</scores>
<estimator>analog</estimator>
</tally>
<tally id="132">
<filters>159 5 6</filters>
<nuclides>total</nuclides>
<scores>nu-scatter</scores>
<estimator>analog</estimator>
</tally>
<tally id="133">
<filters>159 2</filters>
<nuclides>total</nuclides>
<scores>flux</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="134">
<filters>159 2</filters>
<nuclides>total</nuclides>
<scores>absorption</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="135">
<filters>159 2</filters>
<nuclides>total</nuclides>
<scores>flux</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="136">
<filters>159 2</filters>
<nuclides>total</nuclides>
<scores>absorption</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="137">
<filters>159 2</filters>
<nuclides>total</nuclides>
<scores>fission</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="138">
<filters>159 2</filters>
<nuclides>total</nuclides>
<scores>flux</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="139">
<filters>159 2</filters>
<nuclides>total</nuclides>
<scores>fission</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="140">
<filters>159 2</filters>
<nuclides>total</nuclides>
<scores>flux</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="141">
<filters>159 2</filters>
<nuclides>total</nuclides>
<scores>nu-fission</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="142">
<filters>159 2</filters>
<nuclides>total</nuclides>
<scores>flux</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="143">
<filters>159 2</filters>
<nuclides>total</nuclides>
<scores>kappa-fission</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="144">
<filters>159 2</filters>
<nuclides>total</nuclides>
<scores>flux</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="145">
<filters>159 2</filters>
<nuclides>total</nuclides>
<scores>scatter</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="146">
<filters>159 2</filters>
<nuclides>total</nuclides>
<scores>flux</scores>
<estimator>analog</estimator>
</tally>
<tally id="147">
<filters>159 2</filters>
<nuclides>total</nuclides>
<scores>nu-scatter</scores>
<estimator>analog</estimator>
</tally>
<tally id="148">
<filters>159 2</filters>
<nuclides>total</nuclides>
<scores>flux</scores>
<estimator>analog</estimator>
</tally>
<tally id="149">
<filters>159 2 5 28</filters>
<nuclides>total</nuclides>
<scores>scatter</scores>
<estimator>analog</estimator>
</tally>
<tally id="150">
<filters>159 2</filters>
<nuclides>total</nuclides>
<scores>flux</scores>
<estimator>analog</estimator>
</tally>
<tally id="151">
<filters>159 2 5 28</filters>
<nuclides>total</nuclides>
<scores>nu-scatter</scores>
<estimator>analog</estimator>
</tally>
<tally id="152">
<filters>159 2 5</filters>
<nuclides>total</nuclides>
<scores>nu-scatter</scores>
<estimator>analog</estimator>
</tally>
<tally id="153">
<filters>159 2 5</filters>
<nuclides>total</nuclides>
<scores>scatter</scores>
<estimator>analog</estimator>
</tally>
<tally id="154">
<filters>159 2</filters>
<nuclides>total</nuclides>
<scores>flux</scores>
<estimator>analog</estimator>
</tally>
<tally id="155">
<filters>159 2 5</filters>
<nuclides>total</nuclides>
<scores>nu-fission</scores>
<estimator>analog</estimator>
</tally>
<tally id="156">
<filters>159 2 5</filters>
<nuclides>total</nuclides>
<scores>scatter</scores>
<estimator>analog</estimator>
</tally>
<tally id="157">
<filters>159 2</filters>
<nuclides>total</nuclides>
<scores>flux</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="158">
<filters>159 2</filters>
<nuclides>total</nuclides>
<scores>scatter</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="159">
<filters>159 2 5 28</filters>
<nuclides>total</nuclides>
<scores>scatter</scores>
<estimator>analog</estimator>
</tally>
<tally id="160">
<filters>159 2</filters>
<nuclides>total</nuclides>
<scores>flux</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="161">
<filters>159 2</filters>
<nuclides>total</nuclides>
<scores>scatter</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="162">
<filters>159 2 5 28</filters>
<nuclides>total</nuclides>
<scores>scatter</scores>
<estimator>analog</estimator>
</tally>
<tally id="163">
<filters>159 2 5</filters>
<nuclides>total</nuclides>
<scores>nu-scatter</scores>
<estimator>analog</estimator>
</tally>
<tally id="164">
<filters>159 52</filters>
<nuclides>total</nuclides>
<scores>nu-fission</scores>
<estimator>analog</estimator>
</tally>
<tally id="165">
<filters>159 5</filters>
<nuclides>total</nuclides>
<scores>nu-fission</scores>
<estimator>analog</estimator>
</tally>
<tally id="166">
<filters>159 52</filters>
<nuclides>total</nuclides>
<scores>prompt-nu-fission</scores>
<estimator>analog</estimator>
</tally>
<tally id="167">
<filters>159 5</filters>
<nuclides>total</nuclides>
<scores>prompt-nu-fission</scores>
<estimator>analog</estimator>
</tally>
<tally id="168">
<filters>159 2</filters>
<nuclides>total</nuclides>
<scores>flux</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="169">
<filters>159 2</filters>
<nuclides>total</nuclides>
<scores>inverse-velocity</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="170">
<filters>159 2</filters>
<nuclides>total</nuclides>
<scores>flux</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="171">
<filters>159 2</filters>
<nuclides>total</nuclides>
<scores>prompt-nu-fission</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="172">
<filters>159 2</filters>
<nuclides>total</nuclides>
<scores>flux</scores>
<estimator>analog</estimator>
</tally>
<tally id="173">
<filters>159 2 5</filters>
<nuclides>total</nuclides>
<scores>prompt-nu-fission</scores>
<estimator>analog</estimator>
</tally>
<tally id="174">
<filters>159 2</filters>
<nuclides>total</nuclides>
<scores>flux</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="175">
<filters>159 65 2</filters>
<nuclides>total</nuclides>
<scores>delayed-nu-fission</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="176">
<filters>159 65 52</filters>
<nuclides>total</nuclides>
<scores>delayed-nu-fission</scores>
<estimator>analog</estimator>
</tally>
<tally id="177">
<filters>159 65 5</filters>
<nuclides>total</nuclides>
<scores>delayed-nu-fission</scores>
<estimator>analog</estimator>
</tally>
<tally id="178">
<filters>159 2</filters>
<nuclides>total</nuclides>
<scores>nu-fission</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="179">
<filters>159 65 2</filters>
<nuclides>total</nuclides>
<scores>delayed-nu-fission</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="180">
<filters>159 65 2</filters>
<nuclides>total</nuclides>
<scores>delayed-nu-fission</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="181">
<filters>159 65 2</filters>
<nuclides>total</nuclides>
<scores>decay-rate</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="182">
<filters>159 2</filters>
<nuclides>total</nuclides>
<scores>flux</scores>
<estimator>analog</estimator>
</tally>
<tally id="183">
<filters>159 65 2 5</filters>
<filters>1 69 2 5</filters>
<nuclides>total</nuclides>
<scores>delayed-nu-fission</scores>
<estimator>analog</estimator>

View file

@ -1,366 +1,212 @@
domain=1 type=total
[4.14825464e-01 6.60169863e-01]
[2.27929104e-02 4.75189000e-02]
[5.38564635e-01 1.45554552e+00]
[2.15102394e-02 1.74671506e-01]
domain=1 type=transport
[3.63092031e-01 6.44850709e-01]
[2.38384842e-02 4.76746410e-02]
[3.10133076e-01 1.09725336e+00]
[2.65671384e-02 1.80883943e-01]
domain=1 type=nu-transport
[3.63092031e-01 6.44850709e-01]
[2.38384842e-02 4.76746410e-02]
[3.10133076e-01 1.09725336e+00]
[2.65671384e-02 1.80883943e-01]
domain=1 type=absorption
[2.74078431e-02 2.64510714e-01]
[2.69249666e-03 2.33670618e-02]
[8.45377250e-03 9.45269817e-02]
[7.33458615e-04 9.19713128e-03]
domain=1 type=capture
[1.98445482e-02 7.17193458e-02]
[2.64330389e-03 2.52078411e-02]
[6.06155218e-03 3.99297631e-02]
[7.22875857e-04 7.50886804e-03]
domain=1 type=fission
[7.56329484e-03 1.92791369e-01]
[5.08483893e-04 1.71059103e-02]
[2.39222032e-03 5.45972186e-02]
[8.69881114e-05 5.15800900e-03]
domain=1 type=nu-fission
[1.94317397e-02 4.69774728e-01]
[1.32297610e-03 4.16819717e-02]
[6.15310797e-03 1.33037043e-01]
[2.31371327e-04 1.25685205e-02]
domain=1 type=kappa-fission
[1.47456979e+06 3.72868925e+07]
[9.92353624e+04 3.30837549e+06]
[4.66497048e+05 1.05593971e+07]
[1.70456489e+04 9.97586814e+05]
domain=1 type=scatter
[3.87417621e-01 3.95659148e-01]
[2.06257342e-02 2.51250448e-02]
[5.30110862e-01 1.36101853e+00]
[2.09707684e-02 1.66399963e-01]
domain=1 type=nu-scatter
[3.85188361e-01 4.12389370e-01]
[2.69456191e-02 1.54252759e-02]
[5.26423506e-01 1.38428396e+00]
[3.53738379e-02 1.81243556e-01]
domain=1 type=scatter matrix
[[[3.84199430e-01 5.18702806e-02 2.00688439e-02 9.47771502e-03]
[9.88930322e-04 -2.07234582e-04 -1.03366173e-04 2.34290606e-04]]
[[[5.09394630e-01 2.28431559e-01 8.87144474e-02 9.90358757e-03]
[1.70288754e-02 5.08756263e-03 -1.29619140e-03 -2.29397464e-03]]
[[9.24639842e-04 -7.67704913e-04 4.93788836e-04 -1.71497217e-04]
[4.11464730e-01 1.64817268e-02 6.37149004e-03 -1.04991213e-02]]]
[[[2.70010116e-02 6.98254837e-03 2.84649498e-03 2.23351961e-03]
[4.82419410e-04 1.49010765e-04 1.84316299e-04 1.28173102e-04]]
[[0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]
[1.38428396e+00 3.32283490e-01 7.20522379e-02 -1.03495292e-02]]]
[[[3.32592286e-02 1.55923841e-02 8.46899584e-03 3.36789772e-03]
[2.33802794e-03 1.01739476e-03 6.77938532e-04 7.77067821e-04]]
[[9.24883397e-04 7.67907131e-04 4.93918903e-04 1.71542390e-04]
[1.52449343e-02 4.50172764e-03 1.05507486e-02 1.04381870e-02]]]
[[0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]
[1.81243556e-01 4.54455205e-02 1.40301767e-02 1.06726205e-02]]]
domain=1 type=nu-scatter matrix
[[[3.84199430e-01 5.18702806e-02 2.00688439e-02 9.47771502e-03]
[9.88930322e-04 -2.07234582e-04 -1.03366173e-04 2.34290606e-04]]
[[[5.09394630e-01 2.28431559e-01 8.87144474e-02 9.90358757e-03]
[1.70288754e-02 5.08756263e-03 -1.29619140e-03 -2.29397464e-03]]
[[9.24639842e-04 -7.67704913e-04 4.93788836e-04 -1.71497217e-04]
[4.11464730e-01 1.64817268e-02 6.37149004e-03 -1.04991213e-02]]]
[[[2.70010116e-02 6.98254837e-03 2.84649498e-03 2.23351961e-03]
[4.82419410e-04 1.49010765e-04 1.84316299e-04 1.28173102e-04]]
[[0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]
[1.38428396e+00 3.32283490e-01 7.20522379e-02 -1.03495292e-02]]]
[[[3.32592286e-02 1.55923841e-02 8.46899584e-03 3.36789772e-03]
[2.33802794e-03 1.01739476e-03 6.77938532e-04 7.77067821e-04]]
[[9.24883397e-04 7.67907131e-04 4.93918903e-04 1.71542390e-04]
[1.52449343e-02 4.50172764e-03 1.05507486e-02 1.04381870e-02]]]
[[0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]
[1.81243556e-01 4.54455205e-02 1.40301767e-02 1.06726205e-02]]]
domain=1 type=multiplicity matrix
[[1.00000000e+00 1.00000000e+00]
[1.00000000e+00 1.00000000e+00]]
[[7.85164550e-02 6.87184271e-01]
[1.41421356e+00 4.11303488e-02]]
[0.00000000e+00 1.00000000e+00]]
[[7.36409657e-02 1.86006410e-01]
[0.00000000e+00 1.52524077e-01]]
domain=1 type=nu-fission matrix
[[2.01424221e-02 0.00000000e+00]
[4.54366342e-01 0.00000000e+00]]
[[3.14909051e-03 0.00000000e+00]
[2.74255160e-02 0.00000000e+00]]
[[6.38661278e-03 0.00000000e+00]
[1.42604897e-01 0.00000000e+00]]
[[1.95163368e-03 0.00000000e+00]
[2.53807844e-02 0.00000000e+00]]
domain=1 type=scatter probability matrix
[[9.97432606e-01 2.56739409e-03]
[2.24215247e-03 9.97757848e-01]]
[[7.82243018e-02 1.25560869e-03]
[2.24310192e-03 4.10531468e-02]]
[[9.67651757e-01 3.23482428e-02]
[0.00000000e+00 1.00000000e+00]]
[[7.02365009e-02 4.55825691e-03]
[0.00000000e+00 1.52524077e-01]]
domain=1 type=consistent scatter matrix
[[[3.86422967e-01 5.21704775e-02 2.01849914e-02 9.53256688e-03]
[9.94653712e-04 -2.08433942e-04 -1.03964400e-04 2.35646553e-04]]
[[[5.12962708e-01 2.30031618e-01 8.93358517e-02 9.97295769e-03]
[1.71481549e-02 5.12319869e-03 -1.30527063e-03 -2.31004289e-03]]
[[8.87128136e-04 -7.36559899e-04 4.73756321e-04 -1.64539748e-04]
[3.94772020e-01 1.58130798e-02 6.11300510e-03 -1.00731826e-02]]]
[[[3.66286904e-02 7.76748967e-03 3.13767805e-03 2.32683668e-03]
[4.89318749e-04 1.50458419e-04 1.85500930e-04 1.29783343e-04]]
[[0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]
[1.36101853e+00 3.26698857e-01 7.08412681e-02 -1.01755864e-02]]]
[[[4.24038637e-02 1.95589805e-02 9.65642635e-03 3.42897188e-03]
[2.50979721e-03 1.05693435e-03 6.85887105e-04 7.91226772e-04]]
[[8.89289900e-04 7.38354757e-04 4.74910776e-04 1.64940700e-04]
[2.98710065e-02 4.44330993e-03 1.01307463e-02 1.00367467e-02]]]
[[0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]
[2.66048427e-01 6.51550937e-02 1.72051955e-02 1.05966869e-02]]]
domain=1 type=consistent nu-scatter matrix
[[[3.86422967e-01 5.21704775e-02 2.01849914e-02 9.53256688e-03]
[9.94653712e-04 -2.08433942e-04 -1.03964400e-04 2.35646553e-04]]
[[[5.12962708e-01 2.30031618e-01 8.93358517e-02 9.97295769e-03]
[1.71481549e-02 5.12319869e-03 -1.30527063e-03 -2.31004289e-03]]
[[8.87128136e-04 -7.36559899e-04 4.73756321e-04 -1.64539748e-04]
[3.94772020e-01 1.58130798e-02 6.11300510e-03 -1.00731826e-02]]]
[[[4.75627021e-02 8.78140568e-03 3.51522199e-03 2.44425169e-03]
[8.40606499e-04 2.07733706e-04 1.98782933e-04 2.07523215e-04]]
[[0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]
[1.36101853e+00 3.26698857e-01 7.08412681e-02 -1.01755864e-02]]]
[[[5.67894665e-02 2.58748694e-02 1.16844724e-02 3.50673899e-03]
[4.05870125e-03 1.42310215e-03 7.27590183e-04 9.00370534e-04]]
[[1.53780011e-03 1.27679627e-03 8.21237084e-04 2.85222881e-04]
[3.39988353e-02 4.49065920e-03 1.01338659e-02 1.00452944e-02]]]
[[0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]
[3.37453083e-01 8.20253589e-02 2.03166620e-02 1.07097407e-02]]]
domain=1 type=chi
[1.00000000e+00 0.00000000e+00]
[4.60705491e-02 0.00000000e+00]
[1.21553680e-01 0.00000000e+00]
domain=1 type=chi-prompt
[1.00000000e+00 0.00000000e+00]
[5.14714842e-02 0.00000000e+00]
[1.15074880e-01 0.00000000e+00]
domain=1 type=inverse-velocity
[5.70932437e-08 2.85573948e-06]
[4.68793809e-09 2.44216369e-07]
[5.82407705e-08 2.93916338e-06]
[3.57468034e-09 3.31327050e-07]
domain=1 type=prompt-nu-fission
[1.92392209e-02 4.66718979e-01]
[1.30950644e-03 4.14108425e-02]
[6.09158918e-03 1.32171675e-01]
[2.28563531e-04 1.24867659e-02]
domain=1 type=prompt-nu-fission matrix
[[2.01424221e-02 0.00000000e+00]
[4.45819054e-01 0.00000000e+00]]
[[3.14909051e-03 0.00000000e+00]
[2.86750876e-02 0.00000000e+00]]
[[6.38661278e-03 0.00000000e+00]
[1.41378615e-01 0.00000000e+00]]
[[1.95163368e-03 0.00000000e+00]
[2.44103846e-02 0.00000000e+00]]
domain=1 type=current
[[[0.00000000e+00 0.00000000e+00 3.85400000e+00 3.80400000e+00
0.00000000e+00 0.00000000e+00 3.74600000e+00 3.80200000e+00]
[0.00000000e+00 0.00000000e+00 7.12000000e-01 7.66000000e-01
0.00000000e+00 0.00000000e+00 7.78000000e-01 7.42000000e-01]]
[[3.80400000e+00 3.85400000e+00 0.00000000e+00 0.00000000e+00
0.00000000e+00 0.00000000e+00 3.70400000e+00 3.65000000e+00]
[7.66000000e-01 7.12000000e-01 0.00000000e+00 0.00000000e+00
0.00000000e+00 0.00000000e+00 7.20000000e-01 7.72000000e-01]]
[[0.00000000e+00 0.00000000e+00 3.70600000e+00 3.74600000e+00
3.80200000e+00 3.74600000e+00 0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00 7.42000000e-01 7.00000000e-01
7.42000000e-01 7.78000000e-01 0.00000000e+00 0.00000000e+00]]
[[3.74600000e+00 3.70600000e+00 0.00000000e+00 0.00000000e+00
3.65000000e+00 3.70400000e+00 0.00000000e+00 0.00000000e+00]
[7.00000000e-01 7.42000000e-01 0.00000000e+00 0.00000000e+00
7.72000000e-01 7.20000000e-01 0.00000000e+00 0.00000000e+00]]]
[[[0.00000000e+00 0.00000000e+00 8.57088093e-02 5.04579032e-02
0.00000000e+00 0.00000000e+00 1.33551488e-01 1.58789168e-01]
[0.00000000e+00 0.00000000e+00 4.61952378e-02 5.35350353e-02
0.00000000e+00 0.00000000e+00 5.23832034e-02 3.81313519e-02]]
[[5.04579032e-02 8.57088093e-02 0.00000000e+00 0.00000000e+00
0.00000000e+00 0.00000000e+00 1.39089899e-01 8.87693641e-02]
[5.35350353e-02 4.61952378e-02 0.00000000e+00 0.00000000e+00
0.00000000e+00 0.00000000e+00 4.14728827e-02 4.66261729e-02]]
[[0.00000000e+00 0.00000000e+00 1.32838248e-01 1.90383823e-01
1.58789168e-01 1.33551488e-01 0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00 2.35372046e-02 2.54950976e-02
3.81313519e-02 5.23832034e-02 0.00000000e+00 0.00000000e+00]]
[[1.90383823e-01 1.32838248e-01 0.00000000e+00 0.00000000e+00
8.87693641e-02 1.39089899e-01 0.00000000e+00 0.00000000e+00]
[2.54950976e-02 2.35372046e-02 0.00000000e+00 0.00000000e+00
4.66261729e-02 4.14728827e-02 0.00000000e+00 0.00000000e+00]]]
domain=1 type=delayed-nu-fission
[[4.31687649e-06 1.06974147e-04]
[2.69760050e-05 5.52167849e-04]
[2.84366794e-05 5.27147626e-04]
[7.42603126e-05 1.18190938e-03]
[4.14908415e-05 4.84567103e-04]
[1.70015984e-05 2.02983424e-04]]
[[2.89748551e-07 9.49155602e-06]
[1.85003750e-06 4.89925096e-05]
[1.97097929e-06 4.67725252e-05]
[5.22610328e-06 1.04867938e-04]
[2.99830754e-06 4.29944540e-05]
[1.22654681e-06 1.80102229e-05]]
[[1.36657452e-06 3.02943589e-05]
[8.57921019e-06 1.56370222e-04]
[9.06240193e-06 1.49284664e-04]
[2.37319215e-05 3.34708794e-04]
[1.33192402e-05 1.37226149e-04]
[5.45629246e-06 5.74835423e-05]]
[[5.09659449e-08 2.86202444e-06]
[3.58145203e-07 1.47728954e-05]
[3.99793526e-07 1.41034954e-05]
[1.12997191e-06 3.16212248e-05]
[7.16321720e-07 1.29642809e-05]
[2.91301483e-07 5.43069083e-06]]
domain=1 type=chi-delayed
[[0.00000000e+00 0.00000000e+00]
[1.00000000e+00 0.00000000e+00]
[1.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]
[1.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]]
[[0.00000000e+00 0.00000000e+00]
[8.69127748e-01 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]
[1.41421356e+00 0.00000000e+00]
[3.60359016e-01 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]]
domain=1 type=beta
[[2.22155945e-04 2.27713711e-04]
[1.38824446e-03 1.17538858e-03]
[1.46341397e-03 1.12212853e-03]
[3.82159878e-03 2.51590670e-03]
[2.13520982e-03 1.03148823e-03]
[8.74939592e-04 4.32086725e-04]]
[[1.80847601e-05 2.46946655e-05]
[1.14688936e-04 1.27466313e-04]
[1.21787671e-04 1.21690467e-04]
[3.21434951e-04 2.72840272e-04]
[1.82980530e-04 1.11860871e-04]
[7.48900063e-05 4.68581181e-05]]
[[2.22095001e-04 2.27713713e-04]
[1.39428891e-03 1.17538859e-03]
[1.47281699e-03 1.12212855e-03]
[3.85689990e-03 2.51590676e-03]
[2.16463619e-03 1.03148827e-03]
[8.86753895e-04 4.32086742e-04]]
[[9.07215649e-06 1.93631017e-05]
[6.26713584e-05 9.99464126e-05]
[6.94548765e-05 9.54175694e-05]
[1.94563984e-04 2.13934228e-04]
[1.21876271e-04 8.77101834e-05]
[4.95946084e-05 3.67414816e-05]]
domain=1 type=decay-rate
[[1.34450193e-02 1.33360001e-02]
[3.20638663e-02 3.27389978e-02]
[1.22136025e-01 1.20780007e-01]
[3.15269336e-01 3.02780066e-01]
[8.89232587e-01 8.49490287e-01]
[2.98940409e+00 2.85300088e+00]]
[[1.08439455e-03 1.44623725e-03]
[2.65795038e-03 3.55041661e-03]
[1.02955036e-02 1.30981202e-02]
[2.71748571e-02 3.28353145e-02]
[7.93682889e-02 9.21238900e-02]
[2.66253283e-01 3.09396760e-01]]
[[1.34479215e-02 1.33360001e-02]
[3.20491028e-02 3.27389978e-02]
[1.22162808e-01 1.20780007e-01]
[3.15480592e-01 3.02780066e-01]
[8.89723658e-01 8.49490289e-01]
[2.99112795e+00 2.85300089e+00]]
[[5.47700122e-04 1.13399549e-03]
[1.53954980e-03 2.78388383e-03]
[6.44048392e-03 1.02702443e-02]
[1.86178714e-02 2.57461915e-02]
[6.12200714e-02 7.22344077e-02]
[2.04036637e-01 2.42598218e-01]]
domain=1 type=delayed-nu-fission matrix
[[[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]]
[[0.00000000e+00 0.00000000e+00]
[2.53814444e-03 0.00000000e+00]]
[[0.00000000e+00 0.00000000e+00]
[1.18579136e-03 0.00000000e+00]]
[[0.00000000e+00 0.00000000e+00]
[4.82335163e-03 0.00000000e+00]]
[[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]]
[[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]]]
[[[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]]
[[0.00000000e+00 0.00000000e+00]
[1.56094521e-03 0.00000000e+00]]
[[0.00000000e+00 0.00000000e+00]
[1.18610370e-03 0.00000000e+00]]
[[0.00000000e+00 0.00000000e+00]
[1.23402593e-03 0.00000000e+00]]
[[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]]
[[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]]]
domain=2 type=total
[3.13737667e-01 3.00821380e-01]
[1.55819228e-02 2.80524816e-02]
domain=2 type=transport
[2.75508079e-01 3.12035015e-01]
[1.77418859e-02 3.23843473e-02]
domain=2 type=nu-transport
[2.75508079e-01 3.12035015e-01]
[1.77418859e-02 3.23843473e-02]
domain=2 type=absorption
[1.57499139e-03 5.40037825e-03]
[3.22547917e-04 6.18139027e-04]
domain=2 type=capture
[1.57499139e-03 5.40037825e-03]
[3.22547917e-04 6.18139027e-04]
domain=2 type=fission
[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]
domain=2 type=nu-fission
[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]
domain=2 type=kappa-fission
[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]
domain=2 type=scatter
[3.12162675e-01 2.95421002e-01]
[1.53219435e-02 2.74455213e-02]
domain=2 type=nu-scatter
[3.10120713e-01 2.96264249e-01]
[3.37881037e-02 4.37922226e-02]
domain=2 type=scatter matrix
[[[3.10120713e-01 3.82295876e-02 2.07449405e-02 7.96429620e-03]
[0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]]
[[0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]
[2.96264249e-01 -1.12136353e-02 8.83656566e-03 -3.27006707e-03]]]
[[[3.37881037e-02 8.48399649e-03 4.69561034e-03 3.73162234e-03]
[0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]]
[[0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]
[4.37922226e-02 1.61803653e-02 1.15039636e-02 7.32884528e-03]]]
domain=2 type=nu-scatter matrix
[[[3.10120713e-01 3.82295876e-02 2.07449405e-02 7.96429620e-03]
[0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]]
[[0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]
[2.96264249e-01 -1.12136353e-02 8.83656566e-03 -3.27006707e-03]]]
[[[3.37881037e-02 8.48399649e-03 4.69561034e-03 3.73162234e-03]
[0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]]
[[0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]
[4.37922226e-02 1.61803653e-02 1.15039636e-02 7.32884528e-03]]]
domain=2 type=multiplicity matrix
[[1.00000000e+00 0.00000000e+00]
[0.00000000e+00 1.00000000e+00]]
[[1.08778697e-01 0.00000000e+00]
[0.00000000e+00 1.42427173e-01]]
domain=2 type=nu-fission matrix
[[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]]
[[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]]
domain=2 type=scatter probability matrix
[[1.00000000e+00 0.00000000e+00]
[0.00000000e+00 1.00000000e+00]]
[[1.08778697e-01 0.00000000e+00]
[0.00000000e+00 1.42427173e-01]]
domain=2 type=consistent scatter matrix
[[[3.12162675e-01 3.84813069e-02 2.08815337e-02 8.01673640e-03]
[0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]]
[[0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]
[2.95421002e-01 -1.11817183e-02 8.81141444e-03 -3.26075959e-03]]]
[[[3.72534020e-02 8.74305414e-03 4.83468236e-03 3.77642683e-03]
[0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]]
[[0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]
[5.02358893e-02 1.61616720e-02 1.14951123e-02 7.31312479e-03]]]
domain=2 type=consistent nu-scatter matrix
[[[3.12162675e-01 3.84813069e-02 2.08815337e-02 8.01673640e-03]
[0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]]
[[0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]
[2.95421002e-01 -1.11817183e-02 8.81141444e-03 -3.26075959e-03]]]
[[[5.04070429e-02 9.69345878e-03 5.34169556e-03 3.87580585e-03]
[0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]]
[[0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00]
[6.55288678e-02 1.62399493e-02 1.15634161e-02 7.32785650e-03]]]
domain=2 type=chi
[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]
domain=2 type=chi-prompt
[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]
domain=2 type=inverse-velocity
[5.99597928e-08 2.98549016e-06]
[4.55308451e-09 3.41701982e-07]
domain=2 type=prompt-nu-fission
[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]
domain=2 type=prompt-nu-fission matrix
[[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]]
[[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]]
domain=2 type=delayed-nu-fission
[[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]]
[[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]]
domain=2 type=chi-delayed
[[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]]
[[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]]
domain=2 type=beta
[[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]]
[[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]]
domain=2 type=decay-rate
[[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]]
[[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]]
domain=2 type=delayed-nu-fission matrix
[[[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]]
[[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]]
[[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]]
[[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]]
[1.22628106e-03 0.00000000e+00]]
[[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]]
@ -377,200 +223,7 @@ domain=2 type=delayed-nu-fission matrix
[0.00000000e+00 0.00000000e+00]]
[[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]]
[[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]]
[[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]]]
domain=3 type=total
[6.64572194e-01 2.05238389e+00]
[3.12147473e-02 2.24342890e-01]
domain=3 type=transport
[2.83322749e-01 1.49973953e+00]
[3.52061127e-02 2.30902118e-01]
domain=3 type=nu-transport
[2.83322749e-01 1.49973953e+00]
[3.52061127e-02 2.30902118e-01]
domain=3 type=absorption
[6.90399488e-04 3.16872537e-02]
[4.41475703e-05 3.74655812e-03]
domain=3 type=capture
[6.90399488e-04 3.16872537e-02]
[4.41475703e-05 3.74655812e-03]
domain=3 type=fission
[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]
domain=3 type=nu-fission
[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]
domain=3 type=kappa-fission
[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]
domain=3 type=scatter
[6.63881795e-01 2.02069663e+00]
[3.11726794e-02 2.20604438e-01]
domain=3 type=nu-scatter
[6.71269157e-01 2.03538818e+00]
[2.61863693e-02 2.58060310e-01]
domain=3 type=scatter matrix
[[[6.39901439e-01 3.81167422e-01 1.52391887e-01 9.14802163e-03]
[3.13677176e-02 8.75772258e-03 -2.56790088e-03 -3.78480261e-03]]
[[4.43343102e-04 3.99960385e-04 3.19562684e-04 2.13846954e-04]
[2.03494484e+00 5.09940476e-01 1.11174601e-01 2.49884339e-02]]]
[[[2.47091210e-02 1.62432637e-02 8.15627711e-03 3.88856186e-03]
[1.72811278e-03 9.25670435e-04 1.01398468e-03 8.17075512e-04]]
[[4.44850361e-04 4.01320154e-04 3.20649120e-04 2.14573982e-04]
[2.57799870e-01 5.12359026e-02 1.30198161e-02 8.31235196e-03]]]
domain=3 type=nu-scatter matrix
[[[6.39901439e-01 3.81167422e-01 1.52391887e-01 9.14802163e-03]
[3.13677176e-02 8.75772258e-03 -2.56790088e-03 -3.78480261e-03]]
[[4.43343102e-04 3.99960385e-04 3.19562684e-04 2.13846954e-04]
[2.03494484e+00 5.09940476e-01 1.11174601e-01 2.49884339e-02]]]
[[[2.47091210e-02 1.62432637e-02 8.15627711e-03 3.88856186e-03]
[1.72811278e-03 9.25670435e-04 1.01398468e-03 8.17075512e-04]]
[[4.44850361e-04 4.01320154e-04 3.20649120e-04 2.14573982e-04]
[2.57799870e-01 5.12359026e-02 1.30198161e-02 8.31235196e-03]]]
domain=3 type=multiplicity matrix
[[1.00000000e+00 1.00000000e+00]
[1.00000000e+00 1.00000000e+00]]
[[3.86091908e-02 6.76673480e-02]
[1.41421356e+00 1.35929207e-01]]
domain=3 type=nu-fission matrix
[[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]]
[[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]]
domain=3 type=scatter probability matrix
[[9.53271028e-01 4.67289720e-02]
[2.17817469e-04 9.99782183e-01]]
[[3.60184962e-02 2.54736726e-03]
[2.18820864e-04 1.35884974e-01]]
domain=3 type=consistent scatter matrix
[[[6.32859281e-01 3.76972649e-01 1.50714804e-01 9.04734705e-03]
[3.10225138e-02 8.66134326e-03 -2.53964096e-03 -3.74315061e-03]]
[[4.40143026e-04 3.97073448e-04 3.17256062e-04 2.12303394e-04]
[2.02025649e+00 5.06259696e-01 1.10372136e-01 2.48080660e-02]]]
[[[3.81421848e-02 2.37145043e-02 1.06635009e-02 3.86848985e-03]
[2.23201039e-03 9.99377011e-04 1.00968851e-03 8.26439590e-04]]
[[4.44773843e-04 4.01251123e-04 3.20593966e-04 2.14537073e-04]
[3.52193929e-01 7.91402819e-02 1.84875925e-02 8.77085752e-03]]]
domain=3 type=consistent nu-scatter matrix
[[[6.32859281e-01 3.76972649e-01 1.50714804e-01 9.04734705e-03]
[3.10225138e-02 8.66134326e-03 -2.53964096e-03 -3.74315061e-03]]
[[4.40143026e-04 3.97073448e-04 3.17256062e-04 2.12303394e-04]
[2.02025649e+00 5.06259696e-01 1.10372136e-01 2.48080660e-02]]]
[[[4.52974133e-02 2.78247077e-02 1.21478698e-02 3.88422859e-03]
[3.06407542e-03 1.15855774e-03 1.02420876e-03 8.64382873e-04]]
[[7.65033031e-04 6.90171798e-04 5.51437493e-04 3.69014387e-04]
[4.46600759e-01 1.04874946e-01 2.38091367e-02 9.39676938e-03]]]
domain=3 type=chi
[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]
domain=3 type=chi-prompt
[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]
domain=3 type=inverse-velocity
[6.02207835e-08 3.04495548e-06]
[3.78043705e-09 3.60007679e-07]
domain=3 type=prompt-nu-fission
[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]
domain=3 type=prompt-nu-fission matrix
[[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]]
[[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]]
domain=3 type=delayed-nu-fission
[[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]]
[[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]]
domain=3 type=chi-delayed
[[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]]
[[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]]
domain=3 type=beta
[[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]]
[[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]]
domain=3 type=decay-rate
[[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]]
[[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]]
domain=3 type=delayed-nu-fission matrix
[[[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]]
[[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]]
[[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]]
[[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]]
[[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]]
[[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]]]
[[[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]]
[[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]]
[[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]]
[[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]]
[1.22965527e-03 0.00000000e+00]]
[[0.00000000e+00 0.00000000e+00]
[0.00000000e+00 0.00000000e+00]]

View file

@ -28,7 +28,15 @@ class MGXSTestHarness(PyAPITestHarness):
self.mgxs_lib.energy_groups = energy_groups
self.mgxs_lib.num_delayed_groups = 6
self.mgxs_lib.legendre_order = 3
self.mgxs_lib.domain_type = 'material'
self.mgxs_lib.domain_type = 'mesh'
# Instantiate a tally mesh
mesh = openmc.RegularMesh(mesh_id=1)
mesh.dimension = [2, 2]
mesh.lower_left = [-100., -100.]
mesh.width = [100., 100.]
self.mgxs_lib.domains = [mesh]
self.mgxs_lib.build_library()
# Add tallies
@ -54,8 +62,8 @@ class MGXSTestHarness(PyAPITestHarness):
for domain in self.mgxs_lib.domains:
for mgxs_type in self.mgxs_lib.mgxs_types:
outstr += 'domain={0} type={1}\n'.format(domain.id, mgxs_type)
avg_key = 'material/{0}/{1}/average'.format(domain.id, mgxs_type)
std_key = 'material/{0}/{1}/std. dev.'.format(domain.id, mgxs_type)
avg_key = 'mesh/{}/{}/average'.format(domain.id, mgxs_type)
std_key = 'mesh/{}/{}/std. dev.'.format(domain.id, mgxs_type)
outstr += '{}\n{}\n'.format(f[avg_key][...], f[std_key][...])
# Hash the results if necessary

View file

@ -53,7 +53,10 @@
<filter id="28" type="legendre">
<order>3</order>
</filter>
<filter id="65" type="delayedgroup">
<filter id="66" type="meshsurface">
<bins>1</bins>
</filter>
<filter id="69" type="delayedgroup">
<bins>1 2 3 4 5 6</bins>
</filter>
<tally id="1">
@ -363,61 +366,67 @@
<estimator>analog</estimator>
</tally>
<tally id="52">
<filters>66 2</filters>
<nuclides>total</nuclides>
<scores>current</scores>
<estimator>analog</estimator>
</tally>
<tally id="53">
<filters>1 2</filters>
<nuclides>total</nuclides>
<scores>flux</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="53">
<filters>1 65 2</filters>
<tally id="54">
<filters>1 69 2</filters>
<nuclides>total</nuclides>
<scores>delayed-nu-fission</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="54">
<filters>1 65 2</filters>
<nuclides>total</nuclides>
<scores>delayed-nu-fission</scores>
<estimator>analog</estimator>
</tally>
<tally id="55">
<filters>1 65 5</filters>
<filters>1 69 2</filters>
<nuclides>total</nuclides>
<scores>delayed-nu-fission</scores>
<estimator>analog</estimator>
</tally>
<tally id="56">
<filters>1 69 5</filters>
<nuclides>total</nuclides>
<scores>delayed-nu-fission</scores>
<estimator>analog</estimator>
</tally>
<tally id="57">
<filters>1 2</filters>
<nuclides>total</nuclides>
<scores>nu-fission</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="57">
<filters>1 65 2</filters>
<nuclides>total</nuclides>
<scores>delayed-nu-fission</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="58">
<filters>1 65 2</filters>
<filters>1 69 2</filters>
<nuclides>total</nuclides>
<scores>delayed-nu-fission</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="59">
<filters>1 65 2</filters>
<filters>1 69 2</filters>
<nuclides>total</nuclides>
<scores>delayed-nu-fission</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="60">
<filters>1 69 2</filters>
<nuclides>total</nuclides>
<scores>decay-rate</scores>
<estimator>tracklength</estimator>
</tally>
<tally id="60">
<tally id="61">
<filters>1 2</filters>
<nuclides>total</nuclides>
<scores>flux</scores>
<estimator>analog</estimator>
</tally>
<tally id="61">
<filters>1 65 2 5</filters>
<tally id="62">
<filters>1 69 2 5</filters>
<nuclides>total</nuclides>
<scores>delayed-nu-fission</scores>
<estimator>analog</estimator>

View file

@ -178,6 +178,40 @@
2 1 2 1 1 1 total 0.032188 0.002420
1 2 1 1 1 1 total 0.032304 0.002073
3 2 2 1 1 1 total 0.031336 0.001614
mesh 1 group in nuclide mean std. dev.
x y surf
3 1 1 x-max in 1 total 0.1892 0.011302
2 1 1 x-max out 1 total 0.2738 0.093735
1 1 1 x-min in 1 total 0.0000 0.000000
0 1 1 x-min out 1 total 0.0000 0.000000
7 1 1 y-max in 1 total 0.1724 0.009114
6 1 1 y-max out 1 total 0.2358 0.041204
5 1 1 y-min in 1 total 0.0000 0.000000
4 1 1 y-min out 1 total 0.0000 0.000000
19 1 2 x-max in 1 total 0.1822 0.011922
18 1 2 x-max out 1 total 0.1778 0.010514
17 1 2 x-min in 1 total 0.0000 0.000000
16 1 2 x-min out 1 total 0.0000 0.000000
23 1 2 y-max in 1 total 0.0000 0.000000
22 1 2 y-max out 1 total 0.0000 0.000000
21 1 2 y-min in 1 total 0.2358 0.041204
20 1 2 y-min out 1 total 0.1724 0.009114
11 2 1 x-max in 1 total 0.0000 0.000000
10 2 1 x-max out 1 total 0.0000 0.000000
9 2 1 x-min in 1 total 0.2738 0.093735
8 2 1 x-min out 1 total 0.1892 0.011302
15 2 1 y-max in 1 total 0.1894 0.012331
14 2 1 y-max out 1 total 0.2290 0.038756
13 2 1 y-min in 1 total 0.0000 0.000000
12 2 1 y-min out 1 total 0.0000 0.000000
27 2 2 x-max in 1 total 0.0000 0.000000
26 2 2 x-max out 1 total 0.0244 0.024400
25 2 2 x-min in 1 total 0.1778 0.010514
24 2 2 x-min out 1 total 0.1822 0.011922
31 2 2 y-max in 1 total 0.0000 0.000000
30 2 2 y-max out 1 total 0.0236 0.023600
29 2 2 y-min in 1 total 0.2290 0.038756
28 2 2 y-min out 1 total 0.1894 0.012331
mesh 1 delayedgroup group in nuclide mean std. dev.
x y z
0 1 1 1 1 1 total 0.000007 4.734745e-07

View file

@ -19,8 +19,10 @@ class MGXSTestHarness(PyAPITestHarness):
self.mgxs_lib = openmc.mgxs.Library(self._model.geometry)
self.mgxs_lib.by_nuclide = False
# Test all MGXS types
self.mgxs_lib.mgxs_types = openmc.mgxs.MGXS_TYPES + \
# Test all relevant MGXS types
relevant_MGXS_TYPES = [item for item in openmc.mgxs.MGXS_TYPES
if item != 'current']
self.mgxs_lib.mgxs_types = tuple(relevant_MGXS_TYPES) + \
openmc.mgxs.MDGXS_TYPES
self.mgxs_lib.energy_groups = energy_groups
self.mgxs_lib.num_delayed_groups = 6

View file

@ -17,8 +17,11 @@ class MGXSTestHarness(PyAPITestHarness):
# Initialize MGXS Library for a few cross section types
self.mgxs_lib = openmc.mgxs.Library(self._model.geometry)
self.mgxs_lib.by_nuclide = True
# Test all MGXS types
self.mgxs_lib.mgxs_types = openmc.mgxs.MGXS_TYPES
# Test relevant all MGXS types
relevant_MGXS_TYPES = [item for item in openmc.mgxs.MGXS_TYPES
if item != 'current']
self.mgxs_lib.mgxs_types = tuple(relevant_MGXS_TYPES)
self.mgxs_lib.energy_groups = energy_groups
self.mgxs_lib.legendre_order = 3
self.mgxs_lib.domain_type = 'material'

View file

@ -1,11 +1,14 @@
#include <iostream>
#include <memory>
#include "openmc/random_lcg.h"
#include "openmc/source.h"
#include "openmc/particle.h"
// you must have external C linkage here otherwise
// dlopen will not find the file
extern "C" openmc::Particle::Bank sample_source(uint64_t *seed) {
class Source : openmc::CustomSource
{
openmc::Particle::Bank sample(uint64_t *seed)
{
openmc::Particle::Bank particle;
// wgt
particle.particle = openmc::Particle::Type::neutron;
@ -20,4 +23,13 @@ extern "C" openmc::Particle::Bank sample_source(uint64_t *seed) {
particle.E = 14.08e6;
particle.delayed_group = 0;
return particle;
}
};
// A function to create a unique pointer to an instance of this class when generated
// via a plugin call using dlopen/dlsym.
// You must have external C linkage here otherwise dlopen will not find the file
extern "C" std::unique_ptr<Source> openmc_create_source(std::string parameters)
{
return std::make_unique<Source>();
}

View file

@ -0,0 +1,23 @@
<?xml version='1.0' encoding='utf-8'?>
<geometry>
<cell id="1" material="1" region="-1" universe="1" />
<surface boundary="vacuum" coeffs="0.0 0.0 0.0 100" id="1" type="sphere" />
</geometry>
<?xml version='1.0' encoding='utf-8'?>
<materials>
<material id="1" name="natural_lead">
<density units="g/cm3" value="11.34" />
<nuclide ao="0.014" name="Pb204" />
<nuclide ao="0.241" name="Pb206" />
<nuclide ao="0.221" name="Pb207" />
<nuclide ao="0.524" name="Pb208" />
</material>
</materials>
<?xml version='1.0' encoding='utf-8'?>
<settings>
<run_mode>fixed source</run_mode>
<particles>1000</particles>
<batches>10</batches>
<inactive>0</inactive>
<source library="build/libsource.so" parameters="1e3" strength="1.0" />
</settings>

View file

@ -0,0 +1,38 @@
#include "openmc/source.h"
#include "openmc/particle.h"
class Source : public openmc::CustomSource {
public:
Source(double energy) : energy_(energy) { }
// Samples from an instance of this class.
openmc::Particle::Bank sample(uint64_t* seed)
{
openmc::Particle::Bank particle;
// wgt
particle.particle = openmc::Particle::Type::neutron;
particle.wgt = 1.0;
// position
particle.r.x = 0.0;
particle.r.y = 0.0;
particle.r.z = 0.0;
// angle
particle.u = {1.0, 0.0, 0.0};
particle.E = this->energy_;
particle.delayed_group = 0;
return particle;
}
private:
double energy_;
};
// A function to create a unique pointer to an instance of this class when generated
// via a plugin call using dlopen/dlsym.
// You must have external C linkage here otherwise dlopen will not find the file
extern "C" std::unique_ptr<Source> openmc_create_source(std::string parameter)
{
double energy = std::stod(parameter);
return std::make_unique<Source>(energy);
}

View file

@ -0,0 +1,75 @@
from pathlib import Path
import os
import shutil
import subprocess
import textwrap
import openmc
import pytest
from tests.testing_harness import PyAPITestHarness
@pytest.fixture
def compile_source(request):
"""Compile the external source"""
# Get build directory and write CMakeLists.txt file
openmc_dir = Path(str(request.config.rootdir)) / 'build'
with open('CMakeLists.txt', 'w') as f:
f.write(textwrap.dedent("""
cmake_minimum_required(VERSION 3.3 FATAL_ERROR)
project(openmc_sources CXX)
add_library(source SHARED parameterized_source_sampling.cpp)
find_package(OpenMC REQUIRED HINTS {})
target_link_libraries(source OpenMC::libopenmc)
""".format(openmc_dir)))
# Create temporary build directory and change to there
local_builddir = Path('build')
local_builddir.mkdir(exist_ok=True)
os.chdir(str(local_builddir))
# Run cmake/make to build the shared libary
subprocess.run(['cmake', os.path.pardir], check=True)
subprocess.run(['make'], check=True)
os.chdir(os.path.pardir)
yield
# Remove local build directory when test is complete
shutil.rmtree('build')
os.remove('CMakeLists.txt')
@pytest.fixture
def model():
model = openmc.model.Model()
natural_lead = openmc.Material(name="natural_lead")
natural_lead.add_element('Pb', 1.0)
natural_lead.set_density('g/cm3', 11.34)
model.materials.append(natural_lead)
# geometry
surface_sph1 = openmc.Sphere(r=100, boundary_type='vacuum')
cell_1 = openmc.Cell(fill=natural_lead, region=-surface_sph1)
model.geometry = openmc.Geometry([cell_1])
# settings
model.settings.batches = 10
model.settings.inactive = 0
model.settings.particles = 1000
model.settings.run_mode = 'fixed source'
# custom source from shared library
source = openmc.Source()
source.library = 'build/libsource.so'
source.parameters = '1e3'
model.settings.source = source
return model
def test_dlopen_source(compile_source, model):
harness = PyAPITestHarness('statepoint.10.h5', model)
harness.main()

View file

@ -84,6 +84,7 @@ def test_atomic_mass():
def test_atomic_weight():
assert openmc.data.atomic_weight('C') == 12.011115164864455
assert openmc.data.atomic_weight('carbon') == 12.011115164864455
with pytest.raises(ValueError):
openmc.data.atomic_weight('Qt')
@ -106,6 +107,17 @@ def test_gnd_name():
assert openmc.data.gnd_name(95, 242, 10) == ('Am242_m10')
def test_isotopes():
hydrogen_isotopes = [('H1', 0.99984426), ('H2', 0.00015574)]
assert openmc.data.isotopes('H') == hydrogen_isotopes
assert openmc.data.isotopes('hydrogen') == hydrogen_isotopes
assert openmc.data.isotopes('Al') == [('Al27', 1.0)]
assert openmc.data.isotopes('Aluminum') == [('Al27', 1.0)]
assert openmc.data.isotopes('aluminium') == [('Al27', 1.0)]
with pytest.raises(ValueError):
openmc.data.isotopes('Чорнобиль')
def test_zam():
assert openmc.data.zam('H1') == (1, 1, 0)
assert openmc.data.zam('Zr90') == (40, 90, 0)