mirror of
https://github.com/openmc-dev/openmc.git
synced 2026-07-24 12:05:32 -04:00
1947 lines
117 KiB
Text
1947 lines
117 KiB
Text
{
|
|
"cells": [
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"This IPython Notebook illustrates the use of the `openmc.mgxs` module to calculate multi-group cross sections for a heterogeneous fuel pin cell geometry. In particular, this Notebook illustrates the following features:\n",
|
|
"\n",
|
|
"* Creation of multi-group cross sections on a **heterogeneous geometry**\n",
|
|
"* Calculation of cross sections on a **nuclide-by-nuclide basis**\n",
|
|
"* The use of **[tally precision triggers](https://mit-crpg.github.io/openmc/usersguide/input.html#trigger-element)** with multi-group cross sections\n",
|
|
"* Built-in features for **energy condensation** in downstream data processing\n",
|
|
"* The use of **[PyNE](http://pyne.io/) to plot** continuous-energy vs. multi-group cross sections\n",
|
|
"* **Validation** of multi-group cross sections with **[OpenMOC](https://mit-crpg.github.io/OpenMOC/)**\n",
|
|
"\n",
|
|
"**Note:** This Notebook was created using [OpenMOC](https://mit-crpg.github.io/OpenMOC/) to verify the multi-group cross-sections generated by OpenMC. In order to run this Notebook in its entirety, you must have [OpenMOC](https://mit-crpg.github.io/OpenMOC/) installed on your system, along with OpenCG to convert the OpenMC geometries into OpenMOC geometries. In addition, this Notebook illustrates the use of [Pandas](http://pandas.pydata.org/) `DataFrames` to containerize multi-group cross section data. We recommend using [Pandas](http://pandas.pydata.org/) >v0.15.0 or later since OpenMC's Python API leverages the multi-indexing feature included in the most recent releases of [Pandas](http://pandas.pydata.org/)."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"## Generate Input Files"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 1,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"/usr/lib/pymodules/python2.7/matplotlib/__init__.py:1173: UserWarning: This call to matplotlib.use() has no effect\n",
|
|
"because the backend has already been chosen;\n",
|
|
"matplotlib.use() must be called *before* pylab, matplotlib.pyplot,\n",
|
|
"or matplotlib.backends is imported for the first time.\n",
|
|
"\n",
|
|
" warnings.warn(_use_error_msg)\n",
|
|
"/usr/local/lib/python2.7/dist-packages/IPython/kernel/__main__.py:9: QAWarning: pyne.rxname is not yet QA compliant.\n",
|
|
"/usr/local/lib/python2.7/dist-packages/IPython/kernel/__main__.py:9: QAWarning: pyne.ace is not yet QA compliant.\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"import numpy as np\n",
|
|
"import matplotlib.pyplot as plt\n",
|
|
"import seaborn as sns\n",
|
|
"\n",
|
|
"import openmc\n",
|
|
"import openmc.mgxs as mgxs\n",
|
|
"import openmoc\n",
|
|
"from openmoc.compatible import get_openmoc_geometry\n",
|
|
"import pyne.ace\n",
|
|
"\n",
|
|
"%matplotlib inline"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"First we need to define materials that will be used in the problem. Before defining a material, we must create nuclides that are used in the material."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 2,
|
|
"metadata": {
|
|
"collapsed": true
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"# Instantiate some Nuclides\n",
|
|
"h1 = openmc.Nuclide('H-1')\n",
|
|
"o16 = openmc.Nuclide('O-16')\n",
|
|
"u235 = openmc.Nuclide('U-235')\n",
|
|
"u238 = openmc.Nuclide('U-238')\n",
|
|
"zr90 = openmc.Nuclide('Zr-90')"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"With the nuclides we defined, we will now create three distinct materials for water, clad and fuel."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 3,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"# 1.6% enriched fuel\n",
|
|
"fuel = openmc.Material(name='1.6% Fuel')\n",
|
|
"fuel.set_density('g/cm3', 10.31341)\n",
|
|
"fuel.add_nuclide(u235, 3.7503e-4)\n",
|
|
"fuel.add_nuclide(u238, 2.2625e-2)\n",
|
|
"fuel.add_nuclide(o16, 4.6007e-2)\n",
|
|
"\n",
|
|
"# borated water\n",
|
|
"water = openmc.Material(name='Borated Water')\n",
|
|
"water.set_density('g/cm3', 0.740582)\n",
|
|
"water.add_nuclide(h1, 4.9457e-2)\n",
|
|
"water.add_nuclide(o16, 2.4732e-2)\n",
|
|
"\n",
|
|
"# zircaloy\n",
|
|
"zircaloy = openmc.Material(name='Zircaloy')\n",
|
|
"zircaloy.set_density('g/cm3', 6.55)\n",
|
|
"zircaloy.add_nuclide(zr90, 7.2758e-3)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"With our materials, we can now create a `MaterialsFile` object that can be exported to an actual XML file."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 4,
|
|
"metadata": {
|
|
"collapsed": true
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"# Instantiate a MaterialsFile, add Materials\n",
|
|
"materials_file = openmc.MaterialsFile()\n",
|
|
"materials_file.add_material(fuel)\n",
|
|
"materials_file.add_material(water)\n",
|
|
"materials_file.add_material(zircaloy)\n",
|
|
"materials_file.default_xs = '71c'\n",
|
|
"\n",
|
|
"# Export to \"materials.xml\"\n",
|
|
"materials_file.export_to_xml()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"Now let's move on to the geometry. Our problem will have three regions for the fuel, the clad, and the surrounding coolant. The first step is to create the bounding surfaces -- in this case two cylinders and six reflective planes."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 5,
|
|
"metadata": {
|
|
"collapsed": true
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"# Create cylinders for the fuel and clad\n",
|
|
"fuel_outer_radius = openmc.ZCylinder(x0=0.0, y0=0.0, R=0.39218)\n",
|
|
"clad_outer_radius = openmc.ZCylinder(x0=0.0, y0=0.0, R=0.45720)\n",
|
|
"\n",
|
|
"# Create boundary planes to surround the geometry\n",
|
|
"min_x = openmc.XPlane(x0=-0.63, boundary_type='reflective')\n",
|
|
"max_x = openmc.XPlane(x0=+0.63, boundary_type='reflective')\n",
|
|
"min_y = openmc.YPlane(y0=-0.63, boundary_type='reflective')\n",
|
|
"max_y = openmc.YPlane(y0=+0.63, boundary_type='reflective')\n",
|
|
"min_z = openmc.ZPlane(z0=-0.63, boundary_type='reflective')\n",
|
|
"max_z = openmc.ZPlane(z0=+0.63, boundary_type='reflective')"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"With the surfaces defined, we can now create cells that are defined by intersections of half-spaces created by the surfaces."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 6,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"# Create a Universe to encapsulate a fuel pin\n",
|
|
"pin_cell_universe = openmc.Universe(name='1.6% Fuel Pin')\n",
|
|
"\n",
|
|
"# Create fuel Cell\n",
|
|
"fuel_cell = openmc.Cell(name='1.6% Fuel')\n",
|
|
"fuel_cell.fill = fuel\n",
|
|
"fuel_cell.region = -fuel_outer_radius\n",
|
|
"pin_cell_universe.add_cell(fuel_cell)\n",
|
|
"\n",
|
|
"# Create a clad Cell\n",
|
|
"clad_cell = openmc.Cell(name='1.6% Clad')\n",
|
|
"clad_cell.fill = zircaloy\n",
|
|
"clad_cell.region = +fuel_outer_radius & -clad_outer_radius\n",
|
|
"pin_cell_universe.add_cell(clad_cell)\n",
|
|
"\n",
|
|
"# Create a moderator Cell\n",
|
|
"moderator_cell = openmc.Cell(name='1.6% Moderator')\n",
|
|
"moderator_cell.fill = water\n",
|
|
"moderator_cell.region = +clad_outer_radius\n",
|
|
"pin_cell_universe.add_cell(moderator_cell)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"OpenMC requires that there is a \"root\" universe. Let us create a root cell that is filled by the pin cell universe and then assign it to the root universe."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 7,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"# Create root Cell\n",
|
|
"root_cell = openmc.Cell(name='root cell')\n",
|
|
"root_cell.region = +min_x & -max_x & +min_y & -max_y\n",
|
|
"root_cell.fill = pin_cell_universe\n",
|
|
"\n",
|
|
"# Create root Universe\n",
|
|
"root_universe = openmc.Universe(universe_id=0, name='root universe')\n",
|
|
"root_universe.add_cell(root_cell)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"We now must create a geometry that is assigned a root universe, put the geometry into a `GeometryFile` object, and export it to XML."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 8,
|
|
"metadata": {
|
|
"collapsed": true
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"# Create Geometry and set root Universe\n",
|
|
"openmc_geometry = openmc.Geometry()\n",
|
|
"openmc_geometry.root_universe = root_universe\n",
|
|
"\n",
|
|
"# Instantiate a GeometryFile\n",
|
|
"geometry_file = openmc.GeometryFile()\n",
|
|
"geometry_file.geometry = openmc_geometry\n",
|
|
"\n",
|
|
"# Export to \"geometry.xml\"\n",
|
|
"geometry_file.export_to_xml()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"Next, we must define simulation parameters. In this case, we will use 10 inactive batches and 190 active batches each with 10,000 particles."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 9,
|
|
"metadata": {
|
|
"collapsed": true
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"# OpenMC simulation parameters\n",
|
|
"batches = 50\n",
|
|
"inactive = 10\n",
|
|
"particles = 10000\n",
|
|
"\n",
|
|
"# Instantiate a SettingsFile\n",
|
|
"settings_file = openmc.SettingsFile()\n",
|
|
"settings_file.batches = batches\n",
|
|
"settings_file.inactive = inactive\n",
|
|
"settings_file.particles = particles\n",
|
|
"settings_file.output = {'tallies': True, 'summary': True}\n",
|
|
"bounds = [-0.63, -0.63, -0.63, 0.63, 0.63, 0.63]\n",
|
|
"settings_file.set_source_space('fission', bounds)\n",
|
|
"\n",
|
|
"# Activate tally precision triggers\n",
|
|
"settings_file.trigger_active = True\n",
|
|
"settings_file.trigger_max_batches = settings_file.batches * 4\n",
|
|
"\n",
|
|
"# Export to \"settings.xml\"\n",
|
|
"settings_file.export_to_xml()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"Now we are finally ready to make use of the `openmc.mgxs` module to generate multi-group cross sections! First, let's define \"coarse\" 2-group and \"fine\" 8-group structures using the built-in `EnergyGroups` class."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 10,
|
|
"metadata": {
|
|
"collapsed": true
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"# Instantiate a \"coarse\" 2-group EnergyGroups object\n",
|
|
"coarse_groups = mgxs.EnergyGroups()\n",
|
|
"coarse_groups.group_edges = np.array([0., 0.625e-6, 20.])\n",
|
|
"\n",
|
|
"# Instantiate a \"fine\" 8-group EnergyGroups object\n",
|
|
"fine_groups = mgxs.EnergyGroups()\n",
|
|
"fine_groups.group_edges = np.array([0., 0.058e-6, 0.14e-6, 0.28e-6,\n",
|
|
" 0.625e-6, 4.e-6, 5.53e-3, 821.e-3, 20.])"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"Now we will instantiate a variety of `MGXS` objects needed to run an OpenMOC simulation to verify the accuracy of our cross sections. In particular, we define transport, fission, nu-fission, nu-scatter and chi cross sections for each of the three cells in the fuel pin with the 8-group structure as our energy groups."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 11,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"# Extract all Cells filled by Materials\n",
|
|
"openmc_cells = openmc_geometry.get_all_material_cells()\n",
|
|
"\n",
|
|
"# Create dictionary to store multi-group cross sections for all cells\n",
|
|
"xs_library = {}\n",
|
|
"\n",
|
|
"# Instantiate 8-group cross sections for each cell\n",
|
|
"for cell in openmc_cells:\n",
|
|
" xs_library[cell.id] = {}\n",
|
|
" xs_library[cell.id]['transport'] = mgxs.TransportXS(groups=fine_groups)\n",
|
|
" xs_library[cell.id]['fission'] = mgxs.FissionXS(groups=fine_groups)\n",
|
|
" xs_library[cell.id]['nu-fission'] = mgxs.NuFissionXS(groups=fine_groups)\n",
|
|
" xs_library[cell.id]['nu-scatter'] = mgxs.NuScatterMatrixXS(groups=fine_groups)\n",
|
|
" xs_library[cell.id]['chi'] = mgxs.Chi(groups=fine_groups)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"Next, we showcase the use of OpenMC's [tally precision trigger](https://mit-crpg.github.io/openmc/usersguide/input.html#trigger-element) feature in conjunction with the `openmc.mgxs` module. In particular, we will assign a tally trigger of 1E-2 on the standard deviation for each of the tallies used to compute multi-group cross sections."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 12,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"# Create a tally trigger for +/- 0.01 on each tally used to compute the multi-group cross sections\n",
|
|
"tally_trigger = openmc.Trigger('std_dev', 1E-2)\n",
|
|
"\n",
|
|
"# Add the tally trigger to each of the multi-group cross section tallies\n",
|
|
"for cell in openmc_cells:\n",
|
|
" for mgxs_type in xs_library[cell.id]:\n",
|
|
" xs_library[cell.id][mgxs_type].tally_trigger = tally_trigger"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"Now, we must loop over all cells to set the cross section domains to the various cells - fuel, clad and moderator - included in the geometry. In addition, we will set each cross section to tally cross sections on a per-nuclide basis through the use of the `MGXS` class' boolean `by_nuclide` instance attribute. "
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 13,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"# Instantiate an empty TalliesFile\n",
|
|
"tallies_file = openmc.TalliesFile()\n",
|
|
"\n",
|
|
"# Iterate over all cells and cross section types\n",
|
|
"for cell in openmc_cells:\n",
|
|
" for rxn_type in xs_library[cell.id]:\n",
|
|
"\n",
|
|
" # Set the cross sections domain type to the cell\n",
|
|
" xs_library[cell.id][rxn_type].domain = cell\n",
|
|
" xs_library[cell.id][rxn_type].domain_type = 'cell'\n",
|
|
" \n",
|
|
" # Tally cross sections by nuclide\n",
|
|
" xs_library[cell.id][rxn_type].by_nuclide = True\n",
|
|
" \n",
|
|
" # Add OpenMC tallies to the tallies file for XML generation\n",
|
|
" for tally in xs_library[cell.id][rxn_type].tallies.values():\n",
|
|
" tallies_file.add_tally(tally, merge=True)\n",
|
|
"\n",
|
|
"# Export to \"tallies.xml\"\n",
|
|
"tallies_file.export_to_xml()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"Now we a have a complete set of inputs, so we can go ahead and run our simulation."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 14,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"\n",
|
|
" .d88888b. 888b d888 .d8888b.\n",
|
|
" d88P\" \"Y88b 8888b d8888 d88P Y88b\n",
|
|
" 888 888 88888b.d88888 888 888\n",
|
|
" 888 888 88888b. .d88b. 88888b. 888Y88888P888 888 \n",
|
|
" 888 888 888 \"88b d8P Y8b 888 \"88b 888 Y888P 888 888 \n",
|
|
" 888 888 888 888 88888888 888 888 888 Y8P 888 888 888\n",
|
|
" Y88b. .d88P 888 d88P Y8b. 888 888 888 \" 888 Y88b d88P\n",
|
|
" \"Y88888P\" 88888P\" \"Y8888 888 888 888 888 \"Y8888P\"\n",
|
|
"__________________888______________________________________________________\n",
|
|
" 888\n",
|
|
" 888\n",
|
|
"\n",
|
|
" Copyright: 2011-2015 Massachusetts Institute of Technology\n",
|
|
" License: http://mit-crpg.github.io/openmc/license.html\n",
|
|
" Version: 0.7.0\n",
|
|
" Git SHA1: c4b14a5ef87f004528d35cbf33fef3ed15a386ca\n",
|
|
" Date/Time: 2015-12-02 09:13:42\n",
|
|
" MPI Processes: 3\n",
|
|
"\n",
|
|
" ===========================================================================\n",
|
|
" ========================> INITIALIZATION <=========================\n",
|
|
" ===========================================================================\n",
|
|
"\n",
|
|
" Reading settings XML file...\n",
|
|
" Reading cross sections XML file...\n",
|
|
" Reading geometry XML file...\n",
|
|
" Reading materials XML file...\n",
|
|
" Reading tallies XML file...\n",
|
|
" Building neighboring cells lists for each surface...\n",
|
|
" Loading ACE cross section table: 92235.71c\n",
|
|
" Loading ACE cross section table: 92238.71c\n",
|
|
" Loading ACE cross section table: 8016.71c\n",
|
|
" Loading ACE cross section table: 1001.71c\n",
|
|
" Loading ACE cross section table: 40090.71c\n",
|
|
" Maximum neutron transport energy: 20.0000 MeV for 92235.71c\n",
|
|
" Initializing source particles...\n",
|
|
"\n",
|
|
" ===========================================================================\n",
|
|
" ====================> K EIGENVALUE SIMULATION <====================\n",
|
|
" ===========================================================================\n",
|
|
"\n",
|
|
" Bat./Gen. k Average k \n",
|
|
" ========= ======== ==================== \n",
|
|
" 1/1 1.22593 \n",
|
|
" 2/1 1.24245 \n",
|
|
" 3/1 1.24545 \n",
|
|
" 4/1 1.21868 \n",
|
|
" 5/1 1.22429 \n",
|
|
" 6/1 1.22607 \n",
|
|
" 7/1 1.21456 \n",
|
|
" 8/1 1.23816 \n",
|
|
" 9/1 1.25060 \n",
|
|
" 10/1 1.22806 \n",
|
|
" 11/1 1.19821 \n",
|
|
" 12/1 1.19897 1.19859 +/- 0.00038\n",
|
|
" 13/1 1.22119 1.20612 +/- 0.00754\n",
|
|
" 14/1 1.20701 1.20634 +/- 0.00533\n",
|
|
" 15/1 1.24784 1.21464 +/- 0.00927\n",
|
|
" 16/1 1.22413 1.21622 +/- 0.00773\n",
|
|
" 17/1 1.25050 1.22112 +/- 0.00817\n",
|
|
" 18/1 1.22006 1.22099 +/- 0.00707\n",
|
|
" 19/1 1.22813 1.22178 +/- 0.00629\n",
|
|
" 20/1 1.22791 1.22239 +/- 0.00566\n",
|
|
" 21/1 1.22729 1.22284 +/- 0.00514\n",
|
|
" 22/1 1.19867 1.22083 +/- 0.00510\n",
|
|
" 23/1 1.23796 1.22214 +/- 0.00488\n",
|
|
" 24/1 1.22412 1.22228 +/- 0.00452\n",
|
|
" 25/1 1.22638 1.22256 +/- 0.00421\n",
|
|
" 26/1 1.22181 1.22251 +/- 0.00394\n",
|
|
" 27/1 1.19055 1.22063 +/- 0.00415\n",
|
|
" 28/1 1.20683 1.21986 +/- 0.00399\n",
|
|
" 29/1 1.21689 1.21971 +/- 0.00378\n",
|
|
" 30/1 1.23670 1.22056 +/- 0.00368\n",
|
|
" 31/1 1.21396 1.22024 +/- 0.00352\n",
|
|
" 32/1 1.21389 1.21995 +/- 0.00337\n",
|
|
" 33/1 1.24649 1.22111 +/- 0.00342\n",
|
|
" 34/1 1.23204 1.22156 +/- 0.00330\n",
|
|
" 35/1 1.20768 1.22101 +/- 0.00322\n",
|
|
" 36/1 1.22271 1.22107 +/- 0.00309\n",
|
|
" 37/1 1.21796 1.22096 +/- 0.00298\n",
|
|
" 38/1 1.23842 1.22158 +/- 0.00293\n",
|
|
" 39/1 1.23080 1.22190 +/- 0.00285\n",
|
|
" 40/1 1.23572 1.22236 +/- 0.00279\n",
|
|
" 41/1 1.21691 1.22218 +/- 0.00271\n",
|
|
" 42/1 1.24616 1.22293 +/- 0.00272\n",
|
|
" 43/1 1.21903 1.22282 +/- 0.00264\n",
|
|
" 44/1 1.22967 1.22302 +/- 0.00257\n",
|
|
" 45/1 1.22053 1.22295 +/- 0.00250\n",
|
|
" 46/1 1.24087 1.22344 +/- 0.00248\n",
|
|
" 47/1 1.20251 1.22288 +/- 0.00248\n",
|
|
" 48/1 1.20331 1.22236 +/- 0.00246\n",
|
|
" 49/1 1.22724 1.22249 +/- 0.00240\n",
|
|
" 50/1 1.24798 1.22313 +/- 0.00243\n",
|
|
" Triggers unsatisfied, max unc./thresh. is 1.32110 for scatter-p1 in tally 10054\n",
|
|
" The estimated number of batches is 80\n",
|
|
" Creating state point statepoint.050.h5...\n",
|
|
" 51/1 1.22253 1.22311 +/- 0.00237\n",
|
|
" 52/1 1.24330 1.22359 +/- 0.00236\n",
|
|
" 53/1 1.23251 1.22380 +/- 0.00231\n",
|
|
" 54/1 1.21133 1.22352 +/- 0.00228\n",
|
|
" 55/1 1.24503 1.22399 +/- 0.00228\n",
|
|
" 56/1 1.22013 1.22391 +/- 0.00223\n",
|
|
" 57/1 1.23877 1.22423 +/- 0.00220\n",
|
|
" 58/1 1.23793 1.22451 +/- 0.00218\n",
|
|
" 59/1 1.21018 1.22422 +/- 0.00215\n",
|
|
" 60/1 1.22417 1.22422 +/- 0.00211\n",
|
|
" 61/1 1.23094 1.22435 +/- 0.00207\n",
|
|
" 62/1 1.23310 1.22452 +/- 0.00204\n",
|
|
" 63/1 1.22488 1.22453 +/- 0.00200\n",
|
|
" 64/1 1.22702 1.22457 +/- 0.00196\n",
|
|
" 65/1 1.18834 1.22391 +/- 0.00204\n",
|
|
" 66/1 1.23112 1.22404 +/- 0.00200\n",
|
|
" 67/1 1.21611 1.22390 +/- 0.00197\n",
|
|
" 68/1 1.22513 1.22392 +/- 0.00194\n",
|
|
" 69/1 1.21741 1.22381 +/- 0.00191\n",
|
|
" 70/1 1.22484 1.22383 +/- 0.00188\n",
|
|
" 71/1 1.19662 1.22338 +/- 0.00190\n",
|
|
" 72/1 1.23315 1.22354 +/- 0.00187\n",
|
|
" 73/1 1.22796 1.22361 +/- 0.00185\n",
|
|
" 74/1 1.21417 1.22346 +/- 0.00182\n",
|
|
" 75/1 1.21020 1.22326 +/- 0.00181\n",
|
|
" 76/1 1.23413 1.22343 +/- 0.00179\n",
|
|
" 77/1 1.22184 1.22340 +/- 0.00176\n",
|
|
" 78/1 1.20309 1.22310 +/- 0.00176\n",
|
|
" 79/1 1.23458 1.22327 +/- 0.00174\n",
|
|
" 80/1 1.20724 1.22304 +/- 0.00173\n",
|
|
" Triggers satisfied for batch 80\n",
|
|
" Creating state point statepoint.080.h5...\n",
|
|
"\n",
|
|
" ===========================================================================\n",
|
|
" ======================> SIMULATION FINISHED <======================\n",
|
|
" ===========================================================================\n",
|
|
"\n",
|
|
"\n",
|
|
" =======================> TIMING STATISTICS <=======================\n",
|
|
"\n",
|
|
" Total time for initialization = 7.5700E-01 seconds\n",
|
|
" Reading cross sections = 1.5800E-01 seconds\n",
|
|
" Total time in simulation = 1.4921E+02 seconds\n",
|
|
" Time in transport only = 1.4336E+02 seconds\n",
|
|
" Time in inactive batches = 8.6210E+00 seconds\n",
|
|
" Time in active batches = 1.4059E+02 seconds\n",
|
|
" Time synchronizing fission bank = 5.6060E+00 seconds\n",
|
|
" Sampling source sites = 1.4000E-02 seconds\n",
|
|
" SEND/RECV source sites = 4.0000E-03 seconds\n",
|
|
" Time accumulating tallies = 6.0000E-03 seconds\n",
|
|
" Total time for finalization = 1.3000E-02 seconds\n",
|
|
" Total time elapsed = 1.5002E+02 seconds\n",
|
|
" Calculation Rate (inactive) = 11599.6 neutrons/second\n",
|
|
" Calculation Rate (active) = 2845.11 neutrons/second\n",
|
|
"\n",
|
|
" ============================> RESULTS <============================\n",
|
|
"\n",
|
|
" k-effective (Collision) = 1.22327 +/- 0.00148\n",
|
|
" k-effective (Track-length) = 1.22304 +/- 0.00173\n",
|
|
" k-effective (Absorption) = 1.22407 +/- 0.00129\n",
|
|
" Combined k-effective = 1.22373 +/- 0.00113\n",
|
|
" Leakage Fraction = 0.00000 +/- 0.00000\n",
|
|
"\n"
|
|
]
|
|
},
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"0"
|
|
]
|
|
},
|
|
"execution_count": 14,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"# Run OpenMC\n",
|
|
"executor = openmc.Executor()\n",
|
|
"executor.run_simulation(output=True, mpi_procs=3)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"## Tally Data Processing"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"Our simulation ran successfully and created statepoint and summary output files. We begin our analysis by instantiating a `StatePoint` object. "
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 15,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"# Load the last statepoint file\n",
|
|
"sp = openmc.StatePoint('statepoint.080.h5')"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"In addition to the statepoint file, our simulation also created a summary file which encapsulates information about the materials and geometry. This is necessary for the `openmc.mgxs` module to properly process the tally data. We first create a `Summary` object and link it with the statepoint."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 16,
|
|
"metadata": {
|
|
"collapsed": true
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"# Load the summary file and link it with the statepoint\n",
|
|
"su = openmc.Summary('summary.h5')\n",
|
|
"sp.link_with_summary(su)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"The statepoint is now ready to be analyzed by our multi-group cross sections. We simply have to load the tallies from the `StatePoint` into each object as follows and our `MGXS` objects will compute the cross sections for us under-the-hood."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 17,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"# Iterate over all cells and cross section types\n",
|
|
"for cell in openmc_cells:\n",
|
|
" for rxn_type in xs_library[cell.id]:\n",
|
|
" xs_library[cell.id][rxn_type].load_from_statepoint(sp)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"That's it! Our multi-group cross sections are now ready for the big spotlight. This time we have cross sections in three distinct spatial zones - fuel, clad and moderator - on a per-nuclide basis."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"## Extracting and Storing MGXS Data"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"Let's first inspect one of our cross sections by printing it to the screen as a microscopic cross section in units of barns."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 18,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Multi-Group XS\n",
|
|
"\tReaction Type =\tnu-fission\n",
|
|
"\tDomain Type =\tcell\n",
|
|
"\tDomain ID =\t10000\n",
|
|
"\tNuclide =\tU-235\n",
|
|
"\tCross Sections [barns]:\n",
|
|
" Group 1 [0.821 - 20.0 MeV]:\t3.31e+00 +/- 1.88e-01%\n",
|
|
" Group 2 [0.00553 - 0.821 MeV]:\t3.97e+00 +/- 1.24e-01%\n",
|
|
" Group 3 [4e-06 - 0.00553 MeV]:\t5.50e+01 +/- 2.02e-01%\n",
|
|
" Group 4 [6.25e-07 - 4e-06 MeV]:\t8.83e+01 +/- 3.56e-01%\n",
|
|
" Group 5 [2.8e-07 - 6.25e-07 MeV]:\t2.90e+02 +/- 4.54e-01%\n",
|
|
" Group 6 [1.4e-07 - 2.8e-07 MeV]:\t4.49e+02 +/- 4.10e-01%\n",
|
|
" Group 7 [5.8e-08 - 1.4e-07 MeV]:\t6.87e+02 +/- 2.56e-01%\n",
|
|
" Group 8 [0.0 - 5.8e-08 MeV]:\t1.44e+03 +/- 2.82e-01%\n",
|
|
"\n",
|
|
"\tNuclide =\tU-238\n",
|
|
"\tCross Sections [barns]:\n",
|
|
" Group 1 [0.821 - 20.0 MeV]:\t1.06e+00 +/- 2.30e-01%\n",
|
|
" Group 2 [0.00553 - 0.821 MeV]:\t1.21e-03 +/- 2.25e-01%\n",
|
|
" Group 3 [4e-06 - 0.00553 MeV]:\t5.82e-04 +/- 3.09e+00%\n",
|
|
" Group 4 [6.25e-07 - 4e-06 MeV]:\t6.54e-06 +/- 3.27e-01%\n",
|
|
" Group 5 [2.8e-07 - 6.25e-07 MeV]:\t1.07e-05 +/- 4.39e-01%\n",
|
|
" Group 6 [1.4e-07 - 2.8e-07 MeV]:\t1.55e-05 +/- 4.12e-01%\n",
|
|
" Group 7 [5.8e-08 - 1.4e-07 MeV]:\t2.30e-05 +/- 2.57e-01%\n",
|
|
" Group 8 [0.0 - 5.8e-08 MeV]:\t4.24e-05 +/- 2.81e-01%\n",
|
|
"\n",
|
|
"\n",
|
|
"\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"nufission = xs_library[fuel_cell.id]['nu-fission']\n",
|
|
"nufission.print_xs(xs_type='micro', nuclides=['U-235', 'U-238'])"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"Our multi-group cross sections are capable of summing across all nuclides to provide us with macroscopic cross sections as well."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 19,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Multi-Group XS\n",
|
|
"\tReaction Type =\tnu-fission\n",
|
|
"\tDomain Type =\tcell\n",
|
|
"\tDomain ID =\t10000\n",
|
|
"\tCross Sections [cm^-1]:\n",
|
|
" Group 1 [0.821 - 20.0 MeV]:\t2.52e-02 +/- 2.19e-01%\n",
|
|
" Group 2 [0.00553 - 0.821 MeV]:\t1.51e-03 +/- 1.22e-01%\n",
|
|
" Group 3 [4e-06 - 0.00553 MeV]:\t2.06e-02 +/- 2.02e-01%\n",
|
|
" Group 4 [6.25e-07 - 4e-06 MeV]:\t3.31e-02 +/- 3.56e-01%\n",
|
|
" Group 5 [2.8e-07 - 6.25e-07 MeV]:\t1.09e-01 +/- 4.54e-01%\n",
|
|
" Group 6 [1.4e-07 - 2.8e-07 MeV]:\t1.69e-01 +/- 4.10e-01%\n",
|
|
" Group 7 [5.8e-08 - 1.4e-07 MeV]:\t2.58e-01 +/- 2.56e-01%\n",
|
|
" Group 8 [0.0 - 5.8e-08 MeV]:\t5.40e-01 +/- 2.82e-01%\n",
|
|
"\n",
|
|
"\n",
|
|
"\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"nufission = xs_library[fuel_cell.id]['nu-fission']\n",
|
|
"nufission.print_xs(xs_type='macro', nuclides='sum')"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"Although a printed report is nice, it is not scalable or flexible. Let's extract the microscopic cross section data for the moderator as a [Pandas](http://pandas.pydata.org/) `DataFrame` ."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 20,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/html": [
|
|
"<div>\n",
|
|
"<table border=\"1\" class=\"dataframe\">\n",
|
|
" <thead>\n",
|
|
" <tr style=\"text-align: right;\">\n",
|
|
" <th></th>\n",
|
|
" <th>cell</th>\n",
|
|
" <th>group in</th>\n",
|
|
" <th>group out</th>\n",
|
|
" <th>nuclide</th>\n",
|
|
" <th>mean</th>\n",
|
|
" <th>std. dev.</th>\n",
|
|
" </tr>\n",
|
|
" </thead>\n",
|
|
" <tbody>\n",
|
|
" <tr>\n",
|
|
" <th>126</th>\n",
|
|
" <td>10002</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>H-1</td>\n",
|
|
" <td>0.234022</td>\n",
|
|
" <td>0.003645</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>127</th>\n",
|
|
" <td>10002</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>O-16</td>\n",
|
|
" <td>1.560305</td>\n",
|
|
" <td>0.006280</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>124</th>\n",
|
|
" <td>10002</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>H-1</td>\n",
|
|
" <td>1.588025</td>\n",
|
|
" <td>0.002815</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>125</th>\n",
|
|
" <td>10002</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>O-16</td>\n",
|
|
" <td>0.285147</td>\n",
|
|
" <td>0.001392</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>122</th>\n",
|
|
" <td>10002</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>H-1</td>\n",
|
|
" <td>0.010776</td>\n",
|
|
" <td>0.000186</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>123</th>\n",
|
|
" <td>10002</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>3</td>\n",
|
|
" <td>O-16</td>\n",
|
|
" <td>0.000000</td>\n",
|
|
" <td>0.000000</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>120</th>\n",
|
|
" <td>10002</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>H-1</td>\n",
|
|
" <td>0.000023</td>\n",
|
|
" <td>0.000010</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>121</th>\n",
|
|
" <td>10002</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>4</td>\n",
|
|
" <td>O-16</td>\n",
|
|
" <td>0.000000</td>\n",
|
|
" <td>0.000000</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>118</th>\n",
|
|
" <td>10002</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>5</td>\n",
|
|
" <td>H-1</td>\n",
|
|
" <td>0.000000</td>\n",
|
|
" <td>0.000000</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>119</th>\n",
|
|
" <td>10002</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>5</td>\n",
|
|
" <td>O-16</td>\n",
|
|
" <td>0.000000</td>\n",
|
|
" <td>0.000000</td>\n",
|
|
" </tr>\n",
|
|
" </tbody>\n",
|
|
"</table>\n",
|
|
"</div>"
|
|
],
|
|
"text/plain": [
|
|
" cell group in group out nuclide mean std. dev.\n",
|
|
"126 10002 1 1 H-1 0.234022 0.003645\n",
|
|
"127 10002 1 1 O-16 1.560305 0.006280\n",
|
|
"124 10002 1 2 H-1 1.588025 0.002815\n",
|
|
"125 10002 1 2 O-16 0.285147 0.001392\n",
|
|
"122 10002 1 3 H-1 0.010776 0.000186\n",
|
|
"123 10002 1 3 O-16 0.000000 0.000000\n",
|
|
"120 10002 1 4 H-1 0.000023 0.000010\n",
|
|
"121 10002 1 4 O-16 0.000000 0.000000\n",
|
|
"118 10002 1 5 H-1 0.000000 0.000000\n",
|
|
"119 10002 1 5 O-16 0.000000 0.000000"
|
|
]
|
|
},
|
|
"execution_count": 20,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"nuscatter = xs_library[moderator_cell.id]['nu-scatter']\n",
|
|
"df = nuscatter.get_pandas_dataframe(xs_type='micro')\n",
|
|
"df.head(10)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"Next, we illustate how one can easily take multi-group cross sections and condense them down to a coarser energy group structure. The `MGXS` class includes a `get_condensed_xs(...)` method which takes an `EnergyGroups` parameter with a coarse(r) group structure and returns a new `MGXS` condensed to the coarse groups. We illustrate this process below using the 2-group structure created earlier."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 21,
|
|
"metadata": {
|
|
"collapsed": true
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"# Extract the 16-group transport cross section for the fuel\n",
|
|
"fine_xs = xs_library[fuel_cell.id]['transport']\n",
|
|
"\n",
|
|
"# Condense to the 2-group structure\n",
|
|
"condensed_xs = fine_xs.get_condensed_xs(coarse_groups)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"Group condensation is as simple as that! We now have a new coarse 2-group `TransportXS` in addition to our original 16-group `TransportXS`. Let's inspect the 2-group `TransportXS` by printing it to the screen and extracting a Pandas `DataFrame` as we have already learned how to do."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 22,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Multi-Group XS\n",
|
|
"\tReaction Type =\ttransport\n",
|
|
"\tDomain Type =\tcell\n",
|
|
"\tDomain ID =\t10000\n",
|
|
"\tNuclide =\tU-235\n",
|
|
"\tCross Sections [cm^-1]:\n",
|
|
" Group 1 [6.25e-07 - 20.0 MeV]:\t7.81e-03 +/- 4.75e-01%\n",
|
|
" Group 2 [0.0 - 6.25e-07 MeV]:\t1.82e-01 +/- 1.89e-01%\n",
|
|
"\n",
|
|
"\tNuclide =\tU-238\n",
|
|
"\tCross Sections [cm^-1]:\n",
|
|
" Group 1 [6.25e-07 - 20.0 MeV]:\t2.17e-01 +/- 1.31e-01%\n",
|
|
" Group 2 [0.0 - 6.25e-07 MeV]:\t2.53e-01 +/- 2.08e-01%\n",
|
|
"\n",
|
|
"\tNuclide =\tO-16\n",
|
|
"\tCross Sections [cm^-1]:\n",
|
|
" Group 1 [6.25e-07 - 20.0 MeV]:\t1.45e-01 +/- 1.50e-01%\n",
|
|
" Group 2 [0.0 - 6.25e-07 MeV]:\t1.74e-01 +/- 2.66e-01%\n",
|
|
"\n",
|
|
"\n",
|
|
"\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"condensed_xs.print_xs()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 23,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/html": [
|
|
"<div>\n",
|
|
"<table border=\"1\" class=\"dataframe\">\n",
|
|
" <thead>\n",
|
|
" <tr style=\"text-align: right;\">\n",
|
|
" <th></th>\n",
|
|
" <th>cell</th>\n",
|
|
" <th>group in</th>\n",
|
|
" <th>nuclide</th>\n",
|
|
" <th>mean</th>\n",
|
|
" <th>std. dev.</th>\n",
|
|
" </tr>\n",
|
|
" </thead>\n",
|
|
" <tbody>\n",
|
|
" <tr>\n",
|
|
" <th>3</th>\n",
|
|
" <td>10000</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>U-235</td>\n",
|
|
" <td>20.828127</td>\n",
|
|
" <td>0.098842</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>4</th>\n",
|
|
" <td>10000</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>U-238</td>\n",
|
|
" <td>9.582295</td>\n",
|
|
" <td>0.012550</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>5</th>\n",
|
|
" <td>10000</td>\n",
|
|
" <td>1</td>\n",
|
|
" <td>O-16</td>\n",
|
|
" <td>3.157358</td>\n",
|
|
" <td>0.004725</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>0</th>\n",
|
|
" <td>10000</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>U-235</td>\n",
|
|
" <td>485.217649</td>\n",
|
|
" <td>0.916465</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>1</th>\n",
|
|
" <td>10000</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>U-238</td>\n",
|
|
" <td>11.176081</td>\n",
|
|
" <td>0.023196</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>2</th>\n",
|
|
" <td>10000</td>\n",
|
|
" <td>2</td>\n",
|
|
" <td>O-16</td>\n",
|
|
" <td>3.788167</td>\n",
|
|
" <td>0.010090</td>\n",
|
|
" </tr>\n",
|
|
" </tbody>\n",
|
|
"</table>\n",
|
|
"</div>"
|
|
],
|
|
"text/plain": [
|
|
" cell group in nuclide mean std. dev.\n",
|
|
"3 10000 1 U-235 20.828127 0.098842\n",
|
|
"4 10000 1 U-238 9.582295 0.012550\n",
|
|
"5 10000 1 O-16 3.157358 0.004725\n",
|
|
"0 10000 2 U-235 485.217649 0.916465\n",
|
|
"1 10000 2 U-238 11.176081 0.023196\n",
|
|
"2 10000 2 O-16 3.788167 0.010090"
|
|
]
|
|
},
|
|
"execution_count": 23,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"df = condensed_xs.get_pandas_dataframe(xs_type='micro')\n",
|
|
"df"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"## Verification with OpenMOC"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"Now, let's verify our cross sections using OpenMOC. First, we use OpenCG construct an equivalent OpenMOC geometry."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 24,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"# Create an OpenMOC Geometry from the OpenCG Geometry\n",
|
|
"openmoc_geometry = get_openmoc_geometry(su.opencg_geometry)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"Next, we we can inject the multi-group cross sections into the equivalent fuel pin cell OpenMOC geometry."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 25,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"# Get all OpenMOC cells in the gometry\n",
|
|
"openmoc_cells = openmoc_geometry.getRootUniverse().getAllCells()\n",
|
|
"\n",
|
|
"# Inject multi-group cross sections into OpenMOC Materials\n",
|
|
"for cell_id, cell in openmoc_cells.items():\n",
|
|
" \n",
|
|
" # Ignore the root cell\n",
|
|
" if cell.getName() == 'root cell':\n",
|
|
" continue\n",
|
|
" \n",
|
|
" # Get a reference to the Material filling this Cell\n",
|
|
" openmoc_material = cell.getFillMaterial()\n",
|
|
" \n",
|
|
" # Set the number of energy groups for the Material\n",
|
|
" openmoc_material.setNumEnergyGroups(fine_groups.num_groups)\n",
|
|
" \n",
|
|
" # Extract the appropriate cross section objects for this cell\n",
|
|
" transport = xs_library[cell_id]['transport']\n",
|
|
" nufission = xs_library[cell_id]['nu-fission']\n",
|
|
" nuscatter = xs_library[cell_id]['nu-scatter']\n",
|
|
" chi = xs_library[cell_id]['chi']\n",
|
|
" \n",
|
|
" # Inject NumPy arrays of cross section data into the Material\n",
|
|
" # NOTE: Sum across nuclides to get macro cross sections needed by OpenMOC\n",
|
|
" openmoc_material.setSigmaT(transport.get_xs(nuclides='sum').flatten())\n",
|
|
" openmoc_material.setNuSigmaF(nufission.get_xs(nuclides='sum').flatten())\n",
|
|
" openmoc_material.setSigmaS(nuscatter.get_xs(nuclides='sum').flatten())\n",
|
|
" openmoc_material.setChi(chi.get_xs(nuclides='sum').flatten())"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"We are now ready to run OpenMOC to verify our cross-sections from OpenMC."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 26,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"[ NORMAL ] Importing ray tracing data from file...\n",
|
|
"[ NORMAL ] Computing the eigenvalue...\n",
|
|
"[ NORMAL ] Iteration 0:\tk_eff = 0.574633\tres = 1.959E-316\n",
|
|
"[ NORMAL ] Iteration 1:\tk_eff = 0.679931\tres = 4.254E-01\n",
|
|
"[ NORMAL ] Iteration 2:\tk_eff = 0.660910\tres = 1.832E-01\n",
|
|
"[ NORMAL ] Iteration 3:\tk_eff = 0.658975\tres = 2.797E-02\n",
|
|
"[ NORMAL ] Iteration 4:\tk_eff = 0.642976\tres = 2.928E-03\n",
|
|
"[ NORMAL ] Iteration 5:\tk_eff = 0.625710\tres = 2.428E-02\n",
|
|
"[ NORMAL ] Iteration 6:\tk_eff = 0.606520\tres = 2.685E-02\n",
|
|
"[ NORMAL ] Iteration 7:\tk_eff = 0.587277\tres = 3.067E-02\n",
|
|
"[ NORMAL ] Iteration 8:\tk_eff = 0.568777\tres = 3.173E-02\n",
|
|
"[ NORMAL ] Iteration 9:\tk_eff = 0.551415\tres = 3.150E-02\n",
|
|
"[ NORMAL ] Iteration 10:\tk_eff = 0.535708\tres = 3.052E-02\n",
|
|
"[ NORMAL ] Iteration 11:\tk_eff = 0.521916\tres = 2.849E-02\n",
|
|
"[ NORMAL ] Iteration 12:\tk_eff = 0.510221\tres = 2.575E-02\n",
|
|
"[ NORMAL ] Iteration 13:\tk_eff = 0.500691\tres = 2.241E-02\n",
|
|
"[ NORMAL ] Iteration 14:\tk_eff = 0.493392\tres = 1.868E-02\n",
|
|
"[ NORMAL ] Iteration 15:\tk_eff = 0.488317\tres = 1.458E-02\n",
|
|
"[ NORMAL ] Iteration 16:\tk_eff = 0.485438\tres = 1.028E-02\n",
|
|
"[ NORMAL ] Iteration 17:\tk_eff = 0.484705\tres = 5.896E-03\n",
|
|
"[ NORMAL ] Iteration 18:\tk_eff = 0.486045\tres = 1.510E-03\n",
|
|
"[ NORMAL ] Iteration 19:\tk_eff = 0.489362\tres = 2.766E-03\n",
|
|
"[ NORMAL ] Iteration 20:\tk_eff = 0.494546\tres = 6.824E-03\n",
|
|
"[ NORMAL ] Iteration 21:\tk_eff = 0.501481\tres = 1.059E-02\n",
|
|
"[ NORMAL ] Iteration 22:\tk_eff = 0.510041\tres = 1.402E-02\n",
|
|
"[ NORMAL ] Iteration 23:\tk_eff = 0.520094\tres = 1.707E-02\n",
|
|
"[ NORMAL ] Iteration 24:\tk_eff = 0.531507\tres = 1.971E-02\n",
|
|
"[ NORMAL ] Iteration 25:\tk_eff = 0.544144\tres = 2.194E-02\n",
|
|
"[ NORMAL ] Iteration 26:\tk_eff = 0.557872\tres = 2.378E-02\n",
|
|
"[ NORMAL ] Iteration 27:\tk_eff = 0.572557\tres = 2.523E-02\n",
|
|
"[ NORMAL ] Iteration 28:\tk_eff = 0.588072\tres = 2.632E-02\n",
|
|
"[ NORMAL ] Iteration 29:\tk_eff = 0.604293\tres = 2.710E-02\n",
|
|
"[ NORMAL ] Iteration 30:\tk_eff = 0.621101\tres = 2.758E-02\n",
|
|
"[ NORMAL ] Iteration 31:\tk_eff = 0.638382\tres = 2.781E-02\n",
|
|
"[ NORMAL ] Iteration 32:\tk_eff = 0.656032\tres = 2.782E-02\n",
|
|
"[ NORMAL ] Iteration 33:\tk_eff = 0.673950\tres = 2.765E-02\n",
|
|
"[ NORMAL ] Iteration 34:\tk_eff = 0.692043\tres = 2.731E-02\n",
|
|
"[ NORMAL ] Iteration 35:\tk_eff = 0.710227\tres = 2.685E-02\n",
|
|
"[ NORMAL ] Iteration 36:\tk_eff = 0.728423\tres = 2.628E-02\n",
|
|
"[ NORMAL ] Iteration 37:\tk_eff = 0.746558\tres = 2.562E-02\n",
|
|
"[ NORMAL ] Iteration 38:\tk_eff = 0.764569\tres = 2.490E-02\n",
|
|
"[ NORMAL ] Iteration 39:\tk_eff = 0.782396\tres = 2.412E-02\n",
|
|
"[ NORMAL ] Iteration 40:\tk_eff = 0.799989\tres = 2.332E-02\n",
|
|
"[ NORMAL ] Iteration 41:\tk_eff = 0.817301\tres = 2.249E-02\n",
|
|
"[ NORMAL ] Iteration 42:\tk_eff = 0.834292\tres = 2.164E-02\n",
|
|
"[ NORMAL ] Iteration 43:\tk_eff = 0.850927\tres = 2.079E-02\n",
|
|
"[ NORMAL ] Iteration 44:\tk_eff = 0.867177\tres = 1.994E-02\n",
|
|
"[ NORMAL ] Iteration 45:\tk_eff = 0.883017\tres = 1.910E-02\n",
|
|
"[ NORMAL ] Iteration 46:\tk_eff = 0.898427\tres = 1.827E-02\n",
|
|
"[ NORMAL ] Iteration 47:\tk_eff = 0.913389\tres = 1.745E-02\n",
|
|
"[ NORMAL ] Iteration 48:\tk_eff = 0.927891\tres = 1.665E-02\n",
|
|
"[ NORMAL ] Iteration 49:\tk_eff = 0.941925\tres = 1.588E-02\n",
|
|
"[ NORMAL ] Iteration 50:\tk_eff = 0.955483\tres = 1.512E-02\n",
|
|
"[ NORMAL ] Iteration 51:\tk_eff = 0.968562\tres = 1.439E-02\n",
|
|
"[ NORMAL ] Iteration 52:\tk_eff = 0.981161\tres = 1.369E-02\n",
|
|
"[ NORMAL ] Iteration 53:\tk_eff = 0.993282\tres = 1.301E-02\n",
|
|
"[ NORMAL ] Iteration 54:\tk_eff = 1.004928\tres = 1.235E-02\n",
|
|
"[ NORMAL ] Iteration 55:\tk_eff = 1.016104\tres = 1.172E-02\n",
|
|
"[ NORMAL ] Iteration 56:\tk_eff = 1.026816\tres = 1.112E-02\n",
|
|
"[ NORMAL ] Iteration 57:\tk_eff = 1.037073\tres = 1.054E-02\n",
|
|
"[ NORMAL ] Iteration 58:\tk_eff = 1.046883\tres = 9.989E-03\n",
|
|
"[ NORMAL ] Iteration 59:\tk_eff = 1.056257\tres = 9.460E-03\n",
|
|
"[ NORMAL ] Iteration 60:\tk_eff = 1.065205\tres = 8.954E-03\n",
|
|
"[ NORMAL ] Iteration 61:\tk_eff = 1.073739\tres = 8.472E-03\n",
|
|
"[ NORMAL ] Iteration 62:\tk_eff = 1.081871\tres = 8.012E-03\n",
|
|
"[ NORMAL ] Iteration 63:\tk_eff = 1.089613\tres = 7.573E-03\n",
|
|
"[ NORMAL ] Iteration 64:\tk_eff = 1.096979\tres = 7.156E-03\n",
|
|
"[ NORMAL ] Iteration 65:\tk_eff = 1.103980\tres = 6.760E-03\n",
|
|
"[ NORMAL ] Iteration 66:\tk_eff = 1.110631\tres = 6.382E-03\n",
|
|
"[ NORMAL ] Iteration 67:\tk_eff = 1.116943\tres = 6.024E-03\n",
|
|
"[ NORMAL ] Iteration 68:\tk_eff = 1.122931\tres = 5.684E-03\n",
|
|
"[ NORMAL ] Iteration 69:\tk_eff = 1.128607\tres = 5.361E-03\n",
|
|
"[ NORMAL ] Iteration 70:\tk_eff = 1.133984\tres = 5.055E-03\n",
|
|
"[ NORMAL ] Iteration 71:\tk_eff = 1.139075\tres = 4.764E-03\n",
|
|
"[ NORMAL ] Iteration 72:\tk_eff = 1.143892\tres = 4.489E-03\n",
|
|
"[ NORMAL ] Iteration 73:\tk_eff = 1.148447\tres = 4.229E-03\n",
|
|
"[ NORMAL ] Iteration 74:\tk_eff = 1.152752\tres = 3.982E-03\n",
|
|
"[ NORMAL ] Iteration 75:\tk_eff = 1.156819\tres = 3.749E-03\n",
|
|
"[ NORMAL ] Iteration 76:\tk_eff = 1.160659\tres = 3.528E-03\n",
|
|
"[ NORMAL ] Iteration 77:\tk_eff = 1.164282\tres = 3.319E-03\n",
|
|
"[ NORMAL ] Iteration 78:\tk_eff = 1.167701\tres = 3.122E-03\n",
|
|
"[ NORMAL ] Iteration 79:\tk_eff = 1.170923\tres = 2.936E-03\n",
|
|
"[ NORMAL ] Iteration 80:\tk_eff = 1.173961\tres = 2.760E-03\n",
|
|
"[ NORMAL ] Iteration 81:\tk_eff = 1.176822\tres = 2.594E-03\n",
|
|
"[ NORMAL ] Iteration 82:\tk_eff = 1.179516\tres = 2.437E-03\n",
|
|
"[ NORMAL ] Iteration 83:\tk_eff = 1.182052\tres = 2.289E-03\n",
|
|
"[ NORMAL ] Iteration 84:\tk_eff = 1.184438\tres = 2.150E-03\n",
|
|
"[ NORMAL ] Iteration 85:\tk_eff = 1.186682\tres = 2.019E-03\n",
|
|
"[ NORMAL ] Iteration 86:\tk_eff = 1.188792\tres = 1.895E-03\n",
|
|
"[ NORMAL ] Iteration 87:\tk_eff = 1.190775\tres = 1.778E-03\n",
|
|
"[ NORMAL ] Iteration 88:\tk_eff = 1.192639\tres = 1.668E-03\n",
|
|
"[ NORMAL ] Iteration 89:\tk_eff = 1.194389\tres = 1.565E-03\n",
|
|
"[ NORMAL ] Iteration 90:\tk_eff = 1.196032\tres = 1.468E-03\n",
|
|
"[ NORMAL ] Iteration 91:\tk_eff = 1.197575\tres = 1.376E-03\n",
|
|
"[ NORMAL ] Iteration 92:\tk_eff = 1.199023\tres = 1.290E-03\n",
|
|
"[ NORMAL ] Iteration 93:\tk_eff = 1.200381\tres = 1.209E-03\n",
|
|
"[ NORMAL ] Iteration 94:\tk_eff = 1.201654\tres = 1.133E-03\n",
|
|
"[ NORMAL ] Iteration 95:\tk_eff = 1.202849\tres = 1.061E-03\n",
|
|
"[ NORMAL ] Iteration 96:\tk_eff = 1.203968\tres = 9.939E-04\n",
|
|
"[ NORMAL ] Iteration 97:\tk_eff = 1.205017\tres = 9.307E-04\n",
|
|
"[ NORMAL ] Iteration 98:\tk_eff = 1.206000\tres = 8.714E-04\n",
|
|
"[ NORMAL ] Iteration 99:\tk_eff = 1.206921\tres = 8.157E-04\n",
|
|
"[ NORMAL ] Iteration 100:\tk_eff = 1.207783\tres = 7.634E-04\n",
|
|
"[ NORMAL ] Iteration 101:\tk_eff = 1.208590\tres = 7.144E-04\n",
|
|
"[ NORMAL ] Iteration 102:\tk_eff = 1.209346\tres = 6.684E-04\n",
|
|
"[ NORMAL ] Iteration 103:\tk_eff = 1.210053\tres = 6.252E-04\n",
|
|
"[ NORMAL ] Iteration 104:\tk_eff = 1.210715\tres = 5.848E-04\n",
|
|
"[ NORMAL ] Iteration 105:\tk_eff = 1.211334\tres = 5.468E-04\n",
|
|
"[ NORMAL ] Iteration 106:\tk_eff = 1.211913\tres = 5.113E-04\n",
|
|
"[ NORMAL ] Iteration 107:\tk_eff = 1.212454\tres = 4.779E-04\n",
|
|
"[ NORMAL ] Iteration 108:\tk_eff = 1.212960\tres = 4.467E-04\n",
|
|
"[ NORMAL ] Iteration 109:\tk_eff = 1.213434\tres = 4.175E-04\n",
|
|
"[ NORMAL ] Iteration 110:\tk_eff = 1.213876\tres = 3.901E-04\n",
|
|
"[ NORMAL ] Iteration 111:\tk_eff = 1.214289\tres = 3.644E-04\n",
|
|
"[ NORMAL ] Iteration 112:\tk_eff = 1.214675\tres = 3.404E-04\n",
|
|
"[ NORMAL ] Iteration 113:\tk_eff = 1.215036\tres = 3.180E-04\n",
|
|
"[ NORMAL ] Iteration 114:\tk_eff = 1.215373\tres = 2.969E-04\n",
|
|
"[ NORMAL ] Iteration 115:\tk_eff = 1.215687\tres = 2.773E-04\n",
|
|
"[ NORMAL ] Iteration 116:\tk_eff = 1.215981\tres = 2.589E-04\n",
|
|
"[ NORMAL ] Iteration 117:\tk_eff = 1.216255\tres = 2.416E-04\n",
|
|
"[ NORMAL ] Iteration 118:\tk_eff = 1.216511\tres = 2.256E-04\n",
|
|
"[ NORMAL ] Iteration 119:\tk_eff = 1.216750\tres = 2.105E-04\n",
|
|
"[ NORMAL ] Iteration 120:\tk_eff = 1.216973\tres = 1.964E-04\n",
|
|
"[ NORMAL ] Iteration 121:\tk_eff = 1.217181\tres = 1.833E-04\n",
|
|
"[ NORMAL ] Iteration 122:\tk_eff = 1.217376\tres = 1.710E-04\n",
|
|
"[ NORMAL ] Iteration 123:\tk_eff = 1.217557\tres = 1.595E-04\n",
|
|
"[ NORMAL ] Iteration 124:\tk_eff = 1.217726\tres = 1.488E-04\n",
|
|
"[ NORMAL ] Iteration 125:\tk_eff = 1.217883\tres = 1.388E-04\n",
|
|
"[ NORMAL ] Iteration 126:\tk_eff = 1.218030\tres = 1.294E-04\n",
|
|
"[ NORMAL ] Iteration 127:\tk_eff = 1.218167\tres = 1.207E-04\n",
|
|
"[ NORMAL ] Iteration 128:\tk_eff = 1.218295\tres = 1.125E-04\n",
|
|
"[ NORMAL ] Iteration 129:\tk_eff = 1.218414\tres = 1.049E-04\n",
|
|
"[ NORMAL ] Iteration 130:\tk_eff = 1.218525\tres = 9.777E-05\n",
|
|
"[ NORMAL ] Iteration 131:\tk_eff = 1.218629\tres = 9.113E-05\n",
|
|
"[ NORMAL ] Iteration 132:\tk_eff = 1.218725\tres = 8.494E-05\n",
|
|
"[ NORMAL ] Iteration 133:\tk_eff = 1.218815\tres = 7.916E-05\n",
|
|
"[ NORMAL ] Iteration 134:\tk_eff = 1.218899\tres = 7.376E-05\n",
|
|
"[ NORMAL ] Iteration 135:\tk_eff = 1.218977\tres = 6.873E-05\n",
|
|
"[ NORMAL ] Iteration 136:\tk_eff = 1.219050\tres = 6.404E-05\n",
|
|
"[ NORMAL ] Iteration 137:\tk_eff = 1.219117\tres = 5.966E-05\n",
|
|
"[ NORMAL ] Iteration 138:\tk_eff = 1.219180\tres = 5.557E-05\n",
|
|
"[ NORMAL ] Iteration 139:\tk_eff = 1.219239\tres = 5.177E-05\n",
|
|
"[ NORMAL ] Iteration 140:\tk_eff = 1.219294\tres = 4.822E-05\n",
|
|
"[ NORMAL ] Iteration 141:\tk_eff = 1.219345\tres = 4.491E-05\n",
|
|
"[ NORMAL ] Iteration 142:\tk_eff = 1.219392\tres = 4.182E-05\n",
|
|
"[ NORMAL ] Iteration 143:\tk_eff = 1.219437\tres = 3.894E-05\n",
|
|
"[ NORMAL ] Iteration 144:\tk_eff = 1.219478\tres = 3.626E-05\n",
|
|
"[ NORMAL ] Iteration 145:\tk_eff = 1.219516\tres = 3.376E-05\n",
|
|
"[ NORMAL ] Iteration 146:\tk_eff = 1.219552\tres = 3.144E-05\n",
|
|
"[ NORMAL ] Iteration 147:\tk_eff = 1.219585\tres = 2.927E-05\n",
|
|
"[ NORMAL ] Iteration 148:\tk_eff = 1.219616\tres = 2.724E-05\n",
|
|
"[ NORMAL ] Iteration 149:\tk_eff = 1.219645\tres = 2.536E-05\n",
|
|
"[ NORMAL ] Iteration 150:\tk_eff = 1.219672\tres = 2.361E-05\n",
|
|
"[ NORMAL ] Iteration 151:\tk_eff = 1.219696\tres = 2.197E-05\n",
|
|
"[ NORMAL ] Iteration 152:\tk_eff = 1.219720\tres = 2.045E-05\n",
|
|
"[ NORMAL ] Iteration 153:\tk_eff = 1.219741\tres = 1.903E-05\n",
|
|
"[ NORMAL ] Iteration 154:\tk_eff = 1.219761\tres = 1.771E-05\n",
|
|
"[ NORMAL ] Iteration 155:\tk_eff = 1.219780\tres = 1.648E-05\n",
|
|
"[ NORMAL ] Iteration 156:\tk_eff = 1.219797\tres = 1.534E-05\n",
|
|
"[ NORMAL ] Iteration 157:\tk_eff = 1.219814\tres = 1.427E-05\n",
|
|
"[ NORMAL ] Iteration 158:\tk_eff = 1.219829\tres = 1.328E-05\n",
|
|
"[ NORMAL ] Iteration 159:\tk_eff = 1.219843\tres = 1.235E-05\n",
|
|
"[ NORMAL ] Iteration 160:\tk_eff = 1.219856\tres = 1.149E-05\n",
|
|
"[ NORMAL ] Iteration 161:\tk_eff = 1.219868\tres = 1.069E-05\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"# Generate tracks for OpenMOC\n",
|
|
"openmoc_geometry.initializeFlatSourceRegions()\n",
|
|
"track_generator = openmoc.TrackGenerator(openmoc_geometry, num_azim=128, spacing=0.1)\n",
|
|
"track_generator.generateTracks()\n",
|
|
"\n",
|
|
"# Run OpenMOC\n",
|
|
"solver = openmoc.CPUSolver(track_generator)\n",
|
|
"solver.computeEigenvalue()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"We report the eigenvalues computed by OpenMC and OpenMOC here together to summarize our results."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 27,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"openmc keff = 1.223729\n",
|
|
"openmoc keff = 1.219868\n",
|
|
"bias [pcm]: -386.1\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"# Print report of keff and bias with OpenMC\n",
|
|
"openmoc_keff = solver.getKeff()\n",
|
|
"openmc_keff = sp.k_combined[0]\n",
|
|
"bias = (openmoc_keff - openmc_keff) * 1e5\n",
|
|
"\n",
|
|
"print('openmc keff = {0:1.6f}'.format(openmc_keff))\n",
|
|
"print('openmoc keff = {0:1.6f}'.format(openmoc_keff))\n",
|
|
"print('bias [pcm]: {0:1.1f}'.format(bias))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"As a sanity check, let's run a simulation with the coarse 2-group cross sections to ensure that they also produce a reasonable result."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 28,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"openmoc_geometry = get_openmoc_geometry(su.opencg_geometry)\n",
|
|
"openmoc_cells = openmoc_geometry.getRootUniverse().getAllCells()\n",
|
|
"\n",
|
|
"# Inject multi-group cross sections into OpenMOC Materials\n",
|
|
"for cell_id, cell in openmoc_cells.items():\n",
|
|
" \n",
|
|
" # Ignore the root cell\n",
|
|
" if cell.getName() == 'root cell':\n",
|
|
" continue\n",
|
|
" \n",
|
|
" openmoc_material = cell.getFillMaterial()\n",
|
|
" openmoc_material.setNumEnergyGroups(coarse_groups.num_groups)\n",
|
|
" \n",
|
|
" # Extract the appropriate cross section objects for this cell\n",
|
|
" transport = xs_library[cell_id]['transport']\n",
|
|
" nufission = xs_library[cell_id]['nu-fission']\n",
|
|
" nuscatter = xs_library[cell_id]['nu-scatter']\n",
|
|
" chi = xs_library[cell_id]['chi']\n",
|
|
" \n",
|
|
" # Perform group condensation\n",
|
|
" transport = transport.get_condensed_xs(coarse_groups)\n",
|
|
" nufission = nufission.get_condensed_xs(coarse_groups)\n",
|
|
" nuscatter = nuscatter.get_condensed_xs(coarse_groups)\n",
|
|
" chi = chi.get_condensed_xs(coarse_groups)\n",
|
|
" \n",
|
|
" # Inject NumPy arrays of cross section data into the Material\n",
|
|
" openmoc_material.setSigmaT(transport.get_xs(nuclides='sum').flatten())\n",
|
|
" openmoc_material.setNuSigmaF(nufission.get_xs(nuclides='sum').flatten())\n",
|
|
" openmoc_material.setSigmaS(nuscatter.get_xs(nuclides='sum').flatten())\n",
|
|
" openmoc_material.setChi(chi.get_xs(nuclides='sum').flatten())"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 29,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"[ NORMAL ] Importing ray tracing data from file...\n",
|
|
"[ NORMAL ] Computing the eigenvalue...\n",
|
|
"[ NORMAL ] Iteration 0:\tk_eff = 0.495594\tres = 1.959E-316\n",
|
|
"[ NORMAL ] Iteration 1:\tk_eff = 0.557312\tres = 5.044E-01\n",
|
|
"[ NORMAL ] Iteration 2:\tk_eff = 0.518115\tres = 1.245E-01\n",
|
|
"[ NORMAL ] Iteration 3:\tk_eff = 0.509016\tres = 7.033E-02\n",
|
|
"[ NORMAL ] Iteration 4:\tk_eff = 0.496279\tres = 1.756E-02\n",
|
|
"[ NORMAL ] Iteration 5:\tk_eff = 0.488357\tres = 2.502E-02\n",
|
|
"[ NORMAL ] Iteration 6:\tk_eff = 0.482659\tres = 1.596E-02\n",
|
|
"[ NORMAL ] Iteration 7:\tk_eff = 0.479523\tres = 1.167E-02\n",
|
|
"[ NORMAL ] Iteration 8:\tk_eff = 0.478568\tres = 6.497E-03\n",
|
|
"[ NORMAL ] Iteration 9:\tk_eff = 0.479590\tres = 1.991E-03\n",
|
|
"[ NORMAL ] Iteration 10:\tk_eff = 0.482388\tres = 2.136E-03\n",
|
|
"[ NORMAL ] Iteration 11:\tk_eff = 0.486774\tres = 5.834E-03\n",
|
|
"[ NORMAL ] Iteration 12:\tk_eff = 0.492575\tres = 9.091E-03\n",
|
|
"[ NORMAL ] Iteration 13:\tk_eff = 0.499632\tres = 1.192E-02\n",
|
|
"[ NORMAL ] Iteration 14:\tk_eff = 0.507799\tres = 1.433E-02\n",
|
|
"[ NORMAL ] Iteration 15:\tk_eff = 0.516943\tres = 1.635E-02\n",
|
|
"[ NORMAL ] Iteration 16:\tk_eff = 0.526942\tres = 1.801E-02\n",
|
|
"[ NORMAL ] Iteration 17:\tk_eff = 0.537681\tres = 1.934E-02\n",
|
|
"[ NORMAL ] Iteration 18:\tk_eff = 0.549060\tres = 2.038E-02\n",
|
|
"[ NORMAL ] Iteration 19:\tk_eff = 0.560984\tres = 2.116E-02\n",
|
|
"[ NORMAL ] Iteration 20:\tk_eff = 0.573368\tres = 2.172E-02\n",
|
|
"[ NORMAL ] Iteration 21:\tk_eff = 0.586133\tres = 2.207E-02\n",
|
|
"[ NORMAL ] Iteration 22:\tk_eff = 0.599207\tres = 2.226E-02\n",
|
|
"[ NORMAL ] Iteration 23:\tk_eff = 0.612528\tres = 2.231E-02\n",
|
|
"[ NORMAL ] Iteration 24:\tk_eff = 0.626035\tres = 2.223E-02\n",
|
|
"[ NORMAL ] Iteration 25:\tk_eff = 0.639676\tres = 2.205E-02\n",
|
|
"[ NORMAL ] Iteration 26:\tk_eff = 0.653402\tres = 2.179E-02\n",
|
|
"[ NORMAL ] Iteration 27:\tk_eff = 0.667170\tres = 2.146E-02\n",
|
|
"[ NORMAL ] Iteration 28:\tk_eff = 0.680942\tres = 2.107E-02\n",
|
|
"[ NORMAL ] Iteration 29:\tk_eff = 0.694681\tres = 2.064E-02\n",
|
|
"[ NORMAL ] Iteration 30:\tk_eff = 0.708356\tres = 2.018E-02\n",
|
|
"[ NORMAL ] Iteration 31:\tk_eff = 0.721940\tres = 1.969E-02\n",
|
|
"[ NORMAL ] Iteration 32:\tk_eff = 0.735406\tres = 1.918E-02\n",
|
|
"[ NORMAL ] Iteration 33:\tk_eff = 0.748734\tres = 1.865E-02\n",
|
|
"[ NORMAL ] Iteration 34:\tk_eff = 0.761904\tres = 1.812E-02\n",
|
|
"[ NORMAL ] Iteration 35:\tk_eff = 0.774897\tres = 1.759E-02\n",
|
|
"[ NORMAL ] Iteration 36:\tk_eff = 0.787700\tres = 1.705E-02\n",
|
|
"[ NORMAL ] Iteration 37:\tk_eff = 0.800299\tres = 1.652E-02\n",
|
|
"[ NORMAL ] Iteration 38:\tk_eff = 0.812684\tres = 1.600E-02\n",
|
|
"[ NORMAL ] Iteration 39:\tk_eff = 0.824844\tres = 1.547E-02\n",
|
|
"[ NORMAL ] Iteration 40:\tk_eff = 0.836772\tres = 1.496E-02\n",
|
|
"[ NORMAL ] Iteration 41:\tk_eff = 0.848462\tres = 1.446E-02\n",
|
|
"[ NORMAL ] Iteration 42:\tk_eff = 0.859908\tres = 1.397E-02\n",
|
|
"[ NORMAL ] Iteration 43:\tk_eff = 0.871105\tres = 1.349E-02\n",
|
|
"[ NORMAL ] Iteration 44:\tk_eff = 0.882052\tres = 1.302E-02\n",
|
|
"[ NORMAL ] Iteration 45:\tk_eff = 0.892745\tres = 1.257E-02\n",
|
|
"[ NORMAL ] Iteration 46:\tk_eff = 0.903184\tres = 1.212E-02\n",
|
|
"[ NORMAL ] Iteration 47:\tk_eff = 0.913367\tres = 1.169E-02\n",
|
|
"[ NORMAL ] Iteration 48:\tk_eff = 0.923297\tres = 1.128E-02\n",
|
|
"[ NORMAL ] Iteration 49:\tk_eff = 0.932972\tres = 1.087E-02\n",
|
|
"[ NORMAL ] Iteration 50:\tk_eff = 0.942394\tres = 1.048E-02\n",
|
|
"[ NORMAL ] Iteration 51:\tk_eff = 0.951566\tres = 1.010E-02\n",
|
|
"[ NORMAL ] Iteration 52:\tk_eff = 0.960490\tres = 9.733E-03\n",
|
|
"[ NORMAL ] Iteration 53:\tk_eff = 0.969168\tres = 9.378E-03\n",
|
|
"[ NORMAL ] Iteration 54:\tk_eff = 0.977604\tres = 9.035E-03\n",
|
|
"[ NORMAL ] Iteration 55:\tk_eff = 0.985800\tres = 8.704E-03\n",
|
|
"[ NORMAL ] Iteration 56:\tk_eff = 0.993761\tres = 8.384E-03\n",
|
|
"[ NORMAL ] Iteration 57:\tk_eff = 1.001491\tres = 8.076E-03\n",
|
|
"[ NORMAL ] Iteration 58:\tk_eff = 1.008992\tres = 7.778E-03\n",
|
|
"[ NORMAL ] Iteration 59:\tk_eff = 1.016271\tres = 7.490E-03\n",
|
|
"[ NORMAL ] Iteration 60:\tk_eff = 1.023330\tres = 7.213E-03\n",
|
|
"[ NORMAL ] Iteration 61:\tk_eff = 1.030174\tres = 6.946E-03\n",
|
|
"[ NORMAL ] Iteration 62:\tk_eff = 1.036809\tres = 6.688E-03\n",
|
|
"[ NORMAL ] Iteration 63:\tk_eff = 1.043238\tres = 6.440E-03\n",
|
|
"[ NORMAL ] Iteration 64:\tk_eff = 1.049466\tres = 6.201E-03\n",
|
|
"[ NORMAL ] Iteration 65:\tk_eff = 1.055498\tres = 5.970E-03\n",
|
|
"[ NORMAL ] Iteration 66:\tk_eff = 1.061339\tres = 5.748E-03\n",
|
|
"[ NORMAL ] Iteration 67:\tk_eff = 1.066993\tres = 5.534E-03\n",
|
|
"[ NORMAL ] Iteration 68:\tk_eff = 1.072465\tres = 5.327E-03\n",
|
|
"[ NORMAL ] Iteration 69:\tk_eff = 1.077760\tres = 5.129E-03\n",
|
|
"[ NORMAL ] Iteration 70:\tk_eff = 1.082882\tres = 4.937E-03\n",
|
|
"[ NORMAL ] Iteration 71:\tk_eff = 1.087837\tres = 4.753E-03\n",
|
|
"[ NORMAL ] Iteration 72:\tk_eff = 1.092628\tres = 4.575E-03\n",
|
|
"[ NORMAL ] Iteration 73:\tk_eff = 1.097260\tres = 4.404E-03\n",
|
|
"[ NORMAL ] Iteration 74:\tk_eff = 1.101737\tres = 4.239E-03\n",
|
|
"[ NORMAL ] Iteration 75:\tk_eff = 1.106065\tres = 4.081E-03\n",
|
|
"[ NORMAL ] Iteration 76:\tk_eff = 1.110247\tres = 3.928E-03\n",
|
|
"[ NORMAL ] Iteration 77:\tk_eff = 1.114288\tres = 3.781E-03\n",
|
|
"[ NORMAL ] Iteration 78:\tk_eff = 1.118191\tres = 3.639E-03\n",
|
|
"[ NORMAL ] Iteration 79:\tk_eff = 1.121961\tres = 3.503E-03\n",
|
|
"[ NORMAL ] Iteration 80:\tk_eff = 1.125603\tres = 3.372E-03\n",
|
|
"[ NORMAL ] Iteration 81:\tk_eff = 1.129119\tres = 3.245E-03\n",
|
|
"[ NORMAL ] Iteration 82:\tk_eff = 1.132513\tres = 3.124E-03\n",
|
|
"[ NORMAL ] Iteration 83:\tk_eff = 1.135790\tres = 3.007E-03\n",
|
|
"[ NORMAL ] Iteration 84:\tk_eff = 1.138954\tres = 2.894E-03\n",
|
|
"[ NORMAL ] Iteration 85:\tk_eff = 1.142007\tres = 2.785E-03\n",
|
|
"[ NORMAL ] Iteration 86:\tk_eff = 1.144953\tres = 2.681E-03\n",
|
|
"[ NORMAL ] Iteration 87:\tk_eff = 1.147796\tres = 2.580E-03\n",
|
|
"[ NORMAL ] Iteration 88:\tk_eff = 1.150539\tres = 2.483E-03\n",
|
|
"[ NORMAL ] Iteration 89:\tk_eff = 1.153185\tres = 2.390E-03\n",
|
|
"[ NORMAL ] Iteration 90:\tk_eff = 1.155738\tres = 2.300E-03\n",
|
|
"[ NORMAL ] Iteration 91:\tk_eff = 1.158200\tres = 2.214E-03\n",
|
|
"[ NORMAL ] Iteration 92:\tk_eff = 1.160575\tres = 2.130E-03\n",
|
|
"[ NORMAL ] Iteration 93:\tk_eff = 1.162865\tres = 2.050E-03\n",
|
|
"[ NORMAL ] Iteration 94:\tk_eff = 1.165073\tres = 1.973E-03\n",
|
|
"[ NORMAL ] Iteration 95:\tk_eff = 1.167202\tres = 1.899E-03\n",
|
|
"[ NORMAL ] Iteration 96:\tk_eff = 1.169255\tres = 1.828E-03\n",
|
|
"[ NORMAL ] Iteration 97:\tk_eff = 1.171234\tres = 1.759E-03\n",
|
|
"[ NORMAL ] Iteration 98:\tk_eff = 1.173142\tres = 1.693E-03\n",
|
|
"[ NORMAL ] Iteration 99:\tk_eff = 1.174980\tres = 1.629E-03\n",
|
|
"[ NORMAL ] Iteration 100:\tk_eff = 1.176753\tres = 1.567E-03\n",
|
|
"[ NORMAL ] Iteration 101:\tk_eff = 1.178461\tres = 1.508E-03\n",
|
|
"[ NORMAL ] Iteration 102:\tk_eff = 1.180107\tres = 1.452E-03\n",
|
|
"[ NORMAL ] Iteration 103:\tk_eff = 1.181694\tres = 1.397E-03\n",
|
|
"[ NORMAL ] Iteration 104:\tk_eff = 1.183222\tres = 1.344E-03\n",
|
|
"[ NORMAL ] Iteration 105:\tk_eff = 1.184695\tres = 1.294E-03\n",
|
|
"[ NORMAL ] Iteration 106:\tk_eff = 1.186115\tres = 1.245E-03\n",
|
|
"[ NORMAL ] Iteration 107:\tk_eff = 1.187482\tres = 1.198E-03\n",
|
|
"[ NORMAL ] Iteration 108:\tk_eff = 1.188799\tres = 1.153E-03\n",
|
|
"[ NORMAL ] Iteration 109:\tk_eff = 1.190068\tres = 1.109E-03\n",
|
|
"[ NORMAL ] Iteration 110:\tk_eff = 1.191290\tres = 1.067E-03\n",
|
|
"[ NORMAL ] Iteration 111:\tk_eff = 1.192468\tres = 1.027E-03\n",
|
|
"[ NORMAL ] Iteration 112:\tk_eff = 1.193602\tres = 9.883E-04\n",
|
|
"[ NORMAL ] Iteration 113:\tk_eff = 1.194694\tres = 9.510E-04\n",
|
|
"[ NORMAL ] Iteration 114:\tk_eff = 1.195746\tres = 9.151E-04\n",
|
|
"[ NORMAL ] Iteration 115:\tk_eff = 1.196759\tres = 8.805E-04\n",
|
|
"[ NORMAL ] Iteration 116:\tk_eff = 1.197735\tres = 8.473E-04\n",
|
|
"[ NORMAL ] Iteration 117:\tk_eff = 1.198674\tres = 8.152E-04\n",
|
|
"[ NORMAL ] Iteration 118:\tk_eff = 1.199579\tres = 7.844E-04\n",
|
|
"[ NORMAL ] Iteration 119:\tk_eff = 1.200450\tres = 7.548E-04\n",
|
|
"[ NORMAL ] Iteration 120:\tk_eff = 1.201289\tres = 7.262E-04\n",
|
|
"[ NORMAL ] Iteration 121:\tk_eff = 1.202097\tres = 6.988E-04\n",
|
|
"[ NORMAL ] Iteration 122:\tk_eff = 1.202874\tres = 6.723E-04\n",
|
|
"[ NORMAL ] Iteration 123:\tk_eff = 1.203623\tres = 6.469E-04\n",
|
|
"[ NORMAL ] Iteration 124:\tk_eff = 1.204344\tres = 6.224E-04\n",
|
|
"[ NORMAL ] Iteration 125:\tk_eff = 1.205038\tres = 5.989E-04\n",
|
|
"[ NORMAL ] Iteration 126:\tk_eff = 1.205706\tres = 5.762E-04\n",
|
|
"[ NORMAL ] Iteration 127:\tk_eff = 1.206349\tres = 5.544E-04\n",
|
|
"[ NORMAL ] Iteration 128:\tk_eff = 1.206968\tres = 5.334E-04\n",
|
|
"[ NORMAL ] Iteration 129:\tk_eff = 1.207564\tres = 5.132E-04\n",
|
|
"[ NORMAL ] Iteration 130:\tk_eff = 1.208138\tres = 4.938E-04\n",
|
|
"[ NORMAL ] Iteration 131:\tk_eff = 1.208690\tres = 4.751E-04\n",
|
|
"[ NORMAL ] Iteration 132:\tk_eff = 1.209221\tres = 4.570E-04\n",
|
|
"[ NORMAL ] Iteration 133:\tk_eff = 1.209733\tres = 4.397E-04\n",
|
|
"[ NORMAL ] Iteration 134:\tk_eff = 1.210225\tres = 4.231E-04\n",
|
|
"[ NORMAL ] Iteration 135:\tk_eff = 1.210699\tres = 4.070E-04\n",
|
|
"[ NORMAL ] Iteration 136:\tk_eff = 1.211155\tres = 3.916E-04\n",
|
|
"[ NORMAL ] Iteration 137:\tk_eff = 1.211594\tres = 3.767E-04\n",
|
|
"[ NORMAL ] Iteration 138:\tk_eff = 1.212017\tres = 3.624E-04\n",
|
|
"[ NORMAL ] Iteration 139:\tk_eff = 1.212423\tres = 3.487E-04\n",
|
|
"[ NORMAL ] Iteration 140:\tk_eff = 1.212815\tres = 3.355E-04\n",
|
|
"[ NORMAL ] Iteration 141:\tk_eff = 1.213191\tres = 3.227E-04\n",
|
|
"[ NORMAL ] Iteration 142:\tk_eff = 1.213554\tres = 3.105E-04\n",
|
|
"[ NORMAL ] Iteration 143:\tk_eff = 1.213902\tres = 2.987E-04\n",
|
|
"[ NORMAL ] Iteration 144:\tk_eff = 1.214238\tres = 2.874E-04\n",
|
|
"[ NORMAL ] Iteration 145:\tk_eff = 1.214561\tres = 2.764E-04\n",
|
|
"[ NORMAL ] Iteration 146:\tk_eff = 1.214872\tres = 2.659E-04\n",
|
|
"[ NORMAL ] Iteration 147:\tk_eff = 1.215171\tres = 2.558E-04\n",
|
|
"[ NORMAL ] Iteration 148:\tk_eff = 1.215458\tres = 2.461E-04\n",
|
|
"[ NORMAL ] Iteration 149:\tk_eff = 1.215735\tres = 2.368E-04\n",
|
|
"[ NORMAL ] Iteration 150:\tk_eff = 1.216002\tres = 2.278E-04\n",
|
|
"[ NORMAL ] Iteration 151:\tk_eff = 1.216258\tres = 2.191E-04\n",
|
|
"[ NORMAL ] Iteration 152:\tk_eff = 1.216504\tres = 2.108E-04\n",
|
|
"[ NORMAL ] Iteration 153:\tk_eff = 1.216742\tres = 2.028E-04\n",
|
|
"[ NORMAL ] Iteration 154:\tk_eff = 1.216970\tres = 1.951E-04\n",
|
|
"[ NORMAL ] Iteration 155:\tk_eff = 1.217190\tres = 1.876E-04\n",
|
|
"[ NORMAL ] Iteration 156:\tk_eff = 1.217401\tres = 1.805E-04\n",
|
|
"[ NORMAL ] Iteration 157:\tk_eff = 1.217604\tres = 1.736E-04\n",
|
|
"[ NORMAL ] Iteration 158:\tk_eff = 1.217800\tres = 1.670E-04\n",
|
|
"[ NORMAL ] Iteration 159:\tk_eff = 1.217988\tres = 1.607E-04\n",
|
|
"[ NORMAL ] Iteration 160:\tk_eff = 1.218169\tres = 1.546E-04\n",
|
|
"[ NORMAL ] Iteration 161:\tk_eff = 1.218344\tres = 1.487E-04\n",
|
|
"[ NORMAL ] Iteration 162:\tk_eff = 1.218511\tres = 1.430E-04\n",
|
|
"[ NORMAL ] Iteration 163:\tk_eff = 1.218673\tres = 1.376E-04\n",
|
|
"[ NORMAL ] Iteration 164:\tk_eff = 1.218828\tres = 1.324E-04\n",
|
|
"[ NORMAL ] Iteration 165:\tk_eff = 1.218977\tres = 1.273E-04\n",
|
|
"[ NORMAL ] Iteration 166:\tk_eff = 1.219121\tres = 1.225E-04\n",
|
|
"[ NORMAL ] Iteration 167:\tk_eff = 1.219259\tres = 1.178E-04\n",
|
|
"[ NORMAL ] Iteration 168:\tk_eff = 1.219392\tres = 1.133E-04\n",
|
|
"[ NORMAL ] Iteration 169:\tk_eff = 1.219520\tres = 1.090E-04\n",
|
|
"[ NORMAL ] Iteration 170:\tk_eff = 1.219643\tres = 1.049E-04\n",
|
|
"[ NORMAL ] Iteration 171:\tk_eff = 1.219761\tres = 1.009E-04\n",
|
|
"[ NORMAL ] Iteration 172:\tk_eff = 1.219875\tres = 9.702E-05\n",
|
|
"[ NORMAL ] Iteration 173:\tk_eff = 1.219984\tres = 9.332E-05\n",
|
|
"[ NORMAL ] Iteration 174:\tk_eff = 1.220090\tres = 8.976E-05\n",
|
|
"[ NORMAL ] Iteration 175:\tk_eff = 1.220191\tres = 8.634E-05\n",
|
|
"[ NORMAL ] Iteration 176:\tk_eff = 1.220288\tres = 8.305E-05\n",
|
|
"[ NORMAL ] Iteration 177:\tk_eff = 1.220382\tres = 7.989E-05\n",
|
|
"[ NORMAL ] Iteration 178:\tk_eff = 1.220472\tres = 7.684E-05\n",
|
|
"[ NORMAL ] Iteration 179:\tk_eff = 1.220559\tres = 7.392E-05\n",
|
|
"[ NORMAL ] Iteration 180:\tk_eff = 1.220643\tres = 7.110E-05\n",
|
|
"[ NORMAL ] Iteration 181:\tk_eff = 1.220723\tres = 6.839E-05\n",
|
|
"[ NORMAL ] Iteration 182:\tk_eff = 1.220800\tres = 6.578E-05\n",
|
|
"[ NORMAL ] Iteration 183:\tk_eff = 1.220874\tres = 6.327E-05\n",
|
|
"[ NORMAL ] Iteration 184:\tk_eff = 1.220946\tres = 6.086E-05\n",
|
|
"[ NORMAL ] Iteration 185:\tk_eff = 1.221015\tres = 5.854E-05\n",
|
|
"[ NORMAL ] Iteration 186:\tk_eff = 1.221081\tres = 5.631E-05\n",
|
|
"[ NORMAL ] Iteration 187:\tk_eff = 1.221144\tres = 5.416E-05\n",
|
|
"[ NORMAL ] Iteration 188:\tk_eff = 1.221206\tres = 5.209E-05\n",
|
|
"[ NORMAL ] Iteration 189:\tk_eff = 1.221264\tres = 5.011E-05\n",
|
|
"[ NORMAL ] Iteration 190:\tk_eff = 1.221321\tres = 4.820E-05\n",
|
|
"[ NORMAL ] Iteration 191:\tk_eff = 1.221375\tres = 4.636E-05\n",
|
|
"[ NORMAL ] Iteration 192:\tk_eff = 1.221428\tres = 4.459E-05\n",
|
|
"[ NORMAL ] Iteration 193:\tk_eff = 1.221478\tres = 4.289E-05\n",
|
|
"[ NORMAL ] Iteration 194:\tk_eff = 1.221527\tres = 4.125E-05\n",
|
|
"[ NORMAL ] Iteration 195:\tk_eff = 1.221573\tres = 3.968E-05\n",
|
|
"[ NORMAL ] Iteration 196:\tk_eff = 1.221618\tres = 3.816E-05\n",
|
|
"[ NORMAL ] Iteration 197:\tk_eff = 1.221661\tres = 3.671E-05\n",
|
|
"[ NORMAL ] Iteration 198:\tk_eff = 1.221703\tres = 3.531E-05\n",
|
|
"[ NORMAL ] Iteration 199:\tk_eff = 1.221743\tres = 3.396E-05\n",
|
|
"[ NORMAL ] Iteration 200:\tk_eff = 1.221781\tres = 3.266E-05\n",
|
|
"[ NORMAL ] Iteration 201:\tk_eff = 1.221818\tres = 3.142E-05\n",
|
|
"[ NORMAL ] Iteration 202:\tk_eff = 1.221853\tres = 3.022E-05\n",
|
|
"[ NORMAL ] Iteration 203:\tk_eff = 1.221888\tres = 2.906E-05\n",
|
|
"[ NORMAL ] Iteration 204:\tk_eff = 1.221920\tres = 2.795E-05\n",
|
|
"[ NORMAL ] Iteration 205:\tk_eff = 1.221952\tres = 2.689E-05\n",
|
|
"[ NORMAL ] Iteration 206:\tk_eff = 1.221982\tres = 2.586E-05\n",
|
|
"[ NORMAL ] Iteration 207:\tk_eff = 1.222012\tres = 2.487E-05\n",
|
|
"[ NORMAL ] Iteration 208:\tk_eff = 1.222040\tres = 2.392E-05\n",
|
|
"[ NORMAL ] Iteration 209:\tk_eff = 1.222067\tres = 2.301E-05\n",
|
|
"[ NORMAL ] Iteration 210:\tk_eff = 1.222093\tres = 2.213E-05\n",
|
|
"[ NORMAL ] Iteration 211:\tk_eff = 1.222118\tres = 2.129E-05\n",
|
|
"[ NORMAL ] Iteration 212:\tk_eff = 1.222142\tres = 2.047E-05\n",
|
|
"[ NORMAL ] Iteration 213:\tk_eff = 1.222165\tres = 1.969E-05\n",
|
|
"[ NORMAL ] Iteration 214:\tk_eff = 1.222187\tres = 1.894E-05\n",
|
|
"[ NORMAL ] Iteration 215:\tk_eff = 1.222209\tres = 1.822E-05\n",
|
|
"[ NORMAL ] Iteration 216:\tk_eff = 1.222229\tres = 1.752E-05\n",
|
|
"[ NORMAL ] Iteration 217:\tk_eff = 1.222249\tres = 1.685E-05\n",
|
|
"[ NORMAL ] Iteration 218:\tk_eff = 1.222268\tres = 1.621E-05\n",
|
|
"[ NORMAL ] Iteration 219:\tk_eff = 1.222287\tres = 1.559E-05\n",
|
|
"[ NORMAL ] Iteration 220:\tk_eff = 1.222304\tres = 1.499E-05\n",
|
|
"[ NORMAL ] Iteration 221:\tk_eff = 1.222321\tres = 1.442E-05\n",
|
|
"[ NORMAL ] Iteration 222:\tk_eff = 1.222337\tres = 1.387E-05\n",
|
|
"[ NORMAL ] Iteration 223:\tk_eff = 1.222353\tres = 1.334E-05\n",
|
|
"[ NORMAL ] Iteration 224:\tk_eff = 1.222368\tres = 1.283E-05\n",
|
|
"[ NORMAL ] Iteration 225:\tk_eff = 1.222383\tres = 1.234E-05\n",
|
|
"[ NORMAL ] Iteration 226:\tk_eff = 1.222397\tres = 1.187E-05\n",
|
|
"[ NORMAL ] Iteration 227:\tk_eff = 1.222410\tres = 1.142E-05\n",
|
|
"[ NORMAL ] Iteration 228:\tk_eff = 1.222423\tres = 1.098E-05\n",
|
|
"[ NORMAL ] Iteration 229:\tk_eff = 1.222435\tres = 1.056E-05\n",
|
|
"[ NORMAL ] Iteration 230:\tk_eff = 1.222447\tres = 1.016E-05\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"# Generate tracks for OpenMOC\n",
|
|
"openmoc_geometry.initializeFlatSourceRegions()\n",
|
|
"track_generator = openmoc.TrackGenerator(openmoc_geometry, num_azim=128, spacing=0.1)\n",
|
|
"track_generator.generateTracks()\n",
|
|
"\n",
|
|
"# Run OpenMOC\n",
|
|
"solver = openmoc.CPUSolver(track_generator)\n",
|
|
"solver.computeEigenvalue()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 30,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"openmc keff = 1.223729\n",
|
|
"openmoc keff = 1.222447\n",
|
|
"bias [pcm]: -128.2\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"# Print report of keff and bias with OpenMC\n",
|
|
"openmoc_keff = solver.getKeff()\n",
|
|
"openmc_keff = sp.k_combined[0]\n",
|
|
"bias = (openmoc_keff - openmc_keff) * 1e5\n",
|
|
"\n",
|
|
"print('openmc keff = {0:1.6f}'.format(openmc_keff))\n",
|
|
"print('openmoc keff = {0:1.6f}'.format(openmoc_keff))\n",
|
|
"print('bias [pcm]: {0:1.1f}'.format(bias))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"There is a non-trivial bias in both the 2-group and 8-group cases. In the case of a pin cell, one can show that these biases do not converge to <100 pcm with more particle histories. For heterogeneous geometries, additional measures must be taken to address the following three sources of bias:\n",
|
|
"\n",
|
|
"* Appropriate transport-corrected cross sections\n",
|
|
"* Spatial discretization of OpenMOC's mesh\n",
|
|
"* Constant-in-angle multi-group cross sections"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {
|
|
"collapsed": true
|
|
},
|
|
"source": [
|
|
"## Visualizing MGXS Data"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"It is often insightful to generate visual depictions of multi-group cross sections. There are many different types of plots which may be useful for multi-group cross section visualization, only a few of which will be shown here for enrichment and inspiration.\n",
|
|
"\n",
|
|
"One particularly useful visualization is a comparison of the continuous-energy and multi-group cross sections for a particular nuclide and reaction type. We illustrate one option for generating such plots with the use of the open source [PyNE](http://pyne.io/) library to parse continuous-energy cross sections from the cross section data library provided with OpenMC. First, we instantiate a `pyne.ace.Library` object for U-235 as follows."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 31,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"# Instantiate a PyNE ACE continuous-energy cross sections library\n",
|
|
"pyne_lib = pyne.ace.Library('../../../../data/nndc/293.6K/U_235_293.6K.ace')\n",
|
|
"pyne_lib.read('92235.71c')\n",
|
|
"\n",
|
|
"# Extract the U-235 data from the library\n",
|
|
"u235 = pyne_lib.tables['92235.71c']\n",
|
|
"\n",
|
|
"# Extract the continuous-energy U-235 fission cross section data\n",
|
|
"fission = u235.reactions[18]"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"Now, we use [`matplotlib`](http://matplotlib.org/) and [`seaborn`](http://stanford.edu/~mwaskom/software/seaborn/) to plot the continuous-energy and multi-group cross sections on a single plot."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 32,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"(9.9999999999999994e-12, 20.0)"
|
|
]
|
|
},
|
|
"execution_count": 32,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
},
|
|
{
|
|
"data": {
|
|
"image/png": "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\nRETE6eQvWE4Yr8iVHuYAAAAASUVORK5CYII=\n",
|
|
"text/plain": [
|
|
"<matplotlib.figure.Figure at 0x7f7e2c03a610>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
}
|
|
],
|
|
"source": [
|
|
"# Create a loglog plot of the U-235 continuous-energy fission cross section \n",
|
|
"plt.loglog(u235.energy, fission.sigma, color='b', linewidth=1)\n",
|
|
"\n",
|
|
"# Extract energy group bounds and MGXS values to plot\n",
|
|
"nufission = xs_library[fuel_cell.id]['fission']\n",
|
|
"energy_groups = nufission.energy_groups\n",
|
|
"x = energy_groups.group_edges\n",
|
|
"y = nufission.get_xs(nuclides=['U-235'], order_groups='decreasing', xs_type='micro')\n",
|
|
"\n",
|
|
"# Fix low energy bound to the value defined by the ACE library\n",
|
|
"x[0] = u235.energy[0]\n",
|
|
"\n",
|
|
"# Extend the mgxs values array for matplotlib's step plot\n",
|
|
"y = np.insert(y, 0, y[0])\n",
|
|
"\n",
|
|
"# Create a step plot for the MGXS\n",
|
|
"plt.plot(x, y, drawstyle='steps', color='r', linewidth=3)\n",
|
|
"\n",
|
|
"plt.title('U-235 Fission Cross Section')\n",
|
|
"plt.xlabel('Energy [MeV]')\n",
|
|
"plt.ylabel('Micro Fission XS')\n",
|
|
"plt.legend(['Continuous', 'Multi-Group'])\n",
|
|
"plt.xlim((x.min(), x.max()))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"Another useful type of illustration is scattering matrix sparsity structures. First, we extract Pandas `DataFrames` for the H-1 and O-16 scattering matrices."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 33,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"# Construct a Pandas DataFrame for the microscopic nu-scattering matrix\n",
|
|
"nuscatter = xs_library[moderator_cell.id]['nu-scatter']\n",
|
|
"df = nuscatter.get_pandas_dataframe(xs_type='micro')\n",
|
|
"\n",
|
|
"# Slice DataFrame in two for each nuclide's mean values\n",
|
|
"h1 = df[df['nuclide'] == 'H-1']['mean']\n",
|
|
"o16 = df[df['nuclide'] == 'O-16']['mean']\n",
|
|
"\n",
|
|
"# Cast DataFrames as NumPy arrays\n",
|
|
"h1 = h1.as_matrix()\n",
|
|
"o16 = o16.as_matrix()\n",
|
|
"\n",
|
|
"# Reshape arrays to 2D matrix for plotting\n",
|
|
"h1.shape = (fine_groups.num_groups, fine_groups.num_groups)\n",
|
|
"o16.shape = (fine_groups.num_groups, fine_groups.num_groups)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"Matplotlib's `imshow` routine can be used to plot the matrices to illustrate their sparsity structures."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 34,
|
|
"metadata": {
|
|
"collapsed": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"image/png": "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\nRK5CYII=\n",
|
|
"text/plain": [
|
|
"<matplotlib.figure.Figure at 0x7f7e2c0e0810>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
}
|
|
],
|
|
"source": [
|
|
"# Create plot of the H-1 scattering matrix\n",
|
|
"fig = plt.subplot(121)\n",
|
|
"fig.imshow(h1, interpolation='nearest', cmap='jet')\n",
|
|
"plt.title('H-1 Scattering Matrix')\n",
|
|
"plt.xlabel('Group Out')\n",
|
|
"plt.ylabel('Group In')\n",
|
|
"plt.grid()\n",
|
|
"\n",
|
|
"# Create plot of the O-16 scattering matrix\n",
|
|
"fig2 = plt.subplot(122)\n",
|
|
"fig2.imshow(o16, interpolation='nearest', cmap='jet')\n",
|
|
"plt.title('O-16 Scattering Matrix')\n",
|
|
"plt.xlabel('Group Out')\n",
|
|
"plt.ylabel('Group In')\n",
|
|
"plt.grid()\n",
|
|
"\n",
|
|
"# Show the plot on screen\n",
|
|
"plt.show()"
|
|
]
|
|
}
|
|
],
|
|
"metadata": {
|
|
"kernelspec": {
|
|
"display_name": "Python 2",
|
|
"language": "python",
|
|
"name": "python2"
|
|
},
|
|
"language_info": {
|
|
"codemirror_mode": {
|
|
"name": "ipython",
|
|
"version": 2
|
|
},
|
|
"file_extension": ".py",
|
|
"mimetype": "text/x-python",
|
|
"name": "python",
|
|
"nbconvert_exporter": "python",
|
|
"pygments_lexer": "ipython2",
|
|
"version": "2.7.6"
|
|
}
|
|
},
|
|
"nbformat": 4,
|
|
"nbformat_minor": 0
|
|
}
|