From 2fb2b889bebfeaa2d8487760b5005ebbebca844f Mon Sep 17 00:00:00 2001 From: "wbinventor@gmail.com" Date: Mon, 30 Nov 2015 21:05:52 -0500 Subject: [PATCH] All MGXS IPython Notebooks are up-to-date and ready to go! --- .../pythonapi/examples/MGXS-Part-I.ipynb | 163 +++-- .../pythonapi/examples/MGXS-Part-II.ipynb | 180 +++--- .../pythonapi/examples/MGXS-Part-III.ipynb | 582 +++--------------- .../source/pythonapi/examples/images/mgxs.png | Bin 0 -> 54562 bytes .../examples/pandas-dataframes.ipynb | 6 +- 5 files changed, 307 insertions(+), 624 deletions(-) create mode 100644 docs/source/pythonapi/examples/images/mgxs.png diff --git a/docs/source/pythonapi/examples/MGXS-Part-I.ipynb b/docs/source/pythonapi/examples/MGXS-Part-I.ipynb index 0bba3bfe0..3eca44a26 100644 --- a/docs/source/pythonapi/examples/MGXS-Part-I.ipynb +++ b/docs/source/pythonapi/examples/MGXS-Part-I.ipynb @@ -6,10 +6,100 @@ "source": [ "This IPython Notebook introduces the use of the `openmc.mgxs` module to calculate multi-group cross sections for an infinite homogeneous medium. In particular, this Notebook introduces the the following features:\n", "\n", + "* **General equations** for scalar-flux averaged multi-group cross sections\n", "* Creation of multi-group cross sections for an **infinite homogeneous medium**\n", "* Use of **tally arithmetic** to manipulate multi-group cross sections\n", "\n", - "**Note:** This Notebook illustrates the use of Pandas DataFrames to containerize multi-group cross section data. We recommend using Pandas >v0.15.0 or later since OpenMC's Python API leverages the multi-indexing feature included in the most recent releases." + "**Note:** 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": [ + "## Introduction to Multi-Group Cross Sections (MGXS)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Many Monte Carlo-based neutron particle transport codes, including OpenMC, use continuous energy nuclear cross section data. However, most deterministic neutron transport codes use *multi-group cross sections* defined over discretized energy bins or *energy groups*. An example of U-235's fission continuous energy cross section along with a 16-group cross section computed for a light water reactor spectrum is displayed below:\n", + "\n", + "\n", + "\n", + "A variety of tools employing different methodologies have been developed over the years to compute multi-group cross sections for certain applications, including NJOY (LANL), MC$^2$-3 (ANL), and Serpent (VTT). The `openmc.mgxs` Python module is designed to leverage OpenMC's tally system to calculate multi-group cross sections with arbitrary energy discretizations for fine-mesh heterogeneous deterministic neutron transport applications.\n", + "\n", + "Before proceeding to illustrate how one may use the `openmc.mgxs` module, it is worthwhile to define the general equations used to calculate multi-group cross sections. This is only intended as a brief overview of the methodology used by `openmc.mgxs` - we refer the interested reader to the large body of literature on the subject for a more comprehensive understanding of this complex topic." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Introductory Notation\n", + "The continuous real-valued microscopic cross section may be denoted $\\sigma_{n,x}(\\mathbf{r}, E)$ for position vector $\\mathbf{r}$, energy $E$, nuclide $n$ and interaction type $x$. Similarly, the scalar neutron flux may be denoted by $\\Phi(\\mathbf{r},E)$ for position $\\mathbf{r}$ and energy $E$. **Note**: Although nuclear cross sections are dependent on the temperature $T$ of the interacting medium, the temperature variable is neglected here for brevity." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Spatial and Energy Discretization\n", + "The energy domain for critical systems such as thermal reactors spans more than 10 orders of magnitude of neutron energies from 10$^{-5}$ - 10$^7$ eV. The multi-group approximation discretization divides this energy range into one or more energy groups. In particular, for $G$ total groups, we denote an energy group index $g$ such that $g \\in \\{1, 2, ..., G\\}$. The energy group indices are defined such that the smaller group the higher the energy, and vice versa. The integration over neutron energies across a discrete energy group is commonly referred to as **energy condensation**.\n", + "\n", + "Multi-group cross sections are computed for discretized spatial zones in the geometry of interest. The spatial zones may be defined on a structured and regular fuel assembly or pin cell mesh, or an unstructured mesh such as the constructive solid geometry used by OpenMC. For a geometry with $K$ distinct spatial zones, we designate each spatial zone an index $k$ such that $k \\in \\{1, 2, ..., K\\}$. The volume of each spatial zone is denoted by $V_{k}$. The integration over discrete spatial zones is commonly referred to as **spatial homogenization**." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### General Scalar-Flux Weighted MGXS\n", + "The multi-group cross sections computed by `openmc.mgxs` are defined as a *scalar flux-weighted average* of the microscopic cross sections across each discrete energy group. This formulation is employed in order to preserve the reaction rates within each energy group and spatial zone. In particular, spatial homogenization and energy condensation are used to compute the general multi-group cross section $\\sigma_{n,x,k,g}$ as follows:\n", + "\n", + "$$\\sigma_{n,x,k,g} = \\frac{\\int_{E_{g}}^{E_{g-1}}\\mathrm{d}E'\\int_{\\mathbf{r} \\in V_{k}}\\mathrm{d}\\mathbf{r}\\sigma_{n,x}(\\mathbf{r},E')\\Phi(\\mathbf{r},E')}{\\int_{E_{g}}^{E_{g-1}}\\mathrm{d}E'\\int_{\\mathbf{r} \\in V_{k}}\\mathrm{d}\\mathbf{r}\\Phi(\\mathbf{r},E')}$$\n", + "\n", + "This scalar flux-weighted average microscopic cross section is computed by `openmc.mgxs` for most multi-group cross sections, including total, absorption, and fission reaction types. These double integrals are stochastically computed with OpenMC's tally system - in particular, [filters](https://mit-crpg.github.io/openmc/pythonapi/filter.html) on the energy range and spatial zone (material, cell or universe) define the bounds of integration for both numerator and denominator." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Multi-Group Scattering Matrices\n", + "The general multi-group cross section $\\sigma_{n,x,k,g}$ is a vector of $G$ values for each energy group $g$. The equation presented above only discretizes the energy of the incoming neutron and neglects the outgoing energy of the neutron (if any). Hence, this formulation must be extended to account for the outgoing energy of neutrons in the discretized scattering matrix cross section used by deterministic neutron transport codes. \n", + "\n", + "We denote the incoming and outgoing neutron energy groups as $g$ and $g'$ for the microscopic scattering matrix cross section $\\sigma_{n,s}(\\mathbf{r},E)$. As before, spatial homogenization and energy condensation are used to find the multi-group scattering matrix cross section $\\sigma_{n,s,k,g \\to g'}$ as follows:\n", + "\n", + "$$\\sigma_{n,s,k,g\\rightarrow g'} = \\frac{\\int_{E_{g'}}^{E_{g'-1}}\\mathrm{d}E''\\int_{E_{g}}^{E_{g-1}}\\mathrm{d}E'\\int_{\\mathbf{r} \\in V_{k}}\\mathrm{d}\\mathbf{r}\\sigma_{n,s}(\\mathbf{r},E'\\rightarrow E'')\\Phi(\\mathbf{r},E')}{\\int_{E_{g}}^{E_{g-1}}\\mathrm{d}E'\\int_{\\mathbf{r} \\in V_{k}}\\mathrm{d}\\mathbf{r}\\Phi(\\mathbf{r},E')}$$\n", + "\n", + "This scalar flux-weighted multi-group microscopic scattering matrix is computed using OpenMC tallies with both energy in and energy out filters." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Multi-Group Fission Spectrum\n", + "The energy spectrum of neutrons emitted from fission is denoted by $\\chi_{n}(\\mathbf{r},E' \\rightarrow E'')$ for incoming and outgoing energies $E'$ and $E''$, respectively. Unlike the multi-group cross sections $\\sigma_{n,x,k,g}$ considered up to this point, the fission spectrum is a probability distribution and must sum to unity. The outgoing energy is typically much less dependent on the incoming energy for fission than for scattering interactions. As a result, it is common practice to integrate over the incoming neutron energy when computing the multi-group fission spectrum. The fission spectrum may be simplified as $\\chi_{n}(\\mathbf{r},E)$ with outgoing energy $E$.\n", + "\n", + "Unlike the multi-group cross sections defined up to this point, the multi-group fission spectrum is weighted by the fission production rate rather than the scalar flux. This formulation is intended to preserve the total fission production rate in the multi-group deterministic calculation. In order to mathematically define the multi-group fission spectrum, we denote the microscopic fission cross section as $\\sigma_{n,f}(\\mathbf{r},E)$ and the average number of neutrons emitted from fission interactions with nuclide $n$ as $\\nu_{n}(\\mathbf{r},E)$. The multi-group fission spectrum $\\chi_{n,k,g}$ is then the probability of fission neutrons emitted into energy group $g$. \n", + "\n", + "Similar to before, spatial homogenization and energy condensation are used to find the multi-group fission spectrum $\\chi_{n,k,g}$ as follows:\n", + "\n", + "$$\\chi_{n,k,g'} = \\frac{\\int_{E_{g'}}^{E_{g'-1}}\\mathrm{d}E''\\int_{0}^{\\infty}\\mathrm{d}E'\\int_{\\mathbf{r} \\in V_{k}}\\mathrm{d}\\mathbf{r}\\chi_{n}(\\mathbf{r},E'\\rightarrow E'')\\nu_{n}(\\mathbf{r},E')\\sigma_{n,f}(\\mathbf{r},E')\\Phi(\\mathbf{r},E')}{\\int_{0}^{\\infty}\\mathrm{d}E'\\int_{\\mathbf{r} \\in V_{k}}\\mathrm{d}\\mathbf{r}\\nu_{n}(\\mathbf{r},E')\\sigma_{n,f}(\\mathbf{r},E')\\Phi(\\mathbf{r},E')}$$\n", + "\n", + "The fission production-weighted multi-group fission spectrum is computed using OpenMC tallies with both energy in and energy out filters.\n", + "\n", + "This concludes our brief overview on the methodology to compute multi-group cross sections. The following sections detail more concretely how users may employ the `openmc.mgxs` module to power simulation workflows requiring multi-group cross sections for downstream deterministic calculations." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Generate Input Files" ] }, { @@ -29,20 +119,6 @@ "%matplotlib inline" ] }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We first construct a simple homogeneous infinite medium problem to illustrate use of the `openmc.mgxs` module to generate multi-group cross sections." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Generate Input Files" - ] - }, { "cell_type": "markdown", "metadata": {}, @@ -95,7 +171,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "With our material, we can now create a materials file object that can be exported to an actual XML file." + "With our material, we can now create a `MaterialsFile` object that can be exported to an actual XML file." ] }, { @@ -184,7 +260,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "We now must create a geometry that is assigned a root universe, put the geometry into a geometry file, and export it to XML." + "We now must create a geometry that is assigned a root universe, put the geometry into a `GeometryFile` object, and export it to XML." ] }, { @@ -264,7 +340,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "We can now use the fine and coarse `EnergyGroups` objects, along with our previously created materials and geometry, to instantiate some `MGXS` objects from the `openmc.mgxs` module. In particular, the following are subclasses of the generic and abstract `MGXS` class:\n", + "We can now use the `EnergyGroups` object, along with our previously created materials and geometry, to instantiate some `MGXS` objects from the `openmc.mgxs` module. In particular, the following are subclasses of the generic and abstract `MGXS` class:\n", "\n", "* `TotalXS`\n", "* `TransportXS`\n", @@ -346,7 +422,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "The `Absorption` object includes tracklength tallies for the 'absorption' and 'flux' scores in the 2-group structure in cell 1. Now that each multi-group cross section object contains the tallies that it needs, we must add these tallies to a `TalliesFile` object to generate the \"tallies.xml\" input file for OpenMC." + "The `Absorption` object includes tracklength tallies for the 'absorption' and 'flux' scores in the 2-group structure in cell 1. Now that each `MGXS` object contains the tallies that it needs, we must add these tallies to a `TalliesFile` object to generate the \"tallies.xml\" input file for OpenMC." ] }, { @@ -411,7 +487,7 @@ " License: http://mit-crpg.github.io/openmc/license.html\n", " Version: 0.7.0\n", " Git SHA1: c4b14a5ef87f004528d35cbf33fef3ed15a386ca\n", - " Date/Time: 2015-11-29 17:50:29\n", + " Date/Time: 2015-11-30 20:15:33\n", " MPI Processes: 1\n", "\n", " ===========================================================================\n", @@ -497,20 +573,20 @@ "\n", " =======================> TIMING STATISTICS <=======================\n", "\n", - " Total time for initialization = 4.2800E-01 seconds\n", - " Reading cross sections = 8.9000E-02 seconds\n", - " Total time in simulation = 1.4506E+01 seconds\n", - " Time in transport only = 1.4496E+01 seconds\n", - " Time in inactive batches = 1.7910E+00 seconds\n", - " Time in active batches = 1.2715E+01 seconds\n", - " Time synchronizing fission bank = 1.0000E-03 seconds\n", - " Sampling source sites = 0.0000E+00 seconds\n", + " Total time for initialization = 4.1200E-01 seconds\n", + " Reading cross sections = 9.2000E-02 seconds\n", + " Total time in simulation = 1.4213E+01 seconds\n", + " Time in transport only = 1.4199E+01 seconds\n", + " Time in inactive batches = 1.7980E+00 seconds\n", + " Time in active batches = 1.2415E+01 seconds\n", + " Time synchronizing fission bank = 5.0000E-03 seconds\n", + " Sampling source sites = 3.0000E-03 seconds\n", " SEND/RECV source sites = 1.0000E-03 seconds\n", " Time accumulating tallies = 0.0000E+00 seconds\n", " Total time for finalization = 0.0000E+00 seconds\n", - " Total time elapsed = 1.4943E+01 seconds\n", - " Calculation Rate (inactive) = 13958.7 neutrons/second\n", - " Calculation Rate (active) = 7864.73 neutrons/second\n", + " Total time elapsed = 1.4634E+01 seconds\n", + " Calculation Rate (inactive) = 13904.3 neutrons/second\n", + " Calculation Rate (active) = 8054.77 neutrons/second\n", "\n", " ============================> RESULTS <============================\n", "\n", @@ -534,9 +610,6 @@ } ], "source": [ - "# Remove old HDF5 (summary, statepoint) files\n", - "!rm statepoint.*\n", - "\n", "# Run OpenMC\n", "executor = openmc.Executor()\n", "executor.run_simulation()" @@ -553,7 +626,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Our simulation ran successfully and created a statepoint file with all the tally data in it. We begin our analysis here loading the statepoint file and \"reading\" the results. By default, data from the statepoint file is only read into memory when it is requested. This helps keep the memory use to a minimum even when a statepoint file may be huge." + "Our simulation ran successfully and created statepoint and summary output files. We begin our analysis by instantiating a `StatePoint` object. " ] }, { @@ -572,7 +645,7 @@ "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 which 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." + "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." ] }, { @@ -592,7 +665,7 @@ "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." + "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." ] }, { @@ -662,7 +735,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Since the `openmc.mgxs` module uses tally arithmetic under-the-hood, the cross section is stored as a \"derived\" tally. This means that it can be queried and manipulated using all of the same method supported for the `Tally` class in the OpenMC Python API. For example, we can construct a Pandas DataFrame of the multi-group cross section data." + "Since the `openmc.mgxs` module uses [tally arithmetic](https://mit-crpg.github.io/openmc/pythonapi/examples/tally-arithmetic.html) under-the-hood, the cross section is stored as a \"derived\" `Tally` object. This means that it can be queried and manipulated using all of the same methods supported for the `Tally` class in the OpenMC Python API. For example, we can construct a [Pandas](http://pandas.pydata.org/) `DataFrame` of the multi-group cross section data." ] }, { @@ -676,7 +749,8 @@ "name": "stderr", "output_type": "stream", "text": [ - "/usr/local/lib/python2.7/dist-packages/openmc-0.7.0-py2.7.egg/openmc/mgxs/mgxs.py:1254: FutureWarning: elementwise comparison failed; returning scalar instead, but in the future will perform elementwise comparison\n" + "/usr/local/lib/python2.7/dist-packages/openmc-0.7.0-py2.7.egg/openmc/mgxs/mgxs.py:1254: FutureWarning: elementwise comparison failed; returning scalar instead, but in the future will perform elementwise comparison\n", + "/usr/local/lib/python2.7/dist-packages/openmc-0.7.0-py2.7.egg/openmc/mgxs/mgxs.py:1272: FutureWarning: sort(columns=....) is deprecated, use sort_values(by=.....)\n" ] }, { @@ -753,7 +827,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "The following code snippet shows how to export all of three cross sections to the same HDF5 binary data store." + "The following code snippet shows how to export all three `MGXS` to the same HDF5 binary data store." ] }, { @@ -780,7 +854,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Finally, we illustrate how one can leverage OpenMC's tally arithmetic data processing feature with `MGXS` objects. The `openmc.mgxs` module uses tally arithmetic to compute multi-group cross sections with automated uncertainty propagation. Each `MGXS` object includes an `xs_tally` attribute which is a \"derived\" tally based on the tallies needed to compute the cross section type of interest. These derived tallies can be used in subsequent tally arithmetic operations. For example, we can use tally artithmetic to confirm that the `TotalXS` is equal to the sum of the `AbsorptionXS` and `ScatterXS` objects." + "Finally, we illustrate how one can leverage OpenMC's [tally arithmetic](https://mit-crpg.github.io/openmc/pythonapi/examples/tally-arithmetic.html) data processing feature with `MGXS` objects. The `openmc.mgxs` module uses tally arithmetic to compute multi-group cross sections with automated uncertainty propagation. Each `MGXS` object includes an `xs_tally` attribute which is a \"derived\" `Tally` based on the tallies needed to compute the cross section type of interest. These derived tallies can be used in subsequent tally arithmetic operations. For example, we can use tally artithmetic to confirm that the `TotalXS` is equal to the sum of the `AbsorptionXS` and `ScatterXS` objects." ] }, { @@ -997,6 +1071,13 @@ "scattering_to_total.get_pandas_dataframe()" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Lastly, we sum the derived scatter-to-total and absorption-to-total ratios to confirm that they sum to unity." + ] + }, { "cell_type": "code", "execution_count": 25, diff --git a/docs/source/pythonapi/examples/MGXS-Part-II.ipynb b/docs/source/pythonapi/examples/MGXS-Part-II.ipynb index 2976df22b..99610944b 100644 --- a/docs/source/pythonapi/examples/MGXS-Part-II.ipynb +++ b/docs/source/pythonapi/examples/MGXS-Part-II.ipynb @@ -8,11 +8,19 @@ "\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 for plot** continuous energy vs. multi-group cross sections\n", - "* **Validation** of multi-group cross sections with **OpenMOC**\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 DataFrames to containerize multi-group cross section data. We recommend using Pandas >v0.15.0 or later since OpenMC's Python API leverages the multi-indexing feature included in the most recent releases." + "**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" ] }, { @@ -51,20 +59,6 @@ "%matplotlib inline" ] }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "In this section we show how to compute multi-group cross sections for a fuel pin cell. In addition, we will illustrate how to use some of the more advanced features in `openmc.mgxs` such as nuclide-by-nuclide microscopic cross section tallies and downstream energy group condensation." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Generate Input Files" - ] - }, { "cell_type": "markdown", "metadata": {}, @@ -103,7 +97,7 @@ }, "outputs": [], "source": [ - "# 1.6 enriched fuel\n", + "# 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", @@ -126,7 +120,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "With our materials, we can now create a materials file object that can be exported to an actual XML file." + "With our materials, we can now create a `MaterialsFile` object that can be exported to an actual XML file." ] }, { @@ -168,7 +162,6 @@ "clad_outer_radius = openmc.ZCylinder(x0=0.0, y0=0.0, R=0.45720)\n", "\n", "# Create boundary planes to surround the geometry\n", - "# Use both reflective and vacuum boundaries to make life interesting\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", @@ -243,7 +236,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "We now must create a geometry that is assigned a root universe, put the geometry into a geometry file, and export it to XML." + "We now must create a geometry that is assigned a root universe, put the geometry into a `GeometryFile` object, and export it to XML." ] }, { @@ -270,7 +263,7 @@ "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 10000 particles." + "Next, we must define simulation parameters. In this case, we will use 10 inactive batches and 190 active batches each with 10,000 particles." ] }, { @@ -307,7 +300,7 @@ "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 a \"fine\" 8-group and \"coarse\" 2-group structures using the built-in `EnergyGroups` class." + "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." ] }, { @@ -318,21 +311,21 @@ }, "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.])\n", - "\n", - "# Instantiate a \"coarse\" 2-group EnergyGroups object\n", - "coarse_groups = mgxs.EnergyGroups()\n", - "coarse_groups.group_edges = np.array([0., 0.625e-6, 20.])" + " 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 will define transport, 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." + "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." ] }, { @@ -363,7 +356,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Next, we showcase the use of OpenMC's tally trigger 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." + "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." ] }, { @@ -387,7 +380,7 @@ "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 `by_nuclide` instance attribute. " + "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. " ] }, { @@ -409,7 +402,7 @@ " 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 (e.g., micro cross sections)\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", @@ -455,8 +448,8 @@ " License: http://mit-crpg.github.io/openmc/license.html\n", " Version: 0.7.0\n", " Git SHA1: c4b14a5ef87f004528d35cbf33fef3ed15a386ca\n", - " Date/Time: 2015-11-29 21:22:25\n", - " MPI Processes: 1\n", + " Date/Time: 2015-11-30 20:39:59\n", + " MPI Processes: 3\n", "\n", " ===========================================================================\n", " ========================> INITIALIZATION <=========================\n", @@ -575,20 +568,20 @@ "\n", " =======================> TIMING STATISTICS <=======================\n", "\n", - " Total time for initialization = 4.1800E-01 seconds\n", - " Reading cross sections = 8.7000E-02 seconds\n", - " Total time in simulation = 2.3349E+02 seconds\n", - " Time in transport only = 2.3343E+02 seconds\n", - " Time in inactive batches = 1.4263E+01 seconds\n", - " Time in active batches = 2.1923E+02 seconds\n", - " Time synchronizing fission bank = 2.5000E-02 seconds\n", - " Sampling source sites = 2.1000E-02 seconds\n", - " SEND/RECV source sites = 4.0000E-03 seconds\n", - " Time accumulating tallies = 0.0000E+00 seconds\n", - " Total time for finalization = 9.0000E-03 seconds\n", - " Total time elapsed = 2.3396E+02 seconds\n", - " Calculation Rate (inactive) = 7011.15 neutrons/second\n", - " Calculation Rate (active) = 1824.61 neutrons/second\n", + " Total time for initialization = 6.7400E-01 seconds\n", + " Reading cross sections = 1.4300E-01 seconds\n", + " Total time in simulation = 1.3404E+02 seconds\n", + " Time in transport only = 1.1927E+02 seconds\n", + " Time in inactive batches = 7.6750E+00 seconds\n", + " Time in active batches = 1.2636E+02 seconds\n", + " Time synchronizing fission bank = 1.4700E+01 seconds\n", + " Sampling source sites = 6.0000E-03 seconds\n", + " SEND/RECV source sites = 5.0000E-03 seconds\n", + " Time accumulating tallies = 4.0000E-03 seconds\n", + " Total time for finalization = 1.5000E-02 seconds\n", + " Total time elapsed = 1.3475E+02 seconds\n", + " Calculation Rate (inactive) = 13029.3 neutrons/second\n", + " Calculation Rate (active) = 3165.53 neutrons/second\n", "\n", " ============================> RESULTS <============================\n", "\n", @@ -612,10 +605,7 @@ } ], "source": [ - "# Delete old HDF5 files\n", - "!rm *.h5\n", - "\n", - "# Run OpenMC with the output throttled!\n", + "# Run OpenMC\n", "executor = openmc.Executor()\n", "executor.run_simulation(output=True, mpi_procs=3)" ] @@ -631,7 +621,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Our simulation ran successfully and created a statepoint file with all the tally data in it. We begin our analysis here loading the statepoint file and \"reading\" the results. By default, data from the statepoint file is only read into memory when it is requested. This helps keep the memory use to a minimum even when a statepoint file may be huge." + "Our simulation ran successfully and created statepoint and summary output files. We begin our analysis by instantiating a `StatePoint` object. " ] }, { @@ -650,7 +640,7 @@ "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 which 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." + "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." ] }, { @@ -670,7 +660,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "The statepoint is now ready to be analyzed by our multi-group cross sections. Next, we load the tallies from the statepoint into each object to compute the cross sections using tally arithmetic." + "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." ] }, { @@ -801,7 +791,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Although a printed report is nice, it is not scalable or flexible. Let's extract the cross section data for the moderator as a Pandas DataFrame." + "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` ." ] }, { @@ -815,7 +805,8 @@ "name": "stderr", "output_type": "stream", "text": [ - "/usr/local/lib/python2.7/dist-packages/openmc-0.7.0-py2.7.egg/openmc/mgxs/mgxs.py:1254: FutureWarning: elementwise comparison failed; returning scalar instead, but in the future will perform elementwise comparison\n" + "/usr/local/lib/python2.7/dist-packages/openmc-0.7.0-py2.7.egg/openmc/mgxs/mgxs.py:1254: FutureWarning: elementwise comparison failed; returning scalar instead, but in the future will perform elementwise comparison\n", + "/usr/local/lib/python2.7/dist-packages/openmc-0.7.0-py2.7.egg/openmc/mgxs/mgxs.py:1272: FutureWarning: sort(columns=....) is deprecated, use sort_values(by=.....)\n" ] }, { @@ -958,7 +949,7 @@ "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 using. The `get_condensed_xs(...)` class method takes in as a parameter an `EnergyGroups` object with a coarse(r) group structure and returns a new multi-group cross section condensed to the coarse groups. We illustrate this process below using the 2-group structure created earlier." + "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." ] }, { @@ -973,14 +964,14 @@ "fine_xs = xs_library[fuel_cell.id]['transport']\n", "\n", "# Condense to the 2-group structure\n", - "condense_xs = fine_xs.get_condensed_xs(coarse_groups)" + "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 cross section in addition to our original 16-group cross section. Let's inspect the 2-group cross section by printing it to the screen and extracting a Pandas DataFrame as we have already learned how to do." + "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." ] }, { @@ -1019,7 +1010,7 @@ } ], "source": [ - "condense_xs.print_xs()" + "condensed_xs.print_xs()" ] }, { @@ -1113,7 +1104,7 @@ } ], "source": [ - "df = condense_xs.get_pandas_dataframe(xs_type='micro')\n", + "df = condensed_xs.get_pandas_dataframe(xs_type='micro')\n", "df" ] }, @@ -1162,8 +1153,6 @@ "openmoc_cells = openmoc_geometry.getRootUniverse().getAllCells()\n", "\n", "# Inject multi-group cross sections into OpenMOC Materials\n", - "# NOTE: This code will work for 1, 10, or 1,000s of cells\n", - "# as is the case for a complicated geometry like BEAVRS\n", "for cell_id, cell in openmoc_cells.items():\n", " \n", " # Ignore the root cell\n", @@ -1183,8 +1172,7 @@ " chi = xs_library[cell_id]['chi']\n", " \n", " # Inject NumPy arrays of cross section data into the Material\n", - " # NOTE: In each case we must sum across nuclides to get the\n", - " # macroscopic cross sections needed by OpenMOC\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", @@ -1381,7 +1369,7 @@ "source": [ "# Generate tracks for OpenMOC\n", "openmoc_geometry.initializeFlatSourceRegions()\n", - "track_generator = openmoc.TrackGenerator(openmoc_geometry, 128, 0.1)\n", + "track_generator = openmoc.TrackGenerator(openmoc_geometry, num_azim=128, spacing=0.1)\n", "track_generator.generateTracks()\n", "\n", "# Run OpenMOC\n", @@ -1428,7 +1416,7 @@ "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 produce a reasonable result." + "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." ] }, { @@ -1722,7 +1710,7 @@ "source": [ "# Generate tracks for OpenMOC\n", "openmoc_geometry.initializeFlatSourceRegions()\n", - "track_generator = openmoc.TrackGenerator(openmoc_geometry, 128, 0.1)\n", + "track_generator = openmoc.TrackGenerator(openmoc_geometry, num_azim=128, spacing=0.1)\n", "track_generator.generateTracks()\n", "\n", "# Run OpenMOC\n", @@ -1762,7 +1750,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "There is a non-trivial bias in both the 2-group and 8-group cases. In the case of the pin cell, one can show that these biases do not converge to <100 pcm with more particle histories. In the case of heterogeneous geometries, additional measures must be taken to address the following three sources of bias:\n", + "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", @@ -1782,14 +1770,14 @@ "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 MGXS visualization, only a few of which will be shown here for inspiration.\n", + "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 library to parse continuous energy multi-group cross sections from the cross section data library provided with OpenMC. First, we instantiate a `pyne.ace.Library` object for U-235 as follows." + "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 multi-group 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": 33, + "execution_count": 31, "metadata": { "collapsed": false }, @@ -1802,7 +1790,7 @@ "# Extract the U-235 data from the library\n", "u235 = pyne_lib.tables['92235.71c']\n", "\n", - "# Extract the continuous energy fission U-235 cross section data\n", + "# Extract the continuous energy U-235 fission cross section data\n", "fission = u235.reactions[18]" ] }, @@ -1810,12 +1798,12 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Now, we use matplotlib to plot the multi-group and continuous energy cross sections on a single plot." + "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": 46, + "execution_count": 32, "metadata": { "collapsed": false }, @@ -1823,18 +1811,18 @@ { "data": { "text/plain": [ - "" + "(9.9999999999999994e-12, 20.0)" ] }, - "execution_count": 46, + "execution_count": 32, "metadata": {}, "output_type": "execute_result" }, { "data": { - "image/png": "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\n", + "image/png": "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\nRETE6eQvWE4Yr8iVHuYAAAAASUVORK5CYII=\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -1863,19 +1851,20 @@ "plt.title('U-235 Fission Cross Section')\n", "plt.xlabel('Energy [MeV]')\n", "plt.ylabel('Micro Fission XS')\n", - "plt.legend(['Continuous', 'Multi-Group'])" + "plt.legend(['Continuous', 'Multi-Group'])\n", + "plt.xlim((x.min(), x.max()))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Another useful illustration are scattering matrix sparsity structures. First, we extract Pandas DataFrames for the H-1 and O-16 scattering matrices." + "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": 47, + "execution_count": 33, "metadata": { "collapsed": false }, @@ -1907,16 +1896,16 @@ }, { "cell_type": "code", - "execution_count": 48, + "execution_count": 34, "metadata": { "collapsed": false }, "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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\nRK5CYII=\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -1926,26 +1915,23 @@ "source": [ "# Create plot of the H-1 scattering matrix\n", "fig = plt.subplot(121)\n", - "fig.imshow(h1, interpolation='nearest')\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')\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()" ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [] } ], "metadata": { diff --git a/docs/source/pythonapi/examples/MGXS-Part-III.ipynb b/docs/source/pythonapi/examples/MGXS-Part-III.ipynb index 4a8cfbc6b..2979c2b03 100644 --- a/docs/source/pythonapi/examples/MGXS-Part-III.ipynb +++ b/docs/source/pythonapi/examples/MGXS-Part-III.ipynb @@ -4,23 +4,43 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "This IPython Notebook illustrates the use of the **`openmc.mgxs.Library`** class. The `Library` class is designed to help automate the calculation of multi-group cross sections for use cases with one or more domains, cross section types, and/or nuclides. In particular, this Notebook illustrates the following features:\n", + "This IPython Notebook illustrates the use of the **`openmc.mgxs.Library`** class. The `Library` class is designed to automate the calculation of multi-group cross sections for use cases with one or more domains, cross section types, and/or nuclides. In particular, this Notebook illustrates the following features:\n", "\n", "* Calculation of multi-group cross sections for a **fuel assembly**\n", "* Automated creation, manipulation and storage of `MGXS` with **`openmc.mgxs.Library`**\n", - "* **Validation** of multi-group cross sections with **OpenMOC**\n", - "* Steady-state pin-by-pin **fission rates comparison** between OpenMC and OpenMOC\n", + "* **Validation** of multi-group cross sections with **[OpenMOC](https://mit-crpg.github.io/OpenMOC/)**\n", + "* Steady-state pin-by-pin **fission rates comparison** between OpenMC and [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 DataFrames to containerize multi-group cross section data. We recommend using Pandas >v0.15.0 or later since OpenMC's Python API leverages the multi-indexing feature included in the most recent releases." + "**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": null, + "execution_count": 1, "metadata": { - "collapsed": true + "collapsed": false }, - "outputs": [], + "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" + ] + } + ], "source": [ "import math\n", "import pickle\n", @@ -41,13 +61,6 @@ "%matplotlib inline" ] }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Generate Input Files" - ] - }, { "cell_type": "markdown", "metadata": {}, @@ -111,7 +124,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "With our three materials, we can now create a materials file object that can be exported to an actual XML file." + "With our three materials, we can now create a `MaterialsFile` object that can be exported to an actual XML file." ] }, { @@ -216,7 +229,7 @@ "# Create a Universe to encapsulate a control rod guide tube\n", "guide_tube_universe = openmc.Universe(name='Guide Tube')\n", "\n", - "# Create fuel Cell\n", + "# Create guide tube Cell\n", "guide_tube_cell = openmc.Cell(name='Guide Tube Water')\n", "guide_tube_cell.fill = water\n", "guide_tube_cell.region = -fuel_outer_radius\n", @@ -239,7 +252,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Using the pin cell universe, we can construct a 17x17 rectangular lattice with a 1.26cm pitch." + "Using the pin cell universe, we can construct a 17x17 rectangular lattice with a 1.26 cm pitch." ] }, { @@ -320,7 +333,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "We now must create a geometry that is assigned a root universe, put the geometry into a geometry file, and export it to XML." + "We now must create a geometry that is assigned a root universe, put the geometry into a `GeometryFile` object, and export it to XML." ] }, { @@ -389,7 +402,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Let us also create a plot file that we can use to verify that our pin cell geometry was created successfully." + "Let us also create a `PlotsFile` that we can use to verify that our fuel assembly geometry was created successfully." ] }, { @@ -454,7 +467,7 @@ "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAPoAAAD6AgMAAAD1grKuAAAABGdBTUEAALGPC/xhBQAAAAFzUkdC\nAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAxQTFRF\n////chIS6YCRTb/E6kGE+wAAAAFiS0dEAIgFHUgAAAAJcEhZcwAAAEgAAABIAEbJaz4AAASWSURB\nVGje7Zs7buMwEEBzieRcaYaB48KVisSFj7Cn4BFU2I37LVan8BFc5ABb2ICtpSSaHP5EUqOAzsIO\nAjwEGjjiZ/hEDZ+eiJ9noHxe6fHvW4BPDmwHEMAaYBdAEb+5Amu/YNlyQLgP4xGhiG9avmwvsBF/\nt/FkY2vj69NLD1f41Z6Yiw3Gvy728ceVuhLhwY8bA0fij8EgO/6wjH2pF/lKxvf3tNG3Z+BRt4oH\nh/Znt5bu+iQd+/Z/Xp8BmiO8X0X/n7KQNbWIZ1wMJjEUPwBuuI1hfcMZxv9Pj19/AexrYH84KASF\nV41nhe8Ku/4f+nSpu3eNsdadjpBLFPF6pIE76Hx4QeiMfy/yVQi/cf6mxx900jk4ScfGlc4/q9v8\nc9sPxhpN4wn3n+qepeqeAK5x/3WZfieGx+8h6Uv8DCNHeAfjv3Q8q0VjwJCesrFbP2X+7NZPidAj\nE7hAyGTSFOvnLX8erfw9YCV+BL4p7DL1gH3SNvK3Z/0Qn3HE64dn/eLifx1Fd/62eP4NVyLsJx1C\nce2bf/7mfL+Kt6UB+ivtm+YasT88u6Yi2z+M+lrpT432J4F9pw+mZOH+rP3pLP2pEzFhaiCdzESG\ncOvBO5g/peMt6d2lYo39d0ivNUvwXyE6KhVb/ssh7r8LMRAs/1XrD0DcfxfiP8DrD54/AFV0/av6\neP/6acQH/NcTr/KH6JCYCnezMOi/8v5H/be7f9N/tdNyluC/sv3V+rnWTvuxUNj/tbax81+u0fDf\nSuttOt7B/Ckd3zVvb7rafzFq6XWxifqv0f8x/2XZ+PBfw39tFb5YyPTz//z+u9P+a+KnTvoO3sH4\nLx3fiyzXTutgbxrgx8F/bdNNR+2/Uq/YuH9dLRXW60cVk14DK2P/aJkinQ7yDfZfR3pH/Feg47/5\n32/6r196/cgVDu3/liK9DgLyX2260U5vMfr9dxvBh/+i+CzptVHE73V69WOj/ddBT/53toKdTV8j\n/5vrT9b+7/eun9P2f6P+m7T/G/GPkP/m481/6xHpHcNu/PJhKFbi18SFi2DhHcyf0vHYf09Sb4ON\n/iXR9d/J/U8Zf5dZxj91/s3ovzzqv3b+IfvvSNL1o5V/belNzP8P/5XxqdLhxdn9N6ZiQf+d6n8z\n+OeP919K+5P7nzr+Ss+f0vHU/EfNv8T8T11/frr/Uv1jFv+l+Ffp8V88ng9YwTT/pz5/EPuf+vz1\nH/pv1vM39fmfvP9A3f8oPn8Kx1P336j7f8T9x//Bf4n7z6T9b+r+O9l/qe8fSs+f0vHU91/U92+z\n+m/++8d7eX869f0v9f0z+f039f176fFfOp5xWv0Htf4E9fSU+hfsv1Pqb/D4h2n1P9T6I2r9E6n+\nilr/Ra4/o9a/lZ4/peOp9ZcbYv0nsf70pXUe2rLqX19acv0ttf7XfmjOrT+2kxbE/Dd4fmZC/TW5\n/ptaf156/pSOp55/mNF/Wx8y238vD//1+++k80fk80/U81elx3/peMZp5/+o5w8b2vlH7/7viP8m\nnJ/JPf9Zev/X9oes87fYf21MOf9LPn9MPf9cdv78A0xugrwgDfcHAAAAJXRFWHRkYXRlOmNyZWF0\nZQAyMDE1LTExLTI5VDE3OjIwOjAxLTA1OjAwddLLfAAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxNS0x\nMS0yOVQxNzoyMDowMS0wNTowMASPc8AAAAAASUVORK5CYII=\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAPoAAAD6AgMAAAD1grKuAAAABGdBTUEAALGPC/xhBQAAAAFzUkdC\nAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAxQTFRF\n////chIS6YCRTb/E6kGE+wAAAAFiS0dEAIgFHUgAAAAJcEhZcwAAAEgAAABIAEbJaz4AAASWSURB\nVGje7Zs7buMwEEBzieRcaYaB48KVisSFj7Cn4BFU2I37LVan8BFc5ABb2ICtpSSaHP5EUqOAzsIO\nAjwEGjjiZ/hEDZ+eiJ9noHxe6fHvW4BPDmwHEMAaYBdAEb+5Amu/YNlyQLgP4xGhiG9avmwvsBF/\nt/FkY2vj69NLD1f41Z6Yiw3Gvy728ceVuhLhwY8bA0fij8EgO/6wjH2pF/lKxvf3tNG3Z+BRt4oH\nh/Znt5bu+iQd+/Z/Xp8BmiO8X0X/n7KQNbWIZ1wMJjEUPwBuuI1hfcMZxv9Pj19/AexrYH84KASF\nV41nhe8Ku/4f+nSpu3eNsdadjpBLFPF6pIE76Hx4QeiMfy/yVQi/cf6mxx900jk4ScfGlc4/q9v8\nc9sPxhpN4wn3n+qepeqeAK5x/3WZfieGx+8h6Uv8DCNHeAfjv3Q8q0VjwJCesrFbP2X+7NZPidAj\nE7hAyGTSFOvnLX8erfw9YCV+BL4p7DL1gH3SNvK3Z/0Qn3HE64dn/eLifx1Fd/62eP4NVyLsJx1C\nce2bf/7mfL+Kt6UB+ivtm+YasT88u6Yi2z+M+lrpT432J4F9pw+mZOH+rP3pLP2pEzFhaiCdzESG\ncOvBO5g/peMt6d2lYo39d0ivNUvwXyE6KhVb/ssh7r8LMRAs/1XrD0DcfxfiP8DrD54/AFV0/av6\neP/6acQH/NcTr/KH6JCYCnezMOi/8v5H/be7f9N/tdNyluC/sv3V+rnWTvuxUNj/tbax81+u0fDf\nSuttOt7B/Ckd3zVvb7rafzFq6XWxifqv0f8x/2XZ+PBfw39tFb5YyPTz//z+u9P+a+KnTvoO3sH4\nLx3fiyzXTutgbxrgx8F/bdNNR+2/Uq/YuH9dLRXW60cVk14DK2P/aJkinQ7yDfZfR3pH/Feg47/5\n32/6r196/cgVDu3/liK9DgLyX2260U5vMfr9dxvBh/+i+CzptVHE73V69WOj/ddBT/53toKdTV8j\n/5vrT9b+7/eun9P2f6P+m7T/G/GPkP/m481/6xHpHcNu/PJhKFbi18SFi2DhHcyf0vHYf09Sb4ON\n/iXR9d/J/U8Zf5dZxj91/s3ovzzqv3b+IfvvSNL1o5V/belNzP8P/5XxqdLhxdn9N6ZiQf+d6n8z\n+OeP919K+5P7nzr+Ss+f0vHU/EfNv8T8T11/frr/Uv1jFv+l+Ffp8V88ng9YwTT/pz5/EPuf+vz1\nH/pv1vM39fmfvP9A3f8oPn8Kx1P336j7f8T9x//Bf4n7z6T9b+r+O9l/qe8fSs+f0vHU91/U92+z\n+m/++8d7eX869f0v9f0z+f039f176fFfOp5xWv0Htf4E9fSU+hfsv1Pqb/D4h2n1P9T6I2r9E6n+\nilr/Ra4/o9a/lZ4/peOp9ZcbYv0nsf70pXUe2rLqX19acv0ttf7XfmjOrT+2kxbE/Dd4fmZC/TW5\n/ptaf156/pSOp55/mNF/Wx8y238vD//1+++k80fk80/U81elx3/peMZp5/+o5w8b2vlH7/7viP8m\nnJ/JPf9Zev/X9oes87fYf21MOf9LPn9MPf9cdv78A0xugrwgDfcHAAAAJXRFWHRkYXRlOmNyZWF0\nZQAyMDE1LTExLTMwVDIxOjAzOjIyLTA1OjAwMx3rxQAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxNS0x\nMS0zMFQyMTowMzoyMi0wNTowMEJAU3kAAAAASUVORK5CYII=\n", "text/plain": [ "" ] @@ -476,7 +489,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "As we can see from the plot, we have a nice array of pin cells with fuel, cladding, and water!" + "As we can see from the plot, we have a nice array of fuel and guide tube pin cells with fuel, cladding, and water!" ] }, { @@ -490,7 +503,7 @@ "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 a 2-group structure using the built-in `EnergyGroups` class." + "Now we are ready to generate multi-group cross sections! First, let's define a 2-group structure using the built-in `EnergyGroups` class." ] }, { @@ -530,7 +543,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Now, we must specify to the `Library` which types of cross sections to compute. In particular, the following are the multi-group cross section `MGXS` subclasses are mapped to type string codes mapped accepted by the `Library` class:\n", + "Now, we must specify to the `Library` which types of cross sections to compute. In particular, the following are the multi-group cross section `MGXS` subclasses are mapped to string codes accepted by the `Library` class:\n", "\n", "* `TotalXS` (`\"total\"`)\n", "* `TransportXS` (`\"transport\"`)\n", @@ -546,7 +559,7 @@ "\n", "In this case, let's create the multi-group cross sections needed to run an OpenMOC simulation to verify the accuracy of our cross sections. In particular, we will define `\"transport\"`, `\"nu-fission\"`, `\"nu-scatter matrix\"` and `\"chi\"` cross sections for our `Library`.\n", "\n", - "**Note**: A variety of different approximate transport-corrected total multi-group cross sections (and corresponding scattering matrices) can be found in the literature. At the present time, the `openmc.mgxs` module only supports the \"P0\" transport correction. This correction can be turned on or off through the boolean `Library.correction` property which may take values of `\"P0\"` (default) or `None`." + "**Note**: A variety of different approximate transport-corrected total multi-group cross sections (and corresponding scattering matrices) can be found in the literature. At the present time, the `openmc.mgxs` module only supports the `\"P0\"` transport correction. This correction can be turned on and off through the boolean `Library.correction` property which may take values of `\"P0\"` (default) or `None`." ] }, { @@ -558,14 +571,16 @@ "outputs": [], "source": [ "# Specify multi-group cross section types to compute\n", - "mgxs_lib.mgxs_types = [\"transport\", \"nu-fission\", \"nu-scatter matrix\", \"chi\"]" + "mgxs_lib.mgxs_types = ['transport', 'nu-fission', 'nu-scatter matrix', 'chi']" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Now we must specify the type of domain over which we would like the `Library` to compute multi-group cross sections. The domain type corresponds to the type of tally filter to be used in the tallies created to compute multi-group cross sections. At the present time, the `Library` supports `\"material,\"` `\"cell,\"` and `\"universe\"` domain types. We will use a `\"cell\"` domain type here to compute cross sections in each of the cells for our fuel and guide tube pin cells." + "Now we must specify the type of domain over which we would like the `Library` to compute multi-group cross sections. The domain type corresponds to the type of tally filter to be used in the tallies created to compute multi-group cross sections. At the present time, the `Library` supports `\"material,\"` `\"cell,\"` and `\"universe\"` domain types. We will use a `\"cell\"` domain type here to compute cross sections in each of the cells in the fuel assembly geometry.\n", + "\n", + "**Note:** By default, the `Library` class will instantiate `MGXS` objects for each and every domain (material, cell or universe) in the geometry of interest. However, one may specify a subset of these domains to the `Library.domains` property. In our case, we wish to compute multi-group cross sectoins in each and every cell since they will be needed in our downstream OpenMOC calculation on the identical combinatorial geometry mesh." ] }, { @@ -577,14 +592,17 @@ "outputs": [], "source": [ "# Specify a \"cell\" domain type for the cross section tally filters\n", - "mgxs_lib.domain_type = \"cell\"" + "mgxs_lib.domain_type = \"cell\"\n", + "\n", + "# Specify the cell domains over which to compute multi-group cross sections\n", + "mgxs_lib.domains = geometry.get_all_material_cells()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "We can easily instruct the `Library` to compute multi-group cross sections on a nuclide-by-nuclide basis as was first illustrated in MGXS: Part II with the boolean `Library.by_nuclide` property. By default, `by_nuclide` is set to `False`, but we will set it to `True` here." + "We can easily instruct the `Library` to compute multi-group cross sections on a nuclide-by-nuclide basis with the boolean `Library.by_nuclide` property. By default, `by_nuclide` is set to `False`, but we will set it to `True` here." ] }, { @@ -603,7 +621,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Lastly, we use the `Library` to construct all of the tallies needed to compute all of the requested multi-group cross sections in each domain and nuclide." + "Lastly, we use the `Library` to construct the tallies needed to compute all of the requested multi-group cross sections in each domain and nuclide." ] }, { @@ -624,7 +642,7 @@ "source": [ "The tallies can now be export to a \"tallies.xml\" input file for OpenMC. \n", "\n", - "**NOTE**: At this point the `Library` has constructed nearly 100 distinct `Tally`. The overhead to tally in OpenMC scales as $O(N)$ for $N$ tallies, which can become a bottleneck for large tally datasets. To compensate for this, the Python API's `Tally`, `Filter` and `TalliesFile` classes allow for the smart *merging* of tallies when possible. The `Library` class supports this runtime optimization with the use of the optional `merge` paramter (`False` by default) for the `Library.add_to_tallies_file(...)` method, as shown below." + "**NOTE**: At this point the `Library` has constructed nearly 100 distinct `Tally` objects. The overhead to tally in OpenMC scales as $O(N)$ for $N$ tallies, which can become a bottleneck for large tally datasets. To compensate for this, the Python API's `Tally`, `Filter` and `TalliesFile` classes allow for the smart *merging* of tallies when possible. The `Library` class supports this runtime optimization with the use of the optional `merge` paramter (`False` by default) for the `Library.add_to_tallies_file(...)` method, as shown below." ] }, { @@ -679,7 +697,7 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": null, "metadata": { "collapsed": true }, @@ -691,7 +709,7 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": null, "metadata": { "collapsed": false }, @@ -717,7 +735,7 @@ " License: http://mit-crpg.github.io/openmc/license.html\n", " Version: 0.7.0\n", " Git SHA1: c4b14a5ef87f004528d35cbf33fef3ed15a386ca\n", - " Date/Time: 2015-11-29 17:20:02\n", + " Date/Time: 2015-11-30 21:03:22\n", " MPI Processes: 1\n", "\n", " ===========================================================================\n", @@ -765,85 +783,11 @@ " 18/1 1.01476 1.02800 +/- 0.00664\n", " 19/1 1.01490 1.02655 +/- 0.00604\n", " 20/1 1.00926 1.02482 +/- 0.00567\n", - " 21/1 0.98504 1.02120 +/- 0.00627\n", - " 22/1 1.00397 1.01977 +/- 0.00591\n", - " 23/1 1.02556 1.02021 +/- 0.00545\n", - " 24/1 0.99808 1.01863 +/- 0.00529\n", - " 25/1 0.99638 1.01715 +/- 0.00514\n", - " 26/1 0.99615 1.01584 +/- 0.00499\n", - " 27/1 1.01843 1.01599 +/- 0.00469\n", - " 28/1 1.00315 1.01528 +/- 0.00447\n", - " 29/1 1.00633 1.01480 +/- 0.00426\n", - " 30/1 1.02159 1.01514 +/- 0.00405\n", - " 31/1 1.03395 1.01604 +/- 0.00396\n", - " 32/1 1.02672 1.01652 +/- 0.00381\n", - " 33/1 1.03778 1.01745 +/- 0.00375\n", - " 34/1 1.03807 1.01831 +/- 0.00369\n", - " 35/1 1.07854 1.02072 +/- 0.00428\n", - " 36/1 1.03524 1.02128 +/- 0.00415\n", - " 37/1 1.03100 1.02164 +/- 0.00401\n", - " 38/1 1.03853 1.02224 +/- 0.00391\n", - " 39/1 1.04089 1.02288 +/- 0.00383\n", - " 40/1 1.02150 1.02284 +/- 0.00370\n", - " 41/1 0.98470 1.02161 +/- 0.00379\n", - " 42/1 1.00658 1.02114 +/- 0.00370\n", - " 43/1 0.98652 1.02009 +/- 0.00373\n", - " 44/1 1.02787 1.02032 +/- 0.00363\n", - " 45/1 0.98800 1.01939 +/- 0.00364\n", - " 46/1 1.00286 1.01893 +/- 0.00357\n", - " 47/1 1.02559 1.01911 +/- 0.00348\n", - " 48/1 1.03729 1.01959 +/- 0.00342\n", - " 49/1 1.02538 1.01974 +/- 0.00333\n", - " 50/1 1.01478 1.01962 +/- 0.00325\n", - " Creating state point statepoint.50.h5...\n", - "\n", - " ===========================================================================\n", - " ======================> SIMULATION FINISHED <======================\n", - " ===========================================================================\n", - "\n", - "\n", - " =======================> TIMING STATISTICS <=======================\n", - "\n", - " Total time for initialization = 4.0000E-01 seconds\n", - " Reading cross sections = 8.4000E-02 seconds\n", - " Total time in simulation = 3.8366E+01 seconds\n", - " Time in transport only = 3.8351E+01 seconds\n", - " Time in inactive batches = 3.6930E+00 seconds\n", - " Time in active batches = 3.4673E+01 seconds\n", - " Time synchronizing fission bank = 1.0000E-03 seconds\n", - " Sampling source sites = 1.0000E-03 seconds\n", - " SEND/RECV source sites = 0.0000E+00 seconds\n", - " Time accumulating tallies = 0.0000E+00 seconds\n", - " Total time for finalization = 0.0000E+00 seconds\n", - " Total time elapsed = 3.8780E+01 seconds\n", - " Calculation Rate (inactive) = 6769.56 neutrons/second\n", - " Calculation Rate (active) = 2884.09 neutrons/second\n", - "\n", - " ============================> RESULTS <============================\n", - "\n", - " k-effective (Collision) = 1.01805 +/- 0.00261\n", - " k-effective (Track-length) = 1.01962 +/- 0.00325\n", - " k-effective (Absorption) = 1.01554 +/- 0.00339\n", - " Combined k-effective = 1.01711 +/- 0.00235\n", - " Leakage Fraction = 0.00000 +/- 0.00000\n", - "\n" + " 21/1 0.98504 1.02120 +/- 0.00627\n" ] - }, - { - "data": { - "text/plain": [ - "0" - ] - }, - "execution_count": 26, - "metadata": {}, - "output_type": "execute_result" } ], "source": [ - "# Remove old HDF5 (summary, statepoint) files\n", - "!rm statepoint.*\n", - "\n", "# Run OpenMC\n", "executor.run_simulation()" ] @@ -859,12 +803,12 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Our simulation ran successfully and created a statepoint file with all the tally data in it. We begin our analysis here loading the statepoint file and \"reading\" the results. By default, data from the statepoint file is only read into memory when it is requested. This helps keep the memory use to a minimum even when a statepoint file may be huge." + "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": 27, + "execution_count": null, "metadata": { "collapsed": false }, @@ -878,12 +822,12 @@ "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 which 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." + "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": 28, + "execution_count": null, "metadata": { "collapsed": false }, @@ -902,7 +846,7 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": null, "metadata": { "collapsed": false }, @@ -930,12 +874,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "The `Library` supports a rich API to automate a variety of tasks, including multi-group cross section data retrieval and storage. We will highlight a few of these features here. First, the `Library.get_mgxs(...)` method allows one to extract an `MGXS` object from the `Library` for a particular domain and cross section type. The following cell illustrates how one may extract the `NuFissionXS` object for the fuel cell." + "The `Library` supports a rich API to automate a variety of tasks, including multi-group cross section data retrieval and storage. We will highlight a few of these features here. First, the `Library.get_mgxs(...)` method allows one to extract an `MGXS` object from the `Library` for a particular domain and cross section type. The following cell illustrates how one may extract the `NuFissionXS` object for the fuel cell.\n", + "\n", + "**Note:** The `MGXS.get_mgxs(...)` method will accept either the domain *or* the integer domain ID of interest." ] }, { "cell_type": "code", - "execution_count": 30, + "execution_count": null, "metadata": { "collapsed": false }, @@ -949,106 +895,16 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "The `NuFissionXS` object supports all of the methods described previously the `openmc.mgxs` tutorials, such as Pandas DataFrames:" + "The `NuFissionXS` object supports all of the methods described previously the `openmc.mgxs` tutorials, such as [Pandas](http://pandas.pydata.org/) `DataFrames`:" ] }, { "cell_type": "code", - "execution_count": 31, + "execution_count": null, "metadata": { "collapsed": false }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/usr/local/lib/python2.7/dist-packages/openmc-0.7.0-py2.7.egg/openmc/mgxs/mgxs.py:1254: FutureWarning: elementwise comparison failed; returning scalar instead, but in the future will perform elementwise comparison\n" - ] - }, - { - "data": { - "text/html": [ - "
\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
cellgroup innuclidemeanstd. dev.
3100001U-2358.063513e-034.062984e-05
4100001U-2387.335515e-034.459335e-05
5100001O-160.000000e+000.000000e+00
0100002U-2353.613274e-011.902492e-03
1100002U-2386.738424e-073.536787e-09
2100002O-160.000000e+000.000000e+00
\n", - "
" - ], - "text/plain": [ - " cell group in nuclide mean std. dev.\n", - "3 10000 1 U-235 8.063513e-03 4.062984e-05\n", - "4 10000 1 U-238 7.335515e-03 4.459335e-05\n", - "5 10000 1 O-16 0.000000e+00 0.000000e+00\n", - "0 10000 2 U-235 3.613274e-01 1.902492e-03\n", - "1 10000 2 U-238 6.738424e-07 3.536787e-09\n", - "2 10000 2 O-16 0.000000e+00 0.000000e+00" - ] - }, - "execution_count": 31, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "df = fuel_mgxs.get_pandas_dataframe()\n", "df" @@ -1063,39 +919,11 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": null, "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 [cm^-1]:\n", - " Group 1 [6.25e-07 - 20.0 MeV]:\t8.06e-03 +/- 5.04e-01%\n", - " Group 2 [0.0 - 6.25e-07 MeV]:\t3.61e-01 +/- 5.27e-01%\n", - "\n", - "\tNuclide =\tU-238\n", - "\tCross Sections [cm^-1]:\n", - " Group 1 [6.25e-07 - 20.0 MeV]:\t7.34e-03 +/- 6.08e-01%\n", - " Group 2 [0.0 - 6.25e-07 MeV]:\t6.74e-07 +/- 5.25e-01%\n", - "\n", - "\tNuclide =\tO-16\n", - "\tCross Sections [cm^-1]:\n", - " Group 1 [6.25e-07 - 20.0 MeV]:\t0.00e+00 +/- nan%\n", - " Group 2 [0.0 - 6.25e-07 MeV]:\t0.00e+00 +/- nan%\n", - "\n", - "\n", - "\n" - ] - } - ], + "outputs": [], "source": [ "fuel_mgxs.print_xs()" ] @@ -1109,7 +937,7 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": null, "metadata": { "collapsed": true }, @@ -1123,32 +951,30 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "The HDF5 store will contain the numerical multi-group cross section data indexed by domain, nuclide and cross section type. Some data workflows may be optimized by storing and retrieving binary representations of the `MGXS` objects in the `Library`. This feature is supported through the `Library.dump_to_file(...)` and `Library.load_from_file(...)` routines which use Python's `pickle` module. This is illustrated as follows." + "The HDF5 store will contain the numerical multi-group cross section data indexed by domain, nuclide and cross section type. Some data workflows may be optimized by storing and retrieving binary representations of the `MGXS` objects in the `Library`. This feature is supported through the `Library.dump_to_file(...)` and `Library.load_from_file(...)` routines which use Python's [`pickle`](https://docs.python.org/2/library/pickle.html) module. This is illustrated as follows." ] }, { "cell_type": "code", - "execution_count": 34, + "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ - "# Store a complete binary representation of the Library and\n", - "# its MGXS objects in a pickled binary file \"mgxs/mgxs.pkl\"\n", + "# Store a Library and its MGXS objects in a pickled binary file \"mgxs/mgxs.pkl\"\n", "mgxs_lib.dump_to_file(filename='mgxs', directory='mgxs')" ] }, { "cell_type": "code", - "execution_count": 35, + "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ - "# Instantiate a new MGXS Library from the complete binary representation\n", - "# stored in the pickled binary file \"mgxs/mgxs.pkl\"\n", + "# Instantiate a new MGXS Library from the pickled binary file \"mgxs/mgxs.pkl\"\n", "mgxs_lib = openmc.mgxs.Library.load_from_file(filename='mgxs', directory='mgxs')" ] }, @@ -1156,12 +982,12 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "The `Library` class may be used to leverage the energy condensation features supported by the `MGXS` class and illutrated in earlier tutorials on `openmc.mgxs`. In particular, one can use the `Library.get_condensed_library(...)` with a coarse group structure which is a subset of the original \"fine\" group structure as shown below." + "The `Library` class may be used to leverage the energy condensation features supported by the `MGXS` class. In particular, one can use the `Library.get_condensed_library(...)` with a coarse group structure which is a subset of the original \"fine\" group structure as shown below." ] }, { "cell_type": "code", - "execution_count": 36, + "execution_count": null, "metadata": { "collapsed": true }, @@ -1176,67 +1002,11 @@ }, { "cell_type": "code", - "execution_count": 37, + "execution_count": null, "metadata": { "collapsed": false }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
cellgroup innuclidemeanstd. dev.
0100001U-2350.0743830.000280
1100001U-2380.0059590.000036
2100001O-160.0000000.000000
\n", - "
" - ], - "text/plain": [ - " cell group in nuclide mean std. dev.\n", - "0 10000 1 U-235 0.074383 0.000280\n", - "1 10000 1 U-238 0.005959 0.000036\n", - "2 10000 1 O-16 0.000000 0.000000" - ] - }, - "execution_count": 37, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "# Retrieve the NuFissionXS object for the fuel cell from the 1-group library\n", "coarse_fuel_mgxs = coarse_mgxs_lib.get_mgxs(fuel_cell, 'nu-fission')\n", @@ -1256,12 +1026,12 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Of course it is always a good idea to verify that one's cross sections are accurate. We can easily do so here with the deterministic transport code OpenMOC. We will extract an OpenCG geometry from the summary file and convert it into an equivalent OpenMOC geometry." + "Of course it is always a good idea to verify that one's cross sections are accurate. We can easily do so here with the deterministic transport code [OpenMOC](https://mit-crpg.github.io/OpenMOC/). We will extract an OpenCG geometry from the summary file and convert it into an equivalent OpenMOC geometry." ] }, { "cell_type": "code", - "execution_count": 38, + "execution_count": null, "metadata": { "collapsed": false }, @@ -1275,12 +1045,12 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Now, we can inject the multi-group cross sections into the equivalent fuel assembly OpenMOC geometry. The `openmoc.materialize` module is seamlessly integrated to support the loading of `Library` objects from OpenMC." + "Now, we can inject the multi-group cross sections into the equivalent fuel assembly OpenMOC geometry. The `openmoc.materialize` module supports the loading of `Library` objects from OpenMC as illustrated below." ] }, { "cell_type": "code", - "execution_count": 39, + "execution_count": null, "metadata": { "collapsed": false }, @@ -1299,143 +1069,16 @@ }, { "cell_type": "code", - "execution_count": 40, + "execution_count": null, "metadata": { "collapsed": false, "scrolled": true }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[ NORMAL ] Ray tracing for track segmentation...\n", - "[ NORMAL ] Dumping tracks to file...\n", - "[ NORMAL ] Computing the eigenvalue...\n", - "[ NORMAL ] Iteration 0:\tk_eff = 0.854316\tres = 0.000E+00\n", - "[ NORMAL ] Iteration 1:\tk_eff = 0.801593\tres = 1.522E-01\n", - "[ NORMAL ] Iteration 2:\tk_eff = 0.761131\tres = 6.380E-02\n", - "[ NORMAL ] Iteration 3:\tk_eff = 0.731467\tres = 5.066E-02\n", - "[ NORMAL ] Iteration 4:\tk_eff = 0.709897\tres = 3.910E-02\n", - "[ NORMAL ] Iteration 5:\tk_eff = 0.695110\tres = 2.954E-02\n", - "[ NORMAL ] Iteration 6:\tk_eff = 0.685966\tres = 2.085E-02\n", - "[ NORMAL ] Iteration 7:\tk_eff = 0.681511\tres = 1.317E-02\n", - "[ NORMAL ] Iteration 8:\tk_eff = 0.680926\tres = 6.520E-03\n", - "[ NORMAL ] Iteration 9:\tk_eff = 0.683509\tres = 1.046E-03\n", - "[ NORMAL ] Iteration 10:\tk_eff = 0.688659\tres = 3.848E-03\n", - "[ NORMAL ] Iteration 11:\tk_eff = 0.695860\tres = 7.565E-03\n", - "[ NORMAL ] Iteration 12:\tk_eff = 0.704674\tres = 1.048E-02\n", - "[ NORMAL ] Iteration 13:\tk_eff = 0.714726\tres = 1.269E-02\n", - "[ NORMAL ] Iteration 14:\tk_eff = 0.725700\tres = 1.428E-02\n", - "[ NORMAL ] Iteration 15:\tk_eff = 0.737329\tres = 1.537E-02\n", - "[ NORMAL ] Iteration 16:\tk_eff = 0.749388\tres = 1.604E-02\n", - "[ NORMAL ] Iteration 17:\tk_eff = 0.761690\tres = 1.637E-02\n", - "[ NORMAL ] Iteration 18:\tk_eff = 0.774081\tres = 1.643E-02\n", - "[ NORMAL ] Iteration 19:\tk_eff = 0.786432\tres = 1.628E-02\n", - "[ NORMAL ] Iteration 20:\tk_eff = 0.798638\tres = 1.597E-02\n", - "[ NORMAL ] Iteration 21:\tk_eff = 0.810618\tres = 1.553E-02\n", - "[ NORMAL ] Iteration 22:\tk_eff = 0.822303\tres = 1.501E-02\n", - "[ NORMAL ] Iteration 23:\tk_eff = 0.833643\tres = 1.443E-02\n", - "[ NORMAL ] Iteration 24:\tk_eff = 0.844598\tres = 1.380E-02\n", - "[ NORMAL ] Iteration 25:\tk_eff = 0.855140\tres = 1.315E-02\n", - "[ NORMAL ] Iteration 26:\tk_eff = 0.865249\tres = 1.249E-02\n", - "[ NORMAL ] Iteration 27:\tk_eff = 0.874914\tres = 1.183E-02\n", - "[ NORMAL ] Iteration 28:\tk_eff = 0.884128\tres = 1.118E-02\n", - "[ NORMAL ] Iteration 29:\tk_eff = 0.892891\tres = 1.054E-02\n", - "[ NORMAL ] Iteration 30:\tk_eff = 0.901206\tres = 9.920E-03\n", - "[ NORMAL ] Iteration 31:\tk_eff = 0.909080\tres = 9.320E-03\n", - "[ NORMAL ] Iteration 32:\tk_eff = 0.916523\tres = 8.745E-03\n", - "[ NORMAL ] Iteration 33:\tk_eff = 0.923546\tres = 8.194E-03\n", - "[ NORMAL ] Iteration 34:\tk_eff = 0.930162\tres = 7.669E-03\n", - "[ NORMAL ] Iteration 35:\tk_eff = 0.936387\tres = 7.171E-03\n", - "[ NORMAL ] Iteration 36:\tk_eff = 0.942236\tres = 6.698E-03\n", - "[ NORMAL ] Iteration 37:\tk_eff = 0.947725\tres = 6.252E-03\n", - "[ NORMAL ] Iteration 38:\tk_eff = 0.952869\tres = 5.830E-03\n", - "[ NORMAL ] Iteration 39:\tk_eff = 0.957687\tres = 5.433E-03\n", - "[ NORMAL ] Iteration 40:\tk_eff = 0.962193\tres = 5.060E-03\n", - "[ NORMAL ] Iteration 41:\tk_eff = 0.966404\tres = 4.710E-03\n", - "[ NORMAL ] Iteration 42:\tk_eff = 0.970337\tres = 4.381E-03\n", - "[ NORMAL ] Iteration 43:\tk_eff = 0.974006\tres = 4.073E-03\n", - "[ NORMAL ] Iteration 44:\tk_eff = 0.977426\tres = 3.785E-03\n", - "[ NORMAL ] Iteration 45:\tk_eff = 0.980613\tres = 3.515E-03\n", - "[ NORMAL ] Iteration 46:\tk_eff = 0.983580\tres = 3.264E-03\n", - "[ NORMAL ] Iteration 47:\tk_eff = 0.986341\tres = 3.029E-03\n", - "[ NORMAL ] Iteration 48:\tk_eff = 0.988908\tres = 2.809E-03\n", - "[ NORMAL ] Iteration 49:\tk_eff = 0.991293\tres = 2.605E-03\n", - "[ NORMAL ] Iteration 50:\tk_eff = 0.993509\tres = 2.415E-03\n", - "[ NORMAL ] Iteration 51:\tk_eff = 0.995566\tres = 2.238E-03\n", - "[ NORMAL ] Iteration 52:\tk_eff = 0.997475\tres = 2.073E-03\n", - "[ NORMAL ] Iteration 53:\tk_eff = 0.999246\tres = 1.920E-03\n", - "[ NORMAL ] Iteration 54:\tk_eff = 1.000888\tres = 1.777E-03\n", - "[ NORMAL ] Iteration 55:\tk_eff = 1.002409\tres = 1.645E-03\n", - "[ NORMAL ] Iteration 56:\tk_eff = 1.003818\tres = 1.522E-03\n", - "[ NORMAL ] Iteration 57:\tk_eff = 1.005123\tres = 1.408E-03\n", - "[ NORMAL ] Iteration 58:\tk_eff = 1.006331\tres = 1.302E-03\n", - "[ NORMAL ] Iteration 59:\tk_eff = 1.007450\tres = 1.203E-03\n", - "[ NORMAL ] Iteration 60:\tk_eff = 1.008484\tres = 1.112E-03\n", - "[ NORMAL ] Iteration 61:\tk_eff = 1.009440\tres = 1.028E-03\n", - "[ NORMAL ] Iteration 62:\tk_eff = 1.010324\tres = 9.496E-04\n", - "[ NORMAL ] Iteration 63:\tk_eff = 1.011141\tres = 8.771E-04\n", - "[ NORMAL ] Iteration 64:\tk_eff = 1.011897\tres = 8.100E-04\n", - "[ NORMAL ] Iteration 65:\tk_eff = 1.012594\tres = 7.478E-04\n", - "[ NORMAL ] Iteration 66:\tk_eff = 1.013238\tres = 6.903E-04\n", - "[ NORMAL ] Iteration 67:\tk_eff = 1.013833\tres = 6.371E-04\n", - "[ NORMAL ] Iteration 68:\tk_eff = 1.014382\tres = 5.879E-04\n", - "[ NORMAL ] Iteration 69:\tk_eff = 1.014889\tres = 5.424E-04\n", - "[ NORMAL ] Iteration 70:\tk_eff = 1.015357\tres = 5.004E-04\n", - "[ NORMAL ] Iteration 71:\tk_eff = 1.015789\tres = 4.615E-04\n", - "[ NORMAL ] Iteration 72:\tk_eff = 1.016187\tres = 4.255E-04\n", - "[ NORMAL ] Iteration 73:\tk_eff = 1.016554\tres = 3.923E-04\n", - "[ NORMAL ] Iteration 74:\tk_eff = 1.016892\tres = 3.617E-04\n", - "[ NORMAL ] Iteration 75:\tk_eff = 1.017204\tres = 3.333E-04\n", - "[ NORMAL ] Iteration 76:\tk_eff = 1.017492\tres = 3.072E-04\n", - "[ NORMAL ] Iteration 77:\tk_eff = 1.017757\tres = 2.831E-04\n", - "[ NORMAL ] Iteration 78:\tk_eff = 1.018001\tres = 2.608E-04\n", - "[ NORMAL ] Iteration 79:\tk_eff = 1.018226\tres = 2.403E-04\n", - "[ NORMAL ] Iteration 80:\tk_eff = 1.018433\tres = 2.213E-04\n", - "[ NORMAL ] Iteration 81:\tk_eff = 1.018624\tres = 2.038E-04\n", - "[ NORMAL ] Iteration 82:\tk_eff = 1.018800\tres = 1.877E-04\n", - "[ NORMAL ] Iteration 83:\tk_eff = 1.018962\tres = 1.728E-04\n", - "[ NORMAL ] Iteration 84:\tk_eff = 1.019110\tres = 1.591E-04\n", - "[ NORMAL ] Iteration 85:\tk_eff = 1.019248\tres = 1.465E-04\n", - "[ NORMAL ] Iteration 86:\tk_eff = 1.019374\tres = 1.348E-04\n", - "[ NORMAL ] Iteration 87:\tk_eff = 1.019490\tres = 1.241E-04\n", - "[ NORMAL ] Iteration 88:\tk_eff = 1.019597\tres = 1.142E-04\n", - "[ NORMAL ] Iteration 89:\tk_eff = 1.019695\tres = 1.051E-04\n", - "[ NORMAL ] Iteration 90:\tk_eff = 1.019786\tres = 9.670E-05\n", - "[ NORMAL ] Iteration 91:\tk_eff = 1.019869\tres = 8.895E-05\n", - "[ NORMAL ] Iteration 92:\tk_eff = 1.019946\tres = 8.183E-05\n", - "[ NORMAL ] Iteration 93:\tk_eff = 1.020016\tres = 7.528E-05\n", - "[ NORMAL ] Iteration 94:\tk_eff = 1.020081\tres = 6.922E-05\n", - "[ NORMAL ] Iteration 95:\tk_eff = 1.020141\tres = 6.368E-05\n", - "[ NORMAL ] Iteration 96:\tk_eff = 1.020195\tres = 5.857E-05\n", - "[ NORMAL ] Iteration 97:\tk_eff = 1.020246\tres = 5.385E-05\n", - "[ NORMAL ] Iteration 98:\tk_eff = 1.020292\tres = 4.954E-05\n", - "[ NORMAL ] Iteration 99:\tk_eff = 1.020335\tres = 4.553E-05\n", - "[ NORMAL ] Iteration 100:\tk_eff = 1.020374\tres = 4.185E-05\n", - "[ NORMAL ] Iteration 101:\tk_eff = 1.020410\tres = 3.848E-05\n", - "[ NORMAL ] Iteration 102:\tk_eff = 1.020443\tres = 3.537E-05\n", - "[ NORMAL ] Iteration 103:\tk_eff = 1.020474\tres = 3.253E-05\n", - "[ NORMAL ] Iteration 104:\tk_eff = 1.020502\tres = 2.989E-05\n", - "[ NORMAL ] Iteration 105:\tk_eff = 1.020527\tres = 2.746E-05\n", - "[ NORMAL ] Iteration 106:\tk_eff = 1.020551\tres = 2.526E-05\n", - "[ NORMAL ] Iteration 107:\tk_eff = 1.020573\tres = 2.319E-05\n", - "[ NORMAL ] Iteration 108:\tk_eff = 1.020593\tres = 2.134E-05\n", - "[ NORMAL ] Iteration 109:\tk_eff = 1.020611\tres = 1.960E-05\n", - "[ NORMAL ] Iteration 110:\tk_eff = 1.020628\tres = 1.800E-05\n", - "[ NORMAL ] Iteration 111:\tk_eff = 1.020643\tres = 1.652E-05\n", - "[ NORMAL ] Iteration 112:\tk_eff = 1.020657\tres = 1.518E-05\n", - "[ NORMAL ] Iteration 113:\tk_eff = 1.020670\tres = 1.398E-05\n", - "[ NORMAL ] Iteration 114:\tk_eff = 1.020682\tres = 1.283E-05\n", - "[ NORMAL ] Iteration 115:\tk_eff = 1.020693\tres = 1.178E-05\n", - "[ NORMAL ] Iteration 116:\tk_eff = 1.020704\tres = 1.083E-05\n" - ] - } - ], + "outputs": [], "source": [ "# Generate tracks for OpenMOC\n", "openmoc_geometry.initializeFlatSourceRegions()\n", - "track_generator = openmoc.TrackGenerator(openmoc_geometry, 32, 0.1)\n", + "track_generator = openmoc.TrackGenerator(openmoc_geometry, num_azim=32, spacing=0.1)\n", "track_generator.generateTracks()\n", "\n", "# Run OpenMOC\n", @@ -1452,21 +1095,11 @@ }, { "cell_type": "code", - "execution_count": 41, + "execution_count": null, "metadata": { "collapsed": false }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "openmc keff = 1.017105\n", - "openmoc keff = 1.020704\n", - "bias [pcm]: 359.8\n" - ] - } - ], + "outputs": [], "source": [ "# Print report of keff and bias with OpenMC\n", "openmoc_keff = solver.getKeff()\n", @@ -1500,12 +1133,12 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "We will conclude this tutorial by illustrating how to visualize the fission rates computed by OpenMOC and OpenMC. First, we extract OpenMC's volume-averaged fission rates from each fuel pin into a 2D 17x17 NumPy array." + "We will conclude this tutorial by illustrating how to visualize the fission rates computed by OpenMOC and OpenMC. First, we extract volume-integrated fission rates from OpenMC's mesh fission rate tally for each pin cell in the fuel assembly." ] }, { "cell_type": "code", - "execution_count": 42, + "execution_count": null, "metadata": { "collapsed": false }, @@ -1518,9 +1151,6 @@ "# Reshape array to 2D for plotting\n", "openmc_fission_rates.shape = (17,17)\n", "\n", - "# Compute volume-average rates from OpenMC's volume-integrated fission rates\n", - "openmc_fission_rates /= math.pi * fuel_outer_radius.r**2\n", - "\n", "# Normalize to the average pin power\n", "openmc_fission_rates /= np.mean(openmc_fission_rates)" ] @@ -1534,7 +1164,7 @@ }, { "cell_type": "code", - "execution_count": 43, + "execution_count": null, "metadata": { "collapsed": false }, @@ -1568,45 +1198,31 @@ }, { "cell_type": "code", - "execution_count": 44, + "execution_count": null, "metadata": { "collapsed": false }, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 44, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "# Plot OpenMC's fission rates in the left subplot\n", "fig = pylab.subplot(121)\n", "pylab.imshow(openmc_fission_rates, interpolation='none', cmap='jet')\n", - "pylab.grid()\n", "pylab.title('OpenMC Fission Rates')\n", "\n", "# Plot OpenMOC's fission rates in the right subplot\n", "fig2 = pylab.subplot(122)\n", "pylab.imshow(openmoc_fission_rates, interpolation='none', cmap='jet')\n", - "pylab.grid()\n", "pylab.title('OpenMOC Fission Rates')" ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] } ], "metadata": { diff --git a/docs/source/pythonapi/examples/images/mgxs.png b/docs/source/pythonapi/examples/images/mgxs.png new file mode 100644 index 0000000000000000000000000000000000000000..3946a5b3c6d3c28579957643f8a15507de01b98e GIT binary patch literal 54562 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

%vLND}1}pwwjk{lj&T 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%0A3-Pt4rTcE=AKUMLd$2cL5vTThF>c9x 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